svn commit: trunk/busybox: loginutils networking

vda at busybox.net vda at busybox.net
Mon Nov 20 00:48:22 UTC 2006


Author: vda
Date: 2006-11-19 16:48:22 -0800 (Sun, 19 Nov 2006)
New Revision: 16586

Log:
login: use %s - we know that string is not too long there
ping[6]: use getopt32: smaller (-50 bytes) and handles -c6 correctly
(was requiring '-c 6' with mandatory space)


Modified:
   trunk/busybox/loginutils/login.c
   trunk/busybox/networking/ping.c
   trunk/busybox/networking/ping6.c


Changeset:
Modified: trunk/busybox/loginutils/login.c
===================================================================
--- trunk/busybox/loginutils/login.c	2006-11-19 17:34:57 UTC (rev 16585)
+++ trunk/busybox/loginutils/login.c	2006-11-20 00:48:22 UTC (rev 16586)
@@ -323,16 +323,16 @@
 					username);
 		}
 		if (getfilecon(full_tty, &old_tty_sid) < 0) {
-			bb_perror_msg_and_die("getfilecon(%.100s) failed",
+			bb_perror_msg_and_die("getfilecon(%s) failed",
 					full_tty);
 		}
 		if (security_compute_relabel(user_sid, old_tty_sid,
 					SECCLASS_CHR_FILE, &new_tty_sid) != 0) {
-			bb_perror_msg_and_die("security_change_sid(%.100s) failed",
+			bb_perror_msg_and_die("security_change_sid(%s) failed",
 					full_tty);
 		}
 		if (setfilecon(full_tty, new_tty_sid) != 0) {
-			bb_perror_msg_and_die("chsid(%.100s, %s) failed",
+			bb_perror_msg_and_die("chsid(%s, %s) failed",
 					full_tty, new_tty_sid);
 		}
 	}

Modified: trunk/busybox/networking/ping.c
===================================================================
--- trunk/busybox/networking/ping.c	2006-11-19 17:34:57 UTC (rev 16585)
+++ trunk/busybox/networking/ping.c	2006-11-20 00:48:22 UTC (rev 16586)
@@ -41,17 +41,10 @@
 	PINGINTERVAL = 1		/* second */
 };
 
-#define O_QUIET         (1 << 0)
-
-#define	A(bit)		rcvd_tbl[(bit)>>3]	/* identify byte in array */
-#define	B(bit)		(1 << ((bit) & 0x07))	/* identify bit in byte */
-#define	SET(bit)	(A(bit) |= B(bit))
-#define	CLR(bit)	(A(bit) &= (~B(bit)))
-#define	TST(bit)	(A(bit) & B(bit))
-
 static void ping(const char *host);
 
 /* common routines */
+
 static int in_cksum(unsigned short *buf, int sz)
 {
 	int nleft = sz;
@@ -75,8 +68,10 @@
 	return (ans);
 }
 
-/* simple version */
 #ifndef CONFIG_FEATURE_FANCY_PING
+
+/* simple version */
+
 static char *hostname;
 
 static void noresp(int ign)
@@ -153,14 +148,21 @@
 }
 
 #else /* ! CONFIG_FEATURE_FANCY_PING */
+
 /* full(er) version */
+
+#define OPT_STRING "qc:s:I:"
+enum {
+	OPT_QUIET = 1 << 0,
+};
+
 static struct sockaddr_in pingaddr;
 static struct sockaddr_in sourceaddr;
 static int pingsock = -1;
 static unsigned datalen; /* intentionally uninitialized to work around gcc bug */
 
 static unsigned long ntransmitted, nreceived, nrepeats, pingcount;
-static int myid, options;
+static int myid;
 static unsigned long tmin = ULONG_MAX, tmax, tsum;
 static char rcvd_tbl[MAX_DUP_CHK / 8];
 
@@ -170,6 +172,12 @@
 static void pingstats(int);
 static void unpack(char *, int, struct sockaddr_in *);
 
