[launchd-changes] [23138] trunk/launchd
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 6 16:32:49 PST 2007
Revision: 23138
http://trac.macosforge.org/projects/launchd/changeset/23138
Author: zarzycki at apple.com
Date: 2007-03-06 16:32:48 -0800 (Tue, 06 Mar 2007)
Log Message:
-----------
<rdar://problem/5040403> Supply an API for CoreFoundation to get the PID of the per user launchd
Modified Paths:
--------------
trunk/launchd/src/launchd_core_logic.c
trunk/launchd/src/launchd_mig_types.defs
trunk/launchd/src/libvproc.c
trunk/launchd/src/libvproc_internal.h
trunk/launchd/src/libvproc_public.h
trunk/launchd/src/protocol_job.defs
Added Paths:
-----------
trunk/launchd/testing/vproc_gsk_test.c
Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c 2007-03-06 21:38:02 UTC (rev 23137)
+++ trunk/launchd/src/launchd_core_logic.c 2007-03-07 00:32:48 UTC (rev 23138)
@@ -4170,7 +4170,7 @@
}
kern_return_t
-job_mig_get_integer(job_t j, get_set_int_key_t key, int64_t *val)
+job_mig_swap_integer(job_t j, vproc_gsk_t inkey, vproc_gsk_t outkey, int64_t inval, int64_t *outval)
{
kern_return_t kr = 0;
@@ -4178,15 +4178,38 @@
return BOOTSTRAP_NO_MEMORY;
}
- switch (key) {
- case LAST_EXIT_STATUS:
- *val = j->last_exit_status;
+ switch (outkey) {
+ case VPROC_GSK_LAST_EXIT_STATUS:
+ *outval = j->last_exit_status;
break;
+ case VPROC_GSK_MGR_UID:
+ *outval = getuid();
+ break;
+ case VPROC_GSK_MGR_PID:
+ *outval = getpid();
+ break;
+ case 0:
+ *outval = 0;
+ break;
default:
kr = 1;
break;
}
+ switch (inkey) {
+ case VPROC_GSK_GLOBAL_ON_DEMAND:
+ kr = job_set_global_on_demand(j, (bool)inval) ? 0 : 1;
+ break;
+ case 0:
+ break;
+ case VPROC_GSK_LAST_EXIT_STATUS:
+ case VPROC_GSK_MGR_UID:
+ case VPROC_GSK_MGR_PID:
+ default:
+ kr = 1;
+ break;
+ }
+
return kr;
}
@@ -4213,27 +4236,6 @@
}
kern_return_t
-job_mig_set_integer(job_t j, get_set_int_key_t key, int64_t val)
-{
- kern_return_t kr = 0;
-
- if (!launchd_assumes(j != NULL)) {
- return BOOTSTRAP_NO_MEMORY;
- }
-
- switch (key) {
- case GLOBAL_ON_DEMAND:
- kr = job_set_global_on_demand(j, (bool)val) ? 0 : 1;
- break;
- default:
- kr = 1;
- break;
- }
-
- return kr;
-}
-
-kern_return_t
job_mig_getsocket(job_t j, name_t spr)
{
if (!launchd_assumes(j != NULL)) {
Modified: trunk/launchd/src/launchd_mig_types.defs
===================================================================
--- trunk/launchd/src/launchd_mig_types.defs 2007-03-06 21:38:02 UTC (rev 23137)
+++ trunk/launchd/src/launchd_mig_types.defs 2007-03-07 00:32:48 UTC (rev 23138)
@@ -26,7 +26,7 @@
type pid_t = integer_t;
type uid_t = integer_t;
type gid_t = integer_t;
-type get_set_int_key_t = integer_t;
+type vproc_gsk_t = integer_t;
type logmsg_t = c_string[*:2048];
type cmd_t = c_string[512];
type cmd_array_t = ^array [] of cmd_t;
Modified: trunk/launchd/src/libvproc.c
===================================================================
--- trunk/launchd/src/libvproc.c 2007-03-06 21:38:02 UTC (rev 23137)
+++ trunk/launchd/src/libvproc.c 2007-03-07 00:32:48 UTC (rev 23138)
@@ -201,7 +201,7 @@
{
int64_t val;
- if (vproc_mig_get_integer(bootstrap_port, LAST_EXIT_STATUS, &val) == 0) {
+ if (vproc_swap_integer(NULL, VPROC_GSK_LAST_EXIT_STATUS, 0, &val) == 0) {
*wstatus = (int)val;
return NULL;
}
@@ -209,6 +209,18 @@
return (vproc_err_t)_vproc_get_last_exit_status;
}
+vproc_err_t
+vproc_swap_integer(vproc_t vp __attribute__((unused)), vproc_gsk_t key, int64_t *inval, int64_t *outval)
+{
+ int64_t dummyval = 0;
+
+ if (vproc_mig_swap_integer(bootstrap_port, inval ? key : 0, outval ? key : 0, inval ? *inval : 0, outval ? outval : &dummyval) == 0) {
+ return NULL;
+ }
+
+ return (vproc_err_t)vproc_swap_integer;
+}
+
void *
reboot2(uint64_t flags)
{
@@ -242,7 +254,7 @@
{
int64_t val = state ? ~0 : 0;
- if (vproc_mig_set_integer(bootstrap_port, GLOBAL_ON_DEMAND, val) == 0) {
+ if (vproc_swap_integer(NULL, VPROC_GSK_GLOBAL_ON_DEMAND, &val, NULL) == 0) {
return NULL;
}
Modified: trunk/launchd/src/libvproc_internal.h
===================================================================
--- trunk/launchd/src/libvproc_internal.h 2007-03-06 21:38:02 UTC (rev 23137)
+++ trunk/launchd/src/libvproc_internal.h 2007-03-07 00:32:48 UTC (rev 23138)
@@ -28,10 +28,6 @@
typedef char * logmsg_t;
typedef mach_port_t vproc_mig_t;
typedef integer_t binpref_t[8];
-typedef enum {
- LAST_EXIT_STATUS = 1,
- GLOBAL_ON_DEMAND,
-} get_set_int_key_t;
#ifdef protocol_vproc_MSG_COUNT
/* HACK */
Modified: trunk/launchd/src/libvproc_public.h
===================================================================
--- trunk/launchd/src/libvproc_public.h 2007-03-06 21:38:02 UTC (rev 23137)
+++ trunk/launchd/src/libvproc_public.h 2007-03-07 00:32:48 UTC (rev 23138)
@@ -21,16 +21,30 @@
*/
#include <sys/cdefs.h>
+#include <sys/types.h>
__BEGIN_DECLS
+#pragma GCC visibility push(default)
+
+typedef enum {
+ VPROC_GSK_LAST_EXIT_STATUS = 1,
+ VPROC_GSK_GLOBAL_ON_DEMAND,
+ VPROC_GSK_MGR_UID,
+ VPROC_GSK_MGR_PID,
+} vproc_gsk_t;
+
typedef void * vproc_err_t;
typedef void * vproc_t;
typedef void * vprocmgr_t;
+vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval);
+
const char *vproc_strerror(vproc_err_t r);
+#pragma GCC visibility pop
+
__END_DECLS
#endif
Modified: trunk/launchd/src/protocol_job.defs
===================================================================
--- trunk/launchd/src/protocol_job.defs 2007-03-06 21:38:02 UTC (rev 23137)
+++ trunk/launchd/src/protocol_job.defs 2007-03-07 00:32:48 UTC (rev 23138)
@@ -121,15 +121,14 @@
routine uncork_fork(
__bs_port : job_t);
-routine get_integer(
+routine swap_integer(
__bs_port : job_t;
- __key : get_set_int_key_t;
- out __val : int64_t);
+ __inkey : vproc_gsk_t;
+ __outkey : vproc_gsk_t;
+ __inval : int64_t;
+ out __outval : int64_t);
-routine set_integer(
- __bs_port : job_t;
- __key : get_set_int_key_t;
- __val : int64_t);
+skip;
simpleroutine log(
__bs_port : job_t;
Added: trunk/launchd/testing/vproc_gsk_test.c
===================================================================
--- trunk/launchd/testing/vproc_gsk_test.c (rev 0)
+++ trunk/launchd/testing/vproc_gsk_test.c 2007-03-07 00:32:48 UTC (rev 23138)
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <vproc.h>
+
+int main(void)
+{
+ int64_t val;
+ pid_t p;
+ uid_t u;
+
+ /* we assign val to p or u due to 64 bit to 32 bit trucation */
+
+ assert(vproc_swap_integer(NULL, VPROC_GSK_MGR_PID, NULL, &val) == NULL);
+ p = val;
+
+ assert(vproc_swap_integer(NULL, VPROC_GSK_MGR_UID, NULL, &val) == NULL);
+ u = val;
+
+ fprintf(stdout, "UID = %u PID = %u\n", u, p);
+
+ return 0;
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20070306/2ebcdc66/attachment.html
More information about the launchd-changes
mailing list