[PATCH 3/4] loader: improve error reporting upon libxml2 error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Instead of just printing the libxml2 error string and line
number, actually include the filename so the user knows
where to look for the error!

Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx>
---
 osinfo/osinfo_loader.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index 2dc29c4..a5e26ad 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1610,18 +1610,25 @@ static void osinfo_loader_root(OsinfoLoader *loader,
     }
 }
 
+
+struct LibosinfoXMLData {
+    GError **err;
+    const gchar *file;
+};
+
 static void
 catchXMLError(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...)
 {
     xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
 
     if (ctxt && ctxt->_private) {
-        GError **err = ctxt->_private;
-        if (!error_is_set(err)) {
-            gchar *xmlmsg = g_strdup_printf("at line %d: %s",
+        struct LibosinfoXMLData *data = ctxt->_private;
+        if (!error_is_set(data->err)) {
+            gchar *xmlmsg = g_strdup_printf("Cannot parse %s at line %d: %s",
+                                            data->file,
                                             ctxt->lastError.line,
                                             ctxt->lastError.message);
-            OSINFO_ERROR(ctxt->_private, xmlmsg);
+            OSINFO_ERROR(data->err, xmlmsg);
             g_free(xmlmsg);
         }
     }
@@ -1637,6 +1644,10 @@ static void osinfo_loader_process_xml(OsinfoLoader *loader,
     xmlXPathContextPtr ctxt = NULL;
     xmlDocPtr xml = NULL;
     xmlNodePtr root;
+    struct LibosinfoXMLData data = {
+        .err = err,
+        .file = src,
+    };
 
     /* Set up a parser context so we can catch the details of XML errors. */
     pctxt = xmlNewParserCtxt();
@@ -1645,7 +1656,7 @@ static void osinfo_loader_process_xml(OsinfoLoader *loader,
         goto cleanup;
     }
 
-    pctxt->_private = err;
+    pctxt->_private = &data;
     pctxt->sax->error = catchXMLError;
 
     xml = xmlCtxtReadDoc(pctxt, BAD_CAST xmlStr, src, NULL,
-- 
2.4.3

_______________________________________________
Libosinfo mailing list
Libosinfo@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libosinfo



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Fedora Users]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]

  Powered by Linux