aboutsummaryrefslogtreecommitdiff
path: root/display_args.c
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2012-01-06 16:58:54 +0100
committerPetr Machata <pmachata@redhat.com>2012-08-29 19:02:06 +0200
commitf6ec08afb96292fd3c802c1f633d8de249664c72 (patch)
treed52d839f849f5c4723329e85662b44209bed228c /display_args.c
parent37b73c0ab8cbcab4729df6d12f2dc846d4652310 (diff)
downloadltrace-f6ec08afb96292fd3c802c1f633d8de249664c72.tar.gz
Add fetch.c/fetch.h, a module for fetching function arguments
- this is now a thin wrapper over gimme_arg, ideally the backends will eventually use this right interface - in display_args.c, strip one layer of pointer wrapping, which is now done in output.c
Diffstat (limited to 'display_args.c')
-rw-r--r--display_args.c43
1 files changed, 6 insertions, 37 deletions
diff --git a/display_args.c b/display_args.c
index 8848b35..4a1747d 100644
--- a/display_args.c
+++ b/display_args.c
@@ -35,9 +35,6 @@
#include "type.h"
#include "common.h"
-static int format_argument_2(FILE *stream, struct value *value,
- struct value_dict *arguments);
-
#define READER(NAME, TYPE) \
static int \
NAME(struct value *value, TYPE *ret, struct value_dict *arguments) \
@@ -235,7 +232,7 @@ format_struct(FILE *stream, struct value *value, struct value_dict *arguments)
struct value element;
if (value_init_element(&element, value, i) < 0)
return -1;
- int o = format_argument_2(stream, &element, arguments);
+ int o = format_argument(stream, &element, arguments);
if (o < 0)
return -1;
written += o;
@@ -251,7 +248,7 @@ format_pointer(FILE *stream, struct value *value, struct value_dict *arguments)
struct value element;
if (value_init_deref(&element, value) < 0)
return -1;
- return format_argument_2(stream, &element, arguments);
+ return format_argument(stream, &element, arguments);
}
/*
@@ -300,7 +297,7 @@ format_array(FILE *stream, struct value *value, struct value_dict *arguments,
return -1;
if (value_is_zero(&element, arguments)) /* XXX emulate ZERO */
break;
- int o = format_argument_2(stream, &element, arguments);
+ int o = format_argument(stream, &element, arguments);
if (o < 0)
return -1;
written += o;
@@ -313,9 +310,8 @@ format_array(FILE *stream, struct value *value, struct value_dict *arguments,
return written;
}
-static int
-format_argument_2(FILE *stream, struct value *value,
- struct value_dict *arguments)
+int
+format_argument(FILE *stream, struct value *value, struct value_dict *arguments)
{
struct expr_node *length = NULL;
switch (value->type->type) {
@@ -384,7 +380,7 @@ format_argument_2(FILE *stream, struct value *value,
value_clone(&tmp, value);
value_set_type(&tmp, info, 0);
- int ret = format_argument_2(stream, &tmp, arguments);
+ int ret = format_argument(stream, &tmp, arguments);
value_destroy(&tmp);
type_destroy(&info[0]);
@@ -400,30 +396,3 @@ format_argument_2(FILE *stream, struct value *value,
}
abort();
}
-
-int
-format_argument(FILE *stream, struct value *value, struct value_dict *arguments)
-{
- /* Arrays decay into pointers for purposes of argument
- * passing. Before the proper support for this lands, wrap
- * top-level arrays in pointers here. */
- if (value->type->type == ARGTYPE_ARRAY) {
-
- struct arg_type_info info;
- type_init_pointer(&info, value->type, 0);
-
- struct value tmp;
- value_clone(&tmp, value);
- value_set_type(&tmp, &info, 0);
-
- int ret = format_argument_2(stream, &tmp, arguments);
-
- value_destroy(&tmp);
- type_destroy(&info);
-
- return ret;
-
- } else {
- return format_argument_2(stream, value, arguments);
- }
-}