diff options
Diffstat (limited to 'package/nvram/src/main.c')
-rw-r--r-- | package/nvram/src/main.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/package/nvram/src/main.c b/package/nvram/src/main.c new file mode 100644 index 0000000..7af2672 --- /dev/null +++ b/package/nvram/src/main.c @@ -0,0 +1,88 @@ +/* + * Frontend command-line utility for Linux NVRAM layer + * + * Copyright 2004, Broadcom Corporation + * All Rights Reserved. + * + * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY + * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM + * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE. + * + * $Id$ + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <typedefs.h> +#include <bcmnvram.h> + +static void +usage(void) +{ + fprintf(stderr, "usage: nvram [get name] [set name=value] [unset name] [show]\n"); + exit(0); +} + +/* hack for some PMON default nvram values which have '\r' appended */ +void +puts_trim_cr(char *str) +{ + int len= strlen(str); + if (len && (str[len-1] == '\r')) len--; + printf("%.*s\n", len, str); +} + +/* NVRAM utility */ +int +main(int argc, char **argv) +{ + char *name, *value, buf[NVRAM_SPACE]; + int size; + + /* Skip program name */ + --argc; + ++argv; + + if (!*argv) + usage(); + + /* Process the remaining arguments. */ + for (; *argv; argv++) { + if (!strncmp(*argv, "get", 3)) { + if (*++argv) { + if ((value = nvram_get(*argv))) { + puts_trim_cr(value); + } + } + } + else if (!strncmp(*argv, "set", 3)) { + if (*++argv) { + strncpy(value = buf, *argv, sizeof(buf)); + name = strsep(&value, "="); + nvram_set(name, value); + } + } + else if (!strncmp(*argv, "unset", 5)) { + if (*++argv) + nvram_unset(*argv); + } + else if (!strncmp(*argv, "commit", 5)) { + nvram_commit(); + } + else if (!strncmp(*argv, "show", 4) || + !strncmp(*argv, "getall", 6)) { + nvram_getall(buf, sizeof(buf)); + for (name = buf; *name; name += strlen(name) + 1) + puts_trim_cr(name); + size = sizeof(struct nvram_header) + (int) name - (int) buf; + fprintf(stderr, "size: %d bytes (%d left)\n", size, NVRAM_SPACE - size); + } + if (!*argv) + break; + } + + return 0; +} |