if (fstat(slot->cache_fd, &slot->cache_st))
return errno;
- slot->bufsize = read(slot->cache_fd, slot->buf, sizeof(slot->buf));
+ slot->bufsize = xread(slot->cache_fd, slot->buf, sizeof(slot->buf));
if (slot->bufsize < 0)
return errno;
/* Print the content of the active cache slot (but skip the key). */
static int print_slot(struct cache_slot *slot)
{
- ssize_t i, j = 0;
+ ssize_t i, j;
i = lseek(slot->cache_fd, slot->keylen + 1, SEEK_SET);
if (i != slot->keylen + 1)
return errno;
- while((i=read(slot->cache_fd, slot->buf, sizeof(slot->buf))) > 0)
- j = write(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);
- if (j < 0)
+ if (i < 0 || j != i)
return errno;
else
return 0;
S_IRUSR|S_IWUSR);
if (slot->lock_fd == -1)
return errno;
- if (write(slot->lock_fd, slot->key, slot->keylen + 1) < 0)
+ if (xwrite(slot->lock_fd, slot->key, slot->keylen + 1) < 0)
return errno;
return 0;
}
}
}
}
- print_slot(slot);
+ if ((err = print_slot(slot)) != 0) {
+ cache_log("[cgit] error printing cache %s: %s (%d)\n",
+ slot->cache_name,
+ strerror(err),
+ err);
+ }
close_slot(slot);
- return 0;
+ return err;
}
/* If the cache slot does not exist (or its key doesn't match the
// the lock file.
slot->cache_fd = slot->lock_fd;
unlock_slot(slot, 1);
- err = print_slot(slot);
+ if ((err = print_slot(slot)) != 0) {
+ cache_log("[cgit] error printing cache %s: %s (%d)\n",
+ slot->cache_name,
+ strerror(err),
+ err);
+ }
close_slot(slot);
return err;
}