]> xenbits.xensource.com Git - libvirt.git/commitdiff
remote generator: Add special case for virConnectGetType
authorMatthias Bolte <matthias.bolte@googlemail.com>
Mon, 16 May 2011 18:10:06 +0000 (20:10 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Fri, 20 May 2011 16:12:50 +0000 (18:12 +0200)
daemon/remote.c
daemon/remote_generator.pl
src/remote/remote_protocol.x

index 941e92f7d7b209acbea56c6b38aab12c3bd3b1ba..80783b30fa689fca0eecfdf57c5c3592dc4e34fa 100644 (file)
@@ -459,41 +459,6 @@ remoteDispatchClose(struct qemud_server *server ATTRIBUTE_UNUSED,
     return 0;
 }
 
-static int
-remoteDispatchGetType(struct qemud_server *server ATTRIBUTE_UNUSED,
-                      struct qemud_client *client ATTRIBUTE_UNUSED,
-                      virConnectPtr conn,
-                      remote_message_header *hdr ATTRIBUTE_UNUSED,
-                      remote_error *rerr,
-                      void *args ATTRIBUTE_UNUSED, remote_get_type_ret *ret)
-{
-    const char *type;
-    int rv = -1;
-
-    if (!conn) {
-        virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
-        goto cleanup;
-    }
-
-    if (!(type = virConnectGetType(conn)))
-        goto cleanup;
-
-    /* We have to strdup because remoteDispatchClientRequest will
-     * free this string after it's been serialised.
-     */
-    if (!(ret->type = strdup(type))) {
-        virReportOOMError();
-        goto cleanup;
-    }
-
-    rv = 0;
-
-cleanup:
-    if (rv < 0)
-        remoteDispatchError(rerr);
-    return rv;
-}
-
 static int
 remoteDispatchDomainGetSchedulerType(struct qemud_server *server ATTRIBUTE_UNUSED,
                                      struct qemud_client *client ATTRIBUTE_UNUSED,
index ec4bd62471d94eea3e37758f6a7fd07fee5afe64..d21f959fc59bab52f41ea51d6c8e309453ae18cf 100755 (executable)
@@ -429,8 +429,21 @@ elsif ($opt_b) {
                         unshift(@args_list, $conn);
                     }
                 } elsif ($ret_member =~ m/^remote_nonnull_string (\S+);/) {
-                    push(@vars_list, "char *$1");
-                    push(@ret_list, "ret->$1 = $1;");
+                    if ($call->{ProcName} eq "GetType") {
+                        # SPECIAL: virConnectGetType returns a constant string that must
+                        #          not be freed. Therefore, duplicate the string here.
+                        push(@vars_list, "const char *$1");
+                        push(@ret_list, "/* We have to strdup because remoteDispatchClientRequest will");
+                        push(@ret_list, " * free this string after it's been serialised. */");
+                        push(@ret_list, "if (!(ret->type = strdup(type))) {");
+                        push(@ret_list, "    virReportOOMError();");
+                        push(@ret_list, "    goto cleanup;");
+                        push(@ret_list, "}");
+                    } else {
+                        push(@vars_list, "char *$1");
+                        push(@ret_list, "ret->$1 = $1;");
+                    }
+
                     $single_ret_var = $1;
                     $single_ret_by_ref = 0;
                     $single_ret_check = " == NULL";
index c784dba52f572a0eca316d9071fdbd683621e514..f0da95d065450a1e7b8ca13fe8fe40436af36873 100644 (file)
@@ -2054,7 +2054,7 @@ enum remote_procedure {
      * it handles src/remote.  */
     REMOTE_PROC_OPEN = 1, /* skipgen skipgen */
     REMOTE_PROC_CLOSE = 2, /* skipgen skipgen */
-    REMOTE_PROC_GET_TYPE = 3, /* skipgen skipgen */
+    REMOTE_PROC_GET_TYPE = 3, /* autogen skipgen */
     REMOTE_PROC_GET_VERSION = 4, /* autogen autogen */
     REMOTE_PROC_GET_MAX_VCPUS = 5, /* autogen autogen */
     REMOTE_PROC_NODE_GET_INFO = 6, /* autogen autogen */