Make strace_fopen abort on error

Error from strace_fopen in main results in call to exit(1).
Error from strace_fopen in newoutf is propagated to newoutf
callers: startup_attach (where it results in exit(1))
and alloc_tcb (where error is ignored). In second case,
the behavior doesn't seem to be right: it means with -ff
on open error for new LOGFILE.PID the output will continue
to go into *the same file as the previous process* - which
would be confusing. Moreover, on droptcb outf may be closed
and the output of other, still running process outputting
to the same outf will be lost. I don't think this is sane.
IOW: in all cases, error in strace_fopen should be fatal.

* strace.c (strace_fopen): Abort on error instead of returning NULL.
  (newoutf): Change return type to void.
  (startup_attach): Remove error check on newoutf return value.
  (main): Remove error check on strace_fopen return value.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
diff --git a/strace.c b/strace.c
index d353eac..bbb7ac1 100644
--- a/strace.c
+++ b/strace.c
@@ -333,17 +333,16 @@
 #endif
 
 static FILE *
-strace_fopen(const char *path, const char *mode)
+strace_fopen(const char *path)
 {
 	FILE *fp;
 
 	swap_uid();
-	if ((fp = fopen_for_output(path, mode)) == NULL)
-		fprintf(stderr, "%s: can't fopen '%s': %s\n",
-			progname, path, strerror(errno));
+	fp = fopen_for_output(path, "w");
+	if (!fp)
+		perror_msg_and_die("Can't fopen '%s'", path);
 	swap_uid();
-	if (fp)
-		set_cloexec_flag(fileno(fp));
+	set_cloexec_flag(fileno(fp));
 	return fp;
 }
 
@@ -395,19 +394,14 @@
 	return fp;
 }
 
-static int
+static void
 newoutf(struct tcb *tcp)
 {
 	if (outfname && followfork > 1) {
 		char name[520 + sizeof(int) * 3];
-		FILE *fp;
-
 		sprintf(name, "%.512s.%u", outfname, tcp->pid);
-		if ((fp = strace_fopen(name, "w")) == NULL)
-			return -1;
-		tcp->outf = fp;
+		tcp->outf = strace_fopen(name);
 	}
-	return 0;
 }
 
 static void
@@ -455,8 +449,7 @@
 #endif
 		/* Reinitialize the output since it may have changed. */
 		tcp->outf = outf;
-		if (newoutf(tcp) < 0)
-			exit(1);
+		newoutf(tcp);
 
 #ifdef USE_PROCFS
 		if (proc_open(tcp, 1) < 0) {
@@ -1129,9 +1122,8 @@
 				error_msg_and_die("Piping the output and -ff are mutually exclusive");
 			outf = strace_popen(outfname + 1);
 		}
-		else if (followfork <= 1 &&
-			 (outf = strace_fopen(outfname, "w")) == NULL)
-			exit(1);
+		else if (followfork <= 1)
+			outf = strace_fopen(outfname);
 	}
 
 	if (!outfname || outfname[0] == '|' || outfname[0] == '!')