[Gnucash-changes] QOF sync
Neil Williams
codehelp at cvs.gnucash.org
Thu Oct 13 08:35:03 EDT 2005
Log Message:
-----------
QOF sync
Tags:
----
gnucash-gnome2-dev
Modified Files:
--------------
gnucash/src/backend/qsf:
qsf-backend.c
qsf-xml.c
gnucash/src/engine:
gnc-trace.c
gnc-trace.h
qof-be-utils.h
qof.h
qofbackend.c
gnucash/src/gnome:
dialog-chart-export.c
Revision Data
-------------
Index: qsf-xml.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/qsf/Attic/qsf-xml.c,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -Lsrc/backend/qsf/qsf-xml.c -Lsrc/backend/qsf/qsf-xml.c -u -r1.1.2.8 -r1.1.2.9
--- src/backend/qsf/qsf-xml.c
+++ src/backend/qsf/qsf-xml.c
@@ -38,8 +38,7 @@
g_list_free(params->referenceList);
}
g_slist_free(params->supported_types);
- xmlFreeDoc(params->output_doc);
- xmlFreeNs(params->map_ns);
+ if(params->map_ns) { xmlFreeNs(params->map_ns); }
}
int
Index: qsf-backend.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/qsf/Attic/qsf-backend.c,v
retrieving revision 1.1.2.19
retrieving revision 1.1.2.20
diff -Lsrc/backend/qsf/qsf-backend.c -Lsrc/backend/qsf/qsf-backend.c -u -r1.1.2.19 -r1.1.2.20
--- src/backend/qsf/qsf-backend.c
+++ src/backend/qsf/qsf-backend.c
@@ -418,10 +418,12 @@
params = (qsf_param*)data;
qof_param = params->qof_param;
- g_return_if_fail(params != NULL);
+ g_return_if_fail(params && path && content);
+ ENTER (" path=%s", path);
switch(kvp_value_get_type(content))
{
case KVP_TYPE_STRING:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -429,7 +431,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QOF_TYPE_STRING);
break;
+ }
case KVP_TYPE_GUID:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -437,7 +441,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QOF_TYPE_GUID);
break;
+ }
case KVP_TYPE_BINARY:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -445,7 +451,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QSF_TYPE_BINARY);
break;
+ }
case KVP_TYPE_GLIST:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -453,7 +461,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QSF_TYPE_GLIST);
break;
+ }
case KVP_TYPE_FRAME:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -461,7 +471,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QSF_TYPE_FRAME);
break;
+ }
case KVP_TYPE_GINT64:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -469,7 +481,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QOF_TYPE_INT64);
break;
+ }
case KVP_TYPE_DOUBLE:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -477,7 +491,9 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QOF_TYPE_DOUBLE);
break;
+ }
case KVP_TYPE_NUMERIC:
+ {
node = xmlAddChild(params->output_node, xmlNewNode(params->qsf_ns,
BAD_CAST qof_param->param_type));
xmlNodeAddContent(node, BAD_CAST kvp_value_to_bare_string(content));
@@ -485,9 +501,11 @@
xmlNewProp(node, BAD_CAST QSF_OBJECT_KVP, BAD_CAST path);
xmlNewProp(node, BAD_CAST QSF_OBJECT_VALUE, BAD_CAST QOF_TYPE_NUMERIC);
break;
+ }
default:
- break;
+ { break; }
}
+ LEAVE (" ");
}
static void
@@ -724,17 +742,14 @@
=======================================================*/
/* QSF only uses one QofBook per file - count may be removed later. */
static xmlDocPtr
-qofbook_to_qsf(QofBook *book)
+qofbook_to_qsf(QofBook *book, qsf_param *params)
{
xmlNodePtr top_node, node;
xmlDocPtr doc;
gchar buffer[GUID_ENCODING_LENGTH + 1];
- qsf_param *params;
const GUID *book_guid;
g_return_val_if_fail(book != NULL, NULL);
- params = g_new(qsf_param, 1);
- qsf_param_init(params);
params->book = book;
params->referenceList = g_list_copy((GList*)qof_book_get_data(book, ENTITYREFERENCE));
doc = xmlNewDoc(BAD_CAST QSF_XML_VERSION);
@@ -755,14 +770,14 @@
}
static void
-write_qsf_from_book(const char *path, QofBook *book)
+write_qsf_from_book(const char *path, QofBook *book, qsf_param *params)
{
xmlDocPtr qsf_doc;
gint write_result;
QofBackend *be;
be = qof_book_get_backend(book);
- qsf_doc = qofbook_to_qsf(book);
+ qsf_doc = qofbook_to_qsf(book, params);
write_result = 0;
if((use_gz_level > 0) && (use_gz_level <= 9))
{
@@ -779,11 +794,11 @@
}
static void
-write_qsf_to_stdout(QofBook *book)
+write_qsf_to_stdout(QofBook *book, qsf_param *params)
{
xmlDocPtr qsf_doc;
- qsf_doc = qofbook_to_qsf(book);
+ qsf_doc = qofbook_to_qsf(book, params);
g_return_if_fail(qsf_is_valid(QSF_SCHEMA_DIR, QSF_OBJECT_SCHEMA, qsf_doc) == TRUE);
xmlSaveFormatFileEnc("-", qsf_doc, "UTF-8", 1);
fprintf(stdout, "\n");
@@ -795,16 +810,18 @@
qsf_write_file(QofBackend *be, QofBook *book)
{
QSFBackend *qsf_be;
+ qsf_param *params;
char *path;
qsf_be = (QSFBackend*)be;
+ params = qsf_be->params;
/* if fullpath is blank, book_id was set to QOF_STDOUT */
if (!qsf_be->fullpath || (*qsf_be->fullpath == '\0')) {
- write_qsf_to_stdout(book);
+ write_qsf_to_stdout(book, params);
return;
}
path = strdup(qsf_be->fullpath);
- write_qsf_from_book(path, book);
+ write_qsf_from_book(path, book, params);
g_free(path);
}
Index: gnc-trace.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-trace.c,v
retrieving revision 1.2.20.14
retrieving revision 1.2.20.15
diff -Lsrc/engine/gnc-trace.c -Lsrc/engine/gnc-trace.c -u -r1.2.20.14 -r1.2.20.15
--- src/engine/gnc-trace.c
+++ src/engine/gnc-trace.c
@@ -1,5 +1,5 @@
/* *****************************************************************\
- * gnc-trace.c -- GnuCash error loging and tracing facility *
+ * gnc-trace.c -- QOF error logging and tracing facility *
* Copyright (C) 1997-2003 Linas Vepstas <linas at linas.org> *
* Copyright (c) 2005 Neil Williams <linux at codehelp.co.uk> *
* *
@@ -24,6 +24,14 @@
* Author: Linas Vepstas (linas at linas.org) *
\********************************************************************/
+/** @addtogroup Trace
+@{ */
+
+/** @file gnc-trace.c
+ @brief QOF error logging facility
+ @author Neil Williams <linux at codehelp.co.uk>
+*/
+
#include "config.h"
#include <glib.h>
@@ -44,10 +52,11 @@
static const int MAX_TRACE_FILENAME = 100;
static GHashTable *log_table = NULL;
-/* uses the enum_as_string macro from QOF
+AS_STRING_FUNC(gncLogLevel, LOG_LEVEL_LIST) /**< enum_as_string function
+
+uses the enum_as_string macro from QOF
but the From macro is not required. Lookups
are done on the string. */
-AS_STRING_FUNC(gncLogLevel, LOG_LEVEL_LIST)
FROM_STRING_FUNC(gncLogLevel, LOG_LEVEL_LIST)
@@ -355,5 +364,7 @@
return g_hash_table_size(log_table);
}
+/** @} */
+
/************************* END OF FILE ******************************\
\********************************************************************/
Index: gnc-trace.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-trace.h,v
retrieving revision 1.3.4.10
retrieving revision 1.3.4.11
diff -Lsrc/engine/gnc-trace.h -Lsrc/engine/gnc-trace.h -u -r1.3.4.10 -r1.3.4.11
--- src/engine/gnc-trace.h
+++ src/engine/gnc-trace.h
@@ -1,6 +1,7 @@
/********************************************************************\
- * gnc-trace.h -- GnuCash error logging and tracing fcility *
+ * gnc-trace.h -- QOF error logging and tracing facility *
* Copyright (C) 1998-2003 Linas Vepstas <linas at linas.org> *
+ * Copyright (c) 2005 Neil Williams <linux at codehelp.co.uk> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -26,7 +27,9 @@
@{ */
/** @file gnc-trace.h
- * @brief QOF error logging and tracing facility */
+ * @brief QOF error logging and tracing facility
+ * @author Neil Williams <linux at codehelp.co.uk>
+ */
#ifndef GNC_TRACE_H
#define GNC_TRACE_H
@@ -50,8 +53,18 @@
DEFINE_ENUM (gncLogLevel, LOG_LEVEL_LIST)
+/** Convert gncLogLevel to a string.
+
+The macro correlates the enum value and an
+exact copy as a string, removing the need to
+keep two separate lists in sync.
+*/
AS_STRING_DEC(gncLogLevel, LOG_LEVEL_LIST)
+/** Convert the log_string to a gncLogLevel
+
+Only for use as a partner to ::gncLogLevelasString
+*/
FROM_STRING_DEC(gncLogLevel, LOG_LEVEL_LIST)
#define GNC_TRACE_INDENT_WIDTH 4
Index: qof-be-utils.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qof-be-utils.h,v
retrieving revision 1.3.2.7
retrieving revision 1.3.2.8
diff -Lsrc/engine/qof-be-utils.h -Lsrc/engine/qof-be-utils.h -u -r1.3.2.7 -r1.3.2.8
--- src/engine/qof-be-utils.h
+++ src/engine/qof-be-utils.h
@@ -72,14 +72,15 @@
} else { \
/* We tried and failed to start transaction! */ \
(inst)->dirty = TRUE; \
- }
+ } \
+ LEAVE (" ");
/** \brief function version of QOF_BEGIN_EDIT
The macro cannot be used in a function that returns a value,
this function can be used instead.
*/
-void qof_begin_edit(QofInstance *inst);
+gboolean qof_begin_edit(QofInstance *inst);
/**
* commit_edit helpers
@@ -127,7 +128,7 @@
The macro cannot be used in a function that returns a value,
this function can be used instead. Only Part1 is implemented.
*/
-void qof_commit_edit(QofInstance *inst);
+gboolean qof_commit_edit(QofInstance *inst);
/**
* part2 -- deal with the backend
Index: qofbackend.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofbackend.c,v
retrieving revision 1.2.4.7
retrieving revision 1.2.4.8
diff -Lsrc/engine/qofbackend.c -Lsrc/engine/qofbackend.c -u -r1.2.4.7 -r1.2.4.8
--- src/engine/qofbackend.c
+++ src/engine/qofbackend.c
@@ -1,6 +1,7 @@
/********************************************************************\
* qofbackend.c -- utility routines for dealing with the data backend *
* Copyright (C) 2000 Linas Vepstas <linas at linas.org> *
+ * Copyright (C) 2004-5 Neil Williams <linux at codehelp.co.uk> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -28,6 +29,7 @@
#include <stdarg.h>
#include <regex.h>
#include <glib.h>
+#include <gmodule.h>
#include <dlfcn.h>
#include <sys/stat.h>
#include <errno.h>
@@ -356,28 +358,29 @@
else { return FALSE; }
}
-void
+gboolean
qof_begin_edit(QofInstance *inst)
{
QofBackend * be;
- if (!inst) { return; }
- inst->editlevel++;
- if (1 < inst->editlevel) return;
+ if (!inst) { return FALSE; }
+ (inst->editlevel)++;
+ if (1 < inst->editlevel) { return FALSE; }
if (0 >= inst->editlevel) { inst->editlevel = 1; }
be = qof_book_get_backend (inst->book);
if (be && qof_backend_begin_exists(be)) {
qof_backend_run_begin(be, inst);
} else { inst->dirty = TRUE; }
+ return TRUE;
}
-void qof_commit_edit(QofInstance *inst)
+gboolean qof_commit_edit(QofInstance *inst)
{
QofBackend * be;
- if (!inst) return;
- inst->editlevel--;
- if (0 < inst->editlevel) { return; }
+ if (!inst) { return FALSE; }
+ (inst->editlevel)--;
+ if (0 < inst->editlevel) { return FALSE; }
if ((-1 == inst->editlevel) && inst->dirty)
{
be = qof_book_get_backend ((inst)->book);
@@ -387,108 +390,37 @@
inst->editlevel = 0;
}
if (0 > inst->editlevel) { inst->editlevel = 0; }
+ return TRUE;
}
-#define STR_DLNAME "dlname="
-#define STR_LIBDIR "libdir="
-
gboolean
qof_load_backend_library (const char *directory,
const char* filename, const char* init_fcn)
{
- FILE *filehandle;
- void (*initfn) (void);
- void *dl_hand = NULL;
-#ifndef HAVE_GETLINE
- char lineptr[1024];
-#else
- char *lineptr;
-#endif
- const char * err_str;
- gchar *dlname, *libdirpath, *tempstr;
- int errors;
- guint n, end;
struct stat sbuf;
-
- errors = 0;
- dlname = NULL;
- tempstr = NULL;
- libdirpath = NULL;
- g_return_val_if_fail((filename || init_fcn), FALSE);
- if(directory)
- {
- if(!g_str_has_suffix(directory, "/")) {
- tempstr = g_strconcat(directory, "/", filename, NULL);
- }
- else {
- tempstr = g_strconcat(directory, filename, NULL);
- }
- filename = tempstr;
- }
- g_return_val_if_fail(g_str_has_suffix (filename, ".la"), FALSE);
- /* now we have a filename ending in .la, see if we can open it. */
- n = (guint)strlen(STR_DLNAME);
- g_return_val_if_fail((stat(filename, &sbuf) == 0), FALSE);
- filehandle = fopen(filename, "r");
- g_return_val_if_fail((filehandle), FALSE);
-#ifndef HAVE_GETLINE
- while (NULL != (fgets(lineptr, sizeof(lineptr), filehandle)))
-#else
- lineptr = NULL;
- while (0 < getline(&lineptr, &n, filehandle))
-#endif
- {
- n = (guint)strlen(STR_DLNAME);
- if (strncmp (lineptr, STR_DLNAME, n - 1) == 0)
- {
- /* obtain substring from dlname='.*'\n
- where .* matches the library .so|.dylib name
- allowing for single quotes, if used. */
- tempstr = g_strdup(lineptr + n);
- if(tempstr[0] == '\'') { tempstr++; }
- dlname = g_strndup(tempstr, strlen(tempstr) - 1);
- end = strlen(dlname);
- if(dlname[end-1] == '\'')
- {
- tempstr = g_strndup(dlname, end - 1);
- dlname = tempstr;
- }
- }
- /* now get the path, just in case */
- n = (guint)strlen(STR_LIBDIR);
- if (strncmp (lineptr, STR_LIBDIR, n - 1) == 0)
- {
- tempstr = g_strdup(lineptr + n);
- if(tempstr[0] == '\'') { tempstr++; }
- libdirpath = g_strndup(tempstr, strlen(tempstr) - 1);
- end = strlen(libdirpath);
- if(libdirpath[end-1] == '\'')
- {
- tempstr = g_strndup(libdirpath, end - 1);
- libdirpath = tempstr;
- }
- }
- }
- fclose(filehandle);
- tempstr = g_strconcat(libdirpath, "/", dlname, NULL);
- dlname = tempstr;
- g_free(libdirpath);
- dl_hand = dlopen (dlname, RTLD_LAZY);
- if (NULL == dl_hand)
- {
- err_str = dlerror();
- g_message ("Can't load backend, %s\n", err_str);
+ gchar *fullpath;
+ typedef void (* backend_init) (void);
+ GModule *backend;
+ backend_init gmod_init;
+ gpointer g;
+
+ g_return_val_if_fail(g_module_supported(), FALSE);
+ fullpath = g_module_build_path(directory, filename);
+ PINFO (" fullpath=%s", fullpath);
+ g_return_val_if_fail((stat(fullpath, &sbuf) == 0), FALSE);
+ backend = g_module_open(fullpath, G_MODULE_BIND_LAZY);
+ if(!backend) {
+ g_message ("%s: %s\n", PACKAGE, g_module_error ());
return FALSE;
}
- initfn = dlsym (dl_hand, init_fcn);
- if (initfn) { (*initfn)(); }
- else
+ g = &gmod_init;
+ if (!g_module_symbol (backend, init_fcn, g))
{
- err_str = dlerror();
- g_message("Can't find %s:%s, %s\n", dlname, init_fcn, err_str);
+ g_message ("%s: %s\n", PACKAGE, g_module_error ());
return FALSE;
}
- g_free(dlname);
+ g_module_make_resident(backend);
+ gmod_init();
return TRUE;
}
Index: qof.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qof.h,v
retrieving revision 1.2.4.8
retrieving revision 1.2.4.9
diff -Lsrc/engine/qof.h -Lsrc/engine/qof.h -u -r1.2.4.8 -r1.2.4.9
--- src/engine/qof.h
+++ src/engine/qof.h
@@ -96,5 +96,6 @@
#include "qofchoice.h"
#include "qof_book_merge.h"
#include "qof-be-utils.h"
+#include "qofla-dir.h"
#endif /* QOF_H_ */
Index: dialog-chart-export.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/Attic/dialog-chart-export.c,v
retrieving revision 1.1.2.7
retrieving revision 1.1.2.8
diff -Lsrc/gnome/dialog-chart-export.c -Lsrc/gnome/dialog-chart-export.c -u -r1.1.2.7 -r1.1.2.8
--- src/gnome/dialog-chart-export.c
+++ src/gnome/dialog-chart-export.c
@@ -23,15 +23,13 @@
*/
#include <time.h>
-#include "qofsession.h"
+#include "qof.h"
#include "AccountP.h"
#include "Transaction.h"
-#include "qofobject.h"
#include "dialog-chart-export.h"
#include "gnc-ui-util.h"
#include "dialog-utils.h"
-#include "gnc-engine-util.h"
-#include "gnc-event.h"
+#include "gnc-engine.h"
#include "gnc-file.h"
#define EQUITY_ACCOUNT_NAME _("Opening Balances")
More information about the gnucash-changes
mailing list