summaryrefslogtreecommitdiff
path: root/cache.c
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2008-05-18 23:16:50 +0200
committerLars Hjemli <hjemli@gmail.com>2008-05-18 23:16:50 +0200
commitd402811bd2db21c7868411a279fd2d220f54c294 (patch)
tree1d4c4ac9bec7673652c8771f1ae55f4806cbaf8b /cache.c
parent6102bcfce46fd357566941d565b95f78510af79b (diff)
cache.c: make all io-related functions return errno on error
We'll need proper return-values from these functions to make the cache behave correctly (which includes giving proper error messages). Noticed-by: Jim Meyering <jim@meyering.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'cache.c')
-rw-r--r--cache.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/cache.c b/cache.c
index add647e..6847202 100644
--- a/cache.c
+++ b/cache.c
@@ -66,12 +66,16 @@ static int open_slot(struct cache_slot *slot)
}
/* Close the active cache slot */
-static void close_slot(struct cache_slot *slot)
+static int close_slot(struct cache_slot *slot)
{
+ int err = 0;
if (slot->cache_fd > 0) {
- close(slot->cache_fd);
- slot->cache_fd = -1;
+ if (close(slot->cache_fd))
+ err = errno;
+ else
+ slot->cache_fd = -1;
}
+ return err;
}
/* Print the content of the active cache slot (but skip the key). */
@@ -116,12 +120,16 @@ static int is_modified(struct cache_slot *slot)
}
/* Close an open lockfile */
-static void close_lock(struct cache_slot *slot)
+static int close_lock(struct cache_slot *slot)
{
+ int err = 0;
if (slot->lock_fd > 0) {
- close(slot->lock_fd);
- slot->lock_fd = -1;
+ if (close(slot->lock_fd))
+ err = errno;
+ else
+ slot->lock_fd = -1;
}
+ return err;
}
/* Create a lockfile used to store the generated content for a cache
@@ -134,7 +142,8 @@ static int lock_slot(struct cache_slot *slot)
S_IRUSR|S_IWUSR);
if (slot->lock_fd == -1)
return errno;
- write(slot->lock_fd, slot->key, slot->keylen + 1);
+ if (write(slot->lock_fd, slot->key, slot->keylen + 1) < 0)
+ return errno;
return 0;
}
@@ -150,7 +159,11 @@ static int unlock_slot(struct cache_slot *slot, int replace_old_slot)
err = rename(slot->lock_name, slot->cache_name);
else
err = unlink(slot->lock_name);
- return err;
+
+ if (err)
+ return errno;
+
+ return 0;
}
/* Generate the content for the current cache slot by redirecting
@@ -177,7 +190,9 @@ static int fill_slot(struct cache_slot *slot)
return errno;
/* Close the temporary filedescriptor */
- close(tmp);
+ if (close(tmp))
+ return errno;
+
return 0;
}