const char *pstack = "/usr/proc/bin/pstack";
if (access(pstack, X_OK) == 0) {
char buf[100];
+ int sz = snprintf(buf, sizeof(buf), "%s %d >&2", pstack,
+ (int)getpid());
stderr_out("\nC backtrace follows:\n"
"(A real debugger may provide better information)\n\n");
- sprintf(buf, "%s %d >&2", pstack,
- (int)getpid());
- system(buf);
+ if ( sz >= 0 && sz < sizeof(buf)) {
+ sz = system(buf);
+ if ( sz != 0 )
+ stderr_out("\nStacktrace utility execution error code: %d\n", sz);
+ } else {
+ stderr_out("\nCould not build command line for stacktrace utility.\n");
+ }
}
}
# endif
size_t edlen = XSTRING_LENGTH(Vexec_directory);
char mdocfile[edlen+countof(make_docfile_prog)];
char **newargv = xnew_array_and_zero(char*, c), **p;
+ int ret = -1;
/* set up the program call */
xstrncpy(mdocfile,
for (char **o = p, **n = &newargv[1]; *o;) {
*n++ = *o++;
}
- return execv(mdocfile, newargv);
+ ret = execv(mdocfile, newargv);
+ xfree(newargv);
+ return ret;
}
static inline void*
close(1);
if (open(term, O_RDWR | OPEN_BINARY, 2) < 0)
fatal("%s: %s", term, strerror(errno));
- dup(0);
+ if( dup(0) < 0)
+ fatal("dup failed %s: %s", term, strerror(errno));
if (!isatty(0))
fatal("%s: not a tty", term);
("\nFatal error: assertion failed, file %s, line %d, %s\n",
file, line, expr);
}
+ fflush(stderr);
enter_debugger();
#if !defined (ASSERTIONS_DONT_ABORT)