On 7 Dec 2020, at 11:25, Toomas Soome <tso...@freebsd.org> wrote:
> @@ -183,28 +215,29 @@ xdr_u_int(xdr_t *xdr, unsigned *ip)
> static bool
> xdr_int64(xdr_t *xdr, int64_t *lp)
> {
> -     int hi;
> -     unsigned lo;
>       bool rv = false;
> 
> -     if (xdr->xdr_idx + sizeof (int64_t) > xdr->xdr_buf + xdr->xdr_buf_size)
> +     if (xdr->xdr_idx + sizeof(int64_t) > xdr->xdr_buf + xdr->xdr_buf_size)
>               return (rv);
> 
>       switch (xdr->xdr_op) {
>       case XDR_OP_ENCODE:
>               /* Encode value *lp, store to buf */
> -             hi = *lp >> 32;
> -             lo = *lp & UINT32_MAX;
> -             xdr->xdr_idx += xdr->xdr_putint(xdr, hi);
> -             xdr->xdr_idx += xdr->xdr_putint(xdr, lo);
> +             if (xdr->xdr_putint == _putint)
> +                     *(int64_t *)xdr->xdr_idx = htobe64(*lp);
> +             else
> +                     *(int64_t *)xdr->xdr_idx = *lp;

I don't know the details here, but inspecting the callback function and
comparing it against a known one to decide what to do is generally not
good practice. Can this be pushed down into the function in question,
up into the caller or additional information passed to be explicit
about this behaviour rather than brittle magic behaviour?

Jess




Jess

_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to