* grub-core/osdep/unix/hostdisk.c (grub_util_fd_read): Return correct
value in case of incomplete read. (grub_util_fd_write): Likewise.
This commit is contained in:
parent
593816780e
commit
669fc44923
2 changed files with 18 additions and 4 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue