summaryrefslogtreecommitdiffabout
path: root/cache.c
authorLars Hjemli <hjemli@gmail.com>2008-05-18 21:10:05 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-05-18 21:10:05 (UTC)
commit6102bcfce46fd357566941d565b95f78510af79b (patch) (unidiff)
tree95794eda3bdf84e72a6fb32bfa96fb4e0cb147b9 /cache.c
parentc3de425acbc4ae1190ca99e733a72da56c6a082b (diff)
downloadcgit-6102bcfce46fd357566941d565b95f78510af79b.zip
cgit-6102bcfce46fd357566941d565b95f78510af79b.tar.gz
cgit-6102bcfce46fd357566941d565b95f78510af79b.tar.bz2
cache.c: read(2) returns -1 on error, not 0
Noticed-by: Jim Meyering <jim@meyering.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'cache.c') (more/less context) (ignore whitespace changes)
-rw-r--r--cache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/cache.c b/cache.c
index b701e13..add647e 100644
--- a/cache.c
+++ b/cache.c
@@ -31,49 +31,49 @@ struct cache_slot {
31 int match; 31 int match;
32 struct stat cache_st; 32 struct stat cache_st;
33 struct stat lock_st; 33 struct stat lock_st;
34 int bufsize; 34 int bufsize;
35 char buf[CACHE_BUFSIZE]; 35 char buf[CACHE_BUFSIZE];
36}; 36};
37 37
38/* Open an existing cache slot and fill the cache buffer with 38/* Open an existing cache slot and fill the cache buffer with
39 * (part of) the content of the cache file. Return 0 on success 39 * (part of) the content of the cache file. Return 0 on success
40 * and errno otherwise. 40 * and errno otherwise.
41 */ 41 */
42static int open_slot(struct cache_slot *slot) 42static int open_slot(struct cache_slot *slot)
43{ 43{
44 char *bufz; 44 char *bufz;
45 int bufkeylen = -1; 45 int bufkeylen = -1;
46 46
47 slot->cache_fd = open(slot->cache_name, O_RDONLY); 47 slot->cache_fd = open(slot->cache_name, O_RDONLY);
48 if (slot->cache_fd == -1) 48 if (slot->cache_fd == -1)
49 return errno; 49 return errno;
50 50
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 = read(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
58 bufz = memchr(slot->buf, 0, slot->bufsize); 58 bufz = memchr(slot->buf, 0, slot->bufsize);
59 if (bufz) 59 if (bufz)
60 bufkeylen = bufz - slot->buf; 60 bufkeylen = bufz - slot->buf;
61 61
62 slot->match = bufkeylen == slot->keylen && 62 slot->match = bufkeylen == slot->keylen &&
63 !memcmp(slot->key, slot->buf, bufkeylen + 1); 63 !memcmp(slot->key, slot->buf, bufkeylen + 1);
64 64
65 return 0; 65 return 0;
66} 66}
67 67
68/* Close the active cache slot */ 68/* Close the active cache slot */
69static void close_slot(struct cache_slot *slot) 69static void close_slot(struct cache_slot *slot)
70{ 70{
71 if (slot->cache_fd > 0) { 71 if (slot->cache_fd > 0) {
72 close(slot->cache_fd); 72 close(slot->cache_fd);
73 slot->cache_fd = -1; 73 slot->cache_fd = -1;
74 } 74 }
75} 75}
76 76
77/* Print the content of the active cache slot (but skip the key). */ 77/* Print the content of the active cache slot (but skip the key). */
78static int print_slot(struct cache_slot *slot) 78static int print_slot(struct cache_slot *slot)
79{ 79{