.\n in emails appears to screw things up, so add a space.
[dcpomatic.git] / src / lib / log.cc
index 5e8277a23c5da6a023212defe579f9c5270212a7..daef13f77aa1fae64eaf8a7fffced1eae016f6b0 100644 (file)
@@ -123,3 +123,45 @@ FileLog::do_log (string m)
        fclose (f);
 }
 
+string
+FileLog::head_and_tail (int amount) const
+{
+       boost::mutex::scoped_lock lm (_mutex);
+
+       uintmax_t head_amount = amount;
+       uintmax_t tail_amount = amount;
+       uintmax_t size = boost::filesystem::file_size (_file);
+
+       if (size < (head_amount + tail_amount)) {
+               head_amount = size;
+               tail_amount = 0;
+       }
+       
+       FILE* f = fopen_boost (_file, "r");
+       if (!f) {
+               return "";
+       }
+
+       string out;
+
+       char* buffer = new char[max(head_amount, tail_amount) + 1];
+       
+       int N = fread (buffer, 1, head_amount, f);
+       buffer[N] = '\0';
+       out += string (buffer);
+
+       if (tail_amount > 0) {
+               out +=  "\n .\n .\n .\n";
+
+               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;
+}