Chromium Code Reviews| Index: base/file_descriptor_store.h |
| diff --git a/base/file_descriptor_store.h b/base/file_descriptor_store.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..698448e57e1e050e2e4875049198467cd1f1e0b9 |
| --- /dev/null |
| +++ b/base/file_descriptor_store.h |
| @@ -0,0 +1,73 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef BASE_FILE_DESCRIPTOR_STORE_H_ |
| +#define BASE_FILE_DESCRIPTOR_STORE_H_ |
| + |
| +#include <map> |
| +#include <string> |
| + |
| +#include "base/files/memory_mapped_file.h" |
| +#include "base/files/scoped_file.h" |
| +#include "base/macros.h" |
| + |
| +namespace base { |
| + |
| +// The file descriptor store is used to associate file descriptors with keys |
| +// that must be unique. |
| +// It is used to share file descriptors from a process to its child. |
| +class BASE_EXPORT FileDescriptorStore { |
| + public: |
| + struct Descriptor { |
| + Descriptor(const std::string& key, base::ScopedFD fd); |
| + Descriptor(const std::string& key, |
| + base::ScopedFD fd, |
| + base::MemoryMappedFile::Region region); |
| + Descriptor(Descriptor&& other); |
| + ~Descriptor(); |
| + |
| + Descriptor& operator=(Descriptor&& other) = default; |
| + |
| + // Globally unique key. |
| + std::string key; |
| + // Actual FD. |
| + base::ScopedFD fd; |
| + // Optional region, defaults to kWholeFile. |
| + base::MemoryMappedFile::Region region; |
| + }; |
| + using Mapping = std::map<std::string, Descriptor>; |
| + |
| + // Returns the singleton instance of FileDescriptorStore. |
| + static FileDescriptorStore& GetInstance(); |
| + |
| + // Gets a descriptor given a key and also populates |region| if non null. |
|
dcheng
2017/02/15 08:05:27
Nit: remove optional-ness of |region|
Jay Civelli
2017/02/15 19:53:47
Done.
|
| + // It is a fatal error if the key is not known. |
| + base::ScopedFD TakeFD(const std::string& key, |
| + base::MemoryMappedFile::Region* region); |
| + |
| + // Gets a descriptor given a key. Returns an empty ScopedFD on error. |
| + base::ScopedFD MaybeTakeFD(const std::string& key, |
| + base::MemoryMappedFile::Region* region); |
| + |
| + // Sets the descriptor for the given |key|. This sets the region associated |
| + // with |key| to kWholeFile. |
| + void Set(const std::string& key, base::ScopedFD fd); |
| + |
| + // Sets the descriptor and |region| for the given |key|. |
| + void Set(const std::string& key, |
| + base::ScopedFD fd, |
| + base::MemoryMappedFile::Region region); |
| + |
| + private: |
| + FileDescriptorStore(); |
| + ~FileDescriptorStore(); |
| + |
| + Mapping descriptors_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(FileDescriptorStore); |
| +}; |
| + |
| +} // namespace base |
| + |
| +#endif // BASE_FILE_DESCRIPTOR_STORE_H_ |