mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
rpc: Make the dispatch generator handle 'void name(void)' style procedures
The only 'void name(void)' style procedure in the protocol is 'close' that is handled special, but also programming errors like a missing _args or _ret suffix on the structs in the .x files can create such a situation by accident. Making the generator aware of this avoids bogus errors from the generator such as: Use of uninitialized value in exists at ./rpc/gendispatch.pl line 967. Also this allows to get rid of the -c option and the special case code for the 'close' procedure, as the generator handles it now correctly. Reported by Michal Privoznik
This commit is contained in:
parent
979b784be2
commit
fbd5465a5b
@ -44,7 +44,7 @@ QEMU_PROTOCOL = $(top_srcdir)/src/remote/qemu_protocol.x
|
||||
|
||||
$(srcdir)/remote_dispatch.h: $(srcdir)/../src/rpc/gendispatch.pl \
|
||||
$(REMOTE_PROTOCOL)
|
||||
$(AM_V_GEN)perl -w $(srcdir)/../src/rpc/gendispatch.pl -c -b remote \
|
||||
$(AM_V_GEN)perl -w $(srcdir)/../src/rpc/gendispatch.pl -b remote \
|
||||
$(REMOTE_PROTOCOL) > $@
|
||||
|
||||
$(srcdir)/qemu_dispatch.h: $(srcdir)/../src/rpc/gendispatch.pl \
|
||||
|
@ -188,7 +188,7 @@ REMOTE_DRIVER_PROTOCOL = $(REMOTE_PROTOCOL) $(QEMU_PROTOCOL)
|
||||
$(srcdir)/remote/remote_client_bodies.h: $(srcdir)/rpc/gendispatch.pl \
|
||||
$(REMOTE_PROTOCOL)
|
||||
$(AM_V_GEN)perl -w $(srcdir)/rpc/gendispatch.pl \
|
||||
-c -k remote $(REMOTE_PROTOCOL) > $@
|
||||
-k remote $(REMOTE_PROTOCOL) > $@
|
||||
|
||||
$(srcdir)/remote/qemu_client_bodies.h: $(srcdir)/rpc/gendispatch.pl \
|
||||
$(QEMU_PROTOCOL)
|
||||
|
@ -9,7 +9,7 @@
|
||||
# for both remote_protocol.x and qemu_protocol.x, you would run the
|
||||
# following:
|
||||
#
|
||||
# gendispatch.pl -c -t remote ../src/remote/remote_protocol.x
|
||||
# gendispatch.pl -t remote ../src/remote/remote_protocol.x
|
||||
# gendispatch.pl -t qemu ../src/remote/qemu_protocol.x
|
||||
#
|
||||
# By Richard Jones <rjones@redhat.com>
|
||||
@ -20,8 +20,8 @@ use strict;
|
||||
use Getopt::Std;
|
||||
|
||||
# Command line options.
|
||||
our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_c, $opt_b, $opt_k);
|
||||
getopts ('ptardcbk');
|
||||
our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_b, $opt_k);
|
||||
getopts ('ptardbk');
|
||||
|
||||
my $structprefix = shift or die "missing prefix argument";
|
||||
my $protocol = shift or die "missing protocol argument";
|
||||
@ -45,18 +45,6 @@ sub name_to_ProcName {
|
||||
# opinion about the name, args and return type of each RPC.
|
||||
my ($name, $ProcName, $id, $flags, %calls, @calls);
|
||||
|
||||
# only generate a close method if -c was passed
|
||||
if ($opt_c) {
|
||||
# REMOTE_PROC_CLOSE has no args or ret.
|
||||
$calls{close} = {
|
||||
name => "close",
|
||||
ProcName => "Close",
|
||||
UC_NAME => "CLOSE",
|
||||
args => "void",
|
||||
ret => "void",
|
||||
};
|
||||
}
|
||||
|
||||
my $collect_args_members = 0;
|
||||
my $collect_ret_members = 0;
|
||||
my $last_name;
|
||||
@ -143,6 +131,20 @@ while (<PROTOCOL>) {
|
||||
$flags = $3;
|
||||
$ProcName = name_to_ProcName ($name);
|
||||
|
||||
if (!exists $calls{$name}) {
|
||||
# that the argument and return value cases have not yet added
|
||||
# this procedure to the calls hash means that it has no arguments
|
||||
# and no return value. add it to the calls hash now because all
|
||||
# procedures have to be listed in the calls hash
|
||||
$calls{$name} = {
|
||||
name => $name,
|
||||
ProcName => $ProcName,
|
||||
UC_NAME => uc $name,
|
||||
args => "void",
|
||||
ret => "void"
|
||||
}
|
||||
}
|
||||
|
||||
if ($opt_b or $opt_k) {
|
||||
if (!($flags =~ m/^\s*\/\*\s*(\S+)\s+(\S+)\s*(.*)\*\/\s*$/)) {
|
||||
die "invalid generator flags for ${procprefix}_PROC_${name}"
|
||||
|
Loading…
x
Reference in New Issue
Block a user