summaryrefslogtreecommitdiff
path: root/src/cairo-output-stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cairo-output-stream.c')
-rw-r--r--src/cairo-output-stream.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/cairo-output-stream.c b/src/cairo-output-stream.c
index 14b4486a6..17ef7e2cb 100644
--- a/src/cairo-output-stream.c
+++ b/src/cairo-output-stream.c
@@ -90,6 +90,26 @@ _cairo_output_stream_write (cairo_output_stream_t *stream,
return stream->status;
}
+void
+_cairo_output_stream_write_hex_string (cairo_output_stream_t *stream,
+ const char *data,
+ size_t length)
+{
+ const char hex_chars[] = "0123456789abcdef";
+ char buffer[2];
+ int i, column;
+
+ for (i = 0, column = 0; i < length; i++, column++) {
+ if (column == 38) {
+ _cairo_output_stream_write (stream, "\n", 1);
+ column = 0;
+ }
+ buffer[0] = hex_chars[(data[i] >> 4) & 0x0f];
+ buffer[1] = hex_chars[data[i] & 0x0f];
+ _cairo_output_stream_write (stream, buffer, 2);
+ }
+}
+
/* Format a double in a locale independent way and trim trailing
* zeros. Based on code from Alex Larson <alexl@redhat.com>.
* http://mail.gnome.org/archives/gtk-devel-list/2001-October/msg00087.html
@@ -187,8 +207,8 @@ _cairo_output_stream_vprintf (cairo_output_stream_t *stream,
switch (*f | length_modifier) {
case '%':
- p[0] = *f;
- p[1] = 0;
+ buffer[0] = *f;
+ buffer[1] = 0;
break;
case 'd':
snprintf (buffer, sizeof buffer, "%d", va_arg (ap, int));
@@ -211,6 +231,10 @@ _cairo_output_stream_vprintf (cairo_output_stream_t *stream,
case 'f':
dtostr (buffer, sizeof buffer, va_arg (ap, double));
break;
+ case 'c':
+ buffer[0] = va_arg (ap, int);
+ buffer[1] = 0;
+ break;
default:
ASSERT_NOT_REACHED;
}