On Wed, Apr 09, 2003 at 07:40:58PM -0700, Jaime Fournier wrote:
> Please review,

        ...

> +  guint64 volume, tokenid, type, errorids;

        ...

> +  if (check_col (pinfo->cinfo, COL_INFO))
> +    col_append_fstr (pinfo->cinfo, COL_INFO,
> +                  " :FSID:%llu inode:%u type: %llu tokenid: %llu", volume,
> +                  inode, type, tokenid);
> +

To quote "doc/README.developer":

        Don't use "long long"; use "gint64" or "guint64", and only do so
                                                          ^^^^^^^^^^^^^^
        if G_HAVE_GINT64 is defined.  Make sure your code works even if
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        G_HAVE_GINT64 isn't defined, even if that means treating 64-bit
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        integral data types as opaque arrays of bytes on platforms where
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        it's not defined.  Also, don't assume you can use "%lld",
        ^^^^^^^^^^^^^^^^
        "%llu", "%llx", or "%llo" to print 64-bit integral data types -
        not all platforms support "%ll" for printing them.

> +  if (errorids)
> +    {
> +      if (check_col (pinfo->cinfo, COL_INFO))
> +     col_append_fstr (pinfo->cinfo, COL_INFO, " : errorids: %u", errorids);
> +    }

"%u" won't work for a 64-bit integral quantity on any 32-bit platform.

There are routines to format 64-bit quantities, stored as arrays of 8
bytes in network byte order, to decimal or hex strings; those routines
work even if the compiler and C library don't support 64-bit integral
quantities and "%ll[doux]".  See "epan/int-64bit.h".

To handle DCE RPC, they'd have to be changed to take a byte order
argument, or new routines to handle little-endian values would be
needed, or routines to fetch 64-bit quantities would need to be added.


Reply via email to