Revision: 22911 http://trac.macosforge.org/projects/launchd/changeset/22911 Author: zarzycki@apple.com Date: 2006-10-23 13:10:11 -0700 (Mon, 23 Oct 2006) Log Message: ----------- Let's put all the old bootstrap_*() APIs in their own file. Modified Paths: -------------- trunk/launchd/src/Makefile.am trunk/launchd/src/Makefile.in trunk/launchd/src/bootstrap_public.h trunk/launchd/src/launch.h trunk/launchd/src/launch_priv.h trunk/launchd/src/libbootstrap.c trunk/launchd/src/libvproc.c trunk/launchd/src/vproc_priv.h Modified: trunk/launchd/src/Makefile.am =================================================================== --- trunk/launchd/src/Makefile.am 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/Makefile.am 2006-10-23 20:10:11 UTC (rev 22911) @@ -1,4 +1,4 @@ -AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 +AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 -fvisibility=hidden -Dmig_external=__private_extern__ CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ launchd_internal.h launchd_internalServer.h launchd_internalServer.h launchd_internalUser.c \ @@ -11,13 +11,15 @@ noinst_LIBRARIES = liblaunch.a liblaunch_profile.a -liblaunch_a_SOURCES = liblaunch.c libvproc.c +liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c liblaunch_profile_a_CFLAGS = -pg $(AM_CFLAGS) -liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c +liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c $(srcdir)/libvproc.c:: protocol_vproc.h +$(srcdir)/protocol_vprocUser.c:: protocol_vproc.h + install-data-hook: mkdir -p $(DESTDIR)/usr/local/lib/system cp liblaunch.a $(DESTDIR)/usr/local/lib/system @@ -34,14 +36,14 @@ sysconf_DATA = hostconfig rc.common rc.netboot rc.shutdown -launchctl_CFLAGS = $(AM_CFLAGS) -fvisibility=hidden -I/System/Library/Frameworks/System.framework/PrivateHeaders +launchctl_CFLAGS = $(AM_CFLAGS) -I/System/Library/Frameworks/System.framework/PrivateHeaders launchctl_LDFLAGS = -framework CoreFoundation -weak_library /usr/lib/libedit.dylib -SystemStarter_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -fvisibility=hidden +SystemStarter_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) SystemStarter_LDFLAGS = -framework CoreFoundation SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c -launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter -fvisibility=hidden +launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter launchd_LDFLAGS = -lbsm launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c init.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c Modified: trunk/launchd/src/Makefile.in =================================================================== --- trunk/launchd/src/Makefile.in 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/Makefile.in 2006-10-23 20:10:11 UTC (rev 22911) @@ -56,16 +56,21 @@ ARFLAGS = cru liblaunch_a_AR = $(AR) $(ARFLAGS) liblaunch_a_LIBADD = -am__liblaunch_a_SOURCES_DIST = liblaunch.c libvproc.c +am__liblaunch_a_SOURCES_DIST = liblaunch.c libvproc.c libbootstrap.c \ + protocol_vprocUser.c @LIBS_ONLY_TRUE@am_liblaunch_a_OBJECTS = liblaunch.$(OBJEXT) \ -@LIBS_ONLY_TRUE@ libvproc.$(OBJEXT) +@LIBS_ONLY_TRUE@ libvproc.$(OBJEXT) libbootstrap.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ protocol_vprocUser.$(OBJEXT) liblaunch_a_OBJECTS = $(am_liblaunch_a_OBJECTS) liblaunch_profile_a_AR = $(AR) $(ARFLAGS) liblaunch_profile_a_LIBADD = -am__liblaunch_profile_a_SOURCES_DIST = liblaunch.c libvproc.c +am__liblaunch_profile_a_SOURCES_DIST = liblaunch.c libvproc.c \ + libbootstrap.c protocol_vprocUser.c @LIBS_ONLY_TRUE@am_liblaunch_profile_a_OBJECTS = \ @LIBS_ONLY_TRUE@ liblaunch_profile_a-liblaunch.$(OBJEXT) \ -@LIBS_ONLY_TRUE@ liblaunch_profile_a-libvproc.$(OBJEXT) +@LIBS_ONLY_TRUE@ liblaunch_profile_a-libvproc.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ liblaunch_profile_a-libbootstrap.$(OBJEXT) \ +@LIBS_ONLY_TRUE@ liblaunch_profile_a-protocol_vprocUser.$(OBJEXT) liblaunch_profile_a_OBJECTS = $(am_liblaunch_profile_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \ "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(sbindir)" \ @@ -221,23 +226,23 @@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ -AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 +AM_CFLAGS = -no-cpp-precomp -F/System/Library/PrivateFrameworks -Wall -Wextra -Waggregate-return -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror -D__MigTypeCheck=1 -fvisibility=hidden -Dmig_external=__private_extern__ CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h \ launchd_internal.h launchd_internalServer.h launchd_internalServer.h launchd_internalUser.c \ notifyServer.c notifyServer.h job_replyUser.c job_reply.h @LIBS_ONLY_TRUE@noinst_LIBRARIES = liblaunch.a liblaunch_profile.a -@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c +@LIBS_ONLY_TRUE@liblaunch_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c @LIBS_ONLY_TRUE@liblaunch_profile_a_CFLAGS = -pg $(AM_CFLAGS) -@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c +@LIBS_ONLY_TRUE@liblaunch_profile_a_SOURCES = liblaunch.c libvproc.c libbootstrap.c protocol_vprocUser.c @LIBS_ONLY_FALSE@sbin_SCRIPTS = service @LIBS_ONLY_FALSE@sysconf_DATA = hostconfig rc.common rc.netboot rc.shutdown -@LIBS_ONLY_FALSE@launchctl_CFLAGS = $(AM_CFLAGS) -fvisibility=hidden -I/System/Library/Frameworks/System.framework/PrivateHeaders +@LIBS_ONLY_FALSE@launchctl_CFLAGS = $(AM_CFLAGS) -I/System/Library/Frameworks/System.framework/PrivateHeaders @LIBS_ONLY_FALSE@launchctl_LDFLAGS = -framework CoreFoundation -weak_library /usr/lib/libedit.dylib -@LIBS_ONLY_FALSE@SystemStarter_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -fvisibility=hidden +@LIBS_ONLY_FALSE@SystemStarter_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) @LIBS_ONLY_FALSE@SystemStarter_LDFLAGS = -framework CoreFoundation @LIBS_ONLY_FALSE@SystemStarter_SOURCES = StartupItems.c IPC.c SystemStarter.c -@LIBS_ONLY_FALSE@launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter -fvisibility=hidden +@LIBS_ONLY_FALSE@launchd_CFLAGS = -mdynamic-no-pic $(AM_CFLAGS) -Wno-unused-parameter @LIBS_ONLY_FALSE@launchd_LDFLAGS = -lbsm @LIBS_ONLY_FALSE@launchd_SOURCES = launchd.c launchd_core_logic.c launchd_unix_ipc.c init.c protocol_vprocServer.c notifyServer.c launchd_internalUser.c launchd_internalServer.c job_replyUser.c launchd_runtime.c @LIBS_ONLY_FALSE@launchproxy_LDFLAGS = -weak_framework Security @@ -432,10 +437,14 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-notifyServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchd-protocol_vprocServer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/launchproxy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbootstrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-libbootstrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-liblaunch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-libvproc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libvproc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protocol_vprocUser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wait4path.Po@am__quote@ .c.o: @@ -480,6 +489,34 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-libvproc.obj `if test -f 'libvproc.c'; then $(CYGPATH_W) 'libvproc.c'; else $(CYGPATH_W) '$(srcdir)/libvproc.c'; fi` +liblaunch_profile_a-libbootstrap.o: libbootstrap.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-libbootstrap.o -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Tpo" -c -o liblaunch_profile_a-libbootstrap.o `test -f 'libbootstrap.c' || echo '$(srcdir)/'`libbootstrap.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Tpo" "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libbootstrap.c' object='liblaunch_profile_a-libbootstrap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-libbootstrap.o `test -f 'libbootstrap.c' || echo '$(srcdir)/'`libbootstrap.c + +liblaunch_profile_a-libbootstrap.obj: libbootstrap.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-libbootstrap.obj -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Tpo" -c -o liblaunch_profile_a-libbootstrap.obj `if test -f 'libbootstrap.c'; then $(CYGPATH_W) 'libbootstrap.c'; else $(CYGPATH_W) '$(srcdir)/libbootstrap.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Tpo" "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-libbootstrap.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libbootstrap.c' object='liblaunch_profile_a-libbootstrap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-libbootstrap.obj `if test -f 'libbootstrap.c'; then $(CYGPATH_W) 'libbootstrap.c'; else $(CYGPATH_W) '$(srcdir)/libbootstrap.c'; fi` + +liblaunch_profile_a-protocol_vprocUser.o: protocol_vprocUser.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-protocol_vprocUser.o -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Tpo" -c -o liblaunch_profile_a-protocol_vprocUser.o `test -f 'protocol_vprocUser.c' || echo '$(srcdir)/'`protocol_vprocUser.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Tpo" "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='protocol_vprocUser.c' object='liblaunch_profile_a-protocol_vprocUser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-protocol_vprocUser.o `test -f 'protocol_vprocUser.c' || echo '$(srcdir)/'`protocol_vprocUser.c + +liblaunch_profile_a-protocol_vprocUser.obj: protocol_vprocUser.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -MT liblaunch_profile_a-protocol_vprocUser.obj -MD -MP -MF "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Tpo" -c -o liblaunch_profile_a-protocol_vprocUser.obj `if test -f 'protocol_vprocUser.c'; then $(CYGPATH_W) 'protocol_vprocUser.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocUser.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Tpo" "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Po"; else rm -f "$(DEPDIR)/liblaunch_profile_a-protocol_vprocUser.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='protocol_vprocUser.c' object='liblaunch_profile_a-protocol_vprocUser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblaunch_profile_a_CFLAGS) $(CFLAGS) -c -o liblaunch_profile_a-protocol_vprocUser.obj `if test -f 'protocol_vprocUser.c'; then $(CYGPATH_W) 'protocol_vprocUser.c'; else $(CYGPATH_W) '$(srcdir)/protocol_vprocUser.c'; fi` + SystemStarter-StartupItems.o: StartupItems.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(SystemStarter_CFLAGS) $(CFLAGS) -MT SystemStarter-StartupItems.o -MD -MP -MF "$(DEPDIR)/SystemStarter-StartupItems.Tpo" -c -o SystemStarter-StartupItems.o `test -f 'StartupItems.c' || echo '$(srcdir)/'`StartupItems.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/SystemStarter-StartupItems.Tpo" "$(DEPDIR)/SystemStarter-StartupItems.Po"; else rm -f "$(DEPDIR)/SystemStarter-StartupItems.Tpo"; exit 1; fi @@ -1018,6 +1055,8 @@ @LIBS_ONLY_TRUE@$(srcdir)/libvproc.c:: protocol_vproc.h +@LIBS_ONLY_TRUE@$(srcdir)/protocol_vprocUser.c:: protocol_vproc.h + @LIBS_ONLY_TRUE@install-data-hook: @LIBS_ONLY_TRUE@ mkdir -p $(DESTDIR)/usr/local/lib/system @LIBS_ONLY_TRUE@ cp liblaunch.a $(DESTDIR)/usr/local/lib/system Modified: trunk/launchd/src/bootstrap_public.h =================================================================== --- trunk/launchd/src/bootstrap_public.h 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/bootstrap_public.h 2006-10-23 20:10:11 UTC (rev 22911) @@ -86,6 +86,8 @@ __BEGIN_DECLS +#pragma GCC visibility push(default) + #define BOOTSTRAP_MAX_NAME_LEN 128 #define BOOTSTRAP_MAX_CMD_LEN 512 @@ -342,6 +344,8 @@ */ const char *bootstrap_strerror(kern_return_t r) __attribute__((__nothrow__, __pure__, __warn_unused_result__)); +#pragma GCC visibility pop + __END_DECLS #endif Modified: trunk/launchd/src/launch.h =================================================================== --- trunk/launchd/src/launch.h 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/launch.h 2006-10-23 20:10:11 UTC (rev 22911) @@ -25,6 +25,8 @@ #include <stddef.h> #include <stdbool.h> +#pragma GCC visibility push(default) + __BEGIN_DECLS #ifdef __GNUC__ @@ -214,4 +216,6 @@ __END_DECLS +#pragma GCC visibility pop + #endif Modified: trunk/launchd/src/launch_priv.h =================================================================== --- trunk/launchd/src/launch_priv.h 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/launch_priv.h 2006-10-23 20:10:11 UTC (rev 22911) @@ -22,6 +22,8 @@ #include <launch.h> +#pragma GCC visibility push(default) + __BEGIN_DECLS #define LAUNCH_KEY_GETUSERENVIRONMENT "GetUserEnvironment" @@ -115,4 +117,7 @@ __END_DECLS +#pragma GCC visibility pop + + #endif Modified: trunk/launchd/src/libbootstrap.c =================================================================== --- trunk/launchd/src/libbootstrap.c 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/libbootstrap.c 2006-10-23 20:10:11 UTC (rev 22911) @@ -22,130 +22,17 @@ #include <mach/vm_map.h> #include "bootstrap_public.h" -#include "bootstrap_private.h" +#include "vproc_priv.h" #include "launch.h" #include "launch_priv.h" -#define mig_external static -#include "bootstrap.h" -#include "bootstrapUser.c" +#include "protocol_vproc.h" #include <sys/param.h> #include <stdlib.h> #include <errno.h> kern_return_t -_launchd_to_launchd(mach_port_t bp, mach_port_t *reqport, mach_port_t *rcvright, - name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, - mach_port_array_t *ports, mach_msg_type_number_t *portCnt) -{ - return vproc_mig_transfer_subset(bp, reqport, rcvright, service_names, service_namesCnt, ports, portCnt); -} - -pid_t -_spawn_via_launchd(const char *label, const char *const *argv, const struct spawn_via_launchd_attr *spawn_attrs, int struct_version) -{ - kern_return_t kr; - const char *const *tmpp; - size_t len, buf_len = strlen(label) + 1; - char *buf = strdup(label); - uint64_t flags = 0; - uint32_t argc = 0; - uint32_t envc = 0; - pid_t p = -1; - mode_t u_mask = CMASK; - mach_port_t obsvr_port = MACH_PORT_NULL; - - for (tmpp = argv; *tmpp; tmpp++) { - argc++; - len = strlen(*tmpp) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, *tmpp); - buf_len += len; - } - - if (spawn_attrs) switch (struct_version) { - case 0: - if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_STOPPED) { - flags |= SPAWN_WANTS_WAIT4DEBUGGER; - } - if (spawn_attrs->spawn_flags & SPAWN_VIA_LAUNCHD_FORCE_PPC) { - flags |= SPAWN_WANTS_FORCE_PPC; - } - - if (spawn_attrs->spawn_env) { - for (tmpp = spawn_attrs->spawn_env; *tmpp; tmpp++) { - envc++; - len = strlen(*tmpp) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, *tmpp); - buf_len += len; - } - } - - if (spawn_attrs->spawn_path) { - flags |= SPAWN_HAS_PATH; - len = strlen(spawn_attrs->spawn_path) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, spawn_attrs->spawn_path); - buf_len += len; - } - - if (spawn_attrs->spawn_chdir) { - flags |= SPAWN_HAS_WDIR; - len = strlen(spawn_attrs->spawn_chdir) + 1; - buf = reallocf(buf, buf_len + len); - strcpy(buf + buf_len, spawn_attrs->spawn_chdir); - buf_len += len; - } - - if (spawn_attrs->spawn_umask) { - flags |= SPAWN_HAS_UMASK; - u_mask = *spawn_attrs->spawn_umask; - } - - break; - default: - break; - } - - kr = vproc_mig_spawn(bootstrap_port, buf, buf_len, argc, envc, flags, u_mask, &p, &obsvr_port); - - free(buf); - - if (kr == BOOTSTRAP_SUCCESS) { - if (spawn_attrs && spawn_attrs->spawn_observer_port) { - *spawn_attrs->spawn_observer_port = obsvr_port; - } else { - mach_port_deallocate(mach_task_self(), obsvr_port); - } - return p; - } - - switch (kr) { - case BOOTSTRAP_NOT_PRIVILEGED: - errno = EPERM; break; - case BOOTSTRAP_NO_MEMORY: - errno = ENOMEM; break; - default: - errno = EINVAL; break; - } - return -1; -} - -kern_return_t -mpm_wait(mach_port_t ajob, int *wstatus) -{ - return vproc_mig_wait(ajob, wstatus); -} - -kern_return_t -mpm_uncork_fork(mach_port_t ajob) -{ - return vproc_mig_uncork_fork(ajob); -} - -kern_return_t bootstrap_create_server(mach_port_t bp, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand, mach_port_t *server_port) { return vproc_mig_create_server(bp, server_cmd, server_uid, on_demand, server_port); @@ -174,12 +61,6 @@ } kern_return_t -bootstrap_getsocket(mach_port_t bp, name_t sockpath) -{ - return vproc_mig_getsocket(bp, sockpath); -} - -kern_return_t bootstrap_parent(mach_port_t bp, mach_port_t *parent_port) { return vproc_mig_parent(bp, parent_port); @@ -267,7 +148,6 @@ service_active, service_activeCnt); } - const char * bootstrap_strerror(kern_return_t r) { Modified: trunk/launchd/src/libvproc.c =================================================================== --- trunk/launchd/src/libvproc.c 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/libvproc.c 2006-10-23 20:10:11 UTC (rev 22911) @@ -26,9 +26,7 @@ #include "launch.h" #include "launch_priv.h" -#define mig_external static #include "protocol_vproc.h" -#include "protocol_vprocUser.c" #include <sys/param.h> #include <stdlib.h> @@ -146,146 +144,7 @@ } kern_return_t -bootstrap_create_server(mach_port_t bp, cmd_t server_cmd, uid_t server_uid, boolean_t on_demand, mach_port_t *server_port) -{ - return vproc_mig_create_server(bp, server_cmd, server_uid, on_demand, server_port); -} - -kern_return_t -bootstrap_subset(mach_port_t bp, mach_port_t requestor_port, mach_port_t *subset_port) -{ - return vproc_mig_subset(bp, requestor_port, subset_port); -} - -kern_return_t -bootstrap_unprivileged(mach_port_t bp, mach_port_t *unpriv_port) -{ - kern_return_t kr; - - *unpriv_port = MACH_PORT_NULL; - - kr = mach_port_mod_refs(mach_task_self(), bp, MACH_PORT_RIGHT_SEND, 1); - - if (kr == KERN_SUCCESS) { - *unpriv_port = bp; - } - - return kr; -} - -kern_return_t bootstrap_getsocket(mach_port_t bp, name_t sockpath) { return vproc_mig_getsocket(bp, sockpath); } - -kern_return_t -bootstrap_parent(mach_port_t bp, mach_port_t *parent_port) -{ - return vproc_mig_parent(bp, parent_port); -} - -kern_return_t -bootstrap_register(mach_port_t bp, name_t service_name, mach_port_t sp) -{ - return vproc_mig_register(bp, service_name, sp); -} - -kern_return_t -bootstrap_create_service(mach_port_t bp, name_t service_name, mach_port_t *sp) -{ - return vproc_mig_create_service(bp, service_name, sp); -} - -kern_return_t -bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp) -{ - return vproc_mig_check_in(bp, service_name, sp); -} - -kern_return_t -bootstrap_look_up(mach_port_t bp, name_t service_name, mach_port_t *sp) -{ - return vproc_mig_look_up(bp, service_name, sp); -} - -kern_return_t -bootstrap_look_up_array(mach_port_t bp, - name_array_t names, mach_msg_type_number_t name_cnt, - mach_port_array_t *ports, mach_msg_type_number_t *port_cnt, - boolean_t *all) -{ - unsigned int i; - kern_return_t r; - - if (name_cnt > BOOTSTRAP_MAX_LOOKUP_COUNT) - return BOOTSTRAP_BAD_COUNT; - - *port_cnt = name_cnt; - - r = vm_allocate(mach_task_self(), (vm_address_t *)&ports, name_cnt * sizeof(mach_port_t), true); - - if (r != KERN_SUCCESS) - return r; - - *all = true; - - for (i = 0; i < name_cnt; i++) { - if (bootstrap_look_up(bp, names[i], &((*ports)[i])) == BOOTSTRAP_SUCCESS) - continue; - *all = false; - ports[i] = MACH_PORT_NULL; - } - - return BOOTSTRAP_SUCCESS; -} - -kern_return_t -bootstrap_status(mach_port_t bp, name_t service_name, bootstrap_status_t *service_active) -{ - mach_port_t p; - - if (bootstrap_check_in(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { - mach_port_mod_refs(mach_task_self(), p, MACH_PORT_RIGHT_RECEIVE, -1); - *service_active = BOOTSTRAP_STATUS_ON_DEMAND; - return BOOTSTRAP_SUCCESS; - } else if (bootstrap_look_up(bp, service_name, &p) == BOOTSTRAP_SUCCESS) { - mach_port_deallocate(mach_task_self(), p); - *service_active = BOOTSTRAP_STATUS_ACTIVE; - return BOOTSTRAP_SUCCESS; - } - - return BOOTSTRAP_UNKNOWN_SERVICE; -} - -kern_return_t -bootstrap_info(mach_port_t bp, - name_array_t *service_names, mach_msg_type_number_t *service_namesCnt, - bootstrap_status_array_t *service_active, mach_msg_type_number_t *service_activeCnt) -{ - return vproc_mig_info(bp, service_names, service_namesCnt, - service_active, service_activeCnt); -} - - -const char * -bootstrap_strerror(kern_return_t r) -{ - switch (r) { - case BOOTSTRAP_SUCCESS: - return "Success"; - case BOOTSTRAP_NOT_PRIVILEGED: - return "Permission denied"; - case BOOTSTRAP_NAME_IN_USE: - case BOOTSTRAP_SERVICE_ACTIVE: - return "Service name already exists"; - case BOOTSTRAP_UNKNOWN_SERVICE: - return "Unknown service name"; - case BOOTSTRAP_BAD_COUNT: - return "Too many lookups were requested in one request"; - case BOOTSTRAP_NO_MEMORY: - return "Out of memory"; - default: - return mach_error_string(r); - } -} Modified: trunk/launchd/src/vproc_priv.h =================================================================== --- trunk/launchd/src/vproc_priv.h 2006-10-23 17:46:23 UTC (rev 22910) +++ trunk/launchd/src/vproc_priv.h 2006-10-23 20:10:11 UTC (rev 22911) @@ -20,6 +20,7 @@ * @APPLE_APACHE_LICENSE_HEADER_END@ */ + typedef char * _internal_string_t; typedef mach_port_t vproc_mig_t; @@ -28,6 +29,8 @@ #include "launchd_core_logic.h" #endif +#pragma GCC visibility push(default) + #define SPAWN_HAS_PATH 0x0001 #define SPAWN_HAS_WDIR 0x0002 #define SPAWN_HAS_UMASK 0x0004 @@ -59,4 +62,6 @@ bootstrap_status_array_t *service_active, mach_msg_type_number_t *service_activeCnt); +#pragma GCC visibility pop + #endif