[Libguestfs] [PATCH nbdkit 1/7] server: Move code for handling debug flags into a separate file.

Richard W.M. Jones rjones at redhat.com
Thu Dec 12 12:02:06 UTC 2019


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




More information about the Libguestfs mailing list