diff options
author | Colin Cross <ccross@android.com> | 2010-01-12 12:58:12 -0800 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2010-01-12 12:58:12 -0800 |
commit | 6458c49c96fd2069a82fa6bb48283b4397087a25 (patch) | |
tree | 68fcbb5f16ce4bb500f065129c2cf5297cb59e6f | |
parent | 0b5db51ea6d9c0b877d2ce26440d963760c38dfe (diff) | |
download | bionic-6458c49c96fd2069a82fa6bb48283b4397087a25.zip bionic-6458c49c96fd2069a82fa6bb48283b4397087a25.tar.gz bionic-6458c49c96fd2069a82fa6bb48283b4397087a25.tar.bz2 |
Fix ptsname_r(3) return type to match glibc
The gHardy man pages specify the return type of ptsname_r to be char*, but the
return value to be 0 on success, negative on error and the gHardy stdlib.h
defines extern int ptsname_r(...).
Busybox telnetd fails to run successfully without this change.
-rw-r--r-- | libc/include/stdlib.h | 2 | ||||
-rw-r--r-- | libc/unistd/ptsname_r.c | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index acfe694..41e8d26 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -132,7 +132,7 @@ static __inline__ void srandom(unsigned int __s) extern int unlockpt(int); extern char* ptsname(int); -extern char* ptsname_r(int, char*, size_t); +extern int ptsname_r(int, char*, size_t); extern int getpt(void); static __inline__ int grantpt(int __fd) diff --git a/libc/unistd/ptsname_r.c b/libc/unistd/ptsname_r.c index 1ed067b..2fa4c3d 100644 --- a/libc/unistd/ptsname_r.c +++ b/libc/unistd/ptsname_r.c @@ -32,7 +32,7 @@ #include <errno.h> #include <string.h> -char* ptsname_r( int fd, char* buf, size_t buflen) +int ptsname_r( int fd, char* buf, size_t buflen) { unsigned int pty_num; char buff[64]; @@ -40,17 +40,19 @@ char* ptsname_r( int fd, char* buf, size_t buflen) if (buf == NULL) { errno = EINVAL; - return NULL; + return -1; } - if ( ioctl( fd, TIOCGPTN, &pty_num ) != 0 ) - return NULL; + if ( ioctl( fd, TIOCGPTN, &pty_num ) != 0 ) { + errno = ENOTTY; + return -1; + } len = snprintf( buff, sizeof(buff), "/dev/pts/%u", pty_num ); if (len+1 > (int)buflen) { errno = ERANGE; - return NULL; + return -1; } memcpy( buf, buff, len+1 ); - return buf; + return 0; } |