add a conditional for the new dbi reentrant driver interface
authorPierre-Yves Ritschard <pyr@spootnik.org>
Fri, 1 Aug 2014 09:13:27 +0000 (11:13 +0200)
committerPierre-Yves Ritschard <pyr@spootnik.org>
Fri, 1 Aug 2014 09:13:27 +0000 (11:13 +0200)
configure.ac
src/dbi.c

index c3347fa..1757e2f 100644 (file)
@@ -1710,6 +1710,7 @@ then
        LDFLAGS="$LDFLAGS $with_libdbi_ldflags"
 
        AC_CHECK_LIB(dbi, dbi_initialize, [with_libdbi="yes"], [with_libdbi="no (Symbol 'dbi_initialize' not found)"])
+       AC_CHECK_LIB(dbi, dbi_driver_open_r, [with_libdbi_r="yes"], [with_libdbi_r="no"])
 
        CPPFLAGS="$SAVE_CPPFLAGS"
        LDFLAGS="$SAVE_LDFLAGS"
@@ -1722,6 +1723,11 @@ then
        AC_SUBST(BUILD_WITH_LIBDBI_CPPFLAGS)
        AC_SUBST(BUILD_WITH_LIBDBI_LDFLAGS)
        AC_SUBST(BUILD_WITH_LIBDBI_LIBS)
+
+  if test "x$with_libdbi_r" = "xyes"
+  then
+               AC_DEFINE(HAVE_LIBDBI_R, 1, [Define if reentrant dbi facility is present and usable.])
+  fi
 fi
 AM_CONDITIONAL(BUILD_WITH_LIBDBI, test "x$with_libdbi" = "xyes")
 # }}}
index 7fec73c..223e159 100644 (file)
--- a/src/dbi.c
+++ b/src/dbi.c
@@ -32,6 +32,9 @@
 
 #include <dbi/dbi.h>
 
+#ifdef HAVE_LIBDBI_R
+  dbi_inst inst = NULL;
+#endif
 /*
  * Data types
  */
@@ -131,7 +134,7 @@ static int cdbi_result_get_field (dbi_result res, /* {{{ */
   else if (src_type == DBI_TYPE_STRING)
   {
     const char *value;
-    
+
     value = dbi_result_get_string_idx (res, index);
     if (value == NULL)
       sstrncpy (buffer, "", buffer_size);
@@ -197,7 +200,7 @@ static void cdbi_database_free (cdbi_database_t *db) /* {{{ */
  *     </Result>
  *     ...
  *   </Query>
- *     
+ *
  *   <Database "plugin_instance1">
  *     Driver "mysql"
  *     DriverOption "hostname" "localhost"
@@ -451,7 +454,11 @@ static int cdbi_init (void) /* {{{ */
     return (-1);
   }
 
+#ifdef HAVE_LIBDBI_R
+  status = dbi_initialize_r (NULL, &inst);
+#else
   status = dbi_initialize (NULL);
+#endif
   if (status < 0)
   {
     ERROR ("dbi plugin: cdbi_init: dbi_initialize failed with status %i.",
@@ -672,16 +679,26 @@ static int cdbi_connect_database (cdbi_database_t *db) /* {{{ */
     db->connection = NULL;
   }
 
+#ifdef HAVE_LIBDBI_R
+  driver = dbi_driver_open_r (db->driver, inst);
+#else
   driver = dbi_driver_open (db->driver);
+#endif
   if (driver == NULL)
   {
     ERROR ("dbi plugin: cdbi_connect_database: dbi_driver_open (%s) failed.",
         db->driver);
     INFO ("dbi plugin: Maybe the driver isn't installed? "
         "Known drivers are:");
+#ifdef HAVE_LIBDBI_R
+    for (driver = dbi_driver_list_r (NULL, inst);
+        driver != NULL;
+        driver = dbi_driver_list_r (driver, inst))
+#else
     for (driver = dbi_driver_list (NULL);
         driver != NULL;
         driver = dbi_driver_list (driver))
+#endif
     {
       INFO ("dbi plugin: * %s", dbi_driver_get_name (driver));
     }