diff --git a/daemon/remote.c b/daemon/remote.c index 8e0f47d80c..f2e193de61 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1484,70 +1484,6 @@ cleanup: return rv; } -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, diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index b19de8db5e..78992b0c8e 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);"); @@ -548,6 +549,27 @@ elsif ($opt_b) { push(@ret_list, "ret->$1 = $1;"); } + $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"; @@ -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 d9720d1276..f157b91629 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -2397,7 +2397,7 @@ enum remote_procedure { REMOTE_PROC_STORAGE_VOL_DOWNLOAD = 209, /* autogen autogen | readstream@1 */ REMOTE_PROC_DOMAIN_INJECT_NMI = 210, /* autogen autogen */ - REMOTE_PROC_DOMAIN_SCREENSHOT = 211, /* skipgen autogen | readstream@1 */ + REMOTE_PROC_DOMAIN_SCREENSHOT = 211, /* autogen autogen | readstream@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 */