[pve-devel] [PATCH guest-common 1/5] guesthelpers: move/add safe comparison functions from lxc and qemu
Stefan Reiter
s.reiter at proxmox.com
Thu Feb 13 11:16:31 CET 2020
On 1/28/20 4:03 PM, Oguz Bektas wrote:
> move the safe_string_ne and safe_num_ne functions to guesthelpers to
> remove duplicate code.
>
> add the new safe_boolean_ne and typesafe_ne helper functions
>
> Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> ---
>
> these will be used in the partial fast plug function in this series
>
> PVE/GuestHelpers.pm | 49 +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/PVE/GuestHelpers.pm b/PVE/GuestHelpers.pm
> index 07a62ce..b7133d0 100644
> --- a/PVE/GuestHelpers.pm
> +++ b/PVE/GuestHelpers.pm
> @@ -14,6 +14,55 @@ use Scalar::Util qw(weaken);
>
> our $lockdir = '/var/lock/pve-manager';
>
> +# safe variable comparison functions
> +
> +sub safe_num_ne {
> + my ($a, $b) = @_;
> +
> + return 0 if !defined($a) && !defined($b);
> + return 1 if !defined($a);
> + return 1 if !defined($b);
> +
> + return $a != $b;
> +}
> +
> +sub safe_string_ne {
> + my ($a, $b) = @_;
> +
> + return 0 if !defined($a) && !defined($b);
> + return 1 if !defined($a);
> + return 1 if !defined($b);
> +
> + return $a ne $b;
> +}
> +
> +sub safe_boolean_ne {
> + my ($a, $b) = @_;
> +
> + # we don't check if value is defined, since undefined
> + # is false (so it's a valid boolean)
> +
> + # negate both values to normalize and compare
> + return !$a != !$b;
> +}
> +
> +sub typesafe_ne {
> + my ($a, $b, $type) = @_;
> +
> + return 0 if !defined($a) && !defined($b);
> + return 1 if !defined($a);
> + return 1 if !defined($b);
> +
> + if ($type eq 'string') {
> + return safe_string_ne($a, $b);
> + } elsif ($type eq 'number') {
This should include 'integer' too, since it's pretty much just a limited
'number'.
> + return safe_num_ne($a, $b);
> + } elsif ($type eq 'boolean') {
> + return safe_boolean_ne($a, $b);
> + }
I'd add a 'die "internal error bla bla ..."' part just to be safe.
Otherwise you just end the function without a return if $type is not
matched, and I don't trust Perl to do the right thing™ in that case at all.
> +}
> +
> +
> sub guest_migration_lock {
> my ($vmid, $timeout, $func, @param) = @_;
>
>
More information about the pve-devel
mailing list