void die(fz_error *eo) { fflush(stdout); fz_printerror(eo); fflush(stderr); abort(); }
fz_error fz_rethrowimp(fz_error cause, const char *file, int line, const char *func, char *fmt, ...) { char buf[100]; va_list ap; va_start(ap, fmt); vsnprintf(buf, sizeof buf, fmt, ap); va_end(ap); fz_printerror('|', file, line, func, buf); return cause; }
void die(fz_error *eo) { fflush(stdout); fz_printerror(eo); fz_droperror(eo); fflush(stderr); if (drawgc) fz_droprenderer(drawgc); closesrc(); abort(); }
void opensrc(char *filename, char *password, int loadpages) { fz_error *error; closesrc(); srcname = filename; error = pdf_newxref(&src); if (error) die(error); error = pdf_loadxref(src, filename); if (error) { fz_printerror(error); fz_warn("trying to repair"); error = pdf_repairxref(src, filename); if (error) die(error); } error = pdf_decryptxref(src); if (error) die(error); if (src->crypt) { int okay = pdf_setpassword(src->crypt, password); if (!okay) die(fz_throw("invalid password")); } if (loadpages) { error = pdf_loadpagetree(&srcpages, src); if (error) die(error); } }
void fz_dropstream(fz_stream *stm) { stm->refs --; if (stm->refs == 0) { if (stm->error) { fflush(stdout); fz_printerror(stm->error); fz_droperror(stm->error); fflush(stderr); fz_warn("dropped unhandled ioerror"); } if (stm->mode == FZ_SWRITE) { stm->buffer->eof = 1; fz_flush(stm); } switch (stm->kind) { case FZ_SFILE: close(stm->file); break; case FZ_SFILTER: fz_dropfilter(stm->filter); fz_dropstream(stm->chain); break; case FZ_SBUFFER: break; } fz_dropbuffer(stm->buffer); fz_free(stm); } }
void fz_printerror(fz_error *eo) { #if 1 if (eo->cause) { fz_printerror(eo->cause); fprintf(stderr, "| %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg); } else { fprintf(stderr, "+ %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg); } #else fprintf(stderr, "+ %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg); eo = eo->cause; while (eo) { fprintf(stderr, "| %s:%d: %s(): %s\n", eo->file, eo->line, eo->func, eo->msg); eo = eo->cause; } #endif }
void opensrc(char *filename, char *password, int loadpages) { fz_error *error; fz_obj *obj; closesrc(); srcname = filename; error = pdf_newxref(&src); if (error) die(error); error = pdf_loadxref(src, filename); if (error) { fz_printerror(error); fz_droperror(error); fz_warn("trying to repair"); error = pdf_repairxref(src, filename); if (error) die(error); } error = pdf_decryptxref(src); if (error) die(error); if (src->crypt) { int okay = pdf_setpassword(src->crypt, password); if (!okay) die(fz_throw("invalid password")); } if (loadpages) { error = pdf_loadpagetree(&srcpages, src); if (error) die(error); } /* TODO: move into mupdf lib, see pdfapp_open in pdfapp.c */ obj = fz_dictgets(src->trailer, "Root"); if (!obj) die(error); error = pdf_loadindirect(&src->root, src, obj); if (error) die(error); obj = fz_dictgets(src->trailer, "Info"); if (obj) { error = pdf_loadindirect(&src->info, src, obj); if (error) die(error); } error = pdf_loadnametrees(src); if (error) die(error); error = pdf_loadoutline(&srcoutline, src); if (error) die(error); }