diff options
author | Marco Paland <marco@paland.com> | 2018-04-17 17:59:21 +0200 |
---|---|---|
committer | Marco Paland <marco@paland.com> | 2018-04-17 17:59:21 +0200 |
commit | ca6e7e5291986b95e0fad98a0a9018c8c8ce1fe1 (patch) | |
tree | a672a225e5c81fa611972257ffe51b3d13d85cd0 | |
parent | 896b2ce07b6ea0660408fc5698026c8a3af3aa3d (diff) | |
parent | 281e44d53b4506b3e0e737f93af48d0c1ea5ac3e (diff) | |
download | printf-ca6e7e5291986b95e0fad98a0a9018c8c8ce1fe1.tar.gz printf-ca6e7e5291986b95e0fad98a0a9018c8c8ce1fe1.tar.bz2 printf-ca6e7e5291986b95e0fad98a0a9018c8c8ce1fe1.zip |
Merge branch 'size_t_specifier_support'
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | printf.c | 4 | ||||
-rw-r--r-- | test/test_suite.cpp | 17 |
3 files changed, 21 insertions, 1 deletions
@@ -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
@@ -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) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
+ format++;
+ }
// evaluate specifier
switch (*format) {
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"));
|