summaryrefslogtreecommitdiff
path: root/rcm-server-main.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2015-07-19 23:22:23 +0200
committerDavid Härdeman <david@hardeman.nu>2015-07-19 23:22:23 +0200
commitd13eb564b120be2d6694225aa408a39f860dbf45 (patch)
tree31cafac22b082e4cf2f349ea6f75f15133a7e5bb /rcm-server-main.c
parent69d14aaec02dd341d93b4c9b0ee07fef2f87ef6b (diff)
Implement keymap writing server-side
Diffstat (limited to 'rcm-server-main.c')
-rw-r--r--rcm-server-main.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/rcm-server-main.c b/rcm-server-main.c
index 0623a01..cde13a0 100644
--- a/rcm-server-main.c
+++ b/rcm-server-main.c
@@ -587,29 +587,30 @@ method_setkeymap(sd_bus_message *m, void *userdata, sd_bus_error *error)
new_keymap->layout = zmalloc(sizeof(struct keycode *) * cols * rows);
if (!new_keymap->layout) {
- keymap_free(new_keymap);
r = -ENOMEM;
goto out;
}
r = method_setkeymap_parse_dbus_msg(m, new_keymap, NULL, NULL, NULL, NULL);
- if (r < 0) {
- keymap_free(new_keymap);
+ if (r < 0)
goto out;
- }
printf("\tUpdated keymap: name (%s), desc (%s), keycodes(%u), rows(%u), cols(%u)\n",
new_keymap->name, new_keymap->description,
new_keymap->keycode_count,
new_keymap->rows, new_keymap->cols);
- /* FIXME: Write to disk */
+ r = keymap_write(new_keymap);
+ if (r < 0)
+ goto out;
+
list_replace(&old_keymap->list, &new_keymap->list);
keymap_free(old_keymap);
return sd_bus_reply_method_return(m, NULL);
out:
+ keymap_free(new_keymap);
return sd_bus_error_set_errno(error, r);
}