diff --git a/src/libipc/imp/fmt.cpp b/src/libipc/imp/fmt.cpp index 0c92f37..20e2ed5 100644 --- a/src/libipc/imp/fmt.cpp +++ b/src/libipc/imp/fmt.cpp @@ -199,6 +199,7 @@ void fmt_context::expend(std::size_t sz) noexcept { bool fmt_context::append(span const &str) noexcept { auto sz = str.size(); + if (sz == 0) return true; if (str.back() == '\0') --sz; auto sbuf = buffer(sz); if (sbuf.size() < sz) { diff --git a/src/libipc/memory/resource.h b/src/libipc/memory/resource.h index 5eea278..9a9f59e 100755 --- a/src/libipc/memory/resource.h +++ b/src/libipc/memory/resource.h @@ -46,9 +46,9 @@ inline std::string make_string(char const *str) { } /// \brief Combine prefix from a list of strings. -template -inline std::string make_prefix(std::string prefix, A &&...args) { - return ipc::fmt(prefix, "__IPC_SHM__", std::forward(args)...); +template +inline std::string make_prefix(A1 &&prefix, A &&...args) { + return ipc::fmt(std::forward(prefix), "__IPC_SHM__", std::forward(args)...); } } // namespace ipc diff --git a/test/imp/test_imp_fmt.cpp b/test/imp/test_imp_fmt.cpp index ad062d6..40f0e4d 100644 --- a/test/imp/test_imp_fmt.cpp +++ b/test/imp/test_imp_fmt.cpp @@ -110,6 +110,13 @@ TEST(fmt, fmt) { std::string test(4096, ' '); std::memcpy(&test[test.size() - sizeof(txt) + 1], txt, sizeof(txt) - 1); EXPECT_EQ(s, test); + + EXPECT_EQ(ipc::fmt("", 1, "", '2', "", 3.0), "123.000000"); + std::string empty; + EXPECT_EQ(ipc::fmt(empty, 1, "", '2', "", 3.0), "123.000000"); + EXPECT_EQ(ipc::fmt(empty, 1, empty, '2', "", 3.0), "123.000000"); + EXPECT_EQ(ipc::fmt("", 1, empty, '2', empty, 3.0), "123.000000"); + EXPECT_EQ(ipc::fmt("", 1, "", '2', empty), "12"); } namespace {