From a16e37432be78978193afdad5512b9c04ec3d2ef Mon Sep 17 00:00:00 2001 From: Taco Hoekwater Date: Thu, 3 Jul 2008 08:56:34 +0000 Subject: [PATCH] fix 'may be clobbered by longjmp' warning git-svn-id: svn+ssh://scm.foundry.supelec.fr/svn/metapost/mplib/trunk@595 b0617d17-b707-0410-b22c-fd2634e05cc4 --- src/texk/web2c/mpdir/mp.w | 28 ++++++++++++++-------------- src/texk/web2c/mpdir/psout.w | 11 ++++++++--- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/texk/web2c/mpdir/mp.w b/src/texk/web2c/mpdir/mp.w index c132aad..6c8d5e3 100644 --- a/src/texk/web2c/mpdir/mp.w +++ b/src/texk/web2c/mpdir/mp.w @@ -22291,21 +22291,21 @@ int mp_execute (MP mp, char *s, size_t l) { @ This function cleans up @c int mp_finish (MP mp) { - int history = mp->history; - if (!mp->finished) { - if (mp->history < mp_fatal_error_stop ) { - jmp_buf buf; - mp->jump_buf = &buf; - if (setjmp(*(mp->jump_buf)) != 0) { - history = mp->history; - mp_close_files_and_terminate(mp); - goto RET; - } - mp_final_cleanup(mp); /* prepare for death */ - mp_close_files_and_terminate(mp); - } + jmp_buf buf; + int history = 0; + if (mp->finished || mp->history >= mp_fatal_error_stop) { + history = mp->history; + mp_free(mp); + return history; + } + mp->jump_buf = &buf; + if (setjmp(*(mp->jump_buf)) != 0) { + history = mp->history; + } else { + history = mp->history; + mp_final_cleanup(mp); /* prepare for death */ } - RET: + mp_close_files_and_terminate(mp); mp_free(mp); return history; } diff --git a/src/texk/web2c/mpdir/psout.w b/src/texk/web2c/mpdir/psout.w index 5d6980f..7f81c27 100644 --- a/src/texk/web2c/mpdir/psout.w +++ b/src/texk/web2c/mpdir/psout.w @@ -5402,11 +5402,12 @@ while ( p!=null ) { int mp_gr_ship_out (mp_edge_object *hh, int prologues, int procset, int standalone) ; @ @c -int mp_gr_ship_out (mp_edge_object *hh, int prologues, int procset, int standalone) { +int mp_gr_ship_out (mp_edge_object *hh, int qprologues, int qprocset, int standalone) { mp_graphic_object *p; scaled ds,scf; /* design size and scale factor for a text node */ font_number f; /* for loops over fonts while (un)marking characters */ boolean transformed; /* is the coordinate system being transformed? */ + int prologues, procset; MP mp = hh->_parent; if (standalone) { jmp_buf buf; @@ -5415,10 +5416,14 @@ int mp_gr_ship_out (mp_edge_object *hh, int prologues, int procset, int standalo return 0; } if (mp->history >= mp_fatal_error_stop ) return 1; - if (prologues<0) + if (qprologues<0) prologues = (mp->internal[mp_prologues]>>16); - if (procset<0) + else + prologues=qprologues; + if (qprocset<0) procset = (mp->internal[mp_procset]>>16); + else + procset=qprocset; mp_open_output_file(mp); mp_print_initial_comment(mp, hh, prologues); p = hh->body; -- 2.32.0.93.g670b81a890