- Improve performance of TYPE command by reading more than 1 byte at a time. (Bug...
authorJeffrey Morlan <mrnobo1024@yahoo.com>
Mon, 16 Feb 2009 21:50:54 +0000 (21:50 +0000)
committerJeffrey Morlan <mrnobo1024@yahoo.com>
Mon, 16 Feb 2009 21:50:54 +0000 (21:50 +0000)
- Also allow it to be interrupted by ^C.

svn path=/trunk/; revision=39628

reactos/base/shell/cmd/type.c

index dd38a04..38e65f8 100644 (file)
@@ -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
+               }
+               else
+               {
+                       while (ReadFile(hFile, buff, sizeof(buff), &dwRet, NULL) && dwRet > 0)
                        {
-                               if(bRet)
-                                       ConOutPrintf(_T("%s"), buff);
+                               WriteFile(hConsoleOut, buff, dwRet, &dwRet, NULL);
+                               if (bCtrlBreak)
+                               {
+                                       bCtrlBreak = FALSE;
+                                       CloseHandle(hFile);
+                                       freep(argv);
+                                       return 0;
+                               }
                        }
-                       bFirstTime = FALSE;
-
-               } while(bRet);
+               }
 
                CloseHandle(hFile);
        }