ss: reduce max indentation level in init_service_resolver()
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>
This commit is contained in:
parent
db3ef44c54
commit
596307ea3d
53
misc/ss.c
53
misc/ss.c
|
|
@ -870,31 +870,38 @@ static void init_service_resolver(void)
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
FILE *fp = popen("/usr/sbin/rpcinfo -p 2>/dev/null", "r");
|
FILE *fp = popen("/usr/sbin/rpcinfo -p 2>/dev/null", "r");
|
||||||
if (fp) {
|
|
||||||
fgets(buf, sizeof(buf), fp);
|
if (!fp)
|
||||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
return;
|
||||||
unsigned int progn, port;
|
|
||||||
char proto[128], prog[128];
|
if (!fgets(buf, sizeof(buf), fp)) {
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pclose(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;
|
static int ip_local_port_min, ip_local_port_max;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue