/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// This class converts a set of file descriptor mapping, which may // contain conflicts (like {a->b, b->c} or {a->b, b->a}) into a // sequence of dup2() operations that can be performed between fork // and exec, or with posix_spawn_file_actions_adddup2. It may create // temporary duplicates of fds to use as the source of a dup2; they // are closed on destruction. // // The dup2 sequence is guaranteed to not contain dup2(x, x) for any // x; if such an element is present in the input, it will be dup2()ed // from a temporary fd to ensure that the close-on-exec bit is cleared. // // In general, this is *not* guaranteed to minimize the use of // temporary fds.
namespace mozilla { namespace ipc {
class FileDescriptorShuffle { public:
FileDescriptorShuffle() = default;
~FileDescriptorShuffle();
using MappingRef = mozilla::Span<const std::pair<int, int>>;
// Translate the given mapping, creating temporary fds as needed. // Can fail (return false) on failure to duplicate fds. bool Init(MappingRef aMapping);
// Accessor for the dup2() sequence. Do not use the returned value // or the fds contained in it after this object is destroyed.
MappingRef Dup2Sequence() const { return mMapping; }
// Tests whether the given fd is used as a destination in this mapping. // Can be used to close other fds after performing the dup2()s. bool MapsTo(int aFd) const;
// Forget the information, so that it's destructor will not try to // delete FDs duped by itself. void Forget() { mTempFds.Clear(); }
private:
nsTArray<std::pair<int, int>> mMapping;
nsTArray<int> mTempFds; int mMaxDst;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.