#ifndef BASE_MEMORY_PLATFORM_SHARED_MEMORY_HANDLE_H_
#define BASE_MEMORY_PLATFORM_SHARED_MEMORY_HANDLE_H_
#include "build/build_config.h"
#if BUILDFLAG(IS_APPLE)
#include <mach/mach.h>
#include "base/apple/scoped_mach_port.h"
#elif BUILDFLAG(IS_FUCHSIA)
#include <lib/zx/vmo.h>
#elif BUILDFLAG(IS_WIN)
#include "base/win/scoped_handle.h"
#include "base/win/windows_types.h"
#elif BUILDFLAG(IS_POSIX)
#include <sys/types.h>
#include "base/files/scoped_file.h"
#endif
namespace base::subtle {
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_OHOS)
struct BASE_EXPORT FDPair {
int fd;
int readonly_fd;
friend bool operator==(const FDPair&, const FDPair&) = default;
};
struct BASE_EXPORT ScopedFDPair {
ScopedFDPair();
ScopedFDPair(ScopedFD in_fd, ScopedFD in_readonly_fd);
ScopedFDPair(ScopedFDPair&&);
ScopedFDPair& operator=(ScopedFDPair&&);
~ScopedFDPair();
FDPair get() const;
ScopedFD fd;
ScopedFD readonly_fd;
};
#endif
#if BUILDFLAG(IS_APPLE)
using PlatformSharedMemoryHandle = mach_port_t;
using ScopedPlatformSharedMemoryHandle = apple::ScopedMachSendRight;
#elif BUILDFLAG(IS_FUCHSIA)
using PlatformSharedMemoryHandle = zx::unowned_vmo;
using ScopedPlatformSharedMemoryHandle = zx::vmo;
#elif BUILDFLAG(IS_WIN)
using PlatformSharedMemoryHandle = HANDLE;
using ScopedPlatformSharedMemoryHandle = win::ScopedHandle;
#elif BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_OHOS)
using PlatformSharedMemoryHandle = int;
using ScopedPlatformSharedMemoryHandle = ScopedFD;
#else
using PlatformSharedMemoryHandle = FDPair;
using ScopedPlatformSharedMemoryHandle = ScopedFDPair;
#endif
}
#endif