Hi Martin, On Sun, Jul 07, 2024 at 09:15:23AM GMT, Martin Uecker wrote: > > Hi Alejandro, > > if in caller it is known that endptr has access mode "write_only" > then it can conclude that the content of *endptr has access mode > "none", couldn't it? Hmmmm. I think you're correct. I'll incorporate that and see how it affects the caller. At first glance, I think it would result in nptr access(read_only) alias *endptr endptr access(write_only) unique errno access(read_write) unique *endptr access(none) alias nptr Which is actually having perfect information, regardless of 'restrict' on nptr. :-) > You also need to discuss backwards compatibility. Changing > the type of those functions can break valid programs. I might be forgetting about other possibilities, but the only one I had in mind that could break API would be function pointers. However, a small experiment seems to say it doesn't: $ cat strtolp.c #include <stdlib.h> long alx_strtol(const char *nptr, char **restrict endptr, int base) { return strtol(nptr, endptr, base); } typedef long (*strtolp_t)(const char *restrict nptr, char **restrict endptr, int base); typedef long (*strtolpnr_t)(const char *nptr, char **restrict endptr, int base); int main(void) { [[maybe_unused]] strtolp_t a = &strtol; [[maybe_unused]] strtolpnr_t b = &strtol; [[maybe_unused]] strtolp_t c = &alx_strtol; [[maybe_unused]] strtolpnr_t d = &alx_strtol; } $ cc -Wall -Wextra strtolp.c $ Anyway, I'll say that it doesn't seem to break API. > You would > need to make a case that this is unlikely to affect any real > world program. If you have something else in mind that could break API, please let me know, and I'll add it to the experiments. Thanks! Have a lovely day! Alex -- <https://www.alejandro-colomar.es/>
Attachment:
signature.asc
Description: PGP signature