[libgda] Removed global variable for Catalog DTD



commit 2a50765bcb1468e5c3fded38953682d6a592059f
Author: Daniel Espinosa <esodan gmail com>
Date:   Sun Apr 14 19:39:28 2019 -0500

    Removed global variable for Catalog DTD

 libgda/gda-db-catalog.c | 54 +++++++++++++++++++++++++++++++++++++++++++++----
 libgda/gda-init.c       | 45 -----------------------------------------
 2 files changed, 50 insertions(+), 49 deletions(-)
---
diff --git a/libgda/gda-db-catalog.c b/libgda/gda-db-catalog.c
index d82e8c787..38a3a033f 100644
--- a/libgda/gda-db-catalog.c
+++ b/libgda/gda-db-catalog.c
@@ -27,6 +27,7 @@
 #include <glib.h>
 #include <glib/gprintf.h>
 #include <glib/gi18n-lib.h>
+#include <libgda/binreloc/gda-binreloc.h>
 
 #include "gda-server-provider.h"
 #include <libgda/gda-lockable.h>
@@ -73,9 +74,6 @@ enum {
 
 static GParamSpec *properties [N_PROPS] = {NULL};
 
-/* Originally defined in gda-init.c */
-extern xmlDtdPtr _gda_db_catalog_dtd;
-
 /**
  * gda_db_catalog_new:
  *
@@ -206,6 +204,38 @@ gda_db_catalog_init (GdaDbCatalog *self)
   priv->cnc = NULL;
 }
 
+xmlDtdPtr
+_gda_db_catalog_get_dtd ()
+{
+  xmlDtdPtr            _gda_db_catalog_dtd = NULL;
+  gchar *file;
+  /* GdaDbCreator DTD */
+       file = gda_gbr_get_file_path (GDA_DATA_DIR, LIBGDA_ABI_NAME, "dtd",
+                                "libgda-db-catalog.dtd", NULL);
+       if (g_file_test (file, G_FILE_TEST_EXISTS))
+               _gda_db_catalog_dtd = xmlParseDTD (NULL, (xmlChar*)file);
+  else
+    {
+           if (g_getenv ("GDA_TOP_SRC_DIR"))
+        {
+          g_free (file);
+          file = g_build_filename (g_getenv ("GDA_TOP_SRC_DIR"), "libgda",
+                                   "libgda-db-catalog.dtd", NULL);
+          _gda_db_catalog_dtd = xmlParseDTD (NULL, (xmlChar*)file);
+                   }
+         }
+
+  if (!_gda_db_catalog_dtd)
+         g_message (_("Could not parse '%s': "
+                 "Validation for XML files for GdaDbCreator will not be performed (some weird errors may 
occur)"),
+               file);
+  else
+               _gda_db_catalog_dtd->name = xmlStrdup((xmlChar*) "db-catalog");
+
+       g_free (file);
+  return _gda_db_catalog_dtd;
+}
+
 static gboolean
 _gda_db_catalog_validate_doc (xmlDocPtr doc,
                               GError **error)
@@ -225,7 +255,14 @@ _gda_db_catalog_validate_doc (xmlDocPtr doc,
       goto on_error;
     }
 
-  int valid = xmlValidateDtd (ctx, doc,_gda_db_catalog_dtd);
+  xmlDtdPtr _gda_db_catalog_dtd = _gda_db_catalog_get_dtd ();
+
+  int valid = 0;
+
+  if (_gda_db_catalog_dtd != NULL) {
+    valid = xmlValidateDtd (ctx, doc,_gda_db_catalog_dtd);
+    xmlFreeDtd (_gda_db_catalog_dtd);
+  }
 
   if (!valid)
     {
@@ -395,6 +432,9 @@ gda_db_catalog_parse_file_from_path (GdaDbCatalog *self,
 {
   g_return_val_if_fail (self,FALSE);
   g_return_val_if_fail (xmlfile,FALSE);
+
+  xmlDtdPtr _gda_db_catalog_dtd = _gda_db_catalog_get_dtd ();
+
   g_return_val_if_fail (_gda_db_catalog_dtd,FALSE);
 
   xmlDocPtr doc = NULL;
@@ -447,6 +487,9 @@ gda_db_catalog_validate_file_from_path (const gchar *xmlfile,
                                         GError **error)
 {
   g_return_val_if_fail (xmlfile, FALSE);
+
+  xmlDtdPtr _gda_db_catalog_dtd = _gda_db_catalog_get_dtd ();
+
   g_return_val_if_fail (_gda_db_catalog_dtd, FALSE);
 
   xmlDocPtr doc = NULL;
@@ -990,6 +1033,9 @@ gda_db_catalog_parse_file (GdaDbCatalog *self,
 {
   g_return_val_if_fail (self, FALSE);
   g_return_val_if_fail (xmlfile, FALSE);
+
+  xmlDtdPtr _gda_db_catalog_dtd = _gda_db_catalog_get_dtd ();
+
   g_return_val_if_fail (_gda_db_catalog_dtd, FALSE);
 
   GFileInputStream *istream = NULL;
diff --git a/libgda/gda-init.c b/libgda/gda-init.c
index 91eb104dd..63dd8f8d2 100644
--- a/libgda/gda-init.c
+++ b/libgda/gda-init.c
@@ -39,25 +39,6 @@
 #include <libgda/binreloc/gda-binreloc.h>
 #include <sql-parser/gda-sql-parser.h>
 
-/*
- * global variables
- *
- * REM: to use them from another Windows DLL, they have to be declared like:
- *     __declspec(dllimport) extern gchar *_gda_server_op_dtd;
- *
- * Better yet is to define the IMPORT macro as:
- *
- *     #ifdef G_OS_WIN32
- *       #define IMPORT __declspec(dllimport)
- *     #else
- *       #define IMPORT
- *     #endif
- *     IMPORT extern gchar *_gda_server_op_dtd;
- */
-xmlDtdPtr              _gda_db_catalog_dtd = NULL;
-
-static gchar          *gda_lang_locale = "";
-
 
 /**
  * gda_init:
@@ -129,32 +110,6 @@ gda_init (void)
        /* binreloc */
        gda_gbr_init ();
 
-  /* GdaDbCreator DTD */
-  _gda_db_catalog_dtd = NULL;
-       file = gda_gbr_get_file_path (GDA_DATA_DIR, LIBGDA_ABI_NAME, "dtd",
-                                "libgda-db-catalog.dtd", NULL);
-       if (g_file_test (file, G_FILE_TEST_EXISTS))
-               _gda_db_catalog_dtd = xmlParseDTD (NULL, (xmlChar*)file);
-  else
-    {
-           if (g_getenv ("GDA_TOP_SRC_DIR"))
-        {
-          g_free (file);
-          file = g_build_filename (g_getenv ("GDA_TOP_SRC_DIR"), "libgda",
-                                   "libgda-db-catalog.dtd", NULL);
-          _gda_db_catalog_dtd = xmlParseDTD (NULL, (xmlChar*)file);
-                   }
-         }
-
-  if (!_gda_db_catalog_dtd)
-         g_message (_("Could not parse '%s': "
-                 "Validation for XML files for GdaDbCreator will not be performed (some weird errors may 
occur)"),
-               file);
-  else
-               _gda_db_catalog_dtd->name = xmlStrdup((xmlChar*) "db-catalog");
-
-       g_free (file);
-
   initialized = TRUE;
        g_mutex_unlock (&init_mutex);
 }


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