+#define	A(bit)		rcvd_tbl[(bit)>>3]	/* identify byte in array */
+#define	B(bit)		(1 << ((bit) & 0x07))	/* identify bit in byte */
+#define	SET(bit)	(A(bit) |= B(bit))
+#define	CLR(bit)	(A(bit) &= (~B(bit)))
+#define	TST(bit)	(A(bit) & B(bit))
+
 /**************************************************************************/
 
 static void pingstats(int junk)
@@ -304,7 +312,7 @@
 			dupflag = 0;
 		}
 
-		if (options & O_QUIET)
+		if (option_mask32 & OPT_QUIET)
 			return;
 
 		printf("%d bytes from %s: icmp_seq=%u", sz,
@@ -409,55 +417,26 @@
 
 int ping_main(int argc, char **argv)
 {
-	char *thisarg;
+	char *opt_c, *opt_s, *opt_I;
 
 	datalen = DEFDATALEN; /* initialized here rather than in global scope to work around gcc bug */
 
-	argc--;
-	argv++;
-	/* Parse any options */
-	while (argc >= 1 && **argv == '-') {
-		thisarg = *argv;
-		thisarg++;
-		switch (*thisarg) {
-		case 'q':
-			options |= O_QUIET;
-			break;
-		case 'c':
-			if (--argc <= 0)
-				bb_show_usage();
-			argv++;
-			pingcount = xatoul(*argv);
-			break;
-		case 's':
-			if (--argc <= 0)
-				bb_show_usage();
-			argv++;
-			datalen = xatou16(*argv);
-			break;
-		case 'I':
-			if (--argc <= 0)
-				bb_show_usage();
-			argv++;
-/* ping6 accepts iface too:
-			if_index = if_nametoindex(*argv);
-			if (!if_index) ...
-   make it true for ping too. TODO.
-*/
-			if (parse_nipquad(*argv, &sourceaddr))
-				bb_show_usage();
-			break;
-		default:
+	/* exactly one argument needed */
+	opt_complementary = "=1";
+	getopt32(argc, argv, OPT_STRING, &opt_c, &opt_s, &opt_I);
+	if (option_mask32 & 2) pingcount = xatoul(opt_c); // -c
+	if (option_mask32 & 4) datalen = xatou16(opt_s); // -s
+	if (option_mask32 & 8) { // -I
+/* TODO: ping6 accepts iface too:
+		if_index = if_nametoindex(*argv);
+		if (!if_index) ...
+make it true for ping. */
+		if (parse_nipquad(opt_I, &sourceaddr))
 			bb_show_usage();
-		}
-		argc--;
-		argv++;
 	}
-	if (argc < 1)
-		bb_show_usage();
 
 	myid = (int16_t) getpid();
-	ping(*argv);
+	ping(argv[optind]);
 	return EXIT_SUCCESS;
 }
 #endif /* ! CONFIG_FEATURE_FANCY_PING */

Modified: trunk/busybox/networking/ping6.c
===================================================================
--- trunk/busybox/networking/ping6.c	2006-11-19 17:34:57 UTC (rev 16585)
+++ trunk/busybox/networking/ping6.c	2006-11-20 00:48:22 UTC (rev 16586)
@@ -53,19 +53,12 @@
 	PINGINTERVAL = 1		/* second */
 };
 
-#define O_QUIET         (1 << 0)
-#define O_VERBOSE       (1 << 1)
-
-#define	A(bit)		rcvd_tbl[(bit)>>3]	/* identify byte in array */
-#define	B(bit)		(1 << ((bit) & 0x07))	/* identify bit in byte */
-#define	SET(bit)	(A(bit) |= B(bit))
-#define	CLR(bit)	(A(bit) &= (~B(bit)))
-#define	TST(bit)	(A(bit) & B(bit))
-
 static void ping(const char *host);
 
-/* simple version */
 #ifndef CONFIG_FEATURE_FANCY_PING6
+
+/* simple version */
+
 static struct hostent *h;
 
 static void noresp(int ign)
@@ -142,14 +135,22 @@
 }
 
 #else /* ! CONFIG_FEATURE_FANCY_PING6 */
+
 /* full(er) version */
