diff options
Diffstat (limited to 'lens_default.c')
-rw-r--r-- | lens_default.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lens_default.c b/lens_default.c index 093b803..ed3d0e1 100644 --- a/lens_default.c +++ b/lens_default.c @@ -186,7 +186,17 @@ format_naked_char(FILE *stream, struct value *value, } static int -format_floating(FILE *stream, struct value *value, struct value_dict *arguments) +format_double(FILE *stream, double value, enum int_fmt_t format) +{ + if (format == INT_FMT_x) + return fprintf(stream, "%a", value); + else + return fprintf(stream, "%f", value); +} + +static int +format_floating(FILE *stream, struct value *value, struct value_dict *arguments, + enum int_fmt_t format) { switch (value->type->type) { float f; @@ -194,11 +204,11 @@ format_floating(FILE *stream, struct value *value, struct value_dict *arguments) case ARGTYPE_FLOAT: if (read_float(value, &f, arguments) < 0) return -1; - return fprintf(stream, "%f", (double)f); + return format_double(stream, f, format); case ARGTYPE_DOUBLE: if (read_double(value, &d, arguments) < 0) return -1; - return fprintf(stream, "%f", d); + return format_double(stream, d, format); default: abort(); } @@ -400,7 +410,7 @@ toplevel_format_lens(struct lens *lens, FILE *stream, case ARGTYPE_FLOAT: case ARGTYPE_DOUBLE: - return format_floating(stream, value, arguments); + return format_floating(stream, value, arguments, int_fmt); case ARGTYPE_STRUCT: return format_struct(stream, value, arguments); |