summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2018-11-28 12:41:18 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2018-11-28 12:41:18 +0100
commit099da8cb824ee60bf3f55e9e69380660f167b216 (patch)
treef46a1157c7e69db7bed7a054922e7dfc1b54b67c
parent22b28520cd431c2f68acd66b877122379d704914 (diff)
devip: fix arpread, dont return partial entries
-rw-r--r--sys/src/9/ip/arp.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/sys/src/9/ip/arp.c b/sys/src/9/ip/arp.c
index c924f6cb2..f71b0bad6 100644
--- a/sys/src/9/ip/arp.c
+++ b/sys/src/9/ip/arp.c
@@ -460,16 +460,17 @@ arpread(Arp *arp, char *s, ulong offset, int len)
qunlock(arp);
runlock(ifc);
- n = snprint(p, len, "%-6.6s %-4.4s %-40.40I %-16.16s %I\n",
+ n = snprint(up->genbuf, sizeof up->genbuf,
+ "%-6.6s %-4.4s %-40.40I %-16.16s %I\n",
mname, state, ip, mac, ia);
- if(o < 0) {
- if(n > -o)
- memmove(p, p-o, n+o);
- o += n;
- } else {
- len -= n;
- p += n;
- }
+ o += n;
+ if(o <= 0)
+ continue;
+ if(n > len)
+ break;
+ memmove(p, up->genbuf, n);
+ len -= n;
+ p += n;
}
return p - s;