- Fixed _(w)splitpath.
authorHartmut Birr <osexpert@googlemail.com>
Thu, 7 Aug 2003 09:04:10 +0000 (09:04 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Thu, 7 Aug 2003 09:04:10 +0000 (09:04 +0000)
svn path=/trunk/; revision=5451

reactos/lib/msvcrt/stdlib/splitp.c
reactos/lib/msvcrt/stdlib/wsplitp.c
reactos/lib/ntdll/stdlib/splitp.c

index e74018d..229868a 100644 (file)
@@ -12,40 +12,41 @@ void _splitpath(const char* path, char* drive, char* dir, char* fname, char* ext
     char* tmp_ext;
 
     tmp_drive = (char*)strchr(path,':');
-    if ( tmp_drive != (char*)NULL ) {
-        strncpy(drive,tmp_drive-1,1);
-        *(drive+1) = 0;
+    if (drive) {
+       if (tmp_drive) {
+           strncpy(drive,tmp_drive-1,2);
+           *(drive+2) = 0;
+       } else {
+           *drive = 0;
+       }
     }
-    else {
-        *drive = 0;
-        tmp_drive = (char*)path;
+    if (!tmp_drive) {
+       tmp_drive = (char*)path - 1;
     }
 
     tmp_dir = (char*)strrchr(path,'\\');
-//    if( tmp_dir != NULL && tmp_dir != tmp_drive + 1 ) {
-    if( tmp_dir != NULL ) {
-        strncpy(dir,tmp_drive+1,tmp_dir - tmp_drive);
-        *(dir + (tmp_dir - tmp_drive)) = 0;
+    if (dir) {
+       if (tmp_dir) {
+           strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
+            *(dir+(tmp_dir-tmp_drive)) = 0;
+       } else {
+           *dir =0;
+       }
     }
-    else
-        *dir =0;
 
-    tmp_ext = ( char* )strrchr(path,'.');
-    if ( tmp_ext != NULL ) {
-        strcpy(ext,tmp_ext);
-    }
-    else
-    {
-        *ext = 0;
-        tmp_ext = (char*)path+strlen(path);
+    tmp_ext = (char*)strrchr(path,'.');
+    if (!tmp_ext) {
+       tmp_ext = (char*)path+strlen(path);
     }
-    if ( tmp_dir != NULL ) {
-        strncpy(fname,tmp_dir+1,tmp_ext - tmp_dir - 1);
-        *(fname + (tmp_ext - tmp_dir -1)) = 0;
+    if (ext) {
+        strcpy(ext,tmp_ext);
     }
-    else
-    {
-        strncpy(fname,path,tmp_ext - path);
+
+    if (tmp_dir) {
+        strncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
+        *(fname+(tmp_ext-tmp_dir-1)) = 0;
+    } else {
+        strncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
         *(fname+(tmp_ext-path))=0;
     }
 }
index 1e70c9f..07f72d0 100644 (file)
@@ -12,40 +12,40 @@ void _wsplitpath(const wchar_t* path, wchar_t* drive, wchar_t* dir, wchar_t* fna
     wchar_t* tmp_ext;
 
     tmp_drive = (wchar_t*)wcschr(path,L':');
-    if ( tmp_drive != (wchar_t*)NULL ) {
-        wcsncpy(drive,tmp_drive-1,1);
-        *(drive+1) = 0;
+    if (drive) {
+       if (tmp_drive) {
+           wcsncpy(drive,tmp_drive-1,2);
+           *(drive+2) = 0;
+       } else {
+           *drive = 0;
+       }
     }
-    else {
-        *drive = 0;
-        tmp_drive = (wchar_t*)path;
+    if (!tmp_drive) {
+       tmp_drive = (wchar_t*)path - 1;
     }
 
     tmp_dir = (wchar_t*)wcsrchr(path,L'\\');
-    if( tmp_dir != NULL && tmp_dir != tmp_drive + 1 ) {
-        wcsncpy(dir,tmp_drive+1,tmp_dir - tmp_drive);
-        *(dir + (tmp_dir - tmp_drive)) = 0;
+    if (dir) {
+       if (tmp_dir) {
+           wcsncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
+            *(dir+(tmp_dir-tmp_drive)) = 0;
+       } else
+           *dir =0;
     }
-    else
-        *dir =0;
 
     tmp_ext = (wchar_t*)wcsrchr(path,L'.');
-    if ( tmp_ext != NULL ) {
-        wcscpy(ext,tmp_ext);
+    if (!tmp_ext) {
+       tmp_ext = (wchar_t*)path+wcslen(path);
     }
-    else
-    {
-        *ext = 0;
-        tmp_ext = (wchar_t*)path+wcslen(path);
+    if (ext) {
+        wcscpy(ext,tmp_ext);
     }
 
-    if ( tmp_dir != NULL ) {
-        wcsncpy(fname,tmp_dir+1,tmp_ext - tmp_dir - 1);
-        *(fname + (tmp_ext - tmp_dir -1)) = 0;
-    }
-    else
-    {
-        wcsncpy(fname,path,tmp_ext - path);
+    if (tmp_dir) {
+        wcsncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
+        *(fname+(tmp_ext-tmp_dir-1)) = 0;
+    } else {
+        wcsncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
         *(fname+(tmp_ext-path))=0;
     }
 }
index 5360d06..6314129 100644 (file)
@@ -4,44 +4,49 @@
 /*
  * @implemented
  */
-void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext )
+void _splitpath(const char* path, char* drive, char* dir, char* fname, char* ext)
 {
-       char *tmp_drive;
-       char *tmp_dir;
-       char *tmp_ext;
+    char* tmp_drive;
+    char* tmp_dir;
+    char* tmp_ext;
 
-       tmp_drive = (char *)strchr(path,':');
-       if ( tmp_drive != (char *)NULL ) {
-               strncpy(drive,tmp_drive-1,1);
-               *(drive+1) = 0;
-       }
-       else {
-               *drive = 0; 
-               tmp_drive = (char *)path;
+    tmp_drive = (char*)strchr(path,':');
+    if (drive) {
+       if (tmp_drive) {
+           strncpy(drive,tmp_drive-1,2);
+           *(drive+2) = 0;
+       } else {
+           *drive = 0;
        }
+    }
+    if (!tmp_drive) {
+       tmp_drive = (char*)path - 1;
+    }
 
-       tmp_dir = (char *)strrchr(path,'\\');
-//     if( tmp_dir != NULL && tmp_dir != tmp_drive + 1 )
-       if( tmp_dir != NULL )
-       {
-               strncpy(dir,tmp_drive+1,tmp_dir - tmp_drive);
-               *(dir + (tmp_dir - tmp_drive)) = 0;
+    tmp_dir = (char*)strrchr(path,'\\');
+    if (dir) {
+       if (tmp_dir) {
+           strncpy(dir,tmp_drive+1,tmp_dir-tmp_drive);
+            *(dir+(tmp_dir-tmp_drive)) = 0;
+       } else {
+           *dir =0;
        }
-       else    
-               *dir =0;
+    }
 
-       tmp_ext = ( char *)strrchr(path,'.');
-       if ( tmp_ext != NULL ) {
-               strcpy(ext,tmp_ext);
-       }
-       else
-               *ext = 0; 
-    if ( tmp_dir != NULL ) {
-               strncpy(fname,tmp_dir+1,tmp_ext - tmp_dir - 1);
-               *(fname + (tmp_ext - tmp_dir -1)) = 0;
-       }
-       else
-               strncpy(fname,path,tmp_ext - path);
+    tmp_ext = (char*)strrchr(path,'.');
+    if (!tmp_ext) {
+       tmp_ext = (char*)path+strlen(path);
+    }
+    if (ext) {
+        strcpy(ext,tmp_ext);
+    }
 
+    if (tmp_dir) {
+        strncpy(fname,tmp_dir+1,tmp_ext-tmp_dir-1);
+        *(fname+(tmp_ext-tmp_dir-1)) = 0;
+    } else {
+        strncpy(fname,tmp_drive+1,tmp_ext-tmp_drive-1);
+        *(fname+(tmp_ext-path))=0;
+    }
 }