#include <unistd.h>
#include <stdio.h>
+#include <fstream>
#include <stdexcept>
+#include <boost/scoped_array.hpp>
+
#include "logread.hxx"
using namespace std;
string logread::getLogChanges()
{
// open logfile
- FILE *log = fopen (filename.c_str(), "r");
- if (!log)
+ ifstream log( filename.c_str(), ifstream::in );
+ if ( !log.is_open() )
return "";
// read logfile
int size = logsize-logsize_old;
- char *read_buffer = new char [size+1];
- if (fseek (log, logsize_old, SEEK_SET) != 0)
+ boost::scoped_array<char> read_buffer( new char[ size + 1 ] );
+ log.seekg( logsize_old, fstream::beg );
+ if ( log.rdstate() != fstream::goodbit )
throw runtime_error("can't seek in file " + filename);
- fread (read_buffer, size, 1, log);
- if (ferror(log))
+ log.read( read_buffer.get(), size );
+ if ( log.rdstate() != fstream::goodbit )
throw runtime_error("error reading from file " + filename);
- fclose (log);
+ log.close();
read_buffer[size] = 0;
- string changes(read_buffer);
- delete[] read_buffer;
+ string changes( read_buffer.get() );
return changes;
}