diff options
Diffstat (limited to 'src/third_party/wiredtiger/test/utility/misc.c')
-rw-r--r-- | src/third_party/wiredtiger/test/utility/misc.c | 336 |
1 files changed, 167 insertions, 169 deletions
diff --git a/src/third_party/wiredtiger/test/utility/misc.c b/src/third_party/wiredtiger/test/utility/misc.c index cfad4ad3eda..934fc949b95 100644 --- a/src/third_party/wiredtiger/test/utility/misc.c +++ b/src/third_party/wiredtiger/test/utility/misc.c @@ -36,322 +36,320 @@ const char *progname = "program name not set"; /* * testutil_die -- - * Report an error and abort. + * Report an error and abort. */ void testutil_die(int e, const char *fmt, ...) { - va_list ap; - - /* Flush output to be sure it doesn't mix with fatal errors. */ - (void)fflush(stdout); - (void)fflush(stderr); - - /* Allow test programs to cleanup on fatal error. */ - if (custom_die != NULL) - (*custom_die)(); - - fprintf(stderr, "%s: FAILED", progname); - if (fmt != NULL) { - fprintf(stderr, ": "); - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - } - if (e != 0) - fprintf(stderr, ": %s", wiredtiger_strerror(e)); - fprintf(stderr, "\n"); - fprintf(stderr, "process aborting\n"); - - abort(); + va_list ap; + + /* Flush output to be sure it doesn't mix with fatal errors. */ + (void)fflush(stdout); + (void)fflush(stderr); + + /* Allow test programs to cleanup on fatal error. */ + if (custom_die != NULL) + (*custom_die)(); + + fprintf(stderr, "%s: FAILED", progname); + if (fmt != NULL) { + fprintf(stderr, ": "); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + } + if (e != 0) + fprintf(stderr, ": %s", wiredtiger_strerror(e)); + fprintf(stderr, "\n"); + fprintf(stderr, "process aborting\n"); + + abort(); } /* * testutil_set_progname -- - * Set the global program name for error handling. + * Set the global program name for error handling. */ const char * -testutil_set_progname(char * const *argv) +testutil_set_progname(char *const *argv) { - if ((progname = strrchr(argv[0], DIR_DELIM)) == NULL) - progname = argv[0]; - else - ++progname; - return (progname); + if ((progname = strrchr(argv[0], DIR_DELIM)) == NULL) + progname = argv[0]; + else + ++progname; + return (progname); } /* * testutil_work_dir_from_path -- - * Takes a buffer, its size and the intended work directory. - * Creates the full intended work directory in buffer. + * Takes a buffer, its size and the intended work directory. Creates the full intended work + * directory in buffer. */ void testutil_work_dir_from_path(char *buffer, size_t len, const char *dir) { - /* If no directory is provided, use the default. */ - if (dir == NULL) - dir = DEFAULT_DIR; + /* If no directory is provided, use the default. */ + if (dir == NULL) + dir = DEFAULT_DIR; - if (len < strlen(dir) + 1) - testutil_die(ENOMEM, - "Not enough memory in buffer for directory %s", dir); + if (len < strlen(dir) + 1) + testutil_die(ENOMEM, "Not enough memory in buffer for directory %s", dir); - strcpy(buffer, dir); + strcpy(buffer, dir); } /* * testutil_clean_work_dir -- - * Remove the work directory. + * Remove the work directory. */ void testutil_clean_work_dir(const char *dir) { - size_t len; - int ret; - char *buf; + size_t len; + int ret; + char *buf; #ifdef _WIN32 - /* Additional bytes for the Windows rd command. */ - len = 2 * strlen(dir) + strlen(RM_COMMAND) + - strlen(DIR_EXISTS_COMMAND) + 4; - if ((buf = malloc(len)) == NULL) - testutil_die(ENOMEM, "Failed to allocate memory"); - - testutil_check(__wt_snprintf( - buf, len, "%s %s %s %s", DIR_EXISTS_COMMAND, dir, RM_COMMAND, dir)); + /* Additional bytes for the Windows rd command. */ + len = 2 * strlen(dir) + strlen(RM_COMMAND) + strlen(DIR_EXISTS_COMMAND) + 4; + if ((buf = malloc(len)) == NULL) + testutil_die(ENOMEM, "Failed to allocate memory"); + + testutil_check( + __wt_snprintf(buf, len, "%s %s %s %s", DIR_EXISTS_COMMAND, dir, RM_COMMAND, dir)); #else - len = strlen(dir) + strlen(RM_COMMAND) + 1; - if ((buf = malloc(len)) == NULL) - testutil_die(ENOMEM, "Failed to allocate memory"); + len = strlen(dir) + strlen(RM_COMMAND) + 1; + if ((buf = malloc(len)) == NULL) + testutil_die(ENOMEM, "Failed to allocate memory"); - testutil_check(__wt_snprintf(buf, len, "%s%s", RM_COMMAND, dir)); + testutil_check(__wt_snprintf(buf, len, "%s%s", RM_COMMAND, dir)); #endif - if ((ret = system(buf)) != 0 && ret != ENOENT) - testutil_die(ret, "%s", buf); - free(buf); + if ((ret = system(buf)) != 0 && ret != ENOENT) + testutil_die(ret, "%s", buf); + free(buf); } /* * testutil_make_work_dir -- - * Delete the existing work directory, then create a new one. + * Delete the existing work directory, then create a new one. */ void testutil_make_work_dir(const char *dir) { - size_t len; - char *buf; + size_t len; + char *buf; - testutil_clean_work_dir(dir); + testutil_clean_work_dir(dir); - /* Additional bytes for the mkdir command */ - len = strlen(dir) + strlen(MKDIR_COMMAND) + 1; - if ((buf = malloc(len)) == NULL) - testutil_die(ENOMEM, "Failed to allocate memory"); + /* Additional bytes for the mkdir command */ + len = strlen(dir) + strlen(MKDIR_COMMAND) + 1; + if ((buf = malloc(len)) == NULL) + testutil_die(ENOMEM, "Failed to allocate memory"); - /* mkdir shares syntax between Windows and Linux */ - testutil_check(__wt_snprintf(buf, len, "%s%s", MKDIR_COMMAND, dir)); - testutil_check(system(buf)); - free(buf); + /* mkdir shares syntax between Windows and Linux */ + testutil_check(__wt_snprintf(buf, len, "%s%s", MKDIR_COMMAND, dir)); + testutil_check(system(buf)); + free(buf); } /* * testutil_progress -- - * Print a progress message to the progress file. + * Print a progress message to the progress file. */ void testutil_progress(TEST_OPTS *opts, const char *message) { - FILE *fp; - time_t now; - - if ((fp = fopen(opts->progress_file_name, "a")) == NULL) - testutil_die(errno, "fopen"); - (void)time(&now); - fprintf(fp, "[%" PRIuMAX "] %s\n", (uintmax_t)now, message); - if (fclose(fp) != 0) - testutil_die(errno, "fclose"); + FILE *fp; + time_t now; + + if ((fp = fopen(opts->progress_file_name, "a")) == NULL) + testutil_die(errno, "fopen"); + (void)time(&now); + fprintf(fp, "[%" PRIuMAX "] %s\n", (uintmax_t)now, message); + if (fclose(fp) != 0) + testutil_die(errno, "fclose"); } /* * testutil_cleanup -- - * Delete the existing work directory and free the options structure. + * Delete the existing work directory and free the options structure. */ void testutil_cleanup(TEST_OPTS *opts) { - if (opts->conn != NULL) - testutil_check(opts->conn->close(opts->conn, NULL)); + if (opts->conn != NULL) + testutil_check(opts->conn->close(opts->conn, NULL)); - if (!opts->preserve) - testutil_clean_work_dir(opts->home); + if (!opts->preserve) + testutil_clean_work_dir(opts->home); - free(opts->uri); - free(opts->progress_file_name); - free(opts->home); + free(opts->uri); + free(opts->progress_file_name); + free(opts->home); } /* * testutil_is_flag_set -- - * Return if an environment variable flag is set. + * Return if an environment variable flag is set. */ bool testutil_is_flag_set(const char *flag) { - const char *res; - bool enable_long_tests; + const char *res; + bool enable_long_tests; - if (__wt_getenv(NULL, flag, &res) != 0 || res == NULL) - return (false); + if (__wt_getenv(NULL, flag, &res) != 0 || res == NULL) + return (false); - /* - * This is a boolean test. So if the environment variable is set to any - * value other than 0, we return success. - */ - enable_long_tests = res[0] != '0'; + /* + * This is a boolean test. So if the environment variable is set to any value other than 0, we + * return success. + */ + enable_long_tests = res[0] != '0'; - free((void *)res); + free((void *)res); - return (enable_long_tests); + return (enable_long_tests); } /* * testutil_print_command_line -- - * Print command line arguments for csuite tests. + * Print command line arguments for csuite tests. */ void -testutil_print_command_line(int argc, char * const *argv) +testutil_print_command_line(int argc, char *const *argv) { - int i; + int i; - printf("Running test command: "); - for (i = 0; i < argc; i++) - printf("%s ", argv[i]); - printf("\n"); + printf("Running test command: "); + for (i = 0; i < argc; i++) + printf("%s ", argv[i]); + printf("\n"); } #ifndef _WIN32 /* * testutil_sleep_wait -- - * Wait for a process up to a number of seconds. + * Wait for a process up to a number of seconds. */ void testutil_sleep_wait(uint32_t seconds, pid_t pid) { - pid_t got; - int status; - - while (seconds > 0) { - if ((got = waitpid(pid, &status, WNOHANG|WUNTRACED)) == pid) { - if (WIFEXITED(status)) - testutil_die(EINVAL, - "Child process %" PRIu64 " exited early" - " with status %d", (uint64_t)pid, - WEXITSTATUS(status)); - if (WIFSIGNALED(status)) - testutil_die(EINVAL, - "Child process %" PRIu64 " terminated " - " with signal %d", (uint64_t)pid, - WTERMSIG(status)); - } else if (got == -1) - testutil_die(errno, "waitpid"); - - --seconds; - sleep(1); - } + pid_t got; + int status; + + while (seconds > 0) { + if ((got = waitpid(pid, &status, WNOHANG | WUNTRACED)) == pid) { + if (WIFEXITED(status)) + testutil_die(EINVAL, "Child process %" PRIu64 + " exited early" + " with status %d", + (uint64_t)pid, WEXITSTATUS(status)); + if (WIFSIGNALED(status)) + testutil_die(EINVAL, "Child process %" PRIu64 + " terminated " + " with signal %d", + (uint64_t)pid, WTERMSIG(status)); + } else if (got == -1) + testutil_die(errno, "waitpid"); + + --seconds; + sleep(1); + } } #endif /* * dcalloc -- - * Call calloc, dying on failure. + * Call calloc, dying on failure. */ void * dcalloc(size_t number, size_t size) { - void *p; + void *p; - if ((p = calloc(number, size)) != NULL) - return (p); - testutil_die(errno, "calloc: %" WT_SIZET_FMT "B", number * size); + if ((p = calloc(number, size)) != NULL) + return (p); + testutil_die(errno, "calloc: %" WT_SIZET_FMT "B", number * size); } /* * dmalloc -- - * Call malloc, dying on failure. + * Call malloc, dying on failure. */ void * dmalloc(size_t len) { - void *p; + void *p; - if ((p = malloc(len)) != NULL) - return (p); - testutil_die(errno, "malloc: %" WT_SIZET_FMT "B", len); + if ((p = malloc(len)) != NULL) + return (p); + testutil_die(errno, "malloc: %" WT_SIZET_FMT "B", len); } /* * drealloc -- - * Call realloc, dying on failure. + * Call realloc, dying on failure. */ void * drealloc(void *p, size_t len) { - void *t; + void *t; - if ((t = realloc(p, len)) != NULL) - return (t); - testutil_die(errno, "realloc: %" WT_SIZET_FMT "B", len); + if ((t = realloc(p, len)) != NULL) + return (t); + testutil_die(errno, "realloc: %" WT_SIZET_FMT "B", len); } /* * dstrdup -- - * Call strdup, dying on failure. + * Call strdup, dying on failure. */ void * dstrdup(const void *str) { - char *p; + char *p; - if ((p = strdup(str)) != NULL) - return (p); - testutil_die(errno, "strdup"); + if ((p = strdup(str)) != NULL) + return (p); + testutil_die(errno, "strdup"); } /* * dstrndup -- - * Call emulating strndup, dying on failure. Don't use actual strndup here - * as it is not supported within MSVC. + * Call emulating strndup, dying on failure. Don't use actual strndup here as it is not + * supported within MSVC. */ void * dstrndup(const char *str, size_t len) { - char *p; + char *p; - p = dcalloc(len + 1, sizeof(char)); - memcpy(p, str, len); - return (p); + p = dcalloc(len + 1, sizeof(char)); + memcpy(p, str, len); + return (p); } /* * example_setup -- - * Set the program name, create a home directory for the example programs. + * Set the program name, create a home directory for the example programs. */ const char * -example_setup(int argc, char * const *argv) +example_setup(int argc, char *const *argv) { - const char *home; + const char *home; - (void)argc; /* Unused variable */ + (void)argc; /* Unused variable */ - (void)testutil_set_progname(argv); + (void)testutil_set_progname(argv); - /* - * Create a clean test directory for this run of the test program if the - * environment variable isn't already set (as is done by make check). - */ - if ((home = getenv("WIREDTIGER_HOME")) == NULL) - home = "WT_HOME"; - testutil_make_work_dir(home); - return (home); + /* + * Create a clean test directory for this run of the test program if the environment variable + * isn't already set (as is done by make check). + */ + if ((home = getenv("WIREDTIGER_HOME")) == NULL) + home = "WT_HOME"; + testutil_make_work_dir(home); + return (home); } |