The change to print_slot() in
cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8 made
the function return correct errno for read errors while ignoring write errors,
which is not what was intended. This patch tries to rectify things.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
/* Print the content of the active cache slot (but skip the key). */
static int print_slot(struct cache_slot *slot)
{
/* Print the content of the active cache slot (but skip the key). */
static int print_slot(struct cache_slot *slot)
{
i = lseek(slot->cache_fd, slot->keylen + 1, SEEK_SET);
if (i != slot->keylen + 1)
return errno;
i = lseek(slot->cache_fd, slot->keylen + 1, SEEK_SET);
if (i != slot->keylen + 1)
return errno;
- while((i = xread(slot->cache_fd, slot->buf, sizeof(slot->buf))) > 0)
- i = xwrite(STDOUT_FILENO, slot->buf, i);
+ do {
+ i = j = xread(slot->cache_fd, slot->buf, sizeof(slot->buf));
+ if (i > 0)
+ j = xwrite(STDOUT_FILENO, slot->buf, i);
+ } while (i > 0 && j == i);
return errno;
else
return 0;
return errno;
else
return 0;