get rid of $Id$ - it has never helped us and it has broken too many patches ;)
[openwrt-10.03/.git] / package / nvram / src / main.c
1 /*
2  * Frontend command-line utility for Linux NVRAM layer
3  *
4  * Copyright 2004, Broadcom Corporation
5  * All Rights Reserved.
6  * 
7  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
8  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
9  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
10  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
11  *
12  */
13
14 #include <stdio.h>
15 #include <stdlib.h>
16 #include <string.h>
17
18 #include <typedefs.h>
19 #include <bcmnvram.h>
20
21 static void
22 usage(void)
23 {
24         fprintf(stderr, "usage: nvram [get name] [set name=value] [unset name] [commit] [show]\n");
25         exit(0);
26 }
27
28 /* hack for some PMON default nvram values which have '\r' appended */
29 void
30 puts_trim_cr(char *str)
31 {
32         int len= strlen(str);
33         if (len && (str[len-1] == '\r')) len--;
34         printf("%.*s\n", len, str);
35 }
36
37 /* NVRAM utility */
38 int
39 main(int argc, char **argv)
40 {
41         char *name, *value, buf[NVRAM_SPACE];
42         int size;
43
44         /* Skip program name */
45         --argc;
46         ++argv;
47
48         if (!*argv) 
49                 usage();
50
51         /* Process the remaining arguments. */
52         for (; *argv; argv++) {
53                 if (!strncmp(*argv, "get", 3)) {
54                         if (*++argv) {
55                                 if ((value = nvram_get(*argv))) {
56                                         puts_trim_cr(value);
57                                 }
58                         }
59                 }
60                 else if (!strncmp(*argv, "set", 3)) {
61                         if (*++argv) {
62                                 strncpy(value = buf, *argv, sizeof(buf));
63                                 name = strsep(&value, "=");
64                                 nvram_set(name, value);
65                         }
66                 }
67                 else if (!strncmp(*argv, "unset", 5)) {
68                         if (*++argv)
69                                 nvram_unset(*argv);
70                 }
71                 else if (!strncmp(*argv, "commit", 5)) {
72                         nvram_commit();
73                 }
74                 else if (!strncmp(*argv, "show", 4) ||
75                            !strncmp(*argv, "getall", 6)) {
76                         nvram_getall(buf, sizeof(buf));
77                         for (name = buf; *name; name += strlen(name) + 1)
78                                 puts_trim_cr(name);
79                         size = sizeof(struct nvram_header) + (int) name - (int) buf;
80                         fprintf(stderr, "size: %d bytes (%d left)\n", size, NVRAM_SPACE - size);
81                 }
82                 if (!*argv)
83                         break;
84         }
85
86         return 0;
87 }