summaryrefslogtreecommitdiff
path: root/wrapper.c
diff options
context:
space:
mode:
authorAlex Riesen <raa.lkml@gmail.com>2009-04-29 21:21:46 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-04-30 01:37:41 (GMT)
commitfc71db39e0d75e8a403f36f3fecf4450886cd165 (patch)
treeea69404a0a4afc9417e39e4dcf3e09dca08b4008 /wrapper.c
parentd1c8c0c8c42912eb768a05115c798de50e595f8b (diff)
downloadgit-fc71db39e0d75e8a403f36f3fecf4450886cd165.zip
git-fc71db39e0d75e8a403f36f3fecf4450886cd165.tar.gz
git-fc71db39e0d75e8a403f36f3fecf4450886cd165.tar.bz2
Introduce an unlink(2) wrapper which gives warning if unlink failed
This seem to be a very common pattern in the current code. The function prints a generic removal failure message, the file name which failed and readable errno presentation. The function preserves errno and always returns the value unlink(2) returned, but prints no message for ENOENT, as it was the most often filtered out in the code calling unlink. Besides, removing a file is anyway the purpose of calling unlink. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'wrapper.c')
-rw-r--r--wrapper.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/wrapper.c b/wrapper.c
index d8efb13..7eb3218 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -289,3 +289,19 @@ int odb_pack_keep(char *name, size_t namesz, unsigned char *sha1)
safe_create_leading_directories(name);
return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
}
+
+int unlink_or_warn(const char *file)
+{
+ int rc = unlink(file);
+
+ if (rc < 0) {
+ int err = errno;
+ if (ENOENT != err) {
+ warning("unable to unlink %s: %s",
+ file, strerror(errno));
+ errno = err;
+ }
+ }
+ return rc;
+}
+