[PATCH 9/9] CMD.exe: Fix dir /w

Jason Edmeades jason.edmeades at googlemail.com
Sun Jun 3 16:07:47 CDT 2007


Use of %* fails when using wvsprintf, so just pad manually,
but maintain only a single output call.
---
 programs/cmd/directory.c |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/programs/cmd/directory.c b/programs/cmd/directory.c
index a7e6ae4..88e5dc3 100644
--- a/programs/cmd/directory.c
+++ b/programs/cmd/directory.c
@@ -72,6 +72,7 @@ static const WCHAR dotdotW[] = {'.','.','\0'};
 static const WCHAR starW[]   = {'*','\0'};
 static const WCHAR slashW[]  = {'\\','\0'};
 static const WCHAR emptyW[]  = {'\0'};
+static const WCHAR spaceW[]  = {' ','\0'};
 
 /*****************************************************************************
  * WCMD_directory
@@ -617,8 +618,24 @@ static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int le
         if ((cur_width + widest) > max_width) {
             cur_width = 0;
         } else {
-            const WCHAR fmt[]  = {'%','*','.','s','\0'};
-            WCMD_output (fmt, (tmp_width - cur_width), emptyW);
+            int padding = cur_width - tmp_width;
+            int toWrite = 0;
+            WCHAR temp[101];
+
+            /* Note: WCMD_output uses wvsprintf which does not allow %* 
+                 so manually pad with spaces to appropriate width       */
+            strcpyW(temp, emptyW);
+            while (padding > 0) {
+                strcatW(&temp[toWrite], spaceW);
+                toWrite++;
+                if (toWrite > 99) {
+                    WCMD_output(temp);
+                    toWrite = 0;
+                    strcpyW(temp, emptyW);
+                }
+                padding--;
+            }
+            WCMD_output(temp);
         }
 
       } else if ((fd+i)->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-- 
1.5.0




More information about the wine-patches mailing list