From dc8e4248dd84058f709e31fa97eb4b9c88ddfc76 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Mon, 16 Feb 2009 21:50:54 +0000 Subject: [PATCH] - Improve performance of TYPE command by reading more than 1 byte at a time. (Bug 4057) - Also allow it to be interrupted by ^C. svn path=/trunk/; revision=39628 --- reactos/base/shell/cmd/type.c | 42 ++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/reactos/base/shell/cmd/type.c b/reactos/base/shell/cmd/type.c index dd38a044206..38e65f8488e 100644 --- a/reactos/base/shell/cmd/type.c +++ b/reactos/base/shell/cmd/type.c @@ -35,7 +35,7 @@ INT cmd_type (LPTSTR param) { TCHAR buff[256]; HANDLE hFile, hConsoleOut; - BOOL bRet; + DWORD dwRet; INT argc,i; LPTSTR *argv; LPTSTR errmsg; @@ -99,28 +99,34 @@ INT cmd_type (LPTSTR param) continue; } - do + if (bPaging) { - bRet = FileGetString (hFile, buff, sizeof(buff) / sizeof(TCHAR)); - if(bPaging) + while (FileGetString (hFile, buff, sizeof(buff) / sizeof(TCHAR))) { - if(bRet) + if (ConOutPrintfPaging(bFirstTime, _T("%s"), buff) == 1) { - if (ConOutPrintfPaging(bFirstTime, _T("%s"), buff) == 1) - { - bCtrlBreak = FALSE; - return 0; - } + bCtrlBreak = FALSE; + CloseHandle(hFile); + freep(argv); + return 0; + } + bFirstTime = FALSE; + } + } + else + { + while (ReadFile(hFile, buff, sizeof(buff), &dwRet, NULL) && dwRet > 0) + { + WriteFile(hConsoleOut, buff, dwRet, &dwRet, NULL); + if (bCtrlBreak) + { + bCtrlBreak = FALSE; + CloseHandle(hFile); + freep(argv); + return 0; } } - else - { - if(bRet) - ConOutPrintf(_T("%s"), buff); - } - bFirstTime = FALSE; - - } while(bRet); + } CloseHandle(hFile); }