summaryrefslogtreecommitdiff
path: root/win32/win32.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-10-17 08:11:21 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-10-17 08:11:21 +0000
commitd66c5768caaee16a0c2c2c6411858d23fb9f21a9 (patch)
treeae574138bb2da56bf29ee92f0479c08f9d627c54 /win32/win32.c
parent8ac4f421e13adc2216b4056ab241136066548e7e (diff)
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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32/win32.c')
-rw-r--r--win32/win32.c44
1 files changed, 12 insertions, 32 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 46bdbf9..e1ac405 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -39,12 +39,6 @@
#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;
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])
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 *