summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--generator/c.ml69
-rw-r--r--generator/main.ml1
-rw-r--r--po/POTFILES1
-rw-r--r--src/Makefile.am2
5 files changed, 47 insertions, 27 deletions
diff --git a/.gitignore b/.gitignore
index 5b91286b..b3c9ef74 100644
--- a/.gitignore
+++ b/.gitignore
@@ -346,6 +346,7 @@ Makefile.in
/src/errnostring-gperf.c
/src/errnostring-gperf.gperf
/src/errnostring.h
+/src/free-structs.c
/src/guestfs.3
/src/guestfs-actions.pod
/src/guestfs-availability.pod
diff --git a/generator/c.ml b/generator/c.ml
index ac8fd5ee..484b4f9a 100644
--- a/generator/c.ml
+++ b/generator/c.ml
@@ -687,6 +687,48 @@ and generate_internal_actions_h () =
c_name style
) non_daemon_functions
+(* Functions to free structures. *)
+and generate_client_free_structs () =
+ generate_header CStyle LGPLv2plus;
+
+ pr "\
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include \"guestfs.h\"
+#include \"guestfs-internal.h\"
+#include \"guestfs_protocol.h\"
+
+";
+
+ pr "/* Structure-freeing functions. These rely on the fact that the\n";
+ pr " * structure format is identical to the XDR format. See note in\n";
+ pr " * generator.ml.\n";
+ pr " */\n";
+ pr "\n";
+
+ List.iter (
+ fun (typ, _) ->
+ pr "void\n";
+ pr "guestfs_free_%s (struct guestfs_%s *x)\n" typ typ;
+ pr "{\n";
+ pr " xdr_free ((xdrproc_t) xdr_guestfs_int_%s, (char *) x);\n" typ;
+ pr " free (x);\n";
+ pr "}\n";
+ pr "\n";
+
+ pr "void\n";
+ pr "guestfs_free_%s_list (struct guestfs_%s_list *x)\n" typ typ;
+ pr "{\n";
+ pr " xdr_free ((xdrproc_t) xdr_guestfs_int_%s_list, (char *) x);\n" typ;
+ pr " free (x);\n";
+ pr "}\n";
+ pr "\n";
+
+ ) structs
+
(* Generate the client-side dispatch stubs. *)
and generate_client_actions () =
generate_header CStyle LGPLv2plus;
@@ -1425,33 +1467,6 @@ trace_send_line (guestfs_h *g)
fun f -> generate_daemon_stub f
) daemon_functions;
- (* Functions to free structures. *)
- pr "/* Structure-freeing functions. These rely on the fact that the\n";
- pr " * structure format is identical to the XDR format. See note in\n";
- pr " * generator.ml.\n";
- pr " */\n";
- pr "\n";
-
- List.iter (
- fun (typ, _) ->
- pr "void\n";
- pr "guestfs_free_%s (struct guestfs_%s *x)\n" typ typ;
- pr "{\n";
- pr " xdr_free ((xdrproc_t) xdr_guestfs_int_%s, (char *) x);\n" typ;
- pr " free (x);\n";
- pr "}\n";
- pr "\n";
-
- pr "void\n";
- pr "guestfs_free_%s_list (struct guestfs_%s_list *x)\n" typ typ;
- pr "{\n";
- pr " xdr_free ((xdrproc_t) xdr_guestfs_int_%s_list, (char *) x);\n" typ;
- pr " free (x);\n";
- pr "}\n";
- pr "\n";
-
- ) structs;
-
(* Functions which have optional arguments have two or three
* generated variants.
*)
diff --git a/generator/main.ml b/generator/main.ml
index 4cb3c7c0..8d608504 100644
--- a/generator/main.ml
+++ b/generator/main.ml
@@ -84,6 +84,7 @@ Run it from the top source directory using the command
output_to "src/guestfs.h" generate_guestfs_h;
output_to "src/guestfs-internal-actions.h" generate_internal_actions_h;
output_to "src/actions.c" generate_client_actions;
+ output_to "src/free-structs.c" generate_client_free_structs;
output_to "src/bindtests.c" generate_bindtests;
output_to "src/guestfs-structs.pod" generate_structs_pod;
output_to "src/guestfs-actions.pod" generate_actions_pod;
diff --git a/po/POTFILES b/po/POTFILES
index a73377d7..3f49a05c 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -225,6 +225,7 @@ src/errnostring.c
src/events.c
src/file.c
src/filearch.c
+src/free-structs.c
src/fuse.c
src/guestfs.c
src/info.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 5f80bc1b..082c122b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -28,6 +28,7 @@ generator_built = \
errnostring-gperf.gperf \
errnostring.c \
errnostring.h \
+ free-structs.c \
guestfs-actions.pod \
guestfs-availability.pod \
guestfs-structs.pod \
@@ -130,6 +131,7 @@ libguestfs_la_SOURCES = \
events.c \
file.c \
filearch.c \
+ free-structs.c \
fuse.c \
info.c \
inspect.c \