diff options
author | Lars Hjemli | 2008-05-18 23:26:05 +0200 |
---|---|---|
committer | Lars Hjemli | 2008-05-18 23:34:55 +0200 |
commit | cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8 (patch) | |
tree | 021c4ef2e82de11ffb27e19ea4e5b7d60f7e0a20 | |
parent | cache.c: make all io-related functions return errno on error (diff) | |
download | cgit-cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8.tar.gz cgit-cdc6b2f8e7a8d43dcfe0475a9d3498333ea686b8.zip |
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
diff --git a/cache.c b/cache.c index 6847202..a996109 100644 --- a/cache.c +++ b/cache.c | |||
@@ -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 | } |