]> git.sesse.net Git - vlc/commitdiff
modules/access/http.c:
authorDerk-Jan Hartman <hartman@videolan.org>
Wed, 30 Apr 2003 04:13:12 +0000 (04:13 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Wed, 30 Apr 2003 04:13:12 +0000 (04:13 +0000)
modules/access/ftp.c:
* fixed a very serious bug in the atoll code. this contained a never ending while loop.
  It showed on systems without atoll() (MacOSX) as an inability to view http
  and ftp streams.

modules/access/ftp.c
modules/access/http.c

index 6120fe95f2ceb0e30defc12d51488ccfc7ae85a4..f4f04954f75bdf0056e19b83b901cd42978454e6 100644 (file)
@@ -2,7 +2,7 @@
  * ftp.c:
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
- * $Id: ftp.c,v 1.14 2003/03/30 18:14:35 gbazin Exp $
+ * $Id: ftp.c,v 1.15 2003/04/30 04:13:12 hartman Exp $
  *
  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  *
@@ -340,15 +340,20 @@ static int Open( vlc_object_t *p_this )
     {
         int64_t i_size = 0;
         char    *psz_parser = psz_arg + 4;
+       int     sign = 1;
 
-        while( *psz_parser == ' ' ) psz_parser++;
+        while( *psz_parser == ' ' || *psz_parser == '\t' ) psz_parser++;
 
-        while( psz_parser[0] >= '0' && psz_parser[0] <= '9' )
+        if( *psz_parser == '-' )
+            sign = -1;
+        while( *psz_parser != '\0' )
         {
-            i_size *= 10;
-            i_size += psz_parser[0] - '0';
+            if( *psz_parser >= '0' && *psz_parser <= '9' )
+                i_size = i_size *10 + *psz_parser++ - '0';
+            else
+                psz_parser++;
         }
-        p_access->i_filesize = i_size;
+        p_access->i_filesize = i_size * sign;
     }
 #endif
 
index 4fb998cf2cda3215415a011b71dd0e410988aeb3..5871e28b178d2f1264c5d7b46e19e0e98dfdccc1 100644 (file)
@@ -2,7 +2,7 @@
  * http.c: HTTP access plug-in
  *****************************************************************************
  * Copyright (C) 2001, 2002 VideoLAN
- * $Id: http.c,v 1.32 2003/03/30 18:14:35 gbazin Exp $
+ * $Id: http.c,v 1.33 2003/04/30 04:13:12 hartman Exp $
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -306,13 +306,22 @@ static int HTTPConnect( input_thread_t * p_input, off_t i_tell )
 #ifdef HAVE_ATOLL
             i_size = i_tell + atoll( psz_value );
 #else
+            int sign = 1;
             psz_parser = psz_value;
-            while( psz_parser[0] >= '0' && psz_parser[0] <= '9' )
+            
+            while( *psz_value == ' ' || *psz_value == '\t' )
+                psz_value++;
+
+            if( *psz_value == '-' )
+                sign = -1;
+            while( *psz_value != '\0')
             {
-                i_size *= 10;
-                i_size += psz_parser[0] - '0';
+                if( *psz_value >= '0' && *psz_value <= '9' )
+                    i_size = i_size * 10 + *psz_value++ - '0';
+                else
+                    psz_value++;
             }
-            i_size += i_tell;
+            i_size = i_tell + ( i_size * sign );
 #endif
             msg_Dbg( p_input, "stream size is "I64Fd, i_size );