svn commit: trunk/busybox: loginutils networking
vda at busybox.net
vda at busybox.net
Sun Nov 19 16:48:22 PST 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