/* * b_util_dir_setup -- * Create the test directory. */ int b_util_dir_setup() { int ret; #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 3 if ((ret = __os_mkdir(NULL, TESTDIR, 0755)) != 0) { #else if ((ret = mkdir(TESTDIR, 0755)) != 0) { #endif fprintf(stderr, "%s: %s: %s\n", progname, TESTDIR, db_strerror(ret)); return (1); } return (0); } #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 4 #define OS_EXISTS(a, b, c) __os_exists(a, b, c) #else #define OS_EXISTS(a, b, c) __os_exists(b, c) #endif /* * b_util_dir_teardown * Clean up the test directory. */ int b_util_dir_teardown() { int ret; if (OS_EXISTS(NULL, TESTFILE, NULL) == 0 && (ret = b_util_unlink(TESTFILE)) != 0) { fprintf(stderr, "%s: %s: %s\n", progname, TESTFILE, db_strerror(ret)); return (1); } return (testdir_remove(TESTDIR) ? 1 : 0); }
// Create test directory. inline int dir_setup(const char *testdir) { int ret; #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 3 if ((ret = __os_mkdir(NULL, testdir, 0755)) != 0) { #else if ((ret = mkdir(testdir, 0755)) != 0) { #endif fprintf(stderr, "dir_setup: Creating directory %s: %s\n", testdir, db_strerror(ret)); return (1); } return (0); } inline int os_unlink(const char *path) { #if DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 7 return (__os_unlink(NULL, path)); #else return (__os_unlink(NULL, path, 0)); #endif } #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 4 #define OS_EXISTS(a, b, c) __os_exists(a, b, c) #else #define OS_EXISTS(a, b, c) __os_exists(b, c) #endif // Remove contents in specified directory recursively(in DB versions earlier // than 4.6, don't recursively), and optionally remove the directory itself. int rmdir_rcsv(const char *dir, bool keep_this_dir) { int cnt, i, isdir, ret; char buf[1024], **names; ret = 0; /* If the directory doesn't exist, we're done. */ if (OS_EXISTS(NULL, dir, &isdir) != 0) return (0); /* Get a list of the directory contents. */ #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 6 if ((ret = __os_dirlist(NULL, dir, 1, &names, &cnt)) != 0) return (ret); #else if ((ret = __os_dirlist(NULL, dir, &names, &cnt)) != 0) return (ret); #endif /* Go through the file name list, remove each file in the list */ for (i = 0; i < cnt; ++i) { (void)snprintf(buf, sizeof(buf), "%s%c%s", dir, PATH_SEPARATOR[0], names[i]); if ((ret = OS_EXISTS(NULL, buf, &isdir)) != 0) goto file_err; if (!isdir && (ret = os_unlink(buf)) != 0) { file_err: fprintf(stderr, "os_unlink: Error unlinking file: %s: %s\n", buf, db_strerror(ret)); break; } if (isdir && rmdir_rcsv(buf, false) != 0) goto file_err; } __os_dirfree(NULL, names, cnt); /* * If we removed the contents of the directory and we don't want to * keep this directory, remove the directory itself. */ if (i == cnt && !keep_this_dir && (ret = rmdir(dir)) != 0) fprintf(stderr, "rmdir_rcsv(%s): %s\n", dir, db_strerror(errno)); return (ret); } // rmdir_rcsv