mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
"refactor"/simplify dead-ugly code, change API to match backend
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6459 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
3cab59040e
commit
3115d83d79
@ -1,5 +1,7 @@
|
|||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* gnc-backend-file.c
|
* gnc-backend-file.c: load and save data to files
|
||||||
|
*
|
||||||
|
*
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@ -51,8 +53,9 @@ typedef enum
|
|||||||
GNC_BOOK_XML2_FILE,
|
GNC_BOOK_XML2_FILE,
|
||||||
} GNCBookFileType;
|
} GNCBookFileType;
|
||||||
|
|
||||||
|
static void gnc_file_be_load_from_file(Backend *, GNCBook *);
|
||||||
|
|
||||||
static gboolean gnc_file_be_get_file_lock (FileBackend *be);
|
static gboolean gnc_file_be_get_file_lock (FileBackend *be);
|
||||||
static gboolean gnc_file_be_load_from_file(FileBackend *be);
|
|
||||||
static gboolean gnc_file_be_write_to_file(FileBackend *be,
|
static gboolean gnc_file_be_write_to_file(FileBackend *be,
|
||||||
gboolean make_backup);
|
gboolean make_backup);
|
||||||
|
|
||||||
@ -110,27 +113,6 @@ file_session_begin(Backend *be_start, GNCSession *session, const char *book_id,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
file_load_file(Backend *be)
|
|
||||||
{
|
|
||||||
if(!gnc_file_be_load_from_file((FileBackend*)be))
|
|
||||||
{
|
|
||||||
xaccBackendSetError(be, ERR_BACKEND_MISC);
|
|
||||||
g_free(((FileBackend*)be)->lockfile);
|
|
||||||
((FileBackend*)be)->lockfile = NULL;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
file_book_load (Backend *be)
|
|
||||||
{
|
|
||||||
if (!file_load_file(be))
|
|
||||||
{
|
|
||||||
PERR("file_load_file returned FALSE");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
file_session_end(Backend *be_start)
|
file_session_end(Backend *be_start)
|
||||||
@ -181,7 +163,7 @@ gnc_backend_new(void)
|
|||||||
xaccInitBackend(be);
|
xaccInitBackend(be);
|
||||||
|
|
||||||
be->session_begin = file_session_begin;
|
be->session_begin = file_session_begin;
|
||||||
be->book_load = file_book_load;
|
be->book_load = gnc_file_be_load_from_file;
|
||||||
be->price_load = NULL;
|
be->price_load = NULL;
|
||||||
be->session_end = file_session_end;
|
be->session_end = file_session_end;
|
||||||
be->destroy_backend = file_destroy_backend;
|
be->destroy_backend = file_destroy_backend;
|
||||||
@ -353,52 +335,43 @@ gnc_file_be_determine_file_type(const char *path)
|
|||||||
it's not NULL. This function does not manage file locks in any
|
it's not NULL. This function does not manage file locks in any
|
||||||
way. */
|
way. */
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
happy_or_push_error(Backend *be, gboolean errret, GNCBackendError errcode)
|
gnc_file_be_load_from_file (Backend *bend, GNCBook *book)
|
||||||
{
|
{
|
||||||
if(errret) {
|
GNCBackendError error = ERR_BACKEND_NO_ERR;
|
||||||
return TRUE;
|
gboolean rc;
|
||||||
} else {
|
FileBackend *be = (FileBackend *) bend;
|
||||||
xaccBackendSetError(be, errcode);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
gnc_file_be_load_from_file(FileBackend *be)
|
|
||||||
{
|
|
||||||
switch (gnc_file_be_determine_file_type(be->fullpath))
|
switch (gnc_file_be_determine_file_type(be->fullpath))
|
||||||
{
|
{
|
||||||
case GNC_BOOK_XML2_FILE:
|
case GNC_BOOK_XML2_FILE:
|
||||||
return happy_or_push_error((Backend*)be,
|
rc = gnc_session_load_from_xml_file_v2 (be->session, NULL);
|
||||||
gnc_session_load_from_xml_file_v2
|
if (FALSE == rc) error = ERR_FILEIO_PARSE_ERROR;
|
||||||
(be->session, NULL),
|
break;
|
||||||
ERR_BACKEND_MISC);
|
|
||||||
case GNC_BOOK_XML1_FILE:
|
|
||||||
return happy_or_push_error((Backend*)be,
|
|
||||||
gnc_session_load_from_xml_file(be->session),
|
|
||||||
ERR_BACKEND_MISC);
|
|
||||||
case GNC_BOOK_BIN_FILE:
|
|
||||||
{
|
|
||||||
/* presume it's an old-style binary file */
|
|
||||||
GNCBackendError error;
|
|
||||||
|
|
||||||
|
case GNC_BOOK_XML1_FILE:
|
||||||
|
rc = gnc_session_load_from_xml_file (be->session);
|
||||||
|
if (FALSE == rc) error = ERR_FILEIO_PARSE_ERROR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GNC_BOOK_BIN_FILE:
|
||||||
|
/* presume it's an old-style binary file */
|
||||||
gnc_session_load_from_binfile(be->session);
|
gnc_session_load_from_binfile(be->session);
|
||||||
error = gnc_get_binfile_io_error();
|
error = gnc_get_binfile_io_error();
|
||||||
|
break;
|
||||||
|
|
||||||
if(error == ERR_BACKEND_NO_ERR) {
|
|
||||||
return TRUE;
|
|
||||||
} else {
|
|
||||||
xaccBackendSetError((Backend*)be, error);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
PWARN("File not any known type");
|
PWARN("File not any known type");
|
||||||
xaccBackendSetError((Backend*)be, ERR_FILEIO_UNKNOWN_FILE_TYPE);
|
error = ERR_FILEIO_UNKNOWN_FILE_TYPE;
|
||||||
return FALSE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(error != ERR_BACKEND_NO_ERR)
|
||||||
|
{
|
||||||
|
xaccBackendSetError(bend, error);
|
||||||
|
g_free(be->lockfile);
|
||||||
|
be->lockfile = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -476,7 +449,7 @@ gnc_int_link_or_make_backup(FileBackend *be, const char *orig, const char *bkup)
|
|||||||
|
|
||||||
if(!err_ret)
|
if(!err_ret)
|
||||||
{
|
{
|
||||||
xaccBackendSetError((Backend*)be, ERR_BACKEND_MISC);
|
xaccBackendSetError((Backend*)be, ERR_FILEIO_BACKUP_ERROR);
|
||||||
PWARN ("unable to make file backup from %s to %s: %s",
|
PWARN ("unable to make file backup from %s to %s: %s",
|
||||||
orig, bkup, strerror(errno) ? strerror(errno) : "");
|
orig, bkup, strerror(errno) ? strerror(errno) : "");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
Loading…
Reference in New Issue
Block a user