summaryrefslogtreecommitdiff
path: root/src/cairo-base85-stream.c
diff options
context:
space:
mode:
authorCarl Worth <cworth@raht.cworth.org>2006-04-04 12:50:44 -0700
committerCarl Worth <cworth@raht.cworth.org>2006-04-04 12:50:44 -0700
commit45bbdf94cbac736c9f854012581e8f914a6e27df (patch)
tree3427cb8685c55c54c3d378b53525badd98a870b7 /src/cairo-base85-stream.c
parentd1134cd7e25a78c70819df879336f895134bafe1 (diff)
downloadcairo-45bbdf94cbac736c9f854012581e8f914a6e27df.tar.gz
Break PostScript image data into chunks that each fit into a string.
This solves the problem with the previous commit that made strings longer than the "standard" 65k implementation limit for strings. It's achieved by removing the line-wrapping from the base85 stream and instead adding a new string-array stream between the base85 stream and the output stream (the string-array stream does the line wrapping and enforces the 65k characters per string limit).
Diffstat (limited to 'src/cairo-base85-stream.c')
-rw-r--r--src/cairo-base85-stream.c30
1 files changed, 9 insertions, 21 deletions
diff --git a/src/cairo-base85-stream.c b/src/cairo-base85-stream.c
index 4ea94ead9..bd1a7ac7e 100644
--- a/src/cairo-base85-stream.c
+++ b/src/cairo-base85-stream.c
@@ -40,7 +40,6 @@ typedef struct _cairo_base85_stream {
cairo_output_stream_t *output;
unsigned char four_tuple[4];
int pending;
- int column;
} cairo_base85_stream_t;
static void
@@ -63,15 +62,6 @@ _expand_four_tuple_to_five (unsigned char four_tuple[4],
}
}
-static void
-_cairo_base85_wrap_perhaps (cairo_base85_stream_t *stream)
-{
- if (stream->column >= 72) {
- _cairo_output_stream_write (stream->output, "\n", 1);
- stream->column = 0;
- }
-}
-
static cairo_status_t
_cairo_base85_stream_write_data (void *closure,
const unsigned char *data,
@@ -87,14 +77,10 @@ _cairo_base85_stream_write_data (void *closure,
length--;
if (stream->pending == 4) {
_expand_four_tuple_to_five (stream->four_tuple, five_tuple, &is_zero);
- if (is_zero) {
+ if (is_zero)
_cairo_output_stream_write (stream->output, "z", 1);
- stream->column += 1;
- } else {
+ else
_cairo_output_stream_write (stream->output, five_tuple, 5);
- stream->column += 5;
- }
- _cairo_base85_wrap_perhaps (stream);
stream->pending = 0;
}
}
@@ -105,6 +91,7 @@ _cairo_base85_stream_write_data (void *closure,
static cairo_status_t
_cairo_base85_stream_close (void *closure)
{
+ cairo_status_t status;
cairo_base85_stream_t *stream = closure;
unsigned char five_tuple[5];
@@ -112,14 +99,16 @@ _cairo_base85_stream_close (void *closure)
memset (stream->four_tuple + stream->pending, 0, 4 - stream->pending);
_expand_four_tuple_to_five (stream->four_tuple, five_tuple, NULL);
_cairo_output_stream_write (stream->output, five_tuple, stream->pending + 1);
- stream->column += stream->pending + 1;
- _cairo_base85_wrap_perhaps (stream);
}
/* Mark end of base85 data */
- _cairo_output_stream_printf (stream->output, "~>\n");
+ _cairo_output_stream_printf (stream->output, "~>");
- return _cairo_output_stream_get_status (stream->output);
+ status = _cairo_output_stream_get_status (stream->output);
+
+ free (stream);
+
+ return status;
}
cairo_output_stream_t *
@@ -133,7 +122,6 @@ _cairo_base85_stream_create (cairo_output_stream_t *output)
stream->output = output;
stream->pending = 0;
- stream->column = 0;
return _cairo_output_stream_create (_cairo_base85_stream_write_data,
_cairo_base85_stream_close,