Skip to contentSkip to conversation

ptsname.3: Fix description of failure behaviour of ptsname_r

PATCH Michael Kerrisk (man-pages) 1 participant 1 message Apr 25, 2020 1 message not in the archive Man-pages: manual pages for Linux -- Sections 2, 3, 4, 5, and 7

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 9623994.qWbdUN1Qb5@omega

#1 lore raw
Quoted 30 lines · Bruno Haible

Hi,

The Linux man page for ptsname_r, when describing the behaviour in the error case, is
- not consistent with the future POSIX standard (POSIX Issue 8).
- not consistent with musl libc.

Find attached a patch to
- keep it consistent with what glibc does,
- make it consistent with musl libc,
- make it consistent with the future POSIX standard (POSIX Issue 8).

Details:

glibc's implementation of ptsname_r, when it fails, returns the error code as return value AND sets errno. See
https://sourceware.org/git/?p=glibc.git;a=blob;f=login/ptsname.c
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/mach/hurd/ptsname.c
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/ptsname.c

musl's implementation of ptsname_r, when it fails, returns the error code but does NOT set errno. See
https://git.musl-libc.org/cgit/musl/tree/src/misc/pty.c

The proposal to add ptsname_r to POSIX, with text
"If successful, the ptsname_r( ) function shall return zero. Otherwise,
an error number shall be returned to indicate the error."
has been accepted for inclusion in POSIX Issue 8.
http://austingroupbugs.net/view.php?id=508

Quoted 4 lines

Therefore a portable program should look at the return value from ptsname_r, NOT the errno value. The current text in the man page suggests to look at the errno value, which is wrong (because of musl libc) and not future-proof (because of future POSIX).

Thanks, Bruno. Patch (finally) applied.

Cheers,

Michael

Signature · 3 lines
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/