summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mupdf/fitz/output.h5
-rw-r--r--source/fitz/output.c12
-rw-r--r--source/tools/murun.c12
3 files changed, 29 insertions, 0 deletions
diff --git a/include/mupdf/fitz/output.h b/include/mupdf/fitz/output.h
index e7179a3b..fbb769ae 100644
--- a/include/mupdf/fitz/output.h
+++ b/include/mupdf/fitz/output.h
@@ -133,4 +133,9 @@ int fz_snprintf(char *buffer, int space, const char *fmt, ...);
*/
char *fz_tempfilename(fz_context *ctx, const char *base, const char *hint);
+/*
+ fz_save_buffer: Save contents of a buffer to file.
+*/
+void fz_save_buffer(fz_context *ctx, fz_buffer *buf, const char *filename);
+
#endif
diff --git a/source/fitz/output.c b/source/fitz/output.c
index 0dd0eb04..ed6e89a3 100644
--- a/source/fitz/output.c
+++ b/source/fitz/output.c
@@ -186,3 +186,15 @@ fz_printf(fz_context *ctx, fz_output *out, const char *fmt, ...)
fz_vprintf(ctx, out, fmt, args);
va_end(args);
}
+
+void
+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(ctx, out, buf->data, buf->len);
+ fz_always(ctx)
+ fz_drop_output(ctx, out);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
+}
diff --git a/source/tools/murun.c b/source/tools/murun.c
index 194bc6c2..79846fb9 100644
--- a/source/tools/murun.c
+++ b/source/tools/murun.c
@@ -1489,6 +1489,17 @@ static void ffi_Buffer_writeLine(js_State *J)
rethrow(J);
}
+static void ffi_Buffer_save(js_State *J)
+{
+ fz_context *ctx = js_getcontext(J);
+ fz_buffer *buf = js_touserdata(J, 0, "fz_buffer");
+ const char *filename = js_tostring(J, 1);
+ fz_try(ctx)
+ fz_save_buffer(ctx, buf, filename);
+ fz_catch(ctx)
+ rethrow(J);
+}
+
static void ffi_new_Document(js_State *J)
{
fz_context *ctx = js_getcontext(J);
@@ -2670,6 +2681,7 @@ int murun_main(int argc, char **argv)
jsB_propfun(J, "Buffer.writeRune", ffi_Buffer_writeRune, 1);
jsB_propfun(J, "Buffer.writeLine", ffi_Buffer_writeLine, 1);
jsB_propfun(J, "Buffer.write", ffi_Buffer_write, 1);
+ jsB_propfun(J, "Buffer.save", ffi_Buffer_save, 1);
}
js_setregistry(J, "fz_buffer");