summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/pdf/pdf-clean-file.c6
-rw-r--r--source/pdf/pdf-clean.c12
-rw-r--r--source/pdf/pdf-device.c15
-rw-r--r--source/pdf/pdf-form.c150
-rw-r--r--source/pdf/pdf-object.c84
-rw-r--r--source/pdf/pdf-parse.c49
-rw-r--r--source/pdf/pdf-write.c25
-rw-r--r--source/pdf/pdf-xref.c24
8 files changed, 81 insertions, 284 deletions
diff --git a/source/pdf/pdf-clean-file.c b/source/pdf/pdf-clean-file.c
index f9311064..224a4d03 100644
--- a/source/pdf/pdf-clean-file.c
+++ b/source/pdf/pdf-clean-file.c
@@ -231,10 +231,8 @@ static void retainpages(fz_context *ctx, globals *glo, int argc, char **argv)
/* Update page count and kids array */
countobj = pdf_new_int(ctx, doc, pdf_array_len(ctx, kids));
- pdf_dict_put(ctx, pages, PDF_NAME_Count, countobj);
- pdf_drop_obj(ctx, countobj);
- pdf_dict_put(ctx, pages, PDF_NAME_Kids, kids);
- pdf_drop_obj(ctx, kids);
+ pdf_dict_put_drop(ctx, pages, PDF_NAME_Count, countobj);
+ pdf_dict_put_drop(ctx, pages, PDF_NAME_Kids, kids);
/* Force the next call to pdf_count_pages to recount */
glo->doc->page_count = 0;
diff --git a/source/pdf/pdf-clean.c b/source/pdf/pdf-clean.c
index b8fa96c7..42789323 100644
--- a/source/pdf/pdf-clean.c
+++ b/source/pdf/pdf-clean.c
@@ -7,14 +7,13 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob
pdf_processor *proc_buffer = NULL;
pdf_processor *proc_filter = NULL;
pdf_obj *res = NULL;
- pdf_obj *ref = NULL;
+ pdf_obj *ref;
fz_buffer *buffer;
if (!obj)
return;
fz_var(res);
- fz_var(ref);
fz_var(proc_buffer);
fz_var(proc_filter);
@@ -43,7 +42,7 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob
if (own_res)
{
ref = pdf_add_object(ctx, doc, res);
- pdf_dict_put(ctx, obj, PDF_NAME_Resources, ref);
+ pdf_dict_put_drop(ctx, obj, PDF_NAME_Resources, ref);
}
}
fz_always(ctx)
@@ -52,7 +51,6 @@ pdf_clean_stream_object(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_ob
pdf_drop_processor(ctx, proc_buffer);
fz_drop_buffer(ctx, buffer);
pdf_drop_obj(ctx, res);
- pdf_drop_obj(ctx, ref);
}
fz_catch(ctx)
{
@@ -66,12 +64,11 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_
pdf_processor *proc_buffer = NULL;
pdf_processor *proc_filter = NULL;
pdf_obj *res = NULL;
- pdf_obj *ref = NULL;
+ pdf_obj *ref;
pdf_obj *charprocs;
int i, l;
fz_var(res);
- fz_var(ref);
fz_var(proc_buffer);
fz_var(proc_filter);
@@ -118,12 +115,11 @@ pdf_clean_type3(fz_context *ctx, pdf_document *doc, pdf_obj *obj, pdf_obj *orig_
pdf_dict_put(ctx, res, PDF_NAME_ProcSet, pdf_dict_get(ctx, orig_res, PDF_NAME_ProcSet));
ref = pdf_add_object(ctx, doc, res);
- pdf_dict_put(ctx, obj, PDF_NAME_Resources, ref);
+ pdf_dict_put_drop(ctx, obj, PDF_NAME_Resources, ref);
}
fz_always(ctx)
{
pdf_drop_obj(ctx, res);
- pdf_drop_obj(ctx, ref);
}
fz_catch(ctx)
{
diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c
index a647702e..314dc85e 100644
--- a/source/pdf/pdf-device.c
+++ b/source/pdf/pdf-device.c
@@ -295,10 +295,7 @@ pdf_dev_alpha(fz_context *ctx, pdf_device *pdev, float alpha, int stroke)
if (i == pdev->num_alphas)
{
- pdf_obj *o;
- pdf_obj *ref = NULL;
-
- fz_var(ref);
+ pdf_obj *o, *ref;
/* No. Need to make a new one */
if (pdev->num_alphas == pdev->max_alphas)
@@ -317,14 +314,13 @@ pdf_dev_alpha(fz_context *ctx, pdf_device *pdev, float alpha, int stroke)
{
char text[32];
pdf_dict_put_drop(ctx, o, (stroke ? PDF_NAME_CA : PDF_NAME_ca), pdf_new_real(ctx, doc, alpha));
- ref = pdf_add_object(ctx, doc, o);
fz_snprintf(text, sizeof(text), "ExtGState/Alp%d", i);
- pdf_dict_putp(ctx, pdev->resources, text, ref);
+ ref = pdf_add_object(ctx, doc, o);
+ pdf_dict_putp_drop(ctx, pdev->resources, text, ref);
}
fz_always(ctx)
{
pdf_drop_obj(ctx, o);
- pdf_drop_obj(ctx, ref);
}
fz_catch(ctx)
{
@@ -929,13 +925,12 @@ pdf_dev_begin_mask(fz_context *ctx, fz_device *dev, const fz_rect *bbox, int lum
egs = pdf_new_dict(ctx, doc, 5);
pdf_dict_put_drop(ctx, egs, PDF_NAME_Type, PDF_NAME_ExtGState);
pdf_dict_put_drop(ctx, egs, PDF_NAME_SMask, pdf_add_object(ctx, doc, smask));
- egs_ref = pdf_add_object(ctx, doc, egs);
{
char text[32];
fz_snprintf(text, sizeof(text), "ExtGState/SM%d", pdev->num_smasks++);
- pdf_dict_putp(ctx, pdev->resources, text, egs_ref);
- pdf_drop_obj(ctx, egs_ref);
+ egs_ref = pdf_add_object(ctx, doc, egs);
+ pdf_dict_putp_drop(ctx, pdev->resources, text, egs_ref);
}
gs = CURRENT_GSTATE(pdev);
fz_append_printf(ctx, gs->buf, "/SM%d gs\n", pdev->num_smasks-1);
diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c
index b454420c..09b8258e 100644
--- a/source/pdf/pdf-form.c
+++ b/source/pdf/pdf-form.c
@@ -54,7 +54,7 @@ static void pdf_field_mark_dirty(fz_context *ctx, pdf_document *doc, pdf_obj *fi
static void update_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *obj, const char *text)
{
- pdf_obj *sobj = NULL;
+ pdf_obj *sobj;
pdf_obj *grp;
if (!text)
@@ -66,20 +66,8 @@ static void update_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *obj,
if (grp)
obj = grp;
- fz_var(sobj);
- fz_try(ctx)
- {
- sobj = pdf_new_string(ctx, doc, text, strlen(text));
- pdf_dict_put(ctx, obj, PDF_NAME_V, sobj);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, sobj);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
- }
+ sobj = pdf_new_string(ctx, doc, text, strlen(text));
+ pdf_dict_put_drop(ctx, obj, PDF_NAME_V, sobj);
pdf_field_mark_dirty(ctx, doc, obj);
}
@@ -163,18 +151,7 @@ static void reset_form_field(fz_context *ctx, pdf_document *doc, pdf_obj *field)
else
leafv = PDF_NAME_Off;
- fz_try(ctx)
- {
- pdf_dict_put(ctx, field, PDF_NAME_AS, leafv);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, leafv);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
- }
+ pdf_dict_put_drop(ctx, field, PDF_NAME_AS, leafv);
}
break;
@@ -554,23 +531,8 @@ static void toggle_check_box(fz_context *ctx, pdf_document *doc, pdf_obj *obj)
if (val && grp)
{
- pdf_obj *v = NULL;
-
- fz_var(v);
- fz_try(ctx)
- {
- v = pdf_new_string(ctx, doc, val, strlen(val));
- pdf_dict_put(ctx, grp, PDF_NAME_V, v);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, v);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
- }
-
+ pdf_obj *v = pdf_new_string(ctx, doc, val, strlen(val));
+ pdf_dict_put_drop(ctx, grp, PDF_NAME_V, v);
recalculate(ctx, doc);
}
}
@@ -825,26 +787,13 @@ static void update_checkbox_selector(fz_context *ctx, pdf_document *doc, pdf_obj
else
{
pdf_obj *n = pdf_dict_getp(ctx, field, "AP/N");
- pdf_obj *oval = NULL;
-
- fz_var(oval);
- fz_try(ctx)
- {
- if (pdf_dict_gets(ctx, n, val))
- oval = pdf_new_name(ctx, doc, val);
- else
- oval = PDF_NAME_Off;
+ pdf_obj *oval;
- pdf_dict_put(ctx, field, PDF_NAME_AS, oval);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, oval);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
- }
+ if (pdf_dict_gets(ctx, n, val))
+ oval = pdf_new_name(ctx, doc, val);
+ else
+ oval = PDF_NAME_Off;
+ pdf_dict_put_drop(ctx, field, PDF_NAME_AS, oval);
}
}
@@ -898,7 +847,7 @@ char *pdf_field_border_style(fz_context *ctx, pdf_document *doc, pdf_obj *field)
void pdf_field_set_border_style(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *text)
{
- pdf_obj *val = NULL;
+ pdf_obj *val;
if (!strcmp(text, "Solid"))
val = PDF_NAME_S;
@@ -913,40 +862,17 @@ void pdf_field_set_border_style(fz_context *ctx, pdf_document *doc, pdf_obj *fie
else
return;
- fz_try(ctx)
- {
- pdf_dict_putl(ctx, field, val, PDF_NAME_BS, PDF_NAME_S, NULL);
- pdf_field_mark_dirty(ctx, doc, field);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, val);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
- }
+ pdf_dict_putl_drop(ctx, field, val, PDF_NAME_BS, PDF_NAME_S, NULL);
+ pdf_field_mark_dirty(ctx, doc, field);
}
void pdf_field_set_button_caption(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *text)
{
- pdf_obj *val = pdf_new_string(ctx, doc, text, strlen(text));
-
- fz_try(ctx)
- {
- if (pdf_field_type(ctx, doc, field) == PDF_WIDGET_TYPE_PUSHBUTTON)
- {
- pdf_dict_putl(ctx, field, val, PDF_NAME_MK, PDF_NAME_CA, NULL);
- pdf_field_mark_dirty(ctx, doc, field);
- }
- }
- fz_always(ctx)
+ if (pdf_field_type(ctx, doc, field) == PDF_WIDGET_TYPE_PUSHBUTTON)
{
- pdf_drop_obj(ctx, val);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
+ pdf_obj *val = pdf_new_string(ctx, doc, text, strlen(text));
+ pdf_dict_putl_drop(ctx, field, val, PDF_NAME_MK, PDF_NAME_CA, NULL);
+ pdf_field_mark_dirty(ctx, doc, field);
}
}
@@ -1035,7 +961,7 @@ void pdf_field_set_display(fz_context *ctx, pdf_document *doc, pdf_obj *field, i
{
int mask = (PDF_ANNOT_IS_HIDDEN|PDF_ANNOT_IS_PRINT|PDF_ANNOT_IS_NO_VIEW);
int f = pdf_to_int(ctx, pdf_dict_get(ctx, field, PDF_NAME_F)) & ~mask;
- pdf_obj *fo = NULL;
+ pdf_obj *fo;
switch (d)
{
@@ -1052,20 +978,8 @@ void pdf_field_set_display(fz_context *ctx, pdf_document *doc, pdf_obj *field, i
break;
}
- fz_var(fo);
- fz_try(ctx)
- {
- fo = pdf_new_int(ctx, doc, f);
- pdf_dict_put(ctx, field, PDF_NAME_F, fo);
- }
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, fo);
- }
- fz_catch(ctx)
- {
- fz_rethrow(ctx);
- }
+ fo = pdf_new_int(ctx, doc, f);
+ pdf_dict_put_drop(ctx, field, PDF_NAME_F, fo);
}
else
{
@@ -1093,13 +1007,12 @@ void pdf_field_set_text_color(fz_context *ctx, pdf_document *doc, pdf_obj *field
unsigned char *buf;
int ilen;
size_t len;
- pdf_obj *daobj = NULL;
+ pdf_obj *daobj;
memset(&di, 0, sizeof(di));
fz_var(fzbuf);
fz_var(di);
- fz_var(daobj);
fz_try(ctx)
{
int i;
@@ -1115,14 +1028,13 @@ void pdf_field_set_text_color(fz_context *ctx, pdf_document *doc, pdf_obj *field
pdf_fzbuf_print_da(ctx, fzbuf, &di);
len = fz_buffer_storage(ctx, fzbuf, &buf);
daobj = pdf_new_string(ctx, doc, (char *)buf, len);
- pdf_dict_put(ctx, field, PDF_NAME_DA, daobj);
+ pdf_dict_put_drop(ctx, field, PDF_NAME_DA, daobj);
pdf_field_mark_dirty(ctx, doc, field);
}
fz_always(ctx)
{
pdf_da_info_fin(ctx, &di);
fz_drop_buffer(ctx, fzbuf);
- pdf_drop_obj(ctx, daobj);
}
fz_catch(ctx)
{
@@ -1324,14 +1236,13 @@ int pdf_choice_widget_value(fz_context *ctx, pdf_document *doc, pdf_widget *tw,
void pdf_choice_widget_set_value(fz_context *ctx, pdf_document *doc, pdf_widget *tw, int n, char *opts[])
{
pdf_annot *annot = (pdf_annot *)tw;
- pdf_obj *optarr = NULL, *opt = NULL;
+ pdf_obj *optarr = NULL, *opt;
int i;
if (!annot)
return;
fz_var(optarr);
- fz_var(opt);
fz_try(ctx)
{
if (n != 1)
@@ -1341,19 +1252,15 @@ void pdf_choice_widget_set_value(fz_context *ctx, pdf_document *doc, pdf_widget
for (i = 0; i < n; i++)
{
opt = pdf_new_string(ctx, doc, opts[i], strlen(opts[i]));
- pdf_array_push(ctx, optarr, opt);
- pdf_drop_obj(ctx, opt);
- opt = NULL;
+ pdf_array_push_drop(ctx, optarr, opt);
}
- pdf_dict_put(ctx, annot->obj, PDF_NAME_V, optarr);
- pdf_drop_obj(ctx, optarr);
+ pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_V, optarr);
}
else
{
opt = pdf_new_string(ctx, doc, opts[0], strlen(opts[0]));
- pdf_dict_put(ctx, annot->obj, PDF_NAME_V, opt);
- pdf_drop_obj(ctx, opt);
+ pdf_dict_put_drop(ctx, annot->obj, PDF_NAME_V, opt);
}
/* FIXME: when n > 1, we should be regenerating the indexes */
@@ -1366,7 +1273,6 @@ void pdf_choice_widget_set_value(fz_context *ctx, pdf_document *doc, pdf_widget
fz_catch(ctx)
{
pdf_drop_obj(ctx, optarr);
- pdf_drop_obj(ctx, opt);
fz_rethrow(ctx);
}
}
diff --git a/source/pdf/pdf-object.c b/source/pdf/pdf-object.c
index c490bb69..7dc73216 100644
--- a/source/pdf/pdf-object.c
+++ b/source/pdf/pdf-object.c
@@ -830,38 +830,19 @@ pdf_array_find(fz_context *ctx, pdf_obj *arr, pdf_obj *obj)
pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, const fz_rect *rect)
{
- pdf_obj *arr = NULL;
- pdf_obj *item = NULL;
+ pdf_obj *arr;
+
+ arr = pdf_new_array(ctx, doc, 4);
- fz_var(arr);
- fz_var(item);
fz_try(ctx)
{
- arr = pdf_new_array(ctx, doc, 4);
-
- item = pdf_new_real(ctx, doc, rect->x0);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, rect->y0);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, rect->x1);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, rect->y1);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, rect->x0));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, rect->y0));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, rect->x1));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, rect->y1));
}
fz_catch(ctx)
{
- pdf_drop_obj(ctx, item);
pdf_drop_obj(ctx, arr);
fz_rethrow(ctx);
}
@@ -871,48 +852,21 @@ pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, const fz_rect *rect)
pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, const fz_matrix *mtx)
{
- pdf_obj *arr = NULL;
- pdf_obj *item = NULL;
+ pdf_obj *arr;
+
+ arr = pdf_new_array(ctx, doc, 6);
- fz_var(arr);
- fz_var(item);
fz_try(ctx)
{
- arr = pdf_new_array(ctx, doc, 6);
-
- item = pdf_new_real(ctx, doc, mtx->a);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, mtx->b);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, mtx->c);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, mtx->d);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, mtx->e);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
-
- item = pdf_new_real(ctx, doc, mtx->f);
- pdf_array_push(ctx, arr, item);
- pdf_drop_obj(ctx, item);
- item = NULL;
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, mtx->a));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, mtx->b));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, mtx->c));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, mtx->d));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, mtx->e));
+ pdf_array_push_drop(ctx, arr, pdf_new_real(ctx, doc, mtx->f));
}
fz_catch(ctx)
{
- pdf_drop_obj(ctx, item);
pdf_drop_obj(ctx, arr);
fz_rethrow(ctx);
}
@@ -1608,8 +1562,7 @@ pdf_deep_copy_obj(fz_context *ctx, pdf_obj *obj)
for (i = 0; i < n; i++)
{
pdf_obj *obj_copy = pdf_deep_copy_obj(ctx, pdf_dict_get_val(ctx, obj, i));
- pdf_dict_put(ctx, dict, pdf_dict_get_key(ctx, obj, i), obj_copy);
- pdf_drop_obj(ctx, obj_copy);
+ pdf_dict_put_drop(ctx, dict, pdf_dict_get_key(ctx, obj, i), obj_copy);
}
return dict;
@@ -1624,8 +1577,7 @@ pdf_deep_copy_obj(fz_context *ctx, pdf_obj *obj)
for (i = 0; i < n; i++)
{
pdf_obj *obj_copy = pdf_deep_copy_obj(ctx, pdf_array_get(ctx, obj, i));
- pdf_array_push(ctx, arr, obj_copy);
- pdf_drop_obj(ctx, obj_copy);
+ pdf_array_push_drop(ctx, arr, obj_copy);
}
return arr;
diff --git a/source/pdf/pdf-parse.c b/source/pdf/pdf-parse.c
index e4715a26..92d0b423 100644
--- a/source/pdf/pdf-parse.c
+++ b/source/pdf/pdf-parse.c
@@ -341,16 +341,12 @@ pdf_parse_array(fz_context *ctx, pdf_document *doc, fz_stream *file, pdf_lexbuf
if (n > 0)
{
obj = pdf_new_int_offset(ctx, doc, a);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
}
if (n > 1)
{
obj = pdf_new_int_offset(ctx, doc, b);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
}
n = 0;
}
@@ -358,9 +354,7 @@ pdf_parse_array(fz_context *ctx, pdf_document *doc, fz_stream *file, pdf_lexbuf
if (tok == PDF_TOK_INT && n == 2)
{
obj = pdf_new_int_offset(ctx, doc, a);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
a = b;
n --;
}
@@ -383,61 +377,43 @@ pdf_parse_array(fz_context *ctx, pdf_document *doc, fz_stream *file, pdf_lexbuf
if (n != 2)
fz_throw(ctx, FZ_ERROR_SYNTAX, "cannot parse indirect reference in array");
obj = pdf_new_indirect(ctx, doc, a, b);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
n = 0;
break;
case PDF_TOK_OPEN_ARRAY:
obj = pdf_parse_array(ctx, doc, file, buf);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_OPEN_DICT:
obj = pdf_parse_dict(ctx, doc, file, buf);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_NAME:
obj = pdf_new_name(ctx, doc, buf->scratch);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_REAL:
obj = pdf_new_real(ctx, doc, buf->f);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_STRING:
obj = pdf_new_string(ctx, doc, buf->scratch, buf->len);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_TRUE:
obj = pdf_new_bool(ctx, doc, 1);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_FALSE:
obj = pdf_new_bool(ctx, doc, 0);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
case PDF_TOK_NULL:
obj = pdf_new_null(ctx, doc);
- pdf_array_push(ctx, ary, obj);
- pdf_drop_obj(ctx, obj);
- obj = NULL;
+ pdf_array_push_drop(ctx, ary, obj);
break;
default:
@@ -449,7 +425,6 @@ end:
}
fz_catch(ctx)
{
- pdf_drop_obj(ctx, obj);
pdf_drop_obj(ctx, ary);
fz_rethrow(ctx);
}
diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c
index 27ff94d6..5183b285 100644
--- a/source/pdf/pdf-write.c
+++ b/source/pdf/pdf-write.c
@@ -796,8 +796,7 @@ static void renumberobj(fz_context *ctx, pdf_document *doc, pdf_write_state *opt
val = pdf_new_null(ctx, doc);
else
val = pdf_new_indirect(ctx, doc, opts->renumber_map[o], 0);
- pdf_dict_put(ctx, obj, key, val);
- pdf_drop_obj(ctx, val);
+ pdf_dict_put_drop(ctx, obj, key, val);
}
else
{
@@ -819,8 +818,7 @@ static void renumberobj(fz_context *ctx, pdf_document *doc, pdf_write_state *opt
val = pdf_new_null(ctx, doc);
else
val = pdf_new_indirect(ctx, doc, opts->renumber_map[o], 0);
- pdf_array_put(ctx, obj, i, val);
- pdf_drop_obj(ctx, val);
+ pdf_array_put_drop(ctx, obj, i, val);
}
else
{
@@ -1681,8 +1679,7 @@ static void copystream(fz_context *ctx, pdf_document *doc, pdf_write_state *opts
}
newlen = pdf_new_int(ctx, doc, (int)len);
- pdf_dict_put(ctx, obj, PDF_NAME_Length, newlen);
- pdf_drop_obj(ctx, newlen);
+ pdf_dict_put_drop(ctx, obj, PDF_NAME_Length, newlen);
fz_write_printf(ctx, opts->out, "%d %d obj\n", num, gen);
pdf_print_obj(ctx, opts->out, obj, opts->do_tight);
@@ -1744,8 +1741,7 @@ static void expandstream(fz_context *ctx, pdf_document *doc, pdf_write_state *op
}
newlen = pdf_new_int(ctx, doc, (int)len);
- pdf_dict_put(ctx, obj, PDF_NAME_Length, newlen);
- pdf_drop_obj(ctx, newlen);
+ pdf_dict_put_drop(ctx, obj, PDF_NAME_Length, newlen);
fz_write_printf(ctx, opts->out, "%d %d obj\n", num, gen);
pdf_print_obj(ctx, opts->out, obj, opts->do_tight);
@@ -1971,7 +1967,6 @@ static void writexref(fz_context *ctx, pdf_document *doc, pdf_write_state *opts,
fz_write_string(ctx, opts->out, "\n");
fz_var(trailer);
- fz_var(nobj);
fz_try(ctx)
{
@@ -1987,9 +1982,7 @@ static void writexref(fz_context *ctx, pdf_document *doc, pdf_write_state *opts,
trailer = pdf_new_dict(ctx, doc, 5);
nobj = pdf_new_int(ctx, doc, to);
- pdf_dict_put(ctx, trailer, PDF_NAME_Size, nobj);
- pdf_drop_obj(ctx, nobj);
- nobj = NULL;
+ pdf_dict_put_drop(ctx, trailer, PDF_NAME_Size, nobj);
if (first)
{
@@ -2008,16 +2001,10 @@ static void writexref(fz_context *ctx, pdf_document *doc, pdf_write_state *opts,
if (main_xref_offset != 0)
{
nobj = pdf_new_int(ctx, doc, main_xref_offset);
- pdf_dict_put(ctx, trailer, PDF_NAME_Prev, nobj);
- pdf_drop_obj(ctx, nobj);
- nobj = NULL;
+ pdf_dict_put_drop(ctx, trailer, PDF_NAME_Prev, nobj);
}
}
}
- fz_always(ctx)
- {
- pdf_drop_obj(ctx, nobj);
- }
fz_catch(ctx)
{
fz_rethrow(ctx);
diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
index 0f3f56b1..6a4117d9 100644
--- a/source/pdf/pdf-xref.c
+++ b/source/pdf/pdf-xref.c
@@ -1422,9 +1422,7 @@ pdf_init_document(fz_context *ctx, pdf_document *doc)
if (pdf_name_eq(ctx, obj, PDF_NAME_Catalog))
{
nobj = pdf_new_indirect(ctx, doc, i, 0);
- pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, nobj);
- pdf_drop_obj(ctx, nobj);
- nobj = NULL;
+ pdf_dict_put_drop(ctx, pdf_trailer(ctx, doc), PDF_NAME_Root, nobj);
}
}
@@ -1433,9 +1431,7 @@ pdf_init_document(fz_context *ctx, pdf_document *doc)
if (pdf_dict_get(ctx, dict, PDF_NAME_Creator) || pdf_dict_get(ctx, dict, PDF_NAME_Producer))
{
nobj = pdf_new_indirect(ctx, doc, i, 0);
- pdf_dict_put(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info, nobj);
- pdf_drop_obj(ctx, nobj);
- nobj = NULL;
+ pdf_dict_put_drop(ctx, pdf_trailer(ctx, doc), PDF_NAME_Info, nobj);
}
}
@@ -1451,7 +1447,6 @@ pdf_init_document(fz_context *ctx, pdf_document *doc)
fz_catch(ctx)
{
pdf_drop_obj(ctx, dict);
- pdf_drop_obj(ctx, nobj);
fz_rethrow(ctx);
}
@@ -2694,12 +2689,10 @@ pdf_add_stream(fz_context *ctx, pdf_document *doc, fz_buffer *buf, pdf_obj *obj,
pdf_document *pdf_create_document(fz_context *ctx)
{
pdf_document *doc;
- pdf_obj *o = NULL;
pdf_obj *root;
pdf_obj *pages;
pdf_obj *trailer = NULL;
- fz_var(o);
fz_var(trailer);
doc = pdf_new_document(ctx, NULL);
@@ -2716,15 +2709,11 @@ pdf_document *pdf_create_document(fz_context *ctx)
trailer = pdf_new_dict(ctx, doc, 2);
pdf_dict_put_drop(ctx, trailer, PDF_NAME_Size, pdf_new_int(ctx, doc, 3));
- o = root = pdf_new_dict(ctx, doc, 2);
- pdf_dict_put_drop(ctx, trailer, PDF_NAME_Root, pdf_add_object(ctx, doc, o));
- pdf_drop_obj(ctx, o);
- o = NULL;
+ root = pdf_new_dict(ctx, doc, 2);
+ pdf_dict_put_drop(ctx, trailer, PDF_NAME_Root, pdf_add_object_drop(ctx, doc, root));
pdf_dict_put_drop(ctx, root, PDF_NAME_Type, PDF_NAME_Catalog);
- o = pages = pdf_new_dict(ctx, doc, 3);
- pdf_dict_put_drop(ctx, root, PDF_NAME_Pages, pdf_add_object(ctx, doc, o));
- pdf_drop_obj(ctx, o);
- o = NULL;
+ pages = pdf_new_dict(ctx, doc, 3);
+ pdf_dict_put_drop(ctx, root, PDF_NAME_Pages, pdf_add_object_drop(ctx, doc, pages));
pdf_dict_put_drop(ctx, pages, PDF_NAME_Type, PDF_NAME_Pages);
pdf_dict_put_drop(ctx, pages, PDF_NAME_Count, pdf_new_int(ctx, doc, 0));
pdf_dict_put_drop(ctx, pages, PDF_NAME_Kids, pdf_new_array(ctx, doc, 1));
@@ -2735,7 +2724,6 @@ pdf_document *pdf_create_document(fz_context *ctx)
fz_catch(ctx)
{
pdf_drop_obj(ctx, trailer);
- pdf_drop_obj(ctx, o);
fz_drop_document(ctx, &doc->super);
fz_rethrow(ctx);
}