diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-11-08 20:40:23 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-11-08 20:40:23 +0300 |
commit | abbd363261cf3a9b18e611c524f8103fb68f539b (patch) | |
tree | 33545409717701ac3cc40d2a60f80a697835620c | |
parent | 53bd4015aa7ec79b8f45edd30555ea7b7235d7ca (diff) |
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
-rw-r--r-- | libbb/xreadlink.c | 35 | ||||
-rw-r--r-- | loginutils/login.c | 3 | ||||
-rw-r--r-- | networking/udhcp/dhcpc.h | 1 |
3 files changed, 20 insertions, 19 deletions
diff --git a/libbb/xreadlink.c b/libbb/xreadlink.c index 2f6b1e237..f7948cbf3 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 c1e0c7699..7e9044654 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 8da1dd8e1..72a8bd94f 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 */ }; |