|
@@ -28,38 +28,65 @@
|
|
|
|
|
|
#include "db.h"
|
|
|
#include "../sr_module.h"
|
|
|
+#include "../mem/mem.h"
|
|
|
|
|
|
db_func_t dbf;
|
|
|
|
|
|
|
|
|
-int bind_dbmod(void)
|
|
|
+int bind_dbmod(char* mod)
|
|
|
{
|
|
|
- db_use_table = (db_use_table_f)find_export("db_use_table", 2, 0);
|
|
|
- if (db_use_table == 0) return -1;
|
|
|
+ char* tmp, *p;
|
|
|
+ int len;
|
|
|
|
|
|
- db_init = (db_init_f)find_export("db_init", 1, 0);
|
|
|
- if (db_init == 0) return -1;
|
|
|
+ if (!mod) {
|
|
|
+ LOG(L_ERR, "bind_dbmod(): Invalid database module name\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
- db_close = (db_close_f)find_export("db_close", 2, 0);
|
|
|
- if (db_close == 0) return -1;
|
|
|
+ p = strchr(mod, ':');
|
|
|
+ if (p) {
|
|
|
+ len = p - mod;
|
|
|
+ tmp = (char*)pkg_malloc(len + 1);
|
|
|
+ if (!tmp) {
|
|
|
+ LOG(L_ERR, "bind_dbmod(): No memory left\n");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ memcpy(tmp, mod, len);
|
|
|
+ tmp[len] = '\0';
|
|
|
+ } else {
|
|
|
+ tmp = mod;
|
|
|
+ }
|
|
|
|
|
|
- db_query = (db_query_f)find_export("db_query", 2, 0);
|
|
|
- if (db_query == 0) return -1;
|
|
|
+ db_use_table = (db_use_table_f)find_mod_export(tmp, "db_use_table", 2, 0);
|
|
|
+ if (db_use_table == 0) goto err;
|
|
|
|
|
|
- db_raw_query = (db_raw_query_f)find_export("db_raw_query", 2, 0);
|
|
|
- if (db_raw_query == 0) return -1;
|
|
|
+ db_init = (db_init_f)find_mod_export(tmp, "db_init", 1, 0);
|
|
|
+ if (db_init == 0) goto err;
|
|
|
|
|
|
- db_free_query = (db_free_query_f)find_export("db_free_query", 2, 0);
|
|
|
- if (db_free_query == 0) return -1;
|
|
|
+ db_close = (db_close_f)find_mod_export(tmp, "db_close", 2, 0);
|
|
|
+ if (db_close == 0) goto err;
|
|
|
|
|
|
- db_insert = (db_insert_f)find_export("db_insert", 2, 0);
|
|
|
- if (db_insert == 0) return -1;
|
|
|
+ db_query = (db_query_f)find_mod_export(tmp, "db_query", 2, 0);
|
|
|
+ if (db_query == 0) goto err;
|
|
|
|
|
|
- db_delete = (db_delete_f)find_export("db_delete", 2, 0);
|
|
|
- if (db_delete == 0) return -1;
|
|
|
+ db_raw_query = (db_raw_query_f)find_mod_export(tmp, "db_raw_query", 2, 0);
|
|
|
+ if (db_raw_query == 0) goto err;
|
|
|
|
|
|
- db_update = (db_update_f)find_export("db_update", 2, 0);
|
|
|
- if (db_update == 0) return -1;
|
|
|
+ db_free_query = (db_free_query_f)find_mod_export(tmp, "db_free_query", 2, 0);
|
|
|
+ if (db_free_query == 0) goto err;
|
|
|
+
|
|
|
+ db_insert = (db_insert_f)find_mod_export(tmp, "db_insert", 2, 0);
|
|
|
+ if (db_insert == 0) goto err;
|
|
|
+
|
|
|
+ db_delete = (db_delete_f)find_mod_export(tmp, "db_delete", 2, 0);
|
|
|
+ if (db_delete == 0) goto err;
|
|
|
+
|
|
|
+ db_update = (db_update_f)find_mod_export(tmp, "db_update", 2, 0);
|
|
|
+ if (db_update == 0) goto err;
|
|
|
|
|
|
return 0;
|
|
|
+
|
|
|
+ err:
|
|
|
+ if (tmp != mod) pkg_free(tmp);
|
|
|
+ return -1;
|
|
|
}
|