]> git.sesse.net Git - vlc/commitdiff
Win32: canonicalize path separator, avoid isalpha(), remove dead code
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 5 Apr 2009 16:30:30 +0000 (19:30 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 5 Apr 2009 16:30:30 +0000 (19:30 +0300)
In principle, isalpha() depends on the locale. As for directory
traversal, we should either add a boolean, or fix it manually in the
caller (on a case-by-case basis).

src/text/strings.c

index 71caaaa8e2cbd14132f3f70c4b415f01fdc4c371..8a0229ce20ccb5e7b56546ffe5e87efd2841cd2a 100644 (file)
@@ -1100,16 +1100,10 @@ char* filename_sanitize( const char *str_origin )
  */
 void path_sanitize( char *str )
 {
-#if 0
-    /*
-     * Uncomment the two blocks to prevent /../ or /./, i'm not sure that we
-     * want to.
-     */
-    char *prev = str - 1;
-#endif
 #ifdef WIN32
     /* check drive prefix if path is absolute */
-    if( isalpha(*str) && (':' == *(str+1)) )
+    if( (((unsigned char)(str[0] - 'A') < 26)
+      || ((unsigned char)(str[0] - 'a') < 26)) && (':' == str[1]) )
         str += 2;
 #endif
     while( *str )
@@ -1118,36 +1112,10 @@ void path_sanitize( char *str )
         if( *str == ':' )
             *str = '_';
 #elif defined( WIN32 )
-        switch( *str )
-        {
-            case '*':
-            case '"':
-            case '?':
-            case ':':
-            case '|':
-            case '<':
-            case '>':
-                *str = '_';
-        }
-#endif
-#if 0
-        if( *str == '/'
-#ifdef WIN32
-            || *str == '\\'
-#endif
-            )
-        {
-            if( str - prev == 2 && prev[1] == '.' )
-            {
-                prev[1] = '.';
-            }
-            else if( str - prev == 3 && prev[1] == '.' && prev[2] == '.' )
-            {
-                prev[1] = '_';
-                prev[2] = '_';
-            }
-            prev = str;
-        }
+        if( strchr( "*\"?:|<>", *str ) )
+            *str = '_';
+        if( *str == '/' )
+            *str = DIR_SEP_CHAR;
 #endif
         str++;
     }