From 6d04a5e00de92a0e2da33c1829c1766c1af9aad9 Mon Sep 17 00:00:00 2001 From: obrien Date: Thu, 4 Apr 2002 22:15:13 +0000 Subject: Fix signal race. Use strlen() rather than magic number. Use _PATH_TMP. Obtained from: OpenBSD rev 1.13 (sig race) & rev 1.9 (strlen) --- usr.bin/yacc/main.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'usr.bin') diff --git a/usr.bin/yacc/main.c b/usr.bin/yacc/main.c index 0a9983c..0e7bb3f 100644 --- a/usr.bin/yacc/main.c +++ b/usr.bin/yacc/main.c @@ -45,6 +45,7 @@ static char sccsid[] = "@(#)main.c 5.5 (Berkeley) 5/24/93"; __FBSDID("$FreeBSD$"); #endif +#include #include #include #include @@ -113,14 +114,16 @@ static void open_files(void); static void set_signals(void); static void usage(void); +volatile sig_atomic_t sigdie; -void +__dead2 void done(k) int k; { if (action_file) { fclose(action_file); unlink(action_file_name); } if (text_file) { fclose(text_file); unlink(text_file_name); } if (union_file) { fclose(union_file); unlink(union_file_name); } + if (sigdie) { _exit(k); } exit(k); } @@ -129,6 +132,7 @@ static void onintr(signo) int signo __unused; { + sigdie = 1; done(1); } @@ -297,11 +301,11 @@ create_file_names() int i, len; const char *tmpdir; - tmpdir = getenv("TMPDIR"); - if (tmpdir == 0) tmpdir = "/tmp"; + if (!(tmpdir = getenv("TMPDIR"))) + tmpdir = _PATH_TMP; len = strlen(tmpdir); - i = len + 17; + i = len + strlen(temp_form) + 1; if (len && tmpdir[len-1] != '/') ++i; -- cgit v1.1