[Libguestfs] [PATCH 2/3] Split internal stuff out of guestfs.h

Pino Toscano ptoscano at redhat.com
Tue Nov 8 13:30:19 UTC 2016


Create a new guestfs-private.h header, and move there the definitions of
all the actions with visibility VInternal, and all the private structs:
they are not meant to be used, not even seen, outside of the library.

Include the new header where needed, which means also a couple of places
outside the library (but they are tests, so it is acceptable for now).

The result of this is mostly motion of function and structs
declarations.
---
 .gitignore                                      |  1 +
 generator/c.ml                                  | 52 +++++++++++++++++++++----
 generator/c.mli                                 |  1 +
 generator/main.ml                               |  1 +
 generator/tests_c_api.ml                        |  1 +
 src/available.c                                 |  1 +
 src/drives.c                                    |  1 +
 src/file.c                                      |  1 +
 src/handle.c                                    |  1 +
 src/inspect-fs.c                                |  1 +
 src/journal.c                                   |  1 +
 src/mountable.c                                 |  1 +
 src/tsk.c                                       |  1 +
 tests/mountable/test-internal-parse-mountable.c |  1 +
 tests/regressions/rhbz914931.c                  |  1 +
 15 files changed, 58 insertions(+), 8 deletions(-)

diff --git a/.gitignore b/.gitignore
index 633b39d..8235f77 100644
--- a/.gitignore
+++ b/.gitignore
@@ -505,6 +505,7 @@ Makefile.in
 /src/guestfs_protocol.c
 /src/guestfs_protocol.h
 /src/guestfs_protocol.x
+/src/guestfs-private.h
 /src/guestfs-structs.pod
 /src/libguestfs.3
 /src/libguestfs.pc
diff --git a/generator/c.ml b/generator/c.ml
index f0df5ea..4497c48 100644
--- a/generator/c.ml
+++ b/generator/c.ml
@@ -39,7 +39,13 @@ let is_public { visibility = v } = match v with
   | VPublic | VPublicNoFish | VStateTest | VDebug -> true
   | VBindTest | VInternal -> false
 
-let is_private f = not (is_public f)
+let is_private { visibility = v } = match v with
+  | VBindTest -> true
+  | VPublic | VPublicNoFish | VStateTest | VDebug | VInternal -> false
+
+let is_internal { visibility = v } = match v with
+  | VInternal -> true
+  | VPublic | VPublicNoFish | VStateTest | VDebug | VBindTest -> false
 
 let public_functions_sorted =
   List.filter is_public (actions |> sort)
@@ -47,6 +53,9 @@ let public_functions_sorted =
 let private_functions_sorted =
   List.filter is_private (actions |> sort)
 
+let internal_functions_sorted =
+  List.filter is_internal (actions |> sort)
+
 (* Generate a C function prototype. *)
 let rec generate_prototype ?(extern = true) ?(static = false)
     ?(semicolon = true)
