Author: tkreuzer Date: Sat Apr 14 21:35:58 2012 New Revision: 56349
URL: http://svn.reactos.org/svn/reactos?rev=56349&view=rev Log: [CMD] Handle the + character only optionally as a token seperator, so that other commands like rename are not affected.
Modified: trunk/reactos/base/shell/cmd/attrib.c trunk/reactos/base/shell/cmd/chcp.c trunk/reactos/base/shell/cmd/choice.c trunk/reactos/base/shell/cmd/cmd.h trunk/reactos/base/shell/cmd/copy.c trunk/reactos/base/shell/cmd/date.c trunk/reactos/base/shell/cmd/del.c trunk/reactos/base/shell/cmd/free.c trunk/reactos/base/shell/cmd/internal.c trunk/reactos/base/shell/cmd/misc.c trunk/reactos/base/shell/cmd/mklink.c trunk/reactos/base/shell/cmd/ren.c trunk/reactos/base/shell/cmd/replace.c trunk/reactos/base/shell/cmd/time.c trunk/reactos/base/shell/cmd/timer.c trunk/reactos/base/shell/cmd/type.c
Modified: trunk/reactos/base/shell/cmd/attrib.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/attrib.c?rev... ============================================================================== --- trunk/reactos/base/shell/cmd/attrib.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/attrib.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -213,7 +213,7 @@ nErrorLevel = 0;
/* build parameter array */ - arg = split (param, &argc, FALSE); + arg = split (param, &argc, FALSE, FALSE);
/* check for options */ for (i = 0; i < argc; i++)
Modified: trunk/reactos/base/shell/cmd/chcp.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/chcp.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/chcp.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/chcp.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -33,7 +33,7 @@ nErrorLevel = 0;
/* get parameters */ - arg = split (param, &args, FALSE); + arg = split (param, &args, FALSE, FALSE);
if (args == 0) {
Modified: trunk/reactos/base/shell/cmd/choice.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/choice.c?rev... ============================================================================== --- trunk/reactos/base/shell/cmd/choice.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/choice.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -150,7 +150,7 @@ }
/* build parameter array */ - arg = split (param, &argc, FALSE); + arg = split (param, &argc, FALSE, FALSE);
/* evaluate arguments */ if (argc > 0)
Modified: trunk/reactos/base/shell/cmd/cmd.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/cmd.h?rev=56... ============================================================================== --- trunk/reactos/base/shell/cmd/cmd.h [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/cmd.h [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -332,7 +332,7 @@ TCHAR cgetchar (VOID); BOOL CheckCtrlBreak (INT); BOOL add_entry (LPINT ac, LPTSTR **arg, LPCTSTR entry); -LPTSTR *split (LPTSTR, LPINT, BOOL); +LPTSTR *split (LPTSTR, LPINT, BOOL, BOOL); LPTSTR *splitspace (LPTSTR, LPINT); VOID freep (LPTSTR *); LPTSTR _stpcpy (LPTSTR, LPCTSTR);
Modified: trunk/reactos/base/shell/cmd/copy.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/copy.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/copy.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/copy.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -438,7 +438,7 @@
/* Split the user input into array */ - arg = split(param, &argc, FALSE); + arg = split(param, &argc, FALSE, TRUE); nFiles = argc;
/* Read switches and count files */
Modified: trunk/reactos/base/shell/cmd/date.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/date.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/date.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/date.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -193,7 +193,7 @@ nErrorLevel = 0;
/* build parameter array */ - arg = split (param, &argc, FALSE); + arg = split (param, &argc, FALSE, FALSE);
/* check for options */ for (i = 0; i < argc; i++)
Modified: trunk/reactos/base/shell/cmd/del.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/del.c?rev=56... ============================================================================== --- trunk/reactos/base/shell/cmd/del.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/del.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -275,7 +275,7 @@ } while (FindNextFile (hFile, &f)); FindClose (hFile); - } + } else error_sfile_not_found(szFullPath); return dwFiles; } @@ -385,7 +385,7 @@
nErrorLevel = 0;
- arg = split (param, &args, FALSE); + arg = split (param, &args, FALSE, FALSE);
if (args == 0) {
Modified: trunk/reactos/base/shell/cmd/free.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/free.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/free.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/free.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -106,7 +106,7 @@ else szParam = param;
- arg = split (szParam, &argc, FALSE); + arg = split (szParam, &argc, FALSE, FALSE);
for (i = 0; i < argc; i++) PrintDiskInfo (arg[i]);
Modified: trunk/reactos/base/shell/cmd/internal.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/internal.c?r... ============================================================================== --- trunk/reactos/base/shell/cmd/internal.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/internal.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -321,7 +321,7 @@ return 0; }
- p = split (param, &argc, FALSE); + p = split (param, &argc, FALSE, FALSE); if (argc == 0) { ConErrResPuts(STRING_ERROR_REQ_PARAM_MISSING); @@ -411,7 +411,7 @@ return 0; }
- arg = split (param, &args, FALSE); + arg = split (param, &args, FALSE, FALSE); dirCount = 0;
/* check for options anywhere in command line */
Modified: trunk/reactos/base/shell/cmd/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/misc.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/misc.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/misc.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -275,7 +275,7 @@ * are spaces and slashes ('/'). */
-LPTSTR *split (LPTSTR s, LPINT args, BOOL expand_wildcards) +LPTSTR *split (LPTSTR s, LPINT args, BOOL expand_wildcards, BOOL handle_plus) { LPTSTR *arg; LPTSTR start; @@ -315,7 +315,7 @@ /* check for separators */ if (_istspace(*s) || (*s == _T('/')) || - (*s == _T('+'))) + (handle_plus && (*s == _T('+')))) { /* Make length at least one character */ if (s == start) s++;
Modified: trunk/reactos/base/shell/cmd/mklink.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/mklink.c?rev... ============================================================================== --- trunk/reactos/base/shell/cmd/mklink.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/mklink.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -132,7 +132,7 @@ return 0; }
- arg = split(param, &argc, FALSE); + arg = split(param, &argc, FALSE, FALSE); for (i = 0; i < argc; i++) { if (arg[i][0] == _T('/'))
Modified: trunk/reactos/base/shell/cmd/ren.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/ren.c?rev=56... ============================================================================== --- trunk/reactos/base/shell/cmd/ren.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/ren.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -3,7 +3,7 @@ * * * History: - * + * * * 27-Jul-1998 (John P Price linux-guru@gcfl.net) * added config.h include @@ -20,13 +20,13 @@ * 30-Apr-2005 (Magnus Olsen) magnus@greatlord.com) * Remove all hardcode string to En.rc * 25-Nov-2008 (Victor Martinez) vicmarcal@hotmail.com Patch dedicated to Myrjala because her comprenhension and love :D - * Fixing following Bugs: + * Fixing following Bugs: * -Wrong behavior with wildcards when Source and Destiny are Paths(FIXED). * -Wrong general behavior (MSDN:"Rename cant move files between subdirectories")(FIXED) * -Wrong behavior when renaming without path in destiny:(i.e) "ren C:\text\as.txt list.txt" it moves as.txt and then rename it(FIXED) * (MSDN: If there is a Path in Source and no Path in Destiny, then Destiny Path is Source Path,because never Ren has to be used to move.) * -Implemented checkings if SourcePath and DestinyPath are differents. - * + * */
#include <precomp.h> @@ -59,13 +59,13 @@ DWORD dwFiles = 0; /* number of renamedd files */ INT i;
- + LPTSTR srcPattern = NULL; /* Source Argument*/ TCHAR srcPath[MAX_PATH]; /*Source Path Directories*/ LPTSTR srcFILE = NULL; /*Contains the files name(s)*/ - TCHAR srcFinal[MAX_PATH]; - - + TCHAR srcFinal[MAX_PATH]; + + LPTSTR dstPattern = NULL; /*Destiny Argument*/ TCHAR dstPath[MAX_PATH]; /*Source Path Directories*/ LPTSTR dstFILE = NULL; /*Contains the files name(s)*/ @@ -75,12 +75,12 @@
BOOL bDstWildcard = FALSE; BOOL bPath = FALSE; - - - - - - + + + + + + LPTSTR p,q,r;
HANDLE hFile; @@ -88,8 +88,8 @@ /*If the PARAM=/? then show the help*/ if (!_tcsncmp(param, _T("/?"), 2)) { - - + + ConOutResPaging(TRUE,STRING_REN_HELP1); return 0; } @@ -97,8 +97,8 @@ nErrorLevel = 0;
/* Split the argument list.Args will be saved in arg vector*/ - arg = split(param, &args, FALSE); - + arg = split(param, &args, FALSE, FALSE); + if (args < 2) { if (!(dwFlags & REN_ERROR)) @@ -124,7 +124,7 @@ case _T('N'): dwFlags |= REN_NOTHING; break; - + case _T('P'): dwFlags |= REN_PROMPT; break; @@ -158,8 +158,8 @@ freep(arg); return 1; } - - + + /* Get destination pattern and source pattern*/ for (i = 0; i < args; i++) { @@ -167,16 +167,16 @@ continue; dstPattern = arg[i]; //we save the Last argument as dstPattern srcPattern = arg[i-1]; - + } - - - - + + + +
if (_tcschr(srcPattern, _T('\'))) //Checking if the Source (srcPattern) is a Path to the file - { - + { + bPath= TRUE;
//Splitting srcPath and srcFile. @@ -190,11 +190,11 @@ if(!_tcschr(srcFILE, _T('\'))) break; } _tcsncpy(srcPath,srcPattern,_tcslen(srcPattern)-_tcslen(srcFILE)); - - - + + + if(_tcschr(dstPattern, _T('\'))) //Checking if the Destiny (dstPattern)is also a Path.And splitting dstPattern in dstPath and srcPath. - { + { dstFILE = _tcschr(dstPattern, _T('\')); nSlash=0; while(_tcschr(dstFILE, _T('\'))) @@ -204,53 +204,53 @@ if(!_tcschr(dstFILE, _T('\'))) break; } _tcsncpy(dstPath,dstPattern,_tcslen(dstPattern)-_tcslen(dstFILE)); - + if((_tcslen(dstPath)!=_tcslen(srcPath))||(_tcsncmp(srcPath,dstPath,_tcslen(srcPath))!=0)) //If it has a Path,then MUST be equal than srcPath { error_syntax(dstPath); freep(arg); return 1; } - }else { //If Destiny hasnt a Path,then (MSDN says) srcPath is its Path. - + }else { //If Destiny hasnt a Path,then (MSDN says) srcPath is its Path. + _tcscpy(dstPath,srcPath); - + dstFILE=dstPattern; - + }
- - + + } - + if (!_tcschr(srcPattern, _T('\'))) //If srcPattern isnt a Path but a name: - { + { srcFILE=srcPattern; if(_tcschr(dstPattern, _T('\'))) - { + { error_syntax(dstPattern); - + freep(arg); return 1; }else dstFILE=dstPattern; } - + //Checking Wildcards. if (_tcschr(dstFILE, _T('*')) || _tcschr(dstFILE, _T('?'))) bDstWildcard = TRUE; - - - + + + TRACE("\n\nSourcePattern: %s SourcePath: %s SourceFile: %s", debugstr_aw(srcPattern),debugstr_aw(srcPath),debugstr_aw(srcFILE)); TRACE("\n\nDestinationPattern: %s Destination Path:%s Destination File: %s\n", debugstr_aw(dstPattern),debugstr_aw(dstPath),debugstr_aw(dstFILE)); - + hFile = FindFirstFile(srcPattern, &f); - + if (hFile == INVALID_HANDLE_VALUE) { if (!(dwFlags & REN_ERROR)) error_file_not_found(); - + } do { @@ -271,7 +271,7 @@ continue;
TRACE("Found source name: %s\n", debugstr_aw(f.cFileName)); - /* So here we have splitted the dstFILE and we have find a f.cFileName(thanks to srcPattern) + /* So here we have splitted the dstFILE and we have find a f.cFileName(thanks to srcPattern) * Now we have to use the mask (dstFILE) (which can have Wildcards) with f.cFileName to find destination file name(dstLast) */ p = f.cFileName; q = dstFILE; @@ -310,37 +310,37 @@ *r = 0; //Well we have splitted the Paths,so now we have to paste them again(if needed),thanks bPath. if( bPath == TRUE) - { - + { + _tcscpy(srcFinal,srcPath); - + _tcscat(srcFinal,f.cFileName); - + _tcscpy(dstFinal,dstPath); _tcscat(dstFinal,dstLast); - - + + }else{ _tcscpy(srcFinal,f.cFileName); _tcscpy(dstFinal,dstLast);
} - +
TRACE("DestinationPath: %s\n", debugstr_aw(dstFinal)); - - + + if (!(dwFlags & REN_QUIET) && !(dwFlags & REN_TOTAL)) - + ConOutPrintf(_T("%s -> %s\n"),srcFinal , dstFinal);
/* Rename the file */ if (!(dwFlags & REN_NOTHING)) - { - - - + { + + + if (MoveFile(srcFinal, dstFinal)) { dwFiles++; @@ -354,12 +354,12 @@ } } } - + while (FindNextFile(hFile, &f)); //Closing and Printing errors. - + FindClose(hFile); - +
if (!(dwFlags & REN_QUIET)) { @@ -368,9 +368,9 @@ else ConOutResPrintf(STRING_REN_HELP3, dwFiles); } - + freep(arg); - + return 0; }
Modified: trunk/reactos/base/shell/cmd/replace.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/replace.c?re... ============================================================================== --- trunk/reactos/base/shell/cmd/replace.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/replace.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -376,7 +376,7 @@ }
/* Divide the argument in to an array of c-strings */ - arg = split (param, &argc, FALSE); + arg = split (param, &argc, FALSE, FALSE); nFiles = argc;
/* Read options */
Modified: trunk/reactos/base/shell/cmd/time.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/time.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/time.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/time.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -145,7 +145,7 @@ nErrorLevel = 0;
/* build parameter array */ - arg = split (param, &argc, FALSE); + arg = split (param, &argc, FALSE, FALSE);
/* check for options */ for (i = 0; i < argc; i++)
Modified: trunk/reactos/base/shell/cmd/timer.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/timer.c?rev=... ============================================================================== --- trunk/reactos/base/shell/cmd/timer.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/timer.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -100,7 +100,7 @@
nErrorLevel = 0;
- p = split (param, &argc, FALSE); + p = split (param, &argc, FALSE, FALSE);
//read options for (i = 0; i < argc; i++)
Modified: trunk/reactos/base/shell/cmd/type.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/type.c?rev=5... ============================================================================== --- trunk/reactos/base/shell/cmd/type.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/type.c [iso-8859-1] Sat Apr 14 21:35:58 2012 @@ -56,7 +56,7 @@ return 1; }
- argv = split (param, &argc, TRUE); + argv = split (param, &argc, TRUE, FALSE);
for(i = 0; i < argc; i++) {