1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/*
* 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.
*
*/
#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] [commit] [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;
}
|