public inbox for linux-man@vger.kernel.org
 help / color / mirror / Atom feed
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 --]

  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