[Gnucash-changes] -- add loader for the dwi backend -- get rid of
dorky, pointless
Linas Vepstas
linas at cvs.gnucash.org
Sun Jun 13 21:05:58 EDT 2004
Log Message:
-----------
-- add loader for the dwi backend
-- get rid of dorky, pointless subroutine call
Modified Files:
--------------
gnucash/src/engine:
qofsession.c
Revision Data
-------------
Index: qofsession.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsession.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -Lsrc/engine/qofsession.c -Lsrc/engine/qofsession.c -u -r1.11 -r1.12
--- src/engine/qofsession.c
+++ src/engine/qofsession.c
@@ -337,11 +337,43 @@
#else /* GNUCASH */
+/* Specify a library, and a function name. Load the library,
+ * call the function name in the library. */
+static void
+load_backend_library (const char * libso, const char * loadfn)
+{
+ void *dl_hand = dlopen (libso, RTLD_LAZY);
+ if (NULL == dl_hand)
+ {
+ const char * err_str = dlerror();
+ PERR("Can't load %s backend, %s\n", libso, err_str);
+ return;
+ }
+ void (*initfn) (void) = dlsym (dl_hand, loadfn);
+ if (initfn)
+ {
+ (*initfn)();
+ }
+ else
+ {
+ const char * err_str = dlerror();
+ PERR("Can't find %s:%s, %s\n", libso, loadfn, err_str);
+ }
+}
+
static void
qof_session_load_backend(QofSession * session, char * access_method)
{
GSList *p;
ENTER (" ");
+
+ /* If the provider list is null, try to register the 'well-known'
+ * backends. Right now, there's only one. */
+ if (NULL == provider_list)
+ {
+ load_backend_library ("libqof_backend_dwi.so", "dwiend_provider_init");
+ }
+
for (p = provider_list; p; p=p->next)
{
QofBackendProvider *prov = p->data;
@@ -407,11 +439,11 @@
session, ignore_lock,
book_id ? book_id : "(null)");
- /* clear the error condition of previous errors */
+ /* Clear the error condition of previous errors */
qof_session_clear_error (session);
- /* check to see if this session is already open */
- if (qof_session_get_url(session))
+ /* Check to see if this session is already open */
+ if (session->book_id)
{
qof_session_push_error (session, ERR_BACKEND_LOCKED, NULL);
LEAVE("push error book is already open ");
@@ -467,7 +499,7 @@
char * msg;
(session->backend->session_begin)(session->backend, session,
- qof_session_get_url(session), ignore_lock,
+ session->book_id, ignore_lock,
create_if_nonexistent);
PINFO("Done running session_begin on backend");
err = qof_backend_get_error(session->backend);
@@ -503,10 +535,10 @@
QofBackendError err;
if (!session) return;
- if (!qof_session_get_url(session)) return;
+ if (!session->book_id) return;
- ENTER ("sess=%p book_id=%s", session, qof_session_get_url(session)
- ? qof_session_get_url(session) : "(null)");
+ ENTER ("sess=%p book_id=%s", session, session->book_id
+ ? session->book_id : "(null)");
/* At this point, we should are supposed to have a valid book
@@ -565,8 +597,8 @@
qof_book_destroy (ob);
}
- LEAVE ("sess = %p, book_id=%s", session, qof_session_get_url(session)
- ? qof_session_get_url(session) : "(null)");
+ LEAVE ("sess = %p, book_id=%s", session, session->book_id
+ ? session->book_id : "(null)");
}
/* ====================================================================== */
@@ -616,9 +648,7 @@
if (!session) return;
ENTER ("sess=%p book_id=%s",
- session,
- qof_session_get_url(session)
- ? qof_session_get_url(session) : "(null)");
+ session, session->book_id ? session->book_id : "(null)");
/* If there is a backend, and the backend is reachable
* (i.e. we can communicate with it), then synchronize with
@@ -677,8 +707,8 @@
book = qof_session_get_book (real_session);
ENTER ("tmp_session=%p real_session=%p book=%p book_id=%s",
tmp_session, real_session, book,
- qof_session_get_url(tmp_session)
- ? qof_session_get_url(tmp_session) : "(null)");
+ tmp_session -> book_id
+ ? tmp_session->book_id : "(null)");
/* There must be a backend or else. (It should always be the file
* backend too.)
@@ -706,8 +736,8 @@
{
if (!session) return;
- ENTER ("sess=%p book_id=%s", session, qof_session_get_url(session)
- ? qof_session_get_url(session) : "(null)");
+ ENTER ("sess=%p book_id=%s", session, session->book_id
+ ? session->book_id : "(null)");
/* close down the backend first */
if (session->backend && session->backend->session_end)
@@ -720,8 +750,8 @@
g_free (session->book_id);
session->book_id = NULL;
- LEAVE ("sess=%p book_id=%s", session, qof_session_get_url(session)
- ? qof_session_get_url(session) : "(null)");
+ LEAVE ("sess=%p book_id=%s", session, session->book_id
+ ? session->book_id : "(null)");
}
void
@@ -730,9 +760,8 @@
GList *node;
if (!session) return;
- ENTER ("sess=%p book_id=%s", session,
- qof_session_get_url(session)
- ? qof_session_get_url(session) : "(null)");
+ ENTER ("sess=%p book_id=%s", session, session->book_id
+ ? session->book_id : "(null)");
qof_session_end (session);
More information about the gnucash-changes
mailing list