1303 files changed, 32187 insertions, 57138 deletions
diff --git a/networking/libiproute/utils.c b/networking/libiproute/utils.c index 37c8f43..779c6a3 100644 --- a/networking/libiproute/utils.c +++ b/networking/libiproute/utils.c @@ -13,6 +13,28 @@ #include "utils.h" #include "inet_common.h" +unsigned get_hz(void) +{ + static unsigned hz_internal; + FILE *fp; + + if (hz_internal) + return hz_internal; + + fp = fopen_for_read("/proc/net/psched"); + if (fp) { + unsigned nom, denom; + + if (fscanf(fp, "%*08x%*08x%08x%08x", &nom, &denom) == 2) + if (nom == 1000000) + hz_internal = denom; + fclose(fp); + } + if (!hz_internal) + hz_internal = bb_clk_tck(); + return hz_internal; +} + unsigned get_unsigned(char *arg, const char *errmsg) { unsigned long res; @@ -25,7 +47,7 @@ unsigned get_unsigned(char *arg, const char *errmsg) return res; } } - invarg(arg, errmsg); /* does not return */ + invarg_1_to_2(arg, errmsg); /* does not return */ } uint32_t get_u32(char *arg, const char *errmsg) @@ -40,7 +62,7 @@ uint32_t get_u32(char *arg, const char *errmsg) return res; } } - invarg(arg, errmsg); /* does not return */ + invarg_1_to_2(arg, errmsg); /* does not return */ } uint16_t get_u16(char *arg, const char *errmsg) @@ -55,7 +77,7 @@ uint16_t get_u16(char *arg, const char *errmsg) return res; } } - invarg(arg, errmsg); /* does not return */ + invarg_1_to_2(arg, errmsg); /* does not return */ } int get_addr_1(inet_prefix *addr, char *name, int family) @@ -208,12 +230,12 @@ uint32_t get_addr32(char *name) void incomplete_command(void) { - bb_error_msg_and_die("command line is not complete, try option \"help\""); + bb_error_msg_and_die("command line is not complete, try \"help\""); } -void invarg(const char *arg, const char *opt) +void invarg_1_to_2(const char *arg, const char *opt) { - bb_error_msg_and_die(bb_msg_invalid_arg, arg, opt); + bb_error_msg_and_die(bb_msg_invalid_arg_to, arg, opt); } void duparg(const char *key, const char *arg) @@ -254,20 +276,21 @@ int inet_addr_match(const inet_prefix *a, const inet_prefix *b, int bits) return 0; } -const char *rt_addr_n2a(int af, - void *addr, char *buf, int buflen) +const char *rt_addr_n2a(int af, void *addr) { switch (af) { case AF_INET: case AF_INET6: - return inet_ntop(af, addr, buf, buflen); + return inet_ntop(af, addr, + auto_string(xzalloc(INET6_ADDRSTRLEN)), INET6_ADDRSTRLEN + ); default: return "???"; } } #ifdef RESOLVE_HOSTNAMES -const char *format_host(int af, int len, void *addr, char *buf, int buflen) +const char *format_host(int af, int len, void *addr) { if (resolve_hosts) { struct hostent *h_ent; @@ -286,11 +309,10 @@ const char *format_host(int af, int len, void *addr, char *buf, int buflen) if (len > 0) { h_ent = gethostbyaddr(addr, len, af); if (h_ent != NULL) { - safe_strncpy(buf, h_ent->h_name, buflen); - return buf; + return auto_string(xstrdup(h_ent->h_name)); } } } - return rt_addr_n2a(af, addr, buf, buflen); + return rt_addr_n2a(af, addr); } #endif |