From: Tim Kientzle Date: Sun, 26 Jul 2009 02:59:29 +0000 (-0400) Subject: Provide assertMakeDir() for tests to use instead of raw mkdir(). In particular,... X-Git-Tag: v2.8.0~507 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0c0845fa3b259fd6f84bb35dbe1003e3e4385a7a;p=thirdparty%2Flibarchive.git Provide assertMakeDir() for tests to use instead of raw mkdir(). In particular, this allows us to hide the difference between POSIX two-argument mkdir() and Windows single-argument version. SVN-Revision: 1276 --- diff --git a/libarchive/test/main.c b/libarchive/test/main.c index 18f7df455..be2ca369e 100644 --- a/libarchive/test/main.c +++ b/libarchive/test/main.c @@ -720,6 +720,30 @@ test_assert_file_contents(const void *buff, int s, const char *fpattern, ...) return (0); } +int +test_assert_make_dir(const char *file, int line, const char *dirname, int mode) +{ + int r; + + count_assertion(file, line); +#if defined(_WIN32) && !defined(__CYGWIN__) + r = mkdir(dirname); +#else + r = mkdir(dirname, mode); +#endif + if (r == 0) { + msg[0] = '\0'; + return (1); + } + failures++; + if (!verbose && previous_failures(file, line, 1)) + return (0); + fprintf(stderr, "%s:%d: Could not create directory\n", + file, line); + fprintf(stderr, " Dirname: %s\n", dirname); + return(0); +} + /* * Call standard system() call, but build up the command line using * sprintf() conventions. @@ -827,7 +851,7 @@ static int test_run(int i, const char *tmpdir) exit(1); } /* Create a temp directory for this specific test. */ - if (mkdir(tests[i].name, 0755)) { + if (!assertMakeDir(tests[i].name, 0755)) { fprintf(stderr, "ERROR: Couldn't create temp dir ``%s''\n", tests[i].name); @@ -1191,13 +1215,12 @@ int main(int argc, char **argv) localtime(&now)); sprintf(tmpdir, "%s/%s.%s-%03d", tmp, progname, tmpdir_timestamp, i); - if (mkdir(tmpdir,0755) == 0) - break; - if (errno == EEXIST) - continue; - fprintf(stderr, "ERROR: Unable to create temp directory %s\n", - tmpdir); - exit(1); + if (!assertMakeDir(tmpdir,0755)) { + fprintf(stderr, + "ERROR: Unable to create temp directory %s\n", + tmpdir); + exit(1); + } } /* diff --git a/libarchive/test/test.h b/libarchive/test/test.h index 6bb7bd419..a677c5f04 100644 --- a/libarchive/test/test.h +++ b/libarchive/test/test.h @@ -132,6 +132,9 @@ /* Assert that file contents match a string; supports printf-style arguments. */ #define assertFileContents \ test_setup(__FILE__, __LINE__);test_assert_file_contents +/* Create a directory, report error if it fails. */ +#define assertMakeDir(dirname, mode) \ + test_assert_make_dir(__FILE__, __LINE__, dirname, mode) /* * This would be simple with C99 variadic macros, but I don't want to @@ -157,6 +160,7 @@ int test_assert_equal_mem(const char *, int, const void *, const char *, const v int test_assert_file_contents(const void *, int, const char *, ...); int test_assert_file_exists(const char *, ...); int test_assert_file_not_exists(const char *, ...); +int test_assert_make_dir(const char *, int, const char *, int); /* Like sprintf, then system() */ int systemf(const char * fmt, ...);