From 05ebbc073b38c0e8b9663de9257e3d3e5703726f Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Wed, 23 Apr 2008 19:33:44 -0500 Subject: [PATCH] Clean up compaction code. --- Timeline/Loggable.C | 23 ++++++++--------------- Timeline/Loggable.H | 5 +++-- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/Timeline/Loggable.C b/Timeline/Loggable.C index fc18d65..b6a6df8 100644 --- a/Timeline/Loggable.C +++ b/Timeline/Loggable.C @@ -327,13 +327,13 @@ Loggable::undo ( void ) } /** write a snapshot of the state of all loggable objects, sufficient - * for later reconstruction, to /file/ */ + * for later reconstruction, to /fp/ */ bool -Loggable::snapshot( const char *file ) +Loggable::snapshot( FILE *fp ) { FILE *ofp = _fp; - if ( ! ( _fp = fopen( file, "w" ) ) ) + if ( ! ( _fp = fp ) ) { _fp = ofp; return false; @@ -345,8 +345,6 @@ Loggable::snapshot( const char *file ) _loggables[ i ]->log_create(); } - fclose( _fp ); - _fp = ofp; return true; @@ -355,21 +353,16 @@ Loggable::snapshot( const char *file ) void Loggable::compact ( void ) { - fclose( _fp ); - _fp = NULL; - /* FIXME: don't use name here */ - snapshot( "history" ); + fseek( _fp, 0, SEEK_SET ); + ftruncate( fileno( _fp ), 0 ); - if ( ! ( _fp = fopen( "history", "a+" ) ) ) - { - printf( "Could not open log file for writing!" ); -// return false; - } + snapshot( _fp ); + + _undo_index = 0; } - void Loggable::log ( const char *fmt, ... ) { diff --git a/Timeline/Loggable.H b/Timeline/Loggable.H index dd806fe..890d2b4 100644 --- a/Timeline/Loggable.H +++ b/Timeline/Loggable.H @@ -68,6 +68,7 @@ class Loggable static queue _transaction; private: + int _id; char **_old_state; @@ -88,14 +89,14 @@ private: log( "\t" ); } + static bool snapshot( FILE * fp ); public: static bool open ( const char *filename ); static void undo ( void ); static int undo_index ( void ) { return _undo_index; } - static bool snapshot( const char *file ); - static void compact( void ); + static void compact ( void ); static void