/
niceSOFT
/
kbd
Обзор
Документация
Войти
/
niceSOFT
/
kbd
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/libkeymap/func.c
76 строк
1 KB
Alexey Gladkov
libkeymap: keep function table consistent under memory pressure
15 фев 2026, 15:48
Не верифицирован
15 фев 2026, 15:48
f18076d
Код
Авторство
О чём код?
/* 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; }