chiark / gitweb /
uslip/uslip.c: Abstract out the server's EOF-on-stdin behaviour.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 17 Apr 2017 23:39:24 +0000 (00:39 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 23 Apr 2017 03:13:33 +0000 (04:13 +0100)
uslip/uslip.c

index 7752458c286031d3156f1c6f359dc1d32f015b95..853df5b2233ea853bc3a851d3373462432436240 100644 (file)
@@ -461,6 +461,16 @@ static void done_slip_dribble(dribbler *d, int err, void *hunoz)
     cripple_dribbler(d);
 }
 
     cripple_dribbler(d);
 }
 
+static void close_slip(int fd)
+{
+  switch (slipstate) {
+    case SYNC1: case SYNC2: case START: case BAD: break;
+    default: moan("eof found while processing packet (discarding)"); break;
+  }
+  close(fd); sel_rmfile(&slip_in);
+  reasons--;
+}
+
 static void do_slip_in(int fd, unsigned mode, void *hunoz)
 {
   ssize_t i, n;
 static void do_slip_in(int fd, unsigned mode, void *hunoz)
 {
   ssize_t i, n;
@@ -477,19 +487,7 @@ static void do_slip_in(int fd, unsigned mode, void *hunoz)
   for (;;) {
     n = read(fd, buf, sizeof(buf));
     if (n == 0) {
   for (;;) {
     n = read(fd, buf, sizeof(buf));
     if (n == 0) {
-      switch (slipstate) {
-       case SYNC1:
-       case SYNC2:
-       case START:
-       case BAD:
-         break;
-       default:
-         moan("eof found while processing packet (discarding)");
-         break;
-      }
-      close(fd);
-      sel_rmfile(&slip_in);
-      reasons--;
+      close_slip(fd);
       return;
     } else if (n < 0) {
       if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
       return;
     } else if (n < 0) {
       if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)