Module: wine Branch: master Commit: aad1d8ce243993ec67646c833ce47ca71c56f910 URL: http://source.winehq.org/git/wine.git/?a=commit;h=aad1d8ce243993ec67646c833c...
Author: Jason Edmeades jason.edmeades@googlemail.com Date: Fri Jun 15 20:59:20 2007 +0100
cmd.exe: Pass command structure into WCMD_pipe, not command line itself.
---
programs/cmd/wcmd.h | 20 ++++++++++---------- programs/cmd/wcmdmain.c | 5 +++-- 2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 4ab365c..fa8d785 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -28,6 +28,15 @@ #include <ctype.h> #include <wine/unicode.h>
+/* Data structure to hold commands to be processed */ + +typedef struct _CMD_LIST { + WCHAR *command; /* Command string to execute */ + struct _CMD_LIST *nextcommand; /* Next command string to execute */ + BOOL isAmphersand;/* Whether follows && */ + int bracketDepth;/* How deep bracketing have we got to */ +} CMD_LIST; + void WCMD_assoc (WCHAR *, BOOL); void WCMD_batch (WCHAR *, WCHAR *, int, WCHAR *, HANDLE); void WCMD_call (WCHAR *command); @@ -53,7 +62,7 @@ void WCMD_output (const WCHAR *format, ...); void WCMD_output_asis (const WCHAR *message); void WCMD_parse (WCHAR *s, WCHAR *q, WCHAR *p1, WCHAR *p2); void WCMD_pause (void); -void WCMD_pipe (WCHAR *command); +void WCMD_pipe (CMD_LIST **command); void WCMD_popd (void); void WCMD_print_error (void); void WCMD_process_command (WCHAR *command); @@ -92,15 +101,6 @@ WCHAR *WCMD_strdupW(WCHAR *input); BOOL WCMD_ReadFile(const HANDLE hIn, WCHAR *intoBuf, const DWORD maxChars, LPDWORD charsRead, const LPOVERLAPPED unused);
-/* Data structure to hold commands to be processed */ - -typedef struct _CMD_LIST { - WCHAR *command; /* Command string to execute */ - struct _CMD_LIST *nextcommand; /* Next command string to execute */ - BOOL isAmphersand;/* Whether follows && */ - int bracketDepth;/* How deep bracketing have we got to */ -} CMD_LIST; - WCHAR *WCMD_ReadAndParseLine(WCHAR *initialcmd, CMD_LIST **output, HANDLE readFrom); void WCMD_process_commands(CMD_LIST *thisCmd); void WCMD_free_commands(CMD_LIST *cmds); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 245556e..ba5f7df 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1487,9 +1487,10 @@ void WCMD_opt_s_strip_quotes(WCHAR *cmd) { * Handle pipes within a command - the DOS way using temporary files. */
-void WCMD_pipe (WCHAR *command) { +void WCMD_pipe (CMD_LIST **cmdEntry) {
WCHAR *p; + WCHAR *command = (*cmdEntry)->command; WCHAR temp_path[MAX_PATH], temp_file[MAX_PATH], temp_file2[MAX_PATH], temp_cmd[1024]; static const WCHAR redirOut[] = {'%','s',' ','>',' ','%','s','\0'}; static const WCHAR redirIn[] = {'%','s',' ','<',' ','%','s','\0'}; @@ -2077,7 +2078,7 @@ void WCMD_process_commands(CMD_LIST *thisCmd) { if (thisCmd->command && thisCmd->command[0] != ':') { WINE_TRACE("Executing command: '%s'\n", wine_dbgstr_w(thisCmd->command)); if (strchrW(thisCmd->command,'|') != NULL) { - WCMD_pipe (thisCmd->command); + WCMD_pipe (&thisCmd); } else { WCMD_process_command (thisCmd->command); }