LCOV - code coverage report
Current view: top level - sql/server - rel_file_loader.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 28 71.4 %
Date: 2024-04-25 20:03:45 Functions: 3 4 75.0 %

          Line data    Source code
       1             : /*
       2             :  * SPDX-License-Identifier: MPL-2.0
       3             :  *
       4             :  * This Source Code Form is subject to the terms of the Mozilla Public
       5             :  * License, v. 2.0.  If a copy of the MPL was not distributed with this
       6             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       7             :  *
       8             :  * Copyright 2024 MonetDB Foundation;
       9             :  * Copyright August 2008 - 2023 MonetDB B.V.;
      10             :  * Copyright 1997 - July 2008 CWI.
      11             :  */
      12             : 
      13             : #include "monetdb_config.h"
      14             : #include "rel_file_loader.h"
      15             : 
      16             : #define NR_FILE_LOADERS 255
      17             : static file_loader_t file_loaders[NR_FILE_LOADERS] = { 0 };
      18             : 
      19             : void
      20           0 : fl_exit(void)
      21             : {
      22           0 :         for (int i = 0; i < NR_FILE_LOADERS; i++) {
      23           0 :                 if (file_loaders[i].name)
      24           0 :                         GDKfree(file_loaders[i].name);
      25             :         }
      26           0 : }
      27             : 
      28             : void
      29         969 : fl_unregister(char *name)
      30             : {
      31         969 :         file_loader_t *fl = fl_find(name);
      32         969 :         if (fl) {
      33         969 :                 GDKfree(fl->name);
      34         969 :                 fl->name = NULL;
      35             :         }
      36         969 : }
      37             : 
      38             : int
      39         972 : fl_register(char *name, fl_add_types_fptr add_types, fl_load_fptr load)
      40             : {
      41         972 :         file_loader_t *fl = fl_find(name);
      42         972 :         if (fl) {
      43           0 :                 printf("re-registering %s\n", name);
      44           0 :                 GDKfree(fl->name);
      45           0 :                 fl->name = NULL;
      46             :         }
      47             : 
      48        1944 :         for (int i = 0; i < NR_FILE_LOADERS; i++) {
      49        1944 :                 if (file_loaders[i].name == NULL) {
      50         972 :                         file_loaders[i].name = GDKstrdup(name);
      51         972 :                         file_loaders[i].add_types = add_types;
      52         972 :                         file_loaders[i].load = load;
      53         972 :                         return 0;
      54             :                 }
      55             :         }
      56             : 
      57             :         /* all file_loaders array locations are occupied */
      58             :         return -1;      /* could not register file_loader */
      59             : }
      60             : 
      61             : file_loader_t*
      62        1979 : fl_find(char *name)
      63             : {
      64        1979 :         if (!name)
      65             :                 return NULL;
      66      253364 :         for (int i = 0; i < NR_FILE_LOADERS; i++) {
      67      252382 :                 if (file_loaders[i].name && strcmp(file_loaders[i].name, name) == 0)
      68         997 :                         return file_loaders+i;
      69             :         }
      70             :         return NULL;
      71             : }

Generated by: LCOV version 1.14