Windows: Fix GetIoctlHandle path construction
authorJeffrey Altman <jaltman@your-file-system.com>
Sat, 12 Feb 2011 16:52:12 +0000 (11:52 -0500)
committerJeffrey Altman <jaltman@openafs.org>
Sat, 12 Feb 2011 19:25:22 +0000 (11:25 -0800)
GetIoctlHandle() is used to construct the magic pioctl file
path used to initiate pioctl operations with the cache manager.
The first error introduced double directory separators.  The
second error was testing an uninitialized value which could
have resulted in a missing directory separator.

Change-Id: I4e863b854ea12b69858be712455dc6b6a0d36c39
Reviewed-on: http://gerrit.openafs.org/3925
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>

src/sys/pioctl_nt.c

index fee3ded..5e60602 100644 (file)
@@ -642,10 +642,10 @@ GetIoctlHandle(char *fileNamep, HANDLE * handlep)
                     count++;
                i++;
             }
-            if (fileNamep[i] == 0)
+            if (fileNamep[i] == 0 || (fileNamep[i-1] != '\\' && fileNamep[i-1] != '/'))
                 tbuffer[i++] = '\\';
             tbuffer[i] = 0;
-            strcat(tbuffer, SMB_IOCTL_FILENAME);
+            strcat(tbuffer, SMB_IOCTL_FILENAME_NOSLASH);
         } else {
             char curdir[MAX_PATH]="";
 
@@ -683,7 +683,7 @@ GetIoctlHandle(char *fileNamep, HANDLE * handlep)
                        count++;
                    i++;
                 }
-                if (tbuffer[i] == 0)
+                if (curdir[i] == 0 || (curdir[i-1] != '\\' && curdir[i-1] != '/'))
                     tbuffer[i++] = '\\';
                 tbuffer[i] = 0;
                 strcat(tbuffer, SMB_IOCTL_FILENAME_NOSLASH);