diff options
-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 */ }; |