Use GetShortPathName and GetLongPathName to correct the case of the new path in SetRootPath.  GetFullPathName by itself would not work when there was a space in the name.
Modified: trunk/reactos/subsys/system/cmd/internal.c

Modified: trunk/reactos/subsys/system/cmd/internal.c
--- trunk/reactos/subsys/system/cmd/internal.c	2005-08-25 17:24:11 UTC (rev 17540)
+++ trunk/reactos/subsys/system/cmd/internal.c	2005-08-25 17:38:15 UTC (rev 17541)
@@ -215,7 +215,8 @@
 {
   TCHAR oldpath[MAX_PATH];
   TCHAR OutPath[MAX_PATH];
-  TCHAR OutPathUpper[MAX_PATH];
+  TCHAR OutPathTemp[MAX_PATH];
+  TCHAR OutPathTemp2[MAX_PATH];
   BOOL fail;
   
   
@@ -228,16 +229,20 @@
   
   if (_tcsncicmp(&InPath[1],_T(":\\"),2)!=0)
   {
-      if (!GetRootPath(InPath,OutPathUpper,MAX_PATH))
-         _tcscpy(OutPathUpper,InPath);
+      if (!GetRootPath(InPath,OutPathTemp,MAX_PATH))
+         _tcscpy(OutPathTemp,InPath);
   }
   else 
   {
-    _tcscpy(OutPathUpper,InPath);
+    _tcscpy(OutPathTemp,InPath);
   }
   
-   _tcsupr(OutPathUpper); 
-  GetLongPathName(OutPathUpper, OutPath, MAX_PATH);  
+   _tcsupr(OutPathTemp); 
+  /* The use of both of these together will correct the case of a path
+     where as one alone or GetFullPath will not.  Exameple:
+	  c:\windows\SYSTEM32 => C:\WINDOWS\system32 */
+  GetShortPathName(OutPathTemp, OutPathTemp2, MAX_PATH);
+  GetLongPathName(OutPathTemp2, OutPath, MAX_PATH);  
 
   fail = SetCurrentDirectory(OutPath);
   if (!fail)