Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2011-11-28 21:49:56 +0400
committerCorinna Vinschen <corinna@vinschen.de>2011-11-28 21:49:56 +0400
commitc47ec78d7a1534b796e4d3b2dd7b9825deff22bc (patch)
treec8ece2a572c5ffe4b0439cb787e8a6e4b9c68709
parent9c29e82edb3a74d1adbe3156ac84497a85859ee4 (diff)
* ps.cc: Remove all Win 9x considerations. Use psapi functions
directly. Drop support for older Cygwin DLLs. Just use progname_long as is since it's already a POSIX path now. Rename "tty" to "pty" as in the Cygwin DLL. Call setlocale to make sure wcstombs does the right thing according to the current locale. * Makefile.in (ps.exe): Link against psapi.dll.
-rw-r--r--winsup/utils/ChangeLog9
-rw-r--r--winsup/utils/Makefile.in2
-rw-r--r--winsup/utils/ps.cc134
3 files changed, 25 insertions, 120 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index 51025892f..b56af5aee 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -1,3 +1,12 @@
+2011-11-28 Corinna Vinschen <corinna@vinschen.de>
+
+ * ps.cc: Remove all Win 9x considerations. Use psapi functions
+ directly. Drop support for older Cygwin DLLs. Just use progname_long
+ as is since it's already a POSIX path now. Rename "tty" to "pty" as in
+ the Cygwin DLL. Call setlocale to make sure wcstombs does the right
+ thing according to the current locale.
+ * Makefile.in (ps.exe): Link against psapi.dll.
+
2011-11-24 Christopher Faylor <me.cygwin2011@cgf.cx>
* strace.cc (attach_process): Use NT_SUCCESS to figure out if
diff --git a/winsup/utils/Makefile.in b/winsup/utils/Makefile.in
index 50e4396e2..84b8a9d75 100644
--- a/winsup/utils/Makefile.in
+++ b/winsup/utils/Makefile.in
@@ -77,7 +77,7 @@ mount.exe: path-mount.o
cygcheck.exe: MINGW_LDFLAGS += -lntdll
cygpath.exe: ALL_LDFLAGS += -lcygwin -lntdll
cygpath.exe: CXXFLAGS += -fno-threadsafe-statics
-ps.exe: ALL_LDFLAGS += -lcygwin -lntdll
+ps.exe: ALL_LDFLAGS += -lcygwin -lpsapi -lntdll
strace.exe: MINGW_LDFLAGS += -lntdll
ldd.exe: ALL_LDFLAGS += -lpsapi
diff --git a/winsup/utils/ps.cc b/winsup/utils/ps.cc
index 8006521a6..f91849a9b 100644
--- a/winsup/utils/ps.cc
+++ b/winsup/utils/ps.cc
@@ -11,6 +11,7 @@ details. */
#include <errno.h>
#include <stdio.h>
+#include <locale.h>
#include <wchar.h>
#include <windows.h>
#include <time.h>
@@ -21,7 +22,6 @@ details. */
#include <limits.h>
#include <sys/cygwin.h>
#include <cygwin/version.h>
-#include <tlhelp32.h>
#include <psapi.h>
#include <ddk/ntapi.h>
#include <ddk/winddk.h>
@@ -50,112 +50,6 @@ static struct option longopts[] =
static char opts[] = "aefhlp:su:VW";
-typedef BOOL (WINAPI *ENUMPROCESSMODULES)(
- HANDLE hProcess, // handle to the process
- HMODULE * lphModule, // array to receive the module handles
- DWORD cb, // size of the array
- LPDWORD lpcbNeeded // receives the number of bytes returned
-);
-
-typedef DWORD (WINAPI *GETMODULEFILENAME)(
- HANDLE hProcess,
- HMODULE hModule,
- LPTSTR lpstrFileName,
- DWORD nSize
-);
-
-typedef HANDLE (WINAPI *CREATESNAPSHOT)(
- DWORD dwFlags,
- DWORD th32ProcessID
-);
-
-// Win95 functions
-typedef BOOL (WINAPI *PROCESSWALK)(
- HANDLE hSnapshot,
- LPPROCESSENTRY32 lppe
-);
-
-ENUMPROCESSMODULES myEnumProcessModules;
-GETMODULEFILENAME myGetModuleFileNameEx;
-CREATESNAPSHOT myCreateToolhelp32Snapshot;
-PROCESSWALK myProcess32First;
-PROCESSWALK myProcess32Next;
-
-static BOOL WINAPI dummyprocessmodules (
- HANDLE hProcess, // handle to the process
- HMODULE * lphModule, // array to receive the module handles
- DWORD cb, // size of the array
- LPDWORD lpcbNeeded // receives the number of bytes returned
-)
-{
- lphModule[0] = (HMODULE) *lpcbNeeded;
- *lpcbNeeded = 1;
- return 1;
-}
-
-static DWORD WINAPI GetModuleFileNameEx95 (
- HANDLE hProcess,
- HMODULE hModule,
- LPTSTR lpstrFileName,
- DWORD n
-)
-{
- HANDLE h;
- DWORD pid = (DWORD) hModule;
-
- h = myCreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
- if (!h)
- return 0;
-
- PROCESSENTRY32 proc;
- proc.dwSize = sizeof (proc);
- if (myProcess32First(h, &proc))
- do
- if (proc.th32ProcessID == pid)
- {
- CloseHandle (h);
- strcpy (lpstrFileName, proc.szExeFile);
- return 1;
- }
- while (myProcess32Next (h, &proc));
- CloseHandle (h);
- return 0;
-}
-
-int
-init_win ()
-{
- OSVERSIONINFO os_version_info;
-
- memset (&os_version_info, 0, sizeof os_version_info);
- os_version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
- GetVersionEx (&os_version_info);
-
- HMODULE h;
- if (os_version_info.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- h = LoadLibrary ("psapi.dll");
- if (!h)
- return 0;
- myEnumProcessModules = (ENUMPROCESSMODULES) GetProcAddress (h, "EnumProcessModules");
- myGetModuleFileNameEx = (GETMODULEFILENAME) GetProcAddress (h, "GetModuleFileNameExA");
- if (!myEnumProcessModules || !myGetModuleFileNameEx)
- return 0;
- return 1;
- }
-
- h = GetModuleHandle("KERNEL32.DLL");
- myCreateToolhelp32Snapshot = (CREATESNAPSHOT)GetProcAddress (h, "CreateToolhelp32Snapshot");
- myProcess32First = (PROCESSWALK)GetProcAddress (h, "Process32First");
- myProcess32Next = (PROCESSWALK)GetProcAddress (h, "Process32Next");
- if (!myCreateToolhelp32Snapshot || !myProcess32First || !myProcess32Next)
- return 0;
-
- myEnumProcessModules = dummyprocessmodules;
- myGetModuleFileNameEx = GetModuleFileNameEx95;
- return 1;
-}
-
static char *
start_time (external_pinfo *child)
{
@@ -206,7 +100,7 @@ ttynam (int ntty)
else if (ntty & 0xffff0000)
sprintf (buf0, "cons%d", ntty & 0xff);
else
- sprintf (buf0, "tty%d", ntty);
+ sprintf (buf0, "pty%d", ntty);
sprintf (buf, " %-7s", buf0);
return buf;
}
@@ -272,6 +166,8 @@ main (int argc, char *argv[])
proc_id = -1;
lflag = 1;
+ setlocale (LC_ALL, "");
+
prog_name = program_invocation_short_name;
while ((ch = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
@@ -335,8 +231,6 @@ main (int argc, char *argv[])
(void) cygwin_internal (CW_LOCK_PINFO, 1000);
- if (query == CW_GETPINFO_FULL && !init_win ())
- query = CW_GETPINFO;
if (query == CW_GETPINFO_FULL)
{
/* Enable debug privilege to allow to enumerate all processes,
@@ -391,12 +285,7 @@ main (int argc, char *argv[])
{
char *s;
pname[0] = '\0';
- if (p->version >= EXTERNAL_PINFO_VERSION_32_LP)
- cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE,
- p->progname_long, pname, NT_MAX_PATH);
- else
- cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE,
- p->progname, pname, NT_MAX_PATH);
+ strncat (pname, p->progname_long, NT_MAX_PATH);
s = strchr (pname, '\0') - 4;
if (s > pname && strcasecmp (s, ".exe") == 0)
*s = '\0';
@@ -411,7 +300,7 @@ main (int argc, char *argv[])
continue;
HMODULE hm[1000];
DWORD n = p->dwProcessId;
- if (!myEnumProcessModules (h, hm, sizeof (hm), &n))
+ if (!EnumProcessModules (h, hm, sizeof (hm), &n))
n = 0;
/* This occurs when trying to enum modules of a 64 bit process.
GetModuleFileNameEx with a NULL module will return the same error.
@@ -459,8 +348,15 @@ main (int argc, char *argv[])
else
strcpy (pname, "*** unknown ***");
}
- else if (!n || !myGetModuleFileNameEx (h, hm[0], pname, PATH_MAX))
- strcpy (pname, "*** unknown ***");
+ else
+ {
+ wchar_t pwname[NT_MAX_PATH];
+
+ if (!n || !GetModuleFileNameExW (h, hm[0], pwname, NT_MAX_PATH))
+ strcpy (pname, "*** unknown ***");
+ else
+ wcstombs (pname, pwname, NT_MAX_PATH);
+ }
FILETIME ct, et, kt, ut;
if (GetProcessTimes (h, &ct, &et, &kt, &ut))
p->start_time = to_time_t (&ct);