]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/osdep/unix/hostdisk.c (grub_util_fd_read): Return correct
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 15 Oct 2013 22:20:07 +0000 (00:20 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 15 Oct 2013 22:20:07 +0000 (00:20 +0200)
value in case of incomplete read.
(grub_util_fd_write): Likewise.

ChangeLog
grub-core/osdep/unix/hostdisk.c

index 791fd9416fd7218b473ae2e231e68e00983567ab..757b1e6c1f7d698623d96f6f609b379253a62748 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-10-16  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/osdep/unix/hostdisk.c (grub_util_fd_read): Return correct
+       value in case of incomplete read.
+       (grub_util_fd_write): Likewise.
+
 2013-10-15  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * util/editenv.c (grub_util_create_envblk_file): Use grub_util_rename.
index 9734a1db5949b56bb3916c9bb006253323c3b903..fe87855e21ffb44dc5fcebcca8f84ac73df14321 100644 (file)
@@ -115,13 +115,16 @@ grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
 ssize_t
 grub_util_fd_read (grub_util_fd_t fd, char *buf, size_t len)
 {
-  ssize_t size = len;
+  ssize_t size = 0;
 
   while (len)
     {
       ssize_t ret = read (fd, buf, len);
 
-      if (ret <= 0)
+      if (ret == 0)
+       break;
+
+      if (ret < 0)
         {
           if (errno == EINTR)
             continue;
@@ -131,6 +134,7 @@ grub_util_fd_read (grub_util_fd_t fd, char *buf, size_t len)
 
       len -= ret;
       buf += ret;
+      size += ret;
     }
 
   return size;
@@ -141,13 +145,16 @@ grub_util_fd_read (grub_util_fd_t fd, char *buf, size_t len)
 ssize_t
 grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
 {
-  ssize_t size = len;
+  ssize_t size = 0;
 
   while (len)
     {
       ssize_t ret = write (fd, buf, len);
 
-      if (ret <= 0)
+      if (ret == 0)
+       break;
+
+      if (ret < 0)
         {
           if (errno == EINTR)
             continue;
@@ -157,6 +164,7 @@ grub_util_fd_write (grub_util_fd_t fd, const char *buf, size_t len)
 
       len -= ret;
       buf += ret;
+      size += ret;
     }
 
   return size;