[cmd] Detect Winelib console applications so we wait for them to finish.

Jeremy White jwhite at codeweavers.com
Tue May 20 13:26:08 CDT 2008


---
  programs/cmd/Makefile.in |    2 +-
  programs/cmd/wcmdmain.c  |   12 ++++++++++++
  2 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/programs/cmd/Makefile.in b/programs/cmd/Makefile.in
index 7767dcd..b7e8bee 100644
--- a/programs/cmd/Makefile.in
+++ b/programs/cmd/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
  MODULE    = cmd.exe
  APPMODE   = -mconsole -municode
  EXTRADEFS = -DUNICODE
-IMPORTS   = shell32 user32 advapi32 kernel32
+IMPORTS   = shell32 user32 advapi32 kernel32 ntdll

  C_SRCS = \
  	batch.c \
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 8d09967..2f5c18d 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -29,6 +29,7 @@
  #include <time.h>
  #include "wcmd.h"
  #include "wine/debug.h"
+#include "winternl.h"

  WINE_DEFAULT_DEBUG_CHANNEL(cmd);

@@ -1159,6 +1160,17 @@ void WCMD_run_program (WCHAR *command, int called) {
          else
            console = SHGetFileInfo (temp, 0, &psfi, sizeof(psfi), SHGFI_EXETYPE);

+        /* Probe for a console winelib application */
+        if (! console) {
+            HMODULE hmod;
+            hmod = LoadLibraryExW(temp, NULL, LOAD_LIBRARY_AS_DATAFILE);
+            if (hmod) {
+                if (RtlImageNtHeader(hmod)->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI)
+                    console = IMAGE_NT_SIGNATURE;
+                FreeLibrary(hmod);
+            }
+        }
+
          ZeroMemory (&st, sizeof(STARTUPINFO));
          st.cb = sizeof(STARTUPINFO);
          init_msvcrt_io_block(&st);



More information about the wine-patches mailing list