* Cyril Hrubis:
Hi!
I was writing simple userspace code that prints the values from the
struct statx the line in question looks like:
printf("%" PRIu64 "\n", st.stx_size);
This unexpectedly gives me warning on x86_64:
warning: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type '__u64' {aka 'long long unsigned int'}
The correct format depends on whether you use struct statx from the
glibc headers or the Linux UAPI headers. glibc uses uint64_t, Linux
uses __u64. uint64_t in glibc prefers unsigned long if the type is
64-bit, Linux uses unsigned long long unconditionally.
One solution is to use %ju and cast to (uintmax_t). Other cast-based
approaches are possible as well.
I'm not happy with the situation because those casts reduce type safety
and may suppress relevant compiler warnings.
Thanks,
Florian