+
+#define OPT_STRING "qvc:s:I:"
+enum {
+	OPT_QUIET = 1 << 0,
+	OPT_VERBOSE = 1 << 1,
+};
+
 static struct sockaddr_in6 pingaddr;
 static int pingsock = -1;
 static unsigned datalen; /* intentionally uninitialized to work around gcc bug */
 static int if_index;
 
 static unsigned long ntransmitted, nreceived, nrepeats, pingcount;
-static int myid, options;
+static int myid;
 static unsigned long tmin = ULONG_MAX, tmax, tsum;
 static char rcvd_tbl[MAX_DUP_CHK / 8];
 
@@ -159,6 +160,12 @@
 static void pingstats(int);
 static void unpack(char *, int, struct sockaddr_in6 *, int);
 
+#define	A(bit)		rcvd_tbl[(bit)>>3]	/* identify byte in array */
+#define	B(bit)		(1 << ((bit) & 0x07))	/* identify bit in byte */
+#define	SET(bit)	(A(bit) |= B(bit))
+#define	CLR(bit)	(A(bit) &= (~B(bit)))
+#define	TST(bit)	(A(bit) & B(bit))
+
 /**************************************************************************/
 
 static void pingstats(int junk)
@@ -294,7 +301,7 @@
 			dupflag = 0;
 		}
 
-		if (options & O_QUIET)
+		if (option_mask32 & OPT_QUIET)
 			return;
 
 		printf("%d bytes from %s: icmp6_seq=%u", sz,
@@ -336,7 +343,7 @@
 #ifdef ICMP6_FILTER
 	{
 		struct icmp6_filter filt;
-		if (!(options & O_VERBOSE)) {
+		if (!(option_mask32 & OPT_VERBOSE)) {
 			ICMP6_FILTER_SETBLOCKALL(&filt);
 			ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filt);
 		} else {
@@ -416,57 +423,24 @@
 
 int ping6_main(int argc, char **argv)
 {
-	char *thisarg;
+	char *opt_c, *opt_s, *opt_I;
 
 	datalen = DEFDATALEN; /* initialized here rather than in global scope to work around gcc bug */
 
-	argc--;
-	argv++;
-	/* Parse any options */
-	while (argc >= 1 && **argv == '-') {
-		thisarg = *argv;
-		thisarg++;
-		switch (*thisarg) {
-		case 'v':
-			options &= ~O_QUIET;
-			options |= O_VERBOSE;
-			break;
-		case 'q':
-			options &= ~O_VERBOSE;
-			options |= O_QUIET;
-			break;
-		case 'c':
-			if (--argc <= 0)
-				bb_show_usage();
-			argv++;
-			pingcount = xatoul(*argv);
-			break;
-		case 's':
-			if (--argc <= 0)
-				bb_show_usage();
-			argv++;
-			datalen = xatou16(*argv);
-			break;
-		case 'I':
-			if (--argc <= 0)
-				bb_show_usage();
-			argv++;
-			if_index = if_nametoindex(*argv);
-			if (!if_index)
-				bb_error_msg_and_die(
-					"%s: invalid interface name", *argv);
-			break;
-		default:
-			bb_show_usage();
-		}
-		argc--;
-		argv++;
+	/* exactly one argument needed, -v and -q don't mix */
+	opt_complementary = "=1:q--v:v--q"; 
+	getopt32(argc, argv, OPT_STRING, &opt_c, &opt_s, &opt_I);
+	if (option_mask32 & 4) pingcount = xatoul(opt_c); // -c
+	if (option_mask32 & 8) datalen = xatou16(opt_s); // -s
+	if (option_mask32 & 0x10) { // -I
+		if_index = if_nametoindex(opt_I);
+		if (!if_index)
+			bb_error_msg_and_die(
+				"%s: invalid interface name", opt_I);
 	}
-	if (argc < 1)
-		bb_show_usage();
 
-	myid = (int16_t) getpid();
-	ping(*argv);
+	myid = (int16_t)getpid();
+	ping(argv[optind]);
 	return EXIT_SUCCESS;
 }
 #endif /* ! CONFIG_FEATURE_FANCY_PING6 */




More information about the busybox-cvs mailing list