[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]