diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc new file mode 100644 index 0000000000000000000000000000000000000000..749451a4c816b894e0bed1cfeef080e3b1fd9f68 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/char/1.cc @@ -0,0 +1,61 @@ +// { dg-options "-fno-inline" } +// { dg-do run { target c++26 } } +// { dg-additional-files "filebuf_members-1.txt" } + +#include <fstream> + +#ifndef __cpp_lib_fstream_native_handle +# error "Feature-test macro for fstream_native_handle missing in <fstream>" +#elif __cpp_lib_fstream_native_handle != 202306L +# error "Feature-test macro for fstream_native_handle has wrong value in <fstream>" +#endif + +using type = std::basic_filebuf<char>::native_handle_type; + +#include <cstdio> // std::fclose(FILE*) +#if __has_include(<unistd.h>) +# include <unistd.h> // close(int) +#endif +#if __has_include(<handleapi.h>) +# include <handleapi.h> // CloseHandle(HANDLE) +#endif + +#include <testsuite_hooks.h> + +void +test01() +{ + std::filebuf f; + f.open("filebuf_members-1.txt", std::ios::in); + type handle = f.native_handle(); + + auto native_close = []<typename HandleT>(HandleT handle) { + if constexpr (std::is_same_v<HandleT, std::FILE*>) + std::fclose(handle); // --enable-cstdio=stdio_pure +#if __has_include(<unistd.h>) + else if constexpr (std::is_same_v<HandleT, int>) + ::close(handle); // POSIX +#endif +#if __has_include(<handleapi.h>) + else if constexpr (std::is_same_v<HandleT, void*>) + ::CloseHandle(handle); // Windows +#endif + else + VERIFY( false ); + }; + native_close(handle); + + try + { + f.sgetc(); + VERIFY( false ); + } + catch (const std::ios::failure&) + { + } +} + +int main() +{ + test01(); +} diff --git a/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc new file mode 100644 index 0000000000000000000000000000000000000000..7ee5e4e8f538c564c833ed032b2ebe6d7c1b5e48 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc @@ -0,0 +1,55 @@ +// { dg-options "-fno-inline" } +// { dg-do run { target c++26 } } +// { dg-additional-files "filebuf_members-1.txt" } + +#include <fstream> + +using type = std::basic_filebuf<wchar_t>::native_handle_type; + +#include <cstdio> // std::fclose(FILE*) +#if __has_include(<unistd.h>) +# include <unistd.h> // close(int) +#endif +#if __has_include(<handleapi.h>) +# include <handleapi.h> // CloseHandle(HANDLE) +#endif + +#include <testsuite_hooks.h> + +void +test01() +{ + std::wfilebuf f; + f.open("filebuf_members-1.txt", std::wios::in); + type handle = f.native_handle(); + + auto native_close = []<typename HandleT>(HandleT handle) { + if constexpr (std::is_same_v<HandleT, std::FILE*>) + std::fclose(handle); // --enable-cstdio=stdio_pure +#if __has_include(<unistd.h>) + else if constexpr (std::is_same_v<HandleT, int>) + ::close(handle); // POSIX +#endif +#if __has_include(<handleapi.h>) + else if constexpr (std::is_same_v<HandleT, void*>) + ::CloseHandle(handle); // Windows +#endif + else + VERIFY( false ); + }; + native_close(handle); + + try + { + f.sgetc(); + VERIFY( false ); + } + catch (const std::ios::failure&) + { + } +} + +int main() +{ + test01(); +}