From: RĂ©mi Denis-Courmont Date: Wed, 17 Feb 2010 20:37:36 +0000 (+0200) Subject: stream_ReadLine: handle MacOS-style end-of-line (fixes #2156) X-Git-Tag: 1.1.0-pre1~865 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=5af0a5d418c0be1c83e5df434ab9d34ae27d41c0;p=vlc stream_ReadLine: handle MacOS-style end-of-line (fixes #2156) --- diff --git a/src/input/stream.c b/src/input/stream.c index d068986298..00cd28eb20 100644 --- a/src/input/stream.c +++ b/src/input/stream.c @@ -1567,33 +1567,38 @@ char *stream_ReadLine( stream_t *s ) { /* UTF-8: 0A */ psz_eol = memchr( p_data, '\n', i_data ); + if( psz_eol == NULL ) + /* UTF-8: 0D */ + psz_eol = memchr( p_data, '\r', i_data ); } else { - const uint8_t *p = p_data; - const uint8_t *p_last = p + i_data - s->p_text->i_char_width; + const uint8_t *p_last = p_data + i_data - s->p_text->i_char_width; + uint16_t eol = s->p_text->b_little_endian ? 0x0A00 : 0x00A0; assert( s->p_text->i_char_width == 2 ); - if( s->p_text->b_little_endian == true) + psz_eol = NULL; + /* UTF-16: 000A */ + for( const uint8_t *p = p_data; p <= p_last; p += 2 ) { - /* UTF-16LE: 0A 00 */ - while( p <= p_last && ( p[0] != 0x0A || p[1] != 0x00 ) ) - p += 2; - } - else - { - /* UTF-16BE: 00 0A */ - while( p <= p_last && ( p[1] != 0x0A || p[0] != 0x00 ) ) - p += 2; + if( U16_AT( p ) == eol ) + { + psz_eol = (char *)p + 1; + break; + } } - if( p > p_last ) - { - psz_eol = NULL; - } - else - { - psz_eol = (char *)p + 1; + if( psz_eol == NULL ) + { /* UTF-16: 000D */ + eol = s->p_text->b_little_endian ? 0x0D00 : 0x00D0; + for( const uint8_t *p = p_data; p <= p_last; p += 2 ) + { + if( U16_AT( p ) == eol ) + { + psz_eol = (char *)p + 1; + break; + } + } } }