diff options
author | Petr Machata <pmachata@redhat.com> | 2012-11-29 15:49:16 +0100 |
---|---|---|
committer | Petr Machata <pmachata@redhat.com> | 2012-11-29 15:49:16 +0100 |
commit | f197727e6247be1ee08d2a667931aee20512ae18 (patch) | |
tree | 1bf60edf3f43978f569d8f682f2cfca887f4f103 /lens_default.c | |
parent | 08423ca4f329d9fc13458d23fede961da493d329 (diff) | |
download | ltrace-f197727e6247be1ee08d2a667931aee20512ae18.tar.gz |
Allow formatting floats, doubles in hex
Include a test suite case.
Describe the extension in ltrace.conf.5.
Mention it in NEWS.
There's no similar agreed-upon convention for oct, and displaying which
bits are set in a floating number like what bitvect does is certainly not
helpful. Hence, remove the corresponding TODO item. Add a different
(unrelated) one instead.
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); |