LCOV - code coverage report
Current view: top level - src/fe_utils - simple_list.c (source / functions) Coverage Total Hit
Test: Code coverage Lines: 0.0 % 87 0
Test Date: 2026-01-26 10:56:24 Functions: 0.0 % 9 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /*-------------------------------------------------------------------------
       2              :  *
       3              :  * Simple list facilities for frontend code
       4              :  *
       5              :  * Data structures for simple lists of OIDs and strings.  The support for
       6              :  * these is very primitive compared to the backend's List facilities, but
       7              :  * it's all we need in, eg, pg_dump.
       8              :  *
       9              :  *
      10              :  * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
      11              :  * Portions Copyright (c) 1994, Regents of the University of California
      12              :  *
      13              :  * src/fe_utils/simple_list.c
      14              :  *
      15              :  *-------------------------------------------------------------------------
      16              :  */
      17              : #include "postgres_fe.h"
      18              : 
      19              : #include "fe_utils/simple_list.h"
      20              : 
      21              : 
      22              : /*
      23              :  * Append an OID to the list.
      24              :  */
      25              : void
      26            0 : simple_oid_list_append(SimpleOidList *list, Oid val)
      27              : {
      28            0 :         SimpleOidListCell *cell;
      29              : 
      30            0 :         cell = (SimpleOidListCell *) pg_malloc(sizeof(SimpleOidListCell));
      31            0 :         cell->next = NULL;
      32            0 :         cell->val = val;
      33              : 
      34            0 :         if (list->tail)
      35            0 :                 list->tail->next = cell;
      36              :         else
      37            0 :                 list->head = cell;
      38            0 :         list->tail = cell;
      39            0 : }
      40              : 
      41              : /*
      42              :  * Is OID present in the list?
      43              :  */
      44              : bool
      45            0 : simple_oid_list_member(SimpleOidList *list, Oid val)
      46              : {
      47            0 :         SimpleOidListCell *cell;
      48              : 
      49            0 :         for (cell = list->head; cell; cell = cell->next)
      50              :         {
      51            0 :                 if (cell->val == val)
      52            0 :                         return true;
      53            0 :         }
      54            0 :         return false;
      55            0 : }
      56              : 
      57              : /*
      58              :  * Append a string to the list.
      59              :  *
      60              :  * The given string is copied, so it need not survive past the call.
      61              :  */
      62              : void
      63            0 : simple_string_list_append(SimpleStringList *list, const char *val)
      64              : {
      65            0 :         SimpleStringListCell *cell;
      66              : 
      67            0 :         cell = (SimpleStringListCell *)
      68            0 :                 pg_malloc(offsetof(SimpleStringListCell, val) + strlen(val) + 1);
      69              : 
      70            0 :         cell->next = NULL;
      71            0 :         cell->touched = false;
      72            0 :         strcpy(cell->val, val);
      73              : 
      74            0 :         if (list->tail)
      75            0 :                 list->tail->next = cell;
      76              :         else
      77            0 :                 list->head = cell;
      78            0 :         list->tail = cell;
      79            0 : }
      80              : 
      81              : /*
      82              :  * Is string present in the list?
      83              :  *
      84              :  * If found, the "touched" field of the first match is set true.
      85              :  */
      86              : bool
      87            0 : simple_string_list_member(SimpleStringList *list, const char *val)
      88              : {
      89            0 :         SimpleStringListCell *cell;
      90              : 
      91            0 :         for (cell = list->head; cell; cell = cell->next)
      92              :         {
      93            0 :                 if (strcmp(cell->val, val) == 0)
      94              :                 {
      95            0 :                         cell->touched = true;
      96            0 :                         return true;
      97              :                 }
      98            0 :         }
      99            0 :         return false;
     100            0 : }
     101              : 
     102              : /*
     103              :  * Destroy an OID list
     104              :  */
     105              : void
     106            0 : simple_oid_list_destroy(SimpleOidList *list)
     107              : {
     108            0 :         SimpleOidListCell *cell;
     109              : 
     110            0 :         cell = list->head;
     111            0 :         while (cell != NULL)
     112              :         {
     113            0 :                 SimpleOidListCell *next;
     114              : 
     115            0 :                 next = cell->next;
     116            0 :                 pg_free(cell);
     117            0 :                 cell = next;
     118            0 :         }
     119            0 : }
     120              : 
     121              : /*
     122              :  * Destroy a string list
     123              :  */
     124              : void
     125            0 : simple_string_list_destroy(SimpleStringList *list)
     126              : {
     127            0 :         SimpleStringListCell *cell;
     128              : 
     129            0 :         cell = list->head;
     130            0 :         while (cell != NULL)
     131              :         {
     132            0 :                 SimpleStringListCell *next;
     133              : 
     134            0 :                 next = cell->next;
     135            0 :                 pg_free(cell);
     136            0 :                 cell = next;
     137            0 :         }
     138            0 : }
     139              : 
     140              : /*
     141              :  * Find first not-touched list entry, if there is one.
     142              :  */
     143              : const char *
     144            0 : simple_string_list_not_touched(SimpleStringList *list)
     145              : {
     146            0 :         SimpleStringListCell *cell;
     147              : 
     148            0 :         for (cell = list->head; cell; cell = cell->next)
     149              :         {
     150            0 :                 if (!cell->touched)
     151            0 :                         return cell->val;
     152            0 :         }
     153            0 :         return NULL;
     154            0 : }
     155              : 
     156              : /*
     157              :  * Append a pointer to the list.
     158              :  *
     159              :  * Caller must ensure that the pointer remains valid.
     160              :  */
     161              : void
     162            0 : simple_ptr_list_append(SimplePtrList *list, void *ptr)
     163              : {
     164            0 :         SimplePtrListCell *cell;
     165              : 
     166            0 :         cell = (SimplePtrListCell *) pg_malloc(sizeof(SimplePtrListCell));
     167            0 :         cell->next = NULL;
     168            0 :         cell->ptr = ptr;
     169              : 
     170            0 :         if (list->tail)
     171            0 :                 list->tail->next = cell;
     172              :         else
     173            0 :                 list->head = cell;
     174            0 :         list->tail = cell;
     175            0 : }
     176              : 
     177              : /*
     178              :  * Destroy only pointer list and not the pointed-to element
     179              :  */
     180              : void
     181            0 : simple_ptr_list_destroy(SimplePtrList *list)
     182              : {
     183            0 :         SimplePtrListCell *cell;
     184              : 
     185            0 :         cell = list->head;
     186            0 :         while (cell != NULL)
     187              :         {
     188            0 :                 SimplePtrListCell *next;
     189              : 
     190            0 :                 next = cell->next;
     191            0 :                 pg_free(cell);
     192            0 :                 cell = next;
     193            0 :         }
     194            0 : }
        

Generated by: LCOV version 2.3.2-1