apcups branch: Fixed the behavior of `sread'.
authorocto <octo>
Sat, 10 Jun 2006 12:59:43 +0000 (12:59 +0000)
committerocto <octo>
Sat, 10 Jun 2006 12:59:43 +0000 (12:59 +0000)
If `sread' receives an EOF it will now close the file descriptor and return an
error. Prior to this revision it would try to read again and possibly fail
then.. Alternatively it might have crashed, who knows..? ;)

src/common.c
src/common.h

index 98e6704..5487b32 100644 (file)
@@ -144,6 +144,15 @@ ssize_t sread (int fd, void *buf, size_t count)
                if (status < 0)
                        return (status);
 
+               if (status == 0)
+               {
+                       DBG ("Received EOF from fd %i. "
+                                       "Closing fd and returning error.",
+                                       fd);
+                       close (fd);
+                       return (-1);
+               }
+
                assert (nleft >= status);
 
                nleft = nleft - status;
index f6a8e19..2be2ff5 100644 (file)
@@ -43,7 +43,8 @@ void *smalloc(size_t size);
  *
  * DESCRIPTION
  *   Reads exactly `n' bytes or failes. Syntax and other behavior is analogous
- *   to `read(2)'.
+ *   to `read(2)'. If EOF is received the file descriptor is closed and an
+ *   error is returned.
  *
  * PARAMETERS
  *   `fd'          File descriptor to write to.