X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Fformat.c;h=ccd999e582fa623bd677184ef509d364306666f4;hb=6eb0f84e3;hp=999b093c17471ecf57509c73369df86e5678f66d;hpb=32e1c010b0c34fd0984f7fc45fae648a182025c5;p=vpp.git diff --git a/src/vppinfra/format.c b/src/vppinfra/format.c index 999b093c174..ccd999e582f 100644 --- a/src/vppinfra/format.c +++ b/src/vppinfra/format.c @@ -62,6 +62,7 @@ #include #include #include /* os_puts */ +#include typedef struct { @@ -138,13 +139,13 @@ justify (u8 * s, format_info_t * fi, uword s_len_orig) if (n_left > 0) { vec_insert (s, n_left, i0); - memset (s + i0, fi->pad_char, n_left); + clib_memset (s + i0, fi->pad_char, n_left); l1 = vec_len (s); } if (n_right > 0) { vec_resize (s, n_right); - memset (s + l1, fi->pad_char, n_right); + clib_memset (s + l1, fi->pad_char, n_right); } } return s; @@ -277,6 +278,7 @@ do_percent (u8 ** _s, const u8 * fmt, va_list * va) case 'x': case 'X': case 'u': + case 'o': case 'd': { u64 number; @@ -310,6 +312,9 @@ do_percent (u8 ** _s, const u8 * fmt, va_list * va) break; } + if (c == 'o') + o.base = 8; + s = format_integer (s, number, &o); } break; @@ -382,7 +387,7 @@ done: return f; } -u8 * +__clib_export u8 * va_format (u8 * s, const char *fmt, va_list * va) { const u8 *f = (u8 *) fmt, *g; @@ -411,20 +416,29 @@ va_format (u8 * s, const char *fmt, va_list * va) if (f > g) vec_add (s, g, f - g); +#ifdef __COVERITY__ + if (s == 0) + return (u8 *) "liar liar pants on fire s can't be zero!"; +#endif + return s; } -u8 * +__clib_export u8 * format (u8 * s, const char *fmt, ...) { va_list va; va_start (va, fmt); s = va_format (s, fmt, &va); va_end (va); +#ifdef __COVERITY__ + if (s == 0) + return (u8 *) "liar liar pants on fire s can't be zero!"; +#endif return s; } -word +__clib_export word va_fformat (FILE * f, char *fmt, va_list * va) { word ret; @@ -448,7 +462,7 @@ va_fformat (FILE * f, char *fmt, va_list * va) return ret; } -word +__clib_export word fformat (FILE * f, char *fmt, ...) { va_list va; @@ -462,7 +476,18 @@ fformat (FILE * f, char *fmt, ...) } #ifdef CLIB_UNIX -word +__clib_export void +fformat_append_cr (FILE * ofp, const char *fmt, ...) +{ + va_list va; + + va_start (va, fmt); + (void) va_fformat (ofp, (char *) fmt, &va); + va_end (va); + fformat (ofp, "\n"); +} + +__clib_export word fdformat (int fd, char *fmt, ...) { word ret; @@ -708,8 +733,12 @@ format_float (u8 * s, f64 x, uword n_fraction_digits, uword output_style) sign = 1; } + /* Check for not-a-number. */ + if (isnan (x)) + return format (s, "%cNaN", sign ? '-' : '+'); + /* Check for infinity. */ - if (x == x / 2) + if (isinf (x)) return format (s, "%cinfinity", sign ? '-' : '+'); x = normalize (x, &expon, &prec);