Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:Test
ltrace
ltrace.trunk-r62.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ltrace.trunk-r62.patch of Package ltrace
------------------------------------------------------------------------ r62 | ianw-guest | 2006-08-07 03:59:59 +0000 (Mon, 07 Aug 2006) | 3 lines Changed paths: M /ltrace/trunk/ChangeLog M /ltrace/trunk/etc/ltrace.conf M /ltrace/trunk/read_config_file.c M /ltrace/trunk/testsuite/ltrace.main/parameters-lib.c M /ltrace/trunk/testsuite/ltrace.main/parameters.c M /ltrace/trunk/testsuite/ltrace.main/parameters.conf M /ltrace/trunk/testsuite/ltrace.main/parameters.exp typedefs ------------------------------------------------------------------------ --- ChangeLog | 8 +++ etc/ltrace.conf | 9 ++++ read_config_file.c | 71 +++++++++++++++++++++++++++++++++ testsuite/ltrace.main/parameters-lib.c | 5 ++ testsuite/ltrace.main/parameters.c | 3 + testsuite/ltrace.main/parameters.conf | 2 testsuite/ltrace.main/parameters.exp | 2 7 files changed, 100 insertions(+) Index: read_config_file.c =================================================================== --- read_config_file.c.orig +++ read_config_file.c @@ -15,6 +15,8 @@ static int line_no; static char *filename; static int error_count = 0; +static arg_type_info *parse_type(char **str); + struct function *list_of_functions = NULL; static struct list_of_pt_t { @@ -214,13 +216,82 @@ static int parse_argnum(char **str) return n * multiplier; } +struct typedef_node_t { + char *name; + arg_type_info *info; + struct typedef_node_t *next; +} *typedefs = NULL; + +static arg_type_info *lookup_typedef(char **str) +{ + struct typedef_node_t *node; + char *end = *str; + while (*end && (isalnum(*end) || *end == '_')) + ++end; + if (end == *str) + return NULL; + + for (node = typedefs; node != NULL; node = node->next) { + if (strncmp(*str, node->name, end - *str) == 0) { + (*str) += strlen(node->name); + return node->info; + } + } + + return NULL; +} + +static void parse_typedef(char **str) +{ + char *name; + arg_type_info *info; + struct typedef_node_t *binding; + + (*str) += strlen("typedef"); + eat_spaces(str); + + // Grab out the name of the type + name = parse_ident(str); + + // Skip = sign + eat_spaces(str); + if (**str != '=') { + output_line(0, + "Syntax error in `%s', line %d: expected '=', got '%c'", + filename, line_no, **str); + error_count++; + return; + } + (*str)++; + eat_spaces(str); + + // Parse the type + info = parse_type(str); + + // Insert onto beginning of linked list + binding = malloc(sizeof(*binding)); + binding->name = name; + binding->info = info; + binding->next = typedefs; + typedefs = binding; +} + static arg_type_info *parse_nonpointer_type(char **str) { arg_type_info *simple; arg_type_info *info; + if (strncmp(*str, "typedef", 7) == 0) { + parse_typedef(str); + return lookup_singleton(ARGTYPE_UNKNOWN); + } + simple = str2type(str); if (simple->type == ARGTYPE_UNKNOWN) { + info = lookup_typedef(str); + if (info) + return info; + else return simple; // UNKNOWN } Index: ChangeLog =================================================================== --- ChangeLog.orig +++ ChangeLog @@ -1,5 +1,13 @@ 2006-08-07 Steve Fink <sphink@gmail.com> + * etc/ltrace.conf, read_config_file.c, + testsuite/ltrace.main/parameters-lib.c, + testsuite/ltrace.main/parameters.c, + testsuite/ltrace.main/parameters.conf, + testsuite/ltrace.main/parameters.exp: add ability to typedef + +2006-08-07 Steve Fink <sphink@gmail.com> + * display_args.c, etc/ltrace.conf, ltrace.h, read_config_file.c, testsuite/ltrace.main/parameters-lib.c, testsuite/ltrace.main/parameters.c, Index: testsuite/ltrace.main/parameters.c =================================================================== --- testsuite/ltrace.main/parameters.c.orig +++ testsuite/ltrace.main/parameters.c @@ -31,6 +31,7 @@ typedef enum { PETUNIA } color_t; void func_enum(color_t); +void func_typedef(color_t); int main () @@ -67,5 +68,7 @@ main () func_ushort(33, 34); func_float(3.4, -3.4); + func_typedef(BLUE); + return 0; } Index: testsuite/ltrace.main/parameters.conf =================================================================== --- testsuite/ltrace.main/parameters.conf.orig +++ testsuite/ltrace.main/parameters.conf @@ -9,3 +9,5 @@ void func_enum(enum (RED=0,GREEN=1,BLUE= void func_short(short,short) void func_ushort(ushort, ushort) void func_float(float,float) +typedef color = enum (RED=0,GREEN=1,BLUE=2,CHARTREUSE=3,PETUNIA=4) +void func_typedef(color) Index: testsuite/ltrace.main/parameters-lib.c =================================================================== --- testsuite/ltrace.main/parameters-lib.c.orig +++ testsuite/ltrace.main/parameters-lib.c @@ -56,3 +56,8 @@ void func_float(float f1, float f2) { printf("%f %f\n", f1, f2); } + +void func_typedef(int x) +{ + printf("typedef'd enum: %d\n", x); +} Index: testsuite/ltrace.main/parameters.exp =================================================================== --- testsuite/ltrace.main/parameters.exp.orig +++ testsuite/ltrace.main/parameters.exp @@ -58,5 +58,7 @@ set pattern "func_ushort(33, 34)" ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1 set pattern "func_float(3.40*, -3.40*)" ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1 +set pattern "func_typedef(BLUE)" +ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1 set pattern "exited (status 0)" ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1 Index: etc/ltrace.conf =================================================================== --- etc/ltrace.conf.orig +++ etc/ltrace.conf @@ -32,6 +32,15 @@ ; string0 == (char *) [same as string[retval]] ; stringN == (char *) [N>0] [same as string[argN]] +; Typedefs +; +; To make it easier to specify argument lists, you can use 'typedef' +; directives to avoid repeating complex parameter descriptors: +; +; typedef color = enum(RED=1,BLUE=2,GREEN=3) +; void draw_line(color,int,int,int,int) +; void draw_square(color,int,int,int,int) +; ; Enumerations ; ; The syntax is a parenthesized list of key=value assignments, like so:
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor