aboutsummaryrefslogtreecommitdiff
path: root/lens_default.c
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2012-11-29 15:49:16 +0100
committerPetr Machata <pmachata@redhat.com>2012-11-29 15:49:16 +0100
commitf197727e6247be1ee08d2a667931aee20512ae18 (patch)
tree1bf60edf3f43978f569d8f682f2cfca887f4f103 /lens_default.c
parent08423ca4f329d9fc13458d23fede961da493d329 (diff)
downloadltrace-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.c18
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);