int pgut_getopt(int argc, char **argv, pgut_option options[]) { int c; int optindex = 0; char *optstring; struct option *longopts; pgut_option *opt; if (PROGRAM_NAME == NULL) { PROGRAM_NAME = get_progname(argv[0]); set_pglocale_pgservice(argv[0], "pgscripts"); } /* Help message and version are handled at first. */ if (argc > 1) { if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") == 0) { help(true); exit_or_abort(HELP); } if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) { fprintf(stderr, "%s %s\n", PROGRAM_NAME, PROGRAM_VERSION); exit_or_abort(HELP); } } /* Merge default and user options. */ longopts = option_merge(default_options, options); optstring = longopts_to_optstring(longopts); /* Assign named options */ while ((c = getopt_long(argc, argv, optstring, longopts, &optindex)) != -1) { opt = option_find(c, default_options, options); assign_option(opt, optarg, SOURCE_CMDLINE); } /* Read environment variables */ option_from_env(options); (void) (dbname || (dbname = getenv("PGDATABASE")) || (dbname = getenv("PGUSER")) || (dbname = get_username())); init_cancel_handler(); atexit(on_cleanup); return optind; }
void pgut_errfinish(int dummy, ...) { pgutErrorData *edata = getErrorData(); if (log_required(edata->elevel, pgut_log_level)) pgut_error(edata->elevel, edata->code, edata->msg.data ? edata->msg.data : "unknown", edata->detail.data); if (pgut_abort_level <= edata->elevel && edata->elevel <= PANIC) exit_or_abort(edata->code); }
void pgut_errfinish(int dummy, ...) { pgutErrorData *edata = getErrorData(); if (edata->elevel >= pgut_log_level || debug) pgut_error(edata->elevel, edata->msg.data ? edata->msg.data : "unknown", edata->detail.data, edata->hint.data); if (pgut_abort_level <= edata->elevel && edata->elevel <= PANIC) exit_or_abort(edata->ecode); }
void pgut_errfinish(int dummy, ...) { pgutErrorData *edata = getErrorData(); if (log_required(edata->elevel, pgut_log_level)) pgut_error(edata->elevel, edata->code, edata->msg.data ? edata->msg.data : "unknown", edata->detail.data); if (pgut_abort_level <= edata->elevel && edata->elevel <= PANIC) { in_cleanup = true; /* need to be set for cleaning temporary objects on error */ exit_or_abort(edata->code, edata->elevel); } }