Changeset 23617
- Timestamp:
- 2008-05-02 15:58:06 (5 months ago)
- Files:
-
- 1 modified
-
trunk/launchd/src/launchd_runtime_kill.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_runtime_kill.c
r23519 r23617 19 19 */ 20 20 21 #if defined(__LP64__) 22 /* ??? No way to get the old behavior */ 23 #define old_kill(x, y) kill(x, y) 24 #define old_killpg(x, y) kill(-(x), y) 25 #elif defined(__arm__) 26 /* ??? No blessed way to get the old behavior */ 27 extern int __kill(int, int, int); 28 #define old_kill(x, y) __kill(x, y, 0) 29 #define old_killpg(x, y) __kill(-(x), y, 0) 30 #else 31 #define _NONSTD_SOURCE 1 32 #define old_kill(x, y) kill(x, y) 33 #define old_killpg(x, y) killpg(x, y) 34 #endif 21 #include <sys/syscall.h> 22 #include <unistd.h> 35 23 #include <signal.h> 36 24 37 25 #include "launchd_runtime_kill.h" 38 26 39 /*40 * POSIX defines consistency over correctness, and consequently kill/killpg now41 * returns EPERM instead of ESRCH.42 *43 * I've filed 5487498 to get a non-portable kill() variant, but for now,44 * defining _NONSTD_SOURCE gets us the old behavior.45 */46 47 27 int 48 28 runtime_kill(pid_t pid, int sig) 49 29 { 50 return old_kill(pid, sig); 30 /* 31 * POSIX defines consistency over correctness, and consequently 32 * kill/killpg now returns EPERM instead of ESRCH. 33 * 34 * I've filed 5487498 to get a non-portable kill(). 35 * We'll regretfully take advantage of implementation details for now. 36 */ 37 return syscall(SYS_kill, pid, sig, 0); 51 38 } 52 39 … … 54 41 runtime_killpg(pid_t pgrp, int sig) 55 42 { 56 return old_killpg(pgrp, sig);43 return runtime_kill(-pgrp, sig); 57 44 }

