blob: 83a9c6717a71c0014c9e3515fc20d65cc2ee5e83 [file] [log] [blame]
/* Copyright (c) 2019 Laczen
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <errno.h>
#include <string.h>
#include <settings/settings.h>
#include "settings_priv.h"
static ssize_t settings_runtime_read_cb(void *cb_arg, void *data, size_t len)
{
memcpy(data, cb_arg, len);
return len;
}
int settings_runtime_set(const char *name, void *data, size_t len)
{
struct settings_handler *ch;
char name1[SETTINGS_MAX_NAME_LEN + SETTINGS_EXTRA_LEN];
char *name_argv[SETTINGS_MAX_DIR_DEPTH];
int name_argc;
strncpy(name1, name, sizeof(name1));
ch = settings_parse_and_lookup(name1, &name_argc, name_argv);
if (!ch) {
return -EINVAL;
}
return ch->h_set(name_argc - 1, &name_argv[1], len,
settings_runtime_read_cb, data);
}
int settings_runtime_get(const char *name, void *data, size_t len)
{
struct settings_handler *ch;
char name1[SETTINGS_MAX_NAME_LEN + SETTINGS_EXTRA_LEN];
char *name_argv[SETTINGS_MAX_DIR_DEPTH];
int name_argc;
strncpy(name1, name, sizeof(name1));
ch = settings_parse_and_lookup(name1, &name_argc, name_argv);
if (!ch) {
return -EINVAL;
}
return ch->h_get(name_argc - 1, &name_argv[1], data, len);
}
int settings_runtime_commit(const char *name)
{
struct settings_handler *ch;
char name1[SETTINGS_MAX_NAME_LEN + SETTINGS_EXTRA_LEN];
char *name_argv[SETTINGS_MAX_DIR_DEPTH];
int name_argc;
strncpy(name1, name, sizeof(name1));
ch = settings_parse_and_lookup(name1, &name_argc, name_argv);
if (!ch) {
return -EINVAL;
}
if (ch->h_commit) {
return ch->h_commit();
} else {
return 0;
}
}