The on-the-wire protocol is identical; XDR guarantees that both 'hyper' and 'unsigned hyper' are transmitted as 8 bytes. * src/remote/remote_protocol.x (remote_get_version_ret) (remote_get_lib_version_ret): Match public API. * daemon/remote_generator.pl: Drop special case. * src/remote_protocol-structs: Reflect updated type. --- v2: fix src/remote_protocol-structs v1: reviewed but no ACK at: https://www.redhat.com/archives/libvir-list/2011-May/msg00718.html daemon/remote_generator.pl | 23 +++++++++-------------- src/remote/remote_protocol.x | 4 ++-- src/remote_protocol-structs | 4 ++-- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index a3b8421..1fc3b17 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -504,13 +504,6 @@ elsif ($opt_b) { $type_name = $1 if ($1); $type_name .= "long"; - if ($type_name eq "long" and - $calls{$_}->{ProcName} =~ m/^Get(Lib)?Version$/) { - # SPECIAL: virConnectGet(Lib)?Version uses unsigned long - # in public API but hyper in XDR protocol - $type_name = "unsigned long"; - } - push(@vars_list, "$type_name $ret_name"); push(@ret_list, "ret->$ret_name = $ret_name;"); $single_ret_var = $ret_name; @@ -995,19 +988,21 @@ elsif ($opt_k) { $single_ret_type = "int"; } elsif ($ret_member =~ m/^unsigned hyper (\S+);/) { my $arg_name = $1; - push(@ret_list, "rv = ret.$arg_name;"); - $single_ret_var = "unsigned long rv = 0"; - $single_ret_type = "unsigned long"; - } elsif ($ret_member =~ m/^hyper (\S+);/) { - my $arg_name = $1; - if ($call->{ProcName} =~ m/Get(Lib)?Version/) { push(@args_list, "unsigned long *$arg_name"); push(@ret_list, "if ($arg_name) *$arg_name = ret.$arg_name;"); push(@ret_list, "rv = 0;"); $single_ret_var = "int rv = -1"; $single_ret_type = "int"; - } elsif ($call->{ProcName} eq "NodeGetFreeMemory") { + } else { + push(@ret_list, "rv = ret.$arg_name;"); + $single_ret_var = "unsigned long rv = 0"; + $single_ret_type = "unsigned long"; + } + } elsif ($ret_member =~ m/^hyper (\S+);/) { + my $arg_name = $1; + + if ($call->{ProcName} eq "NodeGetFreeMemory") { push(@ret_list, "rv = ret.$arg_name;"); $single_ret_var = "unsigned long long rv = 0"; $single_ret_type = "unsigned long long"; diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 5932b2c..c784dba 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -391,11 +391,11 @@ struct remote_get_type_ret { }; struct remote_get_version_ret { - hyper hv_ver; + unsigned hyper hv_ver; }; struct remote_get_lib_version_ret { - hyper lib_ver; + unsigned hyper lib_ver; }; struct remote_get_hostname_ret { diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 5b43cb4..414b4d5 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -115,10 +115,10 @@ struct remote_get_type_ret { remote_nonnull_string type; }; struct remote_get_version_ret { - int64_t hv_ver; + uint64_t hv_ver; }; struct remote_get_lib_version_ret { - int64_t lib_ver; + uint64_t lib_ver; }; struct remote_get_hostname_ret { remote_nonnull_string hostname; -- 1.7.4.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list