Changeset 23138
- Timestamp:
- 03/06/07 16:32:48 (21 months ago)
- Location:
- trunk/launchd
- Files:
-
- 1 added
- 6 modified
-
src/launchd_core_logic.c (modified) (4 diffs)
-
src/launchd_mig_types.defs (modified) (1 diff)
-
src/libvproc.c (modified) (3 diffs)
-
src/libvproc_internal.h (modified) (1 diff)
-
src/libvproc_public.h (modified) (2 diffs)
-
src/protocol_job.defs (modified) (1 diff)
-
testing/vproc_gsk_test.c (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23136 r23138 4171 4171 4172 4172 kern_return_t 4173 job_mig_ get_integer(job_t j, get_set_int_key_t key, int64_t *val)4173 job_mig_swap_integer(job_t j, vproc_gsk_t inkey, vproc_gsk_t outkey, int64_t inval, int64_t *outval) 4174 4174 { 4175 4175 kern_return_t kr = 0; … … 4179 4179 } 4180 4180 4181 switch (key) { 4182 case LAST_EXIT_STATUS: 4183 *val = j->last_exit_status; 4181 switch (outkey) { 4182 case VPROC_GSK_LAST_EXIT_STATUS: 4183 *outval = j->last_exit_status; 4184 break; 4185 case VPROC_GSK_MGR_UID: 4186 *outval = getuid(); 4187 break; 4188 case VPROC_GSK_MGR_PID: 4189 *outval = getpid(); 4190 break; 4191 case 0: 4192 *outval = 0; 4184 4193 break; 4185 4194 default: … … 4188 4197 } 4189 4198 4199 switch (inkey) { 4200 case VPROC_GSK_GLOBAL_ON_DEMAND: 4201 kr = job_set_global_on_demand(j, (bool)inval) ? 0 : 1; 4202 break; 4203 case 0: 4204 break; 4205 case VPROC_GSK_LAST_EXIT_STATUS: 4206 case VPROC_GSK_MGR_UID: 4207 case VPROC_GSK_MGR_PID: 4208 default: 4209 kr = 1; 4210 break; 4211 } 4212 4190 4213 return kr; 4191 4214 } … … 4211 4234 4212 4235 return 0; 4213 }4214 4215 kern_return_t4216 job_mig_set_integer(job_t j, get_set_int_key_t key, int64_t val)4217 {4218 kern_return_t kr = 0;4219 4220 if (!launchd_assumes(j != NULL)) {4221 return BOOTSTRAP_NO_MEMORY;4222 }4223 4224 switch (key) {4225 case GLOBAL_ON_DEMAND:4226 kr = job_set_global_on_demand(j, (bool)val) ? 0 : 1;4227 break;4228 default:4229 kr = 1;4230 break;4231 }4232 4233 return kr;4234 4236 } 4235 4237 -
trunk/launchd/src/launchd_mig_types.defs
r22994 r23138 27 27 type uid_t = integer_t; 28 28 type gid_t = integer_t; 29 type get_set_int_key_t = integer_t;29 type vproc_gsk_t = integer_t; 30 30 type logmsg_t = c_string[*:2048]; 31 31 type cmd_t = c_string[512]; -
trunk/launchd/src/libvproc.c
r23132 r23138 202 202 int64_t val; 203 203 204 if (vproc_ mig_get_integer(bootstrap_port, LAST_EXIT_STATUS, &val) == 0) {204 if (vproc_swap_integer(NULL, VPROC_GSK_LAST_EXIT_STATUS, 0, &val) == 0) { 205 205 *wstatus = (int)val; 206 206 return NULL; … … 208 208 209 209 return (vproc_err_t)_vproc_get_last_exit_status; 210 } 211 212 vproc_err_t 213 vproc_swap_integer(vproc_t vp __attribute__((unused)), vproc_gsk_t key, int64_t *inval, int64_t *outval) 214 { 215 int64_t dummyval = 0; 216 217 if (vproc_mig_swap_integer(bootstrap_port, inval ? key : 0, outval ? key : 0, inval ? *inval : 0, outval ? outval : &dummyval) == 0) { 218 return NULL; 219 } 220 221 return (vproc_err_t)vproc_swap_integer; 210 222 } 211 223 … … 243 255 int64_t val = state ? ~0 : 0; 244 256 245 if (vproc_ mig_set_integer(bootstrap_port, GLOBAL_ON_DEMAND, val) == 0) {257 if (vproc_swap_integer(NULL, VPROC_GSK_GLOBAL_ON_DEMAND, &val, NULL) == 0) { 246 258 return NULL; 247 259 } -
trunk/launchd/src/libvproc_internal.h
r23132 r23138 29 29 typedef mach_port_t vproc_mig_t; 30 30 typedef integer_t binpref_t[8]; 31 typedef enum {32 LAST_EXIT_STATUS = 1,33 GLOBAL_ON_DEMAND,34 } get_set_int_key_t;35 31 36 32 #ifdef protocol_vproc_MSG_COUNT -
trunk/launchd/src/libvproc_public.h
r23082 r23138 22 22 23 23 #include <sys/cdefs.h> 24 #include <sys/types.h> 24 25 25 26 __BEGIN_DECLS 27 28 #pragma GCC visibility push(default) 29 30 typedef enum { 31 VPROC_GSK_LAST_EXIT_STATUS = 1, 32 VPROC_GSK_GLOBAL_ON_DEMAND, 33 VPROC_GSK_MGR_UID, 34 VPROC_GSK_MGR_PID, 35 } vproc_gsk_t; 26 36 27 37 typedef void * vproc_err_t; … … 30 40 typedef void * vprocmgr_t; 31 41 42 vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); 43 32 44 const char *vproc_strerror(vproc_err_t r); 45 46 #pragma GCC visibility pop 33 47 34 48 __END_DECLS -
trunk/launchd/src/protocol_job.defs
r23130 r23138 122 122 __bs_port : job_t); 123 123 124 routine get_integer(124 routine swap_integer( 125 125 __bs_port : job_t; 126 __key : get_set_int_key_t; 127 out __val : int64_t); 126 __inkey : vproc_gsk_t; 127 __outkey : vproc_gsk_t; 128 __inval : int64_t; 129 out __outval : int64_t); 128 130 129 routine set_integer( 130 __bs_port : job_t; 131 __key : get_set_int_key_t; 132 __val : int64_t); 131 skip; 133 132 134 133 simpleroutine log(

