[libvirt] [PATCH] remote: Handle functions thar return optional strings
Daniel Veillard
veillard at redhat.com
Mon Jun 20 03:11:14 UTC 2011
On Thu, Jun 16, 2011 at 11:43:53AM +0200, Matthias Bolte wrote:
> ---
> daemon/remote.c | 64 ------------------------------------------
> daemon/remote_generator.pl | 28 ++++++++++++++++++
> src/remote/remote_protocol.x | 2 +-
> 3 files changed, 29 insertions(+), 65 deletions(-)
>
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 8e0f47d..f2e193d 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -1485,70 +1485,6 @@ cleanup:
> }
>
> static int
> -remoteDispatchDomainScreenshot(struct qemud_server *server ATTRIBUTE_UNUSED,
> - struct qemud_client *client,
> - virConnectPtr conn,
> - remote_message_header *hdr,
> - remote_error *rerr,
> - remote_domain_screenshot_args *args,
> - remote_domain_screenshot_ret *ret)
> -{
> - int rv = -1;
> - struct qemud_client_stream *stream = NULL;
> - virDomainPtr dom = NULL;
> - char *mime, **mime_p;
> -
> - if (!conn) {
> - virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
> - goto cleanup;
> - }
> -
> - ret->mime = NULL;
> -
> - if (!(dom = get_nonnull_domain (conn, args->dom)))
> - goto cleanup;
> -
> - if (!(stream = remoteCreateClientStream(conn, hdr)))
> - goto cleanup;
> -
> - if (!(mime = virDomainScreenshot(dom, stream->st, args->screen, args->flags)))
> - goto cleanup;
> -
> - if (remoteAddClientStream(client, stream, 1) < 0) {
> - virStreamAbort(stream->st);
> - goto cleanup;
> - }
> -
> - if (VIR_ALLOC(mime_p) < 0) {
> - virReportOOMError();
> - goto cleanup;
> - }
> -
> - *mime_p = strdup(mime);
> - if (*mime_p == NULL) {
> - virReportOOMError();
> - VIR_FREE(mime_p);
> - goto cleanup;
> - }
> -
> - ret->mime = mime_p;
> -
> - rv = 0;
> -
> -cleanup:
> - if (rv < 0)
> - remoteDispatchError(rerr);
> - VIR_FREE(mime);
> - if (dom)
> - virDomainFree(dom);
> - if (stream && rv != 0) {
> - virStreamAbort(stream->st);
> - remoteFreeClientStream(client, stream);
> - }
> - return rv;
> -}
> -
> -static int
> remoteDispatchNodeGetCPUStats (struct qemud_server *server ATTRIBUTE_UNUSED,
> struct qemud_client *client ATTRIBUTE_UNUSED,
> virConnectPtr conn,
> diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl
> index bcf5fd4..d9d9ded 100755
> --- a/daemon/remote_generator.pl
> +++ b/daemon/remote_generator.pl
> @@ -351,6 +351,7 @@ elsif ($opt_b) {
> my @optionals_list = ();
> my @getters_list = ();
> my @args_list = ();
> + my @prepare_ret_list = ();
> my @ret_list = ();
> my @free_list = ();
> my @free_list_on_error = ("remoteDispatchError(rerr);");
> @@ -551,6 +552,27 @@ elsif ($opt_b) {
> $single_ret_var = $1;
> $single_ret_by_ref = 0;
> $single_ret_check = " == NULL";
> + } elsif ($ret_member =~ m/^remote_string (\S+);/) {
> + push(@vars_list, "char *$1 = NULL");
> + push(@vars_list, "char **$1_p = NULL");
> + push(@ret_list, "ret->$1 = $1_p;");
> + push(@free_list, " VIR_FREE($1);");
> + push(@free_list_on_error, "VIR_FREE($1_p);");
> + push(@prepare_ret_list,
> + "if (VIR_ALLOC($1_p) < 0) {\n" .
> + " virReportOOMError();\n" .
> + " goto cleanup;\n" .
> + " }\n" .
> + " \n" .
> + " *$1_p = strdup($1);\n" .
> + " if (*$1_p == NULL) {\n" .
> + " virReportOOMError();\n" .
> + " goto cleanup;\n" .
> + " }\n");
> +
> + $single_ret_var = $1;
> + $single_ret_by_ref = 0;
> + $single_ret_check = " == NULL";
> } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|node_device|secret|nwfilter|domain_snapshot) (\S+);/) {
> my $type_name = name_to_ProcName($1);
>
> @@ -864,6 +886,12 @@ elsif ($opt_b) {
> print "\n";
> }
>
> + if (@prepare_ret_list) {
> + print " ";
> + print join("\n ", @prepare_ret_list);
> + print "\n";
> + }
> +
> if (@ret_list) {
> print " ";
> print join("\n ", @ret_list);
> diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
> index b136e41..0aa3dfb 100644
> --- a/src/remote/remote_protocol.x
> +++ b/src/remote/remote_protocol.x
> @@ -2386,7 +2386,7 @@ enum remote_procedure {
> REMOTE_PROC_STORAGE_VOL_DOWNLOAD = 209, /* autogen autogen | readstream at 1 */
> REMOTE_PROC_DOMAIN_INJECT_NMI = 210, /* autogen autogen */
>
> - REMOTE_PROC_DOMAIN_SCREENSHOT = 211, /* skipgen autogen | readstream at 1 */
> + REMOTE_PROC_DOMAIN_SCREENSHOT = 211, /* autogen autogen | readstream at 1 */
> REMOTE_PROC_DOMAIN_GET_STATE = 212, /* skipgen skipgen */
> REMOTE_PROC_DOMAIN_MIGRATE_BEGIN3 = 213, /* skipgen skipgen */
> REMOTE_PROC_DOMAIN_MIGRATE_PREPARE3 = 214, /* skipgen skipgen */
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list