diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2004-04-14 09:12:04 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2004-04-14 09:12:04 +0000 |
commit | 93d66ddc2095c19a19df0f7d32cfda0560b3dfe6 (patch) | |
tree | 12c666cd0d73d1a2e4b7ce34072db3683af7b59d /winsup/cygwin/syscalls.cc | |
parent | b923181eca48edeffb5f1bdaa9f7d424be9bfe68 (diff) | |
download | cygnal-93d66ddc2095c19a19df0f7d32cfda0560b3dfe6.tar.gz cygnal-93d66ddc2095c19a19df0f7d32cfda0560b3dfe6.tar.bz2 cygnal-93d66ddc2095c19a19df0f7d32cfda0560b3dfe6.zip |
* 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.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 35 |
1 files changed, 29 insertions, 6 deletions
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; } |