From: Rich Felker <dalias@libc.org>
To: Florian Weimer <fweimer@redhat.com>
Cc: musl@lists.openwall.com
Subject: Re: [musl] [PATCH] add statx
Date: Tue, 28 Jan 2020 08:18:45 -0500 [thread overview]
Message-ID: <20200128131844.GD30412@brightrain.aerifal.cx> (raw)
In-Reply-To: <87blqneuci.fsf@oldenburg2.str.redhat.com>
On Tue, Jan 28, 2020 at 11:41:33AM +0100, Florian Weimer wrote:
> * Rich Felker:
>
> >> >> We received feedback that our headers are not useful due to the
> >> >> __u64/uint64_t mismatch.
> >> >>
> >> >> <https://sourceware.org/bugzilla/show_bug.cgi?id=25292
> >> >> <https://sourceware.org/ml/libc-alpha/2019-12/msg00631.html>
> >> >
> >> > Uhg. That change seems unfortunate since it's incompatible with
> >> > theoretical future archs having 128-bit long long -- an idea I'm not
> >> > much a fan of, but don't actually want to preclude. Is there a reason
> >> > to actually care about compatibility with the kernel types?
> >>
> >> Yes, printf format strings. 8-(
> >
> > Why not let ppl get the warnings and fix them by casting to an
> > appropriate type to print. I prefer [u]intmax_t anyway to avoid the
> > PRIu64 etc. mess that makes your format strings unreadable and that
> > interferes with translation (*).
>
> I'm concerned that such casts hide or even introduce bugs, like casting
> tv_sec to int.
As you've found, people will do incorrect casts regardless, in places
where it makes a bigger difference than here, where using fixed basic
types isn't an option. I don't think the solution is throwing away
proper semantic use of types.
> Here's an example from the MySQL sources:
>
> int my_timeval_to_str(const struct timeval *tm, char *to, uint dec)
> {
> int len= sprintf(to, "%d", (int) tm->tv_sec);
> if (dec)
> len+= my_useconds_to_str(to + len, tm->tv_usec, dec);
> return len;
> }
In the particular case of time, we should probably teach GCC to issue
warnings (-Wy2038?) for casts from an expression whose type was
declared via a typedef named time_t (I know GCC tracks knowledge of
the typedef name used, since it shows it in other warnings) to a type
smaller than 64-bit.
> That's why the kernel always uses unsigned long long for __u64, which
> seems a reasonable trade-off to me. It will make porting to 128-bit
> architectures difficult. But I think we should focus on the
> architectures we have today.
I disagree strongly with the last sentence. Designing an *API* in a
way that's not compatible with anything but long long == 64-bit is bad
API design. Arguably you could get into having something like
k_[u]intNN_t or similar, and use these, but I feel like that's just
gratuitous ugliness. The userspace type for 64-bit fixed-size fields
is [u]int64_t and we should be promoting its consistent usage, not
fragmenting things around kernel uapi mistakes. (Perhaps kernel uapi
headers should be fixed so that, when __KERNEL__ is not defined, they
include <stdint.h> and define __u64 etc. in terms of the stdint
types?)
Rich
next prev parent reply other threads:[~2020-01-28 13:19 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-19 12:12 Ben Noordhuis
2020-01-24 8:38 ` [musl] " Ben Noordhuis
2020-01-24 14:01 ` Rich Felker
2020-01-28 8:59 ` Ben Noordhuis
2020-01-28 13:39 ` Rich Felker
2020-01-24 14:00 ` [musl] " Rich Felker
2020-01-24 15:27 ` Florian Weimer
2020-01-24 15:54 ` Rich Felker
2020-01-24 16:12 ` Florian Weimer
2020-01-24 16:29 ` Rich Felker
2020-01-28 10:41 ` Florian Weimer
2020-01-28 13:18 ` Rich Felker [this message]
2020-02-17 9:10 ` Florian Weimer
2020-02-17 15:29 ` Rich Felker
2022-08-27 14:57 ` [musl] [PATCH 0/1] " Duncan Bellamy
2022-08-27 14:57 ` [musl] [PATCH 1/1] resubmitting old statx patch with changes Duncan Bellamy
2022-08-27 18:10 ` Rich Felker
2022-08-27 23:11 ` Dunk
2022-08-27 23:11 ` [musl] [PATCH 0/2] V2 Duncan Bellamy
2022-08-27 23:11 ` [musl] [PATCH 1/2] V2 resubmitting old statx patch with changes Duncan Bellamy
2022-08-29 13:50 ` [musl] " Dunk
2022-08-27 23:11 ` [musl] [PATCH 2/2] V2 src/stat/fstatat.c use new statx define Duncan Bellamy
2022-08-31 19:07 ` [musl] [PATCH 0/2] V3 Duncan Bellamy
2022-08-31 19:07 ` [musl] [PATCH 1/2] V3 resubmitting old statx patch with changes Duncan Bellamy
2022-08-31 19:07 ` [musl] [PATCH 2/2] V3 src/stat/fstatat.c use new statx define Duncan Bellamy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200128131844.GD30412@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=fweimer@redhat.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).