diff options
author | obrien <obrien@FreeBSD.org> | 2002-04-04 22:15:13 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2002-04-04 22:15:13 +0000 |
commit | 6d04a5e00de92a0e2da33c1829c1766c1af9aad9 (patch) | |
tree | 3a25a713dc77168854d928d9e620dfa331c13b52 /usr.bin/yacc | |
parent | e14f194d590e5c6c2a6faecaf8427d228e70d002 (diff) | |
download | FreeBSD-src-6d04a5e00de92a0e2da33c1829c1766c1af9aad9.zip FreeBSD-src-6d04a5e00de92a0e2da33c1829c1766c1af9aad9.tar.gz |
Fix signal race.
Use strlen() rather than magic number.
Use _PATH_TMP.
Obtained from: OpenBSD rev 1.13 (sig race) & rev 1.9 (strlen)
Diffstat (limited to 'usr.bin/yacc')
-rw-r--r-- | usr.bin/yacc/main.c | 12 |
1 files changed, 8 insertions, 4 deletions
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 <paths.h> #include <signal.h> #include <stdlib.h> #include <string.h> @@ -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; |