mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 00:50:23 +00:00
- FileGetString: Only end line on '\n', not on '\r'.
- Various improvements to ExpandAlias svn path=/trunk/; revision=39817
This commit is contained in:
parent
69f81beb13
commit
ba3e9218c7
2 changed files with 50 additions and 22 deletions
|
@ -86,21 +86,23 @@ PrintAlias (VOID)
|
||||||
VOID ExpandAlias (LPTSTR cmd, INT maxlen)
|
VOID ExpandAlias (LPTSTR cmd, INT maxlen)
|
||||||
{
|
{
|
||||||
LPTSTR buffer;
|
LPTSTR buffer;
|
||||||
TCHAR* position;
|
TCHAR *position, *in, *out;
|
||||||
LPTSTR Token;
|
LPTSTR Token;
|
||||||
LPTSTR tmp;
|
LPTSTR tmp;
|
||||||
|
|
||||||
tmp = cmd_alloc(maxlen);
|
tmp = cmd_dup(cmd);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return;
|
return;
|
||||||
_tcscpy(tmp, cmd);
|
|
||||||
|
|
||||||
Token = _tcstok(tmp, _T(" ")); /* first part is the macro name */
|
/* first part is the macro name */
|
||||||
if (!Token)
|
position = tmp + _tcscspn(tmp, _T(" \n"));
|
||||||
|
if (position == tmp)
|
||||||
{
|
{
|
||||||
cmd_free(tmp);
|
cmd_free(tmp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
*position++ = _T('\0');
|
||||||
|
position += _tcsspn(position, _T(" "));
|
||||||
|
|
||||||
buffer = cmd_alloc(maxlen);
|
buffer = cmd_alloc(maxlen);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
|
@ -109,34 +111,60 @@ VOID ExpandAlias (LPTSTR cmd, INT maxlen)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetConsoleAlias(Token, buffer, maxlen, _T("cmd.exe")) == 0)
|
if (GetConsoleAlias(tmp, buffer, maxlen, _T("cmd.exe")) == 0)
|
||||||
{
|
{
|
||||||
cmd_free(tmp);
|
cmd_free(tmp);
|
||||||
cmd_free(buffer);
|
cmd_free(buffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Token = _tcstok (NULL, _T(" "));
|
in = buffer;
|
||||||
|
out = cmd;
|
||||||
ZeroMemory(cmd, maxlen);
|
while (*in)
|
||||||
position = _tcsstr(buffer, _T("$*"));
|
|
||||||
if (position)
|
|
||||||
{
|
{
|
||||||
_tcsncpy(cmd, buffer, (INT) (position - buffer) - 1);
|
if (*in == _T('$'))
|
||||||
if (Token)
|
|
||||||
{
|
{
|
||||||
_tcscat(cmd, _T(" "));
|
Token = position;
|
||||||
_tcscat(cmd, Token);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (out >= &cmd[maxlen - 1])
|
||||||
|
break;
|
||||||
|
*out++ = *in++;
|
||||||
}
|
}
|
||||||
else
|
*out++ = _T('\n');
|
||||||
{
|
*out = _T('\0');
|
||||||
_tcscpy(cmd, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_free(buffer);
|
cmd_free(buffer);
|
||||||
cmd_free(tmp);
|
cmd_free(tmp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
INT CommandAlias (LPTSTR param)
|
INT CommandAlias (LPTSTR param)
|
||||||
|
|
|
@ -515,7 +515,7 @@ BOOL FileGetString (HANDLE hFile, LPTSTR lpBuffer, INT nBufferLength)
|
||||||
ReadFile(hFile, &ch, 1, &dwRead, NULL) && dwRead)
|
ReadFile(hFile, &ch, 1, &dwRead, NULL) && dwRead)
|
||||||
{
|
{
|
||||||
lpString[len++] = ch;
|
lpString[len++] = ch;
|
||||||
if ((ch == _T('\n')) || (ch == _T('\r')))
|
if (ch == '\n')
|
||||||
{
|
{
|
||||||
/* break at new line*/
|
/* break at new line*/
|
||||||
break;
|
break;
|
||||||
|
@ -530,7 +530,7 @@ BOOL FileGetString (HANDLE hFile, LPTSTR lpBuffer, INT nBufferLength)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpString[len++] = _T('\0');
|
lpString[len++] = '\0';
|
||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
MultiByteToWideChar(CP_ACP, 0, lpString, -1, lpBuffer, len);
|
MultiByteToWideChar(CP_ACP, 0, lpString, -1, lpBuffer, len);
|
||||||
cmd_free(lpString);
|
cmd_free(lpString);
|
||||||
|
|
Loading…
Reference in a new issue