diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | generator/c.ml | 69 | ||||
-rw-r--r-- | generator/main.ml | 1 | ||||
-rw-r--r-- | po/POTFILES | 1 | ||||
-rw-r--r-- | src/Makefile.am | 2 |
5 files changed, 47 insertions, 27 deletions
@@ -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 \ |