Skip to content

Commit c98c911

Browse files
committed
Minor code embellishments.
1 parent a1feb90 commit c98c911

File tree

1 file changed

+43
-50
lines changed
  • src/backend/utils/misc

1 file changed

+43
-50
lines changed

src/backend/utils/misc/guc.c

Lines changed: 43 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* Written by Peter Eisentraut <peter_e@gmx.net>.
1111
*
1212
* IDENTIFICATION
13-
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.481 2008/11/21 20:14:27 mha Exp $
13+
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.482 2008/12/02 02:00:32 alvherre Exp $
1414
*
1515
*--------------------------------------------------------------------
1616
*/
@@ -4382,16 +4382,17 @@ parse_real(const char *value, double *result)
43824382
const char *
43834383
config_enum_lookup_by_value(struct config_enum *record, int val)
43844384
{
4385-
const struct config_enum_entry *entry = record->options;
4386-
while (entry && entry->name)
4385+
const struct config_enum_entry *entry;
4386+
4387+
for (entry = record->options; entry && entry->name; entry++)
43874388
{
43884389
if (entry->val == val)
43894390
return entry->name;
4390-
entry++;
43914391
}
4392+
43924393
elog(ERROR, "could not find enum option %d for %s",
43934394
val, record->gen.name);
4394-
return NULL; /* silence compiler */
4395+
return NULL; /* silence compiler */
43954396
}
43964397

43974398

@@ -4400,86 +4401,71 @@ config_enum_lookup_by_value(struct config_enum *record, int val)
44004401
* (case-insensitive).
44014402
* If the enum option is found, sets the retval value and returns
44024403
* true. If it's not found, return FALSE and retval is set to 0.
4403-
*
44044404
*/
44054405
bool
4406-
config_enum_lookup_by_name(struct config_enum *record, const char *value, int *retval)
4406+
config_enum_lookup_by_name(struct config_enum *record, const char *value,
4407+
int *retval)
44074408
{
4408-
const struct config_enum_entry *entry = record->options;
4409-
4410-
if (retval)
4411-
*retval = 0; /* suppress compiler warning */
4412-
4413-
while (entry && entry->name)
4409+
const struct config_enum_entry *entry;
4410+
4411+
for (entry = record->options; entry && entry->name; entry++)
44144412
{
44154413
if (pg_strcasecmp(value, entry->name) == 0)
44164414
{
44174415
*retval = entry->val;
44184416
return TRUE;
44194417
}
4420-
entry++;
44214418
}
4419+
4420+
*retval = 0;
44224421
return FALSE;
44234422
}
44244423

44254424

44264425
/*
44274426
* Return a list of all available options for an enum, excluding
4428-
* hidden ones, separated by ", " (comma-space).
4427+
* hidden ones, separated by the given separator.
44294428
* If prefix is non-NULL, it is added before the first enum value.
44304429
* If suffix is non-NULL, it is added to the end of the string.
44314430
*/
44324431
static char *
44334432
config_enum_get_options(struct config_enum *record, const char *prefix,
44344433
const char *suffix, const char *separator)
44354434
{
4436-
const struct config_enum_entry *entry = record->options;
4437-
int len = 0;
4438-
char *hintmsg;
4439-
4440-
if (!entry || !entry->name)
4441-
return NULL; /* Should not happen */
4435+
const struct config_enum_entry *entry;
4436+
StringInfoData retstr;
4437+
int seplen;
44424438

4443-
while (entry && entry->name)
4444-
{
4445-
if (!entry->hidden)
4446-
len += strlen(entry->name) + strlen(separator);
4447-
4448-
entry++;
4449-
}
4450-
4451-
hintmsg = palloc(len + strlen(prefix) + strlen(suffix) + 2);
4452-
4453-
strcpy(hintmsg, prefix);
4439+
initStringInfo(&retstr);
4440+
appendStringInfoString(&retstr, prefix);
44544441

4455-
entry = record->options;
4456-
while (entry && entry->name)
4442+
seplen = strlen(separator);
4443+
for (entry = record->options; entry && entry->name; entry++)
44574444
{
44584445
if (!entry->hidden)
44594446
{
4460-
strcat(hintmsg, entry->name);
4461-
strcat(hintmsg, separator);
4447+
appendStringInfoString(&retstr, entry->name);
4448+
appendBinaryStringInfo(&retstr, separator, seplen);
44624449
}
4463-
4464-
entry++;
44654450
}
44664451

4467-
len = strlen(hintmsg);
4468-
44694452
/*
44704453
* All the entries may have been hidden, leaving the string empty
44714454
* if no prefix was given. This indicates a broken GUC setup, since
44724455
* there is no use for an enum without any values, so we just check
44734456
* to make sure we don't write to invalid memory instead of actually
44744457
* trying to do something smart with it.
44754458
*/
4476-
if (len >= strlen(separator))
4459+
if (retstr.len >= seplen)
4460+
{
44774461
/* Replace final separator */
4478-
hintmsg[len-strlen(separator)] = '\0';
4462+
retstr.data[retstr.len - seplen] = '\0';
4463+
retstr.len -= seplen;
4464+
}
44794465

4480-
strcat(hintmsg, suffix);
4466+
appendStringInfoString(&retstr, suffix);
44814467

4482-
return hintmsg;
4468+
return retstr.data;
44834469
}
44844470

44854471
/*
@@ -5047,7 +5033,11 @@ set_config_option(const char *name, const char *value,
50475033
{
50485034
if (!config_enum_lookup_by_name(conf, value, &newval))
50495035
{
5050-
char *hintmsg = config_enum_get_options(conf, "Available values: ", ".", ", ");
5036+
char *hintmsg;
5037+
5038+
hintmsg = config_enum_get_options(conf,
5039+
"Available values: ",
5040+
".", ", ");
50515041

50525042
ereport(elevel,
50535043
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -6253,13 +6243,16 @@ GetConfigOptionByNum(int varnum, const char **values, bool *noshow)
62536243

62546244
/* enumvals */
62556245
/* NOTE! enumvals with double quotes in them are not supported! */
6256-
values[11] = config_enum_get_options((struct config_enum *) conf, "{\"", "\"}", "\",\"");
6246+
values[11] = config_enum_get_options((struct config_enum *) conf,
6247+
"{\"", "\"}", "\",\"");
62576248

62586249
/* boot_val */
6259-
values[12] = pstrdup(config_enum_lookup_by_value(lconf, lconf->boot_val));
6250+
values[12] = pstrdup(config_enum_lookup_by_value(lconf,
6251+
lconf->boot_val));
62606252

62616253
/* reset_val */
6262-
values[13] = pstrdup(config_enum_lookup_by_value(lconf, lconf->reset_val));
6254+
values[13] = pstrdup(config_enum_lookup_by_value(lconf,
6255+
lconf->reset_val));
62636256
}
62646257
break;
62656258

@@ -6672,8 +6665,8 @@ is_newvalue_equal(struct config_generic * record, const char *newvalue)
66726665
struct config_enum *conf = (struct config_enum *) record;
66736666
int newval;
66746667

6675-
return config_enum_lookup_by_name(conf, newvalue, &newval)
6676-
&& *conf->variable == newval;
6668+
return config_enum_lookup_by_name(conf, newvalue, &newval) &&
6669+
*conf->variable == newval;
66776670
}
66786671
}
66796672

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy