diff options
-rw-r--r-- | include/mupdf/fitz/output.h | 5 | ||||
-rw-r--r-- | source/fitz/output.c | 12 | ||||
-rw-r--r-- | source/tools/murun.c | 12 |
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"); |