[vlc-commits] stream: fold stream_text_t into stream private data

Rémi Denis-Courmont git at videolan.org
Thu Jul 23 20:09:29 CEST 2015


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Jul 23 19:24:34 2015 +0300| [099840efe3a7fa9e19dc1b4be9e7b9ca1695ad1c] | committer: Rémi Denis-Courmont

stream: fold stream_text_t into stream private data

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=099840efe3a7fa9e19dc1b4be9e7b9ca1695ad1c
---

 include/vlc_stream.h |    6 ---
 src/input/stream.c   |  108 +++++++++++++++++++++++++++-----------------------
 src/input/stream.h   |    9 -----
 3 files changed, 59 insertions(+), 64 deletions(-)

diff --git a/include/vlc_stream.h b/include/vlc_stream.h
index d76eb18..0856d7b 100644
--- a/include/vlc_stream.h
+++ b/include/vlc_stream.h
@@ -39,9 +39,6 @@ extern "C" {
  * Byte streams and byte stream filter modules interface
  */
 
-/* Opaque definition for text reader context */
-typedef struct stream_text_t stream_text_t;
-
 /**
  * stream_t definition
  */
@@ -73,9 +70,6 @@ struct stream_t
     /* Private data for module */
     stream_sys_t *p_sys;
 
-    /* Text reader state */
-    stream_text_t *p_text;
-
     /* Weak link to parent input */
     input_thread_t *p_input;
 };
diff --git a/src/input/stream.c b/src/input/stream.c
index f75bc8c..ef2a766 100644
--- a/src/input/stream.c
+++ b/src/input/stream.c
@@ -2,6 +2,7 @@
  * stream.c
  *****************************************************************************
  * Copyright (C) 1999-2004 VLC authors and VideoLAN
+ * Copyright 2008-2015 Rémi Denis-Courmont
  * $Id$
  *
  * Authors: Laurent Aimar <fenrir at via.ecp.fr>
@@ -32,43 +33,55 @@
 #include <vlc_common.h>
 #include <vlc_memory.h>
 #include <vlc_access.h>
+#include <vlc_charset.h>
 
 #include <libvlc.h>
 #include "stream.h"
 
-/****************************************************************************
- * stream_CommonNew: create an empty stream structure
- ****************************************************************************/
-stream_t *stream_CommonNew( vlc_object_t *p_obj )
+typedef struct stream_priv_t
 {
-    stream_t *s = (stream_t *)vlc_custom_create( p_obj, sizeof(*s), "stream" );
+    stream_t stream;
 
-    if( !s )
-        return NULL;
+    /* UTF-16 and UTF-32 file reading */
+    struct {
+        vlc_iconv_t   conv;
+        unsigned char char_width;
+        bool          little_endian;
+    } text;
+} stream_priv_t;
 
-    s->p_text = malloc( sizeof(*s->p_text) );
-    if( !s->p_text )
-    {
-        vlc_object_release( s );
+/**
+ * Allocates a VLC stream object
+ */
+stream_t *stream_CommonNew(vlc_object_t *parent)
+{
+    stream_priv_t *priv = vlc_custom_create(parent, sizeof (*priv), "stream");
+    if (unlikely(priv == NULL))
         return NULL;
-    }
+
+    stream_t *s = &priv->stream;
+
+    s->psz_access = NULL;
+    s->psz_path = NULL;
 
     /* UTF16 and UTF32 text file conversion */
-    s->p_text->conv = (vlc_iconv_t)(-1);
-    s->p_text->i_char_width = 1;
-    s->p_text->b_little_endian = false;
+    priv->text.conv = (vlc_iconv_t)(-1);
+    priv->text.char_width = 1;
+    priv->text.little_endian = false;
 
     return s;
 }
 
+/**
+ * Destroys a VLC stream object
+ */
 void stream_CommonDelete( stream_t *s )
 {
-    if( s->p_text )
-    {
-        if( s->p_text->conv != (vlc_iconv_t)(-1) )
-            vlc_iconv_close( s->p_text->conv );
-        free( s->p_text );
-    }
+    stream_priv_t *priv = (stream_priv_t *)s;
+
+    if (priv->text.conv != (vlc_iconv_t)(-1))
+        vlc_iconv_close(priv->text.conv);
+
     free( s->psz_access );
     free( s->psz_path );
     vlc_object_release( s );
@@ -93,9 +106,6 @@ stream_t *stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
     return stream_AccessNew( p_access );
 }
 
-/****************************************************************************
- * stream_ReadLine:
- ****************************************************************************/
 /**
  * Read from the stream untill first newline.
  * \param s Stream handle to read from
@@ -105,6 +115,7 @@ stream_t *stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
 #define STREAM_LINE_MAX (2048*100)
 char *stream_ReadLine( stream_t *s )
 {
+    stream_priv_t *priv = (stream_priv_t *)s;
     char *p_line = NULL;
     int i_line = 0, i_read = 0;
 
@@ -132,7 +143,7 @@ char *stream_ReadLine( stream_t *s )
             if( !memcmp( p_data, "\xFF\xFE", 2 ) )
             {
                 psz_encoding = "UTF-16LE";
-                s->p_text->b_little_endian = true;
+                priv->text.little_endian = true;
             }
             else if( !memcmp( p_data, "\xFE\xFF", 2 ) )
             {
@@ -143,17 +154,17 @@ char *stream_ReadLine( stream_t *s )
             if( psz_encoding != NULL )
             {
                 msg_Dbg( s, "UTF-16 BOM detected" );
-                s->p_text->i_char_width = 2;
-                s->p_text->conv = vlc_iconv_open( "UTF-8", psz_encoding );
-                if( s->p_text->conv == (vlc_iconv_t)-1 )
+                priv->text.char_width = 2;
+                priv->text.conv = vlc_iconv_open( "UTF-8", psz_encoding );
+                if( priv->text.conv == (vlc_iconv_t)-1 )
                     msg_Err( s, "iconv_open failed" );
             }
         }
 
-        if( i_data % s->p_text->i_char_width )
+        if( i_data % priv->text.char_width )
         {
             /* keep i_char_width boundary */
