Back to index

glibc  2.9
ptsname.c
Go to the documentation of this file.
00001 /* ptsname -- return the name of a pty slave given an FD to the pty master
00002    Copyright (C) 1999 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #include <errno.h>
00021 #include <string.h>
00022 #include <hurd.h>
00023 #include <hurd/fd.h>
00024 #include <hurd/term.h>
00025 
00026 
00027 /* Return the pathname of the pseudo terminal slave associated with
00028    the master FD is open on, or NULL on errors.
00029    The returned storage is good until the next call to this function.  */
00030 char *
00031 ptsname (int fd)
00032 {
00033   static char peername[1024];  /* XXX */
00034   error_t err;
00035 
00036   err = __ptsname_r (fd, peername, sizeof (peername));
00037   if (err)
00038     __set_errno (err);
00039 
00040   return err ? NULL : peername;
00041 }
00042 
00043 
00044 /* Store at most BUFLEN characters of the pathname of the slave pseudo
00045    terminal associated with the master FD is open on in BUF.
00046    Return 0 on success, otherwise an error number.  */
00047 int
00048 __ptsname_r (int fd, char *buf, size_t buflen)
00049 {
00050   char peername[1024];  /* XXX */
00051   size_t len;
00052   error_t err;
00053 
00054   peername[0] = '\0';
00055   if (err = HURD_DPORT_USE (fd, __term_get_peername (port, peername)))
00056     return _hurd_fd_error (fd, err);
00057 
00058   len = strlen (peername) + 1;
00059   if (len > buflen)
00060     return ERANGE;
00061 
00062   memcpy (buf, peername, len);
00063   return 0;
00064 }
00065 weak_alias (__ptsname_r, ptsname_r)