From abbd363261cf3a9b18e611c524f8103fb68f539b Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 8 Nov 2007 17:40:23 +0000 Subject: xreadlink: code shrink udhcp: add missing tryagain member to client_config function old new delta xmalloc_readlink_follow 169 154 -15 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-15) Total: -15 bytes --- libbb/xreadlink.c | 35 ++++++++++++++++++----------------- loginutils/login.c | 3 +-- networking/udhcp/dhcpc.h | 1 + 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/libbb/xreadlink.c b/libbb/xreadlink.c index 2f6b1e2..f7948cb 100644 --- a/libbb/xreadlink.c +++ b/libbb/xreadlink.c @@ -41,14 +41,21 @@ char *xmalloc_readlink(const char *path) */ char *xmalloc_readlink_follow(const char *path) { - char *buf = NULL, *lpc, *linkpath; + char *buf; + char *lpc; + char *linkpath; int bufsize; - smallint looping = 0; + int looping = MAXSYMLINKS + 1; - buf = strdup(path); - bufsize = strlen(path) + 1; + linkpath = xstrdup(path); + goto jump_in; - while(1) { + while (1) { + if (!--looping) { + free(linkpath); + free(buf); + return NULL; + } linkpath = xmalloc_readlink(buf); if (!linkpath) { if (errno == EINVAL) /* not a symlink */ @@ -56,25 +63,19 @@ char *xmalloc_readlink_follow(const char *path) free(buf); return NULL; } - - if (*linkpath == '/') { - free(buf); - buf = linkpath; - bufsize = strlen(linkpath) + 1; - } else { + if (linkpath[0] != '/') { bufsize += strlen(linkpath); - if (looping++ > MAXSYMLINKS) { - free(linkpath); - free(buf); - return NULL; - } buf = xrealloc(buf, bufsize); lpc = bb_get_last_path_component_strip(buf); strcpy(lpc, linkpath); free(linkpath); + } else { + free(buf); + jump_in: + buf = linkpath; + bufsize = strlen(buf) + 1; } } - } char *xmalloc_readlink_or_warn(const char *path) diff --git a/loginutils/login.c b/loginutils/login.c index c1e0c76..7e90446 100644 --- a/loginutils/login.c +++ b/loginutils/login.c @@ -305,9 +305,8 @@ int login_main(int argc, char **argv) openlog(applet_name, LOG_PID | LOG_CONS | LOG_NOWAIT, LOG_AUTH); while (1) { - /* flush away any type-ahead (as getty does) */ - (void) ioctl(0, TCFLSH, TCIFLUSH); + ioctl(0, TCFLSH, TCIFLUSH); if (!username[0]) get_username_or_die(username, sizeof(username)); diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h index 8da1dd8..72a8bd9 100644 --- a/networking/udhcp/dhcpc.h +++ b/networking/udhcp/dhcpc.h @@ -30,6 +30,7 @@ struct client_config_t { int ifindex; /* Index number of the interface to use */ int retries; /* Max number of request packets */ int timeout; /* Number of seconds to try to get a lease */ + int tryagain; /* Number of seconds to try to get a lease */ uint8_t arp[6]; /* Our arp address */ }; -- cgit v1.1