]> code.delx.au - pulseaudio/commitdiff
handle EOF in ioline.c
authorLennart Poettering <lennart@poettering.net>
Thu, 15 Sep 2005 23:50:05 +0000 (23:50 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 15 Sep 2005 23:50:05 +0000 (23:50 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@348 fefdeb5f-60dc-0310-8127-8f9354f1896f

polyp/ioline.c

index 6f7886da5b428df963563bdfb24b7172f94e31bd..f437094d2c411609329f671215b8b73f5c4bd7aa 100644 (file)
@@ -262,8 +262,16 @@ static int do_read(struct pa_ioline *l) {
         assert(len >= READ_SIZE);
         
         /* Read some data */
-        if ((r = pa_iochannel_read(l->io, l->rbuf+l->rbuf_index+l->rbuf_valid_length, len)) <= 0) {
-            pa_log(__FILE__": read() failed: %s\n", r < 0 ? strerror(errno) : "EOF");
+        r = pa_iochannel_read(l->io, l->rbuf+l->rbuf_index+l->rbuf_valid_length, len);
+        if (r == 0) {
+            /* Got an EOF, so fake an exit command. */
+            l->rbuf_index = 0;
+            snprintf (l->rbuf, l->rbuf_length, "exit\n");
+            r = 5;
+            pa_ioline_puts(l, "\nExiting.\n");
+            do_write(l);
+        } else if (r < 0) {
+            pa_log(__FILE__": read() failed: %s\n", strerror(errno));
             failure(l);
             return -1;
         }