X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fmware%2Fformatwr.c;h=3f11522e2c5e8daa63b3fa2156a824d3f7c1383d;hb=1d4ca8e6ec2fa970bca09445e44c50beab9ce060;hp=ac2cbffe376ea28760122f15f617823240f88bbf;hpb=f736a4877b8a420223c14da06be6ffe48772d44f;p=bertos.git diff --git a/bertos/mware/formatwr.c b/bertos/mware/formatwr.c index ac2cbffe..3f11522e 100644 --- a/bertos/mware/formatwr.c +++ b/bertos/mware/formatwr.c @@ -26,7 +26,7 @@ * invalidate any other reasons why the executable file might be covered by * the GNU General Public License. * - * Copyright 2003, 2004, 2005 Develer S.r.l. (http://www.develer.com/) + * Copyright 2003, 2004, 2005, 2008 Develer S.r.l. (http://www.develer.com/) * * --> * @@ -43,24 +43,24 @@ * controlled by giving a -D option a compilation time: * * \code - * -D CONFIG_PRINTF=PRINTF_FULL Full ANSI printf formatter + * -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' 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 * * Code size on AVR4 with GCC 3.4.1 (-O2): - * PRINTF_FULL 2912byte (0xB60) - * PRINTF_NOFLOAT 1684byte (0x694) - * PRINTF_REDUCED 924byte (0x39C) - * PRINTF_NOMODIFIERS 416byte (0x1A0) + * \li PRINTF_FULL 2912byte (0xB60) + * \li PRINTF_NOFLOAT 1684byte (0x694) + * \li PRINTF_REDUCED 924byte (0x39C) + * \li PRINTF_NOMODIFIERS 416byte (0x1A0) * * Code/data size in words on DSP56K with CodeWarrior 6.0: - * PRINTF_FULL 1493/45 - * PRINTF_NOFLOAT 795/45 - * PRINTF_REDUCED 482/0 - * PRINTF_NOMODIFIERS 301/0 + * \li PRINTF_FULL 1493/45 + * \li PRINTF_NOFLOAT 795/45 + * \li PRINTF_REDUCED 482/0 + * \li PRINTF_NOMODIFIERS 301/0 * * The reduced version of formatter is suitable when program size is critical * rather than formatting power. This routine uses less than 20 bytes of @@ -82,7 +82,7 @@ #include "cfg/cfg_formatwr.h" /* CONFIG_ macros */ #include /* ASSERT */ -#include +#include #include #ifndef CONFIG_PRINTF_N_FORMATTER @@ -108,7 +108,7 @@ /*bernie: save some memory, who cares about floats with lots of decimals? */ #define FRMWRI_BUFSIZE 134 - #warning 134 is too much, the code must be fixed to have a lower precision limit + #warning FIXME:134 is too much, the code must be fixed to have a lower precision limit #else /* * Conservative estimate. Should be (probably) 12 (which is the size necessary @@ -836,13 +836,16 @@ FLOATING_CONVERSION: } #if CONFIG_PRINTF > PRINTF_NOMODIFIERS - /*=================================*/ - /* Optional 'l' or 'h' modifiers ? */ - /*=================================*/ + /* + * Optional 'l', 'z' or 'h' modifiers? + */ l_modifier = h_modifier = false; switch (PGM_READ_CHAR(format)) { case 'l': + case 'z': + /* for the 'z' modifier, we make this assumption */ + STATIC_ASSERT(sizeof(size_t) == sizeof(long)); l_modifier = true; format++; break;