Skip to content

Commit

Permalink
genksyms: Add helpers for building string lists
Browse files Browse the repository at this point in the history
Signed-off-by: Michal Marek <[email protected]>
Acked-by: Sam Ravnborg <[email protected]>
  • Loading branch information
michal42 committed Mar 17, 2011
1 parent 7ec8eda commit 68eb856
Showing 1 changed file with 38 additions and 32 deletions.
70 changes: 38 additions & 32 deletions scripts/genksyms/genksyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ static const struct {

static int equal_list(struct string_list *a, struct string_list *b);
static void print_list(FILE * f, struct string_list *list);
static struct string_list *concat_list(struct string_list *start, ...);
static struct string_list *mk_node(const char *string);
static void print_location(void);
static void print_type_name(enum symbol_type type, const char *name);

Expand Down Expand Up @@ -299,6 +301,35 @@ void free_list(struct string_list *s, struct string_list *e)
}
}

static struct string_list *mk_node(const char *string)
{
struct string_list *newnode;

newnode = xmalloc(sizeof(*newnode));
newnode->string = xstrdup(string);
newnode->tag = SYM_NORMAL;
newnode->next = NULL;

return newnode;
}

static struct string_list *concat_list(struct string_list *start, ...)
{
va_list ap;
struct string_list *n, *n2;

if (!start)
return NULL;
for (va_start(ap, start); (n = va_arg(ap, struct string_list *));) {
for (n2 = n; n2->next; n2 = n2->next)
;
n2->next = start;
start = n;
}
va_end(ap);
return start;
}

struct string_list *copy_node(struct string_list *node)
{
struct string_list *newnode;
Expand Down Expand Up @@ -499,42 +530,17 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc)
case SYM_ENUM:
subsym = find_symbol(cur->string, cur->tag);
if (!subsym) {
struct string_list *n, *t = NULL;
struct string_list *n;

error_with_pos("expand undefined %s %s",
symbol_types[cur->tag].name,
cur->string);

n = xmalloc(sizeof(*n));
n->string = xstrdup(symbol_types[cur->tag].name);
n->tag = SYM_NORMAL;
n->next = t;
t = n;

n = xmalloc(sizeof(*n));
n->string = xstrdup(cur->string);
n->tag = SYM_NORMAL;
n->next = t;
t = n;

n = xmalloc(sizeof(*n));
n->string = xstrdup("{");
n->tag = SYM_NORMAL;
n->next = t;
t = n;

n = xmalloc(sizeof(*n));
n->string = xstrdup("UNKNOWN");
n->tag = SYM_NORMAL;
n->next = t;
t = n;

n = xmalloc(sizeof(*n));
n->string = xstrdup("}");
n->tag = SYM_NORMAL;
n->next = t;
t = n;

n = concat_list(mk_node
(symbol_types[cur->tag].name),
mk_node(cur->string),
mk_node("{"),
mk_node("UNKNOWN"),
mk_node("}"), NULL);
subsym =
add_symbol(cur->string, cur->tag, n, 0);
}
Expand Down

0 comments on commit 68eb856

Please sign in to comment.