diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-11-25 05:55:43 -0500 |
---|---|---|
committer | Johannes Berg <johannes@sipsolutions.net> | 2009-11-25 06:16:13 -0500 |
commit | cd5a5a4d1600b0df073f47c899173f585fd7698c (patch) | |
tree | acdba66d232a51b067be721fa42a9a414d90b2a7 | |
parent | d1c3ee02de911cc987df1cee8644ac4b78a61427 (diff) |
introduce pevent_read_number_field()
This helper function allows reading a number from a
variable size field, e.g. to account for architecture
differences of pointer lengths.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
-rw-r--r-- | parse-events.c | 15 | ||||
-rw-r--r-- | parse-events.h | 2 |
2 files changed, 17 insertions, 0 deletions
diff --git a/parse-events.c b/parse-events.c index 4acb56f..48f29d3 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -2092,6 +2092,21 @@ unsigned long long pevent_read_number(void *ptr, int size) | |||
2092 | } | 2092 | } |
2093 | } | 2093 | } |
2094 | 2094 | ||
2095 | int pevent_read_number_field(struct format_field *field, const void *data, | ||
2096 | unsigned long long *value) | ||
2097 | { | ||
2098 | switch (field->size) { | ||
2099 | case 1: | ||
2100 | case 2: | ||
2101 | case 4: | ||
2102 | case 8: | ||
2103 | *value = pevent_read_number(data + field->offset, field->size); | ||
2104 | return 0; | ||
2105 | default: | ||
2106 | return -1; | ||
2107 | } | ||
2108 | } | ||
2109 | |||
2095 | static int get_common_info(const char *type, int *offset, int *size) | 2110 | static int get_common_info(const char *type, int *offset, int *size) |
2096 | { | 2111 | { |
2097 | struct event *event; | 2112 | struct event *event; |
diff --git a/parse-events.h b/parse-events.h index 55621e4..c0dbc60 100644 --- a/parse-events.h +++ b/parse-events.h | |||
@@ -302,6 +302,8 @@ int pevent_register_event_handler(int id, char *sys_name, char *event_name, | |||
302 | struct format_field *pevent_find_field(struct event *event, const char *name); | 302 | struct format_field *pevent_find_field(struct event *event, const char *name); |
303 | const char *pevent_find_function(unsigned long long addr); | 303 | const char *pevent_find_function(unsigned long long addr); |
304 | unsigned long long pevent_read_number(void *ptr, int size); | 304 | unsigned long long pevent_read_number(void *ptr, int size); |
305 | int pevent_read_number_field(struct format_field *field, const void *data, | ||
306 | unsigned long long *value); | ||
305 | 307 | ||
306 | 308 | ||
307 | /* for debugging */ | 309 | /* for debugging */ |