fixed missing error return code for schema validation (bug 143880), also
* xmllint.c: fixed missing error return code for schema
validation (bug 143880), also changed over to an enum for
defining the error return codes for all conditions.
diff --git a/ChangeLog b/ChangeLog
index ff2b052..d9cc904 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Jun 8 21:27:03 HKT 2004 William Brack <wbrack@mmm.com.hk>
+
+ * xmllint.c: fixed missing error return code for schema
+ validation (bug 143880), also changed over to an enum for
+ defining the error return codes for all conditions.
+
Tue Jun 8 14:01:14 CEST 2004 Daniel Veillard <daniel@veillard.com>
* parser.c xmlreader.c include/libxml/parser.h: fixed a serious
diff --git a/xmllint.c b/xmllint.c
index e333a39..bd502d3 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -97,6 +97,18 @@
#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
#endif
+typedef enum {
+ XMLLINT_RETURN_OK = 0, /* No error */
+ XMLLINT_ERR_UNCLASS, /* Unclassified */
+ XMLLINT_ERR_DTD, /* Error in DTD */
+ XMLLINT_ERR_VALID, /* Validation error */
+ XMLLINT_ERR_RDFILE, /* CtxtReadFile error */
+ XMLLINT_ERR_SCHEMACOMP, /* Schema compilation */
+ XMLLINT_ERR_OUT, /* Error writing output */
+ XMLLINT_ERR_SCHEMAPAT, /* Error in schema pattern */
+ XMLLINT_ERR_RDREGIS, /* Error in Reader registration */
+ XMLLINT_ERR_MEM /* Out of memory error */
+} xmllintReturnCode;
#ifdef LIBXML_DEBUG_ENABLED
static int shell = 0;
static int debugent = 0;
@@ -148,7 +160,7 @@
#endif
static int dtdattrs = 0;
static int loaddtd = 0;
-static int progresult = 0;
+static xmllintReturnCode progresult = XMLLINT_RETURN_OK;
static int timing = 0;
static int generate = 0;
static int dropdtd = 0;
@@ -181,7 +193,7 @@
OOM(void)
{
fprintf(stderr, "Ran out of memory needs > %d bytes\n", maxmem);
- progresult = 9;
+ progresult = XMLLINT_ERR_MEM;
}
static void
@@ -744,7 +756,7 @@
if (ret < 0) {
xmlGenericError(xmlGenericErrorContext,
"Relax-NG schema %s failed to compile\n", relaxng);
- progresult = 5;
+ progresult = XMLLINT_ERR_SCHEMACOMP;
relaxng = NULL;
}
if ((timing) && (!repeat)) {
@@ -788,7 +800,7 @@
if (xmlTextReaderIsValid(reader) != 1) {
xmlGenericError(xmlGenericErrorContext,
"Document %s does not validate\n", filename);
- progresult = 3;
+ progresult = XMLLINT_ERR_VALID;
}
}
#endif /* LIBXML_VALID_ENABLED */
@@ -796,7 +808,7 @@
if (relaxng != NULL) {
if (xmlTextReaderIsValid(reader) != 1) {
fprintf(stderr, "%s fails to validate\n", filename);
- progresult = 3;
+ progresult = XMLLINT_ERR_VALID;
} else {
fprintf(stderr, "%s validates\n", filename);
}
@@ -808,11 +820,11 @@
xmlFreeTextReader(reader);
if (ret != 0) {
fprintf(stderr, "%s : failed to parse\n", filename);
- progresult = 1;
+ progresult = XMLLINT_ERR_UNCLASS;
}
} else {
fprintf(stderr, "Unable to open %s\n", filename);
- progresult = 1;
+ progresult = XMLLINT_ERR_UNCLASS;
}
#ifdef HAVE_SYS_MMAN_H
if (memory) {
@@ -848,11 +860,11 @@
xmlFreeTextReader(reader);
if (ret != 0) {
fprintf(stderr, "failed to walk through the doc\n");
- progresult = 1;
+ progresult = XMLLINT_ERR_UNCLASS;
}
} else {
fprintf(stderr, "Failed to crate a reader from the document\n");
- progresult = 1;
+ progresult = XMLLINT_ERR_UNCLASS;
}
}
#endif /* LIBXML_READER_ENABLED */
@@ -1033,7 +1045,7 @@
doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
if (ctxt->valid == 0)
- progresult = 4;
+ progresult = XMLLINT_ERR_RDFILE;
if (rectxt == NULL)
xmlFreeParserCtxt(ctxt);
}
@@ -1050,7 +1062,7 @@
* If we don't have a document we might as well give up. Do we
* want an error message here? <sven@zen.org> */
if (doc == NULL) {
- progresult = 1;
+ progresult = XMLLINT_ERR_UNCLASS;
return;
}
@@ -1171,13 +1183,13 @@
}
if (out != NULL) {
if (htmlDocDump(out, doc) < 0)
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
if (output != NULL)
fclose(out);
} else {
fprintf(stderr, "failed to open %s\n", output);
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
}
}
if ((timing) && (!repeat)) {
@@ -1224,7 +1236,7 @@
if (ret < 0) {
fprintf(stderr, "failed save to %s\n",
output ? output : "-");
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
}
}
else if (format) {
@@ -1232,7 +1244,7 @@
if (ret < 0) {
fprintf(stderr, "failed save to %s\n",
output ? output : "-");
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
}
}
else {
@@ -1244,13 +1256,13 @@
}
if (out != NULL) {
if (xmlDocDump(out, doc) < 0)
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
if (output != NULL)
fclose(out);
} else {
fprintf(stderr, "failed to open %s\n", output);
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
}
}
if ((timing) && (!repeat)) {
@@ -1271,7 +1283,7 @@
fclose(out);
} else {
fprintf(stderr, "failed to open %s\n", output);
- progresult = 6;
+ progresult = XMLLINT_ERR_OUT;
}
}
#endif
@@ -1302,7 +1314,7 @@
else
xmlGenericError(xmlGenericErrorContext,
"Could not parse DTD %s\n", dtdvalidfpi);
- progresult = 2;
+ progresult = XMLLINT_ERR_DTD;
} else {
xmlValidCtxtPtr cvp;
@@ -1327,7 +1339,7 @@
xmlGenericError(xmlGenericErrorContext,
"Document %s does not validate against %s\n",
filename, dtdvalidfpi);
- progresult = 3;
+ progresult = XMLLINT_ERR_VALID;
}
if ((timing) && (!repeat)) {
endTimer("Validating against DTD");
@@ -1353,7 +1365,7 @@
if (!xmlValidateDocument(cvp, doc)) {
xmlGenericError(xmlGenericErrorContext,
"Document %s does not validate\n", filename);
- progresult = 3;
+ progresult = XMLLINT_ERR_VALID;
}
if ((timing) && (!repeat)) {
endTimer("Validating");
@@ -1380,9 +1392,11 @@
fprintf(stderr, "%s validates\n", filename);
} else if (ret > 0) {
fprintf(stderr, "%s fails to validate\n", filename);
+ progresult = XMLLINT_ERR_VALID;
} else {
fprintf(stderr, "%s validation generated an internal error\n",
filename);
+ progresult = XMLLINT_ERR_VALID;
}
xmlRelaxNGFreeValidCtxt(ctxt);
if ((timing) && (!repeat)) {
@@ -1406,9 +1420,11 @@
fprintf(stderr, "%s validates\n", filename);
} else if (ret > 0) {
fprintf(stderr, "%s fails to validate\n", filename);
+ progresult = XMLLINT_ERR_VALID;
} else {
fprintf(stderr, "%s validation generated an internal error\n",
filename);
+ progresult = XMLLINT_ERR_VALID;
}
xmlSchemaFreeValidCtxt(ctxt);
if ((timing) && (!repeat)) {
@@ -1946,7 +1962,7 @@
if (relaxngschemas == NULL) {
xmlGenericError(xmlGenericErrorContext,
"Relax-NG schema %s failed to compile\n", relaxng);
- progresult = 5;
+ progresult = XMLLINT_ERR_SCHEMACOMP;
relaxng = NULL;
}
xmlRelaxNGFreeParserCtxt(ctxt);
@@ -1972,7 +1988,7 @@
if (wxschemas == NULL) {
xmlGenericError(xmlGenericErrorContext,
"WXS schema %s failed to compile\n", schema);
- progresult = 5;
+ progresult = XMLLINT_ERR_SCHEMACOMP;
schema = NULL;
}
xmlSchemaFreeParserCtxt(ctxt);
@@ -1987,7 +2003,7 @@
if (patternc == NULL) {
xmlGenericError(xmlGenericErrorContext,
"Pattern %s failed to compile\n", pattern);
- progresult = 7;
+ progresult = XMLLINT_ERR_SCHEMAPAT;
pattern = NULL;
}
}
@@ -2071,7 +2087,7 @@
if ((chkregister) && (nbregister != 0)) {
fprintf(stderr, "Registration count off: %d\n", nbregister);
- progresult = 8;
+ progresult = XMLLINT_ERR_RDREGIS;
}
}
files ++;