[ros-diffs] [jmorlan] 34810: In mkdir, don't add a backslash to the end - it can trick CreateDirectory into creating a dir with the name of a DOS device (even in Windows).

jmorlan at svn.reactos.org jmorlan at svn.reactos.org
Sat Jul 26 19:15:38 CEST 2008


Author: jmorlan
Date: Sat Jul 26 12:15:37 2008
New Revision: 34810

URL: http://svn.reactos.org/svn/reactos?rev=34810&view=rev
Log:
In mkdir, don't add a backslash to the end - it can trick CreateDirectory into creating a dir with the name of a DOS device (even in Windows).

Modified:
    trunk/reactos/base/shell/cmd/internal.c

Modified: trunk/reactos/base/shell/cmd/internal.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/internal.c?rev=34810&r1=34809&r2=34810&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/internal.c [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/internal.c [iso-8859-1] Sat Jul 26 12:15:37 2008
@@ -439,16 +439,16 @@
         p += 2;
     while (*p == _T('\\'))
         p++; /* skip drive root */
-    while ((p = _tcschr(p, _T('\\'))) != NULL)
+    do
     {
-       n = p - DirPath + 1;
+       p = _tcschr(p, _T('\\'));
+       n = p ? p++ - DirPath : _tcslen(DirPath);
        _tcsncpy(path, DirPath, n);
        path[n] = _T('\0');
        if( !CreateDirectory(path, NULL) &&
            (GetLastError() != ERROR_ALREADY_EXISTS))
            return FALSE;
-       p++;
-    }
+    } while (p != NULL);
     if (GetLastError() == ERROR_ALREADY_EXISTS)
        SetLastError(ERROR_SUCCESS);
 
@@ -463,7 +463,7 @@
 {
 	LPTSTR dir;		/* pointer to the directory to change to */
 	LPTSTR place;	/* used to search for the \ when no space is used */
-	LPTSTR new_dir, *p = NULL;
+	LPTSTR *p = NULL;
 	INT argc;
 	nErrorLevel = 0;
 	if (!_tcsncmp (param, _T("/?"), 2))
@@ -514,17 +514,6 @@
 		if(p != NULL)
 			freep (p);
 		return 1;
-	}
-
-	/* Add a \ at the end of the path is there isnt on already */
-	if (dir[_tcslen (dir) - 1] != _T('\\'))
-	{
-		new_dir = cmd_realloc(dir, (_tcslen (dir) + 2) * sizeof(TCHAR));
-		if (new_dir != NULL)
-		{
-			p[0] = dir = new_dir;
-			_tcscat(dir,_T("\\"));
-		}
 	}
 
     if (!MakeFullPath(dir))



More information about the Ros-diffs mailing list