X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/ba0fe3ecfe639410b68c2115d67fe486ffbbe9b6..26c8c119efd44804c7b27f8637c69eda63f0c189:/error.c diff --git a/error.c b/error.c index f7461ef..00d007d 100644 --- a/error.c +++ b/error.c @@ -19,8 +19,9 @@ static void do_error(int code, va_list ap) { int i, j; char *sp, *sp2; wchar_t *wsp, *wsp2; - filepos fpos, fpos2; - int flags; + unsigned wc; + filepos fpos, fpos2, *fposp; + int flags = 0; switch(code) { case err_nomemory: /* no arguments */ @@ -248,11 +249,14 @@ static void do_error(int code, va_list ap) { flags = FILEPOS; break; case err_infonodechar: - fpos = *va_arg(ap, filepos *); + fposp = va_arg(ap, filepos *); c = (char)va_arg(ap, int); sprintf(error, "info output format does not support '%c' in" " node names; removing", c); - flags = FILEPOS; + if (fposp) { + flags = FILEPOS; + fpos = *fposp; + } break; case err_text_codeline: fpos = *va_arg(ap, filepos *); @@ -312,6 +316,73 @@ static void do_error(int code, va_list ap) { sprintf(error, "AFM key '%.200s' requires %d values", sp, i); flags = FILEPOS; break; + case err_pfeof: + fpos = *va_arg(ap, filepos *); + sprintf(error, "Type 1 font file ended unexpectedly"); + flags = FILEPOS; + break; + case err_pfhead: + fpos = *va_arg(ap, filepos *); + sprintf(error, "Type 1 font file header line invalid"); + flags = FILEPOS; + break; + case err_pfbad: + fpos = *va_arg(ap, filepos *); + sprintf(error, "Type 1 font file invalid"); + flags = FILEPOS; + break; + case err_pfnoafm: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "no metrics available for Type 1 font '%.200s'", sp); + flags = FILEPOS; + break; + case err_chmnames: + sprintf(error, "only one of html-mshtmlhelp-chm and " + "html-mshtmlhelp-hhp found"); + flags = PREFIX; + break; + case err_sfntnotable: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "font has no '%.4s' table", sp); + flags = FILEPOS; + break; + case err_sfntnopsname: + fpos = *va_arg(ap, filepos *); + sprintf(error, "font has no PostScript name"); + flags = FILEPOS; + break; + case err_sfntbadtable: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "font has an invalid '%.4s' table", sp); + flags = FILEPOS; + break; + case err_sfntnounicmap: + fpos = *va_arg(ap, filepos *); + sprintf(error, "font has no UCS-2 character map"); + flags = FILEPOS; + break; + case err_sfnttablevers: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "font has an unsupported '%.4s' table version", sp); + flags = FILEPOS; + break; + case err_sfntbadhdr: + fpos = *va_arg(ap, filepos *); + sprintf(error, "font has an invalid header"); + flags = FILEPOS; + break; + case err_sfntbadglyph: + fpos = *va_arg(ap, filepos *); + wc = va_arg(ap, unsigned); + sprintf(error, + "warning: character U+%04X references an non-existent glyph", + wc); + flags = FILEPOS; + break; case err_whatever: sp = va_arg(ap, char *); vsprintf(error, sp, ap); @@ -322,7 +393,7 @@ static void do_error(int code, va_list ap) { if (flags & PREFIX) fputs("halibut: ", stderr); if (flags & FILEPOS) { - fprintf(stderr, "%s:", fpos.filename); + fprintf(stderr, "%s:", fpos.filename ? fpos.filename : ""); if (fpos.line > 0) fprintf(stderr, "%d:", fpos.line); if (fpos.col > 0)