[libvirt] [PATCH 3/5] util: Export remoteDeserializeTypedParameters internally via util

Ján Tomko jtomko at redhat.com
Wed Feb 3 09:48:35 UTC 2016


On Tue, Feb 02, 2016 at 04:46:19PM +0100, Erik Skultety wrote:
> Currently, the deserializer is hardcoded into remote_driver which makes
> it impossible for admin to use it. One way to achieve a shared implementation
> (besides moving the code to another module) would be pass @ret_params_val as a
> void pointer as opposed to the remote_typed_param pointer and add a new extra
> argument specifying which of those two protocols is being used and typecast
> the pointer at the function entry. An example from remote_protocol:
> 
> struct remote_typed_param_value {
>         int type;
>         union {
>                 int i;
>                 u_int ui;
>                 int64_t l;
>                 uint64_t ul;
>                 double d;
>                 int b;
>                 remote_nonnull_string s;
>         } remote_typed_param_value_u;
> };
> typedef struct remote_typed_param_value remote_typed_param_value;
> 
> struct remote_typed_param {
>         remote_nonnull_string field;
>         remote_typed_param_value value;
> };
> 
> That would leave us with a bunch of if-then-elses that needed to be used across
> the method. This patch takes the other approach using the new datatype
> introduced in one of earlier commits.
> ---
>  daemon/remote.c            | 125 +++++++++-----------------------------------
>  src/libvirt_private.syms   |   1 +
>  src/remote/remote_driver.c | 107 ++------------------------------------
>  src/rpc/gendispatch.pl     |   9 ++--
>  src/util/virtypedparam.c   | 127 +++++++++++++++++++++++++++++++++++++++++++++
>  src/util/virtypedparam.h   |   7 +++
>  6 files changed, 169 insertions(+), 207 deletions(-)

> @@ -1747,105 +1749,6 @@ remoteSerializeTypedParameters(virTypedParameterPtr params,
>      return rv;
>  }
>  
> -/* Helper to deserialize typed parameters. */
> -static int
> -deserializeTypedParameters(const char *funcname,

What is the point of the funcname parameter?
Dropping it first would make it easier to unify the code paths.

> +    /* Deserialise the result. */
> +    for (i = 0; i < remote_params_len; ++i) {
> +        virTypedParameterPtr param = *params + i;
> +        virTypedParameterRemotePtr remote_param = remote_params + i;

Please use (*params)[i] and remote_params[i].

Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160203/03413377/attachment-0001.sig>


More information about the libvir-list mailing list