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 942 : fl_unregister(char *name) 30 : { 31 942 : file_loader_t *fl = fl_find(name); 32 942 : if (fl) { 33 942 : GDKfree(fl->name); 34 942 : fl->name = NULL; 35 : } 36 942 : } 37 : 38 : int 39 945 : fl_register(char *name, fl_add_types_fptr add_types, fl_load_fptr load) 40 : { 41 945 : file_loader_t *fl = fl_find(name); 42 945 : if (fl) { 43 0 : TRC_WARNING(SQL_TRANS,"file_loader re-registering %s\n", name); 44 0 : GDKfree(fl->name); 45 0 : fl->name = NULL; 46 : } 47 : 48 1890 : for (int i = 0; i < NR_FILE_LOADERS; i++) { 49 1890 : if (file_loaders[i].name == NULL) { 50 945 : file_loaders[i].name = GDKstrdup(name); 51 945 : file_loaders[i].add_types = add_types; 52 945 : file_loaders[i].load = load; 53 945 : 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 1937 : fl_find(char *name) 63 : { 64 1937 : if (!name) 65 : return NULL; 66 246410 : for (int i = 0; i < NR_FILE_LOADERS; i++) { 67 245455 : if (file_loaders[i].name && strcmp(file_loaders[i].name, name) == 0) 68 982 : return file_loaders+i; 69 : } 70 : return NULL; 71 : }