]> git.sesse.net Git - vlc/blobdiff - src/input/stream.c
access: info.i_size -> control(ACCESS_GET_SIZE)
[vlc] / src / input / stream.c
index 16965ba7601c4aaf2990d7c750327de6df0bd942..8283434837091c4ef3dce2eba7e59974f380f3af 100644 (file)
@@ -318,7 +318,7 @@ stream_t *stream_AccessNew( access_t *p_access, char **ppsz_list )
         if( !p_entry )
             goto error;
 
-        p_entry->i_size = p_access->info.i_size;
+        p_entry->i_size = access_GetSize( p_access );
         p_entry->psz_path = strdup( p_access->psz_location );
         if( !p_entry->psz_path )
         {
@@ -328,7 +328,7 @@ stream_t *stream_AccessNew( access_t *p_access, char **ppsz_list )
         p_sys->p_list_access = p_access;
         TAB_APPEND( p_sys->i_list, p_sys->list, p_entry );
         msg_Dbg( p_access, "adding file `%s', (%"PRId64" bytes)",
-                 p_entry->psz_path, p_access->info.i_size );
+                 p_entry->psz_path, p_entry->i_size );
 
         for( int i = 0; ppsz_list[i] != NULL; i++ )
         {
@@ -342,15 +342,14 @@ stream_t *stream_AccessNew( access_t *p_access, char **ppsz_list )
             if( !p_tmp )
                 continue;
 
-            msg_Dbg( p_access, "adding file `%s', (%"PRId64" bytes)",
-                     psz_name, p_tmp->info.i_size );
-
             p_entry = malloc( sizeof(*p_entry) );
             if( p_entry )
             {
-                p_entry->i_size = p_tmp->info.i_size;
+                p_entry->i_size = access_GetSize( p_tmp );
                 p_entry->psz_path = psz_name;
                 TAB_APPEND( p_sys->i_list, p_sys->list, p_entry );
+                msg_Dbg( p_access, "adding file `%s', (%"PRId64" bytes)",
+                         p_entry->psz_path, p_entry->i_size );
             }
             access_Delete( p_tmp );
         }
@@ -549,7 +548,6 @@ static int AStreamControl( stream_t *s, int i_query, va_list args )
     access_t     *p_access = p_sys->p_access;
 
     uint64_t *pi_64, i_64;
-    int      i_int;
 
     switch( i_query )
     {
@@ -563,14 +561,17 @@ static int AStreamControl( stream_t *s, int i_query, va_list args )
                     *pi_64 += s->p_sys->list[i]->i_size;
                 break;
             }
-            *pi_64 = p_access->info.i_size;
+            *pi_64 = access_GetSize( p_access );
             break;
 
         case STREAM_CAN_SEEK:
             return access_vaControl( p_access, ACCESS_CAN_SEEK, args );
-
         case STREAM_CAN_FASTSEEK:
             return access_vaControl( p_access, ACCESS_CAN_FASTSEEK, args );
+        case STREAM_CAN_PAUSE:
+            return access_vaControl( p_access, ACCESS_CAN_PAUSE, args );
+        case STREAM_CAN_CONTROL_PACE:
+            return access_vaControl( p_access, ACCESS_CAN_CONTROL_PACE, args );
 
         case STREAM_GET_POSITION:
             pi_64 = va_arg( args, uint64_t * );
@@ -592,32 +593,47 @@ static int AStreamControl( stream_t *s, int i_query, va_list args )
 
         case STREAM_CONTROL_ACCESS:
         {
-            i_int = (int) va_arg( args, int );
+            int i_int = (int) va_arg( args, int );
             if( i_int != ACCESS_SET_PRIVATE_ID_STATE &&
                 i_int != ACCESS_SET_PRIVATE_ID_CA &&
-                i_int != ACCESS_GET_PRIVATE_ID_STATE &&
-                i_int != ACCESS_SET_TITLE &&
-                i_int != ACCESS_SET_SEEKPOINT )
+                i_int != ACCESS_GET_PRIVATE_ID_STATE )
             {
                 msg_Err( s, "Hey, what are you thinking ?"
                             "DON'T USE STREAM_CONTROL_ACCESS !!!" );
                 return VLC_EGENERIC;
             }
-            int i_ret = access_vaControl( p_access, i_int, args );
-            if( i_int == ACCESS_SET_TITLE || i_int == ACCESS_SET_SEEKPOINT )
-                AStreamControlReset( s );
-            return i_ret;
+            return access_vaControl( p_access, i_int, args );
         }
 
         case STREAM_UPDATE_SIZE:
             AStreamControlUpdate( s );
             return VLC_SUCCESS;
 
+        case STREAM_GET_TITLE_INFO:
+            return access_vaControl( p_access, ACCESS_GET_TITLE_INFO, args );
+        case STREAM_GET_META:
+            return access_vaControl( p_access, ACCESS_GET_META, args );
         case STREAM_GET_CONTENT_TYPE:
             return access_vaControl( p_access, ACCESS_GET_CONTENT_TYPE, args );
+        case STREAM_GET_SIGNAL:
+            return access_vaControl( p_access, ACCESS_GET_SIGNAL, args );
 
         case STREAM_SET_PAUSE_STATE:
             return access_vaControl( p_access, ACCESS_SET_PAUSE_STATE, args );
+        case STREAM_SET_TITLE:
+        {
+            int ret = access_vaControl( p_access, ACCESS_SET_TITLE, args );
+            if( ret == VLC_SUCCESS )
+                AStreamControlReset( s );
+            return ret;
+        }
+        case STREAM_SET_SEEKPOINT:
+        {
+            int ret = access_vaControl( p_access, ACCESS_SET_SEEKPOINT, args );
+            if( ret == VLC_SUCCESS )
+                AStreamControlReset( s );
+            return ret;
+        }
 
         case STREAM_SET_RECORD_STATE:
         default:
@@ -1455,7 +1471,7 @@ char *stream_ReadLine( stream_t *s )
     char *p_line = NULL;
     int i_line = 0, i_read = 0;
 
-    while( i_read < STREAM_LINE_MAX )
+    for( ;; )
     {
         char *psz_eol;
         const uint8_t *p_data;
@@ -1568,6 +1584,9 @@ char *stream_ReadLine( stream_t *s )
         if( i_data <= 0 ) break; /* Hmmm */
         i_line += i_data;
         i_read += i_data;
+
+        if( i_read >= STREAM_LINE_MAX )
+            goto error; /* line too long */
     }
 
     if( i_read > 0 )