Skip to content

Commit 07b3d92

Browse files
committed
libkeymap: Refactor ctx initialization and free
Signed-off-by: Alexey Gladkov <legion@kernel.org>
1 parent 17b5bc0 commit 07b3d92

File tree

2 files changed

+48
-54
lines changed

2 files changed

+48
-54
lines changed

src/libkeymap/common.c

+41-49
Original file line numberDiff line numberDiff line change
@@ -185,11 +185,15 @@ lk_init(void)
185185
lk_set_log_fn(ctx, log_file, stderr);
186186
lk_set_log_priority(ctx, LOG_ERR);
187187

188-
if (init_array(ctx, &ctx->keymap, sizeof(void *)) < 0 ||
189-
init_array(ctx, &ctx->func_table, sizeof(void *)) < 0 ||
190-
init_array(ctx, &ctx->accent_table, sizeof(void *)) < 0 ||
191-
init_array(ctx, &ctx->key_constant, sizeof(char)) < 0 ||
192-
init_array(ctx, &ctx->key_line, sizeof(int)) < 0) {
188+
int ret = 0;
189+
190+
ret = ret ?: init_array(ctx, &ctx->keymap, sizeof(void *));
191+
ret = ret ?: init_array(ctx, &ctx->func_table, sizeof(void *));
192+
ret = ret ?: init_array(ctx, &ctx->accent_table, sizeof(void *));
193+
ret = ret ?: init_array(ctx, &ctx->key_constant, sizeof(char));
194+
ret = ret ?: init_array(ctx, &ctx->key_line, sizeof(int));
195+
196+
if (ret) {
193197
lk_free(ctx);
194198
return NULL;
195199
}
@@ -204,61 +208,49 @@ lk_init(void)
204208
return ctx;
205209
}
206210

207-
int lk_free(struct lk_ctx *ctx)
208-
{
209-
unsigned int i; //, j;
210-
211-
if (!ctx)
212-
return -1;
213-
214-
if (ctx->keymap) {
215-
for (i = 0; i < ctx->keymap->total; i++) {
216-
struct lk_array *map;
217-
218-
map = lk_array_get_ptr(ctx->keymap, i);
219-
if (!map)
220-
continue;
221-
222-
lk_array_free(map);
223-
free(map);
224-
}
225-
lk_array_free(ctx->keymap);
226-
free(ctx->keymap);
211+
enum ctx_array_type {
212+
FREE_CTX_KEYMAP,
213+
FREE_CTX_FUNC_TABLE,
214+
FREE_CTX_ACCENT_TABLE,
215+
};
227216

228-
ctx->keymap = NULL;
229-
}
217+
static void *free_ctx_array(struct lk_array *arr, enum ctx_array_type array_type)
218+
{
219+
if (!arr)
220+
return NULL;
230221

231-
if (ctx->func_table) {
232-
for (i = 0; i < ctx->func_table->total; i++) {
233-
char *ptr;
222+
for (int i = 0; i < arr->total; i++) {
223+
void *ptr = lk_array_get_ptr(arr, i);
234224

235-
ptr = lk_array_get_ptr(ctx->func_table, i);
236-
if (!ptr)
237-
continue;
225+
if (!ptr)
226+
continue;
238227

239-
free(ptr);
228+
switch(array_type) {
229+
case FREE_CTX_KEYMAP:
230+
lk_array_free(ptr);
231+
break;
232+
case FREE_CTX_FUNC_TABLE:
233+
case FREE_CTX_ACCENT_TABLE:
234+
break;
240235
}
241-
lk_array_free(ctx->func_table);
242-
free(ctx->func_table);
243236

244-
ctx->func_table = NULL;
237+
free(ptr);
245238
}
246239

247-
if (ctx->accent_table) {
248-
for (i = 0; i < ctx->accent_table->total; i++) {
249-
struct lk_array *ptr;
240+
lk_array_free(arr);
241+
free(arr);
250242

251-
ptr = lk_array_get_ptr(ctx->accent_table, i);
252-
if (!ptr)
253-
continue;
243+
return NULL;
244+
}
254245

255-
free(ptr);
256-
}
257-
lk_array_free(ctx->accent_table);
258-
free(ctx->accent_table);
246+
int lk_free(struct lk_ctx *ctx)
247+
{
248+
if (!ctx)
249+
return -1;
259250

260-
ctx->accent_table = NULL;
261-
}
251+
ctx->keymap = free_ctx_array(ctx->keymap, FREE_CTX_KEYMAP);
252+
ctx->func_table = free_ctx_array(ctx->func_table, FREE_CTX_FUNC_TABLE);
253+
ctx->accent_table = free_ctx_array(ctx->accent_table, FREE_CTX_ACCENT_TABLE);
262254

263255
if (ctx->key_constant) {
264256
lk_array_free(ctx->key_constant);

src/libkeymap/kernel.c

+7-5
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ int lk_kernel_diacrs(struct lk_ctx *ctx, int fd)
117117

118118
int lk_kernel_keymap(struct lk_ctx *ctx, int fd)
119119
{
120-
if (lk_kernel_keys(ctx, fd) < 0 ||
121-
lk_kernel_funcs(ctx, fd) < 0 ||
122-
lk_kernel_diacrs(ctx, fd) < 0)
123-
return -1;
124-
return 0;
120+
int ret = 0;
121+
122+
ret = ret ?: lk_kernel_keys(ctx, fd);
123+
ret = ret ?: lk_kernel_funcs(ctx, fd);
124+
ret = ret ?: lk_kernel_diacrs(ctx, fd);
125+
126+
return ret;
125127
}

0 commit comments

Comments
 (0)