X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=common.cc;h=a43064d527a03340d0f62d260b13b7638cf131f5;hp=f8df1335b00cbe57001d4efacea2191134a4653c;hb=e52837077816345a2afa94b42195992a5871824c;hpb=da1e23074c6f5712e617151a110e80078492d413 diff --git a/common.cc b/common.cc index f8df1335..a43064d5 100644 --- a/common.cc +++ b/common.cc @@ -14,15 +14,17 @@ #define MAX_TRACE_LEN 100 -FILE *model_out; -int fd_user_out; /**< @brief File descriptor from which to read user program output */ +/** @brief Model-checker output file descriptor; default to stdout until redirected */ +int model_out = STDOUT_FILENO; #define CONFIG_STACKTRACE /** Print a backtrace of the current program state. */ void print_trace(void) { #ifdef CONFIG_STACKTRACE - print_stacktrace(stdout); + FILE *file = fdopen(model_out, "w"); + print_stacktrace(file); + fclose(file); #else void *array[MAX_TRACE_LEN]; char **strings; @@ -47,7 +49,7 @@ void model_print_summary(void) void assert_hook(void) { - model_print("Add breakpoint to line %u in file %s.\n",__LINE__,__FILE__); + model_print("Add breakpoint to line %u in file %s.\n", __LINE__, __FILE__); } void model_assert(bool expr, const char *file, int line) @@ -60,12 +62,16 @@ void model_assert(bool expr, const char *file, int line) } } +#ifndef CONFIG_DEBUG + +static int fd_user_out; /**< @brief File descriptor from which to read user program output */ + /** * @brief Setup output redirecting * * Redirects user program's stdout to a pipe so that we can dump it * selectively, when displaying bugs, etc. - * Also connects a special file 'model_out' directly to stdout, for printing + * Also connects a file descriptor 'model_out' directly to stdout, for printing * data when needed. * * The model-checker can selectively choose to print/hide the user program @@ -85,8 +91,7 @@ void redirect_output() int fd; /* Save stdout for later use */ - fd = dup(fileno(stdout)); - model_out = fdopen(fd, "w"); + model_out = dup(fileno(stdout)); /* Redirect program output to a pipe */ int pipefd[2]; @@ -145,19 +150,19 @@ void print_program_output() fflush(stdout); /* Read program output pipe and write to (real) stdout */ - int ret; + ssize_t ret; while (1) { ret = read_to_buf(fd_user_out, buf, sizeof(buf)); if (!ret) break; while (ret > 0) { - int res = fwrite(buf, 1, ret, model_out); + ssize_t res = write(model_out, buf, ret); if (res < 0) { - errno = ferror(model_out); - perror("fwrite"); + perror("write"); exit(EXIT_FAILURE); } ret -= res; } } } +#endif /* ! CONFIG_DEBUG */