static void dict_free_val(char *key, void *val, void *x) { extern void pdf_obj_delete(void *); pdf_obj_delete(val); if (val) pdf_free(val); }
void free_array(pdf_obj *o) { if (o && o->t == eArray) { int i; for (i = 0; i < o->value.a.len; i++) { pdf_obj_delete(&o->value.a.items[i]); } if (o->value.a.len) pdf_free(o->value.a.items); //else if (o->value.a.items) // pdf_free(o->value.a.items); } }
int pdf_obj_insert(int n, int gen, void *d) { pdf_map *m = pdf_map_insert(n, gen); pdf_obj *o = NULL; if (o = pdf_obj_find(n, gen)) { char buf[128]; sprintf(buf, "Duplicated object (%d,%d) is found, old one is removed!\n", n, gen); DMSG(buf); pdf_obj_delete(o); pdf_free(o); } bpt_insert(m->head, n, d); return 0; }
static void pdf_info_free(pdf_info *info) { if (!info) return; if (info->title) { pdf_obj_delete(info->title); free(info->title); } if (info->author) { pdf_obj_delete(info->author); pdf_free(info->author); } if (info->subject) { pdf_obj_delete(info->subject); pdf_free(info->subject); } if (info->keywords) { pdf_obj_delete(info->keywords); pdf_free(info->keywords); } if (info->creator) { pdf_obj_delete(info->creator); pdf_free(info->creator); } if (info->producer) { pdf_obj_delete(info->producer); pdf_free(info->producer); } if (info->trapped) { pdf_obj_delete(info->trapped); pdf_free(info->trapped); } if (info->creationdate) pdf_free(info->creationdate); if (info->moddate) pdf_free(info->moddate); }
void dict_free(dict* d) { if (d) { if (d->dict) { #ifdef TSTC tstc_call(d->dict, 0, dict_entry_free, 0); tstc_free(d->dict); #elif defined (HASHMAP) extern void pdf_obj_delete(void *); hash_map_entry *e; hash_map_iterator *i = hash_map_front(d->dict); while (!hash_map_iterator_at_end(i)) { e = hash_map_iterator_get(i); pdf_obj_delete(e->v); pdf_free(e->v); hash_map_iterator_next(i); } hash_map_iterator_free(i); hash_map_free(d->dict); #else tst_print_reset(1); tst_traverse(d->dict, dict_free_val, NULL); tst_cleanup(d->dict); tst_print_reset(-1); #endif } if (d->stream) { pdf_free(d->stream); } pdf_free(d); } return; }
pdf_obj * pdf_info_create(pdf_info *i) { pdf_obj *o = pdf_dict_new(0); dict *d; char buf[128]; pdf_obj *date_obj; if (!o) return 0; d = o->value.d.dict; if (i && i->title) { pdf_dict_insert_obj(d, "Title", i->title); } if (i && i->author) { pdf_dict_insert_obj(d, "Author", i->author); } if (i && i->subject) { pdf_dict_insert_obj(d, "Subject", i->subject); } if (i && i->keywords) { pdf_dict_insert_obj(d, "Keywords", i->keywords); } if (!i || !i->producer) { pdf_dict_insert_string(d, "Producer", "PegDF", strlen("PegDF")); } else { pdf_dict_insert_obj(d, "Producer", i->producer); } if (!i || !i->creator) { pdf_dict_insert_string(d, "Creator", "PegDF", strlen("PegDF")); } else { pdf_dict_insert_obj(d, "Creator", i->creator); } date_obj = pdf_datestring_create(); if (!i || !i->creationdate) { if (date_obj) pdf_dict_insert_obj(d, "CreationDate", date_obj); } else { pdf_dict_insert_string(d, "CreationDate", i->creationdate, strlen(i->creationdate)); } if (date_obj) { pdf_dict_insert_obj(d, "ModDate", date_obj); } if (date_obj) { pdf_obj_delete(date_obj); pdf_free(date_obj); } if (i && i->trapped) { pdf_dict_insert_obj(d, "Trapped", i->trapped); } return o; }