]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ss: reduce max indentation level in init_service_resolver()
authorPhil Sutter <phil@nwl.cc>
Sat, 28 Nov 2015 00:00:02 +0000 (01:00 +0100)
committerStephen Hemminger <shemming@brocade.com>
Sun, 29 Nov 2015 19:48:24 +0000 (11:48 -0800)
Exit early or continue on error instead of putting conditional into
conditional to make reading the code a bit easier.

Also, the call to memcpy() can be skipped by initialising prog with the
desired prefix.

Signed-off-by: Phil Sutter <phil@nwl.cc>
misc/ss.c

index a9ae85ec564e9b4a1371d650eda2cbdd7cb0f460..4988d34e18c78d390d1ef5eac3fa60b95ab519b1 100644 (file)
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -870,31 +870,38 @@ static void init_service_resolver(void)
 {
        char buf[128];
        FILE *fp = popen("/usr/sbin/rpcinfo -p 2>/dev/null", "r");
-       if (fp) {
-               fgets(buf, sizeof(buf), fp);
-               while (fgets(buf, sizeof(buf), fp) != NULL) {
-                       unsigned int progn, port;
-                       char proto[128], prog[128];
-                       if (sscanf(buf, "%u %*d %s %u %s", &progn, proto,
-                                  &port, prog+4) == 4) {
-                               struct scache *c = malloc(sizeof(*c));
-                               if (c) {
-                                       c->port = port;
-                                       memcpy(prog, "rpc.", 4);
-                                       c->name = strdup(prog);
-                                       if (strcmp(proto, TCP_PROTO) == 0)
-                                               c->proto = TCP_PROTO;
-                                       else if (strcmp(proto, UDP_PROTO) == 0)
-                                               c->proto = UDP_PROTO;
-                                       else
-                                               c->proto = NULL;
-                                       c->next = rlist;
-                                       rlist = c;
-                               }
-                       }
-               }
+
+       if (!fp)
+               return;
+
+       if (!fgets(buf, sizeof(buf), fp)) {
                pclose(fp);
+               return;
+       }
+       while (fgets(buf, sizeof(buf), fp) != NULL) {
+               unsigned int progn, port;
+               char proto[128], prog[128] = "rpc.";
+               struct scache *c;
+
+               if (sscanf(buf, "%u %*d %s %u %s",
+                          &progn, proto, &port, prog+4) != 4)
+                       continue;
+
+               if (!(c = malloc(sizeof(*c))))
+                       continue;
+
+               c->port = port;
+               c->name = strdup(prog);
+               if (strcmp(proto, TCP_PROTO) == 0)
+                       c->proto = TCP_PROTO;
+               else if (strcmp(proto, UDP_PROTO) == 0)
+                       c->proto = UDP_PROTO;
+               else
+                       c->proto = NULL;
+               c->next = rlist;
+               rlist = c;
        }
+       pclose(fp);
 }
 
 static int ip_local_port_min, ip_local_port_max;