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 | |
parent | 46089c83d119050998387d7a8fb896514c92618b (diff) | |
download | glibc-9cddf9deda4c6ac0339d3aa4be3cceef4d8e9b6a.tar.gz glibc-9cddf9deda4c6ac0339d3aa4be3cceef4d8e9b6a.tar.xz glibc-9cddf9deda4c6ac0339d3aa4be3cceef4d8e9b6a.zip |
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')
-rw-r--r-- | sysdeps/unix/grantpt.c | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/grantpt.c | 29 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 2 |
3 files changed, 28 insertions, 11 deletions
diff --git a/sysdeps/unix/grantpt.c b/sysdeps/unix/grantpt.c index f86e07c242..dad7d16b43 100644 --- a/sysdeps/unix/grantpt.c +++ b/sysdeps/unix/grantpt.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. @@ -64,9 +64,9 @@ pts_name (int fd, char **pts, size_t buf_len) if (buf != *pts) /* We've already malloced another buffer at least once. */ - new_buf = realloc (buf, buf_len); + new_buf = (char *) realloc (buf, buf_len); else - new_buf = malloc (buf_len); + new_buf = (char *) malloc (buf_len); if (! new_buf) { rv = -1; @@ -159,7 +159,7 @@ grantpt (int fd) struct rlimit rl = { 0, 0 }; __setrlimit (RLIMIT_CORE, &rl); - /* We pase the master pseudo terminal as file descriptor PTY_FILENO. */ + /* We pass the master pseudo terminal as file descriptor PTY_FILENO. */ if (fd != PTY_FILENO) if (__dup2 (fd, PTY_FILENO) < 0) _exit (FAIL_EBADF); 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> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index 957a928f36..a7c248b2e8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -40,7 +40,7 @@ __clone: mov %i3, %l3 /* save arg */ /* Do the system call */ - mov %i1, %o1 + sub %i1, 0x7ff, %o1 mov %i2, %o0 set __NR_clone, %g1 ta 0x6d |