From 422b420b4d72282eb5b3adb4c5756e45be0dd03d Mon Sep 17 00:00:00 2001 From: Arvid Gerstmann Date: Mon, 16 Apr 2018 20:48:51 +0200 Subject: add support for size_t flag: %zd --- printf.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/printf.c b/printf.c index a65f418..ec1f2ef 100644 --- a/printf.c +++ b/printf.c @@ -425,6 +425,10 @@ static size_t _vsnprintf(char* buffer, size_t buffer_len, const char* format, va flags |= FLAGS_LONG_LONG; format++; } + if ((*format == 'z')) { + flags |= (sizeof(size_t) == 8 ? FLAGS_LONG_LONG : FLAGS_LONG); + format++; + } // evaluate specifier switch (*format) { -- cgit v1.2.3 From b618f2c550894e57b228204153fe69cdc933c8f9 Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Tue, 17 Apr 2018 17:55:32 +0200 Subject: cleanup(printf): don't use fixed size for long type --- printf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/printf.c b/printf.c index ec1f2ef..e5e3a36 100644 --- a/printf.c +++ b/printf.c @@ -425,9 +425,9 @@ static size_t _vsnprintf(char* buffer, size_t buffer_len, const char* format, va flags |= FLAGS_LONG_LONG; format++; } - if ((*format == 'z')) { - flags |= (sizeof(size_t) == 8 ? FLAGS_LONG_LONG : FLAGS_LONG); - format++; + if (*format == 'z') { + flags |= (sizeof(size_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG); + format++; } // evaluate specifier -- cgit v1.2.3 From 53cde39d6bc94dda8d6c6d078665d4a5f5e964ae Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Tue, 17 Apr 2018 17:56:22 +0200 Subject: docs(readme): added 'z' length specifier --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7f91d8d..753a1e1 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,7 @@ The length sub-specifier modifies the length of the data type. | (none) | int | unsigned int | | l | long int | unsigned long int | | ll | long long int | unsigned long long int | +| z | size_t int | unsigned size_t int | ## Compiler switches/defines -- cgit v1.2.3 From 281e44d53b4506b3e0e737f93af48d0c1ea5ac3e Mon Sep 17 00:00:00 2001 From: Marco Paland Date: Tue, 17 Apr 2018 17:58:04 +0200 Subject: test(test_suite): added 'z' test cases --- test/test_suite.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/test_suite.cpp b/test/test_suite.cpp index e241195..0a51e09 100644 --- a/test/test_suite.cpp +++ b/test/test_suite.cpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // \author (c) Marco Paland (info@paland.com) -// 2017, PALANDesign Hannover, Germany +// 2017-2018, PALANDesign Hannover, Germany // // \license The MIT License (MIT) // @@ -923,6 +923,21 @@ TEST_CASE("types", "[]" ) { test::sprintf(buffer, "%llu", 18446744073709551615LLU); REQUIRE(!strcmp(buffer, "18446744073709551615")); + test::sprintf(buffer, "%zu", 2147483647UL); + REQUIRE(!strcmp(buffer, "2147483647")); + + test::sprintf(buffer, "%zd", 2147483647UL); + REQUIRE(!strcmp(buffer, "2147483647")); + + if (sizeof(size_t) == sizeof(long)) { + test::sprintf(buffer, "%zi", -2147483647L); + REQUIRE(!strcmp(buffer, "-2147483647")); + } + else { + test::sprintf(buffer, "%zi", -2147483647LL); + REQUIRE(!strcmp(buffer, "-2147483647")); + } + test::sprintf(buffer, "%b", 60000); REQUIRE(!strcmp(buffer, "1110101001100000")); -- cgit v1.2.3