/[packages]/cauldron/net-tools/current/SOURCES/net-tools-1.60-fgets.patch
ViewVC logotype

Contents of /cauldron/net-tools/current/SOURCES/net-tools-1.60-fgets.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 318 - (show annotations) (download)
Fri Jan 7 23:30:25 2011 UTC (13 years, 3 months ago) by tmb
File size: 1446 byte(s)
imported package net-tools
1 Fix for when arp_disp_2() is called without opt_n set. If there is a DNS lookup, an
2 entry is added to /proc/net/arp after fopen(), resulting in a duplicate entry.
3
4 --- net-tools-1.60/arp.c.fgets 2005-12-10 14:52:04.000000000 -0500
5 +++ net-tools-1.60/arp.c 2005-12-11 00:15:59.000000000 -0500
6 @@ -528,7 +528,7 @@ static int arp_show(char *name)
7 int type, flags;
8 FILE *fp;
9 char *hostname;
10 - int num, entries = 0, showed = 0;
11 + int num, entries, showed = 0;
12
13 host[0] = '\0';
14
15 @@ -546,18 +546,21 @@ static int arp_show(char *name)
16 perror(_PATH_PROCNET_ARP);
17 return (-1);
18 }
19 + /* Count number of entries, in case file changes */
20 + for (entries = 0; fgets(line, sizeof(line), fp); entries++);
21 + entries--;
22 + fseek (fp, 0L, SEEK_SET);
23 /* Bypass header -- read until newline */
24 if (fgets(line, sizeof(line), fp) != (char *) NULL) {
25 strcpy(mask, "-");
26 strcpy(dev, "-");
27 /* Read the ARP cache entries. */
28 - for (; fgets(line, sizeof(line), fp);) {
29 - num = sscanf(line, "%s 0x%x 0x%x %100s %100s %100s\n",
30 - ip, &type, &flags, hwa, mask, dev);
31 - if (num < 4)
32 + for (num = 0; num < entries; num++) {
33 + fgets(line, sizeof(line), fp);
34 + if (sscanf(line, "%s 0x%x 0x%x %100s %100s %100s\n",
35 + ip, &type, &flags, hwa, mask, dev) < 4)
36 break;
37
38 - entries++;
39 /* if the user specified hw-type differs, skip it */
40 if (hw_set && (type != hw->type))
41 continue;

  ViewVC Help
Powered by ViewVC 1.1.30