*
*/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#include "claws-features.h"
+#endif
+
#include <glib.h>
#include <stdio.h>
#include <string.h>
#include "xml.h"
#include "utils.h"
#include "codeconv.h"
+#include "claws_io.h"
#define SPARSE_MEMORY
/* if this is defined all attr.names and tag.names are stored
newfile = g_new(XMLFile, 1);
- newfile->fp = g_fopen(path, "rb");
+ newfile->fp = claws_fopen(path, "rb");
if (!newfile->fp) {
g_free(newfile);
return NULL;
newfile->level = 0;
newfile->is_empty_element = FALSE;
+ newfile->path = g_strdup(path);
+
return newfile;
}
{
cm_return_if_fail(file != NULL);
- if (file->fp) fclose(file->fp);
+ if (file->fp) claws_fclose(file->fp);
g_string_free(file->buf, TRUE);
g_free(file->dtd);
g_free(file->encoding);
+ g_free(file->path);
while (file->tag_stack != NULL)
xml_pop_tag(file);
while (xml_parse_next_tag(file) == 0) {
if (file->level < level) break;
if (file->level == level) {
- g_warning("xml_build_tree(): Parse error");
+ g_warning("xml_build_tree(): Parse error in %s", file->path);
break;
}
file->need_codeconv = FALSE;
}
} else {
- g_warning("Can't get XML DTD");
+ g_warning("Can't get XML DTD in %s", file->path);
return -1;
}
}
if (xml_get_parenthesis(file, buf, sizeof(buf)) < 0) {
- g_warning("xml_parse_next_tag(): Can't parse next tag");
+ g_warning("xml_parse_next_tag(): Can't parse next tag in %s", file->path);
return -1;
}
/* end-tag */
if (buf[0] == '/') {
if (strcmp(xml_get_current_tag(file)->tag, buf + 1) != 0) {
- g_warning("xml_parse_next_tag(): Tag name mismatch: %s (%s)", buf, xml_get_current_tag(file)->tag);
+ g_warning("xml_parse_next_tag(): Tag name mismatch in %s : %s (%s)", file->path, buf, xml_get_current_tag(file)->tag);
return -1;
}
xml_pop_tag(file);
}
if (strlen(buf) == 0) {
- g_warning("xml_parse_next_tag(): Tag name is empty");
+ g_warning("xml_parse_next_tag(): Tag name is empty in %s", file->path);
return -1;
}
while (g_ascii_isspace(*bufp)) bufp++;
attr_name = bufp;
if ((p = strchr(attr_name, '=')) == NULL) {
- g_warning("xml_parse_next_tag(): Syntax error in tag (a) %s", attr_name);
+ g_warning("xml_parse_next_tag(): Syntax error in %s, tag (a) %s", file->path, attr_name);
return -1;
}
bufp = p;
while (g_ascii_isspace(*bufp)) bufp++;
if (*bufp != '"' && *bufp != '\'') {
- g_warning("xml_parse_next_tag(): Syntax error in tag (b) %s", bufp);
+ g_warning("xml_parse_next_tag(): Syntax error in %s, tag (b) %s", file->path, bufp);
return -1;
}
quote = *bufp;
bufp++;
attr_value = bufp;
if ((p = strchr(attr_value, quote)) == NULL) {
- g_warning("xml_parse_next_tag(): Syntax error in tag (c) %s", attr_value);
+ g_warning("xml_parse_next_tag(): Syntax error in %s, tag (c) %s", file->path, attr_value);
return -1;
}
bufp = p;
gchar buf[XMLBUFSIZE];
gint index;
- if (fgets(buf, sizeof(buf), file->fp) == NULL)
+ if (claws_fgets(buf, sizeof(buf), file->fp) == NULL)
return -1;
index = file->bufp - file->buf->str;
for (p = str; *p != '\0'; p++) {
switch (*p) {
case '<':
- result = fputs("<", fp);
+ result = claws_fputs("<", fp);
break;
case '>':
- result = fputs(">", fp);
+ result = claws_fputs(">", fp);
break;
case '&':
- result = fputs("&", fp);
+ result = claws_fputs("&", fp);
break;
case '\'':
- result = fputs("'", fp);
+ result = claws_fputs("'", fp);
break;
case '\"':
- result = fputs(""", fp);
+ result = claws_fputs(""", fp);
break;
default:
- result = fputc(*p, fp);
+ result = claws_fputc(*p, fp);
}
}
depth = g_node_depth(node) - 1;
for (i = 0; i < depth; i++)
- TRY(fputs(" ", fp) != EOF);
+ TRY(claws_fputs(" ", fp) != EOF);
tag = ((XMLNode *) node->data)->tag;
TRY(fprintf(fp, " %s=\"", attr->name) > 0);
TRY(xml_file_put_escape_str(fp, attr->value) == 0);
- TRY(fputs("\"", fp) != EOF);
+ TRY(claws_fputs("\"", fp) != EOF);
}
if (node->children) {
GNode *child;
- TRY(fputs(">\n", fp) != EOF);
+ TRY(claws_fputs(">\n", fp) != EOF);
child = node->children;
while (child) {
}
for (i = 0; i < depth; i++)
- TRY(fputs(" ", fp) != EOF);
+ TRY(claws_fputs(" ", fp) != EOF);
TRY(fprintf(fp, "</%s>\n", tag->tag) > 0);
} else
- TRY(fputs(" />\n", fp) != EOF);
+ TRY(claws_fputs(" />\n", fp) != EOF);
return 0;
}