Simplify tcpip_get a bit YAZ-831
[yaz-moved-to-github.git] / src / backtrace.c
index 567e55f..6bc22bf 100644 (file)
 #define BACKTRACE_SZ 100
 
 static char static_progname[256];
+#if HAVE_EXECINFO_H
 
 static void yaz_invoke_backtrace(char *buf, int buf_sz)
 {
     FILE *file = yaz_log_file();
     int fd = fileno(file);
-#if HAVE_EXECINFO_H
     pid_t pid;
     int fds[2];
     void *backtrace_info[BACKTRACE_SZ];
@@ -54,11 +54,16 @@ static void yaz_invoke_backtrace(char *buf, int buf_sz)
     sz = backtrace(backtrace_info, sz);
     backtrace_symbols_fd(backtrace_info, sz, fd);
 
-    pipe(fds);
+    if (pipe(fds) == -1)
+    {
+        const char *cp = "backtrace: pipe failed\n";
+        write(fd, cp, strlen(cp));
+        return;
+    }
     pid = fork();
     if (pid == (pid_t) (-1))
     {   /* error */
-        const char *cp = "backtrace: fork failure";
+        const char *cp = "backtrace: fork failure\n";
         write(fd, cp, strlen(cp));
     }
     else if (pid == 0)
@@ -121,10 +126,6 @@ static void yaz_invoke_backtrace(char *buf, int buf_sz)
         }
         close(fds[1]);
     }
-#else
-    strcat(buf, "no backtrace support (execinfo.h not found)\n");
-    write(fd, buf, strlen(buf));
-#endif
 }
 
 static void yaz_panic_sig_handler(int sig)
@@ -156,6 +157,7 @@ static void yaz_panic_sig_handler(int sig)
     yaz_invoke_backtrace(buf, sizeof buf);
     abort();
 }
+#endif
 
 void yaz_enable_panic_backtrace(const char *progname)
 {