[launchd-changes] [23640] trunk/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Wed Jun 4 14:57:50 PDT 2008


Revision: 23640
          http://trac.macosforge.org/projects/launchd/changeset/23640
Author:   zarzycki at apple.com
Date:     2008-06-04 14:57:47 -0700 (Wed, 04 Jun 2008)

Log Message:
-----------
Preparing to crank up the warning level...

Modified Paths:
--------------
    trunk/launchd/src/Makefile.am
    trunk/launchd/src/Makefile.in
    trunk/launchd/src/launchctl.c
    trunk/launchd/src/launchd.c
    trunk/launchd/src/launchd_core_logic.c
    trunk/launchd/src/launchproxy.c

Modified: trunk/launchd/src/Makefile.am
===================================================================
--- trunk/launchd/src/Makefile.am	2008-05-28 20:33:08 UTC (rev 23639)
+++ trunk/launchd/src/Makefile.am	2008-06-04 21:57:47 UTC (rev 23640)
@@ -1,6 +1,6 @@
-CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror # gcc4.2: -Wstrict-overflow=4 # -Wpadded -Wconversion -Wstrict-aliasing=2
-CTUNE = -fvisibility=hidden -freorder-blocks # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing
-CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1
+CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror -Wstrict-overflow=4 # -Wstrict-aliasing=2 -Wshorten-64-to-32 # -Wpadded -Wconversion
+CTUNE = -fvisibility=hidden -freorder-blocks -fdiagnostics-show-option # -fstrict-aliasing
+CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1
 AM_CFLAGS = $(CTUNE) $(CMISC) $(CWARN)
 AM_LDFLAGS = -Wl,-syslibroot,$(SDKROOT)
 

Modified: trunk/launchd/src/Makefile.in
===================================================================
--- trunk/launchd/src/Makefile.in	2008-05-28 20:33:08 UTC (rev 23639)
+++ trunk/launchd/src/Makefile.in	2008-06-04 21:57:47 UTC (rev 23640)
@@ -242,9 +242,9 @@
 target_alias = @target_alias@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror # gcc4.2: -Wstrict-overflow=4 # -Wpadded -Wconversion -Wstrict-aliasing=2
-CTUNE = -fvisibility=hidden -freorder-blocks # gcc4.2: -fdiagnostics-show-option # -fstrict-aliasing
-CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -D__MigTypeCheck=1 -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1
+CWARN = -Wall -Wextra -Waggregate-return -Wfloat-equal -Wshadow -Wpacked -Wmissing-prototypes -Wmissing-declarations -Werror -Wstrict-overflow=4 # -Wstrict-aliasing=2 -Wshorten-64-to-32 # -Wpadded -Wconversion
+CTUNE = -fvisibility=hidden -freorder-blocks -fdiagnostics-show-option # -fstrict-aliasing
+CMISC = -isysroot $(SDKROOT) -F$(SDKROOT)/System/Library/PrivateFrameworks -Dmig_external=__private_extern__ -D_DARWIN_USE_64_BIT_INODE=1
 AM_CFLAGS = $(CTUNE) $(CMISC) $(CWARN)
 AM_LDFLAGS = -Wl,-syslibroot,$(SDKROOT)
 CLEANFILES = protocol_vproc.h protocol_vprocServer.c protocol_vprocUser.c protocol_vprocServer.h		\

Modified: trunk/launchd/src/launchctl.c
===================================================================
--- trunk/launchd/src/launchctl.c	2008-05-28 20:33:08 UTC (rev 23639)
+++ trunk/launchd/src/launchctl.c	2008-06-04 21:57:47 UTC (rev 23640)
@@ -96,7 +96,7 @@
 	launch_data_t pass1;
 	launch_data_t pass2;
 	char *session_type;
-	unsigned int editondisk:1, load:1, forceload:1, __pad:29;
+	bool editondisk:1, load:1, forceload:1;
 };
 
 static void myCFDictionaryApplyFunction(const void *key, const void *value, void *context);
