]> xenbits.xensource.com Git - libvirt.git/commitdiff
remote generator: Handle struct returning functions better (part 2)
authorMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 15 Jun 2011 15:34:19 +0000 (17:34 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 15 Jun 2011 15:34:19 +0000 (17:34 +0200)
Commit 64000eabedf2 is part 1, that only covered the daemon side by
accident. Part 2 covers the client side too.

daemon/remote_generator.pl

index 351866b4cb6a7d30800def053c5ac8e1a6b36b1e..bcf5fd44639b748106c0db14e9499e1a5873f0c2 100755 (executable)
@@ -1225,21 +1225,14 @@ elsif ($opt_k) {
 
         # select struct type for multi-return-value functions
         if ($multi_ret) {
-            my $last_arg;
-            my $struct_name = $call->{ProcName};
-            $struct_name =~ s/Get//;
-
-            if ($call->{ProcName} eq "DomainGetBlockInfo") {
-                # SPECIAL: virDomainGetBlockInfo has flags parameter after
-                #          the struct parameter in its signature
-                $last_arg = pop(@args_list);
+            if (!(defined $call->{ret_offset})) {
+                die "multi-return-value without insert@<offset> annotation: $call->{ret}";
             }
 
-            push(@args_list, "vir${struct_name}Ptr result");
+            my $struct_name = $call->{ProcName};
+            $struct_name =~ s/Get//;
 
-            if (defined $last_arg) {
-                push(@args_list, $last_arg);
-            }
+            splice(@args_list, $call->{ret_offset}, 0, ("vir${struct_name}Ptr result"));
         }
 
         if ($call->{streamflag} ne "none") {