]> xenbits.xensource.com Git - libvirt.git/commitdiff
gendispatch: Support modern listing of more types
authorMartin Kletzander <mkletzan@redhat.com>
Wed, 9 Mar 2016 12:32:55 +0000 (13:32 +0100)
committerMartin Kletzander <mkletzan@redhat.com>
Fri, 11 Mar 2016 11:58:41 +0000 (12:58 +0100)
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
src/rpc/gendispatch.pl

index c66efe8c40eed75c1a4469c984223e5d263dffe4..6c3ded4a1e9ce7ed2c201f6b739b5fafb6b65e33 100755 (executable)
@@ -649,7 +649,7 @@ elsif ($mode eq "server") {
                         if (!$modern_ret_as_list) {
                             push(@ret_list, "ret->$3 = tmp.$3;");
                         }
-                    } elsif ($ret_member =~ m/admin_nonnull_(server) (\S+)<(\S+)>;/) {
+                    } elsif ($ret_member =~ m/(?:admin|remote)_nonnull_(secret|nwfilter|node_device|interface|network|storage_vol|storage_pool|domain_snapshot|domain|server) (\S+)<(\S+)>;/) {
                         $modern_ret_struct_name = $1;
                         $single_ret_list_error_msg_type = $1;
                         $single_ret_list_name = $2;
@@ -1401,7 +1401,7 @@ elsif ($mode eq "client") {
                         }
 
                         push(@ret_list, "memcpy(result->$3, ret.$3, sizeof(result->$3));");
-                    } elsif ($ret_member =~ m/admin_nonnull_(server) (\S+)<(\S+)>;/) {
+                    } elsif ($ret_member =~ m/(?:admin|remote)_nonnull_(secret|nwfilter|node_device|interface|network|storage_vol|storage_pool|domain_snapshot|domain|server) (\S+)<(\S+)>;/) {
                         my $proc_name = name_to_TypeName($1);
 
                         if ($structprefix eq "admin") {
@@ -1730,12 +1730,13 @@ elsif ($mode eq "client") {
             $callflags = "REMOTE_CALL_LXC";
         }
 
+        my $call_priv = $priv_src;
         if ($structprefix ne "admin") {
-            $priv_src = "$priv_src, priv";
+            $call_priv = "$call_priv, priv";
         }
 
         print "\n";
-        print "    if (call($priv_src, $callflags, $call->{constname},\n";
+        print "    if (call($call_priv, $callflags, $call->{constname},\n";
         print "             (xdrproc_t)xdr_$argtype, (char *)$call_args,\n";
         print "             (xdrproc_t)xdr_$rettype, (char *)$call_ret) == -1) {\n";
 
@@ -1778,6 +1779,9 @@ elsif ($mode eq "client") {
             print "    }\n";
             print "\n";
         } elsif ($modern_ret_as_list) {
+            if ($modern_ret_struct_name eq "domain_snapshot") {
+                $priv_src =~ s/->conn//;
+            }
             print "    if (result) {\n";
             print "        if (VIR_ALLOC_N(tmp_results, ret.$single_ret_list_name.${single_ret_list_name}_len + 1) < 0)\n";
             print "            goto cleanup;\n";