fixing bug 690 by Brandon Turner. note ms only allown start "notepad" or
"note"pad not notep"ad or notepad" but we do that, for we think it is a
bug in ms cmd that only allowing " at start of a file name to start the
apps.
Modified: trunk/reactos/subsys/system/cmd/cmd.c
_____
Modified: trunk/reactos/subsys/system/cmd/cmd.c
--- trunk/reactos/subsys/system/cmd/cmd.c 2005-08-08 16:58:30 UTC
(rev 17217)
+++ trunk/reactos/subsys/system/cmd/cmd.c 2005-08-08 18:59:56 UTC
(rev 17218)
@@ -287,14 +287,18 @@
/*
* This command (in first) was not found in the command table
*
- * first - first word on command line
- * rest - rest of command line
+ * Full - whole command line
+ * First - first word on command line
+ * Rest - rest of command line
*/
static VOID
-Execute (LPTSTR full, LPTSTR first, LPTSTR rest)
+Execute (LPTSTR Full, LPTSTR First, LPTSTR Rest)
{
TCHAR szFullName[MAX_PATH];
+ TCHAR first[MAX_PATH];
+ TCHAR rest[MAX_PATH];
+ TCHAR full[MAX_PATH];
#ifndef __REACTOS__
TCHAR szWindowTitle[MAX_PATH];
#endif
@@ -304,6 +308,51 @@
DebugPrintf (_T("Execute: \'%s\' \'%s\'\n"), first, rest);
#endif
+ /* Though it was already parsed once, we have a different set of
rules
+ for parsing before we pass to CreateProccess */
+ if(!_tcschr(Full,_T('\"')))
+ {
+ _tcscpy(first,First);
+ _tcscpy(rest,Rest);
+ _tcscpy(full,Full);
+ }
+ else
+ {
+ INT i = 0;
+ BOOL bInside = FALSE;
+ rest[0] = _T('\0');
+ full[0] = _T('\0');
+ first[0] = _T('\0');
+ _tcscpy(first,Full);
+ /* find the end of the command and start of the args */
+ for(i = 0; i < _tcslen(first); i++)
+ {
+ if(!_tcsncmp(&first[i], _T("\""), 1))
+ bInside = !bInside;
+ if(!_tcsncmp(&first[i], _T(" "), 1) && !bInside)
+ {
+ _tcscpy(rest,&first[i]);
+ first[i] = _T('\0');
+ break;
+ }
+
+ }
+ i = 0;
+ /* remove any slashes */
+ while(i < _tcslen(first))
+ {
+ if(!_tcsncmp (&first[i], _T("\""), 1))
+ memcpy(&first[i],&first[i + 1],
_tcslen(&first[i]));
+ else
+ i++;
+ }
+ /* Drop quotes around it just in case there is a space
*/
+ _tcscpy(full,_T("\""));
+ _tcscat(full,first);
+ _tcscat(full,_T("\" "));
+ _tcscat(full,rest);
+ }
+
/* check for a drive change */
if ((_istalpha (first[0])) && (!_tcscmp (first + 1, _T(":"))))
{
fix a simple bug that I did intrudes with my last commit
Modified: trunk/reactos/lib/ddraw/main.c
_____
Modified: trunk/reactos/lib/ddraw/main.c
--- trunk/reactos/lib/ddraw/main.c 2005-08-08 16:21:35 UTC (rev
17214)
+++ trunk/reactos/lib/ddraw/main.c 2005-08-08 16:36:39 UTC (rev
17215)
@@ -30,32 +30,32 @@
HRESULT WINAPI DirectDrawCreate (LPGUID lpGUID, LPDIRECTDRAW* lplpDD,
LPUNKNOWN pUnkOuter)
{
-
/* check see if pUnkOuter is null or not */
- if (!pUnkOuter)
+ if (pUnkOuter)
{
/* we do not use same error code as MS, ms use 0x8004110
*/
return DDERR_INVALIDPARAMS;
}
+
return Create_DirectDraw (lpGUID, lplpDD, pUnkOuter, FALSE);
}
HRESULT WINAPI DirectDrawCreateEx(LPGUID lpGUID, LPVOID* lplpDD, REFIID
iid, LPUNKNOWN pUnkOuter)
-{
+{
/* check see if pUnkOuter is null or not */
- if (!pUnkOuter)
+ if (pUnkOuter)
{
/* we do not use same error code as MS, ms use 0x8004110
*/
return DDERR_INVALIDPARAMS;
}
-
+
/* Is it a DirectDraw 7 Request or not */
if (!IsEqualGUID(iid, &IID_IDirectDraw7))
{
return DDERR_INVALIDPARAMS;
}
-
+
return Create_DirectDraw (lpGUID, (LPDIRECTDRAW*)lplpDD, pUnkOuter,
TRUE);
}