v1-0001-Modernize-some-for-loops.patch

text/plain

Filename: v1-0001-Modernize-some-for-loops.patch
Type: text/plain
Part: 0
Message: Reorganize GUC structs

Patch

Format: format-patch
Series: patch v1-0001
Subject: Modernize some for loops
File+
src/backend/utils/misc/guc.c 50 85
src/backend/utils/misc/guc_funcs.c 1 2
src/backend/utils/misc/help_config.c 2 3
From 46ed0194cfe80ac2ca06ddc17785d83626f2116d Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Fri, 3 Oct 2025 08:27:18 +0200
Subject: [PATCH v1 1/8] Modernize some for loops

in guc-related source files, in anticipation of some further
restructuring.
---
 src/backend/utils/misc/guc.c         | 135 ++++++++++-----------------
 src/backend/utils/misc/guc_funcs.c   |   3 +-
 src/backend/utils/misc/help_config.c |   5 +-
 3 files changed, 53 insertions(+), 90 deletions(-)

diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 46fdefebe35..f22189471dc 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -285,8 +285,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 	bool		error = false;
 	bool		applying = false;
 	const char *ConfFileWithError;
-	ConfigVariable *item,
-			   *head,
+	ConfigVariable *head,
 			   *tail;
 	HASH_SEQ_STATUS status;
 	GUCHashEntry *hentry;
@@ -337,7 +336,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 		/*
 		 * Prune all items except the last "data_directory" from the list.
 		 */
