diff options
| author | Rich Felker <dalias@aerifal.cx> | 2013-07-09 00:50:11 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2013-07-09 00:50:11 -0400 | 
| commit | b6218764ebca59ff5dae0e87b696188c8de0119e (patch) | |
| tree | f0f622a2360cd8cfa7a39c2d0fd7832679811e9c | |
| parent | cdf0f53f8ba0e79dedb83c626851597bacec53ca (diff) | |
| download | musl-b6218764ebca59ff5dae0e87b696188c8de0119e.tar.gz | |
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.
| -rw-r--r-- | src/unistd/ctermid.c | 17 | 
1 files 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;  }  | 
