2019-01-01 00:11:28 +00:00
|
|
|
/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 04:58:11 +00:00
|
|
|
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.
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
|
|
|
The GNU C Library 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
|
2001-07-06 04:58:11 +00:00
|
|
|
Lesser General Public License for more details.
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
2001-07-06 04:58:11 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-09 23:18:22 +00:00
|
|
|
License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
|
|
|
#include <errno.h>
|
|
|
|
#include <limits.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
#include <dirent.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/stat.h>
|
2006-12-05 21:28:15 +00:00
|
|
|
#include <termios.h>
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
#include <unistd.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
2012-03-20 23:00:23 +00:00
|
|
|
#include <_itoa.h>
|
1998-10-29 15:17:25 +00:00
|
|
|
|
2017-01-27 14:59:59 +00:00
|
|
|
#include "ttyname.h"
|
|
|
|
|
2002-03-13 08:59:47 +00:00
|
|
|
#if 0
|
|
|
|
/* Is this used anywhere? It is not exported. */
|
Update.
1999-04-28 Ulrich Drepper <drepper@cygnus.com>
* argp/argp-ba.c (argp_program_bug_address): Don't initialize with 0.
* argp/argp-parse.c (_argp_hang): Likewise.
* argp/argp-pv.c (argp_program_version): Likewise.
* argp/argp-pvh.c (argp_program_version_hook): Likewise.
* inet/ether_hton.c (ether_hton, startp): Likewise.
* inet/ether_ntoh.c (ether_ntoh, startp): Likewise.
* inet/getnetgrent_r.c (setup, startp): Likewise.
* intl/loadmsgcat.c (_nl_msg_cat_cntr): Likewise.
* intl/localealias.c (string_space, string_space_act, string_space_max,
nmap, maxmap): Likewise.
* libio/iopopen.c (proc_file_chain): Likewise.
* libio/oldiopopen.c (old_proc_file_chain): Likewise.
* locale/lc-collate.c (__collate_table, __collate_extra,
__collate_element_hash, __collate_element_strings,
__collate_element_values): Likewise.
* malloc/mcheck.c (mcheck_used): Likewise.
* malloc/mtrace.c (added_atexit_handler): Likewise.
* malloc/set-freeres.c (already_called): Likewise.
* misc/getpass.c (getpass) [buf, bufsize]: Likewise.
* misc/syslog.c (LogStat, LogTag): Likewise.
* nss/XXX-lookup.c (DATABASE_NAME_SYMBOL): Likewise.
* nss/getXXbyYY_r.c (startp): Likewise.
* posix/getopt.c (optarg, __getopt_initialized): Likewise.
* posix/regex.c (init_syntax_once) [done]: Likewise.
(debug): Likewise.
* string/strfry.c (init): Likewise.
* sunrpc/svc_run.c (svc_top): Likewise.
* posix/euidaccess.c (have_ids): Likewise.
* sysdeps/unix/sysv/linux/poll.c (must_emulate): Likewise.
* sysdeps/unix/sysv/linux/ttyname.c (__ttyname, namelen): Likewise.
* time/getdate.c (getdate_err): Likewise.
* time/tzfile.c (transitions, type_idxs, types, zone_names, leaps):
Likewise.
* time/tzset.c (old_tz, is_initialized): Likewise.
* inet/getnameinfo.c (nrl_domainname): Rewrite to allow initialization
of static data with zero.
* signal/allocrtsig.c (init): Likewise.
* string/Makefile (routines): Add strchrnul.
* string/Versions [GLIBC_2.1.1]: Add strchrnul.
* string/string.c: Add strchrnul prototype.
* include/string.h: Add __strchrnul prototype.
* sysdeps/generic/strchrnul.c: New file.
* sysdeps/i386/strchrnul.S: New file.
* sysdeps/i386/bits/string.c: Add strchrnul optimization.
* sysdeps/i386/i486/bits/string.c: Likewise.
* argp/argp-help.c (argp_args_usage): Use __strchrnul.
* inet/ether_line.c (ether_line): Likewise.
* nscd/nscd_conf.c (nscd_parse_file): Likewise.
* nss/nsswitch.c (nss_parse_file): Likewise.
* posix/execvp.c (execvp): Likewise.
* posix/fnmatch.c (internal_fnmatch): Likewise.
* resolv/res_hconf.c (_res_hconv_init): Likewise.
* resolv/res_init.c (res_init): Likewise.
* stdlib/fmtmsg.c (init): Likewise.
* stdlib/getsubopt.c (getsubopt): Likewise.
* catgets/catgets.c (catopen): Only allocate one memory block.
(catclose): Only one free call necessary.
* catgets/open_catalog.c (__open_catalog): Simplify handling of
file descriptor.
* ctype/ctype-extn.c: Make __toascii_l and __isascii_l alias instead
of real functions. Simplify _tolower and _toupper.
* grp/initgroups.c (compat_call): Remove unnecessary use of pointer
variable.
* iconv/gconv.h (struct gconv_info): Change data element from pointer
to array of size 0.
* iconv/gconv_open.c (__gconv_open): Allocate structures accordingly.
* iconv/gconv_close.c (__gconv_close): Don't free data.
* iconv/gconv_conf.c (add_alias): Avoid searching in tree twice to
insert new alias.
* iconv/gconv_db.c (add_derivation): More efficient copying. Check
for error while inserting in tree.
* include/time.h: Pretty print.
* inet/ruserpass.c: Rewrite use of toktab to avoid string pointers
in table and lots of relocations.
* posix/regex.c (regerror): Rewrite use of re_error_msgid to avoid
string pointers in table and lots of relocations.
* intl/finddomain.c: Remove definition of strchr macro.
* io/ftw.c (nftw_arr, ftw_arr): Make const.
* locale/loadlocale.c (_nl_load_locale): Optimize string copying.
* locale/localeinfo.h (_nl_category_names): Change into an array with
fixed width char string elements.
* locale/setlocale.c (_nl_category_names): Likewise.
(_nl_current): Make global.
* locale/nl_langinfo.c (nldata): Removed. Use _nl_current now.
* malloc/Makefile (distribute): Add stackinfo.h.
* sysdeps/generic/stackinfo.h: New file.
* sysdeps/i386/stackinfo.h: New file.
* posix/execl.c: Use stackinfo.h in optimizing alloca use.
* posix/execle.c: Likewise.
* posix/execlp.c: Likewise.
* nis/nis_table.c (__create_ib_request): Always use realloc.
* posix/execvp.c (execute): Rename to script_execute and keep only
code to execute using shell.
(execvp): Call execv directly and only fall back on script_execute.
* resolv/inet_net_pton.c (inet_net_pton_ipv4): Remove digits define
and always use xdigits instead.
* resolv/res_init.c (res_init): Use rawmemchr instead of strchr
where appropriate.
* stdlib/fpioconst.h (__tens): New declaration.
(struct mp_power): Remove array, add arrayoff element.
* stdlib/fpioconst.c: Replace definitions of _ten_p* arrays by one
__tens array and add in _fpioconst_pow10 offsets into __tens.
* stdio-common/printf_fp.c: Rewrite to use new __tens array.
* stdlib/strtod.c: Likewise.
* stdlib/a64l.c (a64l_table): Avoid unnecessary elements.
* stdlib/exit.c: Rewrite to use __exit_funcs being as sign for end
of the list.
* stdlib/atexit.c (__exit_funcs): Don't initialize.
* stdlib/fmtmsg.c (keywords): Make name element fixed width array.
* sunrpc/clnt_perr.c: Rewrite clnt_sperrno and auth_errmsg to use
a single and an array with offsets.
* sunrpc/des_soft.c (partab): Make it const.
* sunrpc/key_call.c (trytimeout, tottimeout): Make const.
(__key_encryptsession_pk_LOCAL): Don't initialize with 0.
(__key_decryptsession_pk_LOCAL): Likewise.
(__key_gendes_LOCAL): Likewise.
(MESSENGER): Mark const.
(key_call_private_main): Don't initialize with 0.
(use_keyenvoy): Don't initialize with 0.
(key_call): Rewrite to reverse logic of use_doors variable.
* sunrpc/netname.c (OPSYS): Define as array, not pointer.
(startp): Don't initialize with zero.
* sunrpc/openchild.c (_openchild): Make first argument const.
* sunrpc/pmap_rmt.c (timeout): Mark const.
* sunrpc/xcrypt.c (hex): Likewise.
* sysdeps/unix/sysv/linux/getcwd.c: Rewrite to allow omitting
initialization of global variables.
* sysdeps/unix/sysv/linux/getpt.c: Likewise.
* sysdeps/unix/sysv/linux/if_index.c: Likewise.
* termios/tcgetsid.c: Likewise.
* sysdeps/unix/sysv/linux/i386/dl-procinfo.h (x86_cap_flags): Change
fxsr to osfxsr.
* time/tzfile.c (__tzfile_read): Rewrite to allocate only one memory
block. Add function to free memory if wanted.
* time/tzset.c (tzset_internal): Pass extra argument to __tzfile_read.
* wcsmbs/wcsmbsload.c (to_wc, to_mb): Correct initializers.
* wcsmbs/wmemset.c: Little code optimization.
1999-04-28 23:13:52 +00:00
|
|
|
char *__ttyname;
|
2002-03-13 08:59:47 +00:00
|
|
|
#endif
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
static char *getttyname (const char *dev, const struct stat64 *mytty,
|
|
|
|
int save, int *dostat);
|
2000-08-15 06:12:25 +00:00
|
|
|
|
2002-11-01 20:44:15 +00:00
|
|
|
libc_freeres_ptr (static char *getttyname_name);
|
2000-08-15 06:12:25 +00:00
|
|
|
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
static char *
|
2017-08-31 16:25:55 +00:00
|
|
|
attribute_compat_text_section
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
getttyname (const char *dev, const struct stat64 *mytty, int save, int *dostat)
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
{
|
Update.
1999-04-28 Ulrich Drepper <drepper@cygnus.com>
* argp/argp-ba.c (argp_program_bug_address): Don't initialize with 0.
* argp/argp-parse.c (_argp_hang): Likewise.
* argp/argp-pv.c (argp_program_version): Likewise.
* argp/argp-pvh.c (argp_program_version_hook): Likewise.
* inet/ether_hton.c (ether_hton, startp): Likewise.
* inet/ether_ntoh.c (ether_ntoh, startp): Likewise.
* inet/getnetgrent_r.c (setup, startp): Likewise.
* intl/loadmsgcat.c (_nl_msg_cat_cntr): Likewise.
* intl/localealias.c (string_space, string_space_act, string_space_max,
nmap, maxmap): Likewise.
* libio/iopopen.c (proc_file_chain): Likewise.
* libio/oldiopopen.c (old_proc_file_chain): Likewise.
* locale/lc-collate.c (__collate_table, __collate_extra,
__collate_element_hash, __collate_element_strings,
__collate_element_values): Likewise.
* malloc/mcheck.c (mcheck_used): Likewise.
* malloc/mtrace.c (added_atexit_handler): Likewise.
* malloc/set-freeres.c (already_called): Likewise.
* misc/getpass.c (getpass) [buf, bufsize]: Likewise.
* misc/syslog.c (LogStat, LogTag): Likewise.
* nss/XXX-lookup.c (DATABASE_NAME_SYMBOL): Likewise.
* nss/getXXbyYY_r.c (startp): Likewise.
* posix/getopt.c (optarg, __getopt_initialized): Likewise.
* posix/regex.c (init_syntax_once) [done]: Likewise.
(debug): Likewise.
* string/strfry.c (init): Likewise.
* sunrpc/svc_run.c (svc_top): Likewise.
* posix/euidaccess.c (have_ids): Likewise.
* sysdeps/unix/sysv/linux/poll.c (must_emulate): Likewise.
* sysdeps/unix/sysv/linux/ttyname.c (__ttyname, namelen): Likewise.
* time/getdate.c (getdate_err): Likewise.
* time/tzfile.c (transitions, type_idxs, types, zone_names, leaps):
Likewise.
* time/tzset.c (old_tz, is_initialized): Likewise.
* inet/getnameinfo.c (nrl_domainname): Rewrite to allow initialization
of static data with zero.
* signal/allocrtsig.c (init): Likewise.
* string/Makefile (routines): Add strchrnul.
* string/Versions [GLIBC_2.1.1]: Add strchrnul.
* string/string.c: Add strchrnul prototype.
* include/string.h: Add __strchrnul prototype.
* sysdeps/generic/strchrnul.c: New file.
* sysdeps/i386/strchrnul.S: New file.
* sysdeps/i386/bits/string.c: Add strchrnul optimization.
* sysdeps/i386/i486/bits/string.c: Likewise.
* argp/argp-help.c (argp_args_usage): Use __strchrnul.
* inet/ether_line.c (ether_line): Likewise.
* nscd/nscd_conf.c (nscd_parse_file): Likewise.
* nss/nsswitch.c (nss_parse_file): Likewise.
* posix/execvp.c (execvp): Likewise.
* posix/fnmatch.c (internal_fnmatch): Likewise.
* resolv/res_hconf.c (_res_hconv_init): Likewise.
* resolv/res_init.c (res_init): Likewise.
* stdlib/fmtmsg.c (init): Likewise.
* stdlib/getsubopt.c (getsubopt): Likewise.
* catgets/catgets.c (catopen): Only allocate one memory block.
(catclose): Only one free call necessary.
* catgets/open_catalog.c (__open_catalog): Simplify handling of
file descriptor.
* ctype/ctype-extn.c: Make __toascii_l and __isascii_l alias instead
of real functions. Simplify _tolower and _toupper.
* grp/initgroups.c (compat_call): Remove unnecessary use of pointer
variable.
* iconv/gconv.h (struct gconv_info): Change data element from pointer
to array of size 0.
* iconv/gconv_open.c (__gconv_open): Allocate structures accordingly.
* iconv/gconv_close.c (__gconv_close): Don't free data.
* iconv/gconv_conf.c (add_alias): Avoid searching in tree twice to
insert new alias.
* iconv/gconv_db.c (add_derivation): More efficient copying. Check
for error while inserting in tree.
* include/time.h: Pretty print.
* inet/ruserpass.c: Rewrite use of toktab to avoid string pointers
in table and lots of relocations.
* posix/regex.c (regerror): Rewrite use of re_error_msgid to avoid
string pointers in table and lots of relocations.
* intl/finddomain.c: Remove definition of strchr macro.
* io/ftw.c (nftw_arr, ftw_arr): Make const.
* locale/loadlocale.c (_nl_load_locale): Optimize string copying.
* locale/localeinfo.h (_nl_category_names): Change into an array with
fixed width char string elements.
* locale/setlocale.c (_nl_category_names): Likewise.
(_nl_current): Make global.
* locale/nl_langinfo.c (nldata): Removed. Use _nl_current now.
* malloc/Makefile (distribute): Add stackinfo.h.
* sysdeps/generic/stackinfo.h: New file.
* sysdeps/i386/stackinfo.h: New file.
* posix/execl.c: Use stackinfo.h in optimizing alloca use.
* posix/execle.c: Likewise.
* posix/execlp.c: Likewise.
* nis/nis_table.c (__create_ib_request): Always use realloc.
* posix/execvp.c (execute): Rename to script_execute and keep only
code to execute using shell.
(execvp): Call execv directly and only fall back on script_execute.
* resolv/inet_net_pton.c (inet_net_pton_ipv4): Remove digits define
and always use xdigits instead.
* resolv/res_init.c (res_init): Use rawmemchr instead of strchr
where appropriate.
* stdlib/fpioconst.h (__tens): New declaration.
(struct mp_power): Remove array, add arrayoff element.
* stdlib/fpioconst.c: Replace definitions of _ten_p* arrays by one
__tens array and add in _fpioconst_pow10 offsets into __tens.
* stdio-common/printf_fp.c: Rewrite to use new __tens array.
* stdlib/strtod.c: Likewise.
* stdlib/a64l.c (a64l_table): Avoid unnecessary elements.
* stdlib/exit.c: Rewrite to use __exit_funcs being as sign for end
of the list.
* stdlib/atexit.c (__exit_funcs): Don't initialize.
* stdlib/fmtmsg.c (keywords): Make name element fixed width array.
* sunrpc/clnt_perr.c: Rewrite clnt_sperrno and auth_errmsg to use
a single and an array with offsets.
* sunrpc/des_soft.c (partab): Make it const.
* sunrpc/key_call.c (trytimeout, tottimeout): Make const.
(__key_encryptsession_pk_LOCAL): Don't initialize with 0.
(__key_decryptsession_pk_LOCAL): Likewise.
(__key_gendes_LOCAL): Likewise.
(MESSENGER): Mark const.
(key_call_private_main): Don't initialize with 0.
(use_keyenvoy): Don't initialize with 0.
(key_call): Rewrite to reverse logic of use_doors variable.
* sunrpc/netname.c (OPSYS): Define as array, not pointer.
(startp): Don't initialize with zero.
* sunrpc/openchild.c (_openchild): Make first argument const.
* sunrpc/pmap_rmt.c (timeout): Mark const.
* sunrpc/xcrypt.c (hex): Likewise.
* sysdeps/unix/sysv/linux/getcwd.c: Rewrite to allow omitting
initialization of global variables.
* sysdeps/unix/sysv/linux/getpt.c: Likewise.
* sysdeps/unix/sysv/linux/if_index.c: Likewise.
* termios/tcgetsid.c: Likewise.
* sysdeps/unix/sysv/linux/i386/dl-procinfo.h (x86_cap_flags): Change
fxsr to osfxsr.
* time/tzfile.c (__tzfile_read): Rewrite to allocate only one memory
block. Add function to free memory if wanted.
* time/tzset.c (tzset_internal): Pass extra argument to __tzfile_read.
* wcsmbs/wcsmbsload.c (to_wc, to_mb): Correct initializers.
* wcsmbs/wmemset.c: Little code optimization.
1999-04-28 23:13:52 +00:00
|
|
|
static size_t namelen;
|
2000-09-01 02:26:05 +00:00
|
|
|
struct stat64 st;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
DIR *dirstream;
|
2001-02-13 22:17:17 +00:00
|
|
|
struct dirent64 *d;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
size_t devlen = strlen (dev) + 1;
|
|
|
|
|
2000-08-21 04:18:25 +00:00
|
|
|
dirstream = __opendir (dev);
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
if (dirstream == NULL)
|
|
|
|
{
|
|
|
|
*dostat = -1;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2009-10-29 18:02:34 +00:00
|
|
|
/* Prepare for the loop. If we already have a buffer copy the directory
|
|
|
|
name we look at into it. */
|
|
|
|
if (devlen < namelen)
|
|
|
|
*((char *) __mempcpy (getttyname_name, dev, devlen - 1)) = '/';
|
|
|
|
|
2001-02-13 22:17:17 +00:00
|
|
|
while ((d = __readdir64 (dirstream)) != NULL)
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
if ((d->d_fileno == mytty->st_ino || *dostat)
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
&& strcmp (d->d_name, "stdin")
|
|
|
|
&& strcmp (d->d_name, "stdout")
|
|
|
|
&& strcmp (d->d_name, "stderr"))
|
|
|
|
{
|
|
|
|
size_t dlen = _D_ALLOC_NAMLEN (d);
|
|
|
|
if (devlen + dlen > namelen)
|
|
|
|
{
|
2000-08-15 06:12:25 +00:00
|
|
|
free (getttyname_name);
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
namelen = 2 * (devlen + dlen); /* Big enough. */
|
2000-08-15 06:12:25 +00:00
|
|
|
getttyname_name = malloc (namelen);
|
|
|
|
if (! getttyname_name)
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
{
|
|
|
|
*dostat = -1;
|
|
|
|
/* Perhaps it helps to free the directory stream buffer. */
|
1998-07-16 11:44:36 +00:00
|
|
|
(void) __closedir (dirstream);
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
2000-08-15 06:12:25 +00:00
|
|
|
*((char *) __mempcpy (getttyname_name, dev, devlen - 1)) = '/';
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
}
|
2000-08-15 06:12:25 +00:00
|
|
|
memcpy (&getttyname_name[devlen], d->d_name, dlen);
|
2000-09-01 02:26:05 +00:00
|
|
|
if (__xstat64 (_STAT_VER, getttyname_name, &st) == 0
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
&& is_mytty (mytty, &st))
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
{
|
1998-07-16 11:44:36 +00:00
|
|
|
(void) __closedir (dirstream);
|
2002-03-13 08:59:47 +00:00
|
|
|
#if 0
|
2000-08-15 06:12:25 +00:00
|
|
|
__ttyname = getttyname_name;
|
2002-03-13 08:59:47 +00:00
|
|
|
#endif
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
__set_errno (save);
|
2000-08-15 06:12:25 +00:00
|
|
|
return getttyname_name;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1998-07-16 11:44:36 +00:00
|
|
|
(void) __closedir (dirstream);
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
__set_errno (save);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2000-08-15 06:12:25 +00:00
|
|
|
|
|
|
|
/* Static buffer in `ttyname'. */
|
2002-11-01 20:44:15 +00:00
|
|
|
libc_freeres_ptr (static char *ttyname_buf);
|
2000-08-15 06:12:25 +00:00
|
|
|
|
|
|
|
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
/* Return the pathname of the terminal FD is open on, or NULL on errors.
|
|
|
|
The returned storage is good only until the next call to this function. */
|
|
|
|
char *
|
2000-05-23 08:43:26 +00:00
|
|
|
ttyname (int fd)
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
{
|
Update.
1999-04-28 Ulrich Drepper <drepper@cygnus.com>
* argp/argp-ba.c (argp_program_bug_address): Don't initialize with 0.
* argp/argp-parse.c (_argp_hang): Likewise.
* argp/argp-pv.c (argp_program_version): Likewise.
* argp/argp-pvh.c (argp_program_version_hook): Likewise.
* inet/ether_hton.c (ether_hton, startp): Likewise.
* inet/ether_ntoh.c (ether_ntoh, startp): Likewise.
* inet/getnetgrent_r.c (setup, startp): Likewise.
* intl/loadmsgcat.c (_nl_msg_cat_cntr): Likewise.
* intl/localealias.c (string_space, string_space_act, string_space_max,
nmap, maxmap): Likewise.
* libio/iopopen.c (proc_file_chain): Likewise.
* libio/oldiopopen.c (old_proc_file_chain): Likewise.
* locale/lc-collate.c (__collate_table, __collate_extra,
__collate_element_hash, __collate_element_strings,
__collate_element_values): Likewise.
* malloc/mcheck.c (mcheck_used): Likewise.
* malloc/mtrace.c (added_atexit_handler): Likewise.
* malloc/set-freeres.c (already_called): Likewise.
* misc/getpass.c (getpass) [buf, bufsize]: Likewise.
* misc/syslog.c (LogStat, LogTag): Likewise.
* nss/XXX-lookup.c (DATABASE_NAME_SYMBOL): Likewise.
* nss/getXXbyYY_r.c (startp): Likewise.
* posix/getopt.c (optarg, __getopt_initialized): Likewise.
* posix/regex.c (init_syntax_once) [done]: Likewise.
(debug): Likewise.
* string/strfry.c (init): Likewise.
* sunrpc/svc_run.c (svc_top): Likewise.
* posix/euidaccess.c (have_ids): Likewise.
* sysdeps/unix/sysv/linux/poll.c (must_emulate): Likewise.
* sysdeps/unix/sysv/linux/ttyname.c (__ttyname, namelen): Likewise.
* time/getdate.c (getdate_err): Likewise.
* time/tzfile.c (transitions, type_idxs, types, zone_names, leaps):
Likewise.
* time/tzset.c (old_tz, is_initialized): Likewise.
* inet/getnameinfo.c (nrl_domainname): Rewrite to allow initialization
of static data with zero.
* signal/allocrtsig.c (init): Likewise.
* string/Makefile (routines): Add strchrnul.
* string/Versions [GLIBC_2.1.1]: Add strchrnul.
* string/string.c: Add strchrnul prototype.
* include/string.h: Add __strchrnul prototype.
* sysdeps/generic/strchrnul.c: New file.
* sysdeps/i386/strchrnul.S: New file.
* sysdeps/i386/bits/string.c: Add strchrnul optimization.
* sysdeps/i386/i486/bits/string.c: Likewise.
* argp/argp-help.c (argp_args_usage): Use __strchrnul.
* inet/ether_line.c (ether_line): Likewise.
* nscd/nscd_conf.c (nscd_parse_file): Likewise.
* nss/nsswitch.c (nss_parse_file): Likewise.
* posix/execvp.c (execvp): Likewise.
* posix/fnmatch.c (internal_fnmatch): Likewise.
* resolv/res_hconf.c (_res_hconv_init): Likewise.
* resolv/res_init.c (res_init): Likewise.
* stdlib/fmtmsg.c (init): Likewise.
* stdlib/getsubopt.c (getsubopt): Likewise.
* catgets/catgets.c (catopen): Only allocate one memory block.
(catclose): Only one free call necessary.
* catgets/open_catalog.c (__open_catalog): Simplify handling of
file descriptor.
* ctype/ctype-extn.c: Make __toascii_l and __isascii_l alias instead
of real functions. Simplify _tolower and _toupper.
* grp/initgroups.c (compat_call): Remove unnecessary use of pointer
variable.
* iconv/gconv.h (struct gconv_info): Change data element from pointer
to array of size 0.
* iconv/gconv_open.c (__gconv_open): Allocate structures accordingly.
* iconv/gconv_close.c (__gconv_close): Don't free data.
* iconv/gconv_conf.c (add_alias): Avoid searching in tree twice to
insert new alias.
* iconv/gconv_db.c (add_derivation): More efficient copying. Check
for error while inserting in tree.
* include/time.h: Pretty print.
* inet/ruserpass.c: Rewrite use of toktab to avoid string pointers
in table and lots of relocations.
* posix/regex.c (regerror): Rewrite use of re_error_msgid to avoid
string pointers in table and lots of relocations.
* intl/finddomain.c: Remove definition of strchr macro.
* io/ftw.c (nftw_arr, ftw_arr): Make const.
* locale/loadlocale.c (_nl_load_locale): Optimize string copying.
* locale/localeinfo.h (_nl_category_names): Change into an array with
fixed width char string elements.
* locale/setlocale.c (_nl_category_names): Likewise.
(_nl_current): Make global.
* locale/nl_langinfo.c (nldata): Removed. Use _nl_current now.
* malloc/Makefile (distribute): Add stackinfo.h.
* sysdeps/generic/stackinfo.h: New file.
* sysdeps/i386/stackinfo.h: New file.
* posix/execl.c: Use stackinfo.h in optimizing alloca use.
* posix/execle.c: Likewise.
* posix/execlp.c: Likewise.
* nis/nis_table.c (__create_ib_request): Always use realloc.
* posix/execvp.c (execute): Rename to script_execute and keep only
code to execute using shell.
(execvp): Call execv directly and only fall back on script_execute.
* resolv/inet_net_pton.c (inet_net_pton_ipv4): Remove digits define
and always use xdigits instead.
* resolv/res_init.c (res_init): Use rawmemchr instead of strchr
where appropriate.
* stdlib/fpioconst.h (__tens): New declaration.
(struct mp_power): Remove array, add arrayoff element.
* stdlib/fpioconst.c: Replace definitions of _ten_p* arrays by one
__tens array and add in _fpioconst_pow10 offsets into __tens.
* stdio-common/printf_fp.c: Rewrite to use new __tens array.
* stdlib/strtod.c: Likewise.
* stdlib/a64l.c (a64l_table): Avoid unnecessary elements.
* stdlib/exit.c: Rewrite to use __exit_funcs being as sign for end
of the list.
* stdlib/atexit.c (__exit_funcs): Don't initialize.
* stdlib/fmtmsg.c (keywords): Make name element fixed width array.
* sunrpc/clnt_perr.c: Rewrite clnt_sperrno and auth_errmsg to use
a single and an array with offsets.
* sunrpc/des_soft.c (partab): Make it const.
* sunrpc/key_call.c (trytimeout, tottimeout): Make const.
(__key_encryptsession_pk_LOCAL): Don't initialize with 0.
(__key_decryptsession_pk_LOCAL): Likewise.
(__key_gendes_LOCAL): Likewise.
(MESSENGER): Mark const.
(key_call_private_main): Don't initialize with 0.
(use_keyenvoy): Don't initialize with 0.
(key_call): Rewrite to reverse logic of use_doors variable.
* sunrpc/netname.c (OPSYS): Define as array, not pointer.
(startp): Don't initialize with zero.
* sunrpc/openchild.c (_openchild): Make first argument const.
* sunrpc/pmap_rmt.c (timeout): Mark const.
* sunrpc/xcrypt.c (hex): Likewise.
* sysdeps/unix/sysv/linux/getcwd.c: Rewrite to allow omitting
initialization of global variables.
* sysdeps/unix/sysv/linux/getpt.c: Likewise.
* sysdeps/unix/sysv/linux/if_index.c: Likewise.
* termios/tcgetsid.c: Likewise.
* sysdeps/unix/sysv/linux/i386/dl-procinfo.h (x86_cap_flags): Change
fxsr to osfxsr.
* time/tzfile.c (__tzfile_read): Rewrite to allocate only one memory
block. Add function to free memory if wanted.
* time/tzset.c (tzset_internal): Pass extra argument to __tzfile_read.
* wcsmbs/wcsmbsload.c (to_wc, to_mb): Correct initializers.
* wcsmbs/wmemset.c: Little code optimization.
1999-04-28 23:13:52 +00:00
|
|
|
static size_t buflen;
|
1998-10-29 15:17:25 +00:00
|
|
|
char procname[30];
|
2000-09-01 02:26:05 +00:00
|
|
|
struct stat64 st, st1;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
int dostat = 0;
|
linux ttyname{_r}: Don't bail prematurely [BZ #22145]
Commit 15e9a4f378c8607c2ae1aa465436af4321db0e23 introduced logic for ttyname()
sending back ENODEV to signal that we can't get a name for the TTY because we
inherited it from a different mount namespace.
However, just because we inherited it from a different mount namespace and it
isn't available at its original path, doesn't mean that its name is unknowable;
we can still try to find it by allowing the normal fall back on iterating
through devices.
An example scenario where this happens is with "/dev/console" in containers.
It's a common practice among container managers to allocate a PTY master/slave
pair in the host's mount namespace (the slave having a path like "/dev/pty/$X"),
bind mount the slave to "/dev/console" in the container's mount namespace, and
send the slave FD to a process in the container. Inside of the
container, the slave-end isn't available at its original path ("/dev/pts/$X"),
since the container mount namespace has a separate devpts instance from the host
(that path may or may not exist in the container; if it does exist, it's not the
same PTY slave device). Currently ttyname{_r} sees that the file at the
original "/dev/pts/$X" path doesn't match the FD passed to it, and fails early
and gives up, even though if it kept searching it would find the TTY at
"/dev/console". Fix that; don't have the ENODEV path force an early return
inhibiting the fall-back search.
This change is based on the previous patch that adds use of is_mytty in
getttyname and getttyname_r. Without that change, this effectively reverts
15e9a4f, which made us disregard the false similarity of file pointed to by
"/proc/self/fd/$Y", because if it doesn't bail prematurely then that file
("/dev/pts/$X") will just come up again anyway in the fall-back search.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:36:44 +00:00
|
|
|
int doispty = 0;
|
1999-03-08 11:46:22 +00:00
|
|
|
char *name;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
int save = errno;
|
2006-12-05 21:28:15 +00:00
|
|
|
struct termios term;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
2006-12-05 21:28:15 +00:00
|
|
|
/* isatty check, tcgetattr is used because it sets the correct
|
|
|
|
errno (EBADF resp. ENOTTY) on error. */
|
2014-02-10 13:45:42 +00:00
|
|
|
if (__glibc_unlikely (__tcgetattr (fd, &term) < 0))
|
2006-12-05 21:28:15 +00:00
|
|
|
return NULL;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
2010-11-03 04:25:45 +00:00
|
|
|
if (__fxstat64 (_STAT_VER, fd, &st) < 0)
|
|
|
|
return NULL;
|
|
|
|
|
1998-10-29 15:17:25 +00:00
|
|
|
/* We try using the /proc filesystem. */
|
|
|
|
*_fitoa_word (fd, __stpcpy (procname, "/proc/self/fd/"), 10, 0) = '\0';
|
|
|
|
|
|
|
|
if (buflen == 0)
|
|
|
|
{
|
|
|
|
buflen = 4095;
|
2000-08-15 06:12:25 +00:00
|
|
|
ttyname_buf = (char *) malloc (buflen + 1);
|
|
|
|
if (ttyname_buf == NULL)
|
1998-10-29 15:17:25 +00:00
|
|
|
{
|
|
|
|
buflen = 0;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-04-19 07:27:58 +00:00
|
|
|
ssize_t len = __readlink (procname, ttyname_buf, buflen);
|
2014-02-10 13:45:42 +00:00
|
|
|
if (__glibc_likely (len != -1))
|
1999-04-01 09:33:06 +00:00
|
|
|
{
|
2002-09-24 04:24:25 +00:00
|
|
|
if ((size_t) len >= buflen)
|
1999-04-01 09:33:06 +00:00
|
|
|
return NULL;
|
2010-11-03 04:25:45 +00:00
|
|
|
|
|
|
|
#define UNREACHABLE_LEN strlen ("(unreachable)")
|
|
|
|
if (len > UNREACHABLE_LEN
|
|
|
|
&& memcmp (ttyname_buf, "(unreachable)", UNREACHABLE_LEN) == 0)
|
|
|
|
{
|
|
|
|
memmove (ttyname_buf, ttyname_buf + UNREACHABLE_LEN,
|
|
|
|
len - UNREACHABLE_LEN);
|
|
|
|
len -= UNREACHABLE_LEN;
|
|
|
|
}
|
|
|
|
|
1999-04-01 09:33:06 +00:00
|
|
|
/* readlink need not terminate the string. */
|
2000-08-15 06:12:25 +00:00
|
|
|
ttyname_buf[len] = '\0';
|
1998-10-29 15:17:25 +00:00
|
|
|
|
2010-11-03 04:25:45 +00:00
|
|
|
/* Verify readlink result, fall back on iterating through devices. */
|
|
|
|
if (ttyname_buf[0] == '/'
|
|
|
|
&& __xstat64 (_STAT_VER, ttyname_buf, &st1) == 0
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
&& is_mytty (&st, &st1))
|
2010-11-03 04:25:45 +00:00
|
|
|
return ttyname_buf;
|
2017-01-27 14:59:59 +00:00
|
|
|
|
linux ttyname{_r}: Don't bail prematurely [BZ #22145]
Commit 15e9a4f378c8607c2ae1aa465436af4321db0e23 introduced logic for ttyname()
sending back ENODEV to signal that we can't get a name for the TTY because we
inherited it from a different mount namespace.
However, just because we inherited it from a different mount namespace and it
isn't available at its original path, doesn't mean that its name is unknowable;
we can still try to find it by allowing the normal fall back on iterating
through devices.
An example scenario where this happens is with "/dev/console" in containers.
It's a common practice among container managers to allocate a PTY master/slave
pair in the host's mount namespace (the slave having a path like "/dev/pty/$X"),
bind mount the slave to "/dev/console" in the container's mount namespace, and
send the slave FD to a process in the container. Inside of the
container, the slave-end isn't available at its original path ("/dev/pts/$X"),
since the container mount namespace has a separate devpts instance from the host
(that path may or may not exist in the container; if it does exist, it's not the
same PTY slave device). Currently ttyname{_r} sees that the file at the
original "/dev/pts/$X" path doesn't match the FD passed to it, and fails early
and gives up, even though if it kept searching it would find the TTY at
"/dev/console". Fix that; don't have the ENODEV path force an early return
inhibiting the fall-back search.
This change is based on the previous patch that adds use of is_mytty in
getttyname and getttyname_r. Without that change, this effectively reverts
15e9a4f, which made us disregard the false similarity of file pointed to by
"/proc/self/fd/$Y", because if it doesn't bail prematurely then that file
("/dev/pts/$X") will just come up again anyway in the fall-back search.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:36:44 +00:00
|
|
|
doispty = 1;
|
2010-11-03 04:25:45 +00:00
|
|
|
}
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
|
2000-09-01 02:26:05 +00:00
|
|
|
if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
{
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
name = getttyname ("/dev/pts", &st, save, &dostat);
|
1999-03-08 11:46:22 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
__set_errno (save);
|
|
|
|
name = NULL;
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!name && dostat != -1)
|
|
|
|
{
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
name = getttyname ("/dev", &st, save, &dostat);
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!name && dostat != -1)
|
|
|
|
{
|
|
|
|
dostat = 1;
|
linux ttyname{_r}: Make tty checks consistent
In the ttyname and ttyname_r routines on Linux, at several points it needs to
check if a given TTY is the TTY we are looking for. It used to be that this
check was (to see if `maybe` is `mytty`):
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#else
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
#endif
This check appears in several places.
Then, one of the changes made in commit 15e9a4f378c8607c2ae1aa465436af4321db0e23
was to change that check to:
__xstat64(_STAT_VER, maybe_filename, &maybe) == 0
#ifdef _STATBUF_ST_RDEV
&& S_ISCHR(maybe.st_mode) && maybe.st_rdev == mytty.st_rdev
#endif
&& maybe.st_ino == mytty.st_ino && maybe.st_dev == mytty.st_dev
That is, it made the st_ino and st_dev parts of the check happen even if we have
the st_rdev member. This is an important change, because the kernel allows
multiple devpts filesystem instances to be created; a device file in one devpts
instance may share the same st_rdev with a file in another devpts instance, but
they aren't the same file.
This check appears twice in each file (ttyname.c and ttyname_r.c), once (in
ttyname and __ttyname_r) to check if a candidate file found by inspecting /proc
is the desired TTY, and once (in getttyname and getttyname_r) to check if a
candidate file found by searching /dev is the desired TTY. However, 15e9a4f
only updated the checks for files found via /proc; but the concern about
collisions between devpts instances is just as valid for files found via /dev.
So, update all 4 occurrences the check to be consistent with the version of the
check introduced in 15e9a4f. Make it easy to keep all 4 occurrences of the
check consistent by pulling it in to a static inline function, is_mytty.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:34:30 +00:00
|
|
|
name = getttyname ("/dev", &st, save, &dostat);
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
}
|
|
|
|
|
linux ttyname{_r}: Don't bail prematurely [BZ #22145]
Commit 15e9a4f378c8607c2ae1aa465436af4321db0e23 introduced logic for ttyname()
sending back ENODEV to signal that we can't get a name for the TTY because we
inherited it from a different mount namespace.
However, just because we inherited it from a different mount namespace and it
isn't available at its original path, doesn't mean that its name is unknowable;
we can still try to find it by allowing the normal fall back on iterating
through devices.
An example scenario where this happens is with "/dev/console" in containers.
It's a common practice among container managers to allocate a PTY master/slave
pair in the host's mount namespace (the slave having a path like "/dev/pty/$X"),
bind mount the slave to "/dev/console" in the container's mount namespace, and
send the slave FD to a process in the container. Inside of the
container, the slave-end isn't available at its original path ("/dev/pts/$X"),
since the container mount namespace has a separate devpts instance from the host
(that path may or may not exist in the container; if it does exist, it's not the
same PTY slave device). Currently ttyname{_r} sees that the file at the
original "/dev/pts/$X" path doesn't match the FD passed to it, and fails early
and gives up, even though if it kept searching it would find the TTY at
"/dev/console". Fix that; don't have the ENODEV path force an early return
inhibiting the fall-back search.
This change is based on the previous patch that adds use of is_mytty in
getttyname and getttyname_r. Without that change, this effectively reverts
15e9a4f, which made us disregard the false similarity of file pointed to by
"/proc/self/fd/$Y", because if it doesn't bail prematurely then that file
("/dev/pts/$X") will just come up again anyway in the fall-back search.
Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-11-15 19:36:44 +00:00
|
|
|
if (!name && doispty && is_pty (&st))
|
|
|
|
{
|
|
|
|
/* We failed to figure out the TTY's name, but we can at least
|
|
|
|
signal that we did verify that it really is a PTY slave.
|
|
|
|
This happens when we have inherited the file descriptor from
|
|
|
|
a different mount namespace. */
|
|
|
|
__set_errno (ENODEV);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
Update.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* streams/Makefile (headers): Add sys/stropts.h.
* streams/sys/stropts.h: New file.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ttyname.c,
sysdeps/unix/sysv/linux/ttyname_r.c: New files, like
sysdeps/posix/ttyname*.c, but look in /dev/pts first.
1998-04-25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/ptsname.c: Fix off-by-one bug in second
argument of _itoa_word.
1998-04-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (s_getcwd, s_getdents,
s_pread64, s_pwrite64, s_reboot, s_sigpending, s_sigprocmask): Set
caller to getcwd, getdents, pread64, pwrite64, reboot, sigpending,
sigprocmask, resp., instead of EXTRA.
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove
s_pread64 and s_pwrite64.
1998-04-27 09:43:55 +00:00
|
|
|
return name;
|
|
|
|
}
|