about summary refs log tree commit diff
path: root/generator
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2017-08-29 01:54:44 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2017-08-29 01:54:44 +0000
commita77773083d63fdf786f6f26fe382bd05db7de8e4 (patch)
tree52fd31b037d3ace0396e1afa3922d2e185f4993a /generator
parent531cb40ce582b4a4436aab661b9298501ff0cb1e (diff)
downloadnetpbm-mirror-a77773083d63fdf786f6f26fe382bd05db7de8e4.tar.gz
netpbm-mirror-a77773083d63fdf786f6f26fe382bd05db7de8e4.tar.xz
netpbm-mirror-a77773083d63fdf786f6f26fe382bd05db7de8e4.zip
Add context to error message when can't load font from file
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@3053 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'generator')
-rw-r--r--generator/pbmtext.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/generator/pbmtext.c b/generator/pbmtext.c
index 80fecdd5..e25c6bbe 100644
--- a/generator/pbmtext.c
+++ b/generator/pbmtext.c
@@ -18,11 +18,13 @@
 #include <math.h>
 #include <limits.h>
 #include <assert.h>
+#include <setjmp.h>
 
 #include "pm_c_util.h"
 #include "mallocvar.h"
 #include "nstring.h"
 #include "shhopt.h"
+#include "pm.h"
 #include "pbm.h"
 #include "pbmfont.h"
 
@@ -157,6 +159,37 @@ reportFont(struct font * const fontP) {
 
 
 
+static struct font *
+fontFromFile(const char * const fileName) {
+
+    struct font * retval;
+
+    jmp_buf jmpbuf;
+    int rc;
+
+    rc = setjmp(jmpbuf);
+
+    if (rc == 0) {
+        /* This is the normal program flow */
+        pm_setjmpbuf(&jmpbuf);
+
+        retval = pbm_loadfont(fileName);
+
+        pm_setjmpbuf(NULL);
+    } else {
+        /* This is the second pass, after pbm_loadfont does a longjmp
+           because it fails.
+        */
+        pm_setjmpbuf(NULL);
+
+        pm_error("Failed to load font from file '%s'", fileName);
+    }
+
+    return retval;
+}
+
+
+
 static void
 computeFont(struct CmdlineInfo const cmdline,
             struct font **     const fontPP) {
@@ -164,7 +197,7 @@ computeFont(struct CmdlineInfo const cmdline,
     struct font * fontP;
 
     if (cmdline.font)
-        fontP = pbm_loadfont(cmdline.font);
+        fontP = fontFromFile(cmdline.font);
     else {
         if (cmdline.builtin)
             fontP = pbm_defaultfont(cmdline.builtin);