stp_curve_t * stp_curve_create_from_file(const char* file) { stp_curve_t *curve = NULL; stp_mxml_node_t *doc; FILE *fp = fopen(file, "r"); if (!fp) { stp_deprintf(STP_DBG_CURVE_ERRORS, "stp_curve_create_from_file: unable to open %s: %s\n", file, strerror(errno)); return NULL; } stp_deprintf(STP_DBG_XML, "stp_curve_create_from_file: reading `%s'...\n", file); stp_xml_init(); doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK); curve = xml_doc_get_curve(doc); if (doc) stp_mxmlDelete(doc); stp_xml_exit(); (void) fclose(fp); return curve; }
static stp_array_t * stpi_dither_array_create_from_file(const char* file) { stp_mxml_node_t *doc; stp_array_t *ret = NULL; FILE *fp = fopen(file, "r"); if (!fp) { stp_erprintf("stp_curve_create_from_file: unable to open %s: %s\n", file, strerror(errno)); return NULL; } stp_xml_init(); stp_deprintf(STP_DBG_XML, "stpi_dither_array_create_from_file: reading `%s'...\n", file); doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK); (void) fclose(fp); if (doc) { ret = xml_doc_get_dither_array(doc); stp_mxmlDelete(doc); } stp_xml_exit(); return ret; }
/* * Parse a single XML file. */ int stp_xml_parse_file(const char *file) /* File to parse */ { stp_mxml_node_t *doc; stp_mxml_node_t *cur; FILE *fp; stp_deprintf(STP_DBG_XML, "stp_xml_parse_file: reading `%s'...\n", file); fp = fopen(file, "r"); if (!fp) { stp_erprintf("stp_xml_parse_file: unable to open %s: %s\n", file, strerror(errno)); return 1; } stp_xml_init(); doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK); fclose(fp); cur = doc->child; while (cur && (cur->type != STP_MXML_ELEMENT || strcmp(cur->value.element.name, "gimp-print") != 0)) cur = cur->next; if (cur == NULL || cur->type != STP_MXML_ELEMENT) { stp_erprintf("stp_xml_parse_file: %s: parse error\n", file); stp_mxmlDelete(doc); return 1; } if (strcmp(cur->value.element.name, "gimp-print") != 0) { stp_erprintf ("XML file of the wrong type, root node is %s != gimp-print", cur->value.element.name); stp_mxmlDelete(doc); return 1; } /* The XML file was read and is the right format */ stpi_xml_process_gimpprint(cur, file); stp_mxmlDelete(doc); stp_xml_exit(); return 0; }
stp_curve_t * stp_curve_create_from_stream(FILE* fp) { stp_curve_t *curve = NULL; stp_mxml_node_t *doc; stp_deprintf(STP_DBG_XML, "stp_curve_create_from_fp: reading...\n"); stp_xml_init(); doc = stp_mxmlLoadFile(NULL, fp, STP_MXML_NO_CALLBACK); curve = xml_doc_get_curve(doc); if (doc) stp_mxmlDelete(doc); stp_xml_exit(); return curve; }