printf-hook-builtin: Print NaN/Infinity floating point values as such
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
#include "test_suite.h"
|
#include "test_suite.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
static void verify(char *expected, char *format, ...)
|
static void verify(char *expected, char *format, ...)
|
||||||
{
|
{
|
||||||
@@ -133,6 +134,19 @@ START_TEST(test_printf_float)
|
|||||||
verify("-1.12", "%.2f", -1.1249);
|
verify("-1.12", "%.2f", -1.1249);
|
||||||
verify("-1.124", "%.3f", -1.12351);
|
verify("-1.124", "%.3f", -1.12351);
|
||||||
verify("-1.123", "%.3f", -1.12349);
|
verify("-1.123", "%.3f", -1.12349);
|
||||||
|
|
||||||
|
#ifdef NAN
|
||||||
|
verify("nan", "%.3f", NAN);
|
||||||
|
verify(" nan", "%5.3f", NAN);
|
||||||
|
verify("NAN", "%.3F", NAN);
|
||||||
|
verify("NAN ", "%-5.3F", NAN);
|
||||||
|
#endif
|
||||||
|
#ifdef INFINITY
|
||||||
|
verify("inf", "%.3f", INFINITY);
|
||||||
|
verify("-inf", "%.4f", -INFINITY);
|
||||||
|
verify("INF", "%.3F", INFINITY);
|
||||||
|
verify("-INF", "%.4F", -INFINITY);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
|||||||
@@ -923,9 +923,29 @@ int builtin_vsnprintf(char *buffer, size_t n, const char *format, va_list ap)
|
|||||||
}
|
}
|
||||||
is_double:
|
is_double:
|
||||||
{
|
{
|
||||||
|
double dval;
|
||||||
|
|
||||||
|
dval = va_arg(ap, double);
|
||||||
|
if (isinf(dval) == 1)
|
||||||
|
{
|
||||||
|
sarg = flags & FL_UPPER ? "INF" : "inf";
|
||||||
|
slen = strlen(sarg);
|
||||||
|
goto is_string;
|
||||||
|
}
|
||||||
|
if (isinf(dval) == -1)
|
||||||
|
{
|
||||||
|
sarg = flags & FL_UPPER ? "-INF" : "-inf";
|
||||||
|
slen = strlen(sarg);
|
||||||
|
goto is_string;
|
||||||
|
}
|
||||||
|
if (isnan(dval))
|
||||||
|
{
|
||||||
|
sarg = flags & FL_UPPER ? "NAN" : "nan";
|
||||||
|
slen = strlen(sarg);
|
||||||
|
goto is_string;
|
||||||
|
}
|
||||||
sz = format_double(q, (o < n) ? n - o : 0,
|
sz = format_double(q, (o < n) ? n - o : 0,
|
||||||
va_arg(ap, double),
|
dval, flags, base, width, prec);
|
||||||
flags, base, width, prec);
|
|
||||||
q += sz;
|
q += sz;
|
||||||
o += sz;
|
o += sz;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user