From: Art Cancro Date: Tue, 16 Apr 2024 19:20:35 +0000 (-0700) Subject: more noodling on backend detection X-Git-Tag: v1000~31 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=74104e1f70c837bfeec6e957ce7f84a4f969a0ed more noodling on backend detection --- diff --git a/citadel/server/backends/berkeley_db/berkeley_db.h b/citadel/server/backends/berkeley_db/berkeley_db.h index 651376a01..188b1ecae 100644 --- a/citadel/server/backends/berkeley_db/berkeley_db.h +++ b/citadel/server/backends/berkeley_db/berkeley_db.h @@ -1,6 +1,7 @@ -// Copyright (c) 1987-2023 by the citadel.org team +// Copyright (c) 1987-2024 by the citadel.org team // -// This program is open source software. Use, duplication, or disclosure -// is subject to the terms of the GNU General Public License, version 3. +// This program is open source software. Use, duplication, or disclosure is subject to the GNU General Public License version 3. + +#define THIS_BUILD_CONTAINS_BDB void bdb_init_backend(void); diff --git a/citadel/server/backends/common/database.c b/citadel/server/backends/common/database.c index a07dd22e6..0b8276b07 100644 --- a/citadel/server/backends/common/database.c +++ b/citadel/server/backends/common/database.c @@ -43,8 +43,11 @@ void (*cdb_tick)(void) = NULL; // This function is responsible for choosing and initializing a back end. void cdb_init_backends(void) { + char *chosen_backend = NULL; + cdb_chmod_data(); // Set file level permissions so we can actually access the data files +#ifdef THIS_BUILD_CONTAINS_BDB // Test for Berkeley DB (this does nothing yet -- we're preparing to test for multiple back ends in the future) int fd = open(ctdl_db_dir"/cdb.00", O_RDONLY); if (fd) { @@ -54,11 +57,23 @@ void cdb_init_backends(void) { read(fd, &magic, sizeof(magic)); if (magic == 0x00053162) { syslog(LOG_DEBUG, "db: found existing Citadel database in Berkeley DB format"); + if (!chosen_backend) { + chosen_backend = "bdb"; + } } close(fd); } +#endif - bdb_init_backend(); // for now, this is the only one, so we select it always. + // If no existing database has been detected, go with Berkeley DB. + if (!chosen_backend) { + chosen_backend = "bdb"; + } + + // Initialize the chosen backend. + if (!strcmp(chosen_backend, "bdb")) { + bdb_init_backend(); + } }