From 6263da7474c6e7818b025979712c9c5d7108640d Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 11 Nov 2010 11:51:02 +0000 Subject: [PATCH] lib: Make be completely generated. This removes the 'not-quite-separate' guestfs-actions.h and guestfs-structs.h files. --- .gitignore | 3 +- generator/generator_c.ml | 131 +++++++++++++++++++++++++++++++++++++------- generator/generator_main.ml | 3 +- src/Makefile.am | 7 +-- src/guestfs.h | 102 ---------------------------------- 5 files changed, 114 insertions(+), 132 deletions(-) delete mode 100644 src/guestfs.h diff --git a/.gitignore b/.gitignore index bf49d56..180e17e 100644 --- a/.gitignore +++ b/.gitignore @@ -259,12 +259,11 @@ src/errnostring_gperf.c src/errnostring_gperf.gperf src/errnostring.c src/errnostring.h -src/guestfs-actions.h +src/guestfs.h src/guestfs-internal-actions.h src/guestfs_protocol.c src/guestfs_protocol.h src/guestfs_protocol.x -src/guestfs-structs.h src/.libs/libguestfs.so src/libguestfs.syms *.swp diff --git a/generator/generator_c.ml b/generator/generator_c.ml index a2f40da..d9d6055 100644 --- a/generator/generator_c.ml +++ b/generator/generator_c.ml @@ -229,8 +229,7 @@ I.\n\n" or NULL if there was an error. I after use>.\n\n" typ typ | RStructList (_, typ) -> - pr "This function returns a C -(see Eguestfs-structs.hE), + pr "This function returns a C, or NULL if there was an error. I after use>.\n\n" typ typ | RHashtable _ -> @@ -337,22 +336,91 @@ and generate_availability_pod () = pr "=back\n"; pr "\n" -(* Generate the guestfs-structs.h file. *) -and generate_structs_h () = +(* Generate the guestfs.h file. *) +and generate_guestfs_h () = generate_header CStyle LGPLv2plus; - (* This is a public exported header file containing various - * structures. 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 here is just so we don't have to - * export the whole of guestfs_protocol.h (which includes much - * unrelated and XDR-dependent stuff that we don't want to be - * public, or required by clients). - * - * To reiterate, we will pass these structures to and from the - * client with a simple assignment or memcpy, so the format - * must be identical to what rpcgen / the RFC defines. + pr "\ +/* ---------- IMPORTANT NOTE ---------- + * + * All API documentation is in the manpage, 'guestfs(3)'. + * To read it, type: man 3 guestfs + * Or read it online here: http://libguestfs.org/guestfs.3.html + * + * Go and read it now, I'll be right here waiting for you + * when you come back. + * + * ------------------------------------ + */ + +#ifndef GUESTFS_H_ +#define GUESTFS_H_ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#include +#include +#include +#include + +/* The handle. */ +typedef struct guestfs_h guestfs_h; + +/* Connection management. */ +extern guestfs_h *guestfs_create (void); +extern void guestfs_close (guestfs_h *g); + +/* Error handling. */ +extern const char *guestfs_last_error (guestfs_h *g); +#define LIBGUESTFS_HAVE_LAST_ERRNO 1 +extern int guestfs_last_errno (guestfs_h *g); + +typedef void (*guestfs_error_handler_cb) (guestfs_h *g, void *opaque, const char *msg); +typedef void (*guestfs_abort_cb) (void) __attribute__((__noreturn__)); + +extern void guestfs_set_error_handler (guestfs_h *g, guestfs_error_handler_cb cb, void *opaque); +extern guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g, void **opaque_rtn); + +extern void guestfs_set_out_of_memory_handler (guestfs_h *g, guestfs_abort_cb); +extern guestfs_abort_cb guestfs_get_out_of_memory_handler (guestfs_h *g); + +/* Events. */ +typedef void (*guestfs_log_message_cb) (guestfs_h *g, void *opaque, char *buf, int len); +typedef void (*guestfs_subprocess_quit_cb) (guestfs_h *g, void *opaque); +typedef void (*guestfs_launch_done_cb) (guestfs_h *g, void *opaque); +typedef void (*guestfs_close_cb) (guestfs_h *g, void *opaque); +typedef void (*guestfs_progress_cb) (guestfs_h *g, void *opaque, int proc_nr, int serial, uint64_t position, uint64_t total); + +extern void guestfs_set_log_message_callback (guestfs_h *g, guestfs_log_message_cb cb, void *opaque); +extern void guestfs_set_subprocess_quit_callback (guestfs_h *g, guestfs_subprocess_quit_cb cb, void *opaque); +extern void guestfs_set_launch_done_callback (guestfs_h *g, guestfs_launch_done_cb cb, void *opaque); +#define LIBGUESTFS_HAVE_SET_CLOSE_CALLBACK 1 +extern void guestfs_set_close_callback (guestfs_h *g, guestfs_close_cb cb, void *opaque); +#define LIBGUESTFS_HAVE_SET_PROGRESS_CALLBACK 1 +extern void guestfs_set_progress_callback (guestfs_h *g, guestfs_progress_cb cb, void *opaque); + +/* Private data area. */ +#define LIBGUESTFS_HAVE_SET_PRIVATE 1 +extern void guestfs_set_private (guestfs_h *g, const char *key, void *data); +#define LIBGUESTFS_HAVE_GET_PRIVATE 1 +extern void *guestfs_get_private (guestfs_h *g, const char *key); + +/* Structures. */ +"; + + (* 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 + * here is just so we don't have to export the whole of + * guestfs_protocol.h (which includes much unrelated and + * XDR-dependent stuff that we don't want to be public, or required + * by clients). + * + * To reiterate, we will pass these structures to and from the client + * with a simple assignment or memcpy, so the format must be + * identical to what rpcgen / the RFC defines. *) (* Public structures. *) @@ -383,11 +451,12 @@ and generate_structs_h () = pr "extern void guestfs_free_%s (struct guestfs_%s *);\n" typ typ; pr "extern void guestfs_free_%s_list (struct guestfs_%s_list *);\n" typ typ; pr "\n" - ) structs + ) structs; + + pr "\ +/* Actions. */ +"; -(* Generate the guestfs-actions.h file. *) -and generate_actions_h () = - generate_header CStyle LGPLv2plus; List.iter ( fun (shortname, (ret, args, optargs as style), _, flags, _, _, _) -> let deprecated = @@ -435,7 +504,27 @@ and generate_actions_h () = ~prefix:"guestfs_" ~suffix:"_argv" ~optarg_proto:Argv shortname style; ); - ) all_functions_sorted + ) all_functions_sorted; + + pr "\ + +/* Private functions. + * + * These are NOT part of the public, stable API, and can change at any + * time! We export them because they are used by some of the language + * bindings. + */ +extern void *guestfs_safe_malloc (guestfs_h *g, size_t nbytes); +extern void *guestfs_safe_calloc (guestfs_h *g, size_t n, size_t s); +extern const char *guestfs_tmpdir (void); +/* End of private functions. */ + +#ifdef __cplusplus +} +#endif + +#endif /* GUESTFS_H_ */ +" (* Generate the guestfs-internal-actions.h file. *) and generate_internal_actions_h () = diff --git a/generator/generator_main.ml b/generator/generator_main.ml index f384fac..bf1e8e0 100644 --- a/generator/generator_main.ml +++ b/generator/generator_main.ml @@ -77,8 +77,7 @@ Run it from the top source directory using the command load_api_versions "src/api-support/added"; output_to "src/guestfs_protocol.x" generate_xdr; - output_to "src/guestfs-structs.h" generate_structs_h; - output_to "src/guestfs-actions.h" generate_actions_h; + 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/bindtests.c" generate_bindtests; diff --git a/src/Makefile.am b/src/Makefile.am index 5f796a0..8781274 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -19,8 +19,7 @@ include $(top_srcdir)/subdir-rules.mk generator_built = \ guestfs_protocol.x \ - guestfs-structs.h \ - guestfs-actions.h \ + guestfs.h guestfs-internal-actions.h \ actions.c \ bindtests.c \ @@ -47,7 +46,7 @@ EXTRA_DIST = \ api-support/README \ api-support/update-from-tarballs.sh -include_HEADERS = guestfs.h guestfs-actions.h guestfs-structs.h +include_HEADERS = guestfs.h lib_LTLIBRARIES = libguestfs.la @@ -120,9 +119,7 @@ libguestfs_la_LDFLAGS += $(VERSION_SCRIPT_FLAGS)libguestfs.syms libguestfs_la_SOURCES = \ guestfs.c \ guestfs.h \ - guestfs-actions.h \ guestfs-internal.h \ - guestfs-structs.h \ guestfs_protocol.h \ gettext.h \ actions.c \ diff --git a/src/guestfs.h b/src/guestfs.h deleted file mode 100644 index 0f4f9fd..0000000 --- a/src/guestfs.h +++ /dev/null @@ -1,102 +0,0 @@ -/* libguestfs - * Copyright (C) 2009-2010 Red Hat Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* IMPORTANT NOTE: - * - * All API documentation is in the manpage, 'guestfs(3)'. - * To read it, type: - * man 3 guestfs - * Or read it online here: - * http://libguestfs.org/guestfs.3.html - * - * Go and read it now, I'll wait for you to come back. - */ - -#ifndef GUESTFS_H_ -#define GUESTFS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -typedef struct guestfs_h guestfs_h; - -/*--- Connection management ---*/ -extern guestfs_h *guestfs_create (void); -extern void guestfs_close (guestfs_h *g); - -/*--- Error handling ---*/ -extern const char *guestfs_last_error (guestfs_h *g); -#define LIBGUESTFS_HAVE_LAST_ERRNO 1 -extern int guestfs_last_errno (guestfs_h *g); - -typedef void (*guestfs_error_handler_cb) (guestfs_h *g, void *opaque, const char *msg); -typedef void (*guestfs_abort_cb) (void) __attribute__((__noreturn__)); - -extern void guestfs_set_error_handler (guestfs_h *g, guestfs_error_handler_cb cb, void *opaque); -extern guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g, void **opaque_rtn); - -extern void guestfs_set_out_of_memory_handler (guestfs_h *g, guestfs_abort_cb); -extern guestfs_abort_cb guestfs_get_out_of_memory_handler (guestfs_h *g); - -/*--- Events ---*/ -typedef void (*guestfs_log_message_cb) (guestfs_h *g, void *opaque, char *buf, int len); -typedef void (*guestfs_subprocess_quit_cb) (guestfs_h *g, void *opaque); -typedef void (*guestfs_launch_done_cb) (guestfs_h *g, void *opaque); -typedef void (*guestfs_close_cb) (guestfs_h *g, void *opaque); -typedef void (*guestfs_progress_cb) (guestfs_h *g, void *opaque, int proc_nr, int serial, uint64_t position, uint64_t total); - -extern void guestfs_set_log_message_callback (guestfs_h *g, guestfs_log_message_cb cb, void *opaque); -extern void guestfs_set_subprocess_quit_callback (guestfs_h *g, guestfs_subprocess_quit_cb cb, void *opaque); -extern void guestfs_set_launch_done_callback (guestfs_h *g, guestfs_launch_done_cb cb, void *opaque); -#define LIBGUESTFS_HAVE_SET_CLOSE_CALLBACK 1 -extern void guestfs_set_close_callback (guestfs_h *g, guestfs_close_cb cb, void *opaque); -#define LIBGUESTFS_HAVE_SET_PROGRESS_CALLBACK 1 -extern void guestfs_set_progress_callback (guestfs_h *g, guestfs_progress_cb cb, void *opaque); - -/*--- Private data area ---*/ -#define LIBGUESTFS_HAVE_SET_PRIVATE 1 -extern void guestfs_set_private (guestfs_h *g, const char *key, void *data); -#define LIBGUESTFS_HAVE_GET_PRIVATE 1 -extern void *guestfs_get_private (guestfs_h *g, const char *key); - -/*--- Structures and actions ---*/ -#include -#include -#include -#include - -/*--- Private --- - * - * These are NOT part of the public, stable API, and can change at any - * time! We export them because they are used by some of the language - * bindings. - */ -extern void *guestfs_safe_malloc (guestfs_h *g, size_t nbytes); -extern void *guestfs_safe_calloc (guestfs_h *g, size_t n, size_t s); -extern const char *guestfs_tmpdir (void); -/* End of private functions. */ - -#ifdef __cplusplus -} -#endif - -#endif /* GUESTFS_H_ */ -- 1.8.3.1