aboutsummaryrefslogtreecommitdiff
path: root/etherent.c
diff options
context:
space:
mode:
Diffstat (limited to 'etherent.c')
-rw-r--r--etherent.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/etherent.c b/etherent.c
index 441920d6..0f0ef0ae 100644
--- a/etherent.c
+++ b/etherent.c
@@ -101,16 +101,20 @@ pcap_next_etherent(FILE *fp)
static struct pcap_etherent e;
memset((char *)&e, 0, sizeof(e));
- do {
+ for (;;) {
/* Find addr */
c = skip_space(fp);
+ if (c == EOF)
+ return (NULL);
if (c == '\n')
continue;
/* If this is a comment, or first thing on line
- cannot be etehrnet address, skip the line. */
+ cannot be Ethernet address, skip the line. */
if (!isxdigit(c)) {
c = skip_line(fp);
+ if (c == EOF)
+ return (NULL);
continue;
}
@@ -118,25 +122,33 @@ pcap_next_etherent(FILE *fp)
for (i = 0; i < 6; i += 1) {
d = xdtoi(c);
c = getc(fp);
+ if (c == EOF)
+ return (NULL);
if (isxdigit(c)) {
d <<= 4;
d |= xdtoi(c);
c = getc(fp);
+ if (c == EOF)
+ return (NULL);
}
e.addr[i] = d;
if (c != ':')
break;
c = getc(fp);
+ if (c == EOF)
+ return (NULL);
}
- if (c == EOF)
- break;
/* Must be whitespace */
if (!isspace(c)) {
c = skip_line(fp);
+ if (c == EOF)
+ return (NULL);
continue;
}
c = skip_space(fp);
+ if (c == EOF)
+ return (NULL);
/* hit end of line... */
if (c == '\n')
@@ -144,6 +156,8 @@ pcap_next_etherent(FILE *fp)
if (c == '#') {
c = skip_line(fp);
+ if (c == EOF)
+ return (NULL);
continue;
}
@@ -154,7 +168,9 @@ pcap_next_etherent(FILE *fp)
do {
*bp++ = c;
c = getc(fp);
- } while (!isspace(c) && c != EOF && --d > 0);
+ if (c == EOF)
+ return (NULL);
+ } while (!isspace(c) && --d > 0);
*bp = '\0';
/* Eat trailing junk */
@@ -162,8 +178,5 @@ pcap_next_etherent(FILE *fp)
(void)skip_line(fp);
return &e;
-
- } while (c != EOF);
-
- return (NULL);
+ }
}