diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-08-26 19:45:37 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-08-26 19:45:37 +0100 |
| commit | e7e9347cdd1f43e0dd3d1ca35632e9493a010fc6 (patch) | |
| tree | 4ec010d7ccb168cdaae3da236600469862dfdf2c /src/lib | |
| parent | dd8a7d1bbb8f2afb1b98d2be856ff0a9920e180d (diff) | |
Split log.{cc,h}.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/file_log.cc | 89 | ||||
| -rw-r--r-- | src/lib/file_log.h | 33 | ||||
| -rw-r--r-- | src/lib/film.cc | 3 | ||||
| -rw-r--r-- | src/lib/log.cc | 63 | ||||
| -rw-r--r-- | src/lib/log.h | 24 | ||||
| -rw-r--r-- | src/lib/null_log.h | 31 | ||||
| -rw-r--r-- | src/lib/wscript | 1 |
7 files changed, 156 insertions, 88 deletions
diff --git a/src/lib/file_log.cc b/src/lib/file_log.cc new file mode 100644 index 000000000..599211d10 --- /dev/null +++ b/src/lib/file_log.cc @@ -0,0 +1,89 @@ +/* + Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "file_log.h" +#include "cross.h" +#include <cstdio> + +using std::cout; +using std::string; +using std::max; + +/** @param file Filename to write log to */ +FileLog::FileLog (boost::filesystem::path file) + : _file (file) +{ + +} + +void +FileLog::do_log (string m) +{ + FILE* f = fopen_boost (_file, "a"); + if (!f) { + cout << "(could not log to " << _file.string() << "): " << m << "\n"; + return; + } + + fprintf (f, "%s\n", m.c_str ()); + 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; +} diff --git a/src/lib/file_log.h b/src/lib/file_log.h new file mode 100644 index 000000000..1051ad1f9 --- /dev/null +++ b/src/lib/file_log.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "log.h" + +class FileLog : public Log +{ +public: + FileLog (boost::filesystem::path file); + + std::string head_and_tail (int amount = 1024) const; + +private: + void do_log (std::string m); + /** filename to write to */ + boost::filesystem::path _file; +}; diff --git a/src/lib/film.cc b/src/lib/film.cc index ea11cf0bd..685fc7658 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -28,7 +28,8 @@ #include "job_manager.h" #include "transcode_job.h" #include "upload_job.h" -#include "log.h" +#include "null_log.h" +#include "file_log.h" #include "exceptions.h" #include "examine_content_job.h" #include "config.h" diff --git a/src/lib/log.cc b/src/lib/log.cc index ac3277c4e..2e5cc54e1 100644 --- a/src/lib/log.cc +++ b/src/lib/log.cc @@ -120,66 +120,3 @@ Log::set_types (int t) boost::mutex::scoped_lock lm (_mutex); _types = t; } - -/** @param file Filename to write log to */ -FileLog::FileLog (boost::filesystem::path file) - : _file (file) -{ - -} - -void -FileLog::do_log (string m) -{ - FILE* f = fopen_boost (_file, "a"); - if (!f) { - cout << "(could not log to " << _file.string() << "): " << m << "\n"; - return; - } - - fprintf (f, "%s\n", m.c_str ()); - 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; -} diff --git a/src/lib/log.h b/src/lib/log.h index 73a1aa582..3efed667b 100644 --- a/src/lib/log.h +++ b/src/lib/log.h @@ -68,28 +68,4 @@ private: boost::signals2::scoped_connection _config_connection; }; -class FileLog : public Log -{ -public: - FileLog (boost::filesystem::path file); - - std::string head_and_tail (int amount = 1024) const; - -private: - void do_log (std::string m); - /** filename to write to */ - boost::filesystem::path _file; -}; - -class NullLog : public Log -{ -public: - std::string head_and_tail (int) const { - return ""; - } - -private: - void do_log (std::string) {} -}; - #endif diff --git a/src/lib/null_log.h b/src/lib/null_log.h new file mode 100644 index 000000000..304c5ec1c --- /dev/null +++ b/src/lib/null_log.h @@ -0,0 +1,31 @@ +/* + Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "log.h" + +class NullLog : public Log +{ +public: + std::string head_and_tail (int) const { + return ""; + } + +private: + void do_log (std::string) {} +}; diff --git a/src/lib/wscript b/src/lib/wscript index 9cd8c47a2..e79f11f77 100644 --- a/src/lib/wscript +++ b/src/lib/wscript @@ -55,6 +55,7 @@ sources = """ examine_content_job.cc exceptions.cc file_group.cc + file_log.cc filter_graph.cc ffmpeg.cc ffmpeg_audio_stream.cc |
