summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2002-04-04 22:15:13 +0000
committerobrien <obrien@FreeBSD.org>2002-04-04 22:15:13 +0000
commit6d04a5e00de92a0e2da33c1829c1766c1af9aad9 (patch)
tree3a25a713dc77168854d928d9e620dfa331c13b52 /usr.bin
parente14f194d590e5c6c2a6faecaf8427d228e70d002 (diff)
downloadFreeBSD-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')
-rw-r--r--usr.bin/yacc/main.c12
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;
OpenPOWER on IntegriCloud