summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-11-06 23:15:49 +0000
committerCarl Hetherington <cth@carlh.net>2014-11-06 23:15:49 +0000
commit8749d5a9ea25ba94ab50e6755d1b7033a8bb6004 (patch)
tree17b4f63e065c6678cf112fd862c785d3e225b595 /src/lib
parent009e4abb14cfcaecc0de8fab179adc7bd5feffd4 (diff)
Fix log head/tail functions.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/log.cc23
-rw-r--r--src/lib/log.h6
2 files changed, 16 insertions, 13 deletions
diff --git a/src/lib/log.cc b/src/lib/log.cc
index 156f8cf8b..934664915 100644
--- a/src/lib/log.cc
+++ b/src/lib/log.cc
@@ -124,12 +124,12 @@ FileLog::do_log (string m)
}
string
-FileLog::head_and_tail () const
+FileLog::head_and_tail (int amount) const
{
boost::mutex::scoped_lock lm (_mutex);
- uintmax_t head_amount = 1024;
- uintmax_t tail_amount = 1024;
+ uintmax_t head_amount = amount;
+ uintmax_t tail_amount = amount;
uintmax_t size = boost::filesystem::file_size (_file);
if (size < (head_amount + tail_amount)) {
@@ -148,16 +148,19 @@ FileLog::head_and_tail () const
int N = fread (buffer, 1, head_amount, f);
buffer[N] = '\0';
- out += buffer;
+ out += string (buffer);
- fseek (f, tail_amount, SEEK_END);
-
- N = fread (buffer, 1, tail_amount, f);
- buffer[N] = '\0';
- out += buffer;
+ if (tail_amount > 0) {
+ out += "\n.\n.\n.\n";
- delete[] buffer;
+ fseek (f, - tail_amount - 1, SEEK_END);
+
+ N = fread (buffer, 1, tail_amount, f);
+ buffer[N] = '\0';
+ out += string (buffer) + "\n";
+ }
+ delete[] buffer;
fclose (f);
return out;
diff --git a/src/lib/log.h b/src/lib/log.h
index f20b0a148..cee1ce495 100644
--- a/src/lib/log.h
+++ b/src/lib/log.h
@@ -48,7 +48,7 @@ public:
void set_types (int types);
- virtual std::string head_and_tail () const = 0;
+ virtual std::string head_and_tail (int amount = 1024) const = 0;
protected:
@@ -69,7 +69,7 @@ class FileLog : public Log
public:
FileLog (boost::filesystem::path file);
- std::string head_and_tail () const;
+ std::string head_and_tail (int amount = 1024) const;
private:
void do_log (std::string m);
@@ -80,7 +80,7 @@ private:
class NullLog : public Log
{
public:
- std::string head_and_tail () const {
+ std::string head_and_tail (int) const {
return "";
}