diff --git a/contrib/pg_upgrade/exec.c b/contrib/pg_upgrade/exec.c index 9e63bd5856839b1c6f099cdb0b5e53ea34ec19d4..0d6fb8d792d809296f3aa4c893c271df2027eefa 100644 --- a/contrib/pg_upgrade/exec.c +++ b/contrib/pg_upgrade/exec.c @@ -29,7 +29,8 @@ static int win32_check_directory_write_permissions(void); * * Formats a command from the given argument list and executes that * command. If the command executes, exec_prog() returns 1 otherwise - * exec_prog() logs an error message and returns 0. + * exec_prog() logs an error message and returns 0. Either way, the command + * line to be executed is saved to the specified log file. * * If throw_error is TRUE, this function will throw a PG_FATAL error * instead of returning should an error occur. @@ -40,8 +41,10 @@ exec_prog(bool throw_error, bool is_priv, { va_list args; int result; + int retval; char cmd[MAXPGPATH]; mode_t old_umask = 0; + FILE *log = fopen(log_file, "a+"); if (is_priv) old_umask = umask(S_IRWXG | S_IRWXO); @@ -51,6 +54,8 @@ exec_prog(bool throw_error, bool is_priv, va_end(args); pg_log(PG_VERBOSE, "%s\n", cmd); + fprintf(log, "command: %s\n", cmd); + fflush(log); result = system(cmd); @@ -66,10 +71,15 @@ exec_prog(bool throw_error, bool is_priv, "Consult the last few lines of \"%s\" for\n" "the probable cause of the failure.\n", log_file); - return 1; + retval = 1; } + else + retval = 0; - return 0; + fprintf(log, "\n\n"); + fclose(log); + + return retval; }