-            i_data = i_data - ( i_data % s->p_text->i_char_width );
+            i_data = i_data - ( i_data % priv->text.char_width );
             msg_Warn( s, "the read is not i_char_width compatible");
         }
 
@@ -161,7 +172,7 @@ char *stream_ReadLine( stream_t *s )
             break;
 
         /* Check if there is an EOL */
-        if( s->p_text->i_char_width == 1 )
+        if( priv->text.char_width == 1 )
         {
             /* UTF-8: 0A <LF> */
             psz_eol = memchr( p_data, '\n', i_data );
@@ -171,10 +182,10 @@ char *stream_ReadLine( stream_t *s )
         }
         else
         {
-            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;
+            const uint8_t *p_last = p_data + i_data - priv->text.char_width;
+            uint16_t eol = priv->text.little_endian ? 0x0A00 : 0x00A0;
 
-            assert( s->p_text->i_char_width == 2 );
+            assert( priv->text.char_width == 2 );
             psz_eol = NULL;
             /* UTF-16: 000A <LF> */
             for( const uint8_t *p = p_data; p <= p_last; p += 2 )
@@ -188,7 +199,7 @@ char *stream_ReadLine( stream_t *s )
 
             if( psz_eol == NULL )
             {   /* UTF-16: 000D <CR> */
-                eol = s->p_text->b_little_endian ? 0x0D00 : 0x00D0;
+                eol = priv->text.little_endian ? 0x0D00 : 0x00D0;
                 for( const uint8_t *p = p_data; p <= p_last; p += 2 )
                 {
                     if( U16_AT( p ) == eol )
@@ -204,12 +215,12 @@ char *stream_ReadLine( stream_t *s )
         {
             i_data = (psz_eol - (char *)p_data) + 1;
             p_line = realloc_or_free( p_line,
-                     i_line + i_data + s->p_text->i_char_width ); /* add \0 */
+                        i_line + i_data + priv->text.char_width ); /* add \0 */
             if( !p_line )
                 goto error;
             i_data = stream_Read( s, &p_line[i_line], i_data );
             if( i_data <= 0 ) break; /* Hmmm */
-            i_line += i_data - s->p_text->i_char_width; /* skip \n */;
+            i_line += i_data - priv->text.char_width; /* skip \n */;
             i_read += i_data;
 
             /* We have our line */
@@ -218,7 +229,7 @@ char *stream_ReadLine( stream_t *s )
 
         /* Read data (+1 for easy \0 append) */
         p_line = realloc_or_free( p_line,
-                       i_line + STREAM_PROBE_LINE + s->p_text->i_char_width );
+                          i_line + STREAM_PROBE_LINE + priv->text.char_width );
         if( !p_line )
             goto error;
         i_data = stream_Read( s, &p_line[i_line], STREAM_PROBE_LINE );
@@ -232,13 +243,10 @@ char *stream_ReadLine( stream_t *s )
 
     if( i_read > 0 )
     {
-        int j;
-        for( j = 0; j < s->p_text->i_char_width; j++ )
-        {
-            p_line[i_line + j] = '\0';
-        }
-        i_line += s->p_text->i_char_width; /* the added \0 */
-        if( s->p_text->i_char_width > 1 )
+        memset(p_line + i_line, 0, priv->text.char_width);
+        i_line += priv->text.char_width; /* the added \0 */
+
+        if( priv->text.char_width > 1 )
         {
             int i_new_line = 0;
             size_t i_in = 0, i_out = 0;
@@ -257,7 +265,7 @@ char *stream_ReadLine( stream_t *s )
             p_in = p_line;
             p_out = psz_new_line;
 
-            if( vlc_iconv( s->p_text->conv, &p_in, &i_in, &p_out, &i_out ) == (size_t)-1 )
+            if( vlc_iconv( priv->text.conv, &p_in, &i_in, &p_out, &i_out ) == (size_t)-1 )
             {
                 msg_Err( s, "iconv failed" );
                 msg_Dbg( s, "original: %d, in %d, out %d", i_line, (int)i_in, (int)i_out );
@@ -282,9 +290,11 @@ error:
     free( p_line );
 
     /* */
-    if( s->p_text->conv != (vlc_iconv_t)(-1) )
-        vlc_iconv_close( s->p_text->conv );
-    s->p_text->conv = (vlc_iconv_t)(-1);
+    if( priv->text.conv != (vlc_iconv_t)(-1) )
+    {
+        vlc_iconv_close( priv->text.conv );
+        priv->text.conv = (vlc_iconv_t)(-1);
+    }
     return NULL;
 }
 
diff --git a/src/input/stream.h b/src/input/stream.h
index fba88eb..5340078 100644
--- a/src/input/stream.h
+++ b/src/input/stream.h
@@ -27,15 +27,6 @@
 
 #include <vlc_common.h>
 #include <vlc_stream.h>
-#include <vlc_charset.h>
-
-struct stream_text_t
-{
-    /* UTF-16 and UTF-32 file reading */
-    vlc_iconv_t     conv;
-    int             i_char_width;
-    bool            b_little_endian;
-};
 
 /* */
 stream_t *stream_CommonNew( vlc_object_t * );



More information about the vlc-commits mailing list