1*92e24317SHristo Hristov //===----------------------------------------------------------------------===// 2*92e24317SHristo Hristov // 3*92e24317SHristo Hristov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*92e24317SHristo Hristov // See https://llvm.org/LICENSE.txt for license information. 5*92e24317SHristo Hristov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*92e24317SHristo Hristov // 7*92e24317SHristo Hristov //===----------------------------------------------------------------------===// 8*92e24317SHristo Hristov 9*92e24317SHristo Hristov #include <__config> 10*92e24317SHristo Hristov #include <cstdio> 11*92e24317SHristo Hristov #include <fstream> 12*92e24317SHristo Hristov 13*92e24317SHristo Hristov #if defined(_LIBCPP_WIN32API) 14*92e24317SHristo Hristov # define WIN32_LEAN_AND_MEAN 15*92e24317SHristo Hristov # define NOMINMAX 16*92e24317SHristo Hristov # include <io.h> 17*92e24317SHristo Hristov # include <windows.h> 18*92e24317SHristo Hristov #endif 19*92e24317SHristo Hristov 20*92e24317SHristo Hristov _LIBCPP_BEGIN_NAMESPACE_STD 21*92e24317SHristo Hristov 22*92e24317SHristo Hristov #if defined(_LIBCPP_WIN32API) 23*92e24317SHristo Hristov 24*92e24317SHristo Hristov // Confirm that `HANDLE` is `void*` as implemented in `basic_filebuf` 25*92e24317SHristo Hristov static_assert(std::same_as<HANDLE, void*>); 26*92e24317SHristo Hristov __filebuf_windows_native_handle(FILE * __file)27*92e24317SHristo Hristov_LIBCPP_EXPORTED_FROM_ABI void* __filebuf_windows_native_handle(FILE* __file) noexcept { 28*92e24317SHristo Hristov // https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle?view=msvc-170 29*92e24317SHristo Hristov intptr_t __handle = _get_osfhandle(fileno(__file)); 30*92e24317SHristo Hristov if (__handle == -1) 31*92e24317SHristo Hristov return nullptr; 32*92e24317SHristo Hristov return reinterpret_cast<void*>(__handle); 33*92e24317SHristo Hristov } 34*92e24317SHristo Hristov 35*92e24317SHristo Hristov #endif 36*92e24317SHristo Hristov 37*92e24317SHristo Hristov _LIBCPP_END_NAMESPACE_STD 38