Merge "Fix ptsname(3) and ttyname(3) to use TLS."
This commit is contained in:
commit
6a6845244c
@ -36,6 +36,11 @@
|
||||
#include <unistd.h>
|
||||
#include <utmp.h>
|
||||
|
||||
#include "private/ThreadLocalBuffer.h"
|
||||
|
||||
GLOBAL_INIT_THREAD_LOCAL_BUFFER(ptsname);
|
||||
GLOBAL_INIT_THREAD_LOCAL_BUFFER(ttyname);
|
||||
|
||||
int getpt() {
|
||||
return posix_openpt(O_RDWR|O_NOCTTY);
|
||||
}
|
||||
@ -49,8 +54,9 @@ int posix_openpt(int flags) {
|
||||
}
|
||||
|
||||
char* ptsname(int fd) {
|
||||
static char buf[32];
|
||||
return ptsname_r(fd, buf, sizeof(buf)) == 0 ? buf : NULL;
|
||||
LOCAL_INIT_THREAD_LOCAL_BUFFER(char*, ptsname, 32);
|
||||
int error = ptsname_r(fd, ptsname_tls_buffer, ptsname_tls_buffer_size);
|
||||
return (error == 0) ? ptsname_tls_buffer : NULL;
|
||||
}
|
||||
|
||||
int ptsname_r(int fd, char* buf, size_t len) {
|
||||
@ -74,8 +80,9 @@ int ptsname_r(int fd, char* buf, size_t len) {
|
||||
}
|
||||
|
||||
char* ttyname(int fd) {
|
||||
static char buf[64];
|
||||
return ttyname_r(fd, buf, sizeof(buf)) == 0 ? buf : NULL;
|
||||
LOCAL_INIT_THREAD_LOCAL_BUFFER(char*, ttyname, 64);
|
||||
int error = ttyname_r(fd, ttyname_tls_buffer, ttyname_tls_buffer_size);
|
||||
return (error == 0) ? ttyname_tls_buffer : NULL;
|
||||
}
|
||||
|
||||
int ttyname_r(int fd, char* buf, size_t len) {
|
||||
|
@ -131,7 +131,7 @@ void srandom(unsigned int);
|
||||
int getpt(void);
|
||||
int grantpt(int);
|
||||
int posix_openpt(int);
|
||||
char* ptsname(int) __warnattr("ptsname is not thread-safe; use ptsname_r instead");
|
||||
char* ptsname(int);
|
||||
int ptsname_r(int, char*, size_t);
|
||||
int unlockpt(int);
|
||||
|
||||
|
@ -195,7 +195,7 @@ extern char *optarg;
|
||||
extern int optind, opterr, optopt;
|
||||
|
||||
extern int isatty(int);
|
||||
extern char* ttyname(int) __warnattr("ttyname is not thread-safe; use ttyname_r instead");
|
||||
extern char* ttyname(int);
|
||||
extern int ttyname_r(int, char*, size_t);
|
||||
|
||||
extern int acct(const char* filepath);
|
||||
|
@ -76,7 +76,7 @@ enum {
|
||||
* pthread_key_create; grep for GLOBAL_INIT_THREAD_LOCAL_BUFFER to find those. We need to manually
|
||||
* maintain that second number, but pthread_test will fail if we forget.
|
||||
*/
|
||||
#define GLOBAL_INIT_THREAD_LOCAL_BUFFER_COUNT 5
|
||||
#define GLOBAL_INIT_THREAD_LOCAL_BUFFER_COUNT 9
|
||||
|
||||
#if defined(USE_JEMALLOC)
|
||||
/* jemalloc uses 5 keys for itself. */
|
||||
|
Loading…
Reference in New Issue
Block a user