From de6ba90d29790d63dfc4f55415907d035d6b954b Mon Sep 17 00:00:00 2001 From: Linas Vepstas Date: Sat, 9 Aug 2003 19:24:05 +0000 Subject: [PATCH] cleanups, tweaks to support mutiple book saving git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@9012 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/backend/file/Makefile.am | 1 + src/backend/file/gnc-backend-file.c | 104 +++++++++++++++---------- src/backend/file/gnc-backend-file.h | 60 ++++++++++++++ src/backend/file/io-gncbin-r.c | 20 ++--- src/backend/file/io-gncbin.h | 18 ++--- src/backend/file/io-gncxml-v1.c | 10 +-- src/backend/file/io-gncxml-v2.c | 65 +++++++--------- src/backend/file/io-gncxml-v2.h | 18 ++--- src/backend/file/io-gncxml.h | 15 ++-- src/backend/file/test/test-load-xml2.c | 12 ++- 10 files changed, 195 insertions(+), 128 deletions(-) create mode 100644 src/backend/file/gnc-backend-file.h diff --git a/src/backend/file/Makefile.am b/src/backend/file/Makefile.am index 62b15a945c..1477999193 100644 --- a/src/backend/file/Makefile.am +++ b/src/backend/file/Makefile.am @@ -36,6 +36,7 @@ libgncmod_backend_file_la_SOURCES = \ sixtp.c noinst_HEADERS = \ + gnc-backend-file.h \ gnc-xml.h \ gnc-xml-helper.h \ io-example-account.h \ diff --git a/src/backend/file/gnc-backend-file.c b/src/backend/file/gnc-backend-file.c index b3e80e0201..0b1e6f815c 100644 --- a/src/backend/file/gnc-backend-file.c +++ b/src/backend/file/gnc-backend-file.c @@ -1,8 +1,32 @@ -/********************************************************************* - * gnc-backend-file.c: load and save data to files +/******************************************************************** + * gnc-backend-file.c: load and save data to files * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation; either version 2 of * + * the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License* + * along with this program; if not, contact: * + * * + * Free Software Foundation Voice: +1-617-542-5942 * + * 59 Temple Place - Suite 330 Fax: +1-617-542-2652 * + * Boston, MA 02111-1307, USA gnu@gnu.org * +\********************************************************************/ +/** @file gnc-backend-file.c + * @breif load and save data to files + * @author Copyright (c) 2000 Gnumatic Inc. + * @author Copyright (c) 2002 Derek Atkins + * @author Copyright (c) 2003 Linas Vepstas * - * - *********************************************************************/ + * This file implements the top-level QofBackend API for saving/ + * restoring data to/from an ordinary Unix filesystem file. + */ #define _GNU_SOURCE @@ -17,47 +41,25 @@ #include #include -#include "Group.h" #include "TransLog.h" +#include "gnc-engine.h" #include "gnc-date.h" +#include "gnc-trace.h" #include "gnc-engine-util.h" -#include "gnc-pricedb-p.h" + #include "io-gncxml.h" #include "io-gncbin.h" #include "io-gncxml-v2.h" #include "gnc-backend-api.h" -#include "gnc-engine.h" -#include "gnc-engine-util.h" +#include "gnc-backend-file.h" #include "qofbackend-p.h" +#include "qofbook-p.h" #include "qofsession.h" static short module = MOD_BACKEND; -struct FileBackend_struct -{ - QofBackend be; - - char *dirname; - char *fullpath; - char *lockfile; - char *linkfile; - int lockfd; - - QofSession *session; -}; - -typedef struct FileBackend_struct FileBackend; - -typedef enum -{ - GNC_BOOK_NOT_OURS, - GNC_BOOK_BIN_FILE, - GNC_BOOK_XML1_FILE, - GNC_BOOK_XML2_FILE, -} QofBookFileType; - static int file_retention_days = 0; static gboolean file_compression = FALSE; @@ -97,8 +99,6 @@ file_session_begin(QofBackend *be_start, QofSession *session, ENTER (" "); - be->session = session; - /* Make sure the directory is there */ be->dirname = g_strdup (qof_session_get_file_path (session)); be->fullpath = g_strdup (be->dirname); @@ -184,6 +184,8 @@ static void file_sync_all(QofBackend* be, QofBook *book) { FileBackend *fbe = (FileBackend *) be; + + /* XXX fullpath is correct only for the current open book ! */ gnc_file_be_write_to_file (fbe, book, fbe->fullpath, TRUE); gnc_file_be_remove_old_files (fbe); } @@ -294,7 +296,7 @@ libgncmod_backend_file_LTX_gnc_backend_new(void) fbe->linkfile = NULL; fbe->lockfd = -1; - fbe->session = NULL; + fbe->primary_book = NULL; return be; } @@ -453,21 +455,23 @@ gnc_file_be_load_from_file (QofBackend *bend, QofBook *book) gboolean rc; FileBackend *be = (FileBackend *) bend; + be->primary_book = book; + switch (gnc_file_be_determine_file_type(be->fullpath)) { case GNC_BOOK_XML2_FILE: - rc = qof_session_load_from_xml_file_v2 (be->session); + rc = qof_session_load_from_xml_file_v2 (be, book); if (FALSE == rc) error = ERR_FILEIO_PARSE_ERROR; break; case GNC_BOOK_XML1_FILE: - rc = qof_session_load_from_xml_file (be->session); + rc = qof_session_load_from_xml_file (book, be->fullpath); if (FALSE == rc) error = ERR_FILEIO_PARSE_ERROR; break; case GNC_BOOK_BIN_FILE: /* presume it's an old-style binary file */ - qof_session_load_from_binfile(be->session); + qof_session_load_from_binfile(book, be->fullpath); error = gnc_get_binfile_io_error(); break; @@ -478,7 +482,12 @@ gnc_file_be_load_from_file (QofBackend *bend, QofBook *book) } if(error != ERR_BACKEND_NO_ERR) + { qof_backend_set_error(bend, error); + } + + /* We just got done loading, it can't possibly be dirty !! */ + qof_book_mark_saved (book); } /* ---------------------------------------------------------------------- */ @@ -729,6 +738,10 @@ gnc_file_be_write_to_file(FileBackend *fbe, QofBackendError be_err; ENTER (" book=%p file=%s", book, datafile); + + /* If the book is 'clean', recently saved, then don't save again. */ + if (FALSE == qof_book_not_saved (book)) return FALSE; + tmp_name = g_new(char, strlen(datafile) + 12); strcpy(tmp_name, datafile); strcat(tmp_name, ".tmp-XXXXXX"); @@ -756,20 +769,22 @@ gnc_file_be_write_to_file(FileBackend *fbe, /* Use the permissions from the original data file */ if(chmod(tmp_name, statbuf.st_mode) != 0) { + qof_backend_set_error(be, ERR_BACKEND_PERM); PWARN("unable to chmod filename %s: %s", datafile ? datafile : "(null)", strerror(errno) ? strerror(errno) : ""); -#if VFAT_DOESNT_SUCK +#if VFAT_DOESNT_SUCK /* chmod always fails on vfat fs */ g_free(tmp_name); return FALSE; #endif } if(chown(tmp_name, statbuf.st_uid, statbuf.st_gid) != 0) { + qof_backend_set_error(be, ERR_BACKEND_PERM); PWARN("unable to chown filename %s: %s", datafile ? datafile : "(null)", strerror(errno) ? strerror(errno) : ""); -#if VFAT_DOESNT_SUCK +#if VFAT_DOESNT_SUCK /* chown always fails on vfat fs */ g_free(tmp_name); return FALSE; #endif @@ -777,7 +792,7 @@ gnc_file_be_write_to_file(FileBackend *fbe, } if(unlink(datafile) != 0 && errno != ENOENT) { - qof_backend_set_error(be, ERR_BACKEND_MISC); + qof_backend_set_error(be, ERR_FILEIO_BACKUP_ERROR); PWARN("unable to unlink filename %s: %s", datafile ? datafile : "(null)", strerror(errno) ? strerror(errno) : ""); @@ -786,12 +801,13 @@ gnc_file_be_write_to_file(FileBackend *fbe, } if(!gnc_int_link_or_make_backup(fbe, tmp_name, datafile)) { + qof_backend_set_error(be, ERR_FILEIO_BACKUP_ERROR); g_free(tmp_name); return FALSE; } if(unlink(tmp_name) != 0) { - qof_backend_set_error(be, ERR_BACKEND_MISC); + qof_backend_set_error(be, ERR_BACKEND_PERM); PWARN("unable to unlink temp filename %s: %s", tmp_name ? tmp_name : "(null)", strerror(errno) ? strerror(errno) : ""); @@ -799,7 +815,11 @@ gnc_file_be_write_to_file(FileBackend *fbe, return FALSE; } g_free(tmp_name); - LEAVE (" book=%p file=%s", book, datafile); + + /* Since we successfully saved the book, + * we should mark it clean. */ + qof_book_mark_saved (book); + LEAVE (" sucessful save of book=%p to file=%s", book, datafile); return TRUE; } else diff --git a/src/backend/file/gnc-backend-file.h b/src/backend/file/gnc-backend-file.h new file mode 100644 index 0000000000..bf2835acea --- /dev/null +++ b/src/backend/file/gnc-backend-file.h @@ -0,0 +1,60 @@ +/******************************************************************** + * gnc-backend-file.h: load and save data to files * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation; either version 2 of * + * the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License* + * along with this program; if not, contact: * + * * + * Free Software Foundation Voice: +1-617-542-5942 * + * 59 Temple Place - Suite 330 Fax: +1-617-542-2652 * + * Boston, MA 02111-1307, USA gnu@gnu.org * +\********************************************************************/ +/** @file gnc-backend-file.h + * @breif load and save data to files + * @author Copyright (c) 2000 Gnumatic Inc. + * @author Copyright (c) 2002 Derek Atkins + * @author Copyright (c) 2003 Linas Vepstas + * + * This file implements the top-level QofBackend API for saving/ + * restoring data to/from an ordinary Unix filesystem file. + */ + +#ifndef GNC_BACKEND_FILE_H_ +#define GNC_BACKEND_FILE_H_ + +#include "qofbackend.h" +#include "qofbackend-p.h" + +struct FileBackend_struct +{ + QofBackend be; + + char *dirname; + char *fullpath; /* Fully qualified path to book */ + char *lockfile; + char *linkfile; + int lockfd; + + QofBook *primary_book; /* The primary, main open book */ +}; + +typedef struct FileBackend_struct FileBackend; + +typedef enum +{ + GNC_BOOK_NOT_OURS, + GNC_BOOK_BIN_FILE, + GNC_BOOK_XML1_FILE, + GNC_BOOK_XML2_FILE, +} QofBookFileType; + +#endif /* GNC_BACKEND_FILE_H_ */ diff --git a/src/backend/file/io-gncbin-r.c b/src/backend/file/io-gncbin-r.c index eade0dd5a6..fb92feb2f1 100644 --- a/src/backend/file/io-gncbin-r.c +++ b/src/backend/file/io-gncbin-r.c @@ -1,9 +1,5 @@ /********************************************************************\ - * io-gncbin.c -- read and write (old format) binary datafile * - * (GnuCash/X-Accountant) * - * Copyright (C) 1997 Robin D. Clark * - * Copyright (C) 1997-2001 Linas Vepstas * - * Copyright (C) 1999-2000 Rob Browning * + * io-gncbin-r.c -- read (old X-Accountant format) binary datafile * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * @@ -23,6 +19,12 @@ * Boston, MA 02111-1307, USA gnu@gnu.org * * * ******************************************************************** + * @file io-gncbin-r.c + * @breif read (old X-Accountant format) binary datafile + * @author Copyright (C) 1997 Robin D. Clark + * @author Copyright (C) 1997-2001 Linas Vepstas + * @author Copyright (C) 1999-2000 Rob Browning + * * NOTE: the readxxxx/writexxxx functions changed the current * * position in the file, and so the order which these * * functions are called in important * @@ -536,11 +538,10 @@ gnc_load_financials_from_fd(QofBook *book, int fd) * Return: the struct with the program data in it * \********************************************************************/ void -qof_session_load_from_binfile(QofSession *session) +qof_session_load_from_binfile(QofBook *book, const char * datafile) { int fd; - const gchar *datafile = qof_session_get_file_path(session); if(!datafile) { error_code = ERR_BACKEND_MISC; return; @@ -555,8 +556,7 @@ qof_session_load_from_binfile(QofSession *session) return; } - if (!gnc_load_financials_from_fd(qof_session_get_book(session), fd)) - return; + gnc_load_financials_from_fd(book, fd); close(fd); } @@ -617,7 +617,7 @@ readGroup (QofBook *book, int fd, Account *aparent, int token) * readAccount * * reads in the data for an account from the datafile * * * - * Args: book - the session * + * Args: book - the top-level account object * * fd - the filedescriptor of the data file * * acc - the account structure to be filled in * * token - the datafile version * diff --git a/src/backend/file/io-gncbin.h b/src/backend/file/io-gncbin.h index 9c7fed7e4f..14b2614ba9 100644 --- a/src/backend/file/io-gncbin.h +++ b/src/backend/file/io-gncbin.h @@ -1,9 +1,5 @@ /********************************************************************\ - * io-gncbin.h -- read and write (old format) binary datafile * - * (X-Accountant) * - * Copyright (C) 1997 Robin D. Clark * - * Copyright (C) 1998, 1999 Linas Vepstas * - * * + * io-gncbin.h -- read (old X-Accountant format) binary datafile * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * * published by the Free Software Foundation; either version 2 of * @@ -31,11 +27,13 @@ #define IO_GNCBIN_H #include "qofbackend.h" -#include "qofsession.h" +#include "qofbook.h" -/** PROTOTYPES ******************************************************/ - -/* +/* @file io-gncbin.h + * @breif read (old X-Accountant format) binary datafile + * @author Copyright (C) 1997 Robin D. Clark + * @author Copyright (C) 1998, 1999 Linas Vepstas + * * NOTE: These routines should not be used directly for file IO. They * are not inherently safe against file-locking errors. For direct * file IO, the gnc-book's higher level functions should be used. @@ -49,7 +47,7 @@ * thought of as a "stack of depth one", and this routine as a "pop". * Future implementations may have a deeper stack. */ -void qof_session_load_from_binfile(QofSession *session); +void qof_session_load_from_binfile(QofBook *, const char * filepath); QofBackendError gnc_get_binfile_io_error(void); #endif /* IO_GNCBIN_H */ diff --git a/src/backend/file/io-gncxml-v1.c b/src/backend/file/io-gncxml-v1.c index 809e618fe5..2b4f3c93fc 100644 --- a/src/backend/file/io-gncxml-v1.c +++ b/src/backend/file/io-gncxml-v1.c @@ -359,23 +359,15 @@ gncxml_setup_for_read (GNCParseStatus *global_parse_status) /* ================================================================== */ gboolean -qof_session_load_from_xml_file(QofSession *session) +qof_session_load_from_xml_file(QofBook *book, const char *filename) { gboolean parse_ok; gpointer parse_result = NULL; sixtp *top_level_pr; GNCParseStatus global_parse_status; - const gchar *filename; - QofBook *book; - g_return_val_if_fail(session, FALSE); - - book = qof_session_get_book (session); global_parse_status.book = book; - g_return_val_if_fail(book, FALSE); - - filename = qof_session_get_file_path(session); g_return_val_if_fail(filename, FALSE); top_level_pr = gncxml_setup_for_read (&global_parse_status); diff --git a/src/backend/file/io-gncxml-v2.c b/src/backend/file/io-gncxml-v2.c index 22df681e6f..565f0f9a37 100644 --- a/src/backend/file/io-gncxml-v2.c +++ b/src/backend/file/io-gncxml-v2.c @@ -41,8 +41,6 @@ #include "qofbackend-p.h" #include "qofbook.h" #include "qofbook-p.h" -#include "qofsession.h" -#include "qofsession-p.h" #include "sixtp-dom-parsers.h" #include "io-gncxml-v2.h" @@ -59,17 +57,17 @@ static short module = MOD_IO; /* Callback structure */ struct file_backend { - gboolean ok; - gpointer data; - sixtp_gdv2 * gd; - const char * tag; - sixtp * parser; - FILE * out; - QofBook * book; + gboolean ok; + gpointer data; + sixtp_gdv2 * gd; + const char * tag; + sixtp * parser; + FILE * out; + QofBook * book; }; #define GNC_V2_STRING "gnc-v2" -extern const gchar *gnc_v2_book_version_string; /* see gnc-book-xml-v2 */ +extern const gchar *gnc_v2_book_version_string; /* see gnc-book-xml-v2 */ void run_callback(sixtp_gdv2 *data, const char *type) @@ -410,9 +408,9 @@ gnc_counter_end_handler(gpointer data_for_children, if (be_data.ok == FALSE) { - PERR("Unknown type: %s", type ? type : "(null)"); - xmlFree (type); - return FALSE; + PERR("Unknown type: %s", type ? type : "(null)"); + xmlFree (type); + return FALSE; } } @@ -466,15 +464,15 @@ file_rw_feedback (sixtp_gdv2 *gd, const char *type) percentage = (loaded * 100)/total; if (percentage > 100) { printf("Transactions: Total: %d, Loaded: %d\n", - counter->transactions_total, counter->transactions_loaded); + counter->transactions_total, counter->transactions_loaded); printf("Accounts: Total: %d, Loaded: %d\n", - counter->accounts_total, counter->accounts_loaded); + counter->accounts_total, counter->accounts_loaded); printf("Books: Total: %d, Loaded: %d\n", - counter->books_total, counter->books_loaded); + counter->books_total, counter->books_loaded); printf("Commodities: Total: %d, Loaded: %d\n", - counter->commodities_total, counter->commodities_loaded); + counter->commodities_total, counter->commodities_loaded); printf("Scheduled Tansactions: Total: %d, Loaded: %d\n", - counter->schedXactions_total, counter->schedXactions_loaded); + counter->schedXactions_total, counter->schedXactions_loaded); } percentage = MIN(percentage, 100); gd->gui_display_fn(NULL, percentage); @@ -592,8 +590,8 @@ add_parser_cb (const char *type, gpointer data_p, gpointer be_data_p) if (data->create_parser) if(!sixtp_add_some_sub_parsers( be_data->parser, TRUE, - data->type_name, (data->create_parser)(), - NULL, NULL)) + data->type_name, (data->create_parser)(), + NULL, NULL)) be_data->ok = FALSE; } @@ -641,19 +639,16 @@ gnc_sixtp_gdv2_new ( } gboolean -qof_session_load_from_xml_file_v2(QofSession *session) +qof_session_load_from_xml_file_v2(FileBackend *fbe, QofBook *book) { - QofBook *book; - AccountGroup *grp; - QofBackend *be; + AccountGroup *grp; + QofBackend *be = &fbe->be; sixtp_gdv2 *gd; sixtp *top_parser; sixtp *main_parser; sixtp *book_parser; struct file_backend be_data; - book = qof_session_get_book (session); - be = qof_book_get_backend(book); gd = gnc_sixtp_gdv2_new(book, FALSE, file_rw_feedback, be->percentage); top_parser = sixtp_new(); @@ -712,7 +707,7 @@ qof_session_load_from_xml_file_v2(QofSession *session) /* stop logging while we load */ xaccLogDisable (); - if(!gnc_xml_parse_file(top_parser, qof_session_get_file_path(session), + if(!gnc_xml_parse_file(top_parser, fbe->fullpath, generic_callback, gd, book)) { sixtp_destroy(top_parser); @@ -728,8 +723,8 @@ qof_session_load_from_xml_file_v2(QofSession *session) be_data.book = book; gncObjectForeachBackend (GNC_FILE_BACKEND, scrub_cb, &be_data); - grp = gnc_book_get_group(book); /* fix price quote sources */ + grp = gnc_book_get_group(book); xaccGroupScrubQuoteSources (grp, gnc_book_get_commodity_table(book)); /* Fix account and transaction commodities */ @@ -832,8 +827,8 @@ write_counts_cb (const char *type, gpointer data_p, gpointer be_data_p) if (data->get_count) write_counts (be_data->out, data->type_name, - (data->get_count) (be_data->book), - NULL); + (data->get_count) (be_data->book), + NULL); } static void @@ -942,8 +937,8 @@ write_commodities(FILE *out, QofBook *book, sixtp_gdv2 *gd) fprintf(out, "\n"); xmlFreeNode(comnode); - gd->counter.commodities_loaded++; - run_callback(gd, "commodities"); + gd->counter.commodities_loaded++; + run_callback(gd, "commodities"); } g_list_free (comms); @@ -1038,8 +1033,8 @@ write_schedXactions( FILE *out, QofBook *book, sixtp_gdv2 *gd) xmlElemDump( out, NULL, node ); fprintf( out, "\n" ); xmlFreeNode( node ); - gd->counter.schedXactions_loaded++; - run_callback(gd, "schedXactions"); + gd->counter.schedXactions_loaded++; + run_callback(gd, "schedXactions"); } while ( (schedXactions = schedXactions->next) ); } @@ -1115,7 +1110,7 @@ gnc_book_write_accounts_to_xml_filehandle_v2(QofBackend *be, QofBook *book, FILE if (!out) return FALSE; - grp = gnc_book_get_group(book); + grp = gnc_book_get_group(book); nacc = 1 + xaccGroupGetNumSubAccounts(grp); table = gnc_book_get_commodity_table(book); diff --git a/src/backend/file/io-gncxml-v2.h b/src/backend/file/io-gncxml-v2.h index 2d3d1938dc..a05fd88a53 100644 --- a/src/backend/file/io-gncxml-v2.h +++ b/src/backend/file/io-gncxml-v2.h @@ -23,9 +23,10 @@ \********************************************************************/ /* - * io-gncxml.h -- api for new XML-based file format + * @file io-gncxml.h + * @breif api for GnuCash version 2 XML-based file format * - * Initial code by James LewisMoss + * @author Initial code by James LewisMoss, 2001 */ #ifndef IO_GNCXML_V2_H @@ -33,16 +34,9 @@ #include -#include "Account.h" -#include "Transaction.h" -#include "gnc-commodity.h" -#include "gnc-engine.h" -#include "gnc-pricedb.h" -#include "SchedXaction.h" - #include "qofbook.h" -#include "qofsession.h" -#include "qofbackend.h" +#include "gnc-backend-file.h" +#include "gnc-engine.h" #include "sixtp.h" @@ -129,7 +123,7 @@ typedef struct void run_callback(sixtp_gdv2 *data, const char *type); /* read in an account group from a file */ -gboolean qof_session_load_from_xml_file_v2(QofSession *session); +gboolean qof_session_load_from_xml_file_v2(FileBackend *, QofBook *); /* write all book info to a file */ gboolean gnc_book_write_to_xml_filehandle_v2(QofBook *book, FILE *fh); diff --git a/src/backend/file/io-gncxml.h b/src/backend/file/io-gncxml.h index c11fa2d06b..34bd2fcfb4 100644 --- a/src/backend/file/io-gncxml.h +++ b/src/backend/file/io-gncxml.h @@ -23,9 +23,10 @@ \********************************************************************/ /* - * io-gncxml.h -- api for new XML-based file format + * @file io-gncxml.h + * @breif api for Version 1 XML-based file format * - * Initial code by Rob l. Browning 4Q 2000 + * Initial code by Rob L. Browning 4Q 2000 * Tuneups by James LewisMoss Dec 2000 */ @@ -33,17 +34,15 @@ #define IO_GNCXML_H #include - -#include "qofsession.h" -#include "Query.h" +#include "qofbook.h" /* FIXME: eventually, we probably need to add an error stack accessable via gnc_book_get_xml_io_error() a la binfile. */ -/* read in an account group from a file */ -gboolean qof_session_load_from_xml_file(QofSession *session); +/** Read in an account group from a file */ +gboolean qof_session_load_from_xml_file(QofBook *, const char * filename); -/* The is_gncxml_file() routine checks to see if the first few +/** The is_gncxml_file() routine checks to see if the first few * chars of the file look like gnc-xml data. */ gboolean gnc_is_xml_data_file(const gchar *name); diff --git a/src/backend/file/test/test-load-xml2.c b/src/backend/file/test/test-load-xml2.c index bcc8016cad..911c802e53 100644 --- a/src/backend/file/test/test-load-xml2.c +++ b/src/backend/file/test/test-load-xml2.c @@ -1,3 +1,8 @@ + +/* @file test-load-xml2.c + * @breif test the loading of a vrsion-2 gnucash XML file + */ + #include #include #include @@ -12,6 +17,8 @@ #include "Group.h" #include "TransLog.h" #include "gnc-engine.h" +#include "gnc-backend-file.h" +#include "qofsession-p.h" #include "gnc-module.h" #include "io-gncxml-v2.h" @@ -47,6 +54,7 @@ test_load_file(const char *filename) { QofSession *session; QofBook *book; + QofBackend *be; gboolean ignore_lock; session = qof_session_new(); @@ -56,9 +64,9 @@ test_load_file(const char *filename) ignore_lock = (strcmp(getenv("SRCDIR"), ".") != 0); qof_session_begin(session, filename, ignore_lock, FALSE); - qof_session_load_from_xml_file_v2(session); - book = qof_session_get_book (session); + be = qof_session_get_backend (session); + qof_session_load_from_xml_file_v2((FileBackend *)be, book); do_test (xaccGroupGetBook (xaccGetAccountGroup (book)) == book, "book and group don't match");