From b6218764ebca59ff5dae0e87b696188c8de0119e Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 9 Jul 2013 00:50:11 -0400 Subject: [PATCH] fix bogus lazy allocation in ctermid and missing malloc failure check also clean up, optimize, and simplify the code, removing branches by simply pre-setting the result string to an empty string, which will be preserved if other operations fail. --- src/unistd/ctermid.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/unistd/ctermid.c b/src/unistd/ctermid.c index c238905a..ffa9b758 100644 --- a/src/unistd/ctermid.c +++ b/src/unistd/ctermid.c @@ -8,17 +8,14 @@ char *ctermid(char *s) { - static char *s2; + static char s2[L_ctermid]; int fd; - if (!s) { - if (!s2) s2 = malloc(L_ctermid); - s = s2; - } + if (!s) s = s2; + *s = 0; fd = open("/dev/tty", O_WRONLY | O_NOCTTY | O_CLOEXEC); - if (fd < 0) - return strcpy(s, ""); - if (ttyname_r(fd, s, L_ctermid)) - strcpy(s, ""); - __syscall(SYS_close, fd); + if (fd >= 0) { + ttyname_r(fd, s, L_ctermid); + __syscall(SYS_close, fd); + } return s; } -- 2.25.1