Just refactoring, no effect.
---
server/Makefile.am | 1 +
server/backend.c | 40 +------------------
server/debug-flags.c | 95 ++++++++++++++++++++++++++++++++++++++++++++
server/internal.h | 4 ++
server/main.c | 14 +------
5 files changed, 103 insertions(+), 51 deletions(-)
diff --git a/server/Makefile.am b/server/Makefile.am
index 24a66c8..465d5aa 100644
--- a/server/Makefile.am
+++ b/server/Makefile.am
@@ -42,6 +42,7 @@ nbdkit_SOURCES = \
connections.c \
crypto.c \
debug.c \
+ debug-flags.c \
extents.c \
filters.c \
internal.h \
diff --git a/server/backend.c b/server/backend.c
index 23a99f7..b9fe2a2 100644
--- a/server/backend.c
+++ b/server/backend.c
@@ -46,42 +46,6 @@
/* Helpers for registering a new backend. */
-/* Set all debug flags which apply to this backend. */
-static void
-set_debug_flags (void *dl, const char *name)
-{
- struct debug_flag *flag;
-
- for (flag = debug_flags; flag != NULL; flag = flag->next) {
- if (!flag->used && strcmp (name, flag->name) == 0) {
- CLEANUP_FREE char *var = NULL;
- int *sym;
-
- /* Synthesize the name of the variable. */
- if (asprintf (&var, "%s_debug_%s", name, flag->flag) == -1) {
- perror ("asprintf");
- exit (EXIT_FAILURE);
- }
-
- /* Find the symbol. */
- sym = dlsym (dl, var);
- if (sym == NULL) {
- fprintf (stderr,
- "%s: -D %s.%s: %s does not contain a "
- "global variable called %s\n",
- program_name, name, flag->flag, name, var);
- exit (EXIT_FAILURE);
- }
-
- /* Set the flag. */
- *sym = flag->value;
-
- /* Mark this flag as used. */
- flag->used = true;
- }
- }
-}
-
void
backend_init (struct backend *b, struct backend *next, size_t index,
const char *filename, void *dl, const char *type)
@@ -140,8 +104,8 @@ backend_load (struct backend *b, const char *name, void (*load)
(void))
debug ("registered %s %s (name %s)", b->type, b->filename,
b->name);
- /* Set debug flags before calling load. */
- set_debug_flags (b->dl, name);
+ /* Apply debug flags before calling load. */
+ apply_debug_flags (b->dl, name);
/* Call the on-load callback if it exists. */
debug ("%s: load", name);
diff --git a/server/debug-flags.c b/server/debug-flags.c
new file mode 100644
index 0000000..c73e1b9
--- /dev/null
+++ b/server/debug-flags.c
@@ -0,0 +1,95 @@
+/* nbdkit
+ * Copyright (C) 2013-2019 Red Hat Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Red Hat nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <dlfcn.h>
+
+#include "internal.h"
+
+/* Apply all debug flags applicable to this backend. */
+void
+apply_debug_flags (void *dl, const char *name)
+{
+ struct debug_flag *flag;
+
+ for (flag = debug_flags; flag != NULL; flag = flag->next) {
+ if (!flag->used && strcmp (name, flag->name) == 0) {
+ CLEANUP_FREE char *var = NULL;
+ int *sym;
+
+ /* Synthesize the name of the variable. */
+ if (asprintf (&var, "%s_debug_%s", name, flag->flag) == -1) {
+ perror ("asprintf");
+ exit (EXIT_FAILURE);
+ }
+
+ /* Find the symbol. */
+ sym = dlsym (dl, var);
+ if (sym == NULL) {
+ fprintf (stderr,
+ "%s: -D %s.%s: %s does not contain a "
+ "global variable called %s\n",
+ program_name, name, flag->flag, name, var);
+ exit (EXIT_FAILURE);
+ }
+
+ /* Set the flag. */
+ *sym = flag->value;
+
+ /* Mark this flag as used. */
+ flag->used = true;
+ }
+ }
+}
+
+void
+free_debug_flags (void)
+{
+ while (debug_flags != NULL) {
+ struct debug_flag *next = debug_flags->next;
+
+ if (!debug_flags->used) {
+ fprintf (stderr, "%s: warning: debug flag -D %s.%s was not used\n",
+ program_name, debug_flags->name, debug_flags->flag);
+ exit (EXIT_FAILURE);
+ }
+ free (debug_flags->name);
+ free (debug_flags->flag);
+ free (debug_flags);
+ debug_flags = next;
+ }
+}
diff --git a/server/internal.h b/server/internal.h
index 95f24c5..c4d1344 100644
--- a/server/internal.h
+++ b/server/internal.h
@@ -287,6 +287,10 @@ extern int crypto_negotiate_tls (struct connection *conn,
nbdkit_debug ((fs), ##__VA_ARGS__); \
} while (0)
+/* debug-flags.c */
+extern void apply_debug_flags (void *dl, const char *name);
+extern void free_debug_flags (void);
+
/* log-*.c */
#if !HAVE_VFPRINTF_PERCENT_M
#include <stdio.h>
diff --git a/server/main.c b/server/main.c
index 8cc7a89..486ff35 100644
--- a/server/main.c
+++ b/server/main.c
@@ -614,19 +614,7 @@ main (int argc, char *argv[])
}
/* Check all debug flags were used, and free them. */
- while (debug_flags != NULL) {
- struct debug_flag *next = debug_flags->next;
-
- if (!debug_flags->used) {
- fprintf (stderr, "%s: debug flag -D %s.%s was not used\n",
- program_name, debug_flags->name, debug_flags->flag);
- exit (EXIT_FAILURE);
- }
- free (debug_flags->name);
- free (debug_flags->flag);
- free (debug_flags);
- debug_flags = next;
- }
+ free_debug_flags ();
if (help) {
struct backend *b;
--
2.23.0