* -D CONFIG_PRINTF=PRINTF_FULL Full ANSI printf formatter, with some C99 extensions
* -D CONFIG_PRINTF=PRINTF_NOFLOAT Exclude support for floats
* -D CONFIG_PRINTF=PRINTF_REDUCED Simplified formatter (see below)
- * -D CONFIG_PRINTF=PRINTF_NOMODIFIERS Exclude 'l', 'z' and 'h' modifiers in reduced version
+ * -D CONFIG_PRINTF=PRINTF_NOMODIFIERS Exclude "l", "z" and "h" modifiers in reduced version
* -D CONFIG_PRINTF=PRINTF_DISABLED No formatter at all
* \endcode
*
/* Maximum precision for floating point values */
typedef long double max_float_t;
- /*luca: FIXME: this should be enough to print floating point values, must be investigated
- * further.
- */
- #define FRMWRI_BUFSIZE 20
+ #if CONFIG_FRMWRI_BUFSIZE
+ #define FRMWRI_BUFSIZE CONFIG_FRMWRI_BUFSIZE
+ #else
+ /* Conservative estimate. Max float is 3.40282e+038, so %f (but not %e or %g) must have
+ * space for: sign + all 38 digits + '.' + 6 decimal digits (default)
+ * Use a high value to avoid unexpected buffer overflows.
+ */
+ #define FRMWRI_BUFSIZE 134
+ #endif
#else
- /*
- * Conservative estimate. Should be (probably) 12 (which is the size necessary
- * to represent (2^32-1) in octal plus the sign bit.
- */
- #define FRMWRI_BUFSIZE 16
+ #if CONFIG_FRMWRI_BUFSIZE
+ #define FRMWRI_BUFSIZE CONFIG_FRMWRI_BUFSIZE
+ #else
+ /*
+ * Conservative estimate. Should be (probably) 12 (which is the size necessary
+ * to represent (2^32-1) in octal plus the sign bit.
+ */
+ #define FRMWRI_BUFSIZE 16
+ #endif
#endif
/* Probably useful for fancy microcontrollers such as the PIC, nobody knows. */