2004-09-23 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Thu, 23 Sep 2004 19:23:33 +0000 (19:23 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 23 Sep 2004 19:23:33 +0000 (19:23 +0000)
* data.c (_gpgme_data_outbound_handler): Close the file descriptor
if we get an EPIPE.

gpgme/ChangeLog
gpgme/data.c

index 039b197..57177e8 100644 (file)
@@ -1,5 +1,8 @@
 2004-09-23  Marcus Brinkmann  <marcus@g10code.de>
 
+       * data.c (_gpgme_data_outbound_handler): Close the file descriptor
+       if we get an EPIPE.
+       
        * data-stream.c (stream_seek): Call ftello and return the current
        offset.
        * data.h (struct gpgme_data): Change type of data.mem.offset to
@@ -8,6 +11,7 @@
        callback.  If SEEK_CUR, adjust the offset by the pending buffer
        size.  Clear pending buffer on success.
 
+
 2004-09-14  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgme.m4: Add copyright notice.
index aba1986..e4e13a3 100644 (file)
@@ -219,9 +219,19 @@ _gpgme_data_outbound_handler (void *opaque, int fd)
     }
 
   nwritten = _gpgme_io_write (fd, dh->pending, dh->pending_len);
-  if (nwritten == -1 && errno == EAGAIN )
+  if (nwritten == -1 && errno == EAGAIN)
     return 0;
 
+  if (nwritten == -1 && errno == EPIPE)
+    {
+      /* Not much we can do.  The other end closed the pipe, but we
+        still have data.  This should only ever happen if the other
+        end is going to tell us what happened on some other channel.
+        Silently close our end.  */
+      _gpgme_io_close (fd);
+      return 0;
+    }
+
   if (nwritten <= 0)
     return gpg_error_from_errno (errno);