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
	
	 usa
						usa