@@ -319,7 +319,8 @@
 {
 	char s[1000], *c, *av[100];
 	const char *file;
-	size_t len, i;
+	size_t len;
+	int i;
 	FILE *f;
 
 	if (getppid() == 1) {
@@ -332,7 +333,7 @@
 		return;
 	}
 
-	while ((c = fgets(s, sizeof(s), f))) {
+	while ((c = fgets(s, (int) sizeof s, f))) {
 		len = strlen(c);
 		if (len && c[len - 1] == '\n') {
 			c[len - 1] = '\0';
@@ -916,7 +917,7 @@
 				return;
 			}
 			oldmask = umask(S_IRWXG|S_IRWXO);
-			if (bind(sfd, (struct sockaddr *)&sun, sizeof(sun)) == -1) {
+			if (bind(sfd, (struct sockaddr *)&sun, (socklen_t) sizeof sun) == -1) {
 				close(sfd);
 				umask(oldmask);
 				return;
@@ -929,7 +930,7 @@
 				close(sfd);
 				return;
 			}
-		} else if (connect(sfd, (struct sockaddr *)&sun, sizeof(sun)) == -1) {
+		} else if (connect(sfd, (struct sockaddr *)&sun, (socklen_t) sizeof sun) == -1) {
 			close(sfd);
 			return;
 		}
@@ -1003,17 +1004,17 @@
 
 			if (hints.ai_flags & AI_PASSIVE) {
 				if (AF_INET6 == res->ai_family && -1 == setsockopt(sfd, IPPROTO_IPV6, IPV6_V6ONLY,
-							(void *)&sock_opt, sizeof(sock_opt))) {
+							(void *)&sock_opt, (socklen_t) sizeof sock_opt)) {
 					fprintf(stderr, "setsockopt(IPV6_V6ONLY): %m");
 					return;
 				}
 				if (mgroup) {
-					if (setsockopt(sfd, SOL_SOCKET, SO_REUSEPORT, (void *)&sock_opt, sizeof(sock_opt)) == -1) {
+					if (setsockopt(sfd, SOL_SOCKET, SO_REUSEPORT, (void *)&sock_opt, (socklen_t) sizeof sock_opt) == -1) {
 						fprintf(stderr, "setsockopt(SO_REUSEPORT): %s\n", strerror(errno));
 						return;
 					}
 				} else {
-					if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, sizeof(sock_opt)) == -1) {
+					if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, (socklen_t) sizeof sock_opt) == -1) {
 						fprintf(stderr, "setsockopt(SO_REUSEADDR): %s\n", strerror(errno));
 						return;
 					}
@@ -1108,7 +1109,7 @@
 		if (AF_INET == family) {
 			memset(&mreq, 0, sizeof(mreq));
 			mreq.imr_multiaddr = ((struct sockaddr_in *)res->ai_addr)->sin_addr;
-			if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) == -1) {
+			if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, (socklen_t) sizeof mreq) == -1) {
 				fprintf(stderr, "setsockopt(IP_ADD_MEMBERSHIP): %s\n", strerror(errno));
 				continue;
 			}
@@ -1116,7 +1117,7 @@
 		} else if (AF_INET6 == family) {
 			memset(&m6req, 0, sizeof(m6req));
 			m6req.ipv6mr_multiaddr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr;
-			if (setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &m6req, sizeof(m6req)) == -1) {
+			if (setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &m6req, (socklen_t) sizeof m6req) == -1) {
 				fprintf(stderr, "setsockopt(IPV6_JOIN_GROUP): %s\n", strerror(errno));
 				continue;
 			}
