[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