https://git.reactos.org/?p=reactos.git;a=commitdiff;h=acd3148c1a52dfa1eb870d074d9071bbf2b67f26

commit acd3148c1a52dfa1eb870d074d9071bbf2b67f26
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Tue Feb 21 09:14:26 2023 +0900
Commit:     GitHub <[email protected]>
CommitDate: Tue Feb 21 09:14:26 2023 +0900

    [USETUP] Speed up CONSOLE_SetStatusTextXV +17% (#5086)
    
    Get more speed by omitting erasing and overwriting whole line. CORE-18838
---
 base/setup/usetup/consup.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/base/setup/usetup/consup.c b/base/setup/usetup/consup.c
index 15e0fa69d99..9c3c799e63f 100644
--- a/base/setup/usetup/consup.c
+++ b/base/setup/usetup/consup.c
@@ -429,32 +429,26 @@ CONSOLE_SetStatusTextXV(
     IN LPCSTR fmt,
     IN va_list args)
 {
+    INT nLength;
     COORD coPos;
     DWORD Written;
     CHAR Buffer[128];
 
-    vsprintf(Buffer, fmt, args);
+    memset(Buffer, ' ', min(sizeof(Buffer), xScreen));
+    nLength = vsprintf(&Buffer[x], fmt, args);
+    ASSERT(x + nLength < sizeof(Buffer));
+    Buffer[x + nLength] = ' ';
 
     coPos.X = 0;
     coPos.Y = yScreen - 1;
-
     FillConsoleOutputAttribute(StdOutput,
                                BACKGROUND_WHITE,
                                xScreen,
                                coPos,
                                &Written);
-
-    FillConsoleOutputCharacterA(StdOutput,
-                                ' ',
-                                xScreen,
-                                coPos,
-                                &Written);
-
-    coPos.X = x;
-
     WriteConsoleOutputCharacterA(StdOutput,
                                  Buffer,
-                                 (ULONG)strlen(Buffer),
+                                 min(sizeof(Buffer), xScreen),
                                  coPos,
                                  &Written);
 }

Reply via email to