mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
remote generator, daemon: Handle simple-return-value functions
This commit is contained in:
parent
0fb79ff4bb
commit
0c3cea0bd6
1616
daemon/remote.c
1616
daemon/remote.c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -54,6 +54,7 @@ if ($opt_c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $collect_args_members = 0;
|
my $collect_args_members = 0;
|
||||||
|
my $collect_ret_members = 0;
|
||||||
my $last_name;
|
my $last_name;
|
||||||
|
|
||||||
while (<>) {
|
while (<>) {
|
||||||
@ -63,6 +64,12 @@ while (<>) {
|
|||||||
} elsif ($_ =~ m/^\s*(.*\S)\s*$/) {
|
} elsif ($_ =~ m/^\s*(.*\S)\s*$/) {
|
||||||
push(@{$calls{$name}->{args_members}}, $1);
|
push(@{$calls{$name}->{args_members}}, $1);
|
||||||
}
|
}
|
||||||
|
} elsif ($collect_ret_members) {
|
||||||
|
if (/^};/) {
|
||||||
|
$collect_ret_members = 0;
|
||||||
|
} elsif ($_ =~ m/^\s*(.*\S)\s*$/) {
|
||||||
|
push(@{$calls{$name}->{ret_members}}, $1);
|
||||||
|
}
|
||||||
} elsif (/^struct ${structprefix}_(.*)_args/) {
|
} elsif (/^struct ${structprefix}_(.*)_args/) {
|
||||||
$name = $1;
|
$name = $1;
|
||||||
$ProcName = name_to_ProcName ($name);
|
$ProcName = name_to_ProcName ($name);
|
||||||
@ -80,6 +87,7 @@ while (<>) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$collect_args_members = 1;
|
$collect_args_members = 1;
|
||||||
|
$collect_ret_members = 0;
|
||||||
$last_name = $name;
|
$last_name = $name;
|
||||||
} elsif (/^struct ${structprefix}_(.*)_ret/) {
|
} elsif (/^struct ${structprefix}_(.*)_ret/) {
|
||||||
$name = $1;
|
$name = $1;
|
||||||
@ -93,11 +101,14 @@ while (<>) {
|
|||||||
ProcName => $ProcName,
|
ProcName => $ProcName,
|
||||||
UC_NAME => uc $name,
|
UC_NAME => uc $name,
|
||||||
args => "void",
|
args => "void",
|
||||||
ret => "${structprefix}_${name}_ret"
|
ret => "${structprefix}_${name}_ret",
|
||||||
|
ret_members => []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$collect_args_members = 0;
|
$collect_args_members = 0;
|
||||||
|
$collect_ret_members = 1;
|
||||||
|
$last_name = $name;
|
||||||
} elsif (/^struct ${structprefix}_(.*)_msg/) {
|
} elsif (/^struct ${structprefix}_(.*)_msg/) {
|
||||||
$name = $1;
|
$name = $1;
|
||||||
$ProcName = name_to_ProcName ($name);
|
$ProcName = name_to_ProcName ($name);
|
||||||
@ -110,6 +121,7 @@ while (<>) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$collect_args_members = 0;
|
$collect_args_members = 0;
|
||||||
|
$collect_ret_members = 0;
|
||||||
} elsif (/^\s*${procprefix}_PROC_(.*?)\s+=\s+(\d+),?$/) {
|
} elsif (/^\s*${procprefix}_PROC_(.*?)\s+=\s+(\d+),?$/) {
|
||||||
$name = lc $1;
|
$name = lc $1;
|
||||||
$id = $2;
|
$id = $2;
|
||||||
@ -118,8 +130,10 @@ while (<>) {
|
|||||||
$calls[$id] = $calls{$name};
|
$calls[$id] = $calls{$name};
|
||||||
|
|
||||||
$collect_args_members = 0;
|
$collect_args_members = 0;
|
||||||
|
$collect_ret_members = 0;
|
||||||
} else {
|
} else {
|
||||||
$collect_args_members = 0;
|
$collect_args_members = 0;
|
||||||
|
$collect_ret_members = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +249,96 @@ elsif ($opt_b) {
|
|||||||
"DomainSetBlkioParameters",
|
"DomainSetBlkioParameters",
|
||||||
"Open",
|
"Open",
|
||||||
"StorageVolUpload",
|
"StorageVolUpload",
|
||||||
"StorageVolDownload");
|
"StorageVolDownload",
|
||||||
|
|
||||||
|
"AuthList",
|
||||||
|
"AuthSaslInit",
|
||||||
|
"AuthSaslStart",
|
||||||
|
"AuthSaslStep",
|
||||||
|
"AuthPolkit",
|
||||||
|
|
||||||
|
"CpuBaseline",
|
||||||
|
"CpuCompare",
|
||||||
|
"DomainBlockPeek",
|
||||||
|
"DomainBlockStats",
|
||||||
|
"DomainCreateWithFlags",
|
||||||
|
"DomainCreateXML",
|
||||||
|
"DomainDefineXML",
|
||||||
|
"DomainEventsDeregister",
|
||||||
|
"DomainEventsRegister",
|
||||||
|
"DomainGetBlkioParameters",
|
||||||
|
"DomainGetBlockInfo",
|
||||||
|
"DomainGetInfo",
|
||||||
|
"DomainGetJobInfo",
|
||||||
|
"DomainGetMemoryParameters",
|
||||||
|
"DomainGetSchedulerParameters",
|
||||||
|
"DomainGetSchedulerType",
|
||||||
|
"DomainGetSecurityLabel",
|
||||||
|
"DomainGetVcpus",
|
||||||
|
"DomainInterfaceStats",
|
||||||
|
"DomainLookupById",
|
||||||
|
"DomainLookupByName",
|
||||||
|
"DomainLookupByUUID",
|
||||||
|
"DomainMemoryPeek",
|
||||||
|
"DomainMemoryStats",
|
||||||
|
"DomainMigrateFinish",
|
||||||
|
"DomainMigrateFinish2",
|
||||||
|
"DomainMigratePrepare",
|
||||||
|
"DomainMigratePrepare2",
|
||||||
|
"DomainSnapshotCreateXML",
|
||||||
|
"DomainSnapshotCurrent",
|
||||||
|
"DomainSnapshotListNames",
|
||||||
|
"DomainSnapshotLookupByName",
|
||||||
|
"FindStoragePoolSources",
|
||||||
|
"GetMaxVcpus",
|
||||||
|
"GetType",
|
||||||
|
"InterfaceLookupByMacString",
|
||||||
|
"InterfaceLookupByName",
|
||||||
|
"InterfaceDefineXML",
|
||||||
|
"ListDefinedDomains",
|
||||||
|
"ListDefinedInterfaces",
|
||||||
|
"ListDefinedNetworks",
|
||||||
|
"ListDefinedStoragePools",
|
||||||
|
"ListDomains",
|
||||||
|
"ListInterfaces",
|
||||||
|
"ListNetworks",
|
||||||
|
"ListNWFilters",
|
||||||
|
"ListSecrets",
|
||||||
|
"ListStoragePools",
|
||||||
|
"NetworkLookupByName",
|
||||||
|
"NetworkLookupByUUID",
|
||||||
|
"NodeDeviceCreateXML",
|
||||||
|
"NetworkCreateXML",
|
||||||
|
"NodeDeviceGetParent",
|
||||||
|
"NodeDeviceListCaps",
|
||||||
|
"NodeDeviceLookupByName",
|
||||||
|
"NodeGetCellsFreeMemory",
|
||||||
|
"NodeGetFreeMemory",
|
||||||
|
"NodeGetInfo",
|
||||||
|
"NodeGetSecurityModel",
|
||||||
|
"NetworkDefineXML",
|
||||||
|
"NodeListDevices",
|
||||||
|
"NodeNumOfDevices",
|
||||||
|
"NWFilterLookupByName",
|
||||||
|
"NWFilterLookupByUUID",
|
||||||
|
"SecretDefineXML",
|
||||||
|
"SecretGetValue",
|
||||||
|
"NWFilterDefineXML",
|
||||||
|
"SecretLookupByUsage",
|
||||||
|
"SecretLookupByUUID",
|
||||||
|
"StoragePoolCreateXML",
|
||||||
|
"StoragePoolDefineXML",
|
||||||
|
"StoragePoolGetInfo",
|
||||||
|
"StoragePoolListVolumes",
|
||||||
|
"StoragePoolLookupByName",
|
||||||
|
"StoragePoolLookupByUUID",
|
||||||
|
"StoragePoolLookupByVolume",
|
||||||
|
"StorageVolCreateXML",
|
||||||
|
"StorageVolCreateXMLFrom",
|
||||||
|
"StorageVolGetInfo",
|
||||||
|
"StorageVolLookupByKey",
|
||||||
|
"StorageVolLookupByName",
|
||||||
|
"StorageVolLookupByPath");
|
||||||
} elsif ($structprefix eq "qemu") {
|
} elsif ($structprefix eq "qemu") {
|
||||||
@ungeneratable = ("MonitorCommand");
|
@ungeneratable = ("MonitorCommand");
|
||||||
}
|
}
|
||||||
@ -248,8 +351,9 @@ elsif ($opt_b) {
|
|||||||
next if $calls{$_}->{msg};
|
next if $calls{$_}->{msg};
|
||||||
|
|
||||||
# FIXME: skip functions with explicit return value for now
|
# FIXME: skip functions with explicit return value for now
|
||||||
if ($calls{$_}->{ret} ne "void" or exists($ug{$calls{$_}->{ProcName}})) {
|
if (exists($ug{$calls{$_}->{ProcName}})) {
|
||||||
print "\n/* ${structprefix}Dispatch$calls{$_}->{ProcName} has to be implemented manually */\n";
|
print "\n/* ${structprefix}Dispatch$calls{$_}->{ProcName} has " .
|
||||||
|
"to be implemented manually */\n";
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,6 +386,7 @@ elsif ($opt_b) {
|
|||||||
my @vars_list = ();
|
my @vars_list = ();
|
||||||
my @getters_list = ();
|
my @getters_list = ();
|
||||||
my @args_list = ();
|
my @args_list = ();
|
||||||
|
my @ret_list = ();
|
||||||
my @free_list = ();
|
my @free_list = ();
|
||||||
|
|
||||||
if ($calls{$_}->{args} ne "void") {
|
if ($calls{$_}->{args} ne "void") {
|
||||||
@ -402,6 +507,49 @@ elsif ($opt_b) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $single_ret_var = "undefined";
|
||||||
|
my $single_ret_by_ref = 0;
|
||||||
|
my $single_ret_check = " == undefined";
|
||||||
|
|
||||||
|
if ($calls{$_}->{ret} ne "void") {
|
||||||
|
foreach my $ret_member (@{$calls{$_}->{ret_members}}) {
|
||||||
|
if ($ret_member =~ m/(\S+)<\S+>;/) {
|
||||||
|
push(@ret_list, "ret->$1.$1_val");
|
||||||
|
push(@ret_list, "ret->$1.$1_len");
|
||||||
|
} elsif ($ret_member =~ m/remote_nonnull_string (\S+);/) {
|
||||||
|
push(@vars_list, "char *$1");
|
||||||
|
push(@ret_list, "ret->$1 = $1;");
|
||||||
|
$single_ret_var = $1;
|
||||||
|
$single_ret_by_ref = 0;
|
||||||
|
$single_ret_check = " == NULL";
|
||||||
|
} elsif ($ret_member =~ m/int (\S+);/) {
|
||||||
|
push(@vars_list, "int $1");
|
||||||
|
push(@ret_list, "ret->$1 = $1;");
|
||||||
|
$single_ret_var = $1;
|
||||||
|
|
||||||
|
if ($calls{$_}->{ProcName} eq "DomainGetAutostart" or
|
||||||
|
$calls{$_}->{ProcName} eq "NetworkGetAutostart" or
|
||||||
|
$calls{$_}->{ProcName} eq "StoragePoolGetAutostart") {
|
||||||
|
$single_ret_by_ref = 1;
|
||||||
|
} else {
|
||||||
|
$single_ret_by_ref = 0;
|
||||||
|
$single_ret_check = " < 0";
|
||||||
|
}
|
||||||
|
} elsif ($ret_member =~ m/hyper (\S+);/) {
|
||||||
|
push(@vars_list, "unsigned long $1");
|
||||||
|
push(@ret_list, "ret->$1 = $1;");
|
||||||
|
$single_ret_var = $1;
|
||||||
|
|
||||||
|
if ($calls{$_}->{ProcName} eq "DomainGetMaxMemory") {
|
||||||
|
$single_ret_by_ref = 0;
|
||||||
|
$single_ret_check = " == 0";
|
||||||
|
} else {
|
||||||
|
$single_ret_by_ref = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach my $var (@vars_list) {
|
foreach my $var (@vars_list) {
|
||||||
print " $var;\n";
|
print " $var;\n";
|
||||||
}
|
}
|
||||||
@ -415,7 +563,9 @@ elsif ($opt_b) {
|
|||||||
|
|
||||||
print join("\n", @getters_list);
|
print join("\n", @getters_list);
|
||||||
|
|
||||||
|
if (@getters_list) {
|
||||||
print "\n";
|
print "\n";
|
||||||
|
}
|
||||||
|
|
||||||
if ($calls{$_}->{ret} eq "void") {
|
if ($calls{$_}->{ret} eq "void") {
|
||||||
print " if (vir$calls{$_}->{ProcName}(";
|
print " if (vir$calls{$_}->{ProcName}(";
|
||||||
@ -423,6 +573,56 @@ elsif ($opt_b) {
|
|||||||
print ") < 0)\n";
|
print ") < 0)\n";
|
||||||
print " goto cleanup;\n";
|
print " goto cleanup;\n";
|
||||||
print "\n";
|
print "\n";
|
||||||
|
} elsif (scalar(@{$calls{$_}->{ret_members}}) == 1) {
|
||||||
|
my $prefix = "";
|
||||||
|
my $proc_name = $calls{$_}->{ProcName};
|
||||||
|
|
||||||
|
if (! @args_list) {
|
||||||
|
push(@args_list, "conn");
|
||||||
|
$prefix = "Connect"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($calls{$_}->{ProcName} eq "GetSysinfo" or
|
||||||
|
$calls{$_}->{ProcName} eq "DomainXMLFromNative" or
|
||||||
|
$calls{$_}->{ProcName} eq "DomainXMLToNative") {
|
||||||
|
$prefix = "Connect"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "SupportsFeature") {
|
||||||
|
$prefix = "Drv"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "DomainDumpXML") {
|
||||||
|
$proc_name = "DomainGetXMLDesc"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "NetworkDumpXML") {
|
||||||
|
$proc_name = "NetworkGetXMLDesc"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "StoragePoolDumpXML") {
|
||||||
|
$proc_name = "StoragePoolGetXMLDesc"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "StorageVolDumpXML") {
|
||||||
|
$proc_name = "StorageVolGetXMLDesc"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "NodeDeviceDumpXML") {
|
||||||
|
$proc_name = "NodeDeviceGetXMLDesc"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "DomainSnapshotDumpXML") {
|
||||||
|
$proc_name = "DomainSnapshotGetXMLDesc"
|
||||||
|
} elsif ($calls{$_}->{ProcName} eq "DomainGetOsType") {
|
||||||
|
$proc_name = "DomainGetOSType"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($single_ret_by_ref) {
|
||||||
|
print " if (vir$prefix$proc_name(";
|
||||||
|
print join(', ', @args_list);
|
||||||
|
print ", &$single_ret_var) < 0)\n";
|
||||||
|
} else {
|
||||||
|
print " if (($single_ret_var = vir$prefix$proc_name(";
|
||||||
|
print join(', ', @args_list);
|
||||||
|
print "))$single_ret_check)\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
print " goto cleanup;\n";
|
||||||
|
print "\n";
|
||||||
|
|
||||||
|
if (@ret_list) {
|
||||||
|
print " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
print join(" \n", @ret_list);
|
||||||
|
print "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
print " rv = 0;\n";
|
print " rv = 0;\n";
|
||||||
@ -433,7 +633,10 @@ elsif ($opt_b) {
|
|||||||
|
|
||||||
print join("\n", @free_list);
|
print join("\n", @free_list);
|
||||||
|
|
||||||
|
if (@free_list) {
|
||||||
print "\n";
|
print "\n";
|
||||||
|
}
|
||||||
|
|
||||||
print " return rv;\n";
|
print " return rv;\n";
|
||||||
print "}\n";
|
print "}\n";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user