Author: jmorlan Date: Sat Feb 28 21:00:38 2009 New Revision: 39817
URL: http://svn.reactos.org/svn/reactos?rev=39817&view=rev Log: - FileGetString: Only end line on '\n', not on '\r'. - Various improvements to ExpandAlias
Modified: trunk/reactos/base/shell/cmd/alias.c trunk/reactos/base/shell/cmd/misc.c
Modified: trunk/reactos/base/shell/cmd/alias.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/alias.c?rev=... ============================================================================== --- trunk/reactos/base/shell/cmd/alias.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/alias.c [iso-8859-1] Sat Feb 28 21:00:38 2009 @@ -86,21 +86,23 @@ VOID ExpandAlias (LPTSTR cmd, INT maxlen) { LPTSTR buffer; - TCHAR* position; + TCHAR *position, *in, *out; LPTSTR Token; LPTSTR tmp;
- tmp = cmd_alloc(maxlen); + tmp = cmd_dup(cmd); if (!tmp) return; - _tcscpy(tmp, cmd); - - Token = _tcstok(tmp, _T(" ")); /* first part is the macro name */ - if (!Token) + + /* first part is the macro name */ + position = tmp + _tcscspn(tmp, _T(" \n")); + if (position == tmp) { cmd_free(tmp); return; } + *position++ = _T('\0'); + position += _tcsspn(position, _T(" "));
buffer = cmd_alloc(maxlen); if (!buffer) @@ -109,34 +111,60 @@ return; } - if (GetConsoleAlias(Token, buffer, maxlen, _T("cmd.exe")) == 0) + if (GetConsoleAlias(tmp, buffer, maxlen, _T("cmd.exe")) == 0) { cmd_free(tmp); cmd_free(buffer); return; }
- Token = _tcstok (NULL, _T(" ")); - - ZeroMemory(cmd, maxlen); - position = _tcsstr(buffer, _T("$*")); - if (position) - { - _tcsncpy(cmd, buffer, (INT) (position - buffer) - 1); - if (Token) + in = buffer; + out = cmd; + while (*in) + { + if (*in == _T('$')) { - _tcscat(cmd, _T(" ")); - _tcscat(cmd, Token); + Token = position; + if (in[1] >= _T('1') && in[1] <= _T('9')) + { + /* Copy a single space-delimited token from the input line */ + INT num; + for (num = in[1] - _T('1'); num > 0; num--) + { + Token += _tcscspn(Token, _T(" \n")); + Token += _tcsspn(Token, _T(" ")); + } + while (!_tcschr(_T(" \n"), *Token)) + { + if (out >= &cmd[maxlen - 1]) + break; + *out++ = *Token++; + } + in += 2; + continue; + } + else if (in[1] == _T('*')) + { + /* Copy the entire remainder of the line */ + while (*Token && *Token != _T('\n')) + { + if (out >= &cmd[maxlen - 1]) + break; + *out++ = *Token++; + } + in += 2; + continue; + } } - } - else - { - _tcscpy(cmd, buffer); - } + if (out >= &cmd[maxlen - 1]) + break; + *out++ = *in++; + } + *out++ = _T('\n'); + *out = _T('\0');
cmd_free(buffer); cmd_free(tmp); - }
INT CommandAlias (LPTSTR param)
Modified: trunk/reactos/base/shell/cmd/misc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/misc.c?rev=3... ============================================================================== --- trunk/reactos/base/shell/cmd/misc.c [iso-8859-1] (original) +++ trunk/reactos/base/shell/cmd/misc.c [iso-8859-1] Sat Feb 28 21:00:38 2009 @@ -515,7 +515,7 @@ ReadFile(hFile, &ch, 1, &dwRead, NULL) && dwRead) { lpString[len++] = ch; - if ((ch == _T('\n')) || (ch == _T('\r'))) + if (ch == '\n') { /* break at new line*/ break; @@ -530,7 +530,7 @@ return FALSE; }
- lpString[len++] = _T('\0'); + lpString[len++] = '\0'; #ifdef _UNICODE MultiByteToWideChar(CP_ACP, 0, lpString, -1, lpBuffer, len); cmd_free(lpString);