[PATCH] Implement CONFIG_KEY_UNSIGNED_INTEGER since strtol() does not work when trying to assign 32 bits of data into a regular signed int on 32 bit systems. Use corresponding strtoul() instead.

Kristian Høgsberg krh at bitplanet.net
Fri Jan 27 12:46:07 PST 2012


On Fri, Jan 27, 2012 at 3:25 PM, Scott Moreau <oreaus at gmail.com> wrote:

Thanks.  I fixed up the header and rolled the comment fixup patch into
this one as well.

Kristian

>  clients/desktop-shell.c |    4 ++--
>  shared/config-parser.c  |   10 ++++++++++
>  shared/config-parser.h  |    1 +
>  3 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c
> index 4848449..3d5119a 100644
> --- a/clients/desktop-shell.c
> +++ b/clients/desktop-shell.c
> @@ -107,8 +107,8 @@ static int key_locking = 1;
>  static const struct config_key shell_config_keys[] = {
>        { "background-image", CONFIG_KEY_STRING, &key_background_image },
>        { "background-type", CONFIG_KEY_STRING, &key_background_type },
> -       { "panel-color", CONFIG_KEY_INTEGER, &key_panel_color },
> -       { "background-color", CONFIG_KEY_INTEGER, &key_background_color },
> +       { "panel-color", CONFIG_KEY_UNSIGNED_INTEGER, &key_panel_color },
> +       { "background-color", CONFIG_KEY_UNSIGNED_INTEGER, &key_background_color },
>        { "locking", CONFIG_KEY_BOOLEAN, &key_locking },
>  };
>
> diff --git a/shared/config-parser.c b/shared/config-parser.c
> index 3b8c5c2..3d94117 100644
> --- a/shared/config-parser.c
> +++ b/shared/config-parser.c
> @@ -32,6 +32,7 @@ handle_key(const struct config_key *key, const char *value)
>  {
>        char *end, *s;
>        int i, len;
> +       unsigned int ui;
>
>        switch (key->type) {
>        case CONFIG_KEY_INTEGER:
> @@ -43,6 +44,15 @@ handle_key(const struct config_key *key, const char *value)
>                *(int *)key->data = i;
>                return 0;
>
> +       case CONFIG_KEY_UNSIGNED_INTEGER:
> +               ui = strtoul(value, &end, 0);
> +               if (*end != '\n') {
> +                       fprintf(stderr, "invalid integer: %s\n", value);
> +                       return -1;
> +               }
> +               *(int *)key->data = ui;
> +               return 0;
> +
>        case CONFIG_KEY_STRING:
>                len = strlen(value);
>                s = malloc(len);
> diff --git a/shared/config-parser.h b/shared/config-parser.h
> index 34f5c31..a83aa4c 100644
> --- a/shared/config-parser.h
> +++ b/shared/config-parser.h
> @@ -25,6 +25,7 @@
>
>  enum config_key_type {
>        CONFIG_KEY_INTEGER,     /* typeof data = int */
> +       CONFIG_KEY_UNSIGNED_INTEGER,    /* typeof data = int */
>        CONFIG_KEY_STRING,      /* typeof data = char* */
>        CONFIG_KEY_BOOLEAN      /* typeof data = int */
>  };
> --
> 1.7.4.1
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list