63,8 → 63,6 |
unsigned char *buffer, size_t size, |
const char **errmsg, int *err) |
{ |
ssize_t got; |
|
if (lseek (descriptor, offset, SEEK_SET) < 0) |
{ |
*errmsg = "lseek"; |
72,15 → 70,26 |
return 0; |
} |
|
got = read (descriptor, buffer, size); |
if (got < 0) |
do |
{ |
ssize_t got = read (descriptor, buffer, size); |
if (got == 0) |
break; |
else if (got > 0) |
{ |
buffer += got; |
size -= got; |
} |
else if (errno != EINTR) |
{ |
*errmsg = "read"; |
*err = errno; |
return 0; |
} |
} |
while (size > 0); |
|
if ((size_t) got < size) |
if (size > 0) |
{ |
*errmsg = "file too short"; |
*err = 0; |
98,8 → 107,6 |
const unsigned char *buffer, size_t size, |
const char **errmsg, int *err) |
{ |
ssize_t wrote; |
|
if (lseek (descriptor, offset, SEEK_SET) < 0) |
{ |
*errmsg = "lseek"; |
107,15 → 114,26 |
return 0; |
} |
|
wrote = write (descriptor, buffer, size); |
if (wrote < 0) |
do |
{ |
ssize_t wrote = write (descriptor, buffer, size); |
if (wrote == 0) |
break; |
else if (wrote > 0) |
{ |
buffer += wrote; |
size -= wrote; |
} |
else if (errno != EINTR) |
{ |
*errmsg = "write"; |
*err = errno; |
return 0; |
} |
} |
while (size > 0); |
|
if ((size_t) wrote < size) |
if (size > 0) |
{ |
*errmsg = "short write"; |
*err = 0; |