diff options
Diffstat (limited to 'contrib/pg_upgrade/util.c')
-rw-r--r-- | contrib/pg_upgrade/util.c | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/contrib/pg_upgrade/util.c b/contrib/pg_upgrade/util.c deleted file mode 100644 index 6184ceef933..00000000000 --- a/contrib/pg_upgrade/util.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * util.c - * - * utility functions - * - * Copyright (c) 2010-2015, PostgreSQL Global Development Group - * contrib/pg_upgrade/util.c - */ - -#include "postgres_fe.h" - -#include "common/username.h" -#include "pg_upgrade.h" - -#include <signal.h> - - -LogOpts log_opts; - -static void pg_log_v(eLogType type, const char *fmt, va_list ap) pg_attribute_printf(2, 0); - - -/* - * report_status() - * - * Displays the result of an operation (ok, failed, error message,...) - */ -void -report_status(eLogType type, const char *fmt,...) -{ - va_list args; - char message[MAX_STRING]; - - va_start(args, fmt); - vsnprintf(message, sizeof(message), fmt, args); - va_end(args); - - pg_log(type, "%s\n", message); -} - - -/* force blank output for progress display */ -void -end_progress_output(void) -{ - /* - * In case nothing printed; pass a space so gcc doesn't complain about - * empty format string. - */ - prep_status(" "); -} - - -/* - * prep_status - * - * Displays a message that describes an operation we are about to begin. - * We pad the message out to MESSAGE_WIDTH characters so that all of the "ok" and - * "failed" indicators line up nicely. - * - * A typical sequence would look like this: - * prep_status("about to flarb the next %d files", fileCount ); - * - * if(( message = flarbFiles(fileCount)) == NULL) - * report_status(PG_REPORT, "ok" ); - * else - * pg_log(PG_FATAL, "failed - %s\n", message ); - */ -void -prep_status(const char *fmt,...) -{ - va_list args; - char message[MAX_STRING]; - - va_start(args, fmt); - vsnprintf(message, sizeof(message), fmt, args); - va_end(args); - - if (strlen(message) > 0 && message[strlen(message) - 1] == '\n') - pg_log(PG_REPORT, "%s", message); - else - /* trim strings that don't end in a newline */ - pg_log(PG_REPORT, "%-*s", MESSAGE_WIDTH, message); -} - - -static void -pg_log_v(eLogType type, const char *fmt, va_list ap) -{ - char message[QUERY_ALLOC]; - - vsnprintf(message, sizeof(message), fmt, ap); - - /* PG_VERBOSE and PG_STATUS are only output in verbose mode */ - /* fopen() on log_opts.internal might have failed, so check it */ - if (((type != PG_VERBOSE && type != PG_STATUS) || log_opts.verbose) && - log_opts.internal != NULL) - { - if (type == PG_STATUS) - /* status messages need two leading spaces and a newline */ - fprintf(log_opts.internal, " %s\n", message); - else - fprintf(log_opts.internal, "%s", message); - fflush(log_opts.internal); - } - - switch (type) - { - case PG_VERBOSE: - if (log_opts.verbose) - printf("%s", _(message)); - break; - - case PG_STATUS: - /* for output to a display, do leading truncation and append \r */ - if (isatty(fileno(stdout))) - /* -2 because we use a 2-space indent */ - printf(" %s%-*.*s\r", - /* prefix with "..." if we do leading truncation */ - strlen(message) <= MESSAGE_WIDTH - 2 ? "" : "...", - MESSAGE_WIDTH - 2, MESSAGE_WIDTH - 2, - /* optional leading truncation */ - strlen(message) <= MESSAGE_WIDTH - 2 ? message : - message + strlen(message) - MESSAGE_WIDTH + 3 + 2); - else - printf(" %s\n", _(message)); - break; - - case PG_REPORT: - case PG_WARNING: - printf("%s", _(message)); - break; - - case PG_FATAL: - printf("\n%s", _(message)); - printf("Failure, exiting\n"); - exit(1); - break; - - default: - break; - } - fflush(stdout); -} - - -void -pg_log(eLogType type, const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - pg_log_v(type, fmt, args); - va_end(args); -} - - -void -pg_fatal(const char *fmt,...) -{ - va_list args; - - va_start(args, fmt); - pg_log_v(PG_FATAL, fmt, args); - va_end(args); - printf("Failure, exiting\n"); - exit(1); -} - - -void -check_ok(void) -{ - /* all seems well */ - report_status(PG_REPORT, "ok"); - fflush(stdout); -} - - -/* - * quote_identifier() - * Properly double-quote a SQL identifier. - * - * The result should be pg_free'd, but most callers don't bother because - * memory leakage is not a big deal in this program. - */ -char * -quote_identifier(const char *s) -{ - char *result = pg_malloc(strlen(s) * 2 + 3); - char *r = result; - - *r++ = '"'; - while (*s) - { - if (*s == '"') - *r++ = *s; - *r++ = *s; - s++; - } - *r++ = '"'; - *r++ = '\0'; - - return result; -} - - -/* - * get_user_info() - */ -int -get_user_info(char **user_name_p) -{ - int user_id; - const char *user_name; - char *errstr; - -#ifndef WIN32 - user_id = geteuid(); -#else - user_id = 1; -#endif - - user_name = get_user_name(&errstr); - if (!user_name) - pg_fatal("%s\n", errstr); - - /* make a copy */ - *user_name_p = pg_strdup(user_name); - - return user_id; -} - - -/* - * getErrorText() - * - * Returns the text of the error message for the given error number - * - * This feature is factored into a separate function because it is - * system-dependent. - */ -const char * -getErrorText(int errNum) -{ -#ifdef WIN32 - _dosmaperr(GetLastError()); -#endif - return pg_strdup(strerror(errNum)); -} - - -/* - * str2uint() - * - * convert string to oid - */ -unsigned int -str2uint(const char *str) -{ - return strtoul(str, NULL, 10); -} - - -/* - * pg_putenv() - * - * This is like putenv(), but takes two arguments. - * It also does unsetenv() if val is NULL. - */ -void -pg_putenv(const char *var, const char *val) -{ - if (val) - { -#ifndef WIN32 - char *envstr; - - envstr = psprintf("%s=%s", var, val); - putenv(envstr); - - /* - * Do not free envstr because it becomes part of the environment on - * some operating systems. See port/unsetenv.c::unsetenv. - */ -#else - SetEnvironmentVariableA(var, val); -#endif - } - else - { -#ifndef WIN32 - unsetenv(var); -#else - SetEnvironmentVariableA(var, ""); -#endif - } -} |