[Libguestfs] [PATCH nbdkit 2/4] server: Add nbdkit_shutdown() call.
Richard W.M. Jones
rjones at redhat.com
Sat Mar 7 10:07:18 UTC 2020
On Fri, Mar 06, 2020 at 04:36:40PM -0600, Eric Blake wrote:
> On 3/4/20 9:17 AM, Richard W.M. Jones wrote:
> >+ return INT64_C (1024*1024);
>
> This looks fishy. POSIX says that:
> https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html#tag_13_48
> "The argument in any instance of these macros shall be an unsuffixed
> integer constant with a value that does not exceed the limits for
> the corresponding type.
> ...For example, if uint_least64_t is a name for the type unsigned
> long long, then UINT64_C(0x123) might expand to the integer constant
> 0x123ULL."
>
> In fact, in glibc's /usr/include/stdint.h, we have:
>
> # if __WORDSIZE == 64
> # define INT64_C(c) c ## L
> # else
> # define INT64_C(c) c ## LL
> # endif
>
> Your code works by sheer luck (expanding to the three tokens '1024',
> '*', '1024L'), which in turn results in an expression with 64-bit
> type, but in general, INT64_C should ONLY be used on a single
> literal value, not an arbitrary expression.
>
> But you really don't need to use INT64_C; we can just rely on C's
> automatic type promotion to turn our 'int' expression 1024*1024 into
> the proper int64_t return value.
Yeah I don't know what I was thinking here. Obviously bogus :-/
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
More information about the Libguestfs
mailing list