diff options
-rw-r--r-- | keymaps/default/test.layout | 4 | ||||
-rw-r--r-- | keymaps/default/test2.layout | 4 | ||||
-rw-r--r-- | rcm-server-keymap.c | 72 |
3 files changed, 42 insertions, 38 deletions
diff --git a/keymaps/default/test.layout b/keymaps/default/test.layout index fabc573..3a7efa1 100644 --- a/keymaps/default/test.layout +++ b/keymaps/default/test.layout @@ -1,6 +1,8 @@ [Description] Name=Samsung AA59-00581A Description=Samsung AA59-00581A LCD/LED TV Remote Control +Rows=8 +Cols=3 [Keymap] Map=nec:0x01018:KEY_POWER @@ -8,8 +10,6 @@ Map=nec:0x01017:KEY_OK Map=nec:0x01019:KEY_TV [Layout] -Rows=8 -Cols=3 Button=KEY_POWER Button=KEY_POWER Button=KEY_POWER diff --git a/keymaps/default/test2.layout b/keymaps/default/test2.layout index c1ff8dc..16bfa23 100644 --- a/keymaps/default/test2.layout +++ b/keymaps/default/test2.layout @@ -1,6 +1,8 @@ [Description] Name=Foobar 2000 Description=Foobar TV/AVR Universal Remote +Rows=8 +Cols=3 [Keymap] Map=nec:0xf00f0000:KEY_NUMERIC_0 @@ -20,8 +22,6 @@ Map=nec:0xf00f0013:KEY_LEFT Map=nec:0xf00f0014:KEY_RIGHT [Layout] -Rows=8 -Cols=3 Button=KEY_NUMERIC_1 Button=KEY_NUMERIC_2 Button=KEY_NUMERIC_3 diff --git a/rcm-server-keymap.c b/rcm-server-keymap.c index d2a01c8..b33e262 100644 --- a/rcm-server-keymap.c +++ b/rcm-server-keymap.c @@ -155,19 +155,46 @@ keymap_parse(FILE *fp, char **line, size_t *buf_size, struct keymap *keymap, /* FIXME: eat RHS whitespace for p */ switch (current_section) { case INI_SECTION_DESCRIPTION: - if (!keymap) - continue; + if (!strcasecmp(p, "Rows")) { + if (rows >= 0) { + fprintf(stderr, "Multiple rows specifications\n"); + return -EINVAL; + } + + r = strtol_strict(tmp, &rows); + if (r < 0) { + fprintf(stderr, "Invalid rows specification\n"); + return -EINVAL; + } + + } else if (!strcasecmp(p, "Cols")) { + if (cols >= 0) { + fprintf(stderr, "Multiple cols specifications\n"); + return -EINVAL; + } + + r = strtol_strict(tmp, &cols); + if (r < 0) { + fprintf(stderr, "Invalid cols specification\n"); + return -EINVAL; + } + + } else if (!strcasecmp(p, "Name")) { + if (keymap) { + keymap->name = strdup(tmp); + if (!keymap->name) + return -ENOMEM; + } - if (!strcasecmp(p, "Name")) { - keymap->name = strdup(tmp); - if (!keymap->name) - return -ENOMEM; } else if (!strcasecmp(p, "Description")) { - keymap->description = strdup(tmp); - if (!keymap->description) - return -ENOMEM; + if (keymap) { + keymap->description = strdup(tmp); + if (!keymap->description) + return -ENOMEM; + } } break; + case INI_SECTION_KEYMAP: if (!strcasecmp(p, "Map")) { char *protocol; @@ -214,32 +241,9 @@ keymap_parse(FILE *fp, char **line, size_t *buf_size, struct keymap *keymap, } break; - case INI_SECTION_LAYOUT: - if (!strcasecmp(p, "Rows")) { - if (rows >= 0) { - fprintf(stderr, "Multiple rows specifications\n"); - return -EINVAL; - } - - r = strtol_strict(tmp, &rows); - if (r < 0) { - fprintf(stderr, "Invalid rows specification\n"); - return -EINVAL; - } - - } else if (!strcasecmp(p, "Cols")) { - if (cols >= 0) { - fprintf(stderr, "Multiple cols specifications\n"); - return -EINVAL; - } - r = strtol_strict(tmp, &cols); - if (r < 0) { - fprintf(stderr, "Invalid cols specification\n"); - return -EINVAL; - } - - } else if (!strcasecmp(p, "Button")) { + case INI_SECTION_LAYOUT: + if (!strcasecmp(p, "Button")) { if (keymap) { if (!strcasecmp(tmp, "Blank")) keymap->layout[layout_count] = NULL; |