| Index: base/memory/shared_memory_handle.h
|
| diff --git a/base/memory/shared_memory_handle.h b/base/memory/shared_memory_handle.h
|
| index dc33eeafa11faef22f73be0d44dd30447e43118b..3834d868128c6f3cfdd24f6153d832975d2be1ef 100644
|
| --- a/base/memory/shared_memory_handle.h
|
| +++ b/base/memory/shared_memory_handle.h
|
| @@ -152,6 +152,8 @@ class BASE_EXPORT SharedMemoryHandle {
|
| void SetOwnershipPassesToIPC(bool ownership_passes);
|
| bool OwnershipPassesToIPC() const;
|
|
|
| + bool GetUniqueID(SharedMemoryHandleID* id) const;
|
| +
|
| private:
|
| friend class SharedMemory;
|
|
|
| @@ -186,6 +188,43 @@ class BASE_EXPORT SharedMemoryHandle {
|
| };
|
| #endif
|
|
|
| +#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS))
|
| +struct SharedMemoryHandleID {
|
| + dev_t device_id;
|
| + ino_t file_id;
|
| +};
|
| +#elif defined(OS_MACOSX)
|
| +struct SharedMemoryHandleID {
|
| + // TODO: On macOS, this might be mach_port_t.
|
| + dev_t device_id;
|
| + ino_t file_id;
|
| +};
|
| +#elif defined(OS_WIN)
|
| +struct SharedMemoryHandleID {
|
| + DWORD device_id; // BY_HANDLE_FILE_INFORMATION.dwVolumeSerialNumber
|
| + intt64_t file_id; // BY_HANDLE_FILE_INFORMATION.nFileIndexHigh and Low
|
| +};
|
| +#endif
|
| +
|
| +bool GetIDFromSharedMemoryHandle(const SharedMemoryHandle& handle,
|
| + SharedMemoryHandleID* id);
|
| +
|
| +std::string GetSharedMemoryHandleIDString(const SharedMemoryHandleID& id);
|
| +
|
| +struct SharedMemoryHandleIDHash {
|
| + std::size_t operator()(const SharedMemoryHandleID& id) const {
|
| + return std::hash<int64_t>()(static_cast<int64_t>(id.device_id)) ^
|
| + std::hash<int64_t>()(static_cast<int64_t>(id.file_id));
|
| + }
|
| +};
|
| +
|
| +struct SharedMemoryHandleIDEqual {
|
| + bool operator()(const SharedMemoryHandleID& lhs,
|
| + const SharedMemoryHandleID& rhs) const {
|
| + return lhs.device_id == rhs.device_id && lhs.file_id == rhs.file_id;
|
| + }
|
| +};
|
| +
|
| } // namespace base
|
|
|
| #endif // BASE_MEMORY_SHARED_MEMORY_HANDLE_H_
|
|
|