@@ -607,13 +616,6 @@ extern GUESTFS_DLL_PUBLIC void *guestfs_next_private (guestfs_h *g, const char *
 
   generate_all_headers private_functions_sorted;
 
-  pr "\
-/* Private structures. */
-
-";
-
-  generate_all_structs internal_structs;
-
 pr "\
 
 #endif /* End of GUESTFS_PRIVATE. */
@@ -650,6 +652,34 @@ pr "\
 #endif /* GUESTFS_H_ */
 "
 
+(* Generate the guestfs-private.h file. *)
+and generate_guestfs_private_h () =
+  generate_header CStyle LGPLv2plus;
+
+  pr "\
+#ifndef GUESTFS_PRIVATE_H_
+#define GUESTFS_PRIVATE_H_
+
+#include \"guestfs.h\"
+
+/* Private functions. */
+
+";
+
+  generate_all_headers internal_functions_sorted;
+
+  pr "\
+/* Private structures. */
+
+";
+
+  generate_all_structs internal_structs;
+
+  pr "\
+
+#endif /* GUESTFS_PRIVATE_H_ */
+"
+
 (* The structures are carefully written to have exactly the same
  * in-memory format as the XDR structures that we use on the wire to
  * the daemon.  The reason for creating copies of these structures
@@ -856,6 +886,7 @@ and generate_client_structs_free () =
 #include <stdlib.h>
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"guestfs-internal.h\"
 #include \"guestfs_protocol.h\"
 
@@ -905,6 +936,7 @@ and generate_client_structs_compare () =
 #include <errno.h>
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"guestfs-internal.h\"
 
 ";
@@ -990,6 +1022,7 @@ and generate_client_structs_copy () =
 #include <errno.h>
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"guestfs-internal.h\"
 
 ";
@@ -1173,6 +1206,7 @@ and generate_client_structs_cleanup () =
 #include <stdlib.h>
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"guestfs-internal-frontend.h\"
 
 ";
@@ -1213,6 +1247,7 @@ and generate_client_structs_print_c () =
 #include \"c-ctype.h\"
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"structs-print.h\"
 
 ";
@@ -1341,6 +1376,7 @@ and generate_client_actions actions () =
 #include <string.h>
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"guestfs-internal.h\"
 #include \"guestfs-internal-actions.h\"
 #include \"guestfs_protocol.h\"
diff --git a/generator/c.mli b/generator/c.mli
index 8c4e86c..2d4dcfa 100644
--- a/generator/c.mli
+++ b/generator/c.mli
@@ -34,6 +34,7 @@ val generate_client_structs_print_h : unit -> unit
 val generate_client_structs_print_c : unit -> unit
 val generate_event_string_c : unit -> unit
 val generate_guestfs_h : unit -> unit
+val generate_guestfs_private_h : unit -> unit
 val generate_internal_actions_h : unit -> unit
 val generate_internal_frontend_cleanups_h : unit -> unit
 val generate_linker_script : unit -> unit
diff --git a/generator/main.ml b/generator/main.ml
index 8d385d1..9016063 100644
--- a/generator/main.ml
+++ b/generator/main.ml
@@ -96,6 +96,7 @@ Run it from the top source directory using the command
 
   output_to "src/guestfs_protocol.x" generate_xdr;
   output_to "src/guestfs.h" generate_guestfs_h;
+  output_to "src/guestfs-private.h" generate_guestfs_private_h;
   output_to "src/guestfs-internal-actions.h" generate_internal_actions_h;
   output_to "src/guestfs-internal-frontend-cleanups.h"
     generate_internal_frontend_cleanups_h;
diff --git a/generator/tests_c_api.ml b/generator/tests_c_api.ml
index 21ef6e3..83a8332 100644
--- a/generator/tests_c_api.ml
+++ b/generator/tests_c_api.ml
@@ -46,6 +46,7 @@ let rec generate_c_api_tests () =
 #include <errno.h>
 
 #include \"guestfs.h\"
+#include \"guestfs-private.h\"
 #include \"guestfs-internal-frontend.h\"
 
 #include \"tests.h\"
diff --git a/src/available.c b/src/available.c
index ae0bd84..4609f34 100644
--- a/src/available.c
+++ b/src/available.c
@@ -22,6 +22,7 @@
 #include <libintl.h>
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-actions.h"
 
diff --git a/src/drives.c b/src/drives.c
index 1e3b0af..de0ab2b 100644
--- a/src/drives.c
+++ b/src/drives.c
@@ -37,6 +37,7 @@
 #include "ignore-value.h"
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-actions.h"
 
diff --git a/src/file.c b/src/file.c
index d57c4e1..2499000 100644
--- a/src/file.c
+++ b/src/file.c
@@ -30,6 +30,7 @@
 #include "full-write.h"
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-actions.h"
 
diff --git a/src/handle.c b/src/handle.c
index 0796015..1d89e4b 100644
--- a/src/handle.c
+++ b/src/handle.c
@@ -37,6 +37,7 @@
 #include "getprogname.h"
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-actions.h"
 
diff --git a/src/inspect-fs.c b/src/inspect-fs.c
index 5e5b004..244a0ee 100644
--- a/src/inspect-fs.c
+++ b/src/inspect-fs.c
@@ -34,6 +34,7 @@
 #include "xstrtol.h"
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 
 static int check_filesystem (guestfs_h *g, const char *mountable,
diff --git a/src/journal.c b/src/journal.c
index 22b81de..e79520d 100644
--- a/src/journal.c
+++ b/src/journal.c
@@ -42,6 +42,7 @@
 #include "full-read.h"
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-actions.h"
 
diff --git a/src/mountable.c b/src/mountable.c
index 9f7b451..45e7299 100644
--- a/src/mountable.c
+++ b/src/mountable.c
@@ -21,6 +21,7 @@
 #include <errno.h>
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-actions.h"
 
diff --git a/src/tsk.c b/src/tsk.c
index 1def9c9..b017550 100644
--- a/src/tsk.c
+++ b/src/tsk.c
@@ -29,6 +29,7 @@
 #include <rpc/types.h>
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs_protocol.h"
 #include "guestfs-internal.h"
 #include "guestfs-internal-all.h"
diff --git a/tests/mountable/test-internal-parse-mountable.c b/tests/mountable/test-internal-parse-mountable.c
index ab86ccb..961ee25 100644
--- a/tests/mountable/test-internal-parse-mountable.c
+++ b/tests/mountable/test-internal-parse-mountable.c
@@ -27,6 +27,7 @@
 #include <error.h>
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal-all.h"
 
 int
diff --git a/tests/regressions/rhbz914931.c b/tests/regressions/rhbz914931.c
index 93878db..6d09b19 100644
--- a/tests/regressions/rhbz914931.c
+++ b/tests/regressions/rhbz914931.c
@@ -31,6 +31,7 @@
 #include <error.h>
 
 #include "guestfs.h"
+#include "guestfs-private.h"
 #include "guestfs-internal-frontend.h"
 
 #include "getprogname.h"
-- 
2.7.4




More information about the Libguestfs mailing list