Branch
Hash :
19adc7a2
Author :
Date :
2025-09-09T12:50:18
Remove support for OSF/1. * all-modules: Update comments. * build-aux/install-reloc: Likewise. * gnulib-tool: Likewise. * gnulib-tool.py: Likewise. * gnulib-tool.sh: Likewise. * lib/calloc.c: Likewise. * lib/euidaccess.c: Likewise. * lib/fbufmode.c: Likewise. * lib/fflush.c: Likewise. * lib/fpending.c: Likewise. * lib/fpurge.c: Likewise. * lib/freadable.c: Likewise. * lib/freadahead.c: Likewise. * lib/freading.c: Likewise. * lib/freadptr.c: Likewise. * lib/freadseek.c: Likewise. * lib/fseeko.c: Likewise. * lib/fseterr.c: Likewise. * lib/fwritable.c: Likewise. * lib/fwriting.c: Likewise. * lib/get-permissions.c: Likewise. * lib/get-rusage-as.c: Likewise. * lib/getdomainname.c: Likewise. * lib/getpass.c: Likewise. * lib/glthread/spin.c: Likewise. * lib/idpriv-drop.c: Likewise. * lib/idpriv-droptemp.c: Likewise. * lib/log10l.c: Likewise. * lib/login_tty.c: Likewise. * lib/minmax.h: Likewise. * lib/mountlist.c: Likewise. * lib/netdb.in.h: Likewise. * lib/nproc.c: Likewise. * lib/passfd.c: Likewise. * lib/posix_openpt.c: Likewise. * lib/resource-ext.h: Likewise. * lib/safe-read.h: Likewise. * lib/safe-write.h: Likewise. * lib/stdint.in.h: Likewise. * lib/stdio.in.h: Likewise. * lib/string.in.h: Likewise. * lib/sys-limits.h: Likewise. * lib/termcap.h: Likewise. * lib/terminfo.h: Likewise. * lib/ttyname_r.c: Likewise. * lib/vasnprintf.c: Likewise. * lib/wait-process.c: Likewise. * m4/fmal.m4: Likewise. * m4/getdomainname.m4: Likewise. * m4/getopt.m4: Likewise. * m4/hypot.m4: Likewise. * m4/hypotf.m4: Likewise. * m4/hypotl.m4: Likewise. * m4/iconv.m4: Likewise. * m4/iconv_open-utf.m4: Likewise. * m4/imaxabs.m4: Likewise. * m4/imaxdiv.m4: Likewise. * m4/largefile.m4: Likewise. * m4/link-follow.m4: Likewise. * m4/locale-fr.m4: Likewise. * m4/locale-ja.m4: Likewise. * m4/locale_h.m4: Likewise. * m4/lock.m4: Likewise. * m4/log10l.m4: Likewise. * m4/mkstemp.m4: Likewise. * m4/mmap-anon.m4: Likewise. * m4/modf.m4: Likewise. * m4/modff.m4: Likewise. * m4/modfl.m4: Likewise. * m4/semaphore.m4: Likewise. * m4/socklen.m4: Likewise. * m4/strerror_r.m4: Likewise. * m4/terminfo.m4: Likewise. * m4/wcwidth.m4: Likewise. * posix-modules: Likewise. * tests/havelib/README: Likewise. * tests/init.sh: Likewise. * tests/socket-client.h: Likewise. * tests/socket-server.h: Likewise. * tests/test-echo.sh: Likewise. * tests/test-nonblocking-socket.h: Likewise. * tests/test-strtod.h: Likewise. * tests/test-strtof.h: Likewise.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
/* Determine name of a terminal.
Copyright (C) 2010-2025 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2010. */
#include <config.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>
#include <string.h>
#if defined __ANDROID__
# include <stdio.h>
#endif
int
ttyname_r (int fd, char *buf, size_t buflen)
#undef ttyname_r
{
#if defined __ANDROID__
/* On Android, read the result from the /proc file system. */
if (!isatty (fd))
/* We rely on isatty to set errno properly (i.e. EBADF or ENOTTY). */
return errno;
else if (buflen == 0)
return ERANGE;
else
{
char procfile[14+11+1];
char largerbuf[512];
ssize_t ret;
sprintf (procfile, "/proc/self/fd/%d", fd);
ret = (buflen < sizeof (largerbuf)
? readlink (procfile, largerbuf, sizeof (largerbuf))
: readlink (procfile, buf, buflen <= INT_MAX ? buflen : INT_MAX));
if (ret < 0)
return errno;
if ((size_t) ret >= buflen)
return ERANGE;
if (buflen < sizeof (largerbuf))
memcpy (buf, largerbuf, (size_t) ret);
buf[(size_t) ret] = '\0';
return 0;
}
#elif HAVE_TTYNAME_R
/* When ttyname_r exists, use it. */
/* This code is multithread-safe. */
/* On Solaris, ttyname_r always fails if buflen < 128.
So provide a buffer that is large enough. */
char largerbuf[512];
# if HAVE_POSIXDECL_TTYNAME_R
int err =
(buflen < sizeof (largerbuf)
? ttyname_r (fd, largerbuf, sizeof (largerbuf))
: ttyname_r (fd, buf, buflen <= INT_MAX ? buflen : INT_MAX));
if (err != 0)
return err;
if (buflen < sizeof (largerbuf))
{
size_t namelen = strlen (largerbuf) + 1;
if (namelen > buflen)
return ERANGE;
memcpy (buf, largerbuf, namelen);
}
# else
char *name =
(buflen < sizeof (largerbuf)
? ttyname_r (fd, largerbuf, sizeof (largerbuf))
: ttyname_r (fd, buf, buflen <= INT_MAX ? buflen : INT_MAX));
if (name == NULL)
return errno;
if (name != buf)
{
size_t namelen = strlen (name) + 1;
if (namelen > buflen)
return ERANGE;
memmove (buf, name, namelen);
}
# endif
return 0;
#elif HAVE_TTYNAME
/* Note: This is not multithread-safe. */
char *name;
size_t namelen;
name = ttyname (fd);
if (name == NULL)
return errno;
namelen = strlen (name) + 1;
if (namelen > buflen)
return ERANGE;
memcpy (buf, name, namelen);
return 0;
#else
/* Platforms like mingw: no ttys exist at all. */
return ENOTTY;
#endif
}