add some reality to the journalling system

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@1067 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas 1998-08-29 19:46:18 +00:00
parent 5eab083a70
commit faa3eed1c5
2 changed files with 54 additions and 3 deletions

View File

@ -83,6 +83,7 @@
static int gen_logs = 1; static int gen_logs = 1;
static FILE * trans_log = 0x0; static FILE * trans_log = 0x0;
static char * log_base_name = 0x0;
/********************************************************************\ /********************************************************************\
\********************************************************************/ \********************************************************************/
@ -93,23 +94,54 @@ void xaccLogEnable (void) { gen_logs = 1; }
/********************************************************************\ /********************************************************************\
\********************************************************************/ \********************************************************************/
void
xaccLogSetBaseName (const char *basepath)
{
if (!basepath) return;
if (log_base_name) free (log_base_name);
log_base_name = strdup (basepath);
if (trans_log) {
xaccCloseLog();
xaccOpenLog();
}
}
/********************************************************************\
\********************************************************************/
void void
xaccOpenLog (void) xaccOpenLog (void)
{ {
char filename[1000]; char * filename;
char * timestamp; char * timestamp;
if (!gen_logs) return; if (!gen_logs) return;
if (trans_log) return; if (trans_log) return;
if (!log_base_name) log_base_name = strdup ("translog");
/* tag each filename with a timestamp */ /* tag each filename with a timestamp */
timestamp = xaccDateUtilGetStampNow (); timestamp = xaccDateUtilGetStampNow ();
strcpy (filename, "translog."); filename = (char *) malloc (strlen (log_base_name) + 50);
strcpy (filename, log_base_name);
strcat (filename, ".");
strcat (filename, timestamp); strcat (filename, timestamp);
strcat (filename, ".log"); strcat (filename, ".log");
trans_log = fopen (filename, "a"); trans_log = fopen (filename, "a");
if (!trans_log) {
int norr = errno;
printf ("Error: xaccOpenLog(): cannot open journal \n"
"\t %d %s\n", norr, strerror (norr));
free (filename);
free (timestamp);
return;
}
free (filename);
free (timestamp);
/* use tab-separated fields */ /* use tab-separated fields */
fprintf (trans_log, "mod id time_now " \ fprintf (trans_log, "mod id time_now " \
@ -119,7 +151,18 @@ xaccOpenLog (void)
"amount price date_reconciled\n"); "amount price date_reconciled\n");
fprintf (trans_log, "-----------------\n"); fprintf (trans_log, "-----------------\n");
free (timestamp); }
/********************************************************************\
\********************************************************************/
void
xaccCloseLog (void)
{
if (!trans_log) return;
fflush (trans_log);
fclose (trans_log);
trans_log = 0x0;
} }
/********************************************************************\ /********************************************************************\

View File

@ -27,10 +27,18 @@
#include "Transaction.h" #include "Transaction.h"
void xaccOpenLog (void); void xaccOpenLog (void);
void xaccCloseLog (void);
void xaccTransWriteLog (Transaction *, char); void xaccTransWriteLog (Transaction *, char);
void xaccLogEnable (void); void xaccLogEnable (void);
void xaccLogDisable (void); void xaccLogDisable (void);
/* The xaccLogSetBaseName() method sets the base filepath and the
* root part of the journal file name. If the journal file is
* already open, it will close it and reopen it with the new
* base name.
*/
void xaccLogSetBaseName (const char *);
/* returned strings will have been allocated with malloc, free with free() */ /* returned strings will have been allocated with malloc, free with free() */
char *xaccSplitAsString(Split *s, const char prefix[]); char *xaccSplitAsString(Split *s, const char prefix[]);
char *xaccTransAsString(Transaction *t, const char prefix[]); char *xaccTransAsString(Transaction *t, const char prefix[]);