]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: safe_io: handle EOF on read
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 10 Feb 2011 11:27:40 +0000 (03:27 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Thu, 10 Feb 2011 12:58:47 +0000 (04:58 -0800)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/common/safe_io.c

index 455265e7034ae9407a7df19fc8c6d3a3a622852e..f9158a77fa5bff247b4501fb6b44419d9553ce67 100644 (file)
@@ -10,7 +10,11 @@ ssize_t safe_read(int fd, void *buf, size_t count)
 
        while (count > 0) {
                r = read(fd, buf, count);
-               if (r < 0) {
+               if (r <= 0) {
+                       if (r == 0) {
+                               // EOF
+                               return -EDOM;
+                       }
                        if (errno == EINTR)
                                continue;
                        return -errno;
@@ -44,11 +48,16 @@ ssize_t safe_pread(int fd, void *buf, size_t count, off_t offset)
 
        while (count > 0) {
                r = pread(fd, buf, count, offset);
-               if (r < 0) {
+               if (r <= 0) {
+                       if (r == 0) {
+                               // EOF
+                               return -EDOM;
+                       }
                        if (errno == EINTR)
                                continue;
                        return -errno;
                }
+
                count -= r;
                buf = (char *)buf + r;
                offset += r;