aboutsummaryrefslogtreecommitdiff
path: root/stand/common/nvstore.c
diff options
context:
space:
mode:
Diffstat (limited to 'stand/common/nvstore.c')
-rw-r--r--stand/common/nvstore.c132
1 files changed, 3 insertions, 129 deletions
diff --git a/stand/common/nvstore.c b/stand/common/nvstore.c
index c6d230584f9d..3cdb094c858f 100644
--- a/stand/common/nvstore.c
+++ b/stand/common/nvstore.c
@@ -29,138 +29,12 @@
* nvstore is abstraction layer to implement data read/write to different
* types of non-volatile storage.
*
- * User interfaces:
- * Provide mapping via environment: setenv/unsetenv/putenv. Access via
- * environment functions/commands is available once nvstore has
- * attached the backend and stored textual data is mapped to environment.
- *
- * Provide command "nvstore" to create new data instances.
- *
- * API: TBD.
- * nvstore_init(): attach new backend and create the environment mapping.
- * nvstore_fini: detach backend and unmap the related environment.
- *
- * The disk based storage, such as UFS file or ZFS bootenv label area, is
- * only accessible after root file system is set. Root file system change
- * will switch the back end storage.
+ * Provides cli command 'nvostre'
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdbool.h>
-#include <sys/queue.h>
-#include <bootstrap.h>
#include "stand.h"
-
-typedef struct nvstore {
- char *nvs_name;
- void *nvs_data;
- nvs_callbacks_t *nvs_cb;
- STAILQ_ENTRY(nvstore) nvs_next;
-} nvstore_t;
-
-typedef STAILQ_HEAD(store_list, nvstore) nvstore_list_t;
-
-nvstore_list_t stores = STAILQ_HEAD_INITIALIZER(stores);
-
-void *
-nvstore_get_store(const char *name)
-{
- nvstore_t *st;
-
- st = NULL;
-
- STAILQ_FOREACH(st, &stores, nvs_next) {
- if (strcmp(name, st->nvs_name) == 0)
- break;
- }
-
- return (st);
-}
-
-int
-nvstore_init(const char *name, nvs_callbacks_t *cb, void *data)
-{
- nvstore_t *st;
-
- st = nvstore_get_store(name);
- if (st != NULL)
- return (EEXIST);
-
- if ((st = malloc(sizeof (*st))) == NULL)
- return (ENOMEM);
-
- if ((st->nvs_name = strdup(name)) == NULL) {
- free(st);
- return (ENOMEM);
- }
-
- st->nvs_data = data;
- st->nvs_cb = cb;
-
- STAILQ_INSERT_TAIL(&stores, st, nvs_next);
- return (0);
-}
-
-int
-nvstore_fini(const char *name)
-{
- nvstore_t *st;
-
- st = nvstore_get_store(name);
- if (st == NULL)
- return (ENOENT);
-
- STAILQ_REMOVE(&stores, st, nvstore, nvs_next);
-
- free(st->nvs_name);
- free(st->nvs_data);
- free(st);
- return (0);
-}
-
-int
-nvstore_print(void *ptr)
-{
- nvstore_t *st = ptr;
-
- return (st->nvs_cb->nvs_iterate(st->nvs_data, st->nvs_cb->nvs_print));
-}
-
-int
-nvstore_get_var(void *ptr, const char *name, void **data)
-{
- nvstore_t *st = ptr;
-
- return (st->nvs_cb->nvs_getter(st->nvs_data, name, data));
-}
-
-int
-nvstore_set_var(void *ptr, int type, const char *name,
- void *data, size_t size)
-{
- nvstore_t *st = ptr;
-
- return (st->nvs_cb->nvs_setter(st->nvs_data, type, name, data, size));
-}
-
-int
-nvstore_set_var_from_string(void *ptr, const char *type, const char *name,
- const char *data)
-{
- nvstore_t *st = ptr;
-
- return (st->nvs_cb->nvs_setter_str(st->nvs_data, type, name, data));
-}
-
-int
-nvstore_unset_var(void *ptr, const char *name)
-{
- nvstore_t *st = ptr;
-
- return (st->nvs_cb->nvs_unset(st->nvs_data, name));
-}
+#include "nvstore.h"
+#include "bootstrap.h"
COMMAND_SET(nvstore, "nvstore", "manage non-volatile data", command_nvstore);