X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fptsname.c;h=754a60776a3110fd0a845139ab7e369b3975cb6f;hb=7ef6c64e210ac0979d7e8ac69bc5b5208c2405ab;hp=3c7a9e043b876970eacfbdad4052cc8a302c7865;hpb=1534c83a9aef13ea3d292ebc353f3897dfd57986;p=gnulib.git diff --git a/lib/ptsname.c b/lib/ptsname.c index 3c7a9e043..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,48 +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; - int err; - 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; - } - - err = __ttyname_r (fd, buf, buflen); - if (err != 0) - { - __set_errno (err); - 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; }