@@ -1293,8 +1294,7 @@
 help_cmd(int argc, char *const argv[])
 {
 	FILE *where = stdout;
-	int l, cmdwidth = 0;
-	size_t i;
+	size_t i, l, cmdwidth = 0;
 	
 	if (argc == 0 || argv == NULL)
 		where = stderr;
@@ -1303,12 +1303,13 @@
 
 	for (i = 0; i < (sizeof cmds / sizeof cmds[0]); i++) {
 		l = strlen(cmds[i].name);
-		if (l > cmdwidth)
+		if (l > cmdwidth) {
 			cmdwidth = l;
+		}
 	}
 
 	for (i = 0; i < (sizeof cmds / sizeof cmds[0]); i++) {
-		fprintf(where, "\t%-*s\t%s\n", cmdwidth, cmds[i].name, cmds[i].desc);
+		fprintf(where, "\t%-*s\t%s\n", (int)cmdwidth, cmds[i].name, cmds[i].desc);
 	}
 
 	return 0;
@@ -2108,7 +2109,6 @@
 logupdate_cmd(int argc, char *const argv[])
 {
 	int64_t inval, outval;
-	int i, j, m = 0;
 	bool badargs = false, maskmode = false, onlymode = false, levelmode = false;
 	static const struct {
 		const char *name;
@@ -2123,7 +2123,8 @@
 		{ "alert",	LOG_ALERT },
 		{ "emergency",	LOG_EMERG },
 	};
-	int logtblsz = sizeof logtbl / sizeof logtbl[0];
+	size_t i, j, logtblsz = sizeof logtbl / sizeof logtbl[0];
+	int m = 0;
 
 	if (argc >= 2) {
 		if (!strcmp(argv[1], "mask"))
@@ -2140,7 +2141,7 @@
 		m = LOG_UPTO(LOG_DEBUG);
 
 	if (argc > 2 && (maskmode || onlymode)) {
-		for (i = 2; i < argc; i++) {
+		for (i = 2; i < (size_t)argc; i++) {
 			for (j = 0; j < logtblsz; j++) {
 				if (!strcmp(argv[i], logtbl[j].name)) {
 					if (maskmode)
@@ -2305,7 +2306,7 @@
 			for (i = 0; i < (lsz / sizeof(struct rlimit)); i++) {
 				if (argc == 2 && (size_t)which != i)
 					continue;
-				fprintf(stdout, "\t%-12s%-15s%-15s\n", num2name(i),
+				fprintf(stdout, "\t%-12s%-15s%-15s\n", num2name((int)i),
 						lim2str(lmts[i].rlim_cur, slimstr),
 						lim2str(lmts[i].rlim_max, hlimstr));
 			}
@@ -3114,7 +3115,7 @@
 
 	if (assumes(prog != NULL)) {
 		/* The networking team has asked us to ignore the failure of this API if errno == ENOPROTOOPT */
-		assumes(setsockopt(sfd, SOL_SOCKET, SO_EXECPATH, prog, strlen(prog) + 1) != -1 || errno == ENOPROTOOPT);
+		assumes(setsockopt(sfd, SOL_SOCKET, SO_EXECPATH, prog, (socklen_t)(strlen(prog) + 1)) != -1 || errno == ENOPROTOOPT);
 	}
 }
 

Modified: trunk/launchd/src/launchd.c
===================================================================
--- trunk/launchd/src/launchd.c	2008-05-28 20:33:08 UTC (rev 23639)
+++ trunk/launchd/src/launchd.c	2008-06-04 21:57:47 UTC (rev 23640)
@@ -398,7 +398,7 @@
 	bool new_networking_state;
 	char buf[1024];
 
-	launchd_assumes(read(kev->ident, &buf, sizeof(buf)) != -1);
+	launchd_assumes(read((int)kev->ident, &buf, sizeof(buf)) != -1);
 
 	new_networking_state = get_network_state();
 

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2008-05-28 20:33:08 UTC (rev 23639)
+++ trunk/launchd/src/launchd_core_logic.c	2008-06-04 21:57:47 UTC (rev 23640)
@@ -188,7 +188,7 @@
 	};
 };
 
-static bool socketgroup_new(job_t j, const char *name, int *fds, unsigned int fd_cnt, bool junkfds);
+static bool socketgroup_new(job_t j, const char *name, int *fds, size_t fd_cnt, bool junkfds);
 static void socketgroup_delete(job_t j, struct socketgroup *sg);
 static void socketgroup_watch(job_t j, struct socketgroup *sg);
 static void socketgroup_ignore(job_t j, struct socketgroup *sg);
@@ -357,6 +357,7 @@
 	mach_port_t wait_reply_port;	/* we probably should switch to a list of waiters */
 	uid_t mach_uid;
 	jobmgr_t mgr;
+	size_t argc;
 	char **argv;
 	char *prog;
 	char *rootdir;
@@ -379,15 +380,14 @@
 	size_t quarantine_data_sz;
 #endif
 	pid_t p;
-	int argc;
 	int last_exit_status;
 	int stdin_fd;
 	int fork_fd;
 	int log_redirect_fd;
 	int nice;
-	unsigned int timeout;
-	unsigned int exit_timeout;
 	int stdout_err_fd;
+	uint32_t timeout;
+	uint32_t exit_timeout;
 	uint64_t sent_signal_time;
 	uint64_t start_time;
 	uint32_t min_run_time;
@@ -711,7 +711,7 @@
 		launch_data_dict_insert(r, tmp, LAUNCH_JOBKEY_STANDARDERRORPATH);
 	}
 	if (likely(j->argv) && (tmp = launch_data_alloc(LAUNCH_DATA_ARRAY))) {
-		int i;
+		size_t i;
 
 		for (i = 0; i < j->argc; i++) {
 			if ((tmp2 = launch_data_new_string(j->argv[i]))) {
@@ -1069,7 +1069,7 @@
 {
 	launch_data_t tmp_oai;
 	job_t j = context;
-	unsigned int i, fd_cnt = 1;
+	size_t i, fd_cnt = 1;
 	int *fds;
 
 	if (launch_data_get_type(obj) == LAUNCH_DATA_ARRAY) {
@@ -1125,7 +1125,7 @@
 	}
 
 	/* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */
-	mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
+	mxmsgsz = (typeof(mxmsgsz)) sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
 	if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) {
 		mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize;
 	}
@@ -1326,7 +1326,7 @@
 	const char *bn = NULL;
 	char *co;
 	size_t minlabel_len;
-	int i, cc = 0;
+	size_t i, cc = 0;
 	job_t j;
 
 	launchd_assert(offsetof(struct job_s, kqjob_callback) == 0);
@@ -1706,15 +1706,21 @@
 			} else if (unlikely(value > UINT32_MAX)) {
 				job_log(j, LOG_WARNING, "%s is too large. Ignoring.", LAUNCH_JOBKEY_EXITTIMEOUT);
 			} else {
-				j->exit_timeout = value;
+				j->exit_timeout = (typeof(j->exit_timeout)) value;
 			}
 		}
 		break;
 	case 'n':
 	case 'N':
 		if (strcasecmp(key, LAUNCH_JOBKEY_NICE) == 0) {
-			j->nice = value;
-			j->setnice = true;
+			if (unlikely(value < PRIO_MIN)) {
+				job_log(j, LOG_WARNING, "%s less than %d. Ignoring.", LAUNCH_JOBKEY_NICE, PRIO_MIN);
+			} else if (unlikely(value > PRIO_MAX)) {
+				job_log(j, LOG_WARNING, "%s is greater than %d. Ignoring.", LAUNCH_JOBKEY_NICE, PRIO_MAX);
+			} else {
+				j->nice = (typeof(j->nice)) value;
+				j->setnice = true;
+			}
 		}
 		break;
 	case 't':
@@ -1725,7 +1731,7 @@
 			} else if (unlikely(value > UINT32_MAX)) {
 				job_log(j, LOG_WARNING, "%s is too large. Ignoring.", LAUNCH_JOBKEY_TIMEOUT);
 			} else {
-				j->timeout = value;
+				j->timeout = (typeof(j->timeout)) value;
 			}
 		} else if (strcasecmp(key, LAUNCH_JOBKEY_THROTTLEINTERVAL) == 0) {
 			if (value < 0) {
@@ -1733,7 +1739,7 @@
 			} else if (value > UINT32_MAX) {
 				job_log(j, LOG_WARNING, "%s is too large. Ignoring.", LAUNCH_JOBKEY_THROTTLEINTERVAL);
 			} else {
-				j->min_run_time = value;
+				j->min_run_time = (typeof(j->min_run_time)) value;
 			}
 		}
 		break;
@@ -1753,9 +1759,9 @@
 				job_log(j, LOG_WARNING, "%s is too large. Ignoring.", LAUNCH_JOBKEY_STARTINTERVAL);
 			} else {
 				runtime_add_weak_ref();
-				j->start_interval = value;
+				j->start_interval = (typeof(j->start_interval)) value;
 
-				job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, value, j) != -1);
+				job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, j->start_interval, j) != -1);
 			}
 #if HAVE_SANDBOX
 		} else if (strcasecmp(key, LAUNCH_JOBKEY_SANDBOXFLAGS) == 0) {
@@ -1948,7 +1954,7 @@
 			if (job_assumes(j, j->j_binpref = malloc(value_cnt * sizeof(*j->j_binpref)))) {
 				j->j_binpref_cnt = value_cnt;
 				for (i = 0; i < value_cnt; i++) {
-					j->j_binpref[i] = launch_data_get_integer(launch_data_array_get_index(value, i));
+					j->j_binpref[i] = (cpu_type_t) launch_data_get_integer(launch_data_array_get_index(value, i));
 				}
 			}
 		}
