[libvirt] [PATCH] sendkey: use consistent API convention

Eric Blake eblake at redhat.com
Wed Jun 15 16:37:49 UTC 2011


Even though rpc uses 'unsigned int' for the _val parameter that
passes the length of item<length>, the public libvirt APIs all
use 'int' and filter out lengths < 0, except for virDomainSendKey.

* include/libvirt/libvirt.h.in (virDomainSendKey): All other APIs
use int for array length.
* src/libvirt.c (virDomainSendKey): Adjust.
* src/driver.h (virDrvDomainSendKey): Likewise.
* daemon/remote_generator.pl: Likewise.
---

One approach to a question first raised here.
https://www.redhat.com/archives/libvir-list/2011-June/msg00681.html

The other approach would be to change all libvirt API to use
unsigned int for array sizes, to match rpc conventions and to
simplify code to not have to worry about negative sizes, but
that is more invasive.

 daemon/remote_generator.pl   |    2 +-
 include/libvirt/libvirt.h.in |    2 +-
 src/driver.h                 |    2 +-
 src/libvirt.c                |    4 ++--
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl
index 351866b..afec66c 100755
--- a/daemon/remote_generator.pl
+++ b/daemon/remote_generator.pl
@@ -1007,7 +1007,7 @@ elsif ($opt_k) {
                     my $limit = $3;

                     push(@args_list, "${type_name} *$arg_name");
-                    push(@args_list, "unsigned int ${arg_name}len");
+                    push(@args_list, "int ${arg_name}len");
                     push(@setters_list, "args.$arg_name.${arg_name}_val = $arg_name;");
                     push(@setters_list, "args.$arg_name.${arg_name}_len = ${arg_name}len;");
                     push(@args_check_list, { name => "\"$arg_name\"", arg => "${arg_name}len", limit => $limit });
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index ab22046..c684297 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -1788,7 +1788,7 @@ int virDomainSendKey(virDomainPtr domain,
                      unsigned int codeset,
                      unsigned int holdtime,
                      unsigned int *keycodes,
-                     unsigned int nkeycodes,
+                     int nkeycodes,
                      unsigned int flags);

 /*
diff --git a/src/driver.h b/src/driver.h
index d45575a..c880222 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -568,7 +568,7 @@ typedef int
     (*virDrvDomainSendKey)(virDomainPtr dom, unsigned int codeset,
                            unsigned int holdtime,
                            unsigned int *keycodes,
-                           unsigned int nkeycodes,
+                           int nkeycodes,
                            unsigned int flags);

 typedef char *
diff --git a/src/libvirt.c b/src/libvirt.c
index 36a90d1..b2e1d02 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -6653,7 +6653,7 @@ int virDomainSendKey(virDomainPtr domain,
                      unsigned int codeset,
                      unsigned int holdtime,
                      unsigned int *keycodes,
-                     unsigned int nkeycodes,
+                     int nkeycodes,
                      unsigned int flags)
 {
     virConnectPtr conn;
@@ -6663,7 +6663,7 @@ int virDomainSendKey(virDomainPtr domain,
     virResetLastError();

     if (keycodes == NULL ||
-        nkeycodes == 0 || nkeycodes > VIR_DOMAIN_SEND_KEY_MAX_KEYS) {
+        nkeycodes <= 0 || nkeycodes > VIR_DOMAIN_SEND_KEY_MAX_KEYS) {
         virLibDomainError(VIR_ERR_OPERATION_INVALID, __FUNCTION__);
         virDispatchError(NULL);
         return -1;
-- 
1.7.4.4




More information about the libvir-list mailing list