Skip to content
Snippets Groups Projects
Commit 6693bd90 authored by Jonathan Wakely's avatar Jonathan Wakely
Browse files

libstdc++: Add missing tests for std::basic_filebuf::native_handle()

I forgot to 'git add' these files in the commit that added the new
member function to basic_filebuf.

libstdc++-v3/ChangeLog:

	* testsuite/27_io/basic_filebuf/native_handle/char/1.cc: New test.
	* testsuite/27_io/basic_filebuf/native_handle/wchar_t/1.cc: New test.
parent c4baeaec
No related branches found
No related tags found
No related merge requests found
// { 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();
}
// { 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();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment