X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffile_log.cc;h=5265e2a9dddfd8704e5f4e649809a4f1c3b6a051;hb=678dd30fea0434c6febe4badc47e7aa05ebe58bc;hp=599211d10aaefdcc952e2189683bf605411840ba;hpb=e7e9347cdd1f43e0dd3d1ca35632e9493a010fc6;p=dcpomatic.git diff --git a/src/lib/file_log.cc b/src/lib/file_log.cc index 599211d10..5265e2a9d 100644 --- a/src/lib/file_log.cc +++ b/src/lib/file_log.cc @@ -1,50 +1,68 @@ /* - Copyright (C) 2012 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic 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, + DCP-o-matic 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. + along with DCP-o-matic. If not, see . */ + #include "file_log.h" #include "cross.h" +#include "config.h" +#include +#include #include +#include +#include + using std::cout; using std::string; using std::max; +using std::shared_ptr; + /** @param file Filename to write log to */ FileLog::FileLog (boost::filesystem::path file) : _file (file) { + set_types (Config::instance()->log_types()); +} + +FileLog::FileLog (boost::filesystem::path file, int types) + : _file (file) +{ + set_types (types); } + void -FileLog::do_log (string m) +FileLog::do_log (shared_ptr entry) { - FILE* f = fopen_boost (_file, "a"); + dcp::File f(_file, "a"); if (!f) { - cout << "(could not log to " << _file.string() << "): " << m << "\n"; + cout << "(could not log to " << _file.string() << " error " << errno << "): " << entry->get() << "\n"; return; } - fprintf (f, "%s\n", m.c_str ()); - fclose (f); + fprintf(f.get(), "%s\n", entry->get().c_str()); } + string FileLog::head_and_tail (int amount) const { @@ -52,38 +70,39 @@ FileLog::head_and_tail (int amount) const uintmax_t head_amount = amount; uintmax_t tail_amount = amount; - uintmax_t size = boost::filesystem::file_size (_file); + boost::system::error_code ec; + uintmax_t size = dcp::filesystem::file_size(_file, ec); + if (size == static_cast(-1)) { + return ""; + } if (size < (head_amount + tail_amount)) { head_amount = size; tail_amount = 0; } - FILE* f = fopen_boost (_file, "r"); + dcp::File f(_file, "r"); if (!f) { return ""; } string out; - char* buffer = new char[max(head_amount, tail_amount) + 1]; + std::vector buffer(max(head_amount, tail_amount) + 1); - int N = fread (buffer, 1, head_amount, f); + int N = f.read(buffer.data(), 1, head_amount); buffer[N] = '\0'; - out += string (buffer); + out += string (buffer.data()); if (tail_amount > 0) { out += "\n .\n .\n .\n"; - fseek (f, - tail_amount - 1, SEEK_END); + f.seek(- tail_amount - 1, SEEK_END); - N = fread (buffer, 1, tail_amount, f); + N = f.read(buffer.data(), 1, tail_amount); buffer[N] = '\0'; - out += string (buffer) + "\n"; + out += string(buffer.data()) + "\n"; } - delete[] buffer; - fclose (f); - return out; }