diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-12-19 00:21:23 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-12-19 00:21:23 +0000 |
commit | 9cddf9deda4c6ac0339d3aa4be3cceef4d8e9b6a (patch) | |
tree | 86e4e74103036dfd33acf4b0a91f20b137371d76 /sysdeps/unix/sysv/linux/grantpt.c | |
parent | 46089c83d119050998387d7a8fb896514c92618b (diff) | |
download | glibc-9cddf9deda4c6ac0339d3aa4be3cceef4d8e9b6a.tar.gz |
Update.
2001-12-18 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (clone): Subtract
stack bias from child stack pointer before passing it to clone syscall.
2001-12-18 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/sysconf.c (__sysconf): Respect POSIX minimum for
_SC_TZNAME_MAX.
* sysdeps/generic/sysconf.c (__sysconf): Likewise.
Reported by Thorsten Kukuk <kukuk@suse.de>.
* sysdeps/unix/grantpt.c (grantpt): Correct typo in comment and
add some casts.
* sysdeps/unix/sysv/linux/grantpt.c: Make __unix_grantpt static.
2001-12-18 Thorsten Kukuk <kukuk@suse.de>
* sysdeps/unix/sysv/linux/grantpt.c: Make errno results standard
conforming: return EBADF if file descriptor is invalid and EINVAL
if file descriptor is no valid tty.
* login/tst-grantpt.c: New file.
* login/Makefile (tests): Add tst-grantpt.
Diffstat (limited to 'sysdeps/unix/sysv/linux/grantpt.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/grantpt.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/sysdeps/unix/sysv/linux/grantpt.c b/sysdeps/unix/sysv/linux/grantpt.c index 55e4f36c32..168081758f 100644 --- a/sysdeps/unix/sysv/linux/grantpt.c +++ b/sysdeps/unix/sysv/linux/grantpt.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,6 +16,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <errno.h> +#include <fcntl.h> #include <limits.h> #include <stdlib.h> #include <sys/statfs.h> @@ -25,7 +27,7 @@ /* Prototype for function that changes ownership and access permission for slave pseudo terminals that do not live on a `devpts' filesystem. */ -int __unix_grantpt (int fd); +static int __unix_grantpt (int fd); /* Prototype for private function that gets the name of the slave pseudo terminal in a safe way. */ @@ -45,9 +47,24 @@ grantpt (int fd) #endif char *buf = _buf; - if (pts_name (fd, &buf, sizeof (_buf))) - return -1; - + if (__builtin_expect (pts_name (fd, &buf, sizeof (_buf)), 0)) + { + int save_errno = errno; + + /* Check, if the file descriptor is valid. pts_name returns the + wrong errno number, so we cannot use that. */ + if (__libc_fcntl (fd, F_GETFD) == -1 && errno == EBADF) + return -1; + + __set_errno (save_errno); + + /* If the filedescriptor is no TTY, grantpt has to set errno + to EINVAL. */ + if (errno == ENOTTY) + __set_errno (EINVAL); + return -1; + } + if (__statfs (buf, &fsbuf) < 0) return -1; @@ -59,5 +76,5 @@ grantpt (int fd) return __unix_grantpt (fd); } -#define grantpt __unix_grantpt +#define grantpt static __unix_grantpt #include <sysdeps/unix/grantpt.c> |