On Thu, Jul 30, 2015 at 05:58:05PM -0700, Bryce Harrington wrote: > On Thu, Jul 30, 2015 at 03:07:20PM +0200, Marek Chalupa wrote: > > wrap creating and initializing objects (structures) > > into functions and use them in the code. > > > > v2. make create_.* functions consistent > > (no func will return NULL) > > > > Signed-off-by: Marek Chalupa <mchqwe...@gmail.com> > > Looks good > Reviewed-by: Bryce Harrington <br...@osg.samsung.com>
Pushed the series to trunk: To ssh://git.freedesktop.org/git/wayland/wayland 1c12bf4..765040d master -> master > > --- > > src/scanner.c | 164 > > +++++++++++++++++++++++++++++++++++++++------------------- > > 1 file changed, 111 insertions(+), 53 deletions(-) > > > > diff --git a/src/scanner.c b/src/scanner.c > > index 7d8cfb9..da33818 100644 > > --- a/src/scanner.c > > +++ b/src/scanner.c > > @@ -1,6 +1,7 @@ > > /* > > * Copyright © 2008-2011 Kristian Høgsberg > > * Copyright © 2011 Intel Corporation > > + * Copyright © 2015 Red Hat, Inc. > > * > > * Permission is hereby granted, free of charge, to any person obtaining > > * a copy of this software and associated documentation files (the > > @@ -315,6 +316,108 @@ is_nullable_type(struct arg *arg) > > } > > } > > > > +static struct message * > > +create_message(struct location loc, const char *name) > > +{ > > + struct message *message; > > + > > + message = xmalloc(sizeof *message); > > + message->loc = loc; > > + message->name = xstrdup(name); > > + message->uppercase_name = uppercase_dup(name); > > + wl_list_init(&message->arg_list); > > + message->arg_count = 0; > > + message->new_id_count = 0; > > + message->description = NULL; > > + > > + return message; > > +} > > + > > +static struct arg * > > +create_arg(const char *name) > > +{ > > + struct arg *arg; > > + > > + arg = xmalloc(sizeof *arg); > > + arg->name = xstrdup(name); > > + arg->summary = NULL; > > + arg->interface_name = NULL; > > + > > + return arg; > > +} > > + > > +static bool > > +set_arg_type(struct arg *arg, const char *type) > > +{ > > + if (strcmp(type, "int") == 0) > > + arg->type = INT; > > + else if (strcmp(type, "uint") == 0) > > + arg->type = UNSIGNED; > > + else if (strcmp(type, "fixed") == 0) > > + arg->type = FIXED; > > + else if (strcmp(type, "string") == 0) > > + arg->type = STRING; > > + else if (strcmp(type, "array") == 0) > > + arg->type = ARRAY; > > + else if (strcmp(type, "fd") == 0) > > + arg->type = FD; > > + else if (strcmp(type, "new_id") == 0) > > + arg->type = NEW_ID; > > + else if (strcmp(type, "object") == 0) > > + arg->type = OBJECT; > > + else > > + return false; > > + > > + return true; > > +} > > + > > +static struct enumeration * > > +create_enumeration(const char *name) > > +{ > > + struct enumeration *enumeration; > > + > > + enumeration = xmalloc(sizeof *enumeration); > > + enumeration->name = xstrdup(name); > > + enumeration->uppercase_name = uppercase_dup(name); > > + enumeration->description = NULL; > > + > > + wl_list_init(&enumeration->entry_list); > > + > > + return enumeration; > > +} > > + > > +static struct entry * > > +create_entry(const char *name, const char *value) > > +{ > > + struct entry *entry; > > + > > + entry = xmalloc(sizeof *entry); > > + entry->name = xstrdup(name); > > + entry->uppercase_name = uppercase_dup(name); > > + entry->value = xstrdup(value); > > + > > + return entry; > > +} > > + > > +static struct interface * > > +create_interface(struct location loc, const char *name, int version) > > +{ > > + struct interface *interface; > > + > > + interface = xmalloc(sizeof *interface); > > + interface->loc = loc; > > + interface->name = xstrdup(name); > > + interface->uppercase_name = uppercase_dup(name); > > + interface->version = version; > > + interface->description = NULL; > > + interface->since = 1; > > + wl_list_init(&interface->request_list); > > + wl_list_init(&interface->event_list); > > + wl_list_init(&interface->enumeration_list); > > + > > + return interface; > > +} > > + > > static void > > start_element(void *data, const char *element_name, const char **atts) > > { > > @@ -376,32 +479,16 @@ start_element(void *data, const char *element_name, > > const char **atts) > > if (version == 0) > > fail(&ctx->loc, "no interface version given"); > > > > - interface = xmalloc(sizeof *interface); > > - interface->loc = ctx->loc; > > - interface->name = xstrdup(name); > > - interface->uppercase_name = uppercase_dup(name); > > - interface->version = version; > > - interface->description = NULL; > > - interface->since = 1; > > - wl_list_init(&interface->request_list); > > - wl_list_init(&interface->event_list); > > - wl_list_init(&interface->enumeration_list); > > + interface = create_interface(ctx->loc, name, version); > > + ctx->interface = interface; > > wl_list_insert(ctx->protocol->interface_list.prev, > > &interface->link); > > - ctx->interface = interface; > > } else if (strcmp(element_name, "request") == 0 || > > strcmp(element_name, "event") == 0) { > > if (name == NULL) > > fail(&ctx->loc, "no request name given"); > > > > - message = xmalloc(sizeof *message); > > - message->loc = ctx->loc; > > - message->name = xstrdup(name); > > - message->uppercase_name = uppercase_dup(name); > > - wl_list_init(&message->arg_list); > > - message->arg_count = 0; > > - message->new_id_count = 0; > > - message->description = NULL; > > + message = create_message(ctx->loc, name); > > > > if (strcmp(element_name, "request") == 0) > > wl_list_insert(ctx->interface->request_list.prev, > > @@ -440,28 +527,9 @@ start_element(void *data, const char *element_name, > > const char **atts) > > if (name == NULL) > > fail(&ctx->loc, "no argument name given"); > > > > - arg = xmalloc(sizeof *arg); > > - arg->name = xstrdup(name); > > - > > - if (strcmp(type, "int") == 0) > > - arg->type = INT; > > - else if (strcmp(type, "uint") == 0) > > - arg->type = UNSIGNED; > > - else if (strcmp(type, "fixed") == 0) > > - arg->type = FIXED; > > - else if (strcmp(type, "string") == 0) > > - arg->type = STRING; > > - else if (strcmp(type, "array") == 0) > > - arg->type = ARRAY; > > - else if (strcmp(type, "fd") == 0) > > - arg->type = FD; > > - else if (strcmp(type, "new_id") == 0) { > > - arg->type = NEW_ID; > > - } else if (strcmp(type, "object") == 0) { > > - arg->type = OBJECT; > > - } else { > > + arg = create_arg(name); > > + if (!set_arg_type(arg, type)) > > fail(&ctx->loc, "unknown type (%s)", type); > > - } > > > > switch (arg->type) { > > case NEW_ID: > > @@ -472,8 +540,6 @@ start_element(void *data, const char *element_name, > > const char **atts) > > case OBJECT: > > if (interface_name) > > arg->interface_name = xstrdup(interface_name); > > - else > > - arg->interface_name = NULL; > > break; > > default: > > if (interface_name != NULL) > > @@ -491,7 +557,6 @@ start_element(void *data, const char *element_name, > > const char **atts) > > if (allow_null != NULL && !is_nullable_type(arg)) > > fail(&ctx->loc, "allow-null is only valid for objects, > > strings, and arrays"); > > > > - arg->summary = NULL; > > if (summary) > > arg->summary = xstrdup(summary); > > > > @@ -501,12 +566,7 @@ start_element(void *data, const char *element_name, > > const char **atts) > > if (name == NULL) > > fail(&ctx->loc, "no enum name given"); > > > > - enumeration = xmalloc(sizeof *enumeration); > > - enumeration->name = xstrdup(name); > > - enumeration->uppercase_name = uppercase_dup(name); > > - enumeration->description = NULL; > > - wl_list_init(&enumeration->entry_list); > > - > > + enumeration = create_enumeration(name); > > wl_list_insert(ctx->interface->enumeration_list.prev, > > &enumeration->link); > > > > @@ -515,10 +575,8 @@ start_element(void *data, const char *element_name, > > const char **atts) > > if (name == NULL) > > fail(&ctx->loc, "no entry name given"); > > > > - entry = xmalloc(sizeof *entry); > > - entry->name = xstrdup(name); > > - entry->uppercase_name = uppercase_dup(name); > > - entry->value = xstrdup(value); > > + entry = create_entry(name, value); > > + > > if (summary) > > entry->summary = xstrdup(summary); > > else > > -- > > 2.4.3 > > > > _______________________________________________ > > wayland-devel mailing list > > wayland-devel@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel