| Index: base/files/scoped_platform_handle.h
|
| diff --git a/base/files/scoped_platform_handle.h b/base/files/scoped_platform_handle.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cfff5a7146bfba770efaa380abdabf3313f730d3
|
| --- /dev/null
|
| +++ b/base/files/scoped_platform_handle.h
|
| @@ -0,0 +1,75 @@
|
| +// 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_FILES_SCOPED_PLATFORM_HANDLE_H_
|
| +#define BASE_FILES_SCOPED_PLATFORM_HANDLE_H_
|
| +
|
| +#include <stddef.h>
|
| +#include <stdint.h>
|
| +
|
| +#include "base/base_export.h"
|
| +#include "build/build_config.h"
|
| +
|
| +#if defined(OS_WIN)
|
| +#include <windows.h>
|
| +
|
| +#include "base/win/scoped_handle.h"
|
| +#elif defined(OS_POSIX)
|
| +#include "base/files/scoped_file.h"
|
| +#endif
|
| +
|
| +namespace base {
|
| +
|
| +// A ScopedPlatformHandle encapsulates ownership of either a Windows handle or
|
| +// a POSIX file descriptor, while presenting a common interface for the sake
|
| +// of simple, consistent, and safe ownership semantics. Platform-specific usage
|
| +// details are thus relegated to code which either acquires or uses the
|
| +// underlying platform resource.
|
| +class BASE_EXPORT ScopedPlatformHandle {
|
| + public:
|
| +#if defined(OS_WIN)
|
| + using HandleType = HANDLE;
|
| + using ScopedHandleType = win::ScopedHandle;
|
| +#elif defined(OS_POSIX)
|
| + using HandleType = int;
|
| + using ScopedHandleType = ScopedFD;
|
| +#endif
|
| +
|
| + // Constructors for an invalid ScopedPlatformHandle.
|
| + ScopedPlatformHandle();
|
| + ScopedPlatformHandle(std::nullptr_t);
|
| +
|
| + ScopedPlatformHandle(ScopedPlatformHandle&& other);
|
| +
|
| + // These constructors always take ownership of the given handle.
|
| + explicit ScopedPlatformHandle(HandleType handle);
|
| + explicit ScopedPlatformHandle(ScopedHandleType handle);
|
| +
|
| + ~ScopedPlatformHandle();
|
| +
|
| + ScopedPlatformHandle& operator=(ScopedPlatformHandle&& other);
|
| +
|
| + // Indicates whether this ScopedPlatformHandle is holding a valid handle.
|
| + bool is_valid() const;
|
| +
|
| + // Closes the handle.
|
| + void reset();
|
| +
|
| + // Returns the platform-specific handle value.
|
| + HandleType get() const;
|
| +
|
| + // Returns the platform-specific handle value, releasing ownership of the
|
| + // handle.
|
| + HandleType release();
|
| +
|
| + // Transfers ownership of the handle to a platform-specific scoper.
|
| + ScopedHandleType Take();
|
| +
|
| + private:
|
| + ScopedHandleType handle_;
|
| +};
|
| +
|
| +} // namespace base
|
| +
|
| +#endif // BASE_FILES_SCOPED_PLATFORM_HANDLE_H_
|
|
|