cache.c: use xread()/xwrite() from libgit

These functions handles EINTR/EAGAIN errors during read/write operations,
which is something cache.c didn't.

While at it, fix a bug in print_slot() where errors during reading from the
cache slot might go by unnoticed.

Noticed-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Lars Hjemli 2008-05-18 23:26:05 +02:00
parent d402811bd2
commit cdc6b2f8e7

12
cache.c
View File

@ -51,7 +51,7 @@ static int open_slot(struct cache_slot *slot)
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;
@ -81,16 +81,16 @@ static int close_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)
{
ssize_t i, j = 0;
ssize_t i;
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);
while((i = xread(slot->cache_fd, slot->buf, sizeof(slot->buf))) > 0)
i = xwrite(STDOUT_FILENO, slot->buf, i);
if (j < 0)
if (i < 0)
return errno;
else
return 0;
@ -142,7 +142,7 @@ static int lock_slot(struct cache_slot *slot)
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;
}