Diff
Modified: trunk/launchd/src/launchd_core_logic.c (22918 => 22919)
--- trunk/launchd/src/launchd_core_logic.c 2006-10-25 16:36:57 UTC (rev 22918)
+++ trunk/launchd/src/launchd_core_logic.c 2006-10-26 01:18:08 UTC (rev 22919)
@@ -3622,6 +3622,18 @@
}
kern_return_t
+job_mig_log(job_t j, int pri, int err, logmsg_t msg)
+{
+ if ((errno = err)) {
+ job_log_error(j, pri, "%s", msg);
+ } else {
+ job_log(j, pri, "%s", msg);
+ }
+
+ return 0;
+}
+
+kern_return_t
job_mig_check_in(job_t j, name_t servicename, mach_port_t *serviceportp)
{
static pid_t last_warned_pid = 0;
Modified: trunk/launchd/src/launchd_mig_types.defs (22918 => 22919)
--- trunk/launchd/src/launchd_mig_types.defs 2006-10-25 16:36:57 UTC (rev 22918)
+++ trunk/launchd/src/launchd_mig_types.defs 2006-10-26 01:18:08 UTC (rev 22919)
@@ -25,6 +25,7 @@
type pid_t = integer_t;
type get_set_int_key_t = integer_t;
+type logmsg_t = c_string[*:2048];
type cmd_t = c_string[512];
type cmd_array_t = ^array [] of cmd_t;
type name_t = c_string[128];
Modified: trunk/launchd/src/libvproc.c (22918 => 22919)
--- trunk/launchd/src/libvproc.c 2006-10-25 16:36:57 UTC (rev 22918)
+++ trunk/launchd/src/libvproc.c 2006-10-26 01:18:08 UTC (rev 22919)
@@ -27,6 +27,7 @@
#include <mach/vm_map.h>
#include <sys/param.h>
#include <stdlib.h>
+#include <stdio.h>
#include <errno.h>
#include "liblaunch_public.h"
@@ -175,3 +176,34 @@
return (vproc_err_t)_vproc_set_global_on_demand;
}
+
+static void
+_vproc_logv(int pri, int err, const char *msg, va_list ap)
+{
+ char flat_msg[3000];
+
+ snprintf(flat_msg, sizeof(flat_msg) - 1, msg, ap);
+ flat_msg[sizeof(flat_msg) - 1] = '\0';
+
+ vproc_mig_log(bootstrap_port, pri, err, flat_msg);
+}
+
+void
+_vproc_log(int pri, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ _vproc_logv(pri, 0, msg, ap);
+ va_end(ap);
+}
+
+void
+_vproc_log_error(int pri, const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ _vproc_logv(pri, errno, msg, ap);
+ va_end(ap);
+}
Modified: trunk/launchd/src/libvproc_internal.h (22918 => 22919)
--- trunk/launchd/src/libvproc_internal.h 2006-10-25 16:36:57 UTC (rev 22918)
+++ trunk/launchd/src/libvproc_internal.h 2006-10-26 01:18:08 UTC (rev 22919)
@@ -24,6 +24,7 @@
#include "libbootstrap_public.h"
typedef char * _internal_string_t;
+typedef char * logmsg_t;
typedef mach_port_t vproc_mig_t;
typedef enum {
LAST_EXIT_STATUS = 1,
Modified: trunk/launchd/src/libvproc_private.h (22918 => 22919)
--- trunk/launchd/src/libvproc_private.h 2006-10-25 16:36:57 UTC (rev 22918)
+++ trunk/launchd/src/libvproc_private.h 2006-10-26 01:18:08 UTC (rev 22919)
@@ -30,6 +30,9 @@
vproc_err_t _vproc_get_last_exit_status(int *wstatus);
vproc_err_t _vproc_set_global_on_demand(bool val);
+void _vproc_log(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3)));
+void _vproc_log_error(int pri, const char *msg, ...) __attribute__((format(printf, 2, 3)));
+
#pragma GCC visibility pop
__END_DECLS
Modified: trunk/launchd/src/protocol_job.defs (22918 => 22919)
--- trunk/launchd/src/protocol_job.defs 2006-10-25 16:36:57 UTC (rev 22918)
+++ trunk/launchd/src/protocol_job.defs 2006-10-26 01:18:08 UTC (rev 22919)
@@ -119,3 +119,9 @@
__bs_port : job_t;
__key : get_set_int_key_t;
__val : int64_t);
+
+simpleroutine log(
+ __bs_port : job_t;
+ __pri : integer_t;
+ __err : integer_t;
+ __msg : logmsg_t);