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>
 | 
			
		||||
 | 
			
		||||
	* 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 write(f, b, s)		rb_w32_write(f, b, s)
 | 
			
		||||
#define getpid()		rb_w32_getpid()
 | 
			
		||||
#define getppid()		rb_w32_getppid()
 | 
			
		||||
#define sleep(x)		rb_w32_Sleep((x)*1000)
 | 
			
		||||
#define Sleep(msec)		(void)rb_w32_Sleep(msec)
 | 
			
		||||
#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 fcntl(int, int, ...);
 | 
			
		||||
extern rb_pid_t rb_w32_getpid(void);
 | 
			
		||||
extern rb_pid_t rb_w32_getppid(void);
 | 
			
		||||
#if !defined(__BORLANDC__) && !defined(_WIN32_WCE)
 | 
			
		||||
extern int rb_w32_isatty(int);
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -179,11 +179,7 @@ static VALUE
 | 
			
		|||
get_ppid(void)
 | 
			
		||||
{
 | 
			
		||||
    rb_secure(2);
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
    return INT2FIX(0);
 | 
			
		||||
#else
 | 
			
		||||
    return PIDT2NUM(getppid());
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3829,6 +3829,40 @@ rb_w32_getpid(void)
 | 
			
		|||
    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
 | 
			
		||||
rb_w32_fclose(FILE *fp)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue