aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Paland <marco@paland.com>2018-11-15 17:36:04 +0100
committerMarco Paland <marco@paland.com>2018-11-15 17:36:04 +0100
commit0d641bcd9c84627b31662050ddcc0b79ccd1a09b (patch)
tree61dacaa6ae681580e60521ff6d7c3a16931ec61b
parent075da98cb2c1d1306a796cfcf0e1100bd0388839 (diff)
parent29d136d88dd47c27c7fd901ce660b2b5ea99ee87 (diff)
downloadprintf-0d641bcd9c84627b31662050ddcc0b79ccd1a09b.tar.gz
printf-0d641bcd9c84627b31662050ddcc0b79ccd1a09b.tar.bz2
printf-0d641bcd9c84627b31662050ddcc0b79ccd1a09b.zip
Merge remote-tracking branch 'origin/master'
-rw-r--r--README.md2
-rw-r--r--printf.c18
2 files changed, 12 insertions, 8 deletions
diff --git a/README.md b/README.md
index 4e5d98f..945d66b 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ Primarily designed for usage in embedded systems, where printf is not available
Using the standard libc printf may pull **a lot** of unwanted library stuff and can bloat code size about 20k or is not 100% thread safe. In this cases the following implementation can be used.
Absolutely **NO dependencies** are required, *printf.c* brings all necessary routines, even its own fast `ftoa` (floating point), `ntoa` (decimal) conversion.
-If memory footprint is really a critical issue, floating point and 'long long' support and can be turned off via the `PRINTF_SUPPORT_FLOAT` and `PRINTF_SUPPORT_LONG_LONG` compiler switches.
+If memory footprint is really a critical issue, floating point and 'long long' support and can be turned off via the `PRINTF_DISABLE_SUPPORT_FLOAT` and `PRINTF_DISABLE_SUPPORT_LONG_LONG` compiler switches.
When using printf (instead of sprintf/snprintf) you have to provide your own `_putchar()` low level function as console/serial output.
diff --git a/printf.c b/printf.c
index ee0351d..a04b42b 100644
--- a/printf.c
+++ b/printf.c
@@ -174,11 +174,13 @@ static size_t _ntoa_format(out_fct_type out, char* buffer, size_t idx, size_t ma
const size_t start_idx = idx;
// pad leading zeros
- while (!(flags & FLAGS_LEFT) && (len < prec) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = '0';
- }
- while (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
- buf[len++] = '0';
+ if (!(flags & FLAGS_LEFT)) {
+ while ((len < prec) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = '0';
+ }
+ while ((flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
+ buf[len++] = '0';
+ }
}
// handle hash
@@ -389,8 +391,10 @@ static size_t _ftoa(out_fct_type out, char* buffer, size_t idx, size_t maxlen, d
}
// pad leading zeros
- while (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD) && (len < width) && (len < PRINTF_FTOA_BUFFER_SIZE)) {
- buf[len++] = '0';
+ if (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD)) {
+ while ((len < width) && (len < PRINTF_FTOA_BUFFER_SIZE)) {
+ buf[len++] = '0';
+ }
}
// handle sign