Move {show,set,clear}_setting() to {show,set,clear}_named_setting().
[people/dverkamp/gpxe.git] / src / hci / commands / nvo_cmd.c
1 #include <stdint.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <errno.h>
5 #include <vsprintf.h>
6 #include <getopt.h>
7 #include <gpxe/nvo.h>
8 #include <gpxe/dhcp.h>
9 #include <gpxe/settings.h>
10 #include <gpxe/command.h>
11
12 extern struct nvo_block *ugly_nvo_hack;
13
14 static int show_exec ( int argc, char **argv ) {
15         struct config_context dummy_context;
16         char buf[256];
17         int rc;
18
19         if ( ! ugly_nvo_hack ) {
20                 printf ( "No non-volatile option storage available\n" );
21                 return 1;
22         }
23
24         if ( argc != 2 ) {
25                 printf ( "Syntax: %s <identifier>\n", argv[0] );
26                 return 1;
27         }
28
29         dummy_context.options = ugly_nvo_hack->options;
30         if ( ( rc = show_named_setting ( &dummy_context, argv[1], buf,
31                                          sizeof ( buf ) ) ) != 0 ) {
32                 printf ( "Could not find \"%s\": %s\n",
33                          argv[1], strerror ( -rc ) );
34                 return 1;
35         }
36
37         printf ( "%s = %s\n", argv[1], buf );
38         return 0;
39 }
40
41 struct command show_command __command = {
42         .name = "show",
43         .exec = show_exec,
44 };
45
46 static int set_exec ( int argc, char **argv ) {
47         struct config_context dummy_context;
48         int rc;
49
50         if ( ! ugly_nvo_hack ) {
51                 printf ( "No non-volatile option storage available\n" );
52                 return 1;
53         }
54
55         if ( argc != 3 ) {
56                 printf ( "Syntax: %s <identifier> <value>\n",
57                          argv[0] );
58                 return 1;
59         }
60
61         dummy_context.options = ugly_nvo_hack->options;
62         if ( ( rc = set_named_setting ( &dummy_context, argv[1],
63                                         argv[2] ) ) != 0 ) {
64                 printf ( "Could not set \"%s\"=\"%s\": %s\n",
65                          argv[1], argv[2], strerror ( -rc ) );
66                 return 1;
67         }
68         
69         if ( nvo_save ( ugly_nvo_hack ) != 0 ) {
70                 printf ( "Could not save options to non-volatile storage\n" );
71                 return 1;
72         }
73
74         return 0;
75 }
76
77 struct command set_command __command = {
78         .name = "set",
79         .exec = set_exec,
80 };
81
82 static int clear_exec ( int argc, char **argv ) {
83         struct config_context dummy_context;
84         int rc;
85
86         if ( ! ugly_nvo_hack ) {
87                 printf ( "No non-volatile option storage available\n" );
88                 return 1;
89         }
90
91         if ( argc != 2 ) {
92                 printf ( "Syntax: %s <identifier>\n",
93                          argv[0] );
94                 return 1;
95         }
96
97         dummy_context.options = ugly_nvo_hack->options;
98         if ( ( rc = clear_named_setting ( &dummy_context, argv[1] ) ) != 0 ) {
99                 printf ( "Could not clear \"%s\": %s\n",
100                          argv[1], strerror ( -rc ) );
101                 return 1;
102         }
103         
104         return 0;
105 }
106
107 struct command clear_command __command = {
108         .name = "clear",
109         .exec = clear_exec,
110 };