mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Merge #6192
6192: Allow translations to reorder string substitutions r=Robyt3 a=heinrich5991
This is supported on Windows
(https://docs.microsoft.com/en-us/cpp/c-runtime-library/printf-p-positional-parameters) and on POSIX, so basically everywhere.
Add some tests to verify that the target system does indeed support these positional parameters.
(cherry picked from commit ddd2b93190
)
## Checklist
- [ ] Tested the change ingame
- [ ] Provided screenshots if it is a visual change
- [ ] Tested in combination with possibly related configuration options
- [ ] Written a unit test (especially base/) or added coverage to integration test
- [ ] Considered possible null pointers and out of bounds array indexing
- [ ] Changed no physics that affect existing maps
- [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional)
Co-authored-by: heinrich5991 <heinrich5991@gmail.com>
This commit is contained in:
commit
4f02f6da97
|
@ -116,7 +116,7 @@ void log_log_impl(LEVEL level, bool have_color, LOG_COLOR color, const char *sys
|
|||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
#endif
|
||||
#if defined(CONF_FAMILY_WINDOWS)
|
||||
_vsnprintf(pMessage, MessageSize, fmt, args);
|
||||
_vsprintf_p(pMessage, MessageSize, fmt, args);
|
||||
#else
|
||||
vsnprintf(pMessage, MessageSize, fmt, args);
|
||||
#endif
|
||||
|
|
|
@ -2657,7 +2657,7 @@ int str_format(char *buffer, int buffer_size, const char *format, ...)
|
|||
#if defined(CONF_FAMILY_WINDOWS)
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
_vsnprintf(buffer, buffer_size, format, ap);
|
||||
_vsprintf_p(buffer, buffer_size, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
buffer[buffer_size - 1] = 0; /* assure null termination */
|
||||
|
|
|
@ -217,6 +217,27 @@ TEST(Str, Endswith)
|
|||
str_length(ABCDEFG) - str_length(DEFG));
|
||||
}
|
||||
|
||||
TEST(StrFormat, Positional)
|
||||
{
|
||||
char aBuf[256];
|
||||
|
||||
// normal
|
||||
str_format(aBuf, sizeof(aBuf), "%s %s", "first", "second");
|
||||
EXPECT_STREQ(aBuf, "first second");
|
||||
|
||||
// normal with positional arguments
|
||||
str_format(aBuf, sizeof(aBuf), "%1$s %2$s", "first", "second");
|
||||
EXPECT_STREQ(aBuf, "first second");
|
||||
|
||||
// reverse
|
||||
str_format(aBuf, sizeof(aBuf), "%2$s %1$s", "first", "second");
|
||||
EXPECT_STREQ(aBuf, "second first");
|
||||
|
||||
// duplicate
|
||||
str_format(aBuf, sizeof(aBuf), "%1$s %1$s %2$d %1$s %2$d", "str", 1);
|
||||
EXPECT_STREQ(aBuf, "str str 1 str 1");
|
||||
}
|
||||
|
||||
TEST(Str, EndswithNocase)
|
||||
{
|
||||
EXPECT_TRUE(str_endswith_nocase("abcdef", "deF"));
|
||||
|
|
Loading…
Reference in a new issue