Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/ipc/glue/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  FileDescriptorShuffle.h   Sprache: C

 
/* -*- 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/. */


#ifndef mozilla_ipc_FileDescriptorShuffle_h
#define mozilla_ipc_FileDescriptorShuffle_h

#include "mozilla/Span.h"
#include "nsTArray.h"

#include <functional>
#include <utility>

// 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<intint>>;

  // 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<intint>> mMapping;
  nsTArray<int> mTempFds;
  int mMaxDst;

  FileDescriptorShuffle(const FileDescriptorShuffle&) = delete;
  void operator=(const FileDescriptorShuffle&) = delete;
};

}  // namespace ipc
}  // namespace mozilla

#endif  // mozilla_ipc_FileDescriptorShuffle_h

Messung V0.5
C=91 H=97 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.