Header And Logo

PostgreSQL
| The world's most advanced open source database.

Functions | Variables

util.c File Reference

#include "postgres_fe.h"
#include "pg_upgrade.h"
#include <signal.h>
Include dependency graph for util.c:

Go to the source code of this file.

Functions

void report_status (eLogType type, const char *fmt,...)
void end_progress_output (void)
void prep_status (const char *fmt,...)
void pg_log (eLogType type, char *fmt,...)
void check_ok (void)
char * quote_identifier (const char *s)
int get_user_info (char **user_name)
const char * getErrorText (int errNum)
unsigned int str2uint (const char *str)
void pg_putenv (const char *var, const char *val)

Variables

LogOpts log_opts

Function Documentation

void check_ok ( void   ) 
void end_progress_output ( void   ) 

Definition at line 40 of file util.c.

References prep_status().

Referenced by create_new_objects(), generate_old_dump(), and transfer_all_new_tablespaces().

{
    /*
     *  In case nothing printed; pass a space so gcc doesn't complain about
     *  empty format string.
     */
    prep_status(" ");
}

int get_user_info ( char **  user_name  ) 

Definition at line 188 of file util.c.

References pg_strdup().

Referenced by parseCommandLine().

{
    int         user_id;

#ifndef WIN32
    struct passwd *pw = getpwuid(geteuid());

    user_id = geteuid();
#else                           /* the windows code */
    struct passwd_win32
    {
        int         pw_uid;
        char        pw_name[128];
    }           pass_win32;
    struct passwd_win32 *pw = &pass_win32;
    DWORD       pwname_size = sizeof(pass_win32.pw_name) - 1;

    GetUserName(pw->pw_name, &pwname_size);

    user_id = 1;
#endif

    *user_name = pg_strdup(pw->pw_name);

    return user_id;
}

const char* getErrorText ( int  errNum  ) 
void pg_log ( eLogType  type,
char *  fmt,
  ... 
)

Definition at line 84 of file util.c.

References _, LogOpts::internal, MESSAGE_WIDTH, NULL, PG_FATAL, PG_REPORT, PG_STATUS, PG_VERBOSE, PG_WARNING, LogOpts::verbose, and vsnprintf().

{
    va_list     args;
    char        message[MAX_STRING];

    va_start(args, fmt);
    vsnprintf(message, sizeof(message), fmt, args);
    va_end(args);

    /* 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_putenv ( const char *  var,
const char *  val 
)

Definition at line 253 of file util.c.

References pg_malloc(), putenv, and unsetenv.

Referenced by get_control_data(), and parseCommandLine().

{
    if (val)
    {
#ifndef WIN32
        char       *envstr = (char *) pg_malloc(strlen(var) +
                                                strlen(val) + 2);

        sprintf(envstr, "%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
    }
}

void prep_status ( const char *  fmt,
  ... 
)

Definition at line 66 of file util.c.

References MESSAGE_WIDTH, pg_log(), PG_REPORT, and vsnprintf().

{
    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);
}

char* quote_identifier ( const char *  s  ) 

Definition at line 163 of file util.c.

{
    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;
}

void report_status ( eLogType  type,
const char *  fmt,
  ... 
)

Definition at line 25 of file util.c.

References pg_log(), and vsnprintf().

{
    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);
}

unsigned int str2uint ( const char *  str  ) 

Definition at line 240 of file util.c.

References NULL.

Referenced by get_control_data().

{
    return strtoul(str, NULL, 10);
}


Variable Documentation