mirror of
https://github.com/fmtlib/fmt.git
synced 2024-09-03 21:49:01 +00:00
Remove deprecated APIs
This commit is contained in:
parent
edeb3d8091
commit
ce246aaf74
@ -3318,13 +3318,6 @@ constexpr auto operator"" _a(const char* s, size_t) -> detail::udl_arg<char> {
|
||||
return {s};
|
||||
}
|
||||
# endif
|
||||
|
||||
// DEPRECATED!
|
||||
// User-defined literal equivalent of fmt::format.
|
||||
FMT_DEPRECATED constexpr auto operator"" _format(const char* s, size_t n)
|
||||
-> detail::udl_formatter<char> {
|
||||
return {{s, n}};
|
||||
}
|
||||
} // namespace literals
|
||||
#endif // FMT_USE_USER_DEFINED_LITERALS
|
||||
|
||||
|
@ -260,10 +260,7 @@ class buffered_file {
|
||||
// Returns the pointer to a FILE object representing this file.
|
||||
FILE* get() const noexcept { return file_; }
|
||||
|
||||
// We place parentheses around fileno to workaround a bug in some versions
|
||||
// of MinGW that define fileno as a macro.
|
||||
// DEPRECATED! Rename to descriptor to avoid issues with macros.
|
||||
FMT_API int(fileno)() const;
|
||||
FMT_API int descriptor() const;
|
||||
|
||||
void vprint(string_view format_str, format_args args) {
|
||||
fmt::vprint(file_, format_str, args);
|
||||
|
11
src/os.cc
11
src/os.cc
@ -51,10 +51,6 @@
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef fileno
|
||||
# undef fileno
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
#ifdef _WIN32
|
||||
// Return type of read and write functions.
|
||||
@ -206,11 +202,8 @@ void buffered_file::close() {
|
||||
if (result != 0) FMT_THROW(system_error(errno, "cannot close file"));
|
||||
}
|
||||
|
||||
// A macro used to prevent expansion of fileno on broken versions of MinGW.
|
||||
#define FMT_ARGS
|
||||
|
||||
int buffered_file::fileno() const {
|
||||
int fd = FMT_POSIX_CALL(fileno FMT_ARGS(file_));
|
||||
int buffered_file::descriptor() const {
|
||||
int fd = FMT_POSIX_CALL(fileno(file_));
|
||||
if (fd == -1) FMT_THROW(system_error(errno, "cannot get file descriptor"));
|
||||
return fd;
|
||||
}
|
||||
|
@ -1875,38 +1875,8 @@ TEST(format_test, custom_format_compile_time_string) {
|
||||
}
|
||||
|
||||
#if FMT_USE_USER_DEFINED_LITERALS
|
||||
// Passing user-defined literals directly to EXPECT_EQ causes problems
|
||||
// with macro argument stringification (#) on some versions of GCC.
|
||||
// Workaround: Assing the UDL result to a variable before the macro.
|
||||
|
||||
using namespace fmt::literals;
|
||||
|
||||
# if FMT_GCC_VERSION
|
||||
# define FMT_CHECK_DEPRECATED_UDL_FORMAT 1
|
||||
# elif FMT_CLANG_VERSION && defined(__has_warning)
|
||||
# if __has_warning("-Wdeprecated-declarations")
|
||||
# define FMT_CHECK_DEPRECATED_UDL_FORMAT 1
|
||||
# endif
|
||||
# endif
|
||||
# ifndef FMT_CHECK_DEPRECATED_UDL_FORMAT
|
||||
# define FMT_CHECK_DEPRECATED_UDL_FORMAT 0
|
||||
# endif
|
||||
|
||||
# if FMT_CHECK_DEPRECATED_UDL_FORMAT
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
|
||||
TEST(format_test, format_udl) {
|
||||
EXPECT_EQ("{}c{}"_format("ab", 1), fmt::format("{}c{}", "ab", 1));
|
||||
EXPECT_EQ("foo"_format(), "foo");
|
||||
EXPECT_EQ("{0:10}"_format(42), " 42");
|
||||
EXPECT_EQ("{}"_format(date(2015, 10, 21)), "2015-10-21");
|
||||
}
|
||||
|
||||
# pragma GCC diagnostic pop
|
||||
# endif
|
||||
|
||||
TEST(format_test, named_arg_udl) {
|
||||
using namespace fmt::literals;
|
||||
auto udl_a = fmt::format("{first}{second}{first}{third}", "first"_a = "abra",
|
||||
"second"_a = "cad", "third"_a = 99);
|
||||
EXPECT_EQ(
|
||||
@ -2209,6 +2179,7 @@ TEST(format_test, format_string_errors) {
|
||||
fmt::print("warning: constexpr is broken in this version of MSVC\n");
|
||||
# endif
|
||||
# if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS
|
||||
using namespace fmt::literals;
|
||||
EXPECT_ERROR("{foo}", "named argument is not found", decltype("bar"_a = 42));
|
||||
EXPECT_ERROR("{foo}", "named argument is not found",
|
||||
decltype(fmt::arg("foo", 42)));
|
||||
|
@ -347,7 +347,7 @@ TEST(output_redirect_test, flush_error_in_ctor) {
|
||||
|
||||
TEST(output_redirect_test, dup_error_in_ctor) {
|
||||
buffered_file f = open_buffered_file();
|
||||
int fd = (f.fileno)();
|
||||
int fd = (f.descriptor)();
|
||||
file copy = file::dup(fd);
|
||||
FMT_POSIX(close(fd));
|
||||
std::unique_ptr<output_redirect> redir{nullptr};
|
||||
|
@ -14,10 +14,6 @@
|
||||
#include "gtest-extra.h"
|
||||
#include "util.h"
|
||||
|
||||
#ifdef fileno
|
||||
# undef fileno
|
||||
#endif
|
||||
|
||||
using fmt::buffered_file;
|
||||
using testing::HasSubstr;
|
||||
using wstring_view = fmt::basic_string_view<wchar_t>;
|
||||
@ -205,7 +201,7 @@ TEST(buffered_file_test, move_assignment) {
|
||||
TEST(buffered_file_test, move_assignment_closes_file) {
|
||||
buffered_file bf = open_buffered_file();
|
||||
buffered_file bf2 = open_buffered_file();
|
||||
int old_fd = bf2.fileno();
|
||||
int old_fd = bf2.descriptor();
|
||||
bf2 = std::move(bf);
|
||||
EXPECT_TRUE(isclosed(old_fd));
|
||||
}
|
||||
@ -225,7 +221,7 @@ TEST(buffered_file_test, move_from_temporary_in_assignment) {
|
||||
|
||||
TEST(buffered_file_test, move_from_temporary_in_assignment_closes_file) {
|
||||
buffered_file f = open_buffered_file();
|
||||
int old_fd = f.fileno();
|
||||
int old_fd = f.descriptor();
|
||||
f = open_buffered_file();
|
||||
EXPECT_TRUE(isclosed(old_fd));
|
||||
}
|
||||
@ -234,7 +230,7 @@ TEST(buffered_file_test, close_file_in_dtor) {
|
||||
int fd = 0;
|
||||
{
|
||||
buffered_file f = open_buffered_file();
|
||||
fd = f.fileno();
|
||||
fd = f.descriptor();
|
||||
}
|
||||
EXPECT_TRUE(isclosed(fd));
|
||||
}
|
||||
@ -249,7 +245,7 @@ TEST(buffered_file_test, close_error_in_dtor) {
|
||||
// otherwise the system may recycle closed file descriptor when
|
||||
// redirecting the output in EXPECT_STDERR and the second close
|
||||
// will break output redirection.
|
||||
FMT_POSIX(close(f->fileno()));
|
||||
FMT_POSIX(close(f->descriptor()));
|
||||
SUPPRESS_ASSERT(f.reset(nullptr));
|
||||
},
|
||||
system_error_message(EBADF, "cannot close file") + "\n");
|
||||
@ -257,7 +253,7 @@ TEST(buffered_file_test, close_error_in_dtor) {
|
||||
|
||||
TEST(buffered_file_test, close) {
|
||||
buffered_file f = open_buffered_file();
|
||||
int fd = f.fileno();
|
||||
int fd = f.descriptor();
|
||||
f.close();
|
||||
EXPECT_TRUE(f.get() == nullptr);
|
||||
EXPECT_TRUE(isclosed(fd));
|
||||
@ -265,15 +261,15 @@ TEST(buffered_file_test, close) {
|
||||
|
||||
TEST(buffered_file_test, close_error) {
|
||||
buffered_file f = open_buffered_file();
|
||||
FMT_POSIX(close(f.fileno()));
|
||||
FMT_POSIX(close(f.descriptor()));
|
||||
EXPECT_SYSTEM_ERROR_NOASSERT(f.close(), EBADF, "cannot close file");
|
||||
EXPECT_TRUE(f.get() == nullptr);
|
||||
}
|
||||
|
||||
TEST(buffered_file_test, fileno) {
|
||||
TEST(buffered_file_test, descriptor) {
|
||||
auto f = open_buffered_file();
|
||||
EXPECT_TRUE(f.fileno() != -1);
|
||||
file copy = file::dup(f.fileno());
|
||||
EXPECT_TRUE(f.descriptor() != -1);
|
||||
file copy = file::dup(f.descriptor());
|
||||
EXPECT_READ(copy, file_content);
|
||||
}
|
||||
|
||||
|
@ -438,7 +438,7 @@ TEST(buffered_file_test, fileno_no_retry) {
|
||||
file::pipe(read_end, write_end);
|
||||
buffered_file f = read_end.fdopen("r");
|
||||
fileno_count = 1;
|
||||
EXPECT_SYSTEM_ERROR((f.fileno)(), EINTR, "cannot get file descriptor");
|
||||
EXPECT_SYSTEM_ERROR((f.descriptor)(), EINTR, "cannot get file descriptor");
|
||||
EXPECT_EQ(2, fileno_count);
|
||||
fileno_count = 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user