diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2017-10-17 16:41:59 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2017-11-01 13:08:56 +0100 |
commit | 1dc763159b03cbd4387713f353f26c890d2c0e52 (patch) | |
tree | d43c18deeacd70e23d7e353c8f0c074c87419a34 | |
parent | f595e889b91a674eb94db7ca4d832da54f5194cd (diff) | |
download | mupdf-1dc763159b03cbd4387713f353f26c890d2c0e52.tar.xz |
Add separate fz_close_output step.
Closing flushes output and may throw exceptions.
Dropping frees the state and never throws exceptions.
-rw-r--r-- | include/mupdf/fitz/output.h | 24 | ||||
-rw-r--r-- | platform/java/mupdf_native.c | 1 | ||||
-rw-r--r-- | source/fitz/bitmap.c | 6 | ||||
-rw-r--r-- | source/fitz/output-pcl.c | 8 | ||||
-rw-r--r-- | source/fitz/output-pclm.c | 5 | ||||
-rw-r--r-- | source/fitz/output-png.c | 2 | ||||
-rw-r--r-- | source/fitz/output-pnm.c | 2 | ||||
-rw-r--r-- | source/fitz/output-ps.c | 4 | ||||
-rw-r--r-- | source/fitz/output-psd.c | 1 | ||||
-rw-r--r-- | source/fitz/output-pwg.c | 4 | ||||
-rw-r--r-- | source/fitz/output-svg.c | 10 | ||||
-rw-r--r-- | source/fitz/output-tga.c | 3 | ||||
-rw-r--r-- | source/fitz/output.c | 33 | ||||
-rw-r--r-- | source/fitz/stext-output.c | 1 | ||||
-rw-r--r-- | source/fitz/zip.c | 2 | ||||
-rw-r--r-- | source/gprf/gprf-skeleton.c | 3 | ||||
-rw-r--r-- | source/pdf/pdf-op-buffer.c | 8 | ||||
-rw-r--r-- | source/pdf/pdf-write.c | 6 | ||||
-rw-r--r-- | source/tools/mudraw.c | 3 | ||||
-rw-r--r-- | source/tools/muraster.c | 1 | ||||
-rw-r--r-- | source/tools/pdfextract.c | 12 | ||||
-rw-r--r-- | source/tools/pdfinfo.c | 11 | ||||
-rw-r--r-- | source/tools/pdfpages.c | 11 | ||||
-rw-r--r-- | source/tools/pdfshow.c | 15 |
24 files changed, 114 insertions, 62 deletions
diff --git a/include/mupdf/fitz/output.h b/include/mupdf/fitz/output.h index c3c21c96..0425e353 100644 --- a/include/mupdf/fitz/output.h +++ b/include/mupdf/fitz/output.h @@ -50,13 +50,19 @@ typedef int64_t (fz_output_tell_fn)(fz_context *ctx, void *state); /* fz_output_close_fn: A function type for use when implementing fz_outputs. The supplied function of this type is called - when the output stream is closed, to release the stream specific - state information. - - state: The output stream state to release. + when the output stream is closed, to flush any pending writes. */ typedef void (fz_output_close_fn)(fz_context *ctx, void *state); +/* + fz_output_drop_fn: A function type for use when implementing + fz_outputs. The supplied function of this type is called + when the output stream is dropped, to release the stream specific + state information. +*/ +typedef void (fz_output_drop_fn)(fz_context *ctx, void *state); + + struct fz_output_s { void *state; @@ -64,6 +70,7 @@ struct fz_output_s fz_output_seek_fn *seek; fz_output_tell_fn *tell; fz_output_close_fn *close; + fz_output_drop_fn *drop; }; /* @@ -77,7 +84,7 @@ struct fz_output_s close: Cleanup function to destroy state when output closed. May permissibly be null. */ -fz_output *fz_new_output(fz_context *ctx, void *state, fz_output_write_fn *write, fz_output_close_fn *close); +fz_output *fz_new_output(fz_context *ctx, void *state, fz_output_write_fn *write, fz_output_close_fn *close, fz_output_drop_fn *drop); /* fz_new_output_with_path: Open an output stream that writes to a @@ -155,7 +162,12 @@ void fz_seek_output(fz_context *ctx, fz_output *out, int64_t off, int whence); int64_t fz_tell_output(fz_context *ctx, fz_output *out); /* - fz_drop_output: Close and free an output stream. + fz_close_output: Flush pending output and close an output stream. +*/ +void fz_close_output(fz_context *, fz_output *); + +/* + fz_drop_output: Free an output stream. Don't forget to close it first! */ void fz_drop_output(fz_context *, fz_output *); diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c index e6d3629d..171a2e8d 100644 --- a/platform/java/mupdf_native.c +++ b/platform/java/mupdf_native.c @@ -5052,6 +5052,7 @@ FUN(Page_textAsHtml)(JNIEnv *env, jobject self) fz_print_stext_header_as_html(ctx, out); fz_print_stext_page_as_html(ctx, out, text); fz_print_stext_trailer_as_html(ctx, out); + fz_close_output(ctx, out); } fz_always(ctx) { diff --git a/source/fitz/bitmap.c b/source/fitz/bitmap.c index cee3a3fa..fe16759c 100644 --- a/source/fitz/bitmap.c +++ b/source/fitz/bitmap.c @@ -453,7 +453,10 @@ fz_save_bitmap_as_pbm(fz_context *ctx, fz_bitmap *bitmap, const char *filename) { fz_output *out = fz_new_output_with_path(ctx, filename, 0); fz_try(ctx) + { fz_write_bitmap_as_pbm(ctx, out, bitmap); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) @@ -465,7 +468,10 @@ fz_save_bitmap_as_pkm(fz_context *ctx, fz_bitmap *bitmap, const char *filename) { fz_output *out = fz_new_output_with_path(ctx, filename, 0); fz_try(ctx) + { fz_write_bitmap_as_pkm(ctx, out, bitmap); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) diff --git a/source/fitz/output-pcl.c b/source/fitz/output-pcl.c index 3898ac9c..4b885fe3 100644 --- a/source/fitz/output-pcl.c +++ b/source/fitz/output-pcl.c @@ -1379,7 +1379,10 @@ fz_save_pixmap_as_pcl(fz_context *ctx, fz_pixmap *pixmap, char *filename, int ap { fz_output *out = fz_new_output_with_path(ctx, filename, append); fz_try(ctx) + { fz_write_pixmap_as_pcl(ctx, out, pixmap, pcl); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) @@ -1391,7 +1394,10 @@ fz_save_bitmap_as_pcl(fz_context *ctx, fz_bitmap *bitmap, char *filename, int ap { fz_output *out = fz_new_output_with_path(ctx, filename, append); fz_try(ctx) + { fz_write_bitmap_as_pcl(ctx, out, bitmap, pcl); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) @@ -1453,6 +1459,8 @@ pcl_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev) static void pcl_close_writer(fz_context *ctx, fz_document_writer *wri_) { + fz_pcl_writer *wri = (fz_pcl_writer*)wri_; + fz_close_output(ctx, wri->out); } static void diff --git a/source/fitz/output-pclm.c b/source/fitz/output-pclm.c index 8f05f3bf..f3aa2ec2 100644 --- a/source/fitz/output-pclm.c +++ b/source/fitz/output-pclm.c @@ -298,7 +298,10 @@ fz_save_pixmap_as_pclm(fz_context *ctx, fz_pixmap *pixmap, char *filename, int a { fz_output *out = fz_new_output_with_path(ctx, filename, append); fz_try(ctx) + { fz_write_pixmap_as_pclm(ctx, out, pixmap, pclm); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) @@ -354,6 +357,8 @@ pclm_close_writer(fz_context *ctx, fz_document_writer *wri_) fz_drop_band_writer(ctx, wri->bander); wri->bander = NULL; + + fz_close_output(ctx, wri->out); } static void diff --git a/source/fitz/output-png.c b/source/fitz/output-png.c index 709d65f0..59dbba94 100644 --- a/source/fitz/output-png.c +++ b/source/fitz/output-png.c @@ -37,6 +37,7 @@ fz_save_pixmap_as_png(fz_context *ctx, fz_pixmap *pixmap, const char *filename) writer = fz_new_png_band_writer(ctx, out); fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 0, pixmap->colorspace, pixmap->seps); fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); + fz_close_output(ctx, out); } fz_always(ctx) { @@ -357,6 +358,7 @@ png_from_pixmap(fz_context *ctx, fz_pixmap *pix, const fz_color_params *color_pa buf = fz_new_buffer(ctx, 1024); out = fz_new_output_with_buffer(ctx, buf); fz_write_pixmap_as_png(ctx, out, pix); + fz_close_output(ctx, out); } fz_always(ctx) { diff --git a/source/fitz/output-pnm.c b/source/fitz/output-pnm.c index 2c4d4d30..9bc5e6aa 100644 --- a/source/fitz/output-pnm.c +++ b/source/fitz/output-pnm.c @@ -150,6 +150,7 @@ fz_save_pixmap_as_pnm(fz_context *ctx, fz_pixmap *pixmap, const char *filename) writer = fz_new_pnm_band_writer(ctx, out); fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 0, pixmap->colorspace, pixmap->seps); fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); + fz_close_output(ctx, out); } fz_always(ctx) { @@ -256,6 +257,7 @@ fz_save_pixmap_as_pam(fz_context *ctx, fz_pixmap *pixmap, const char *filename) writer = fz_new_pam_band_writer(ctx, out); fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, 0, 0, 0, pixmap->colorspace, pixmap->seps); fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); + fz_close_output(ctx, out); } fz_always(ctx) { diff --git a/source/fitz/output-ps.c b/source/fitz/output-ps.c index f0af6ff0..2d9ccf1f 100644 --- a/source/fitz/output-ps.c +++ b/source/fitz/output-ps.c @@ -179,7 +179,10 @@ void fz_save_pixmap_as_ps(fz_context *ctx, fz_pixmap *pixmap, char *filename, in { fz_output *out = fz_new_output_with_path(ctx, filename, append); fz_try(ctx) + { fz_write_pixmap_as_ps(ctx, out, pixmap); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) @@ -314,6 +317,7 @@ ps_close_writer(fz_context *ctx, fz_document_writer *wri_) { fz_ps_writer *wri = (fz_ps_writer*)wri_; fz_write_ps_file_trailer(ctx, wri->out, wri->count); + fz_close_output(ctx, wri->out); } static void diff --git a/source/fitz/output-psd.c b/source/fitz/output-psd.c index 37d51bc8..223a591e 100644 --- a/source/fitz/output-psd.c +++ b/source/fitz/output-psd.c @@ -15,6 +15,7 @@ fz_save_pixmap_as_psd(fz_context *ctx, fz_pixmap *pixmap, const char *filename) writer = fz_new_psd_band_writer(ctx, out); fz_write_header(ctx, writer, pixmap->w, pixmap->h, pixmap->n, pixmap->alpha, pixmap->xres, pixmap->yres, 0, pixmap->colorspace, pixmap->seps); fz_write_band(ctx, writer, pixmap->stride, pixmap->h, pixmap->samples); + fz_close_output(ctx, out); } fz_always(ctx) { diff --git a/source/fitz/output-pwg.c b/source/fitz/output-pwg.c index 8abcbb6d..42ad4a1f 100644 --- a/source/fitz/output-pwg.c +++ b/source/fitz/output-pwg.c @@ -150,6 +150,7 @@ fz_save_pixmap_as_pwg(fz_context *ctx, fz_pixmap *pixmap, char *filename, int ap if (!append) fz_write_pwg_file_header(ctx, out); fz_write_pixmap_as_pwg_page(ctx, out, pixmap, pwg); + fz_close_output(ctx, out); } fz_always(ctx) fz_drop_output(ctx, out); @@ -166,6 +167,7 @@ fz_save_bitmap_as_pwg(fz_context *ctx, fz_bitmap *bitmap, char *filename, int ap if (!append) fz_write_pwg_file_header(ctx, out); fz_write_bitmap_as_pwg_page(ctx, out, bitmap, pwg); + fz_close_output(ctx, out); } fz_always(ctx) fz_drop_output(ctx, out); @@ -448,6 +450,8 @@ pwg_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev) static void pwg_close_writer(fz_context *ctx, fz_document_writer *wri_) { + fz_pwg_writer *wri = (fz_pwg_writer*)wri_; + fz_close_output(ctx, wri->out); } static void diff --git a/source/fitz/output-svg.c b/source/fitz/output-svg.c index 7bae9d4f..8895960a 100644 --- a/source/fitz/output-svg.c +++ b/source/fitz/output-svg.c @@ -46,14 +46,18 @@ svg_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev) fz_svg_writer *wri = (fz_svg_writer*)wri_; fz_try(ctx) + { fz_close_device(ctx, dev); + fz_close_output(ctx, wri->out); + } fz_always(ctx) + { fz_drop_device(ctx, dev); + fz_drop_output(ctx, wri->out); + wri->out = NULL; + } fz_catch(ctx) fz_rethrow(ctx); - - fz_drop_output(ctx, wri->out); - wri->out = NULL; } static void diff --git a/source/fitz/output-tga.c b/source/fitz/output-tga.c index 4206154a..3bee3640 100644 --- a/source/fitz/output-tga.c +++ b/source/fitz/output-tga.c @@ -55,7 +55,10 @@ fz_save_pixmap_as_tga(fz_context *ctx, fz_pixmap *pixmap, const char *filename) { fz_output *out = fz_new_output_with_path(ctx, filename, 0); fz_try(ctx) + { fz_write_pixmap_as_tga(ctx, out, pixmap); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) diff --git a/source/fitz/output.c b/source/fitz/output.c index 06b25be5..a06a81b6 100644 --- a/source/fitz/output.c +++ b/source/fitz/output.c @@ -150,16 +150,16 @@ file_tell(fz_context *ctx, void *opaque) } static void -file_close(fz_context *ctx, void *opaque) +file_drop(fz_context *ctx, void *opaque) { FILE *file = opaque; int n = fclose(file); if (n < 0) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot fclose: %s", strerror(errno)); + fz_warn(ctx, "cannot fclose: %s", strerror(errno)); } fz_output * -fz_new_output(fz_context *ctx, void *state, fz_output_write_fn *write, fz_output_close_fn *close) +fz_new_output(fz_context *ctx, void *state, fz_output_write_fn *write, fz_output_close_fn *close, fz_output_drop_fn *drop) { fz_output *out = NULL; @@ -169,11 +169,12 @@ fz_new_output(fz_context *ctx, void *state, fz_output_write_fn *write, fz_output out->state = state; out->write = write; out->close = close; + out->drop = drop; } fz_catch(ctx) { - if (close) - close(ctx, state); + if (drop) + drop(ctx, state); fz_rethrow(ctx); } return out; @@ -210,7 +211,7 @@ fz_new_output_with_path(fz_context *ctx, const char *filename, int append) if (!file) fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file '%s': %s", filename, strerror(errno)); - out = fz_new_output(ctx, file, file_write, file_close); + out = fz_new_output(ctx, file, file_write, NULL, file_drop); out->seek = file_seek; out->tell = file_tell; @@ -238,7 +239,7 @@ buffer_tell(fz_context *ctx, void *opaque) } static void -buffer_close(fz_context *ctx, void *opaque) +buffer_drop(fz_context *ctx, void *opaque) { fz_buffer *buffer = opaque; fz_drop_buffer(ctx, buffer); @@ -247,18 +248,29 @@ buffer_close(fz_context *ctx, void *opaque) fz_output * fz_new_output_with_buffer(fz_context *ctx, fz_buffer *buf) { - fz_output *out = fz_new_output(ctx, fz_keep_buffer(ctx, buf), buffer_write, buffer_close); + fz_output *out = fz_new_output(ctx, fz_keep_buffer(ctx, buf), buffer_write, NULL, buffer_drop); out->seek = buffer_seek; out->tell = buffer_tell; return out; } void -fz_drop_output(fz_context *ctx, fz_output *out) +fz_close_output(fz_context *ctx, fz_output *out) { if (!out) return; if (out->close) out->close(ctx, out->state); + out->close = NULL; +} + +void +fz_drop_output(fz_context *ctx, fz_output *out) +{ + if (!out) return; + if (out->close) + fz_warn(ctx, "dropping unclosed output"); + if (out->drop) + out->drop(ctx, out->state); if (out->state != &fz_stdout_global && out->state != &fz_stderr_global) fz_free(ctx, out); } @@ -434,7 +446,10 @@ fz_save_buffer(fz_context *ctx, fz_buffer *buf, const char *filename) { fz_output *out = fz_new_output_with_path(ctx, filename, 0); fz_try(ctx) + { fz_write_data(ctx, out, buf->data, buf->len); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) diff --git a/source/fitz/stext-output.c b/source/fitz/stext-output.c index c2218357..6a23cc6d 100644 --- a/source/fitz/stext-output.c +++ b/source/fitz/stext-output.c @@ -516,6 +516,7 @@ text_close_writer(fz_context *ctx, fz_document_writer *wri_) fz_write_string(ctx, wri->out, "</document>\n"); break; } + fz_close_output(ctx, wri->out); } static void diff --git a/source/fitz/zip.c b/source/fitz/zip.c index fbca0590..c7625a28 100644 --- a/source/fitz/zip.c +++ b/source/fitz/zip.c @@ -84,6 +84,8 @@ fz_close_zip_writer(fz_context *ctx, fz_zip_writer *zip) fz_write_data(ctx, zip->output, "MuPDF", 5); + fz_close_output(ctx, zip->output); + zip->closed = 1; } diff --git a/source/gprf/gprf-skeleton.c b/source/gprf/gprf-skeleton.c index d4ad734c..f70e82a5 100644 --- a/source/gprf/gprf-skeleton.c +++ b/source/gprf/gprf-skeleton.c @@ -17,7 +17,6 @@ fz_save_gproof(fz_context *ctx, const char *pdf_file, fz_document *doc, const ch fz_throw(ctx, FZ_ERROR_GENERIC, "Cannot write a 0 page GProof skeleton file"); out = fz_new_output_with_path(ctx, filename, 0); - fz_try(ctx) { /* File Signature: GPRO */ @@ -54,6 +53,8 @@ fz_save_gproof(fz_context *ctx, const char *pdf_file, fz_document *doc, const ch fz_write_data(ctx, out, pdf_file, strlen(pdf_file)+1); fz_write_data(ctx, out, print_profile, strlen(print_profile) + 1); fz_write_data(ctx, out, display_profile, strlen(display_profile) + 1); + + fz_close_output(ctx, out); } fz_always(ctx) { diff --git a/source/pdf/pdf-op-buffer.c b/source/pdf/pdf-op-buffer.c index 6382d71e..69707843 100644 --- a/source/pdf/pdf-op-buffer.c +++ b/source/pdf/pdf-op-buffer.c @@ -789,6 +789,13 @@ pdf_out_EX(fz_context *ctx, pdf_processor *proc) } static void +pdf_close_output_processor(fz_context *ctx, pdf_processor *proc) +{ + fz_output *out = ((pdf_output_processor*)proc)->out; + fz_close_output(ctx, out); +} + +static void pdf_drop_output_processor(fz_context *ctx, pdf_processor *proc) { fz_output *out = ((pdf_output_processor*)proc)->out; @@ -800,6 +807,7 @@ pdf_new_output_processor(fz_context *ctx, fz_output *out, int ahxencode) { pdf_output_processor *proc = pdf_new_processor(ctx, sizeof *proc); { + proc->super.close_processor = pdf_close_output_processor; proc->super.drop_processor = pdf_drop_output_processor; /* general graphics state */ diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c index 9f123206..b97a9956 100644 --- a/source/pdf/pdf-write.c +++ b/source/pdf/pdf-write.c @@ -3073,14 +3073,10 @@ void pdf_save_document(fz_context *ctx, pdf_document *doc, const char *filename, { opts.out = fz_new_output_with_path(ctx, filename, 0); } - - if (!opts.out) - fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open output file '%s'", filename); - fz_try(ctx) { do_pdf_save_document(ctx, doc, &opts, in_opts); - + fz_close_output(ctx, opts.out); complete_signatures(ctx, doc, &opts, filename); } fz_always(ctx) diff --git a/source/tools/mudraw.c b/source/tools/mudraw.c index c9c7bb55..e2322266 100644 --- a/source/tools/mudraw.c +++ b/source/tools/mudraw.c @@ -685,6 +685,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in else fz_run_page(ctx, page, dev, &ctm, cookie); fz_close_device(ctx, dev); + fz_close_output(ctx, out); } fz_always(ctx) { @@ -1136,6 +1137,7 @@ static void drawpage(fz_context *ctx, fz_document *doc, int pagenum) char text_buffer[512]; bgprint_flush(); + fz_close_output(ctx, out); fz_drop_output(ctx, out); fz_snprintf(text_buffer, sizeof(text_buffer), output, pagenum); out = fz_new_output_with_path(ctx, text_buffer, output_append); @@ -1948,6 +1950,7 @@ int mudraw_main(int argc, char **argv) } else { + fz_close_output(ctx, out); fz_drop_output(ctx, out); out = NULL; } diff --git a/source/tools/muraster.c b/source/tools/muraster.c index e48b8b09..956d420e 100644 --- a/source/tools/muraster.c +++ b/source/tools/muraster.c @@ -1718,6 +1718,7 @@ int main(int argc, char **argv) } #endif /* DISABLE_MUTHREADS */ + fz_close_output(ctx, out); fz_drop_output(ctx, out); out = NULL; diff --git a/source/tools/pdfextract.c b/source/tools/pdfextract.c index 8c17a980..c6fe92aa 100644 --- a/source/tools/pdfextract.c +++ b/source/tools/pdfextract.c @@ -66,21 +66,18 @@ static void writejpeg(fz_context *ctx, const unsigned char *data, size_t len, const char *file) { char buf[1024]; - fz_output *out = NULL; - - fz_var(out); + fz_output *out; snprintf(buf, sizeof(buf), "%s.jpg", file); + out = fz_new_output_with_path(ctx, buf, 0); fz_try(ctx) { - out = fz_new_output_with_path(ctx, buf, 0); fz_write_data(ctx, out, data, len); + fz_close_output(ctx, out); } fz_always(ctx) - { fz_drop_output(ctx, out); - } fz_catch(ctx) fz_rethrow(ctx); } @@ -199,7 +196,10 @@ static void savefont(pdf_obj *dict, int num) printf("extracting font %s\n", namebuf); out = fz_new_output_with_path(ctx, namebuf, 0); fz_try(ctx) + { fz_write_data(ctx, out, data, len); + fz_close_output(ctx, out); + } fz_always(ctx) fz_drop_output(ctx, out); fz_catch(ctx) diff --git a/source/tools/pdfinfo.c b/source/tools/pdfinfo.c index 585279b1..ba95db0c 100644 --- a/source/tools/pdfinfo.c +++ b/source/tools/pdfinfo.c @@ -1006,7 +1006,6 @@ int pdfinfo_main(int argc, char **argv) char *password = ""; int show = ALL; int c; - fz_output *out = NULL; int ret; fz_context *ctx; @@ -1037,19 +1036,11 @@ int pdfinfo_main(int argc, char **argv) exit(1); } - fz_var(out); - ret = 0; fz_try(ctx) - { - out = fz_stdout(ctx); - pdfinfo_info(ctx, out, filename, password, show, &argv[fz_optind], argc-fz_optind); - } + pdfinfo_info(ctx, fz_stdout(ctx), filename, password, show, &argv[fz_optind], argc-fz_optind); fz_catch(ctx) - { ret = 1; - } - fz_drop_output(ctx, out); fz_drop_context(ctx); return ret; } diff --git a/source/tools/pdfpages.c b/source/tools/pdfpages.c index 9e8f6050..70f601cd 100644 --- a/source/tools/pdfpages.c +++ b/source/tools/pdfpages.c @@ -175,7 +175,6 @@ int pdfpages_main(int argc, char **argv) char *filename = ""; char *password = ""; int c; - fz_output *out = NULL; int ret; fz_context *ctx; @@ -200,19 +199,11 @@ int pdfpages_main(int argc, char **argv) exit(1); } - fz_var(out); - ret = 0; fz_try(ctx) - { - out = fz_stdout(ctx); - ret = pdfpages_pages(ctx, out, filename, password, &argv[fz_optind], argc-fz_optind); - } + ret = pdfpages_pages(ctx, fz_stdout(ctx), filename, password, &argv[fz_optind], argc-fz_optind); fz_catch(ctx) - { ret = 1; - } - fz_drop_output(ctx, out); fz_drop_context(ctx); return ret; } diff --git a/source/tools/pdfshow.c b/source/tools/pdfshow.c index 0ae0fce7..c0358034 100644 --- a/source/tools/pdfshow.c +++ b/source/tools/pdfshow.c @@ -231,23 +231,12 @@ fz_print_outline(fz_context *ctx, fz_output *out, fz_outline *outline, int level static void showoutline(void) { fz_outline *outline = fz_load_outline(ctx, (fz_document*)doc); - fz_output *out = NULL; - - fz_var(out); fz_try(ctx) - { - out = fz_stdout(ctx); - fz_print_outline(ctx, out, outline, 0); - } + fz_print_outline(ctx, fz_stdout(ctx), outline, 0); fz_always(ctx) - { - fz_drop_output(ctx, out); fz_drop_outline(ctx, outline); - } fz_catch(ctx) - { fz_rethrow(ctx); - } } int pdfshow_main(int argc, char **argv) @@ -311,6 +300,8 @@ int pdfshow_main(int argc, char **argv) } fz_optind++; } + + fz_close_output(ctx, out); } fz_catch(ctx) { |