unc-paths-current-directory-20040727
authorJeffrey Altman <jaltman@mit.edu>
Wed, 28 Jul 2004 04:54:19 +0000 (04:54 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 28 Jul 2004 04:54:19 +0000 (04:54 +0000)
fix the handling of unc paths in pioctl calls when the current directory
is the unc path.  (not likely to be the case with cmd.exe since it does
not support pure unc path environments.  4nt.exe shows the problem though.)

src/sys/pioctl_nt.c

index 3bed377..a03117c 100644 (file)
@@ -309,8 +309,24 @@ fs_GetFullPath(char *pathp, char *outPathp, long outSize)
     GetCurrentDirectory(sizeof(tpath), tpath);
        if (tpath[1] == ':')
            strcpy(outPathp, tpath + 2);        /* skip drive letter */
-       else
-               strcpy(outPathp, tpath);                /* copy entire UNC path */
+       else if ( tpath[0] == '\\' && tpath[1] == '\\') {
+        /* UNC path - strip off the server and sharename */
+        int i, count;
+        for ( i=2,count=2; count < 4 && tpath[i]; i++ ) {
+            if ( tpath[i] == '\\' || tpath[i] == '/' ) {
+                count++;
+            }
+        }
+        if ( tpath[i] == 0 ) {
+            strcpy(outPathp,"\\");
+        } else {
+            strcpy(outPathp,&tpath[--i]);
+        }
+    } else {
+        /* this should never happen */
+        strcpy(outPathp, tpath);
+    }
+
     /* if there is a non-null name after the drive, append it */
     if (*firstp != 0) {
                int len = strlen(outPathp);