From e7e9347cdd1f43e0dd3d1ca35632e9493a010fc6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 26 Aug 2015 19:45:37 +0100 Subject: [PATCH] Split log.{cc,h}. --- src/lib/file_log.cc | 89 ++++++++++++++++++++++++++ src/lib/file_log.h | 33 ++++++++++ src/lib/film.cc | 3 +- src/lib/log.cc | 63 ------------------ src/lib/log.h | 24 ------- src/lib/null_log.h | 31 +++++++++ src/lib/wscript | 1 + src/tools/dcpomatic_server_cli.cc | 31 ++++----- src/tools/server_test.cc | 2 +- test/client_server_test.cc | 3 +- test/ffmpeg_decoder_seek_test.cc | 9 ++- test/ffmpeg_decoder_sequential_test.cc | 7 +- test/file_log_test.cc | 2 +- 13 files changed, 182 insertions(+), 116 deletions(-) create mode 100644 src/lib/file_log.cc create mode 100644 src/lib/file_log.h create mode 100644 src/lib/null_log.h 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 + + 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 + +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 + + 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 + + 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 diff --git a/src/tools/dcpomatic_server_cli.cc b/src/tools/dcpomatic_server_cli.cc index 237673179..81c553ef7 100644 --- a/src/tools/dcpomatic_server_cli.cc +++ b/src/tools/dcpomatic_server_cli.cc @@ -17,28 +17,29 @@ */ -#include "lib/server.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "lib/config.h" #include "lib/dcp_video.h" #include "lib/exceptions.h" #include "lib/util.h" #include "lib/config.h" #include "lib/image.h" -#include "lib/log.h" +#include "lib/file_log.h" +#include "lib/null_log.h" #include "lib/version.h" +#include "lib/server.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include using std::cerr; using std::string; diff --git a/src/tools/server_test.cc b/src/tools/server_test.cc index 201761ed5..9e9a01694 100644 --- a/src/tools/server_test.cc +++ b/src/tools/server_test.cc @@ -25,7 +25,7 @@ #include "lib/dcp_video.h" #include "lib/decoder.h" #include "lib/exceptions.h" -#include "lib/log.h" +#include "lib/file_log.h" #include "lib/video_decoder.h" #include "lib/player.h" #include "lib/player_video.h" diff --git a/test/client_server_test.cc b/test/client_server_test.cc index 89a8e82cc..22c0f7ea8 100644 --- a/test/client_server_test.cc +++ b/test/client_server_test.cc @@ -33,7 +33,7 @@ #include "lib/raw_image_proxy.h" #include "lib/data.h" #include "lib/server_description.h" -#include "lib/log.h" +#include "lib/file_log.h" #include #include @@ -216,4 +216,3 @@ BOOST_AUTO_TEST_CASE (client_server_test_yuv) delete server; } - diff --git a/test/ffmpeg_decoder_seek_test.cc b/test/ffmpeg_decoder_seek_test.cc index c81b7389c..39536f1ab 100644 --- a/test/ffmpeg_decoder_seek_test.cc +++ b/test/ffmpeg_decoder_seek_test.cc @@ -25,14 +25,14 @@ * it probably should. */ -#include -#include -#include #include "lib/ffmpeg_content.h" #include "lib/ffmpeg_decoder.h" -#include "lib/log.h" +#include "lib/null_log.h" #include "lib/film.h" #include "test.h" +#include +#include +#include using std::cerr; using std::vector; @@ -91,4 +91,3 @@ BOOST_AUTO_TEST_CASE (ffmpeg_decoder_seek_test) test ("prophet_clip.mkv", frames); } - diff --git a/test/ffmpeg_decoder_sequential_test.cc b/test/ffmpeg_decoder_sequential_test.cc index 601dd1c59..ce799bb24 100644 --- a/test/ffmpeg_decoder_sequential_test.cc +++ b/test/ffmpeg_decoder_sequential_test.cc @@ -22,13 +22,13 @@ * (dropped frames being checked by assert() in VideoDecoder). Also that the decoder picks up frame rates correctly. */ -#include -#include #include "lib/ffmpeg_content.h" #include "lib/ffmpeg_decoder.h" -#include "lib/log.h" +#include "lib/null_log.h" #include "lib/film.h" #include "test.h" +#include +#include using std::cout; using std::cerr; @@ -78,4 +78,3 @@ BOOST_AUTO_TEST_CASE (ffmpeg_decoder_sequential_test) */ test ("prophet_clip.mkv", 23.976, 12); } - diff --git a/test/file_log_test.cc b/test/file_log_test.cc index a587b87ef..29205e400 100644 --- a/test/file_log_test.cc +++ b/test/file_log_test.cc @@ -17,8 +17,8 @@ */ +#include "lib/file_log.h" #include -#include "lib/log.h" using std::cout; -- 2.30.2