From: Collin Funk Date: Sat, 25 Jan 2025 05:36:11 +0000 (-0800) Subject: ptsname_r: Work around ptsname_r bug on Solaris 11 OmniOS. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=f52b2a3d465e9e7c533726cc3b2f61cbc3e586a2;p=gnulib.git ptsname_r: Work around ptsname_r bug on Solaris 11 OmniOS. * lib/ptsname_r.c (ptsname_r): Ensure the resulting buffer is not clobbered if it is too small on Solaris 11 OmniOS. * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): On Solaris 11 OmniOS, arrange to override ptsname_r. * doc/posix-functions/ptsname_r.texi: Document the bug. --- diff --git a/ChangeLog b/ChangeLog index 6f3cd5d7f0..e909e9abcf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2025-01-24 Collin Funk + ptsname_r: Work around ptsname_r bug on Solaris 11 OmniOS. + * lib/ptsname_r.c (ptsname_r): Ensure the resulting buffer is not + clobbered if it is too small on Solaris 11 OmniOS. + * m4/ptsname_r.m4 (gl_FUNC_PTSNAME_R): On Solaris 11 OmniOS, arrange to + override ptsname_r. + * doc/posix-functions/ptsname_r.texi: Document the bug. + strerrorname_np: Work around a bug on Solaris 11 OmniOS. * m4/strerrorname_np.m4 (gl_CHECK_STRERRORNAME_NP): Test if strerrorname_np returns NULL when given ERESTART or ESTRPIPE. diff --git a/doc/posix-functions/ptsname_r.texi b/doc/posix-functions/ptsname_r.texi index 1b50cc1378..5237f6a378 100644 --- a/doc/posix-functions/ptsname_r.texi +++ b/doc/posix-functions/ptsname_r.texi @@ -34,7 +34,7 @@ macOS 14, FreeBSD 14.0, Android 4.3. @item When this function fails with ERANGE, it stores an empty string as result on some platforms: -NetBSD 10.0. +NetBSD 10.0, Solaris 11 OmniOS. @end itemize Portability problems not fixed by Gnulib: diff --git a/lib/ptsname_r.c b/lib/ptsname_r.c index e2d9059088..3452afb844 100644 --- a/lib/ptsname_r.c +++ b/lib/ptsname_r.c @@ -68,7 +68,7 @@ ptsname_r (int fd, char *buf, size_t buflen) #undef ptsname_r { #if HAVE_ESSENTIALLY_WORKING_PTSNAME_R -# if defined __NetBSD__ +# if defined __NetBSD__ || defined __sun char tmpbuf[32]; if (buf == NULL) return EINVAL; diff --git a/m4/ptsname_r.m4 b/m4/ptsname_r.m4 index 36409fddf7..5cd6f91a07 100644 --- a/m4/ptsname_r.m4 +++ b/m4/ptsname_r.m4 @@ -1,5 +1,5 @@ # ptsname_r.m4 -# serial 10 +# serial 11 dnl Copyright (C) 2010-2025 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -79,8 +79,10 @@ main (void) dnl result buffer. We don't use an AC_RUN_IFELSE test here, because dnl while the bug exists on all platforms, only NetBSD/i386 has the dnl files /dev/ptyp[01] on which the bug becomes apparent. + dnl + dnl On Solaris 11 OmniOS the result buffer is clobbered as well. case "$host_os" in - netbsd*) REPLACE_PTSNAME_R=1 ;; + netbsd* | solaris*) REPLACE_PTSNAME_R=1 ;; esac fi fi