Fix if/else scope in yow.c from Rudi
[sxemacs] / src / emacs.c
index 397936f..555fa35 100644 (file)
@@ -633,11 +633,17 @@ fatal_error_signal(int sig)
                        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
@@ -818,6 +824,7 @@ make_docfile(int c, char **v)
        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,
@@ -840,7 +847,9 @@ make_docfile(int c, char **v)
        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*
@@ -1038,7 +1047,8 @@ DOESNT_RETURN main_1(int argc, char **argv, char **envp, int restart)
                        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);
 
@@ -3260,6 +3270,7 @@ assert_failed(const char *file, int line, const char *expr)
                            ("\nFatal error: assertion failed, file %s, line %d, %s\n",
                             file, line, expr);
        }
+       fflush(stderr);
 
        enter_debugger();
 #if !defined (ASSERTIONS_DONT_ABORT)