Re: [libvirt PATCH v2] scripts/rpcgen: fix 64 unsigned int test on macOS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 30, 2023 at 10:05:43AM -0500, Andrea Bolognani wrote:
> On Thu, Nov 30, 2023 at 09:30:28AM -0500, Andrea Bolognani wrote:
> > On Thu, Nov 30, 2023 at 02:07:55PM +0000, Daniel P. Berrangé wrote:
> > > +++ b/scripts/rpcgen/tests/test_demo.c
> > > @@ -3,6 +3,10 @@
> > >  #include <rpc/xdr.h>
> > >  #include <stdbool.h>
> > >
> > > +#ifdef __APPLE__
> > > +# define xdr_uint64_t xdr_u_int64_t
> > > +#endif
> >
> > For the long run, I think it would make more sense to have this
> > workaround as part of the generator's output, so that using
> > VIR_TEST_REGENERATE_OUTPUT will produce the same results regardless
> > of whether it's run on Linux or macOS. It would also avoid the need
> > to add a similar workaround somewhere in the library code the day we
> > start needing uint64_t anywhere in our RPC protocol.
> >
> > As a short-term solution, it's fine :)
> 
> Never mind, this very obviously doesn't pass muster:
> 
>   E       AssertionError: assert '\nvoid xdr_T...rn TRUE;\n}\n' ==
> '\nvoid xdr_T...rn TRUE;\n}\n'
>   E         Skipping 9072 identical leading characters in diff, use -v to show
>   E         - if (!xdr_uint64_t(xdrs, &objp->suh))
>   E         + if (!xdr_u_int64_t(xdrs, &objp->suh))
>   E         ?           +
>   E                   return FALSE;
>   E               if (!xdr_bool(xdrs, &objp->sb))
>   E                   return FALSE;...
>   E
>   E         ...Full output truncated (90 lines hidden), use '-vv' to show
> 
> My test setup was a bit wonky so I initially failed to catch it.
> Apologies for the noise.
> 
> The approach I suggested above would work, I think, but from a very
> quick look at the generator I wasn't able to figure out how it
> decides whether to use xdr_uint64_t or xdr_u_int64_t in the output.

In scripts/rpcgen/rpcgen/generator.py this method:

    def visit_type_unsignedhyper(self, obj, indent, context):
        if context == "func" and platform.system() == "Darwin":
            return "%su_int64_t" % indent
        else:
            return "%suint64_t" % indent


With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux