ruby-changes:31252
From: nobu <ko1@a...>
Date: Thu, 17 Oct 2013 17:11:27 +0900 (JST)
Subject: [ruby-changes:31252] nobu:r43331 (trunk): win32.c: check by module handles
nobu 2013-10-17 17:11:21 +0900 (Thu, 17 Oct 2013) New Revision: 43331 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=43331 Log: win32.c: check by module handles * win32/win32.c (console_emulator_p): check by comparison between module handle of WriteConsoleW and kernel32.dll. * configure.in, win32/Makefile.sub, win32/setup.mak: no longer need psapi.lib. Modified files: trunk/ChangeLog trunk/configure.in trunk/win32/Makefile.sub trunk/win32/setup.mak trunk/win32/win32.c Index: configure.in =================================================================== --- configure.in (revision 43330) +++ configure.in (revision 43331) @@ -933,7 +933,7 @@ main() https://github.com/ruby/ruby/blob/trunk/configure.in#L933 AC_CHECK_FUNCS(cygwin_conv_path) AC_LIBOBJ([langinfo]) ], -[mingw*], [ LIBS="-lshell32 -lws2_32 -lpsapi -liphlpapi -limagehlp -lshlwapi $LIBS" +[mingw*], [ LIBS="-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi $LIBS" ac_cv_header_a_out_h=no ac_cv_header_pwd_h=no ac_cv_header_utime_h=no Index: ChangeLog =================================================================== --- ChangeLog (revision 43330) +++ ChangeLog (revision 43331) @@ -1,3 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Thu Oct 17 17:11:17 2013 Nobuyoshi Nakada <nobu@r...> + + * win32/win32.c (console_emulator_p): check by comparison between + module handle of WriteConsoleW and kernel32.dll. + + * configure.in, win32/Makefile.sub, win32/setup.mak: no longer need + psapi.lib. + Thu Oct 17 16:53:30 2013 Koichi Sasada <ko1@a...> * gc.c, internal.h: add new internal memory mangement functions. Index: win32/win32.c =================================================================== --- win32/win32.c (revision 43330) +++ win32/win32.c (revision 43331) @@ -39,12 +39,6 @@ https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L39 #include <share.h> #include <shlobj.h> #include <mbstring.h> -#ifdef HAVE_PSAPI_H -#include <psapi.h> -# define CHECK_CONSOLE_EMULATOR 1 -#else -# define CHECK_CONSOLE_EMULATOR 0 -#endif #include <shlwapi.h> #if _MSC_VER >= 1400 #include <crtdbg.h> @@ -611,11 +605,7 @@ static CRITICAL_SECTION select_mutex; https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L605 static int NtSocketsInitialized = 0; static st_table *socklist = NULL; static st_table *conlist = NULL; -#if CHECK_CONSOLE_EMULATOR #define conlist_disabled ((st_table *)-1) -#else -#define conlist_disabled ((st_table *)NULL) -#endif static char *envarea; static char *uenvarea; @@ -5843,36 +5833,26 @@ rb_w32_pipe(int fds[2]) https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L5833 return 0; } -#if CHECK_CONSOLE_EMULATOR /* License: Ruby's */ static int console_emulator_p(void) { - HMODULE module_buf[10], *pmodule = module_buf; - DWORD nmodule = numberof(module_buf), needed = 0, i; - HANDLE proch = GetCurrentProcess(); +#ifdef _WIN32_WCE + return FALSE; +#else + const void *const func = WriteConsoleW; + HMODULE k; + MEMORY_BASIC_INFORMATION m; - if (!EnumProcessModules(proch, pmodule, nmodule * sizeof(HMODULE), &needed)) + memset(&m, 0, sizeof(m)); + if (!VirtualQuery(func, &m, sizeof(m))) { return FALSE; - if (needed / sizeof(HMODULE) > nmodule) { - nmodule = needed / sizeof(HMODULE); - pmodule = alloca(sizeof(HMODULE) * nmodule); - if (!EnumProcessModules(proch, pmodule, needed, &needed)) - return FALSE; - } - for (i = 0; i < nmodule; i++) { - WCHAR modname[MAX_PATH]; - - if (GetModuleBaseNameW(proch, pmodule[i], modname, numberof(modname))) { - if (PathMatchSpecW(modname, L"conemu*.dll")) return TRUE; - } } - - return 0; -} -#else -#define console_emulator_p() 0 + k = GetModuleHandle("kernel32.dll"); + if (!k) return FALSE; + return (HMODULE)m.AllocationBase != k; #endif +} /* License: Ruby's */ static struct constat * Index: win32/Makefile.sub =================================================================== --- win32/Makefile.sub (revision 43330) +++ win32/Makefile.sub (revision 43331) @@ -232,7 +232,7 @@ LIBS = oldnames.lib user32.lib advapi32. https://github.com/ruby/ruby/blob/trunk/win32/Makefile.sub#L232 !if $(MSC_VER) >= 1400 LIBS = $(LIBS) iphlpapi.lib !endif -LIBS = $(LIBS) psapi.lib imagehlp.lib shlwapi.lib $(EXTLIBS) +LIBS = $(LIBS) imagehlp.lib shlwapi.lib $(EXTLIBS) !endif !if !defined(MISSING) MISSING = acosh.obj cbrt.obj crypt.obj erf.obj ffs.obj langinfo.obj lgamma_r.obj strlcat.obj strlcpy.obj tgamma.obj win32/win32.obj win32/file.obj setproctitle.obj @@ -308,9 +308,6 @@ STACK = $(STACK),$(STACK_COMMIT) https://github.com/ruby/ruby/blob/trunk/win32/Makefile.sub#L308 !endif ORGLIBPATH = $(LIB) -!if !defined(HAVE_PSAPI_H) -HAVE_PSAPI_H = 0 -!endif #### End of system configuration section. #### LIBRUBY_A = $(RUBY_SO_NAME)-static.lib @@ -681,9 +678,6 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/ https://github.com/ruby/ruby/blob/trunk/win32/Makefile.sub#L678 #define HAVE_DAYLIGHT 1 #define HAVE_GMTIME_R 1 #define HAVE_TYPE_NET_LUID 1 -!if $(HAVE_PSAPI_H) -#define HAVE_PSAPI_H 1 -!endif #define SETPGRP_VOID 1 #define RSHIFT(x,y) ((x)>>(int)y) #define HAVE_RB_FD_INIT 1 Index: win32/setup.mak =================================================================== --- win32/setup.mak (revision 43330) +++ win32/setup.mak (revision 43331) @@ -100,7 +100,7 @@ int main(void) {FILE *volatile f = stdin https://github.com/ruby/ruby/blob/trunk/win32/setup.mak#L100 @$(WIN32DIR:/=\)\rtname conftest.exe >>$(MAKEFILE) @$(WIN32DIR:/=\)\rm.bat conftest.* --headers-: check-psapi.h +-headers-: nul check-psapi.h: nul ($(CC) -MD <<conftest.c psapi.lib -link && echo>>$(MAKEFILE) HAVE_PSAPI_H=1) & $(WIN32DIR:/=\)\rm.bat conftest.* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/