diff options
| author | 2008-05-19 06:26:05 (JST) | |
|---|---|---|
| committer | 2008-05-19 06:34:55 (JST) | |
| commit | cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8 (patch) | |
| tree | 021c4ef2e82de11ffb27e19ea4e5b7d60f7e0a20 | |
| parent | d402811bd2db21c7868411a279fd2d220f54c294 (diff) | |
| download | cgit-cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8.zip cgit-cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8.tar.gz | |
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>
| -rw-r--r-- | cache.c | 12 |
1 files changed, 6 insertions, 6 deletions
| @@ -51,7 +51,7 @@ static int open_slot(struct cache_slot *slot) | |||
| 51 | if (fstat(slot->cache_fd, &slot->cache_st)) | 51 | if (fstat(slot->cache_fd, &slot->cache_st)) |
| 52 | return errno; | 52 | return errno; |
| 53 | 53 | ||
| 54 | slot->bufsize = read(slot->cache_fd, slot->buf, sizeof(slot->buf)); | 54 | slot->bufsize = xread(slot->cache_fd, slot->buf, sizeof(slot->buf)); |
| 55 | if (slot->bufsize < 0) | 55 | if (slot->bufsize < 0) |
| 56 | return errno; | 56 | return errno; |
| 57 | 57 | ||
| @@ -81,16 +81,16 @@ static int close_slot(struct cache_slot *slot) | |||
| 81 | /* Print the content of the active cache slot (but skip the key). */ | 81 | /* Print the content of the active cache slot (but skip the key). */ |
| 82 | static int print_slot(struct cache_slot *slot) | 82 | static int print_slot(struct cache_slot *slot) |
| 83 | { | 83 | { |
| 84 | ssize_t i, j = 0; | 84 | ssize_t i; |
| 85 | 85 | ||
| 86 | i = lseek(slot->cache_fd, slot->keylen + 1, SEEK_SET); | 86 | i = lseek(slot->cache_fd, slot->keylen + 1, SEEK_SET); |
| 87 | if (i != slot->keylen + 1) | 87 | if (i != slot->keylen + 1) |
| 88 | return errno; | 88 | return errno; |
| 89 | 89 | ||
| 90 | while((i=read(slot->cache_fd, slot->buf, sizeof(slot->buf))) > 0) | 90 | while((i = xread(slot->cache_fd, slot->buf, sizeof(slot->buf))) > 0) |
| 91 | j = write(STDOUT_FILENO, slot->buf, i); | 91 | i = xwrite(STDOUT_FILENO, slot->buf, i); |
| 92 | 92 | ||
| 93 | if (j < 0) | 93 | if (i < 0) |
| 94 | return errno; | 94 | return errno; |
| 95 | else | 95 | else |
| 96 | return 0; | 96 | return 0; |
| @@ -142,7 +142,7 @@ static int lock_slot(struct cache_slot *slot) | |||
| 142 | S_IRUSR|S_IWUSR); | 142 | S_IRUSR|S_IWUSR); |
| 143 | if (slot->lock_fd == -1) | 143 | if (slot->lock_fd == -1) |
| 144 | return errno; | 144 | return errno; |
| 145 | if (write(slot->lock_fd, slot->key, slot->keylen + 1) < 0) | 145 | if (xwrite(slot->lock_fd, slot->key, slot->keylen + 1) < 0) |
| 146 | return errno; | 146 | return errno; |
| 147 | return 0; | 147 | return 0; |
| 148 | } | 148 | } |
