pdf_obj *parse_pdf_dict (char **start, char *end) { pdf_obj *result, *tmp1, *tmp2; char *save = *start; skip_white(start, end); if (*((*start)++) != '<' || *((*start)++) != '<') { *start = save; dump (*start, end); return NULL; } result = pdf_new_dict (); skip_white(start, end); while (*start < end && **start != '>') { if ((tmp1 = parse_pdf_name (start, end)) == NULL) { pdf_release_obj (result); { *start = save; dump (*start, end); return NULL; } }; if ((tmp2 = parse_pdf_object (start, end)) == NULL) { pdf_release_obj (result); pdf_release_obj (tmp1); { *start = save; dump (*start, end); return NULL; } } pdf_add_dict (result, tmp1, tmp2); skip_white(start, end); } if (*start >= end) { pdf_release_obj (result); *start = save; dump (*start, end); return NULL; } if (*((*start)++) == '>' && *((*start)++) == '>') { return result; } else { pdf_release_obj (result); fprintf (stderr, "\nDictionary object ended prematurely\n"); *start = save; dump (*start, end); return NULL; } }
static int load_encoding_file (const char *filename) { FILE *fp; pdf_obj *enc_name = NULL; pdf_obj *encoding_array = NULL; char *wbuf; const char *p, *endptr; const char *enc_vec[256]; int code, fsize, enc_id; if (!filename) return -1; if (dpx_conf.verbose_level > 0) { MESG("(Encoding:%s", filename); } fp = DPXFOPEN(filename, DPX_RES_TYPE_ENC); if (!fp) return -1; /* * file_size do seek_end witout saving current position and * do rewind. */ fsize = file_size(fp); wbuf = NEW(fsize + 1, char); wbuf[fsize] = '\0'; fread(wbuf, sizeof(char), fsize, fp); DPXFCLOSE(fp); p = wbuf; endptr = wbuf + fsize; skip_white(&p, endptr); /* * Skip comment lines. */ while (p < endptr && p[0] == '%') { pdfparse_skip_line (&p, endptr); skip_white(&p, endptr); } if (p[0] == '/') enc_name = parse_pdf_name(&p, endptr); skip_white(&p, endptr); encoding_array = parse_pdf_array(&p, endptr, NULL); RELEASE(wbuf); if (!encoding_array) { if (enc_name) pdf_release_obj(enc_name); return -1; } for (code = 0; code < 256; code++) { enc_vec[code] = pdf_name_value(pdf_get_array(encoding_array, code)); } enc_id = pdf_encoding_new_encoding(enc_name ? pdf_name_value(enc_name) : NULL, filename, enc_vec, NULL, 0); if (enc_name) { if (dpx_conf.verbose_level > 1) MESG("[%s]", pdf_name_value(enc_name)); pdf_release_obj(enc_name); } pdf_release_obj(encoding_array); if (dpx_conf.verbose_level > 0) MESG(")"); return enc_id; }