svn commit: trunk/busybox/networking

vda at busybox.net vda at busybox.net
Fri Feb 15 16:20:27 UTC 2008


Author: vda
Date: 2008-02-15 08:20:26 -0800 (Fri, 15 Feb 2008)
New Revision: 21032

Log:
ifupdown: code shrink

function                                             old     new   delta
next_word                                             78      63     -15
ifupdown_main                                       2381    2170    -211
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-226)           Total: -226 bytes



Modified:
   trunk/busybox/networking/ifupdown.c


Changeset:
Modified: trunk/busybox/networking/ifupdown.c
===================================================================
--- trunk/busybox/networking/ifupdown.c	2008-02-15 15:17:23 UTC (rev 21031)
+++ trunk/busybox/networking/ifupdown.c	2008-02-15 16:20:26 UTC (rev 21032)
@@ -584,32 +584,24 @@
 
 static char *next_word(char **buf)
 {
-	unsigned short length;
+	unsigned length;
 	char *word;
 
-	if (!buf || !*buf || !**buf) {
-		return NULL;
-	}
-
 	/* Skip over leading whitespace */
 	word = skip_whitespace(*buf);
 
-	/* Skip over comments */
-	if (*word == '#') {
+	/* Stop on EOL/comments */
+	if (*word == '#' || *word == '\0')
 		return NULL;
-	}
 
-	/* Find the length of this word */
+	/* Find the length of this word (can't be 0) */
 	length = strcspn(word, " \t\n");
-	if (length == 0) {
-		return NULL;
-	}
+
+	/* Unless we are already at NUL, store NUL and advance */
+	if (word[length] != '\0')
+		word[length++] = '\0';
+
 	*buf = word + length;
-	/*DBU:[dave at cray.com] if we are already at EOL dont't increment beyond it */
-	if (**buf) {
-		**buf = '\0';
-		(*buf)++;
-	}
 
 	return word;
 }
