[BusyBox-cvs] busybox/networking nameif.c,1.4,1.5

Glenn McGrath bug1 at busybox.net
Thu Jan 16 11:38:01 UTC 2003


Update of /var/cvs/busybox/networking
In directory winder:/tmp/cvs-serv11701/networking

Modified Files:
	nameif.c 
Log Message:
Use vsyslog instead of syslog, improve initalisation and cleanup of 
variables, save 300 Bytes or so, patch by Vladimir N. Oleynik


Index: nameif.c
===================================================================
RCS file: /var/cvs/busybox/networking/nameif.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- nameif.c	14 Jan 2003 08:54:07 -0000	1.4
+++ nameif.c	16 Jan 2003 11:37:57 -0000	1.5
@@ -1,4 +1,4 @@
-/* 
+/*
  * nameif.c - Naming Interfaces based on MAC address for busybox.
  *
  * Writen 2000 by Andi Kleen.
@@ -38,7 +38,7 @@
 /* take from linux/sockios.h */
 #define SIOCSIFNAME	0x8923		/* set interface name */
 
-/* Octets in one ethernet addr, from <linux/if_ether.h>	 */
+/* Octets in one ethernet addr, from <linux/if_ether.h> */
 #define ETH_ALEN	6
 
 #ifndef ifr_newname
@@ -52,18 +52,22 @@
 	struct ether_addr *mac;
 } mactable_t;
 
-static void serror(const char use_syslog, const char *s, ...)
+static unsigned char use_syslog;
+
+static void serror(const char *s, ...) __attribute__ ((noreturn));
+
+static void serror(const char *s, ...)
 {
 	va_list ap;
 
 	va_start(ap, s);
 
 	if (use_syslog) {
-		openlog("nameif", 0, LOG_LOCAL0);
-		syslog(LOG_ERR, s, ap);
+		openlog(applet_name, 0, LOG_LOCAL0);
+		vsyslog(LOG_ERR, s, ap);
 		closelog();
 	} else {
-		vfprintf(stderr, s, ap);
+		verror_msg(s, ap);
 		putc('\n', stderr);
 	}
 
@@ -73,14 +77,14 @@
 }
 
 /* Check ascii str_macaddr, convert and copy to *mac */
-struct ether_addr *cc_macaddr(char *str_macaddr, unsigned char use_syslog)
+struct ether_addr *cc_macaddr(char *str_macaddr)
 {
 	struct ether_addr *lmac, *mac;
 
 	lmac = ether_aton(str_macaddr);
 	if (lmac == NULL)
-		serror(use_syslog, "cannot parse MAC %s", str_macaddr);
-	mac = xcalloc(1, ETH_ALEN);
+		serror("cannot parse MAC %s", str_macaddr);
+	mac = xmalloc(ETH_ALEN);
 	memcpy(mac, lmac, ETH_ALEN);
 
 	return mac;
@@ -90,13 +94,12 @@
 {
 	mactable_t *clist = NULL;
 	FILE *ifh;
-	char *fname = "/etc/mactab";
+	const char *fname = "/etc/mactab";
 	char *line;
-	unsigned char use_syslog = 0;
-	int ctl_sk = -1;
+	int ctl_sk;
 	int opt;
 	int if_index = 1;
-	mactable_t *ch = NULL;
+	mactable_t *ch;
 
 	static struct option opts[] = {
 		{"syslog", 0, NULL, 's'},
@@ -121,23 +124,18 @@
 		show_usage();
 
 	if (optind < argc) {
-		while (optind < argc) {
+		char **a = argv + optind;
 
-			if (strlen(argv[optind]) > IF_NAMESIZE)
-				serror(use_syslog, "interface name `%s' too long",
-					   argv[optind]);
-			optind++;
+		while (*a) {
 
+			if (strlen(*a) > IF_NAMESIZE)
+				serror("interface name `%s' too long", *a);
 			ch = xcalloc(1, sizeof(mactable_t));
-			ch->next = NULL;
-			ch->prev = NULL;
-			ch->ifname = strdup(argv[optind - 1]);
-			ch->mac = cc_macaddr(argv[optind], use_syslog);
-			optind++;
+			ch->ifname = xstrdup(*a++);
+			ch->mac = cc_macaddr(*a++);
 			if (clist)
-				clist->prev = ch->next;
+				clist->prev = ch;
 			ch->next = clist;
-			ch->prev = clist;
 			clist = ch;
 		}
 	} else {
@@ -145,24 +143,22 @@
 
 		while ((line = get_line_from_file(ifh)) != NULL) {
 			char *line_ptr;
-			unsigned short name_length;
+			size_t name_length;
 
 			line_ptr = line + strspn(line, " \t");
 			if ((line_ptr[0] == '#') || (line_ptr[0] == '\n'))
 				continue;
 			name_length = strcspn(line_ptr, " \t");
-			if (name_length > IF_NAMESIZE)
-				serror(use_syslog, "interface name `%s' too long",
-					   argv[optind]);
 			ch = xcalloc(1, sizeof(mactable_t));
-			ch->next = NULL;
-			ch->prev = NULL;
-			ch->ifname = strndup(line_ptr, name_length);
+			ch->ifname = xstrndup(line_ptr, name_length);
+			if (name_length > IF_NAMESIZE)
+			    serror("interface name `%s' too long",
+					   ch->ifname);
 			line_ptr += name_length;
 			line_ptr += strspn(line_ptr, " \t");
 			name_length = strspn(line_ptr, "0123456789ABCDEFabcdef:");
 			line_ptr[name_length] = '\0';
-			ch->mac = cc_macaddr(line_ptr, use_syslog);
+			ch->mac = cc_macaddr(line_ptr);
 			if (clist)
 				clist->prev = ch;
 			ch->next = clist;
@@ -173,7 +169,7 @@
 	}
 
 	if ((ctl_sk = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
-		serror(use_syslog, "socket: %s", strerror(errno));
+		serror("socket: %m");
 
 	while (clist) {
 		struct ifreq ifr;
@@ -201,8 +197,8 @@
 
 		strcpy(ifr.ifr_newname, ch->ifname);
 		if (ioctl(ctl_sk, SIOCSIFNAME, &ifr) < 0)
-			serror(use_syslog, "cannot change ifname %s to %s: %s",
-				   ifr.ifr_name, ch->ifname, strerror(errno));
+			serror("cannot change ifname %s to %s: %m",
+				   ifr.ifr_name, ch->ifname);
 
 		/* Remove list entry of renamed interface */
 		if (ch->prev != NULL) {
@@ -212,13 +208,11 @@
 		}
 		if (ch->next != NULL)
 			(ch->next)->prev = ch->prev;
+#ifdef CONFIG_FEATURE_CLEAN_UP
+		free(ch->ifname);
+		free(ch->mac);
 		free(ch);
-	}
-
-	while (clist) {
-		ch = clist;
-		clist = clist->next;
-		free(ch);
+#endif
 	}
 
 	return 0;




More information about the busybox-cvs mailing list