diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/psql/startup.c | 93 |
1 files changed, 42 insertions, 51 deletions
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 17fb943dfab..00474781096 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -58,8 +58,8 @@ enum _actions typedef struct SimpleActionListCell { struct SimpleActionListCell *next; - int action; - char *val; + enum _actions action; + char *val; } SimpleActionListCell; typedef struct SimpleActionList @@ -84,11 +84,11 @@ struct adhoc_opts static void parse_psql_options(int argc, char *argv[], struct adhoc_opts * options); +static void simple_action_list_append(SimpleActionList *list, + enum _actions action, const char *val); static void process_psqlrc(char *argv0); static void process_psqlrc_file(char *filename); static void showVersion(void); -static void simple_action_list_append(SimpleActionList *list, - int action, const char *val); static void EstablishVariableSpace(void); #define NOPAGER 0 @@ -172,9 +172,6 @@ main(int argc, char *argv[]) SetVariable(pset.vars, "PROMPT2", DEFAULT_PROMPT2); SetVariable(pset.vars, "PROMPT3", DEFAULT_PROMPT3); - options.actions.head = NULL; - options.actions.tail = NULL; - parse_psql_options(argc, argv, &options); /* @@ -298,13 +295,13 @@ main(int argc, char *argv[]) process_psqlrc(argv[0]); /* - * If any actions were given by caller, process them in the order in - * which they were specified. + * If any actions were given by user, process them in the order in which + * they were specified. Note single_txn is only effective in this mode. */ if (options.actions.head != NULL) { - PGresult *res; - SimpleActionListCell *cell; + PGresult *res; + SimpleActionListCell *cell; successResult = EXIT_SUCCESS; /* silence compiler */ @@ -341,8 +338,8 @@ main(int argc, char *argv[]) scan_state = psql_scan_create(); psql_scan_setup(scan_state, - cell->val, - strlen(cell->val)); + cell->val, + strlen(cell->val)); successResult = HandleSlashCmds(scan_state, NULL) != PSQL_CMD_ERROR ? EXIT_SUCCESS : EXIT_FAILURE; @@ -356,7 +353,7 @@ main(int argc, char *argv[]) else { /* should never come here */ - Assert(0); + Assert(false); } if (successResult != EXIT_SUCCESS && pset.on_error_stop) @@ -473,11 +470,11 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options) if (optarg[0] == '\\') simple_action_list_append(&options->actions, ACT_SINGLE_SLASH, - pstrdup(optarg + 1)); + optarg + 1); else simple_action_list_append(&options->actions, ACT_SINGLE_QUERY, - pstrdup(optarg)); + optarg); break; case 'd': options->dbname = pg_strdup(optarg); @@ -490,8 +487,8 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options) break; case 'f': simple_action_list_append(&options->actions, - ACT_FILE, - pg_strdup(optarg)); + ACT_FILE, + optarg); break; case 'F': pset.popt.topt.fieldSep.separator = pg_strdup(optarg); @@ -673,6 +670,33 @@ parse_psql_options(int argc, char *argv[], struct adhoc_opts * options) /* + * Append a new item to the end of the SimpleActionList. + * Note that "val" is copied if it's not NULL. + */ +static void +simple_action_list_append(SimpleActionList *list, + enum _actions action, const char *val) +{ + SimpleActionListCell *cell; + + cell = (SimpleActionListCell *) pg_malloc(sizeof(SimpleActionListCell)); + + cell->next = NULL; + cell->action = action; + if (val) + cell->val = pg_strdup(val); + else + cell->val = NULL; + + if (list->tail) + list->tail->next = cell; + else + list->head = cell; + list->tail = cell; +} + + +/* * Load .psqlrc file, if found. */ static void @@ -945,39 +969,6 @@ show_context_hook(const char *newval) } -/* - * Support for list of actions. SimpleStringList cannot be used due possible - * combination different actions with the requirement to save the order. - */ -static void -simple_action_list_append(SimpleActionList *list, int action, const char *val) -{ - SimpleActionListCell *cell; - size_t vallen = 0; - - if (val) - vallen = strlen(val); - - cell = (SimpleActionListCell *) - pg_malloc(offsetof(SimpleActionListCell, val) + vallen + 1); - - cell->next = NULL; - cell->action = action; - if (val) - { - cell->val = pg_malloc(vallen + 1); - strcpy(cell->val, val); - } - else - cell->val = NULL; - - if (list->tail) - list->tail->next = cell; - else - list->head = cell; - list->tail = cell; -} - static void EstablishVariableSpace(void) { |