@@ -686,27 +678,26 @@
 
 		if (strcmp(firstword, "mapping") == 0) {
 #if ENABLE_FEATURE_IFUPDOWN_MAPPING
-			currmap = xzalloc(sizeof(struct mapping_defn_t));
+			currmap = xzalloc(sizeof(*currmap));
 
 			while ((firstword = next_word(&buf_ptr)) != NULL) {
-				if (currmap->max_matches == currmap->n_matches) {
+				if (currmap->n_matches >= currmap->max_matches) {
 					currmap->max_matches = currmap->max_matches * 2 + 1;
-					currmap->match = xrealloc(currmap->match, sizeof(currmap->match) * currmap->max_matches);
+					currmap->match = xrealloc(currmap->match, sizeof(*currmap->match) * currmap->max_matches);
 				}
-
 				currmap->match[currmap->n_matches++] = xstrdup(firstword);
 			}
-			currmap->max_mappings = 0;
-			currmap->n_mappings = 0;
-			currmap->mapping = NULL;
-			currmap->script = NULL;
+			/*currmap->max_mappings = 0; - done by xzalloc */
+			/*currmap->n_mappings = 0;*/
+			/*currmap->mapping = NULL;*/
+			/*currmap->script = NULL;*/
 			{
 				struct mapping_defn_t **where = &defn->mappings;
 				while (*where != NULL) {
 					where = &(*where)->next;
 				}
 				*where = currmap;
-				currmap->next = NULL;
+				/*currmap->next = NULL;*/
 			}
 			debug_noise("Added mapping\n");
 #endif
@@ -727,44 +718,36 @@
 			char *method_name;
 			llist_t *iface_list;
 
-			currif = xzalloc(sizeof(struct interface_defn_t));
+			currif = xzalloc(sizeof(*currif));
 			iface_name = next_word(&buf_ptr);
 			address_family_name = next_word(&buf_ptr);
 			method_name = next_word(&buf_ptr);
 
-			if (buf_ptr == NULL) {
-				bb_error_msg("too few parameters for line \"%s\"", buf);
-				return NULL;
-			}
+			if (method_name == NULL)
+				bb_error_msg_and_die("too few parameters for line \"%s\"", buf);
 
 			/* ship any trailing whitespace */
 			buf_ptr = skip_whitespace(buf_ptr);
 
-			if (buf_ptr[0] != '\0') {
-				bb_error_msg("too many parameters \"%s\"", buf);
-				return NULL;
-			}
+			if (buf_ptr[0] != '\0' /* && buf_ptr[0] != '#' */)
+				bb_error_msg_and_die("too many parameters \"%s\"", buf);
 
 			currif->iface = xstrdup(iface_name);
 
 			currif->address_family = get_address_family(addr_fams, address_family_name);
-			if (!currif->address_family) {
-				bb_error_msg("unknown address type \"%s\"", address_family_name);
-				return NULL;
-			}
+			if (!currif->address_family)
+				bb_error_msg_and_die("unknown address type \"%s\"", address_family_name);
 
 			currif->method = get_method(currif->address_family, method_name);
-			if (!currif->method) {
-				bb_error_msg("unknown method \"%s\"", method_name);
-				return NULL;
-			}
+			if (!currif->method)
+				bb_error_msg_and_die("unknown method \"%s\"", method_name);
 
 			for (iface_list = defn->ifaces; iface_list; iface_list = iface_list->link) {
 				struct interface_defn_t *tmp = (struct interface_defn_t *) iface_list->data;
-				if ((strcmp(tmp->iface, currif->iface) == 0) &&
-					(tmp->address_family == currif->address_family)) {
-					bb_error_msg("duplicate interface \"%s\"", tmp->iface);
-					return NULL;
+				if ((strcmp(tmp->iface, currif->iface) == 0)
+				 && (tmp->address_family == currif->address_family)
+				) {
+					bb_error_msg_and_die("duplicate interface \"%s\"", tmp->iface);
 				}
 			}
 			llist_add_to_end(&(defn->ifaces), (char*)currif);
@@ -787,73 +770,50 @@
 		} else {
 			switch (currently_processing) {
 			case IFACE:
-				{
-					int i;
+				if (buf_ptr[0] == '\0')
+					bb_error_msg_and_die("option with empty value \"%s\"", buf);
 
-					if (strlen(buf_ptr) == 0) {
-						bb_error_msg("option with empty value \"%s\"", buf);
-						return NULL;
+				if (strcmp(firstword, "up") != 0
+				 && strcmp(firstword, "down") != 0
+				 && strcmp(firstword, "pre-up") != 0
+				 && strcmp(firstword, "post-down") != 0
+				) {
+					int i;
+					for (i = 0; i < currif->n_options; i++) {
+						if (strcmp(currif->option[i].name, firstword) == 0)
+							bb_error_msg_and_die("duplicate option \"%s\"", buf);
 					}
-
-					if (strcmp(firstword, "up") != 0
-							&& strcmp(firstword, "down") != 0
-							&& strcmp(firstword, "pre-up") != 0
-							&& strcmp(firstword, "post-down") != 0) {
-						for (i = 0; i < currif->n_options; i++) {
-							if (strcmp(currif->option[i].name, firstword) == 0) {
-								bb_error_msg("duplicate option \"%s\"", buf);
-								return NULL;
-							}
-						}
-					}
 				}
 				if (currif->n_options >= currif->max_options) {
-					struct variable_t *opt;
-
-					currif->max_options = currif->max_options + 10;
-					opt = xrealloc(currif->option, sizeof(*opt) * currif->max_options);
-					currif->option = opt;
+					currif->max_options += 10;
+					currif->option = xrealloc(currif->option, sizeof(*currif->option) * currif->max_options);
 				}
+				debug_noise("\t%s=%s\n", firstword, buf_ptr);
 				currif->option[currif->n_options].name = xstrdup(firstword);
 				currif->option[currif->n_options].value = xstrdup(buf_ptr);
-				if (!currif->option[currif->n_options].name) {
-					perror(filename);
-					return NULL;
-				}
-				if (!currif->option[currif->n_options].value) {
-					perror(filename);
-					return NULL;
-				}
-				debug_noise("\t%s=%s\n", currif->option[currif->n_options].name,
-						currif->option[currif->n_options].value);
 				currif->n_options++;
 				break;
 			case MAPPING:
 #if ENABLE_FEATURE_IFUPDOWN_MAPPING
 				if (strcmp(firstword, "script") == 0) {
-					if (currmap->script != NULL) {
-						bb_error_msg("duplicate script in mapping \"%s\"", buf);
-						return NULL;
-					} else {
-						currmap->script = xstrdup(next_word(&buf_ptr));
-					}
+					if (currmap->script != NULL)
+						bb_error_msg_and_die("duplicate script in mapping \"%s\"", buf);
+					currmap->script = xstrdup(next_word(&buf_ptr));
 				} else if (strcmp(firstword, "map") == 0) {
-					if (currmap->max_mappings == currmap->n_mappings) {
+					if (currmap->n_mappings >= currmap->max_mappings) {
 						currmap->max_mappings = currmap->max_mappings * 2 + 1;
 						currmap->mapping = xrealloc(currmap->mapping, sizeof(char *) * currmap->max_mappings);
 					}
 					currmap->mapping[currmap->n_mappings] = xstrdup(next_word(&buf_ptr));
 					currmap->n_mappings++;
 				} else {
-					bb_error_msg("misplaced option \"%s\"", buf);
-					return NULL;
+					bb_error_msg_and_die("misplaced option \"%s\"", buf);
 				}
 #endif
 				break;
 			case NONE:
 			default:
-				bb_error_msg("misplaced option \"%s\"", buf);
-				return NULL;
+				bb_error_msg_and_die("misplaced option \"%s\"", buf);
 			}
 		}
 		free(buf);
@@ -1138,7 +1098,7 @@
 int ifupdown_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int ifupdown_main(int argc, char **argv)
 {
-	int (*cmds)(struct interface_defn_t *) = NULL;
+	int (*cmds)(struct interface_defn_t *);
 	struct interfaces_file_t *defn;
 	llist_t *target_list = NULL;
 	const char *interfaces = "/etc/network/interfaces";
@@ -1161,10 +1121,6 @@
 	defn = read_interfaces(interfaces);
 	debug_noise("\ndone reading %s\n\n", interfaces);
 
-	if (!defn) {
-		return EXIT_FAILURE;
-	}
-
 	startup_PATH = getenv("PATH");
 	if (!startup_PATH) startup_PATH = "";
 




More information about the busybox-cvs mailing list