diff options
author | Tor Andersson <tor@ghostscript.com> | 2008-03-21 13:28:39 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2008-03-21 13:28:39 +0100 |
commit | 4b9181cdb56a9d2015f8d79e90015038f4792334 (patch) | |
tree | 507876fcec4f91aa591f3cbf2196f4dcc4deeaad /stream/stm_open.c | |
parent | 65e3374a2415399ded4624326a01bb9dfa77fa9e (diff) | |
download | mupdf-4b9181cdb56a9d2015f8d79e90015038f4792334.tar.xz |
Backport of chained error messages from experimental branch.
Diffstat (limited to 'stream/stm_open.c')
-rw-r--r-- | stream/stm_open.c | 86 |
1 files changed, 51 insertions, 35 deletions
diff --git a/stream/stm_open.c b/stream/stm_open.c index 43d2a60b..c10d1509 100644 --- a/stream/stm_open.c +++ b/stream/stm_open.c @@ -28,19 +28,6 @@ newstm(int kind, int mode) return stm; } -fz_error * -fz_ioerror(fz_stream *stm) -{ - fz_error *error; - if (stm->error) - { - error = stm->error; - stm->error = nil; - return error; - } - return fz_throw("ioerror: no error"); -} - fz_stream * fz_keepstream(fz_stream *stm) { @@ -56,7 +43,7 @@ fz_dropstream(fz_stream *stm) { if (stm->error) { - fz_warn("unhandled %s", stm->error->msg); + fz_warn("dropping unhandled ioerror"); fz_droperror(stm->error); } @@ -92,13 +79,13 @@ openfile(fz_stream **stmp, char *path, int mode, int realmode) stm = newstm(FZ_SFILE, mode); if (!stm) - return fz_outofmem; + return fz_throw("outofmem: stream struct"); error = fz_newbuffer(&stm->buffer, FZ_BUFSIZE); if (error) { fz_free(stm); - return error; + return fz_rethrow(error, "cannot create buffer"); } stm->file = open(path, realmode, 0666); @@ -106,11 +93,11 @@ openfile(fz_stream **stmp, char *path, int mode, int realmode) { fz_dropbuffer(stm->buffer); fz_free(stm); - return fz_throw("ioerror: open '%s' failed: %s", path, strerror(errno)); + return fz_throw("syserr: open '%s': %s", path, strerror(errno)); } *stmp = stm; - return nil; + return fz_okay; } static fz_error * @@ -121,20 +108,20 @@ openfilter(fz_stream **stmp, fz_filter *flt, fz_stream *src, int mode) stm = newstm(FZ_SFILTER, mode); if (!stm) - return fz_outofmem; + return fz_throw("outofmem: stream struct"); error = fz_newbuffer(&stm->buffer, FZ_BUFSIZE); if (error) { fz_free(stm); - return error; + return fz_rethrow(error, "cannot create buffer"); } stm->chain = fz_keepstream(src); stm->filter = fz_keepfilter(flt); *stmp = stm; - return nil; + return fz_okay; } static fz_error * @@ -144,7 +131,7 @@ openbuffer(fz_stream **stmp, fz_buffer *buf, int mode) stm = newstm(FZ_SBUFFER, mode); if (!stm) - return fz_outofmem; + return fz_throw("outofmem: stream struct"); stm->buffer = fz_keepbuffer(buf); @@ -152,18 +139,26 @@ openbuffer(fz_stream **stmp, fz_buffer *buf, int mode) stm->buffer->eof = 1; *stmp = stm; - return nil; + return fz_okay; } fz_error * fz_openrfile(fz_stream **stmp, char *path) { - return openfile(stmp, path, FZ_SREAD, O_BINARY | O_RDONLY); + fz_error *error; + error = openfile(stmp, path, FZ_SREAD, O_BINARY | O_RDONLY); + if (error) + return fz_rethrow(error, "cannot open file for reading: '%s'", path); + return fz_okay; } fz_error * fz_openwfile(fz_stream **stmp, char *path) { - return openfile(stmp, path, FZ_SWRITE, + fz_error *error; + error = openfile(stmp, path, FZ_SWRITE, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC); + if (error) + return fz_rethrow(error, "cannot open file for writing: '%s'", path); + return fz_okay; } fz_error * fz_openafile(fz_stream **stmp, char *path) @@ -173,51 +168,72 @@ fz_error * fz_openafile(fz_stream **stmp, char *path) error = openfile(stmp, path, FZ_SWRITE, O_BINARY | O_WRONLY); if (error) - return error; + return fz_rethrow(error, "cannot open file for writing: '%s'", path); t = lseek((*stmp)->file, 0, 2); if (t < 0) { (*stmp)->dead = 1; - return fz_throw("ioerror: lseek: %s", strerror(errno)); + return fz_throw("syserr: lseek '%s': %s", path, strerror(errno)); } - return nil; + return fz_okay; } fz_error * fz_openrfilter(fz_stream **stmp, fz_filter *flt, fz_stream *src) { - return openfilter(stmp, flt, src, FZ_SREAD); + fz_error *error; + error = openfilter(stmp, flt, src, FZ_SREAD); + if (error) + return fz_rethrow(error, "cannot create reading filter stream"); + return fz_okay; } fz_error * fz_openwfilter(fz_stream **stmp, fz_filter *flt, fz_stream *src) { - return openfilter(stmp, flt, src, FZ_SWRITE); + fz_error *error; + error = openfilter(stmp, flt, src, FZ_SWRITE); + if (error) + return fz_rethrow(error, "cannot create writing filter stream"); + return fz_okay; } fz_error * fz_openrbuffer(fz_stream **stmp, fz_buffer *buf) { - return openbuffer(stmp, buf, FZ_SREAD); + fz_error *error; + error = openbuffer(stmp, buf, FZ_SREAD); + if (error) + return fz_rethrow(error, "cannot create reading buffer stream"); + return fz_okay; } fz_error * fz_openwbuffer(fz_stream **stmp, fz_buffer *buf) { - return openbuffer(stmp, buf, FZ_SWRITE); + fz_error *error; + error = openbuffer(stmp, buf, FZ_SWRITE); + if (error) + return fz_rethrow(error, "cannot create writing buffer stream"); + return fz_okay; } -fz_error * fz_openrmemory(fz_stream **stmp, unsigned char *mem, int len) +fz_error * fz_openrmemory(fz_stream **stmp, char *mem, int len) { fz_error *error; fz_buffer *buf; error = fz_newbufferwithmemory(&buf, mem, len); if (error) - return error; + return fz_rethrow(error, "cannot create memory buffer"); error = fz_openrbuffer(stmp, buf); + if (error) + { + fz_dropbuffer(buf); + return fz_rethrow(error, "cannot open memory buffer stream"); + } fz_dropbuffer(buf); - return error; + return fz_okay; } |