X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fbacktrace.c;h=6bc22bf643020eda53dc225dca81735d34d7de3b;hp=567e55f5d9129869518fcd47f75507b42166ca26;hb=7bfb3050edda3cfa84906284a329e3f7fb017e24;hpb=51e1ca7946289042c3c09e92afc1c1c465f5d870 diff --git a/src/backtrace.c b/src/backtrace.c index 567e55f..6bc22bf 100644 --- a/src/backtrace.c +++ b/src/backtrace.c @@ -39,12 +39,12 @@ #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) {