@@ -2321,7 +2327,7 @@
 	}
 
 	if (unlikely(j->weird_bootstrap)) {
-		mach_msg_size_t mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
+		mach_msg_size_t mxmsgsz = (typeof(mxmsgsz)) sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
 
 		if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) {
 			mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize;
@@ -2599,7 +2605,7 @@
 #else
 	int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL };
 #endif
-	int mib_sz = sizeof(mib) / sizeof(mib[0]);
+	size_t mib_sz = sizeof(mib) / sizeof(mib[0]);
 	size_t i, kp_cnt, len = sizeof(struct kinfo_proc) * get_kern_max_proc();
 	struct kinfo_proc *kp;
 
@@ -2610,7 +2616,7 @@
 	if (!job_assumes(j, (kp = malloc(len)) != NULL)) {
 		return;
 	}
-	if (!job_assumes(j, sysctl(mib, mib_sz, kp, &len, NULL, 0) != -1)) {
+	if (!job_assumes(j, sysctl(mib, (u_int) mib_sz, kp, &len, NULL, 0) != -1)) {
 		goto out;
 	}
 
@@ -2760,7 +2766,7 @@
 		jobmgr_reap_bulk(jmi, kev);
 	}
 
-	if ((j = jobmgr_find_by_pid(jm, kev->ident, false))) {
+	if ((j = jobmgr_find_by_pid(jm, (pid_t) kev->ident, false))) {
 		kev->udata = j;
 		job_callback(j, kev);
 	}
@@ -2835,11 +2841,11 @@
 	case EVFILT_PROC:
 		return job_callback_proc(j, kev->fflags);
 	case EVFILT_TIMER:
-		return job_callback_timer(j, (void *)kev->ident);
+		return job_callback_timer(j, (void *) kev->ident);
 	case EVFILT_VNODE:
 		return semaphoreitem_callback(j, kev);
 	case EVFILT_READ:
-		return job_callback_read(j, kev->ident);
+		return job_callback_read(j, (int) kev->ident);
 	case EVFILT_MACHPORT:
 		return (void)job_dispatch(j, true);
 	default:
@@ -3014,7 +3020,7 @@
 	glob_t g;
 	short spflags = POSIX_SPAWN_SETEXEC;
 	size_t binpref_out_cnt = 0;
-	int i;
+	size_t i;
 
 	if (JOB_BOOTCACHE_HACK_CHECK(j)) {
 		do_first_per_user_launchd_hack();
@@ -3885,10 +3891,17 @@
 	job_dispatch(j, false);
 }
 
+struct cal_dict_walk {
+	job_t j;
+	struct tm tmptm;
+};
+
 void
 calendarinterval_new_from_obj_dict_walk(launch_data_t obj, const char *key, void *context)
 {
-	struct tm *tmptm = context;
+	struct cal_dict_walk *cdw = context;
+	struct tm *tmptm = &cdw->tmptm;
+	job_t j = cdw->j;
 	int64_t val;
 
 	if (unlikely(LAUNCH_DATA_INTEGER != launch_data_get_type(obj))) {
@@ -3899,16 +3912,18 @@
 
 	val = launch_data_get_integer(obj);
 
-	if (strcasecmp(key, LAUNCH_JOBKEY_CAL_MINUTE) == 0) {
-		tmptm->tm_min = val;
+	if (val < 0) {
+		job_log(j, LOG_WARNING, "The interval for key \"%s\" is less than zero.", key);
+	} else if (strcasecmp(key, LAUNCH_JOBKEY_CAL_MINUTE) == 0) {
+		tmptm->tm_min = (typeof(tmptm->tm_min)) val;
 	} else if (strcasecmp(key, LAUNCH_JOBKEY_CAL_HOUR) == 0) {
-		tmptm->tm_hour = val;
+		tmptm->tm_hour = (typeof(tmptm->tm_hour)) val;
 	} else if (strcasecmp(key, LAUNCH_JOBKEY_CAL_DAY) == 0) {
-		tmptm->tm_mday = val;
+		tmptm->tm_mday = (typeof(tmptm->tm_mday)) val;
 	} else if (strcasecmp(key, LAUNCH_JOBKEY_CAL_WEEKDAY) == 0) {
-		tmptm->tm_wday = val;
+		tmptm->tm_wday = (typeof(tmptm->tm_wday)) val;
 	} else if (strcasecmp(key, LAUNCH_JOBKEY_CAL_MONTH) == 0) {
-		tmptm->tm_mon = val;
+		tmptm->tm_mon = (typeof(tmptm->tm_mon)) val;
 		tmptm->tm_mon -= 1; /* 4798263 cron compatibility */
 	}
 }
@@ -3916,15 +3931,16 @@
 bool
 calendarinterval_new_from_obj(job_t j, launch_data_t obj)
 {
-	struct tm tmptm;
+	struct cal_dict_walk cdw;
 
-	memset(&tmptm, 0, sizeof(0));
+	cdw.j = j;
+	memset(&cdw.tmptm, 0, sizeof(0));
 
-	tmptm.tm_min = -1;
-	tmptm.tm_hour = -1;
-	tmptm.tm_mday = -1;
-	tmptm.tm_wday = -1;
-	tmptm.tm_mon = -1;
+	cdw.tmptm.tm_min = -1;
+	cdw.tmptm.tm_hour = -1;
+	cdw.tmptm.tm_mday = -1;
+	cdw.tmptm.tm_wday = -1;
+	cdw.tmptm.tm_mon = -1;
 
 	if (!job_assumes(j, obj != NULL)) {
 		return false;
@@ -3934,13 +3950,13 @@
 		return false;
 	}
 
-	launch_data_dict_iterate(obj, calendarinterval_new_from_obj_dict_walk, &tmptm);
+	launch_data_dict_iterate(obj, calendarinterval_new_from_obj_dict_walk, &cdw);
 
-	if (unlikely(tmptm.tm_sec == -1)) {
+	if (unlikely(cdw.tmptm.tm_sec == -1)) {
 		return false;
 	}
 
-	return calendarinterval_new(j, &tmptm);
+	return calendarinterval_new(j, &cdw.tmptm);
 }
 
 bool
@@ -4008,7 +4024,7 @@
 }
 
 bool
-socketgroup_new(job_t j, const char *name, int *fds, unsigned int fd_cnt, bool junkfds)
+socketgroup_new(job_t j, const char *name, int *fds, size_t fd_cnt, bool junkfds)
 {
 	struct socketgroup *sg = calloc(1, sizeof(struct socketgroup) + strlen(name) + 1);
 
@@ -4086,7 +4102,7 @@
 
 	for (i = 0; i < sg->fd_cnt; i++) {
 		job_assumes(j, kev[i].flags & EV_ERROR);
-		errno = kev[i].data;
+		errno = (typeof(errno)) kev[i].data;
 		job_assumes(j, kev[i].data == 0);
 	}
 }
@@ -4230,7 +4246,7 @@
 limititem_setup(launch_data_t obj, const char *key, void *context)
 {
 	job_t j = context;
-	int i, limits_cnt = (sizeof(launchd_keys2limits) / sizeof(launchd_keys2limits[0]));
+	size_t i, limits_cnt = (sizeof(launchd_keys2limits) / sizeof(launchd_keys2limits[0]));
 	rlim_t rl;
 
 	if (launch_data_get_type(obj) != LAUNCH_DATA_INTEGER) {
@@ -4581,14 +4597,15 @@
 
 	switch (launch_data_get_type(obj)) {
 	case LAUNCH_DATA_INTEGER:
-		which_port = launch_data_get_integer(obj);
+		which_port = (int)launch_data_get_integer(obj); /* XXX we should bound check this... */
 		if (strcasecmp(key, LAUNCH_JOBKEY_MACH_TASKSPECIALPORT) == 0) {
 			switch (which_port) {
 			case TASK_KERNEL_PORT:
 			case TASK_HOST_PORT:
 			case TASK_NAME_PORT:
 			case TASK_BOOTSTRAP_PORT:
-			/* I find it a little odd that zero isn't reserved in the header */
+			/* I find it a little odd that zero isn't reserved in the header.
+			 * Normally Mach is fairly good about this convention... */
 			case 0:
 				job_log(ms->job, LOG_WARNING, "Tried to set a reserved task special port: %d", which_port);
 				break;
@@ -4885,7 +4902,7 @@
 		}
 
 		if (trusted_fd) {
-			int dfd, lfd = strtol(trusted_fd, NULL, 10);
+			int dfd, lfd = (int) strtol(trusted_fd, NULL, 10);
 
 			if ((dfd = dup(lfd)) >= 0) {
 				jobmgr_assumes(jmr, runtime_close(dfd) != -1);
@@ -4911,7 +4928,7 @@
 	}
 
 	/* Sigh... at the moment, MIG has maxsize == sizeof(reply union) */
-	mxmsgsz = sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
+	mxmsgsz = (typeof(mxmsgsz)) sizeof(union __RequestUnion__job_mig_protocol_vproc_subsystem);
 	if (job_mig_protocol_vproc_subsystem.maxsize > mxmsgsz) {
 		mxmsgsz = job_mig_protocol_vproc_subsystem.maxsize;
 	}
@@ -5245,6 +5262,7 @@
 	char pidstr[100];
 	char *sample_args[] = { "sample", pidstr, "1", "-unsupportedShowArch", "-mayDie", "-file", logfile, NULL };
 	char *contents = NULL;
+	size_t contents_sz;
 	int logfile_fd = -1;
 	int console_fd = -1;
 	int wstatus;
@@ -5308,17 +5326,23 @@
 		goto out;
 	}
 
-	contents = malloc(sb.st_size);
+	if (sizeof (size_t) == 4 && !job_assumes(j, !(sb.st_size & 0xffffffff00000000llu))) {
+		goto out;
+	}
 
+	contents_sz = (size_t) sb.st_size;
+
+	contents = malloc(contents_sz);
+
 	if (!job_assumes(j, contents != NULL)) {
 		goto out;
 	}
 
-	if (!job_assumes(j, read(logfile_fd, contents, sb.st_size) == sb.st_size)) {
+	if (!job_assumes(j, read(logfile_fd, contents, contents_sz) == (ssize_t) contents_sz)) {
 		goto out;
 	}
 
-	job_assumes(j, write(console_fd, contents, sb.st_size) == sb.st_size);
+	job_assumes(j, write(console_fd, contents, contents_sz) == (ssize_t) contents_sz);
 
 out:
 	if (contents) {
@@ -6012,13 +6036,13 @@
 		j->ondemand = !inval;
 		break;
 	case VPROC_GSK_START_INTERVAL:
-		if ((uint64_t)inval > UINT32_MAX) {
+		if (inval > UINT32_MAX || inval < 0) {
 			kr = 1;
 		} else if (inval) {
 			if (j->start_interval == 0) {
 				runtime_add_weak_ref();
 			}
-			j->start_interval = inval;
+			j->start_interval = (typeof(j->start_interval)) inval;
 			job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_ADD, NOTE_SECONDS, j->start_interval, j) != -1);
 		} else if (j->start_interval) {
 			job_assumes(j, kevent_mod((uintptr_t)&j->start_interval, EVFILT_TIMER, EV_DELETE, 0, 0, NULL) != -1);
@@ -6029,20 +6053,33 @@
 		}
 		break;
 	case VPROC_GSK_IDLE_TIMEOUT:
-		if ((unsigned int)inval > 0) {
-			j->timeout = inval;
+		if (inval < 0 || inval > UINT32_MAX) {
+			kr = 1;
+		} else {
+			j->timeout = (typeof(j->timeout)) inval;
 		}
 		break;
 	case VPROC_GSK_EXIT_TIMEOUT:
-		if ((unsigned int)inval > 0) {
-			j->exit_timeout = inval;
+		if (inval < 0 || inval > UINT32_MAX) {
+			kr = 1;
+		} else {
+			j->exit_timeout = (typeof(j->exit_timeout)) inval;
 		}
 		break;
 	case VPROC_GSK_GLOBAL_LOG_MASK:
-		runtime_setlogmask(inval);
+		if (inval < 0 || inval > UINT32_MAX) {
+			kr = 1;
+		} else {
+			runtime_setlogmask((int) inval);
+		}
 		break;
 	case VPROC_GSK_GLOBAL_UMASK:
-		umask(inval);
+		launchd_assert(sizeof (mode_t) == 2);
+		if (inval < 0 || inval > UINT16_MAX) {
+			kr = 1;
+		} else {
+			umask((mode_t) inval);
+		}
 		break;
 	case 0:
 		break;
@@ -7073,7 +7110,7 @@
 		}
 	} else {
 		target_j->deny_unknown_mslookups = !(flags & BOOTSTRAP_ALLOW_LOOKUP);
-		target_j->deny_job_creation = (bool)(flags & BOOTSTRAP_DENY_JOB_CREATION);
+		target_j->deny_job_creation = flags & BOOTSTRAP_DENY_JOB_CREATION;
 	}
 
 	return 0;
@@ -7307,7 +7344,7 @@
 	int r, i, found, returned;
 
 	do {
-		returned = getfsstat(buf, sizeof(buf), MNT_NOWAIT);
+		returned = getfsstat(buf, (int) sizeof(buf), MNT_NOWAIT);
 		found = 0;
 
 		if (!launchd_assumes(returned != -1)) {

Modified: trunk/launchd/src/launchproxy.c
===================================================================
--- trunk/launchd/src/launchproxy.c	2008-05-28 20:33:08 UTC (rev 23639)
+++ trunk/launchd/src/launchproxy.c	2008-06-04 21:57:47 UTC (rev 23640)
@@ -81,7 +81,7 @@
 {
 	struct timespec timeout = { 10, 0 };
 	struct sockaddr_storage ss;
-	socklen_t slen = sizeof(ss);
+	socklen_t slen = (socklen_t)sizeof ss;
 	struct kevent kev;
 	int r, ec = EXIT_FAILURE;
 	launch_data_t tmp, resp, msg = launch_data_alloc(LAUNCH_DATA_STRING);
@@ -143,17 +143,17 @@
 		}
 
 		if (w) {
-			dup2(kev.ident, STDIN_FILENO);
+			dup2((int)kev.ident, STDIN_FILENO);
 			if (dupstdout)
-				dup2(kev.ident, STDOUT_FILENO);
+				dup2((int)kev.ident, STDOUT_FILENO);
 			if (dupstderr)
-				dup2(kev.ident, STDERR_FILENO);
+				dup2((int)kev.ident, STDERR_FILENO);
 			execv(prog, argv + 1);
 			syslog(LOG_ERR, "execv(): %m");
 			exit(EXIT_FAILURE);
 		}
 
-		if ((r = accept(kev.ident, (struct sockaddr *)&ss, &slen)) == -1) {
+		if ((r = accept((int)kev.ident, (struct sockaddr *)&ss, &slen)) == -1) {
 			if (errno == EWOULDBLOCK)
 				continue;
 			syslog(LOG_DEBUG, "accept(): %m");
@@ -165,8 +165,8 @@
 				int gni_r;
 
 				gni_r = getnameinfo((struct sockaddr *)&ss, slen,
-						fromhost, sizeof(fromhost),
-						fromport, sizeof(fromport),
+						fromhost, (socklen_t) sizeof fromhost,
+						fromport, (socklen_t) sizeof fromport,
 						NI_NUMERICHOST | NI_NUMERICSERV);
 
 				if (gni_r) {

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080604/19fa9de5/attachment-0001.htm 


More information about the launchd-changes mailing list