summaryrefslogtreecommitdiff
path: root/wrapper.c
diff options
context:
space:
mode:
authorArnout Engelen <arnouten@bzzt.net>2010-12-18 21:28:00 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-12-22 03:51:17 (GMT)
commit6cf6bb3e47ac2f667fa0b27a4222e903ff6fb77c (patch)
tree6f85fb8abadf0e819712c74361b52852858d543a /wrapper.c
parent853563d7344ee532aa56f8a9aabcfdfb5c4fe2c3 (diff)
downloadgit-6cf6bb3e47ac2f667fa0b27a4222e903ff6fb77c.zip
git-6cf6bb3e47ac2f667fa0b27a4222e903ff6fb77c.tar.gz
git-6cf6bb3e47ac2f667fa0b27a4222e903ff6fb77c.tar.bz2
Improve error messages when temporary file creation fails
Before, when creating a temporary file failed, a generic 'Unable to create temporary file' message was printed. In some cases this could lead to confusion as to which directory should be checked for correct permissions etc. This patch adds the template for the temporary filename to the error message, converting it to an absolute path if needed. A test verifies that the template is indeed printed when pointing to a nonexistent or unwritable directory. A copy of the original template is made in case mkstemp clears the template. Signed-off-by: Arnout Engelen <arnouten@bzzt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'wrapper.c')
-rw-r--r--wrapper.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/wrapper.c b/wrapper.c
index 8d7dd31..55b074e 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -198,10 +198,22 @@ FILE *xfdopen(int fd, const char *mode)
int xmkstemp(char *template)
{
int fd;
+ char origtemplate[PATH_MAX];
+ strlcpy(origtemplate, template, sizeof(origtemplate));
fd = mkstemp(template);
- if (fd < 0)
- die_errno("Unable to create temporary file");
+ if (fd < 0) {
+ int saved_errno = errno;
+ const char *nonrelative_template;
+
+ if (!template[0])
+ template = origtemplate;
+
+ nonrelative_template = make_nonrelative_path(template);
+ errno = saved_errno;
+ die_errno("Unable to create temporary file '%s'",
+ nonrelative_template);
+ }
return fd;
}
@@ -321,10 +333,22 @@ int gitmkstemps(char *pattern, int suffix_len)
int xmkstemp_mode(char *template, int mode)
{
int fd;
+ char origtemplate[PATH_MAX];
+ strlcpy(origtemplate, template, sizeof(origtemplate));
fd = git_mkstemp_mode(template, mode);
- if (fd < 0)
- die_errno("Unable to create temporary file");
+ if (fd < 0) {
+ int saved_errno = errno;
+ const char *nonrelative_template;
+
+ if (!template[0])
+ template = origtemplate;
+
+ nonrelative_template = make_nonrelative_path(template);
+ errno = saved_errno;
+ die_errno("Unable to create temporary file '%s'",
+ nonrelative_template);
+ }
return fd;
}