-		for (item = head; item; item = item->next)
+		for (ConfigVariable *item = head; item; item = item->next)
 		{
 			if (!item->ignore &&
 				strcmp(item->name, "data_directory") == 0)
@@ -385,7 +384,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 	 * variable mentioned in the file; and we detect duplicate entries in the
 	 * file and mark the earlier occurrences as ignorable.
 	 */
-	for (item = head; item; item = item->next)
+	for (ConfigVariable *item = head; item; item = item->next)
 	{
 		struct config_generic *record;
 
@@ -409,9 +408,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 				 * avoid the O(N^2) behavior here with some additional state,
 				 * but it seems unlikely to be worth the trouble.
 				 */
-				ConfigVariable *pitem;
-
-				for (pitem = head; pitem != item; pitem = pitem->next)
+				for (ConfigVariable *pitem = head; pitem != item; pitem = pitem->next)
 				{
 					if (!pitem->ignore &&
 						strcmp(pitem->name, item->name) == 0)
@@ -455,7 +452,6 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 	while ((hentry = (GUCHashEntry *) hash_seq_search(&status)) != NULL)
 	{
 		struct config_generic *gconf = hentry->gucvar;
-		GucStack   *stack;
 
 		if (gconf->reset_source != PGC_S_FILE ||
 			(gconf->status & GUC_IS_IN_FILE))
@@ -488,7 +484,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 			gconf->reset_source = PGC_S_DEFAULT;
 		if (gconf->source == PGC_S_FILE)
 			set_guc_source(gconf, PGC_S_DEFAULT);
-		for (stack = gconf->stack; stack; stack = stack->prev)
+		for (GucStack *stack = gconf->stack; stack; stack = stack->prev)
 		{
 			if (stack->source == PGC_S_FILE)
 				stack->source = PGC_S_DEFAULT;
@@ -532,7 +528,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel)
 	/*
 	 * Now apply the values from the config file.
 	 */
-	for (item = head; item; item = item->next)
+	for (ConfigVariable *item = head; item; item = item->next)
 	{
 		char	   *pre_value = NULL;
 		int			scres;
@@ -708,13 +704,11 @@ guc_free(void *ptr)
 static bool
 string_field_used(struct config_string *conf, char *strval)
 {
-	GucStack   *stack;
-
 	if (strval == *(conf->variable) ||
 		strval == conf->reset_val ||
 		strval == conf->boot_val)
 		return true;
-	for (stack = conf->gen.stack; stack; stack = stack->prev)
+	for (GucStack *stack = conf->gen.stack; stack; stack = stack->prev)
 	{
 		if (strval == stack->prior.val.stringval ||
 			strval == stack->masked.val.stringval)
@@ -747,8 +741,6 @@ set_string_field(struct config_string *conf, char **field, char *newval)
 static bool
 extra_field_used(struct config_generic *gconf, void *extra)
 {
-	GucStack   *stack;
-
 	if (extra == gconf->extra)
 		return true;
 	switch (gconf->vartype)
@@ -774,7 +766,7 @@ extra_field_used(struct config_generic *gconf, void *extra)
 				return true;
 			break;
 	}
-	for (stack = gconf->stack; stack; stack = stack->prev)
+	for (GucStack *stack = gconf->stack; stack; stack = stack->prev)
 	{
 		if (extra == stack->prior.extra ||
 			extra == stack->masked.extra)
@@ -908,7 +900,6 @@ build_guc_variables(void)
 	HASHCTL		hash_ctl;
 	GUCHashEntry *hentry;
 	bool		found;
-	int			i;
 
 	/*
 	 * Create the memory context that will hold all GUC-related data.
@@ -921,7 +912,7 @@ build_guc_variables(void)
 	/*
 	 * Count all the built-in variables, and set their vartypes correctly.
 	 */
-	for (i = 0; ConfigureNamesBool[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesBool[i].gen.name; i++)
 	{
 		struct config_bool *conf = &ConfigureNamesBool[i];
 
@@ -930,7 +921,7 @@ build_guc_variables(void)
 		num_vars++;
 	}
 
-	for (i = 0; ConfigureNamesInt[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesInt[i].gen.name; i++)
 	{
 		struct config_int *conf = &ConfigureNamesInt[i];
 
@@ -938,7 +929,7 @@ build_guc_variables(void)
 		num_vars++;
 	}
 
-	for (i = 0; ConfigureNamesReal[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesReal[i].gen.name; i++)
 	{
 		struct config_real *conf = &ConfigureNamesReal[i];
 
@@ -946,7 +937,7 @@ build_guc_variables(void)
 		num_vars++;
 	}
 
-	for (i = 0; ConfigureNamesString[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesString[i].gen.name; i++)
 	{
 		struct config_string *conf = &ConfigureNamesString[i];
 
@@ -954,7 +945,7 @@ build_guc_variables(void)
 		num_vars++;
 	}
 
-	for (i = 0; ConfigureNamesEnum[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesEnum[i].gen.name; i++)
 	{
 		struct config_enum *conf = &ConfigureNamesEnum[i];
 
@@ -977,7 +968,7 @@ build_guc_variables(void)
 							  &hash_ctl,
 							  HASH_ELEM | HASH_FUNCTION | HASH_COMPARE | HASH_CONTEXT);
 
-	for (i = 0; ConfigureNamesBool[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesBool[i].gen.name; i++)
 	{
 		struct config_generic *gucvar = &ConfigureNamesBool[i].gen;
 
@@ -989,7 +980,7 @@ build_guc_variables(void)
 		hentry->gucvar = gucvar;
 	}
 
-	for (i = 0; ConfigureNamesInt[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesInt[i].gen.name; i++)
 	{
 		struct config_generic *gucvar = &ConfigureNamesInt[i].gen;
 
@@ -1001,7 +992,7 @@ build_guc_variables(void)
 		hentry->gucvar = gucvar;
 	}
 
-	for (i = 0; ConfigureNamesReal[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesReal[i].gen.name; i++)
 	{
 		struct config_generic *gucvar = &ConfigureNamesReal[i].gen;
 
@@ -1013,7 +1004,7 @@ build_guc_variables(void)
 		hentry->gucvar = gucvar;
 	}
 
-	for (i = 0; ConfigureNamesString[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesString[i].gen.name; i++)
 	{
 		struct config_generic *gucvar = &ConfigureNamesString[i].gen;
 
@@ -1025,7 +1016,7 @@ build_guc_variables(void)
 		hentry->gucvar = gucvar;
 	}
 
-	for (i = 0; ConfigureNamesEnum[i].gen.name; i++)
+	for (int i = 0; ConfigureNamesEnum[i].gen.name; i++)
 	{
 		struct config_generic *gucvar = &ConfigureNamesEnum[i].gen;
 
@@ -1237,7 +1228,6 @@ find_option(const char *name, bool create_placeholders, bool skip_errors,
 			int elevel)
 {
 	GUCHashEntry *hentry;
-	int			i;
 
 	Assert(name);
 
@@ -1254,7 +1244,7 @@ find_option(const char *name, bool create_placeholders, bool skip_errors,
 	 * set of supported old names is short enough that a brute-force search is
 	 * the best way.
 	 */
-	for (i = 0; map_old_guc_names[i] != NULL; i += 2)
+	for (int i = 0; map_old_guc_names[i] != NULL; i += 2)
 	{
 		if (guc_name_compare(name, map_old_guc_names[i]) == 0)
 			return find_option(map_old_guc_names[i + 1], false,
@@ -2679,7 +2669,6 @@ convert_to_base_unit(double value, const char *unit,
 	char		unitstr[MAX_UNIT_LEN + 1];
 	int			unitlen;
 	const unit_conversion *table;
-	int			i;
 
 	/* extract unit string to compare to table entries */
 	unitlen = 0;
@@ -2699,7 +2688,7 @@ convert_to_base_unit(double value, const char *unit,
 	else
 		table = time_unit_conversion_table;
 
-	for (i = 0; *table[i].unit; i++)
+	for (int i = 0; *table[i].unit; i++)
 	{
 		if (base_unit == table[i].base_unit &&
 			strcmp(unitstr, table[i].unit) == 0)
@@ -2735,7 +2724,6 @@ convert_int_from_base_unit(int64 base_value, int base_unit,
 						   int64 *value, const char **unit)
 {
 	const unit_conversion *table;
-	int			i;
 
 	*unit = NULL;
 
@@ -2744,7 +2732,7 @@ convert_int_from_base_unit(int64 base_value, int base_unit,
 	else
 		table = time_unit_conversion_table;
 
-	for (i = 0; *table[i].unit; i++)
+	for (int i = 0; *table[i].unit; i++)
 	{
 		if (base_unit == table[i].base_unit)
 		{
@@ -2777,7 +2765,6 @@ convert_real_from_base_unit(double base_value, int base_unit,
 							double *value, const char **unit)
 {
 	const unit_conversion *table;
-	int			i;
 
 	*unit = NULL;
 
@@ -2786,7 +2773,7 @@ convert_real_from_base_unit(double base_value, int base_unit,
 	else
 		table = time_unit_conversion_table;
 
-	for (i = 0; *table[i].unit; i++)
+	for (int i = 0; *table[i].unit; i++)
 	{
 		if (base_unit == table[i].base_unit)
 		{
@@ -3027,9 +3014,7 @@ parse_real(const char *value, double *result, int flags, const char **hintmsg)
 const char *
 config_enum_lookup_by_value(struct config_enum *record, int val)
 {
-	const struct config_enum_entry *entry;
-
-	for (entry = record->options; entry && entry->name; entry++)
+	for (const struct config_enum_entry *entry = record->options; entry && entry->name; entry++)
 	{
 		if (entry->val == val)
 			return entry->name;
@@ -3051,9 +3036,7 @@ bool
 config_enum_lookup_by_name(struct config_enum *record, const char *value,
 						   int *retval)
 {
-	const struct config_enum_entry *entry;
-
-	for (entry = record->options; entry && entry->name; entry++)
+	for (const struct config_enum_entry *entry = record->options; entry && entry->name; entry++)
 	{
 		if (pg_strcasecmp(value, entry->name) == 0)
 		{
@@ -3077,7 +3060,6 @@ char *
 config_enum_get_options(struct config_enum *record, const char *prefix,
 						const char *suffix, const char *separator)
 {
-	const struct config_enum_entry *entry;
 	StringInfoData retstr;
 	int			seplen;
 
@@ -3085,7 +3067,7 @@ config_enum_get_options(struct config_enum *record, const char *prefix,
 	appendStringInfoString(&retstr, prefix);
 
 	seplen = strlen(separator);
-	for (entry = record->options; entry && entry->name; entry++)
+	for (const struct config_enum_entry *entry = record->options; entry && entry->name; entry++)
 	{
 		if (!entry->hidden)
 		{
@@ -3772,8 +3754,6 @@ set_config_with_handle(const char *name, config_handle *handle,
 				}
 				if (makeDefault)
 				{
-					GucStack   *stack;
-
 					if (conf->gen.reset_source <= source)
 					{
 						conf->reset_val = newval;
@@ -3783,7 +3763,7 @@ set_config_with_handle(const char *name, config_handle *handle,
 						conf->gen.reset_scontext = context;
 						conf->gen.reset_srole = srole;
 					}
-					for (stack = conf->gen.stack; stack; stack = stack->prev)
+					for (GucStack *stack = conf->gen.stack; stack; stack = stack->prev)
 					{
 						if (stack->source <= source)
 						{
@@ -3870,8 +3850,6 @@ set_config_with_handle(const char *name, config_handle *handle,
 				}
 				if (makeDefault)
 				{
-					GucStack   *stack;
-
 					if (conf->gen.reset_source <= source)
 					{
 						conf->reset_val = newval;
@@ -3881,7 +3859,7 @@ set_config_with_handle(const char *name, config_handle *handle,
 						conf->gen.reset_scontext = context;
 						conf->gen.reset_srole = srole;
 					}
-					for (stack = conf->gen.stack; stack; stack = stack->prev)
+					for (GucStack *stack = conf->gen.stack; stack; stack = stack->prev)
 					{
 						if (stack->source <= source)
 						{
@@ -3968,8 +3946,6 @@ set_config_with_handle(const char *name, config_handle *handle,
 				}
 				if (makeDefault)
 				{
-					GucStack   *stack;
-
 					if (conf->gen.reset_source <= source)
 					{
 						conf->reset_val = newval;
@@ -3979,7 +3955,7 @@ set_config_with_handle(const char *name, config_handle *handle,
 						conf->gen.reset_scontext = context;
 						conf->gen.reset_srole = srole;
 					}
-					for (stack = conf->gen.stack; stack; stack = stack->prev)
+					for (GucStack *stack = conf->gen.stack; stack; stack = stack->prev)
 					{
 						if (stack->source <= source)
 						{
@@ -4134,8 +4110,6 @@ set_config_with_handle(const char *name, config_handle *handle,
 
 				if (makeDefault)
 				{
-					GucStack   *stack;
-
 					if (conf->gen.reset_source <= source)
 					{
 						set_string_field(conf, &conf->reset_val, newval);
@@ -4145,7 +4119,7 @@ set_config_with_handle(const char *name, config_handle *handle,
 						conf->gen.reset_scontext = context;
 						conf->gen.reset_srole = srole;
 					}
-					for (stack = conf->gen.stack; stack; stack = stack->prev)
+					for (GucStack *stack = conf->gen.stack; stack; stack = stack->prev)
 					{
 						if (stack->source <= source)
 						{
@@ -4236,8 +4210,6 @@ set_config_with_handle(const char *name, config_handle *handle,
 				}
 				if (makeDefault)
 				{
-					GucStack   *stack;
-
 					if (conf->gen.reset_source <= source)
 					{
 						conf->reset_val = newval;
@@ -4247,7 +4219,7 @@ set_config_with_handle(const char *name, config_handle *handle,
 						conf->gen.reset_scontext = context;
 						conf->gen.reset_srole = srole;
 					}
-					for (stack = conf->gen.stack; stack; stack = stack->prev)
+					for (GucStack *stack = conf->gen.stack; stack; stack = stack->prev)
 					{
 						if (stack->source <= source)
 						{
@@ -4474,7 +4446,6 @@ static void
 write_auto_conf_file(int fd, const char *filename, ConfigVariable *head)
 {
 	StringInfoData buf;
-	ConfigVariable *item;
 
 	initStringInfo(&buf);
 
@@ -4494,7 +4465,7 @@ write_auto_conf_file(int fd, const char *filename, ConfigVariable *head)
 	}
 
 	/* Emit each parameter, properly quoting the value */
-	for (item = head; item != NULL; item = item->next)
+	for (ConfigVariable *item = head; item != NULL; item = item->next)
 	{
 		char	   *escaped;
 
@@ -4542,7 +4513,7 @@ static void
 replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **tail_p,
 						  const char *name, const char *value)
 {
-	ConfigVariable *item,
+	ConfigVariable *newitem,
 			   *next,
 			   *prev = NULL;
 
@@ -4551,7 +4522,7 @@ replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **tail_p,
 	 * one, but if external tools have modified the config file, there could
 	 * be more.
 	 */
-	for (item = *head_p; item != NULL; item = next)
+	for (ConfigVariable *item = *head_p; item != NULL; item = next)
 	{
 		next = item->next;
 		if (guc_name_compare(item->name, name) == 0)
@@ -4578,21 +4549,21 @@ replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **tail_p,
 		return;
 
 	/* OK, append a new entry */
-	item = palloc(sizeof *item);
-	item->name = pstrdup(name);
-	item->value = pstrdup(value);
-	item->errmsg = NULL;
-	item->filename = pstrdup("");	/* new item has no location */
-	item->sourceline = 0;
-	item->ignore = false;
-	item->applied = false;
-	item->next = NULL;
+	newitem = palloc_object(ConfigVariable);
+	newitem->name = pstrdup(name);
+	newitem->value = pstrdup(value);
+	newitem->errmsg = NULL;
+	newitem->filename = pstrdup("");	/* new item has no location */
+	newitem->sourceline = 0;
+	newitem->ignore = false;
+	newitem->applied = false;
+	newitem->next = NULL;
 
 	if (*head_p == NULL)
-		*head_p = item;
+		*head_p = newitem;
 	else
-		(*tail_p)->next = item;
-	*tail_p = item;
+		(*tail_p)->next = newitem;
+	*tail_p = newitem;
 }
 
 
@@ -6384,7 +6355,6 @@ void
 ParseLongOption(const char *string, char **name, char **value)
 {
 	size_t		equal_pos;
-	char	   *cp;
 
 	Assert(string);
 	Assert(name);
@@ -6406,7 +6376,7 @@ ParseLongOption(const char *string, char **name, char **value)
 		*value = NULL;
 	}
 
-	for (cp = *name; *cp; cp++)
+	for (char *cp = *name; *cp; cp++)
 		if (*cp == '-')
 			*cp = '_';
 }
@@ -6420,8 +6390,6 @@ ParseLongOption(const char *string, char **name, char **value)
 void
 TransformGUCArray(ArrayType *array, List **names, List **values)
 {
-	int			i;
-
 	Assert(array != NULL);
 	Assert(ARR_ELEMTYPE(array) == TEXTOID);
 	Assert(ARR_NDIM(array) == 1);
@@ -6429,7 +6397,7 @@ TransformGUCArray(ArrayType *array, List **names, List **values)
 
 	*names = NIL;
 	*values = NIL;
-	for (i = 1; i <= ARR_DIMS(array)[0]; i++)
+	for (int i = 1; i <= ARR_DIMS(array)[0]; i++)
 	{
 		Datum		d;
 		bool		isnull;
@@ -6533,7 +6501,6 @@ GUCArrayAdd(ArrayType *array, const char *name, const char *value)
 	{
 		int			index;
 		bool		isnull;
-		int			i;
 
 		Assert(ARR_ELEMTYPE(array) == TEXTOID);
 		Assert(ARR_NDIM(array) == 1);
@@ -6541,7 +6508,7 @@ GUCArrayAdd(ArrayType *array, const char *name, const char *value)
 
 		index = ARR_DIMS(array)[0] + 1; /* add after end */
 
-		for (i = 1; i <= ARR_DIMS(array)[0]; i++)
+		for (int i = 1; i <= ARR_DIMS(array)[0]; i++)
 		{
 			Datum		d;
 			char	   *current;
@@ -6589,7 +6556,6 @@ GUCArrayDelete(ArrayType *array, const char *name)
 {
 	struct config_generic *record;
 	ArrayType  *newarray;
-	int			i;
 	int			index;
 
 	Assert(name);
@@ -6609,7 +6575,7 @@ GUCArrayDelete(ArrayType *array, const char *name)
 	newarray = NULL;
 	index = 1;
 
-	for (i = 1; i <= ARR_DIMS(array)[0]; i++)
+	for (int i = 1; i <= ARR_DIMS(array)[0]; i++)
 	{
 		Datum		d;
 		char	   *val;
@@ -6658,7 +6624,6 @@ ArrayType *
 GUCArrayReset(ArrayType *array)
 {
 	ArrayType  *newarray;
-	int			i;
 	int			index;
 
 	/* if array is currently null, nothing to do */
@@ -6672,7 +6637,7 @@ GUCArrayReset(ArrayType *array)
 	newarray = NULL;
 	index = 1;
 
-	for (i = 1; i <= ARR_DIMS(array)[0]; i++)
+	for (int i = 1; i <= ARR_DIMS(array)[0]; i++)
 	{
 		Datum		d;
 		char	   *val;
diff --git a/src/backend/utils/misc/guc_funcs.c b/src/backend/utils/misc/guc_funcs.c
index b9e26982abd..f712a5971cf 100644
--- a/src/backend/utils/misc/guc_funcs.c
+++ b/src/backend/utils/misc/guc_funcs.c
@@ -986,7 +986,6 @@ show_all_file_settings(PG_FUNCTION_ARGS)
 #define NUM_PG_FILE_SETTINGS_ATTS 7
 	ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
 	ConfigVariable *conf;
-	int			seqno;
 
 	/* Scan the config files using current context as workspace */
 	conf = ProcessConfigFileInternal(PGC_SIGHUP, false, DEBUG3);
@@ -995,7 +994,7 @@ show_all_file_settings(PG_FUNCTION_ARGS)
 	InitMaterializedSRF(fcinfo, 0);
 
 	/* Process the results and create a tuplestore */
-	for (seqno = 1; conf != NULL; conf = conf->next, seqno++)
+	for (int seqno = 1; conf != NULL; conf = conf->next, seqno++)
 	{
 		Datum		values[NUM_PG_FILE_SETTINGS_ATTS];
 		bool		nulls[NUM_PG_FILE_SETTINGS_ATTS];
diff --git a/src/backend/utils/misc/help_config.c b/src/backend/utils/misc/help_config.c
index 55c36ddf051..86812ac881f 100644
--- a/src/backend/utils/misc/help_config.c
+++ b/src/backend/utils/misc/help_config.c
@@ -46,15 +46,14 @@ void
 GucInfoMain(void)
 {
 	struct config_generic **guc_vars;
-	int			numOpts,
-				i;
+	int			numOpts;
 
 	/* Initialize the GUC hash table */
 	build_guc_variables();
 
 	guc_vars = get_guc_variables(&numOpts);
 
-	for (i = 0; i < numOpts; i++)
+	for (int i = 0; i < numOpts; i++)
 	{
 		mixedStruct *var = (mixedStruct *) guc_vars[i];
 

base-commit: b292256272623d1a7532f3893a4565d1944742b4
-- 
2.51.0