From 16756b627bc32956dcecf43b2c1781b1d0657f8f Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Mon, 1 Oct 2001 07:36:25 +0000 Subject: [PATCH] Justin Fletcher provided cleaup code in case HAVE_STAT is not defined Igor * catalog.c: Justin Fletcher provided cleaup code in case HAVE_STAT is not defined * include/win32config.h: Igor Zlatkovic suggested to have HAVE_STAT defined there Daniel --- ChangeLog | 7 +++ catalog.c | 133 ++++++++++++++++++++++++++---------------- include/win32config.h | 1 + 3 files changed, 90 insertions(+), 51 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9ab3ebdc..d20ee98e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Oct 1 09:34:51 CEST 2001 Daniel Veillard + + * catalog.c: Justin Fletcher provided cleaup code in case + HAVE_STAT is not defined + * include/win32config.h: Igor Zlatkovic suggested to have + HAVE_STAT defined there + Sat Sep 29 00:15:00 HKT 2001 William Brack * catalog.c - fixed typing error reported by M. Barros diff --git a/catalog.c b/catalog.c index d7f69040..d08bd44e 100644 --- a/catalog.c +++ b/catalog.c @@ -2016,95 +2016,126 @@ xmlInitializeCatalog(void) { * Returns 0 in case of success -1 in case of error */ int -xmlLoadCatalog(const char *filename) { - int fd, len, ret, i; +xmlLoadCatalog(const char *filename) +{ +#ifdef HAVE_STAT + int fd; +#else + FILE *fd; +#endif + int len, ret, i; + long size; + +#ifdef HAVE_STAT struct stat info; +#endif xmlChar *content; if (filename == NULL) - return(-1); + return (-1); if (xmlDefaultCatalog == NULL) - xmlDefaultCatalog = xmlHashCreate(20); + xmlDefaultCatalog = xmlHashCreate(20); if (xmlDefaultCatalog == NULL) - return(-1); + return (-1); /* * Need to be done after ... */ if (!xmlCatalogInitialized) - xmlInitializeCatalog(); + xmlInitializeCatalog(); #ifdef HAVE_STAT - if (stat(filename, &info) < 0) - return(-1); + if (stat(filename, &info) < 0) + return (-1); #endif /* * Prevent loops */ - for (i = 0;i < catalNr;i++) { - if (xmlStrEqual((const xmlChar *)catalTab[i], - (const xmlChar *)filename)) { - xmlGenericError(xmlGenericErrorContext, - "xmlLoadCatalog: %s seems to induce a loop\n", - filename); - return(-1); - } + for (i = 0; i < catalNr; i++) { + if (xmlStrEqual((const xmlChar *) catalTab[i], + (const xmlChar *) filename)) { + xmlGenericError(xmlGenericErrorContext, + "xmlLoadCatalog: %s seems to induce a loop\n", + filename); + return (-1); + } } if (catalNr >= catalMax) { - xmlGenericError(xmlGenericErrorContext, - "xmlLoadCatalog: %s catalog list too deep\n", - filename); - return(-1); + xmlGenericError(xmlGenericErrorContext, + "xmlLoadCatalog: %s catalog list too deep\n", + filename); + return (-1); } catalTab[catalNr++] = filename; +#ifdef HAVE_STAT if ((fd = open(filename, O_RDONLY)) < 0) { - catalNr--; - return(-1); +#else + if ((fd = fopen(filename, "rb")) == NULL) { +#endif + catalNr--; + return (-1); } - - content = xmlMalloc(info.st_size + 10); +#ifdef HAVE_STAT + size = info.st_size; +#else + if (fseek(fd, 0, SEEK_END) || (size = ftell(fd)) == EOF || fseek(fd, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */ + fclose(fd); + return (-1); + } +#endif + content = xmlMalloc(size + 10); if (content == NULL) { - xmlGenericError(xmlGenericErrorContext, - "realloc of %d byte failed\n", info.st_size + 10); - catalNr--; - return(-1); + xmlGenericError(xmlGenericErrorContext, + "realloc of %d byte failed\n", size + 10); + catalNr--; + return (-1); } - len = read(fd, content, info.st_size); +#ifdef HAVE_STAT + len = read(fd, content, size); +#else + len = fread(content, 1, size, fd); +#endif if (len < 0) { - xmlFree(content); - catalNr--; - return(-1); + xmlFree(content); + catalNr--; + return (-1); } content[len] = 0; +#ifdef HAVE_STAT close(fd); +#else + fclose(fd); +#endif if ((content[0] == ' ') || (content[0] == '-') || - ((content[0] >= 'A') && (content[0] <= 'Z')) || - ((content[0] >= 'a') && (content[0] <= 'z'))) - ret = xmlParseSGMLCatalog(content, filename); + ((content[0] >= 'A') && (content[0] <= 'Z')) || + ((content[0] >= 'a') && (content[0] <= 'z'))) + ret = xmlParseSGMLCatalog(content, filename); else { - xmlCatalogEntryPtr catal, tmp; - /* TODO: allow to switch the default preference */ - catal = xmlParseXMLCatalog(content, XML_CATA_PREFER_PUBLIC, filename); - if (catal != NULL) { - if (xmlDefaultXMLCatalogList == NULL) - xmlDefaultXMLCatalogList = catal; - else { - tmp = xmlDefaultXMLCatalogList; - while (tmp->next != NULL) - tmp = tmp->next; - tmp->next = catal; - } - ret = 0; - } else - ret = -1; + xmlCatalogEntryPtr catal, tmp; + + /* TODO: allow to switch the default preference */ + catal = + xmlParseXMLCatalog(content, XML_CATA_PREFER_PUBLIC, filename); + if (catal != NULL) { + if (xmlDefaultXMLCatalogList == NULL) + xmlDefaultXMLCatalogList = catal; + else { + tmp = xmlDefaultXMLCatalogList; + while (tmp->next != NULL) + tmp = tmp->next; + tmp->next = catal; + } + ret = 0; + } else + ret = -1; } xmlFree(content); catalNr--; - return(ret); + return (ret); } /** diff --git a/include/win32config.h b/include/win32config.h index 7084ebbb..7b09d8ad 100644 --- a/include/win32config.h +++ b/include/win32config.h @@ -110,6 +110,7 @@ static int isnan (double d) { #define HAVE_SYS_STAT_H #define HAVE__STAT +#define HAVE_STAT #include