mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* include/ruby/win32.h, win32/win32.c (rb_w32_getppid): now support
getppid() on win32 (but only Win2k or later). * process.c (get_ppid): remove win32 special logic. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b6cab6e8f1
commit
d3a0ef8198
4 changed files with 43 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Tue Jun 24 11:12:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
|
* include/ruby/win32.h, win32/win32.c (rb_w32_getppid): now support
|
||||||
|
getppid() on win32 (but only Win2k or later).
|
||||||
|
|
||||||
|
* process.c (get_ppid): remove win32 special logic.
|
||||||
|
|
||||||
Tue Jun 24 09:40:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
Tue Jun 24 09:40:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* ext/socket/socket.c (init_sock): socket is binmode on platforms
|
* ext/socket/socket.c (init_sock): socket is binmode on platforms
|
||||||
|
|
|
@ -140,6 +140,7 @@ extern DWORD rb_w32_osid(void);
|
||||||
#define read(f, b, s) rb_w32_read(f, b, s)
|
#define read(f, b, s) rb_w32_read(f, b, s)
|
||||||
#define write(f, b, s) rb_w32_write(f, b, s)
|
#define write(f, b, s) rb_w32_write(f, b, s)
|
||||||
#define getpid() rb_w32_getpid()
|
#define getpid() rb_w32_getpid()
|
||||||
|
#define getppid() rb_w32_getppid()
|
||||||
#define sleep(x) rb_w32_Sleep((x)*1000)
|
#define sleep(x) rb_w32_Sleep((x)*1000)
|
||||||
#define Sleep(msec) (void)rb_w32_Sleep(msec)
|
#define Sleep(msec) (void)rb_w32_Sleep(msec)
|
||||||
#define fstat(fd,st) _fstati64(fd,st)
|
#define fstat(fd,st) _fstati64(fd,st)
|
||||||
|
@ -262,6 +263,7 @@ extern rb_pid_t rb_w32_aspawn(int, const char *, char *const *);
|
||||||
extern int kill(int, int);
|
extern int kill(int, int);
|
||||||
extern int fcntl(int, int, ...);
|
extern int fcntl(int, int, ...);
|
||||||
extern rb_pid_t rb_w32_getpid(void);
|
extern rb_pid_t rb_w32_getpid(void);
|
||||||
|
extern rb_pid_t rb_w32_getppid(void);
|
||||||
#if !defined(__BORLANDC__) && !defined(_WIN32_WCE)
|
#if !defined(__BORLANDC__) && !defined(_WIN32_WCE)
|
||||||
extern int rb_w32_isatty(int);
|
extern int rb_w32_isatty(int);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -179,11 +179,7 @@ static VALUE
|
||||||
get_ppid(void)
|
get_ppid(void)
|
||||||
{
|
{
|
||||||
rb_secure(2);
|
rb_secure(2);
|
||||||
#ifdef _WIN32
|
|
||||||
return INT2FIX(0);
|
|
||||||
#else
|
|
||||||
return PIDT2NUM(getppid());
|
return PIDT2NUM(getppid());
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3829,6 +3829,40 @@ rb_w32_getpid(void)
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
rb_pid_t
|
||||||
|
rb_w32_getppid(void)
|
||||||
|
{
|
||||||
|
static long (WINAPI *pNtQueryInformationProcess)(HANDLE, int, void *, ULONG, ULONG *) = NULL;
|
||||||
|
rb_pid_t ppid = 0;
|
||||||
|
|
||||||
|
if (!IsWin95() && rb_w32_osver() >= 5) {
|
||||||
|
if (!pNtQueryInformationProcess) {
|
||||||
|
HANDLE hNtDll = GetModuleHandle("ntdll.dll");
|
||||||
|
if (hNtDll) {
|
||||||
|
pNtQueryInformationProcess = (long (WINAPI *)(HANDLE, int, void *, ULONG, ULONG *))GetProcAddress(hNtDll, "NtQueryInformationProcess");
|
||||||
|
if (pNtQueryInformationProcess) {
|
||||||
|
struct {
|
||||||
|
long ExitStatus;
|
||||||
|
void* PebBaseAddress;
|
||||||
|
ULONG AffinityMask;
|
||||||
|
ULONG BasePriority;
|
||||||
|
ULONG UniqueProcessId;
|
||||||
|
ULONG ParentProcessId;
|
||||||
|
} pbi;
|
||||||
|
ULONG len;
|
||||||
|
long ret = pNtQueryInformationProcess(GetCurrentProcess(), 0, &pbi, sizeof(pbi), &len);
|
||||||
|
if (!ret) {
|
||||||
|
ppid = pbi.ParentProcessId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ppid;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_fclose(FILE *fp)
|
rb_w32_fclose(FILE *fp)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue