Projects
Browse Source     Search     Timeline     Wiki

Changeset 23138

Show
Ignore:
Timestamp:
03/06/07 16:32:48 (21 months ago)
Author:
zarzycki@…
Message:

<rdar://problem/5040403> Supply an API for CoreFoundation to get the PID of the per user launchd

Location:
trunk/launchd
Files:
1 added
6 modified

Legend:

Unmodified
Added
Removed
  • trunk/launchd/src/launchd_core_logic.c

    r23136 r23138  
    41714171 
    41724172kern_return_t 
    4173 job_mig_get_integer(job_t j, get_set_int_key_t key, int64_t *val) 
     4173job_mig_swap_integer(job_t j, vproc_gsk_t inkey, vproc_gsk_t outkey, int64_t inval, int64_t *outval) 
    41744174{ 
    41754175        kern_return_t kr = 0; 
     
    41794179        } 
    41804180 
    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; 
    41844193                break; 
    41854194        default: 
     
    41884197        } 
    41894198 
     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 
    41904213        return kr; 
    41914214} 
     
    42114234 
    42124235        return 0; 
    4213 } 
    4214  
    4215 kern_return_t 
    4216 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; 
    42344236} 
    42354237 
  • trunk/launchd/src/launchd_mig_types.defs

    r22994 r23138  
    2727type uid_t                      = integer_t; 
    2828type gid_t                      = integer_t; 
    29 type get_set_int_key_t          = integer_t; 
     29type vproc_gsk_t                = integer_t; 
    3030type logmsg_t                   = c_string[*:2048]; 
    3131type cmd_t                      = c_string[512]; 
  • trunk/launchd/src/libvproc.c

    r23132 r23138  
    202202        int64_t val; 
    203203 
    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) { 
    205205                *wstatus = (int)val; 
    206206                return NULL; 
     
    208208 
    209209        return (vproc_err_t)_vproc_get_last_exit_status; 
     210} 
     211 
     212vproc_err_t 
     213vproc_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; 
    210222} 
    211223 
     
    243255        int64_t val = state ? ~0 : 0; 
    244256 
    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) { 
    246258                return NULL; 
    247259        } 
  • trunk/launchd/src/libvproc_internal.h

    r23132 r23138  
    2929typedef mach_port_t vproc_mig_t; 
    3030typedef integer_t binpref_t[8]; 
    31 typedef enum { 
    32         LAST_EXIT_STATUS = 1, 
    33         GLOBAL_ON_DEMAND, 
    34 } get_set_int_key_t; 
    3531 
    3632#ifdef protocol_vproc_MSG_COUNT 
  • trunk/launchd/src/libvproc_public.h

    r23082 r23138  
    2222 
    2323#include <sys/cdefs.h> 
     24#include <sys/types.h> 
    2425 
    2526__BEGIN_DECLS 
     27 
     28#pragma GCC visibility push(default) 
     29 
     30typedef 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; 
    2636 
    2737typedef void * vproc_err_t; 
     
    3040typedef void * vprocmgr_t; 
    3141 
     42vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); 
     43 
    3244const char *vproc_strerror(vproc_err_t r); 
     45 
     46#pragma GCC visibility pop 
    3347 
    3448__END_DECLS 
  • trunk/launchd/src/protocol_job.defs

    r23130 r23138  
    122122                __bs_port       : job_t); 
    123123 
    124 routine get_integer( 
     124routine swap_integer( 
    125125                __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); 
    128130 
    129 routine set_integer( 
    130                 __bs_port       : job_t; 
    131                 __key           : get_set_int_key_t; 
    132                 __val           : int64_t); 
     131skip; 
    133132 
    134133simpleroutine log(