]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Provide assertMakeDir() for tests to use instead of raw mkdir(). In particular,...
authorTim Kientzle <kientzle@gmail.com>
Sun, 26 Jul 2009 02:59:29 +0000 (22:59 -0400)
committerTim Kientzle <kientzle@gmail.com>
Sun, 26 Jul 2009 02:59:29 +0000 (22:59 -0400)
SVN-Revision: 1276

libarchive/test/main.c
libarchive/test/test.h

index 18f7df4558870130fa74e0289ffd581d5a0f5101..be2ca369e7d9e4c5bfd97448534a02e1ea4c7d0d 100644 (file)
@@ -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);
+               }
        }
 
        /*
index 6bb7bd4199001135c773caed11765722180b8163..a677c5f04ab39451232e76baddaa50aa4db06fb7 100644 (file)
 /* 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, ...);