| /* func.c |
| * |
| * This file is part of kbd project. |
| * Copyright (C) 2014 Alexey Gladkov <gladkov.alexey@gmail.com> |
| * |
| * This file is covered by the GNU General Public License, |
| * which should be included with kbd as the file COPYING. |
| */ |
| #include "config.h" |
| |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "keymap.h" |
| |
| #include "contextP.h" |
| |
| int lk_func_exists(struct lk_ctx *ctx, int index) |
| { |
| return (lk_array_get_ptr(ctx->func_table, index) != NULL); |
| } |
| |
| int lk_get_func(struct lk_ctx *ctx, struct kbsentry *kbs) |
| { |
| char *s; |
| |
| s = lk_array_get_ptr(ctx->func_table, kbs->kb_func); |
| if (!s) { |
| ERR(ctx, _("func %d not allocated"), kbs->kb_func); |
| return -1; |
| } |
| |
| strlcpy((char *)kbs->kb_string, s, sizeof(kbs->kb_string)); |
| |
| return 0; |
| } |
| |
| int lk_add_func(struct lk_ctx *ctx, struct kbsentry *kbs) |
| { |
| char *old, *s; |
| |
| old = lk_array_get_ptr(ctx->func_table, kbs->kb_func); |
| |
| s = strdup((char *)kbs->kb_string); |
| if (!s) { |
| ERR(ctx, _("out of memory")); |
| return -1; |
| } |
| |
| if (lk_array_set(ctx->func_table, kbs->kb_func, &s) < 0) { |
| free(s); |
| ERR(ctx, _("out of memory")); |
| return -1; |
| } |
| |
| if (old) |
| free(old); |
| |
| return 0; |
| } |
| |
| int lk_del_func(struct lk_ctx *ctx, int index) |
| { |
| char *s; |
| |
| s = lk_array_get_ptr(ctx->func_table, index); |
| if (s) |
| free(s); |
| |
| if (lk_array_unset(ctx->func_table, index) < 0) { |
| ERR(ctx, _("Unable to remove item from the list of functions")); |
| return -1; |
| } |
| |
| return 0; |
| } |