grep: add proper support for pattern_list
[oweals/busybox.git] / networking / netstat.c
index 02f4cc7cc9ae4ccc1fac99aa1bbd34f38a23d0e6..c7934423ba0da9b08db41d338375b1e519e86929 100644 (file)
  *
  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
+//config:config NETSTAT
+//config:      bool "netstat (10 kb)"
+//config:      default y
+//config:      select PLATFORM_LINUX
+//config:      help
+//config:      netstat prints information about the Linux networking subsystem.
+//config:
+//config:config FEATURE_NETSTAT_WIDE
+//config:      bool "Enable wide output"
+//config:      default y
+//config:      depends on NETSTAT
+//config:      help
+//config:      Add support for wide columns. Useful when displaying IPv6 addresses
+//config:      (-W option).
+//config:
+//config:config FEATURE_NETSTAT_PRG
+//config:      bool "Enable PID/Program name output"
+//config:      default y
+//config:      depends on NETSTAT
+//config:      help
+//config:      Add support for -p flag to print out PID and program name.
+//config:      +700 bytes of code.
+
+//applet:IF_NETSTAT(APPLET(netstat, BB_DIR_BIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_NETSTAT) += netstat.o
 
 #include "libbb.h"
 #include "inet_common.h"
@@ -119,7 +145,7 @@ typedef enum {
 #define ADDR_NORMAL_WIDTH        23
 /* When there are IPv6 connections the IPv6 addresses will be
  * truncated to none-recognition. The '-W' option makes the
- * address columns wide enough to accomodate for longest possible
+ * address columns wide enough to accommodate for longest possible
  * IPv6 addresses, i.e. addresses of the form
  * xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd
  */
@@ -146,7 +172,7 @@ struct prg_node {
 #define PRG_HASH_SIZE 211
 
 struct globals {
-       smallint flags;
+       smalluint flags;
 #if ENABLE_FEATURE_NETSTAT_PRG
        smallint prg_cache_loaded;
        struct prg_node *prg_hash[PRG_HASH_SIZE];
@@ -317,9 +343,9 @@ static void prg_cache_load(void)
                return;
 
        if (prg_cache_loaded == 1)
-               bb_error_msg("can't scan /proc - are you root?");
+               bb_simple_error_msg("can't scan /proc - are you root?");
        else
-               bb_error_msg("showing only processes with your user ID");
+               bb_simple_error_msg("showing only processes with your user ID");
 }
 
 #else
@@ -371,8 +397,11 @@ static char *ip_port_str(struct sockaddr *addr, int port, const char *proto, int
        /* Code which used "*" for INADDR_ANY is removed: it's ambiguous
         * in IPv6, while "0.0.0.0" is not. */
 
-       host = numeric ? xmalloc_sockaddr2dotted_noport(addr)
-                      : xmalloc_sockaddr2host_noport(addr);
+       host = NULL;
+       if (!numeric)
+               host = xmalloc_sockaddr2host_noport(addr);
+       if (!host)
+               host = xmalloc_sockaddr2dotted_noport(addr);
 
        host_port = xasprintf("%s:%s", host, get_sname(htons(port), proto, numeric));
        free(host);
@@ -622,7 +651,7 @@ static int FAST_FUNC unix_do_one(char *line)
 
        /* TODO: currently we stop at first NUL byte. Is it a problem? */
        line += path_ofs;
-       *strchrnul(line, '\n') = '\0';
+       chomp(line);
        while (*line)
                fputc_printable(*line++, stdout);
        bb_putchar('\n');