From b8882f1d2fbaba38e56c7c38a2dc2c784864a3a4 Mon Sep 17 00:00:00 2001 From: Taco Hoekwater Date: Sat, 19 Jul 2008 09:42:36 +0000 Subject: [PATCH] Better error reporting for invalid mem files git-svn-id: svn+ssh://scm.foundry.supelec.fr/svn/metapost/mplib/trunk@643 b0617d17-b707-0410-b22c-fd2634e05cc4 --- src/texk/web2c/mpdir/memio.w | 8 ++++---- src/texk/web2c/mpdir/mp.w | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/texk/web2c/mpdir/memio.w b/src/texk/web2c/mpdir/memio.w index 783176f..06bf9bf 100644 --- a/src/texk/web2c/mpdir/memio.w +++ b/src/texk/web2c/mpdir/memio.w @@ -169,18 +169,18 @@ the same strings. (And it is, of course, a good thing that they do.) @^string pool@> @ @c -boolean mp_undump_constants (MP mp) { +int mp_undump_constants (MP mp) { integer x; undump_int(x); - if (x!=metapost_magic) return false; + if (x!=metapost_magic) return x; undump_int(x); mp->mem_top = x; undump_int(x); mp->hash_size = (unsigned)x; undump_int(x); mp->hash_prime = x; undump_int(x); mp->param_size = x; undump_int(x); mp->max_in_open = x; - return true; + return metapost_magic; OFF_BASE: - return false; + return -1; } @ We do string pool compaction to avoid dumping unused strings. diff --git a/src/texk/web2c/mpdir/mp.w b/src/texk/web2c/mpdir/mp.w index 66ecce8..4f5e4c7 100644 --- a/src/texk/web2c/mpdir/mp.w +++ b/src/texk/web2c/mpdir/mp.w @@ -96,6 +96,7 @@ undergoes any modifications, so that it will be clear which version of @(mpmp.h@>= #define metapost_version "1.091" #define metapost_magic (('M'*256) + 'P')*65536 + 1091 +#define metapost_old_magic (('M'*256) + 'P')*65536 + 1080 @ The external library header for \MP\ is |mplib.h|. It contains a few typedefs and the header defintions for the externally used @@ -25870,7 +25871,7 @@ mp->mem_ident=xstrdup(" (INIMP)"); @ @= extern void mp_store_mem_file (MP mp) ; extern boolean mp_load_mem_file (MP mp); -extern boolean mp_undump_constants (MP mp); +extern int mp_undump_constants (MP mp); @ @= xfree(mp->mem_ident); @@ -25944,17 +25945,25 @@ if (mp->ini_version) { mp->hash_size=0x8000000; mp->hash_prime=mp_prime_choices[(i-14)]; } else { + int i = -1; if (mp->mem_name == NULL) { mp->mem_name = mp_xstrdup(mp,"plain"); } if (mp_open_mem_file(mp)) { - if (!mp_undump_constants(mp)) + i = mp_undump_constants(mp); + if (i != metapost_magic); goto OFF_BASE; set_value(mp->mem_max,opt->main_memory,mp->mem_top); goto DONE; } OFF_BASE: - wterm_ln("(Fatal mem file error; I'm stymied)\n"); + wterm_ln("(Fatal mem file error; "); + wterm((mp->find_file)(mp, mp->mem_name, "r", mp_filetype_memfile)); + if (i>metapost_old_magic && ihistory = mp_fatal_error_stop; mp_jump_out(mp); } -- 2.32.0.93.g670b81a890