Jason Edmeades : cmd.exe: Fix dir /w.
Module: wine Branch: master Commit: a1639ebfc6bee6b357104d9f46a96ef50dd303ad URL: http://source.winehq.org/git/wine.git/?a=commit;h=a1639ebfc6bee6b357104d9f46... Author: Jason Edmeades <jason.edmeades(a)googlemail.com> Date: Sun Jun 3 22:07:47 2007 +0100 cmd.exe: Fix dir /w. 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 e9c413a..4940140 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 @@ -618,8 +619,24 @@ static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int le if ((cur_width + widest) > max_width) { cur_width = 0; } else { - static 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) {
participants (1)
-
Alexandre Julliard