From 8d7f1dadeeb1dc1609b72de5a4ee3a5247b0e9e6 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Fri, 27 Jun 2014 18:39:06 -0700 Subject: Shut up already --- src/tests/fdhack.hpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/tests/fdhack.hpp (limited to 'src/tests/fdhack.hpp') diff --git a/src/tests/fdhack.hpp b/src/tests/fdhack.hpp new file mode 100644 index 0000000..4b9fafe --- /dev/null +++ b/src/tests/fdhack.hpp @@ -0,0 +1,61 @@ +#ifndef TMWA_TESTS_FDHACK_HPP +#define TMWA_TESTS_FDHACK_HPP +// fdhack.hpp - Move file descriptors around. +// +// Copyright © 2014 Ben Longbons +// +// This file is part of The Mana World (Athena server) +// +// 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 . + +# include "fwd.hpp" + +# include +# include + +# include + +# include "../strings/literal.hpp" +# include "../strings/zstring.hpp" + +# include "../io/fd.hpp" + +namespace tmwa +{ +class ReplaceFd +{ + io::FD number, backup; +public: + ReplaceFd(io::FD num, io::FD handle, bool owned) + : number(handle.dup2(num)), backup(num.dup()) + { + if (owned) + handle.close(); + } + ~ReplaceFd() + { + backup.dup2(number); + backup.close(); + } +}; +class QuietFd : ReplaceFd +{ +public: + QuietFd(io::FD num=io::FD::stderr()) + : ReplaceFd(num, io::FD::open("/dev/null"_s, O_RDONLY), true) + {} +}; +} // namespace tmwa + +#endif // TMWA_TESTS_FDHACK_HPP -- cgit v1.2.3-60-g2f50