Skip to content

Commit

Permalink
Merge branch 'ae/better-template-failure-report' into maint
Browse files Browse the repository at this point in the history
* ae/better-template-failure-report:
  Improve error messages when temporary file creation fails
  • Loading branch information
Junio C Hamano committed Mar 21, 2011
2 parents c3786c8 + 6cf6bb3 commit a8e04dd
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 4 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,7 @@ TEST_PROGRAMS_NEED_X += test-subprocess
TEST_PROGRAMS_NEED_X += test-svn-fe
TEST_PROGRAMS_NEED_X += test-treap
TEST_PROGRAMS_NEED_X += test-index-version
TEST_PROGRAMS_NEED_X += test-mktemp

TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))

Expand Down
13 changes: 13 additions & 0 deletions t/t0070-fundamental.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,17 @@ test_expect_success 'character classes (isspace, isalpha etc.)' '
test-ctype
'

test_expect_success 'mktemp to nonexistent directory prints filename' '
test_must_fail test-mktemp doesnotexist/testXXXXXX 2>err &&
grep "doesnotexist/test" err
'

test_expect_success POSIXPERM 'mktemp to unwritable directory prints filename' '
mkdir cannotwrite &&
chmod -w cannotwrite &&
test_when_finished "chmod +w cannotwrite" &&
test_must_fail test-mktemp cannotwrite/testXXXXXX 2>err &&
grep "cannotwrite/test" err
'

test_done
14 changes: 14 additions & 0 deletions test-mktemp.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*
* test-mktemp.c: code to exercise the creation of temporary files
*/
#include "git-compat-util.h"

int main(int argc, char *argv[])
{
if (argc != 2)
usage("Expected 1 parameter defining the temporary file template");

xmkstemp(xstrdup(argv[1]));

return 0;
}
32 changes: 28 additions & 4 deletions wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit a8e04dd

Please sign in to comment.