From 93d66ddc2095c19a19df0f7d32cfda0560b3dfe6 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 14 Apr 2004 09:12:04 +0000 Subject: * cygwin.din: Export rand_r and ttyname_r. * syscalls.cc (ttyname_r): New function. (ttyname): Move functionality to ttyname_r. Call it from here. * include/cygwin/version.h: Bump API minor number. --- winsup/cygwin/syscalls.cc | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'winsup/cygwin/syscalls.cc') diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index ed8b902d6..daae8a38f 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -1511,15 +1511,38 @@ pathconf (const char *file, int v) } } +extern "C" int +ttyname_r (int fd, char *buf, size_t buflen) +{ + int ret = 0; + if (__check_null_invalid_struct (buf, buflen)) + ret = EINVAL; + else + { + cygheap_fdget cfd (fd, true); + if (cfd < 0) + ret = EBADF; + else if (!cfd->is_tty ()) + ret = ENOTTY; + else if (buflen < strlen (cfd->ttyname ()) + 1) + ret = ERANGE; + else + strcpy (buf, cfd->ttyname ()); + } + debug_printf ("returning %d tty: %s", ret, ret ? "NULL" : buf); + return ret; +} + extern "C" char * ttyname (int fd) { - char *name; - cygheap_fdget cfd (fd); - if (cfd < 0 || !cfd->is_tty ()) - return 0; - name = (char *) (cfd->ttyname ()); - debug_printf ("returning %s", name); + static char name[CYG_MAX_PATH]; + int ret = ttyname_r (fd, name, CYG_MAX_PATH); + if (ret) + { + set_errno (ret); + return NULL; + } return name; } -- cgit v1.2.3