// Copyright 2013 The Flutter 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 FLUTTER_FML_UNIQUE_FD_H_ #define FLUTTER_FML_UNIQUE_FD_H_ #include "flutter/fml/build_config.h" #include "flutter/fml/unique_object.h" #if OS_WIN #include #else // OS_WIN #include #include #endif // OS_WIN namespace fml { namespace internal { #if OS_WIN namespace os_win { struct UniqueFDTraits { static HANDLE InvalidValue() { return INVALID_HANDLE_VALUE; } static bool IsValid(HANDLE value) { return value != InvalidValue(); } static void Free(HANDLE fd); }; } // namespace os_win #else // OS_WIN namespace os_unix { struct UniqueFDTraits { static int InvalidValue() { return -1; } static bool IsValid(int value) { return value >= 0; } static void Free(int fd); }; struct UniqueDirTraits { static DIR* InvalidValue() { return nullptr; } static bool IsValid(DIR* value) { return value != nullptr; } static void Free(DIR* dir); }; } // namespace os_unix #endif // OS_WIN } // namespace internal #if OS_WIN using UniqueFD = UniqueObject; #else // OS_WIN using UniqueFD = UniqueObject; using UniqueDir = UniqueObject; #endif // OS_WIN } // namespace fml #endif // FLUTTER_FML_UNIQUE_FD_H_