summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2017-10-17 16:41:59 +0200
committerTor Andersson <tor.andersson@artifex.com>2017-11-01 13:08:56 +0100
commit1dc763159b03cbd4387713f353f26c890d2c0e52 (patch)
treed43c18deeacd70e23d7e353c8f0c074c87419a34
parentf595e889b91a674eb94db7ca4d832da54f5194cd (diff)
downloadmupdf-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.h24
-rw-r--r--platform/java/mupdf_native.c1
-rw-r--r--source/fitz/bitmap.c6
-rw-r--r--source/fitz/output-pcl.c8
-rw-r--r--source/fitz/output-pclm.c5
-rw-r--r--source/fitz/output-png.c2
-rw-r--r--source/fitz/output-pnm.c2
-rw-r--r--source/fitz/output-ps.c4
-rw-r--r--source/fitz/output-psd.c1
-rw-r--r--source/fitz/output-pwg.c4
-rw-r--r--source/fitz/output-svg.c10
-rw-r--r--source/fitz/output-tga.c3
-rw-r--r--source/fitz/output.c33
-rw-r--r--source/fitz/stext-output.c1
-rw-r--r--source/fitz/zip.c2
-rw-r--r--source/gprf/gprf-skeleton.c3
-rw-r--r--source/pdf/pdf-op-buffer.c8
-rw-r--r--source/pdf/pdf-write.c6
-rw-r--r--source/tools/mudraw.c3
-rw-r--r--source/tools/muraster.c1
-rw-r--r--source/tools/pdfextract.c12
-rw-r--r--source/tools/pdfinfo.c11
-rw-r--r--source/tools/pdfpages.c11
-rw-r--r--source/tools/pdfshow.c15
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)
{