From cd3cb696c43ba47a427ff99bbeb143ed2caacfe7 Mon Sep 17 00:00:00 2001 From: dbj Date: Sun, 12 Sep 1999 20:12:19 +0000 Subject: added a select call so read doesn't fail with EWOULDBLOCK assign to result of the read to an ssize_t instead of size_t --- net/choparp/patches/patch-ac | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 net/choparp/patches/patch-ac (limited to 'net/choparp') diff --git a/net/choparp/patches/patch-ac b/net/choparp/patches/patch-ac new file mode 100644 index 00000000000..ae2aa5ff678 --- /dev/null +++ b/net/choparp/patches/patch-ac @@ -0,0 +1,54 @@ +$NetBSD: patch-ac,v 1.3 1999/09/12 20:12:19 dbj Exp $ + +--- choparp.c.orig Tue Oct 7 05:29:46 1997 ++++ choparp.c Sun Sep 12 15:58:41 1999 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + + #define BPFFILENAME "/dev/bpf%d" /* bpf file template */ + #ifndef NBPFILTER /* number of available bpf */ +@@ -217,20 +218,35 @@ + + void + loop(int fd, char *buf, size_t buflen){ +- size_t rlen; ++ ssize_t rlen; + char *p, *nextp; + size_t nextlen; + char *rframe; + size_t rframe_len; + char *sframe; + size_t sframe_len; ++ fd_set fdset; ++ ++ FD_ZERO(&fdset); ++ FD_SET(fd,&fdset); + + for(;;){ +- if ((rlen = read(fd, buf, buflen)) <= 0){ +- fprintf(stderr,"loop: read: %s\n", strerror(errno)); +- /* XXX: restart itself if daemon mode */ +- return; +- } ++ int r; ++ r = select(fd+1,&fdset, 0, 0, 0); ++ if ((r < 0) && (errno == EINTR)) continue; ++ if (r < 0) { ++ perror("select"); ++ return; ++ } ++ assert(r == 1); ++ ++ rlen = read(fd, buf, buflen); ++ if ((rlen < 0) && (errno = EINTR)) continue; ++ if (rlen < 0) { ++ perror("loop: read"); ++ return; ++ } ++ + p = buf; + while((rframe = getarp(p, rlen, &nextp, &nextlen)) != NULL){ + if (checkarp(rframe)){ -- cgit v1.2.3