From 1f742d521cd989642fcd155519019967dd2447f0 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 19 Nov 2016 21:22:29 +0100 Subject: [PATCH] Add ptsname(3). --- libc/Makefile | 1 + libc/include/stdlib.h | 2 +- libc/stdlib/ptsname.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 libc/stdlib/ptsname.c diff --git a/libc/Makefile b/libc/Makefile index f6734389..f1094961 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -537,6 +537,7 @@ stdlib/mkstemp.o \ stdlib/mkstemps.o \ stdlib/on_exit.o \ stdlib/posix_openpt.o \ +stdlib/ptsname.o \ stdlib/rand.o \ stdlib/realpath.o \ stdlib/setenv.o \ diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index e7d10840..f7abebfb 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -158,7 +158,6 @@ long lrand48(void); long mrand48(void); long nrand48(unsigned short[3]); int posix_memalign(void**, size_t, size_t); -char* ptsname(int); long random(void); int rand_r(unsigned *); unsigned short *seed48(unsigned short [3]); @@ -171,6 +170,7 @@ void srandom(unsigned); #if __USE_SORTIX || __USE_XOPEN int grantpt(int); int unlockpt(int); +char* ptsname(int); #endif #if __USE_SORTIX || 600 <= __USE_XOPEN diff --git a/libc/stdlib/ptsname.c b/libc/stdlib/ptsname.c new file mode 100644 index 00000000..a52e90c9 --- /dev/null +++ b/libc/stdlib/ptsname.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016 Jonas 'Sortie' Termansen. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * unistd/ptsname.c + * Returns the path of a pseudoterminal master's slave. + */ + +#include + +#include +#include + +#if !defined(TTY_NAME_MAX) +#include +#endif + +char* ptsname(int fd) +{ + static char name[TTY_NAME_MAX+1]; + name[0] = '/'; + name[1] = 'd'; + name[2] = 'e'; + name[3] = 'v'; + name[4] = '/'; + if ( ioctl(fd, TIOCGNAME, name + 5) < 0 ) + return NULL; + return name; +}