]> git.sesse.net Git - vlc/commitdiff
Fix utf8_readdir usage
authorRémi Denis-Courmont <rem@videolan.org>
Tue, 21 Aug 2007 18:02:43 +0000 (18:02 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Tue, 21 Aug 2007 18:02:43 +0000 (18:02 +0000)
modules/control/http/util.c
modules/demux/mkv.cpp
modules/gui/ncurses.c
src/text/unicode.c

index fd700a4c6e488e74c49484667d528188b95edfa2..f1d315cff871e9a9cf23bbb901011e21b67f308c 100644 (file)
@@ -149,7 +149,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root,
 
     msg_Dbg( p_intf, "dir=%s", psz_dir );
 
-    sprintf( dir, "%s%c.access", psz_dir, sep );
+    snprintf( dir, sizeof( dir ), "%s%c.access", psz_dir, sep );
     if( ( file = utf8_fopen( dir, "r" ) ) != NULL )
     {
         char line[1024];
@@ -183,7 +183,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root,
         fclose( file );
     }
 
-    sprintf( dir, "%s%c.hosts", psz_dir, sep );
+    snprintf( dir, sizeof( dir ), "%s%c.hosts", psz_dir, sep );
     p_acl = ACL_Create( p_intf, VLC_FALSE );
     if( ACL_LoadFile( p_acl, dir ) )
     {
@@ -193,7 +193,7 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root,
 
     for( ;; )
     {
-        const char *psz_filename;
+        char *psz_filename;
         /* parse psz_src dir */
         if( ( psz_filename = utf8_readdir( p_dir ) ) == NULL )
         {
@@ -202,10 +202,13 @@ int E_(ParseDirectory)( intf_thread_t *p_intf, char *psz_root,
 
         if( ( psz_filename[0] == '.' )
          || ( i_dirlen + strlen( psz_filename ) > MAX_DIR_SIZE ) )
+        {
+            free( psz_filename );
             continue;
+        }
 
-        sprintf( dir, "%s%c%s", psz_dir, sep, psz_filename );
-        free( (char*) psz_filename );
+        snprintf( dir, sizeof( dir ), "%s%c%s", psz_dir, sep, psz_filename );
+        free( psz_filename );
 
         if( E_(ParseDirectory)( p_intf, psz_root, dir ) )
         {
index bbfab5da06853d8b262b539a11ced6d259cf3b5c..891701707a291d2ad21cb44d06beba8f5104cbdc 100644 (file)
@@ -1532,7 +1532,10 @@ static int Open( vlc_object_t * p_this )
 #else
                         if (!s_filename.compare(p_demux->psz_path))
 #endif
+                        {
+                            free (psz_file);
                             continue; // don't reuse the original opened file
+                        }
 
 #if defined(__GNUC__) && (__GNUC__ < 3)
                         if (!s_filename.compare("mkv", s_filename.length() - 3, 3) ||
index a7abf9a35de2877015f21f19265eb6b468c76f38..89e32849d069a9f099423c0a5f51a23e2d3cd7b6 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
+#include <vlc/vlc.h>
+
 #include <errno.h>                                                 /* ENOMEM */
 #include <time.h>
 
 #include <curses.h>
 
-#include <vlc/vlc.h>
 #include <vlc_interface.h>
 #include <vlc_vout.h>
 #include <vlc_aout.h>
@@ -1927,11 +1928,8 @@ static void ReadDir( intf_thread_t *p_intf )
         p_sys->pp_dir_entries = NULL;
         p_sys->i_dir_entries = 0;
 
-        /* get the first directory entry */
-        psz_entry = utf8_readdir( p_current_dir );
-
         /* while we still have entries in the directory */
-        while( psz_entry != NULL )
+        while( ( psz_entry = utf8_readdir( p_current_dir ) ) != NULL )
         {
 #if defined( S_ISDIR )
             struct stat stat_data;
@@ -1946,7 +1944,6 @@ static void ReadDir( intf_thread_t *p_intf )
                 strcmp( psz_entry, ".." ) )
             {
                 free( psz_entry );
-                psz_entry = utf8_readdir( p_current_dir );
                 continue;
             }
 
@@ -1955,13 +1952,14 @@ static void ReadDir( intf_thread_t *p_intf )
 
             if( !( p_dir_entry = malloc( sizeof( struct dir_entry_t) ) ) )
             {
-                free( psz_uri);
-                return;
+                free( psz_uri );
+                free( psz_entry );
+                continue;
             }
 
 #if defined( S_ISDIR )
-            utf8_stat( psz_uri, &stat_data );
-            if( S_ISDIR(stat_data.st_mode) )
+            if( !utf8_stat( psz_uri, &stat_data )
+             && S_ISDIR(stat_data.st_mode) )
 /*#elif defined( DT_DIR )
             if( p_dir_content->d_type & DT_DIR )*/
 #else
@@ -1983,8 +1981,6 @@ static void ReadDir( intf_thread_t *p_intf )
 
             free( psz_uri );
             free( psz_entry );
-            /* Read next entry */
-            psz_entry = utf8_readdir( p_current_dir );
         }
 
         /* Sort */
index bfd51b9e4c5bc4bec7beecf3cb2f8c7d262c1a3d..e1c32612dee4c5952561a521b42cc8c2c608cd96 100644 (file)
@@ -416,7 +416,7 @@ DIR *utf8_opendir( const char *dirname )
  *
  * @param dir The directory that is being read
  *
- * @return a UTF-8 string of the directory entry. Use LocaleFree() to free this memory
+ * @return a UTF-8 string of the directory entry. Use free() to free this memory.
  */
 char *utf8_readdir( DIR *dir )
 {