From 27b03ae38a4bdc995d41500ce8d3f4bb1b23a76b Mon Sep 17 00:00:00 2001 From: Tobias Markus Date: Sat, 28 Feb 2015 12:33:44 +0100 Subject: [PATCH] Possible fix for coverity #29375 --- src/lisp/writer.cpp | 5 +++-- src/physfs/buffered_ofile_stream.cpp | 43 ++++++++++++++++++++++++++++++++++++ src/physfs/buffered_ofile_stream.hpp | 39 ++++++++++++++++++++++++++++++++ src/physfs/ofile_stream.cpp | 6 ++--- src/physfs/ofile_stream.hpp | 4 ++-- 5 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 src/physfs/buffered_ofile_stream.cpp create mode 100644 src/physfs/buffered_ofile_stream.hpp diff --git a/src/lisp/writer.cpp b/src/lisp/writer.cpp index 63c5aa781..66728fb1b 100644 --- a/src/lisp/writer.cpp +++ b/src/lisp/writer.cpp @@ -16,7 +16,7 @@ #include "lisp/writer.hpp" -#include "physfs/ofile_stream.hpp" +#include "physfs/buffered_ofile_stream.hpp" #include "util/log.hpp" namespace lisp { @@ -27,7 +27,8 @@ Writer::Writer(const std::string& filename) : indent_depth(), lists() { - out = new OFileStream(filename); + BufferedOFileStream* filestream = new BufferedOFileStream(filename); + out = filestream->get_stream(); out_owned = true; indent_depth = 0; out->precision(10); diff --git a/src/physfs/buffered_ofile_stream.cpp b/src/physfs/buffered_ofile_stream.cpp new file mode 100644 index 000000000..489ee21b6 --- /dev/null +++ b/src/physfs/buffered_ofile_stream.cpp @@ -0,0 +1,43 @@ +// SuperTux +// Copyright (C) 2015 Tobias Markus +// +// 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 3 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, see . + +#ifndef HEADER_SUPERTUX_PHYSFS_BUFFERED_OFILE_STREAM_CPP +#define HEADER_SUPERTUX_PHYSFS_BUFFERED_OFILE_STREAM_CPP + +#include "physfs/buffered_ofile_stream.hpp" + +BufferedOFileStream::BufferedOFileStream(const std::string& filename) +{ + buffer = new OFileStreambuf(filename); + stream = new OFileStream(buffer); +} + +BufferedOFileStream::~BufferedOFileStream() +{ + delete buffer; + delete stream; + buffer = NULL; + stream = NULL; +} + +OFileStream* BufferedOFileStream::get_stream() +{ + return stream; +} + +#endif + +/* EOF */ diff --git a/src/physfs/buffered_ofile_stream.hpp b/src/physfs/buffered_ofile_stream.hpp new file mode 100644 index 000000000..9b4fea5f8 --- /dev/null +++ b/src/physfs/buffered_ofile_stream.hpp @@ -0,0 +1,39 @@ +// SuperTux +// Copyright (C) 2015 Tobias Markus +// +// 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 3 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, see . + +#ifndef HEADER_SUPERTUX_PHYSFS_BUFFERED_OFILE_STREAM_HPP +#define HEADER_SUPERTUX_PHYSFS_BUFFERED_OFILE_STREAM_HPP + +#include +#include +#include "physfs/ofile_stream.hpp" +#include "physfs/ofile_streambuf.hpp" + +class BufferedOFileStream { + +private: + OFileStream* stream; + OFileStreambuf* buffer; + +public: + BufferedOFileStream(const std::string& filename); + ~BufferedOFileStream(); + + OFileStream* get_stream(); +}; +#endif + +/* EOF */ diff --git a/src/physfs/ofile_stream.cpp b/src/physfs/ofile_stream.cpp index 432bc94fa..1e7987f43 100644 --- a/src/physfs/ofile_stream.cpp +++ b/src/physfs/ofile_stream.cpp @@ -19,10 +19,8 @@ #include "physfs/ofile_stream.hpp" -#include "physfs/ofile_streambuf.hpp" - -OFileStream::OFileStream(const std::string& filename) : - std::ostream(new OFileStreambuf(filename)) +OFileStream::OFileStream(OFileStreambuf* buf) : + std::ostream(buf) { } diff --git a/src/physfs/ofile_stream.hpp b/src/physfs/ofile_stream.hpp index a5e8c88e1..3de65893b 100644 --- a/src/physfs/ofile_stream.hpp +++ b/src/physfs/ofile_stream.hpp @@ -19,14 +19,14 @@ #include #include +#include "physfs/ofile_streambuf.hpp" class OFileStream : public std::ostream { public: - OFileStream(const std::string& filename); + OFileStream(OFileStreambuf* buf); ~OFileStream(); }; - #endif /* EOF */ -- 2.11.0