1
0
Fork 0

fix(printf): fix broken right-padding in _ftoa

Fixes #24
development
Marco Paland 7 years ago
parent be30479110
commit f8a2be378d

@ -262,6 +262,8 @@ static size_t _ntoa_long_long(out_fct_type out, char* buffer, size_t idx, size_t
#if defined(PRINTF_SUPPORT_FLOAT)
static size_t _ftoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, double value, unsigned int prec, unsigned int width, unsigned int flags)
{
const size_t start_idx = idx;
char buf[PRINTF_FTOA_BUFFER_SIZE];
size_t len = 0U;
double diff = 0.0;
@ -388,7 +390,7 @@ static size_t _ftoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, d
// append pad spaces up to given width
if (flags & FLAGS_LEFT) {
while (idx < width) {
while (idx - start_idx < width) {
out(' ', buffer, idx++, maxlen);
}
}

@ -990,6 +990,12 @@ TEST_CASE("float", "[]" ) {
test::sprintf(buffer, "%.1f", 3.49);
REQUIRE(!strcmp(buffer, "3.5"));
test::sprintf(buffer, "a%-5.1f", 0.5);
REQUIRE(!strcmp(buffer, "a0.5 "));
test::sprintf(buffer, "a%-5.1fend", 0.5);
REQUIRE(!strcmp(buffer, "a0.5 end"));
// out of range in the moment, need to be fixed by someone
test::sprintf(buffer, "%.1f", 1E20);
REQUIRE(!strcmp(buffer, ""));

Loading…
Cancel
Save