summaryrefslogtreecommitdiff
path: root/src/cairo-pdf-surface.c
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2021-09-01 21:33:29 +0930
committerAdrian Johnson <ajohnson@redneon.com>2021-09-02 18:39:53 +0930
commit6e3c7431ff3f9179c355289ac1fa3bab8750c463 (patch)
treec05b5bfe3229433ac1b1858ef48a4ff2f2657bb6 /src/cairo-pdf-surface.c
parent42d3f4cc29338dce02faf062ef6f18a1fe32ca99 (diff)
downloadcairo-6e3c7431ff3f9179c355289ac1fa3bab8750c463.tar.gz
Allow > 2GB PDF files on platforms with 32-bit long
Diffstat (limited to 'src/cairo-pdf-surface.c')
-rw-r--r--src/cairo-pdf-surface.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c
index 3c9d12471..ab666fa9a 100644
--- a/src/cairo-pdf-surface.c
+++ b/src/cairo-pdf-surface.c
@@ -243,7 +243,7 @@ typedef enum {
typedef struct _cairo_pdf_object {
cairo_pdf_object_type_t type;
union {
- long offset; /* type == PDF_OBJECT_UNCOMPRESSED */
+ long long offset; /* type == PDF_OBJECT_UNCOMPRESSED */
struct compressed_obj { /* type == PDF_OBJECT_COMPRESSED */
cairo_pdf_resource_t xref_stream;
int index;
@@ -253,7 +253,7 @@ typedef struct _cairo_pdf_object {
typedef struct _cairo_xref_stream_object {
cairo_pdf_resource_t resource;
- long offset;
+ long long offset;
} cairo_xref_stream_object_t;
typedef struct _cairo_pdf_font {
@@ -313,7 +313,7 @@ static cairo_int_status_t
_cairo_pdf_surface_write_catalog (cairo_pdf_surface_t *surface,
cairo_pdf_resource_t catalog);
-static long
+static long long
_cairo_pdf_surface_write_xref (cairo_pdf_surface_t *surface);
static cairo_int_status_t
@@ -321,7 +321,7 @@ _cairo_pdf_surface_write_xref_stream (cairo_pdf_surface_t *surface,
cairo_pdf_resource_t xref_res,
cairo_pdf_resource_t root_res,
cairo_pdf_resource_t info_res,
- long *xref_offset);
+ long long *xref_offset);
static cairo_int_status_t
_cairo_pdf_surface_write_patterns_and_smask_groups (cairo_pdf_surface_t *surface,
@@ -1936,7 +1936,7 @@ static cairo_int_status_t
_cairo_pdf_surface_close_stream (cairo_pdf_surface_t *surface)
{
cairo_int_status_t status;
- long length;
+ long long length;
if (! surface->pdf_stream.active)
return CAIRO_INT_STATUS_SUCCESS;
@@ -1966,7 +1966,7 @@ _cairo_pdf_surface_close_stream (cairo_pdf_surface_t *surface)
surface->pdf_stream.length);
_cairo_output_stream_printf (surface->output,
"%d 0 obj\n"
- " %ld\n"
+ " %lld\n"
"endobj\n",
surface->pdf_stream.length.id,
length);
@@ -2205,7 +2205,7 @@ _cairo_pdf_surface_close_object_stream (cairo_pdf_surface_t *surface)
{
int i, num_objects;
cairo_xref_stream_object_t *xref_obj;
- long start_pos, length;
+ long long start_pos, length;
cairo_output_stream_t *index_stream;
cairo_output_stream_t *deflate_stream;
cairo_pdf_resource_t length_res;
@@ -2230,7 +2230,7 @@ _cairo_pdf_surface_close_object_stream (cairo_pdf_surface_t *surface)
for (i = 0; i < num_objects; i++) {
xref_obj = _cairo_array_index (&surface->object_stream.objects, i);
_cairo_output_stream_printf (index_stream,
- "%d %ld\n",
+ "%d %lld\n",
xref_obj->resource.id,
xref_obj->offset);
}
@@ -2285,7 +2285,7 @@ _cairo_pdf_surface_close_object_stream (cairo_pdf_surface_t *surface)
length_res);
_cairo_output_stream_printf (surface->output,
"%d 0 obj\n"
- " %ld\n"
+ " %lld\n"
"endobj\n",
length_res.id,
length);
@@ -2423,7 +2423,7 @@ static cairo_status_t
_cairo_pdf_surface_finish (void *abstract_surface)
{
cairo_pdf_surface_t *surface = abstract_surface;
- long offset;
+ long long offset;
cairo_pdf_resource_t catalog;
cairo_status_t status, status2;
int size, i;
@@ -2491,7 +2491,7 @@ _cairo_pdf_surface_finish (void *abstract_surface)
}
_cairo_output_stream_printf (surface->output,
"startxref\n"
- "%ld\n"
+ "%lld\n"
"%%%%EOF\n",
offset);
@@ -6738,12 +6738,12 @@ _cairo_pdf_surface_write_catalog (cairo_pdf_surface_t *surface,
return status;
}
-static long
+static long long
_cairo_pdf_surface_write_xref (cairo_pdf_surface_t *surface)
{
cairo_pdf_object_t *object;
int num_objects, i;
- long offset;
+ long long offset;
char buffer[11];
num_objects = _cairo_array_num_elements (&surface->objects);
@@ -6758,7 +6758,7 @@ _cairo_pdf_surface_write_xref (cairo_pdf_surface_t *surface)
"0000000000 65535 f \n");
for (i = 0; i < num_objects; i++) {
object = _cairo_array_index (&surface->objects, i);
- snprintf (buffer, sizeof buffer, "%010ld", object->u.offset);
+ snprintf (buffer, sizeof buffer, "%010lld", object->u.offset);
_cairo_output_stream_printf (surface->output,
"%s 00000 n \n", buffer);
}
@@ -6771,7 +6771,7 @@ _cairo_write_xref_stream_entry (cairo_output_stream_t *stream,
int id,
int type,
int field2_size,
- long field2,
+ long long field2,
int field3,
cairo_bool_t write_as_comments)
{
@@ -6779,7 +6779,7 @@ _cairo_write_xref_stream_entry (cairo_output_stream_t *stream,
int i;
if (write_as_comments) {
- _cairo_output_stream_printf (stream, "%% %5d %2d %10ld %d\n", id, type, field2, field3);
+ _cairo_output_stream_printf (stream, "%% %5d %2d %10lld %d\n", id, type, field2, field3);
} else {
/* Each field is big endian */
buf[0] = type; /* field 1 */
@@ -6794,10 +6794,10 @@ _cairo_write_xref_stream_entry (cairo_output_stream_t *stream,
}
static void
-_cairo_write_xref_stream_entrys (cairo_pdf_surface_t *surface,
- cairo_output_stream_t *stream,
- int field2_size,
- cairo_bool_t write_as_comments)
+_cairo_write_xref_stream_entries (cairo_pdf_surface_t *surface,
+ cairo_output_stream_t *stream,
+ int field2_size,
+ cairo_bool_t write_as_comments)
{
cairo_pdf_object_t *object;
int num_objects, i;
@@ -6847,11 +6847,11 @@ _cairo_pdf_surface_write_xref_stream (cairo_pdf_surface_t *surface,
cairo_pdf_resource_t xref_res,
cairo_pdf_resource_t root_res,
cairo_pdf_resource_t info_res,
- long *xref_offset)
+ long long *xref_offset)
{
cairo_output_stream_t *mem_stream;
cairo_output_stream_t *xref_stream;
- long offset;
+ long long offset;
int offset_bytes;
cairo_status_t status;
@@ -6867,7 +6867,7 @@ _cairo_pdf_surface_write_xref_stream (cairo_pdf_surface_t *surface,
mem_stream = _cairo_memory_stream_create ();
xref_stream = _cairo_deflate_stream_create (mem_stream);
- _cairo_write_xref_stream_entrys (surface, xref_stream, offset_bytes, FALSE);
+ _cairo_write_xref_stream_entries (surface, xref_stream, offset_bytes, FALSE);
status = _cairo_output_stream_destroy (xref_stream);
if (unlikely (status))
@@ -6900,7 +6900,7 @@ _cairo_pdf_surface_write_xref_stream (cairo_pdf_surface_t *surface,
*/
_cairo_output_stream_printf (surface->output,
"%% id type offset/obj gen/index\n");
- _cairo_write_xref_stream_entrys (surface, surface->output, offset_bytes, TRUE);
+ _cairo_write_xref_stream_entries (surface, surface->output, offset_bytes, TRUE);
}
_cairo_output_stream_printf (surface->output,