r15638 - gnucash/trunk/src/backend/file - Remove obsoleted files.
David Hampton
hampton at cvs.gnucash.org
Tue Feb 20 21:05:57 EST 2007
Author: hampton
Date: 2007-02-20 21:05:55 -0500 (Tue, 20 Feb 2007)
New Revision: 15638
Trac: http://svn.gnucash.org/trac/changeset/15638
Removed:
gnucash/trunk/src/backend/file/io-gncbin-r.c
gnucash/trunk/src/backend/file/io-gncbin.h
Log:
Remove obsoleted files.
Deleted: gnucash/trunk/src/backend/file/io-gncbin-r.c
===================================================================
--- gnucash/trunk/src/backend/file/io-gncbin-r.c 2007-02-19 23:45:15 UTC (rev 15637)
+++ gnucash/trunk/src/backend/file/io-gncbin-r.c 2007-02-21 02:05:55 UTC (rev 15638)
@@ -1,1537 +0,0 @@
-/********************************************************************\
- * 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 *
- * 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 *
- * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
- * Boston, MA 02110-1301, USA gnu at gnu.org *
- * *
- ********************************************************************
- * @file io-gncbin-r.c
- * @brief read (old X-Accountant format) binary datafile
- * @author Copyright (C) 1997 Robin D. Clark
- * @author Copyright (C) 1997-2001 Linas Vepstas <linas at linas.org>
- * @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 *
- * *
- * Version 1 is the original file format *
- * Version 2 of the file format supports reading and writing of *
- * double-entry transactions. *
- * Version 3 of the file format supports actions (Buy, Sell, etc.) *
- * Version 4 of the file format adds account groups *
- * Version 5 of the file format adds splits *
- * Version 6 of the file format removes the source split *
- * Version 7 of the file format adds currency & security types *
- * Version 8 of the file format adds misc fields *
- * Version 9 changes the time format to a 64-bit int *
- * Version 10 adds auxilliary account info *
- * *
- * the format of the data in the file: *
- * file ::== token Group *
- * Group ::== numAccounts (Account)^numAccounts *
- * Account ::== accID flags type accountName accountCode *
- * description notes currency security *
- * AccInfo *
- * numTran (Transaction)^numTrans *
- * numGroups (Group)^numGroups *
- * Transaction ::== num date_entered date_posted description *
- * docref numSplits (Split)^numSplits *
- * Split ::== memo action reconciled date_recned *
- * docref amount share_price account *
- * token ::== int [the version of file format == VERSION] *
- * numTrans ::== int *
- * numAccounts ::== int *
- * accID ::== int *
- * flags ::== char *
- * type ::== char *
- * accountName ::== String *
- * accountCode ::== String *
- * description ::== String *
- * notes ::== String *
- * currency ::== String *
- * security ::== String *
- * AccInfo ::== (variable, depends on account type, ... ) *
- * *
- * num ::== String *
- * date_entered::== Date *
- * date_posted ::== Date *
- * date_recned ::== Date *
- * description ::== String *
- * memo ::== String *
- * action ::== String *
- * docref ::== String *
- * reconciled ::== char *
- * amount ::== double *
- * share_price ::== double *
- * account ::== int *
- * String ::== size (char)^size *
- * size ::== int *
- * Date ::== seconds nanoseconds *
- * seconds ::== signed 64 bit int *
- * nanoseconds ::== signed 32 bit int *
-\********************************************************************/
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "config.h"
-
-#include "Account.h"
-#include "AccountP.h"
-#include "io-gncbin.h"
-#include "Group.h"
-#include "GroupP.h"
-#include "Transaction.h"
-#include "TransactionP.h"
-#include "TransLog.h"
-#include "gnc-engine.h"
-#include "gnc-pricedb.h"
-#include "gnc-pricedb-p.h"
-
-#define PERMS 0666
-#define WFLAGS (O_WRONLY | O_CREAT | O_TRUNC)
-#define RFLAGS O_RDONLY
-
-#undef VERSION
-#define VERSION 10
-
-
-/* The binary file format does not support most of the
- * new/improved account & transaction structures
- */
-
-/* This static indicates the debugging module that this .o belongs to. */
-static QofLogModule log_module = GNC_MOD_IO;
-
-/** GLOBALS *********************************************************/
-
-/* the default currency is used when importin old-style
- * file formats, or when importing files with no currency
- * specified. This should probably be something that
- * is configurable from some user config menu.
- */
-#define DEFAULT_CURRENCY "USD"
-
-static int error_code=0; /* error code, if error occurred */
-
-static AccountGroup *holder; /* temporary holder for
- * unclassified accounts */
-static AccountGroup *maingrp; /* temporary holder for file
- * being read */
-
-/* Store mappings from the old/abolished id's to accounts since id's
- have been deleted from Account's.
-
- These shouldn't be global, but since the rest of this file is
- completely non-reentrant, and since this file is dead once the xml
- format is finished, I'm not going to get too torn up about it...
-
- FIXME: a bigger issue is whether or not we're being totally kosher
- in our handling of keys and values here. We use int32s and
- pointers interchangably ATM, and that may be problematic on some
- architectures...
-
- Only used *during* file read process.
-*/
-
-static GHashTable *ids_to_finished_accounts;
-static GHashTable *ids_to_unfinished_accounts;
-
-/** PriceDB bits ******************************************************/
-/* Commodity prices (stock quotes, etc.) used to be stored as zero
- quantity (damount) splits inside the relevant accounts. Now we
- used the pricedb. potential_quotes is where we put the info from
- all these "quote splits" while reading, until we have a chance to
- cram them into the pricedb. We can't do it any sooner because
- until we finish reading the file, the Account*'s havent' been
- filled out and so their commodities and types may not have been
- initilized yet.
-
- This shouldn't be a static global but see comments above RE ids_to*
- hashes. */
-
-typedef struct {
- Split *split;
- gnc_numeric price;
-} GNCPotentialQuote;
-
-static GSList *potential_quotes;
-
-
-#define EPS (1.0e-6)
-#define DEQEPS(x,y,eps) (((((x)+(eps))>(y)) ? 1 : 0) && ((((x)-(eps))<(y)) ? 1 : 0))
-#define DEQ(x,y) DEQEPS(x,y,EPS)
-
-static void
-mark_potential_quote(Split *s, double price, double quantity)
-{
- if((price != 0) && DEQ(quantity, 0)){
- GNCPotentialQuote *q = g_new0(GNCPotentialQuote, 1);
- q->split = s;
- q->price = double_to_gnc_numeric(price,
- GNC_DENOM_AUTO,
- GNC_DENOM_SIGFIGS(9) | GNC_RND_ROUND);
- potential_quotes = g_slist_prepend(potential_quotes, q);
- }
-}
-
-static gboolean
-cvt_potential_prices_to_pricedb_and_cleanup(GNCPriceDB **prices,
- QofBook *book)
-{
- GSList *item = potential_quotes;
-
- *prices = gnc_book_get_pricedb(book);
- if (!*prices) return FALSE;
-
- while(item)
- {
- GNCPotentialQuote *q = (GNCPotentialQuote *) item->data;
- Account *split_acct = xaccSplitGetAccount(q->split);
-
- /* at this point, we already know it's a split with a zero amount */
- if (xaccAccountIsPriced(split_acct)) {
- /* this is a quote -- file it in the db and kill the split */
- Transaction *txn = xaccSplitGetParent(q->split);
- GNCPrice *price = gnc_price_create(book);
- Timespec time = xaccTransRetDatePostedTS(txn);
-
- gnc_price_begin_edit(price);
- gnc_price_set_commodity(price,
- DxaccAccountGetSecurity(split_acct));
- gnc_price_set_currency(price,
- xaccTransGetCurrency(txn));
- gnc_price_set_time(price, time);
- gnc_price_set_source(price, "old-file-import");
- gnc_price_set_type(price, "unknown");
- gnc_price_set_value(price, q->price);
- gnc_price_commit_edit(price);
- if(!gnc_pricedb_add_price(*prices, price)) {
- PERR("problem adding price to pricedb.\n");
- }
- gnc_price_unref(price);
-
- xaccTransBeginEdit(txn);
- xaccSplitDestroy(q->split);
- xaccTransCommitEdit(txn);
- }
- g_free(item->data);
- item->data = NULL;
- item = item->next;
- }
- g_slist_free(potential_quotes);
- potential_quotes = NULL;
-
- return TRUE;
-}
-
-/** PROTOTYPES ******************************************************/
-static Account *locateAccount (int acc_id, QofBook *book);
-
-static AccountGroup *readGroup( QofBook *, int fd, Account *, int token );
-static Account *readAccount( QofBook *book, int fd,
- AccountGroup *, int token );
-static gboolean readAccInfo( int fd, Account *, int token );
-static Transaction *readTransaction( QofBook *book,
- int fd, Account *, int token );
-static Split *readSplit( QofBook *book, int fd, int token );
-static char *readString( int fd, int token );
-static time_t readDMYDate( int fd, int token );
-static int readTSDate( int fd, Timespec *, int token );
-
-/*******************************************************/
-/* backwards compatibility definitions for numeric value
- * of account type. These numbers are used (are to be
- * used) nowhere else but here, precisely because they
- * are non-portable. The values of these defines MUST
- * NOT BE CHANGED; ANY CHANGES WILL BREAK FILE COMPATIBILITY.
- * YOU HAVE BEEN WARNED!!!!
- */
-
-#define FF_BANK 0
-#define FF_CASH 1
-#define FF_ASSET 2
-#define FF_CREDIT 3
-#define FF_LIABILITY 4
-#define FF_STOCK 5
-#define FF_MUTUAL 6
-#define FF_INCOME 7
-#define FF_EXPENSE 8
-#define FF_EQUITY 9
-#define FF_CHECKING 10
-#define FF_SAVINGS 11
-#define FF_MONEYMRKT 12
-#define FF_CREDITLINE 13
-#define FF_CURRENCY 14
-
-/*******************************************************/
-
-QofBackendError
-gnc_get_binfile_io_error(void)
-{
- /* reset the error code */
- int rc = error_code;
- error_code = 0;
- return rc;
-}
-
-/*******************************************************/
-/* some endian stuff */
-
-/* if we are running on a little-endian system, we need to
- * do some endian flipping, because the xacc/gnucash native data
- * format is big-endian. In particular, Intel x86 is little-endian. */
-#if WORDS_BIGENDIAN
- #define XACC_FLIP_DOUBLE(x)
- #define XACC_FLIP_LONG_LONG(x)
- #define XACC_FLIP_INT(x)
- #define XACC_FLIP_SHORT(x)
-#else
-
-/* flip endianness of int, short, etc */
-static int
-xaccFlipInt (int val)
-{
- guint32 flip;
- flip = (val & 0xff000000) >> 24;
- flip |= (val & 0xff0000) >> 8;
- flip |= (val & 0xff00) << 8;
- flip |= (val & 0xff) << 24;
- return (int) flip;
-}
-
-static double
-xaccFlipDouble (double val)
-{
- union {
- guint32 i[2];
- double d;
- } u;
- guint32 w0, w1;
- u.d = val;
- w0 = xaccFlipInt (u.i[0]);
- w1 = xaccFlipInt (u.i[1]);
-
- u.i[0] = w1;
- u.i[1] = w0;
- return u.d;
-}
-
-static gint64
-xaccFlipLongLong (gint64 val)
-{
- union {
- guint32 i[2];
- gint64 d;
- } u;
- guint32 w0, w1;
- u.d = val;
- w0 = xaccFlipInt (u.i[0]);
- w1 = xaccFlipInt (u.i[1]);
-
- u.i[0] = w1;
- u.i[1] = w0;
- return u.d;
-}
-
- #define XACC_FLIP_DOUBLE(x) { (x) = xaccFlipDouble (x); }
- #define XACC_FLIP_LONG_LONG(x) { (x) = xaccFlipLongLong (x); }
- #define XACC_FLIP_INT(x) { (x) = xaccFlipInt (x); }
- #define XACC_FLIP_SHORT(x) { (x) = xaccFlipShort (x); }
-#endif /* WORDS_BIGENDIAN */
-
-
-
-/********************************************************************
- * handle legacy currencies : after we load old files, we MUST run the
- * gnucash currency conversion functions to get rid of the
- * GNC_LEGACY_CURRENCIES namespace.
- ********************************************************************/
-
-static gnc_commodity *
-gnc_commodity_import_legacy(QofBook *book, const char * currency_name)
-{
- gnc_commodity_table *table;
- gnc_commodity * old = NULL;
-
- table = gnc_book_get_commodity_table (book);
-
- g_return_val_if_fail (table != NULL, NULL);
-
- if(currency_name && (currency_name[0] != 0) ) {
- old = gnc_commodity_table_lookup(table,
- GNC_COMMODITY_NS_LEGACY,
- currency_name);
-
- if(!old) {
- old = gnc_commodity_new(book, currency_name,
- GNC_COMMODITY_NS_LEGACY, currency_name,
- 0, 100000);
- old = gnc_commodity_table_insert(table, old);
- }
- return old;
- }
- else {
- return NULL;
- }
-}
-
-
-/********************************************************************\
- ********************** LOAD DATA ***********************************
-\********************************************************************/
-
-gboolean gnc_is_bin_file (const gchar *name)
-{
- int fd, err, token;
-
- err = 0;
- token = 0;
- fd = open( name, RFLAGS, 0 );
-
- /* check for valid file descriptor */
- if( 0 > fd ) { return FALSE; }
-
- /* Read in the file format token */
- err = read( fd, &token, sizeof(int) );
- if( sizeof(int) != err ) { return FALSE; }
- XACC_FLIP_INT (token);
- close(fd);
- if(token == VERSION ) { return TRUE; }
- return FALSE;
-}
-
-/********************************************************************\
- * reads in the data from file descriptor *
- * *
- * Args: book -- the book in which to store the data *
- * fd -- the file descriptor to read the data from *
- * Return: the struct with the program data in it *
-\********************************************************************/
-static gboolean
-gnc_load_financials_from_fd(QofBook *book, int fd)
-{
- int err=0;
- int token=0;
- int num_unclaimed;
- AccountGroup *grp = 0x0;
-
- maingrp = 0x0;
- error_code = ERR_BACKEND_NO_ERR;
-
- /* check for valid file descriptor */
- if( 0 > fd )
- {
- error_code = ERR_FILEIO_FILE_NOT_FOUND;
- return FALSE;
- }
-
- /* Read in the file format token */
- err = read( fd, &token, sizeof(int) );
- if( sizeof(int) != err )
- {
- error_code = ERR_FILEIO_FILE_EMPTY;
- return FALSE;
- }
- XACC_FLIP_INT (token);
- PINFO ("reading file version %d", token);
-
- /* If this is an old file, ask the user if the file
- * should be updated */
- if( VERSION > token ) {
- error_code = ERR_FILEIO_FILE_TOO_OLD;
- }
-
- /* If this is a newer file than we know how to deal
- * with, warn the user */
- if( VERSION < token ) {
- error_code = ERR_BACKEND_TOO_NEW;
- return FALSE;
- }
-
- /* FIXME: is this OK (i.e. direct hashes for ints?) */
- ids_to_finished_accounts = g_hash_table_new(g_direct_hash, g_direct_equal);
- if(!ids_to_finished_accounts) {
- error_code = ERR_BACKEND_ALLOC;
- return FALSE;
- }
-
- ids_to_unfinished_accounts = g_hash_table_new(g_direct_hash, g_direct_equal);
- if(!ids_to_unfinished_accounts) {
- error_code = ERR_BACKEND_ALLOC;
-
- g_hash_table_destroy(ids_to_finished_accounts);
- ids_to_finished_accounts = NULL;
-
- return FALSE;
- }
-
- potential_quotes = NULL;
-
- /* disable logging during load; otherwise its just a mess */
- xaccLogDisable();
- holder = xaccMallocAccountGroup(book);
- grp = readGroup (book, fd, NULL, token);
-
- /* the number of unclaimed accounts should be zero if the
- * read succeeded. But just in case of a very unlikely
- * error, try to continue anyway. */
- num_unclaimed = xaccGroupGetNumSubAccounts (holder);
- if (num_unclaimed) {
- Account *acc;
- error_code = ERR_FILEIO_FILE_BAD_READ;
-
- /* create a lost account, put the missing accounts there */
- acc = xaccMallocAccount(book);
- xaccAccountBeginEdit (acc);
- /* Translators: Name of the account where all the missing accounts
- are put into. (FIXME: is this correct?) */
- xaccAccountSetName (acc, _("Lost Accounts"));
- acc -> children = holder;
- xaccAccountCommitEdit (acc);
- xaccGroupInsertAccount (grp, acc);
- } else {
- xaccFreeAccountGroup (holder);
- holder = NULL;
- }
-
- maingrp = NULL;
- g_hash_table_destroy(ids_to_finished_accounts);
- ids_to_finished_accounts = NULL;
- g_hash_table_destroy(ids_to_unfinished_accounts);
- ids_to_unfinished_accounts = NULL;
-
- {
- GNCPriceDB *tmpdb;
- if(!cvt_potential_prices_to_pricedb_and_cleanup(&tmpdb, book))
- {
- PWARN("pricedb import failed.");
- error_code = ERR_BACKEND_MISC;
- gnc_pricedb_destroy(tmpdb);
- }
- }
-
- xaccLogEnable();
-
- xaccSetAccountGroup(book, grp);
-
- /* mark the newly read book as saved, since the act of putting it
- * together will have caused it to be marked up as not-saved. */
- qof_book_mark_saved(book);
-
- return (error_code == ERR_BACKEND_NO_ERR);
-}
-
-/********************************************************************\
- * xaccReadAccountGroupFile *
- * reads in the data from file datafile *
- * *
- * Args: datafile - the file to load the data from *
- * Return: the struct with the program data in it *
-\********************************************************************/
-void
-qof_session_load_from_binfile(QofBook *book, const char * datafile)
-{
- int fd;
-
- if(!datafile) {
- error_code = ERR_BACKEND_MISC;
- return;
- }
-
- maingrp = NULL;
- error_code = ERR_BACKEND_NO_ERR;
-
- fd = open( datafile, RFLAGS, 0 );
- if( 0 > fd ) {
- error_code = ERR_FILEIO_FILE_NOT_FOUND;
- return;
- }
-
- xaccDisableDataScrubbing();
- gnc_load_financials_from_fd(book, fd);
- xaccEnableDataScrubbing();
-
- close(fd);
-}
-
-/********************************************************************\
- * readGroup *
- * reads in a group of accounts *
- * *
- * Args: *
- * Return: the struct with the program data in it *
-\********************************************************************/
-static AccountGroup *
-readGroup (QofBook *book, int fd, Account *aparent, int token)
- {
- int numAcc;
- int err=0;
- int i;
- AccountGroup *grp = xaccMallocAccountGroup(book);
-
- ENTER (" ");
-
- if (NULL == aparent) {
- maingrp = grp;
- }
-
- /* read numAccs */
- err = read( fd, &numAcc, sizeof(int) );
- if ( sizeof(int) != err )
- {
- xaccFreeAccountGroup (grp);
- LEAVE("");
- return NULL;
- }
- XACC_FLIP_INT (numAcc);
-
- DEBUG ("expecting %d accounts", numAcc);
-
- /* read in the accounts */
- for( i=0; i<numAcc; i++ )
- {
- Account * acc = readAccount( book, fd, grp, token );
- if( NULL == acc ) {
- PERR("Short group read: expected %d, got %d accounts\n",numAcc,i);
- break;
- }
- }
-
- /* if reading an account subgroup, place the subgroup
- * into the parent account */
- grp->parent = aparent;
- if (aparent) {
- aparent->children = grp;
- }
- LEAVE("");
- return grp;
-}
-
-/********************************************************************\
- * readAccount *
- * reads in the data for an account from the datafile *
- * *
- * 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 *
- * Return: error value, 0 if OK, else -1 *
-\********************************************************************/
-static Account *
-readAccount( QofBook *book, int fd, AccountGroup *grp, int token )
-{
- int err=0;
- int i;
- int numTrans, accID;
- Account *acc;
- gnc_commodity * currency;
- gnc_commodity * security;
- char * tmp;
-
- ENTER (" ");
-
- /* version 1 does not store the account number */
- if (1 < token) {
- err = read( fd, &accID, sizeof(int) );
- if( err != sizeof(int) ) { LEAVE(""); return NULL; }
- XACC_FLIP_INT (accID);
- acc = locateAccount (accID, book);
- /* locateAccountAlways should always accounts that are open for
- editing in this situation */
- } else {
- acc = xaccMallocAccount(book);
- xaccGroupInsertAccount (holder, acc);
- xaccAccountBeginEdit (acc);
- }
-
- {
- /* flags are now gone - if you need these, use kv pairs */
- char tmpflags;
- err = read( fd, &tmpflags, sizeof(char) );
- if( err != sizeof(char) ) { LEAVE(""); return NULL; }
- }
-
- /* if (9999>= token) */ {
- char ff_acctype;
- int acctype;
- err = read( fd, &(ff_acctype), sizeof(char) );
- if( err != sizeof(char) ) { LEAVE(""); return NULL; }
- switch (ff_acctype) {
- case FF_BANK: { acctype = ACCT_TYPE_BANK; break; }
- case FF_CASH: { acctype = ACCT_TYPE_CASH; break; }
- case FF_ASSET: { acctype = ACCT_TYPE_ASSET; break; }
- case FF_CREDIT: { acctype = ACCT_TYPE_CREDIT; break; }
- case FF_LIABILITY: { acctype = ACCT_TYPE_LIABILITY; break; }
- case FF_STOCK: { acctype = ACCT_TYPE_STOCK; break; }
- case FF_MUTUAL: { acctype = ACCT_TYPE_MUTUAL; break; }
- case FF_INCOME: { acctype = ACCT_TYPE_INCOME; break; }
- case FF_EXPENSE: { acctype = ACCT_TYPE_EXPENSE; break; }
- case FF_EQUITY: { acctype = ACCT_TYPE_EQUITY; break; }
- case FF_CHECKING: { acctype = ACCT_TYPE_CHECKING; break; }
- case FF_SAVINGS: { acctype = ACCT_TYPE_SAVINGS; break; }
- case FF_MONEYMRKT: { acctype = ACCT_TYPE_MONEYMRKT; break; }
- case FF_CREDITLINE: { acctype = ACCT_TYPE_CREDITLINE; break; }
- case FF_CURRENCY: { acctype = ACCT_TYPE_CURRENCY; break; }
- default: LEAVE(""); return NULL;
- }
- xaccAccountSetType (acc, acctype);
- }
-
- tmp = readString( fd, token );
- if (NULL == tmp) { LEAVE(""); return NULL; }
- DEBUG ("reading acct %s", tmp);
- xaccAccountSetName (acc, tmp);
- g_free (tmp);
-
- if (8 <= token) {
- tmp = readString( fd, token );
- if (NULL == tmp) { LEAVE(""); return NULL; }
- xaccAccountSetCode (acc, tmp);
- g_free (tmp);
- }
-
- tmp = readString( fd, token );
- if (NULL == tmp ) { LEAVE(""); return NULL; }
- xaccAccountSetDescription (acc, tmp);
- g_free (tmp);
-
- tmp = readString( fd, token );
- if (NULL == tmp ) { LEAVE(""); return NULL; }
- if(strlen(tmp) > 0) {
- xaccAccountSetNotes (acc, tmp);
- }
- g_free (tmp);
-
- /* currency and security strings first introduced
- * in version 7 of the file format */
- if (7 <= token) {
- tmp = readString( fd, token );
- if( NULL == tmp ) { LEAVE(""); return NULL; }
-
- PINFO ("currency is %s", tmp);
- currency = gnc_commodity_import_legacy(book, tmp);
- DxaccAccountSetCurrency (acc, currency);
-
- if(tmp) g_free (tmp);
-
- tmp = readString( fd, token );
-
- if (!tmp || *tmp == '\0')
- {
- if (xaccAccountIsPriced(acc)) {
- if (tmp) g_free (tmp);
-
- tmp = strdup (xaccAccountGetName (acc));
- if (tmp == NULL) { LEAVE(""); return NULL; }
- }
- }
-
- PINFO ("security is %s", tmp);
- security = gnc_commodity_import_legacy(book, tmp);
- DxaccAccountSetSecurity (acc, security);
-
- if(tmp) g_free (tmp);
- }
- else
- {
- /* set the default currency when importing old files */
- currency = gnc_commodity_import_legacy(book, DEFAULT_CURRENCY);
- DxaccAccountSetCurrency (acc, currency);
- }
-
- /* aux account info first appears in version ten files */
- if (10 <= token) {
- if(!readAccInfo(fd, acc, token)) {
- LEAVE("");
- return(NULL);
- }
- }
-
- err = read( fd, &numTrans, sizeof(int) );
- if( err != sizeof(int) ) { LEAVE(""); return NULL; }
- XACC_FLIP_INT (numTrans);
-
- DEBUG ("expecting %d transactions", numTrans);
- /* read the transactions */
- for( i=0; i<numTrans; i++ ) {
- Transaction *trans;
- trans = readTransaction(book, fd, acc, token );
- if(trans == NULL ) {
- PERR ("Short Transaction Read: \n"
- "\texpected %d got %d transactions \n", numTrans, i);
- break;
- }
- }
-
- /* Not needed now. Since we always look in ids_to_finished_accounts
- * first, it doesn't matter if we don't ever delete anything from
- * unfinished_accounts...
- *
- * springAccount (acc->id); */
-
- xaccGroupInsertAccount (grp, acc);
-
- /* version 4 is the first file version that introduces
- * sub-accounts */
- if (4 <= token) {
- int numGrps;
- err = read( fd, &numGrps, sizeof(int) );
- if( err != sizeof(int) ) {
- LEAVE("");
- return NULL;
- }
- XACC_FLIP_INT (numGrps);
- if (numGrps) {
- readGroup (book, fd, acc, token);
- }
- }
-
- xaccAccountCommitEdit (acc);
-
- LEAVE("");
- return acc;
-}
-
-/********************************************************************\
- * locateAccount
- *
- * With the double-entry system, the file may reference accounts that
- * have not yet been read or properly parented. Thus, we need a way
- * of dealing with this, and this routine performs this
- * work. Basically, accounts are requested by their id. If an account
- * with the indicated ID does not exist, it is created and placed in a
- * temporary hash. Accounts in the temp hash can be located, (so that
- * transactions can be added to them) and sprung (so that they can be
- * properly parented into a group).
- *
- * Also, if locate account creates a new account, it'll be open for
- * editing.
- */
-
-static Account *
-locateAccount (int acc_id, QofBook *book)
-{
- Account * acc;
- /* negative account ids denote no account */
- if (0 > acc_id) return NULL;
-
- /* first, see if we've already created the account */
- acc = (Account *) g_hash_table_lookup(ids_to_finished_accounts,
- GINT_TO_POINTER(acc_id));
- if (acc) return acc;
-
- /* next, see if its an unclaimed account */
- acc = (Account *) g_hash_table_lookup(ids_to_unfinished_accounts,
- GINT_TO_POINTER(acc_id));
- if (acc) return acc;
-
- /* if neither, then it does not yet exist. Create it.
- * Put it in the drunk tank. */
- acc = xaccMallocAccount (book);
- xaccAccountBeginEdit(acc);
- g_hash_table_insert(ids_to_unfinished_accounts,
- GINT_TO_POINTER(acc_id),
- (gpointer) acc);
- return acc;
-}
-
-/********************************************************************\
- * readAccInfo *
- * reads in the auxilliary account info *
- * *
- * Args: fd - the filedescriptor of the data file *
- * token - the datafile version *
- * Return: the accinfo structure *
-\********************************************************************/
-
-static gboolean
-readAccInfo(int fd, Account *acc, int token) {
-
- /* The only data that was ever stored in the account info was a
- price src if it was an investment account. The AccInfo
- abstraction has been abandoned, and all that stuff will soon be
- handled by other means, so we're just going to cram pricesrc into
- the account kv table for now... */
-
- GNCAccountType acc_type;
-
- if(!acc) return(FALSE);
-
- acc_type = xaccAccountGetType(acc);
- if ((acc_type == ACCT_TYPE_STOCK) || (acc_type == ACCT_TYPE_MUTUAL)) {
- const char *tmp = readString( fd, token );
- if(NULL == tmp) return(FALSE);
- if(strlen(tmp) > 0) dxaccAccountSetPriceSrc(acc, tmp);
- g_free((char *) tmp);
- }
- return(TRUE);
-}
-
-static void
-xaccTransSetMemo (Transaction *trans, const char *memo)
-{
- Split *s;
-
- if (!trans || !memo) return;
-
- s = xaccTransGetSplit (trans, 0);
- xaccSplitSetMemo (s, memo);
-
- if (xaccTransCountSplits (trans) != 2)
- return;
-
- s = xaccTransGetSplit (trans, 1);
- xaccSplitSetMemo (s, memo);
-}
-
-static void
-xaccTransSetAction (Transaction *trans, const char *action)
-{
- Split *s;
-
- if (!trans || !action) return;
-
- s = xaccTransGetSplit (trans, 0);
- xaccSplitSetAction (s, action);
-
- if (xaccTransCountSplits (trans) != 2)
- return;
-
- s = xaccTransGetSplit (trans, 1);
- xaccSplitSetAction (s, action);
-}
-
-/********************************************************************\
- * readTransaction *
- * reads in the data for a transaction from the datafile *
- * *
- * Args: fd - the filedescriptor of the data file *
- * token - the datafile version *
- * Return: the transaction structure *
-\********************************************************************/
-
-static Transaction *
-readTransaction(QofBook *book, int fd, Account *acc, int revision)
- {
- int err=0;
- int acc_id;
- int i;
- int dummy_category;
- int numSplits;
- Transaction *trans = 0x0;
- char *tmp;
- char recn;
- double num_shares = 0.0;
- double share_price = 0.0;
-
- ENTER (" ");
-
- /* create a transaction structure */
- trans = xaccMallocTransaction(book);
- xaccTransBeginEdit (trans);
-
- tmp = readString( fd, revision );
- if (NULL == tmp)
- {
- PERR ("Premature end of Transaction at num");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- xaccTransSetNum (trans, tmp);
- g_free (tmp);
-
- if (revision <= 7) {
- time_t secs;
- secs = readDMYDate( fd, revision );
- if( 0 == secs )
- {
- PERR ("Premature end of Transaction at date");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- xaccTransSetDateSecs (trans, secs);
- xaccTransSetDateEnteredSecs (trans, secs);
- } else {
- Timespec ts;
- int rc;
-
- /* read posted date first ... */
- rc = readTSDate( fd, &ts, revision );
- if( -1 == rc )
- {
- PERR ("Premature end of Transaction at date");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- xaccTransSetDatePostedTS (trans, &ts);
-
- /* then the entered date ... */
- rc = readTSDate( fd, &ts, revision );
- if( -1 == rc )
- {
- PERR ("Premature end of Transaction at date");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- xaccTransSetDateEnteredTS (trans, &ts);
- }
-
- tmp = readString( fd, revision );
- if( NULL == tmp )
- {
- PERR ("Premature end of Transaction at description");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- PINFO ("description=%s", tmp);
- xaccTransSetDescription (trans, tmp);
- g_free (tmp);
-
- /* docref first makes an appearance in version 8. They're now
- deprecated, and we don't think anyone ever used them anyway, but
- to be safe, if we find one, we store it in the old-docref slot, a
- la old-price-source. */
- if (revision >= 8) {
- tmp = readString( fd, revision );
- if( NULL == tmp ) {
- PERR ("Premature end of Transaction at docref");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- if(strlen(tmp) > 0) {
- kvp_value *new_value = kvp_value_new_string(tmp);
- if(!new_value) {
- PERR ("Failed to allocate kvp_value for transaction docref.");
- g_free(tmp);
- return(NULL);
- }
- kvp_frame_set_slot_nc(xaccTransGetSlots(trans), "old-docref", new_value);
- }
- g_free (tmp);
- }
-
- /* At version 5, most of the transaction stuff was
- * moved to splits. Thus, vast majority of stuff below
- * is skipped
- */
- if (revision <= 4) {
- Split* s;
-
- tmp = readString( fd, revision );
- if( NULL == tmp )
- {
- PERR ("Premature end of Transaction at memo");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
-
- if(strlen(tmp) > 0) {
- xaccTransSetMemo (trans, tmp);
- }
- g_free (tmp);
-
- /* action first introduced in version 3 of the file format */
- if (revision >= 3)
- {
- tmp = readString( fd, revision );
- if( NULL == tmp )
- {
- PERR ("Premature end of Transaction at action");
- xaccTransDestroy (trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- xaccTransSetAction (trans, tmp);
- g_free (tmp);
- }
-
- /* category is now obsolete */
- err = read( fd, &(dummy_category), sizeof(int) );
- if( sizeof(int) != err )
- {
- PERR ("Premature end of Transaction at category");
- xaccTransDestroy (trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
-
- err = read( fd, &recn, sizeof(char) );
- if( sizeof(char) != err )
- {
- PERR ("Premature end of Transaction at reconciled");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
-
- /* The code below really wants to assume that there are a pair
- * of splits in every transaction, so make it so.
- */
- s = xaccMallocSplit (book);
- xaccTransAppendSplit (trans, s);
- s = xaccMallocSplit (book);
- xaccTransAppendSplit (trans, s);
-
- s = xaccTransGetSplit (trans, 0);
- xaccSplitSetReconcile (s, recn);
- s = xaccTransGetSplit (trans, 1);
- xaccSplitSetReconcile (s, recn);
-
- if(revision <= 1) {
- /* Note: this is for version 0 of file format only.
- * What used to be reconciled, is now cleared... transactions
- * aren't reconciled until you get your bank statement, and
- * use the reconcile window to mark the transaction reconciled
- */
- if( YREC == recn ) {
- s = xaccTransGetSplit (trans, 0);
- xaccSplitSetReconcile (s, CREC);
- s = xaccTransGetSplit (trans, 1);
- xaccSplitSetReconcile (s, CREC);
- }
- }
-
- /* Version 1 files stored the amount as an integer,
- * with the amount recorded as pennies.
- * Version 2 and above store the share amounts and
- * prices as doubles. */
- if (1 == revision) {
- int amount;
-
- err = read( fd, &amount, sizeof(int) );
- if( sizeof(int) != err )
- {
- PERR ("Premature end of Transaction at V1 amount");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- XACC_FLIP_INT (amount);
- num_shares = 0.01 * ((double) amount); /* file stores pennies */
- s = xaccTransGetSplit (trans, 0);
- DxaccSplitSetShareAmount (s, num_shares);
-
- /* Version 1 files did not do double-entry */
- s = xaccTransGetSplit (trans, 0);
- xaccAccountInsertSplit( acc, s );
- } else {
- Account *peer_acc;
- double damount;
-
- /* first, read number of shares ... */
- err = read( fd, &damount, sizeof(double) );
- if( sizeof(double) != err )
- {
- PERR ("Premature end of Transaction at amount");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- XACC_FLIP_DOUBLE (damount);
- num_shares = damount;
-
- /* ... next read the share price ... */
- err = read( fd, &damount, sizeof(double) );
- if( err != sizeof(double) )
- {
- PERR ("Premature end of Transaction at share_price");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- XACC_FLIP_DOUBLE (damount);
- share_price = damount;
- s = xaccTransGetSplit (trans, 0);
-
- DxaccSplitSetSharePriceAndAmount (s, share_price, num_shares);
-
- /* Read the account numbers for double-entry */
- /* These are first used in Version 2 of the file format */
-
- /* first, read the credit account number */
- err = read( fd, &acc_id, sizeof(int) );
- if( err != sizeof(int) )
- {
- PERR ("Premature end of Transaction at credit");
- xaccTransDestroy (trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- XACC_FLIP_INT (acc_id);
- DEBUG ("credit %d\n", acc_id);
- peer_acc = locateAccount (acc_id, book);
-
- /* insert the split part of the transaction into
- * the credited account */
- s = xaccTransGetSplit (trans, 0);
- if (peer_acc) xaccAccountInsertSplit( peer_acc, s);
-
- mark_potential_quote(s, share_price, num_shares);
-
- /* next read the debit account number */
- err = read( fd, &acc_id, sizeof(int) );
- if( err != sizeof(int) )
- {
- PERR ("Premature end of Transaction at debit");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- XACC_FLIP_INT (acc_id);
- DEBUG ("debit %d\n", acc_id);
- peer_acc = locateAccount (acc_id, book);
- if (peer_acc) {
- Split *s0 = xaccTransGetSplit (trans, 0);
- Split *s1 = xaccTransGetSplit (trans, 1);
-
- /* duplicate many of the attributes in the credit split */
- DxaccSplitSetSharePriceAndAmount (s1, share_price, -num_shares);
- xaccSplitSetReconcile (s1, xaccSplitGetReconcile (s0));
- xaccSplitSetMemo (s1, xaccSplitGetMemo (s0));
- xaccSplitSetAction (s1, xaccSplitGetAction (s0));
- xaccAccountInsertSplit (peer_acc, s1);
- mark_potential_quote(s1, share_price, -num_shares);
- }
- }
- } else { /* else, read version 5 and above files */
-
- const char *notes = NULL;
-
- if (revision == 5) {
- /* Version 5 files included a split that immediately
- * followed the transaction, before the destination splits.
- * Later versions don't have this. */
- Split *split = readSplit (book, fd, revision);
- xaccTransAppendSplit(trans, split);
- }
-
- /* read number of splits */
- err = read( fd, &(numSplits), sizeof(int) );
- if( err != sizeof(int) ) {
- PERR ("Premature end of Transaction at num-splits");
- xaccTransDestroy(trans);
- xaccTransCommitEdit (trans);
- return NULL;
- }
- XACC_FLIP_INT (numSplits);
- for (i = 0; i < numSplits; i++) {
- Split *split = readSplit(book, fd, revision);
- xaccTransAppendSplit(trans, split);
-
- if(!notes) {
- notes = xaccSplitGetMemo (split);
- if(notes) xaccTransSetNotes (trans, notes);
- }
- }
- }
-
- xaccTransCommitEdit (trans);
-
- return trans;
-}
-
-/********************************************************************\
- * readSplit *
- * reads in the data for a split from the datafile *
- * *
- * Args: fd - the filedescriptor of the data file *
- * token - the datafile version *
- * Return: the transaction structure *
-\********************************************************************/
-
-static Split *
-readSplit ( QofBook *book, int fd, int token )
-{
- Account *peer_acc;
- Split *split;
- int err=0;
- int acc_id;
- char *tmp;
- char recn;
- double num_shares, share_price;
-
- ENTER (" ");
-
- /* create a split structure */
- split = xaccMallocSplit(book);
-
- tmp = readString( fd, token );
- if( NULL == tmp )
- {
- PERR ("Premature end of Split at memo");
- xaccSplitDestroy(split);
- return NULL;
- }
- PINFO ("memo=%s", tmp);
- xaccSplitSetMemo (split, tmp);
- g_free (tmp);
-
- tmp = readString( fd, token );
- if( tmp == NULL )
- {
- PERR ("Premature end of Split at action");
- xaccSplitDestroy (split);
- return NULL;
- }
- xaccSplitSetAction (split, tmp);
- g_free (tmp);
-
- err = read( fd, &recn, sizeof(char) );
- if( err != sizeof(char) )
- {
- PERR ("Premature end of Split at reconciled");
- xaccSplitDestroy (split);
- return NULL;
- }
-
- /* make sure the value of split->reconciled is valid...
- * Do this mainly in case we change what NREC and
- * YREC are defined to be... this way it might loose all
- * the reconciled data, but at least the field is valid */
- if( (YREC != recn) &&
- (FREC != recn) &&
- (CREC != recn) ) {
- recn = NREC;
- }
- xaccSplitSetReconcile (split, recn);
-
- /* version 8 and newer files store date-reconciled */
- if (8 <= token) {
- Timespec ts;
- int rc;
-
- rc = readTSDate( fd, &ts, token );
- if( -1 == rc )
- {
- PERR ("Premature end of Split at date");
- xaccSplitDestroy (split);
- return NULL;
- }
- xaccSplitSetDateReconciledTS (split, &ts);
- } else {
- time_t now;
- now = time (0);
- xaccSplitSetDateReconciledSecs (split, now);
- }
-
- /* docref first makes an appearance in version 8. They're now
- deprecated, and we don't think anyone ever used them anyway, but
- to be safe, if we find one, we store it in the old-docref slot, a
- la old-price-source. */
- if (8 <= token) {
- tmp = readString( fd, token );
- if( NULL == tmp ) {
- PERR ("Premature end of Split at docref");
- xaccSplitDestroy (split);
- return NULL;
- }
- if(strlen(tmp) > 0) {
- kvp_value *new_value = kvp_value_new_string(tmp);
- if(!new_value) {
- PERR ("Failed to allocate kvp_value for split docref.");
- g_free(tmp);
- return(NULL);
- }
- kvp_frame_set_slot_nc(xaccSplitGetSlots(split), "old-docref", new_value);
- }
- g_free (tmp);
- }
-
- /* first, read number of shares ... */
- err = read( fd, &num_shares, sizeof(double) );
- if( sizeof(double) != err )
- {
- PERR ("Premature end of Split at amount");
- xaccSplitDestroy (split);
- return NULL;
- }
- XACC_FLIP_DOUBLE (num_shares);
-
- /* ... next read the share price ... */
- err = read( fd, &share_price, sizeof(double) );
- if( sizeof(double) != err )
- {
- PERR ("Premature end of Split at share_price");
- xaccSplitDestroy (split);
- return NULL;
- }
- XACC_FLIP_DOUBLE (share_price);
-
- DxaccSplitSetSharePriceAndAmount (split, share_price, num_shares);
-
- DEBUG ("num_shares %f", num_shares);
-
- /* Read the account number */
-
- err = read( fd, &acc_id, sizeof(int) );
- if( sizeof(int) != err )
- {
- PERR ("Premature end of Split at account");
- xaccSplitDestroy (split);
- return NULL;
- }
- XACC_FLIP_INT (acc_id);
- DEBUG ("account id %d", acc_id);
- peer_acc = locateAccount (acc_id, book);
- xaccAccountInsertSplit (peer_acc, split);
-
- mark_potential_quote(split, share_price, num_shares);
- return split;
-}
-
-/********************************************************************\
- * readString *
- * reads in a string (char *) from the datafile *
- * *
- * Args: fd - the filedescriptor of the data file *
- * token - the datafile version *
- * Return: the string *
-\********************************************************************/
-static char *
-readString( int fd, int token )
- {
- int err=0;
- int size;
- char *str;
-
- err = read( fd, &size, sizeof(int) );
- if( err != sizeof(int) )
- return NULL;
- XACC_FLIP_INT (size);
-
- str = (char *) g_malloc (size);
- if (!str) {
- PERR("malloc failed on size %d bytes at position %ld\n", size,
- (long int) lseek(fd, 0, SEEK_CUR));
- return NULL;
- }
- err = read( fd, str, size );
- if( err != size )
- {
- PERR("size = %d err = %d str = %s\n", size, err, str );
- g_free(str);
- return NULL;
- }
-
- return str;
- }
-
-/********************************************************************\
- * readTSDate *
- * reads in a Date struct from the datafile *
- * *
- * Args: fd - the filedescriptor of the data file *
- * token - the datafile version *
- * Return: the Date struct *
-\********************************************************************/
-static int
-readTSDate( int fd, Timespec *ts, int token )
- {
- int err=0;
- gint64 secs = 0; /* 64-bit int */
- gint32 nsecs = 0;
-
- /* secs is a 32-bit in in version 8 & earlier files,
- * and goes 64-bit in the later files */
- if (8 >= token)
- {
- gint32 sicks;
- err = read( fd, &sicks, sizeof(gint32) );
- if( err != sizeof(gint32) )
- {
- return -1;
- }
- XACC_FLIP_INT (sicks);
- secs = sicks;
- }
- else
- {
- err = read( fd, &secs, sizeof(gint64) );
- if( err != sizeof(gint64) )
- {
- return -1;
- }
- XACC_FLIP_LONG_LONG (secs);
- }
-
- err = read( fd, &nsecs, sizeof(gint32) );
- if( err != sizeof(gint32) )
- {
- return -1;
- }
- XACC_FLIP_INT (nsecs);
-
- ts->tv_sec = secs;
- ts->tv_nsec = nsecs;
-
- return 2*err;
- }
-
-/********************************************************************\
- * readDMYDate *
- * reads in a Date struct from the datafile *
- * *
- * Args: fd - the filedescriptor of the data file *
- * token - the datafile version *
- * Return: the Date struct *
-\********************************************************************/
-static time_t
-readDMYDate( int fd, int token )
- {
- int err=0;
- int day, month, year;
- time_t secs;
-
- err = read( fd, &year, sizeof(int) );
- if( err != sizeof(int) )
- {
- return 0;
- }
- XACC_FLIP_INT (year);
-
- err = read( fd, &month, sizeof(int) );
- if( err != sizeof(int) )
- {
- return 0;
- }
- XACC_FLIP_INT (month);
-
- err = read( fd, &day, sizeof(int) );
- if( err != sizeof(int) )
- {
- return 0;
- }
- XACC_FLIP_INT (day);
-
- secs = xaccDMYToSec (day, month, year);
- return secs;
- }
-
-
-/*********************** END OF FILE *********************************/
Deleted: gnucash/trunk/src/backend/file/io-gncbin.h
===================================================================
--- gnucash/trunk/src/backend/file/io-gncbin.h 2007-02-19 23:45:15 UTC (rev 15637)
+++ gnucash/trunk/src/backend/file/io-gncbin.h 2007-02-21 02:05:55 UTC (rev 15638)
@@ -1,64 +0,0 @@
-/********************************************************************\
- * 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 *
- * 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 *
- * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
- * Boston, MA 02110-1301, USA gnu at gnu.org *
- * *
- * Author: Rob Clark *
- * Internet: rclark at cs.hmc.edu *
- * Address: 609 8th Street *
- * Huntington Beach, CA 92648-4632 *
-\********************************************************************/
-
-#ifndef IO_GNCBIN_H
-#define IO_GNCBIN_H
-
-#include "qof.h"
-
-/* @file io-gncbin.h
- * @brief read (old X-Accountant format) binary datafile
- * @author Copyright (C) 1997 Robin D. Clark
- * @author Copyright (C) 1998, 1999 Linas Vepstas <linas at linas.org>
-
- @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 QofBook's higher level functions should be used.
-*/
-/** Load the financial data represented by the book's file_path
-into the indicated book.*/
-void qof_session_load_from_binfile(QofBook *, const char * filepath);
-
-/** Error handler.
-
-\return an error code for any error
- detected that occured during reading or writing.
-
-The error code will be reset after the call.
-
- The current implementation can be
- thought of as a "stack of depth one", and this routine as a "pop".
-*/
-QofBackendError gnc_get_binfile_io_error(void);
-
-/** \brief Attempt to identify the binary format.
-
-Instead of assuming that anything not v1 or v2 XML is the gnc
-binary format, this function tries to load the version token
-from the file.
-*/
-gboolean gnc_is_bin_file (const gchar *name);
-
-#endif /* IO_GNCBIN_H */
More information about the gnucash-changes
mailing list