X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fptsname.c;h=754a60776a3110fd0a845139ab7e369b3975cb6f;hb=7ef6c64e210ac0979d7e8ac69bc5b5208c2405ab;hp=a62ef2104af2c61e117581da19d86f2ac1ec4429;hpb=3b7b97813fbb7f37f07f2acb8e0b0106efa3bf93;p=gnulib.git diff --git a/lib/ptsname.c b/lib/ptsname.c index a62ef2104..754a60776 100644 --- a/lib/ptsname.c +++ b/lib/ptsname.c @@ -1,5 +1,5 @@ /* Determine name of the slave side of a pseudo-terminal. - Copyright (C) 1998, 2002, 2010 Free Software Foundation, Inc. + Copyright (C) 1998, 2002, 2010-2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,32 +18,8 @@ #include -#include -#include -#include -#include - -#ifdef _LIBC -# include -#else -# ifndef _PATH_TTY -# define _PATH_TTY "/dev/tty" -# endif -# ifndef _PATH_DEV -# define _PATH_DEV "/dev/" -# endif - -# define __set_errno(e) errno = (e) -# define __isatty isatty -# define __stat stat -# define __ttyname_r ttyname_r - -static int __ptsname_r (int fd, char *buf, size_t buflen); -#endif - - -/* Static buffer for `ptsname'. */ -static char buffer[sizeof (_PATH_TTY) + 2]; +/* Static buffer for 'ptsname'. */ +static char buffer[64]; /* Return the pathname of the pseudo terminal slave associated with @@ -52,43 +28,5 @@ static char buffer[sizeof (_PATH_TTY) + 2]; char * ptsname (int fd) { - return __ptsname_r (fd, buffer, sizeof (buffer)) != 0 ? NULL : buffer; -} - - -/* Store at most BUFLEN characters of the pathname of the slave pseudo - terminal associated with the master FD is open on in BUF. - Return 0 on success, otherwise an error number. */ -static int -__ptsname_r (int fd, char *buf, size_t buflen) -{ - int save_errno = errno; - struct stat st; - - if (buf == NULL) - { - __set_errno (EINVAL); - return EINVAL; - } - - if (!__isatty (fd)) - /* We rely on isatty to set errno properly (i.e. EBADF or ENOTTY). */ - return errno; - - if (buflen < strlen (_PATH_TTY) + 3) - { - __set_errno (ERANGE); - return ERANGE; - } - - if (__ttyname_r (fd, buf, buflen) != 0) - return errno; - - buf[sizeof (_PATH_DEV) - 1] = 't'; - - if (__stat (buf, &st) < 0) - return errno; - - __set_errno (save_errno); - return 0; + return ptsname_r (fd, buffer, sizeof (buffer)) != 0 ? NULL : buffer; }