From: Seth McDonald <sethmcmail@pm.me>
To: Alejandro Colomar <alx@kernel.org>
Cc: linux-man@vger.kernel.org
Subject: Re: [PATCH v1 02/19] man/man2/access.2: HISTORY: Specify different access(2) prototypes
Date: Tue, 20 Jan 2026 12:13:32 +0000 [thread overview]
Message-ID: <aW9xYhsFpNxlo3C5@McDaDebianPC> (raw)
In-Reply-To: <aW7aOgFHOdCSiwUH@devuan>
[-- Attachment #1: Type: text/plain, Size: 3942 bytes --]
On Tue, Jan 20, 2026 at 02:34:08AM +0100, Alejandro Colomar wrote:
> Hi Seth,
>
> On Mon, Jan 19, 2026 at 11:55:06AM +0000, Seth McDonald wrote:
> > access(2) was specified in POSIX.1-1988 with the prototype
> > int access(char *path, int amode); [1]
> >
> > POSIX.1-1990 then changed the prototype to
> > int access(const char *path, int amode); [2]
>
> I suspect this is common to all APIs specified in those standards,
> right? Or is it specific to this API?
>
> 'const' was invented by ANSI C89, so I expect the change was around that
> time.
I believe the qualifier is indeed absent from any* specified prototype
in POSIX.1-1988. Which would make sense if it was first specified in
C89. Similar to how void pointers didn't first appear in POSIX.1-1988,
but after being added in C89, appeared in POSIX.1-1990.
*Interestingly enough, the appendix of POSIX.1-1988 (section B.2.2.4,
page 192) does acknowledge the const qualifier when describing the C
Standard's atoi(3) function. Which makes me think that POSIX was
actually aware of C89's upcoming additions to the language. Which in
turn begs the question: why, if they knew about it, was it not used in
the POSIX.1-1988 standard? Multiple other types and functions were
included in POSIX.1-1988 because they were (going to be) in C89.
This is just me thinking out loud here. I don't mind if the answer
isn't known. Although if the answer is relevant/broad enough, it may be
useful to mention it in standards(7). Something like "POSIX.1-1988
attempted to align its specification with the features/syntax of the
(not yet released) C89 standard, but for ABC reasons, could not use XYZ
language features."
> On the change itself, it wasn't a breaking change: programs written
> before the addition of const wouldn't notice that const has been added
> to the prototype.
>
> The change would be noticed by a program written today, but compiled in
> such an old system. However, I expect such a program to be aware that
> pre-ANSI C was different, and it would have to adapt to it anyway.
> const would be something that would have to be globally ignored, with
> something like
>
> #define const
>
> Given this should be of no importance to users, I'd prefer not
> documenting this difference.
>
> What do you think?
It's important to note that since the type 'const char*' is a pointer to
a const char, rather than a const pointer to a char, the type is
incompatible with its non-const counterpart. That is, 'const char*' and
'char*' are technically incompatible datatypes.
This can be seen by attempting to compile the following C program:
#include <stdio.h>
int say_hi(const char* str)
{
return printf("Hi %s", str);
}
int main(void)
{
int (*func)(char*) = say_hi;
func("Linux");
return 0;
}
On GCC at least, you should get an incompatible-pointer-types error.
Now imagine an old program that was built to be compatible with
specifically POSIX.1-1988, and which liked to use function pointers a
little too much. If it happened to use function pointers to functions
whose parameters weren't const-qualified in POSIX.1-1988, but were in
later versions, then it (to my understanding) cannot be linked to an
implementation of a later POSIX version without either errors or the
possibility of undefined behaviour.
While I cannot guarantee that such a program exists, what I can say is
that I have used pointers to library functions in my own code before.
So I don't think it'd be unusual for such a program to exist.
Given this, I do think this still may be notable enough to document.
Perhaps not in every such function - as that can get quite repetitive -
but instead as a property of the POSIX.1-1988 standard as a whole. But
feel free to let me know if there's something I missed here.
--
Take care,
Seth McDonald.
On-list: 2336 E8D2 FEB1 5300 692C 62A9 5839 6AD8 9243 D369
Off-list: 82B9 620E 53D0 A1AE 2D69 6111 C267 B002 0A90 0289
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 322 bytes --]
next prev parent reply other threads:[~2026-01-20 12:13 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-19 11:54 [PATCH v1 00/19] man/man2/*: Update history of syscalls A-CH Seth McDonald
2026-01-19 11:54 ` [PATCH v1 01/19] man/man2/access.2: HISTORY: Update first POSIX appearance of access(2) Seth McDonald
2026-01-19 11:55 ` [PATCH v1 02/19] man/man2/access.2: HISTORY: Specify different access(2) prototypes Seth McDonald
2026-01-20 1:34 ` Alejandro Colomar
2026-01-20 12:13 ` Seth McDonald [this message]
2026-01-20 13:52 ` History of const in C++, C89, and POSIX.1-1988 (was: [PATCH v1 02/19] man/man2/access.2: HISTORY: Specify different) Alejandro Colomar
2026-01-20 13:59 ` Alejandro Colomar
2026-01-21 6:12 ` Seth McDonald
2026-01-21 14:41 ` On restrict (a broken qualifier) Alejandro Colomar
2026-01-21 14:44 ` History of const in C++, C89, and POSIX.1-1988 (was: [PATCH v1 02/19] man/man2/access.2: HISTORY: Specify different) Alejandro Colomar
2026-01-19 11:55 ` [PATCH v1 03/19] man/man2/access.2: HISTORY: Update first POSIX appearance of faccessat(2) Seth McDonald
2026-01-19 11:55 ` [PATCH v1 04/19] man/man2/alarm.2: HISTORY: Update first POSIX appearance of alarm(2) Seth McDonald
2026-01-19 11:55 ` [PATCH v1 05/19] man/man2/chdir.2: HISTORY: Split chdir(2) and fchdir(2) Seth McDonald
2026-01-19 11:55 ` [PATCH v1 06/19] man/man2/chdir.2: HISTORY: Update first POSIX appearance of chdir(2) Seth McDonald
2026-01-19 11:56 ` [PATCH v1 07/19] man/man2/chdir.2: HISTORY: Specify different chdir(2) prototypes Seth McDonald
2026-01-19 11:56 ` [PATCH v1 08/19] man/man2/chdir.2: HISTORY: Update first POSIX appearance of fchdir(2) Seth McDonald
2026-01-19 11:56 ` [PATCH v1 09/19] man/man2/chmod.2: HISTORY: Split chmod(2) and fchmod(2) Seth McDonald
2026-01-19 11:56 ` [PATCH v1 10/19] man/man2/chmod.2: HISTORY: Update first POSIX appearance of chmod(2) Seth McDonald
2026-01-19 11:57 ` [PATCH v1 11/19] man/man2/chmod.2: HISTORY: Specify different chmod(2) prototypes Seth McDonald
2026-01-19 11:57 ` [PATCH v1 12/19] man/man2/chmod.2: HISTORY: Update first POSIX appearance of fchmod(2) Seth McDonald
2026-01-19 11:57 ` [PATCH v1 13/19] man/man2/chmod.2: HISTORY: Update first POSIX appearance of AT_SYMLINK_NOFOLLOW Seth McDonald
2026-01-19 11:57 ` [PATCH v1 14/19] man/man2/chown.2: HISTORY: Split chown(2), fchown(2), and lchown(2) Seth McDonald
2026-01-19 11:57 ` [PATCH v1 15/19] man/man2/chown.2: HISTORY: Update first POSIX appearance of chown(2) Seth McDonald
2026-01-19 11:58 ` [PATCH v1 16/19] man/man2/chown.2: HISTORY: Specify different chown(2) prototypes Seth McDonald
2026-01-19 11:58 ` [PATCH v1 17/19] man/man2/chown.2: HISTORY: Update first SUS appearance of fchown(2) Seth McDonald
2026-01-19 11:58 ` [PATCH v1 18/19] man/man2/chown.2: HISTORY: Update first POSIX appearance of lchown(2) Seth McDonald
2026-01-19 11:58 ` [PATCH v1 19/19] man/man2/chroot.2: HISTORY: Update first SUS appearance of chroot(2) Seth McDonald
2026-01-20 1:50 ` [PATCH v1 00/19] man/man2/*: Update history of syscalls A-CH Alejandro Colomar
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=aW9xYhsFpNxlo3C5@McDaDebianPC \
--to=sethmcmail@pm.me \
--cc=alx@kernel.org \
--cc=linux-man@vger.kernel.org \
/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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox