From a1701016ca6647df22847fb87b369d94bd60ece9 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Fri, 28 Mar 2025 18:10:24 -0400 Subject: [PATCH 2/4] add new list type simple_oid_string_list to fe-utils/simple_list --- src/fe_utils/simple_list.c | 41 ++++++++++++++++++++++++++++++ src/include/fe_utils/simple_list.h | 16 ++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/fe_utils/simple_list.c b/src/fe_utils/simple_list.c index 483d5455594..bbcc4ef618d 100644 --- a/src/fe_utils/simple_list.c +++ b/src/fe_utils/simple_list.c @@ -192,3 +192,44 @@ simple_ptr_list_destroy(SimplePtrList *list) cell = next; } } + +/* + * Add to an oid_string list + */ +void +simple_oid_string_list_append(SimpleOidStringList * list, Oid oid, const char *str) +{ + SimpleOidStringListCell *cell; + + cell = (SimpleOidStringListCell *) + pg_malloc(offsetof(SimpleOidStringListCell, str) + strlen(str) + 1); + + cell->next = NULL; + cell->oid = oid; + strcpy(cell->str, str); + + if (list->tail) + list->tail->next = cell; + else + list->head = cell; + list->tail = cell; +} + +/* + * Destroy an oid_string list + */ +void +simple_oid_string_list_destroy(SimpleOidStringList * list) +{ + SimpleOidStringListCell *cell; + + cell = list->head; + while (cell != NULL) + { + SimpleOidStringListCell *next; + + next = cell->next; + pg_free(cell); + cell = next; + } +} diff --git a/src/include/fe_utils/simple_list.h b/src/include/fe_utils/simple_list.h index 3b8e38414ec..af61545d7ff 100644 --- a/src/include/fe_utils/simple_list.h +++ b/src/include/fe_utils/simple_list.h @@ -55,6 +55,19 @@ typedef struct SimplePtrList SimplePtrListCell *tail; } SimplePtrList; +typedef struct SimpleOidStringListCell +{ + struct SimpleOidStringListCell *next; + Oid oid; + char str[FLEXIBLE_ARRAY_MEMBER]; /* null-terminated string here */ +} SimpleOidStringListCell; + +typedef struct SimpleOidStringList +{ + SimpleOidStringListCell *head; + SimpleOidStringListCell *tail; +} SimpleOidStringList; + extern void simple_oid_list_append(SimpleOidList *list, Oid val); extern bool simple_oid_list_member(SimpleOidList *list, Oid val); extern void simple_oid_list_destroy(SimpleOidList *list); @@ -68,4 +81,7 @@ extern const char *simple_string_list_not_touched(SimpleStringList *list); extern void simple_ptr_list_append(SimplePtrList *list, void *ptr); extern void simple_ptr_list_destroy(SimplePtrList *list); +extern void simple_oid_string_list_append(SimpleOidStringList * list, Oid oid, const char *str); +extern void simple_oid_string_list_destroy(SimpleOidStringList * list); + #endif /* SIMPLE_LIST_H */ -- 2.39.3