hi, On Thu, Feb 13, 2020 at 11:16:31AM +0100, Stefan Reiter wrote: > 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.bek...@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'.
right, i'll add that > > > + 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. yeah, makes sense. > > > +} > > + > > + > > sub guest_migration_lock { > > my ($vmid, $timeout, $func, @param) = @_; > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel