mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Create src/fe_utils/, and move stuff into there from pg_dump's dumputils.
Per discussion, we want to create a static library and put the stuff into it that until now has been shared across src/bin/ directories by ad-hoc methods like symlinking a source file. This commit creates the library and populates it with a couple of files that contain the widely-useful portions of pg_dump's dumputils.c file. dumputils.c survives, because it has some stuff that didn't seem appropriate for fe_utils, but it's significantly smaller and is no longer referenced from any other directory. Follow-on patches will move more stuff into fe_utils. The Mkvcbuild.pm hacking here is just a best guess; we'll see how the buildfarm likes it.
This commit is contained in:
116
src/fe_utils/simple_list.c
Normal file
116
src/fe_utils/simple_list.c
Normal file
@@ -0,0 +1,116 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Simple list facilities for frontend code
|
||||
*
|
||||
* Data structures for simple lists of OIDs and strings. The support for
|
||||
* these is very primitive compared to the backend's List facilities, but
|
||||
* it's all we need in, eg, pg_dump.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* src/fe_utils/simple_list.c
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres_fe.h"
|
||||
|
||||
#include "fe_utils/simple_list.h"
|
||||
|
||||
|
||||
/*
|
||||
* Append an OID to the list.
|
||||
*/
|
||||
void
|
||||
simple_oid_list_append(SimpleOidList *list, Oid val)
|
||||
{
|
||||
SimpleOidListCell *cell;
|
||||
|
||||
cell = (SimpleOidListCell *) pg_malloc(sizeof(SimpleOidListCell));
|
||||
cell->next = NULL;
|
||||
cell->val = val;
|
||||
|
||||
if (list->tail)
|
||||
list->tail->next = cell;
|
||||
else
|
||||
list->head = cell;
|
||||
list->tail = cell;
|
||||
}
|
||||
|
||||
/*
|
||||
* Is OID present in the list?
|
||||
*/
|
||||
bool
|
||||
simple_oid_list_member(SimpleOidList *list, Oid val)
|
||||
{
|
||||
SimpleOidListCell *cell;
|
||||
|
||||
for (cell = list->head; cell; cell = cell->next)
|
||||
{
|
||||
if (cell->val == val)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Append a string to the list.
|
||||
*
|
||||
* The given string is copied, so it need not survive past the call.
|
||||
*/
|
||||
void
|
||||
simple_string_list_append(SimpleStringList *list, const char *val)
|
||||
{
|
||||
SimpleStringListCell *cell;
|
||||
|
||||
cell = (SimpleStringListCell *)
|
||||
pg_malloc(offsetof(SimpleStringListCell, val) +strlen(val) + 1);
|
||||
|
||||
cell->next = NULL;
|
||||
cell->touched = false;
|
||||
strcpy(cell->val, val);
|
||||
|
||||
if (list->tail)
|
||||
list->tail->next = cell;
|
||||
else
|
||||
list->head = cell;
|
||||
list->tail = cell;
|
||||
}
|
||||
|
||||
/*
|
||||
* Is string present in the list?
|
||||
*
|
||||
* If found, the "touched" field of the first match is set true.
|
||||
*/
|
||||
bool
|
||||
simple_string_list_member(SimpleStringList *list, const char *val)
|
||||
{
|
||||
SimpleStringListCell *cell;
|
||||
|
||||
for (cell = list->head; cell; cell = cell->next)
|
||||
{
|
||||
if (strcmp(cell->val, val) == 0)
|
||||
{
|
||||
cell->touched = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find first not-touched list entry, if there is one.
|
||||
*/
|
||||
const char *
|
||||
simple_string_list_not_touched(SimpleStringList *list)
|
||||
{
|
||||
SimpleStringListCell *cell;
|
||||
|
||||
for (cell = list->head; cell; cell = cell->next)
|
||||
{
|
||||
if (!cell->touched)
|
||||
return cell->val;
|
||||
}
|
||||
return NULL;
|
||||
}
|
Reference in New Issue
Block a user