|
@@ -1,177 +0,0 @@
|
|
-diff -x.svn -u fconfig/crunchfc.c ../../../snapgear_avila/user/fconfig/crunchfc.c
|
|
|
|
---- fconfig/crunchfc.c 2006-03-15 01:18:17.000000000 +1100
|
|
|
|
-+++ ../../../snapgear_avila/user/fconfig/crunchfc.c 2007-09-06 13:48:38.000000000 +1000
|
|
|
|
-@@ -320,6 +320,48 @@
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
-+ * List known keys.
|
|
|
|
-+ */
|
|
|
|
-+int8_t list_keys(struct config_data *data)
|
|
|
|
-+{
|
|
|
|
-+ struct fconfig_key key;
|
|
|
|
-+ uint32_t len = data->reallen;
|
|
|
|
-+ uint8_t *keyptr = NULL;
|
|
|
|
-+ uint8_t *ptr = data->buf+8;
|
|
|
|
-+ uint8_t *ptrend = data->buf+len-9;
|
|
|
|
-+ printer_t printer;
|
|
|
|
-+
|
|
|
|
-+ while (ptr < ptrend-4) {
|
|
|
|
-+ keyptr = ptr;
|
|
|
|
-+ ptr = get_key(ptr, &key);
|
|
|
|
-+ if (ptr == NULL) {
|
|
|
|
-+ MESSAGE(VERB_LOW, "Error in structure\n");
|
|
|
|
-+ return -1;
|
|
|
|
-+ }
|
|
|
|
-+ if (ptr > ptrend) {
|
|
|
|
-+ MESSAGE(VERB_LOW, "Parser went out of struct!\n");
|
|
|
|
-+ return -1;
|
|
|
|
-+ }
|
|
|
|
-+
|
|
|
|
-+ if ((key.type == 0) && (key.namelen==0)) {
|
|
|
|
-+ MESSAGE(VERB_NORMAL, "EOF reached - key not found\n");
|
|
|
|
-+ return -1;
|
|
|
|
-+ }
|
|
|
|
-+
|
|
|
|
-+ print_key(&key, VERB_HIGH, data->swab);
|
|
|
|
-+
|
|
|
|
-+ printf("%s: ", key.keyname);
|
|
|
|
-+ printer = TYPE_PRINTER(key.type);
|
|
|
|
-+ if (printer == NULL) {
|
|
|
|
-+ MESSAGE(VERB_LOW, "Printer missing for type %d\n", key.type);
|
|
|
|
-+ return -1;
|
|
|
|
-+ }
|
|
|
|
-+ printer(key.dataval);
|
|
|
|
-+ printf("\n");
|
|
|
|
-+ }
|
|
|
|
-+}
|
|
|
|
-+
|
|
|
|
-+/*
|
|
|
|
- * Find a key with given nickname, check its type and set value
|
|
|
|
- * Assumes that verify_fconfig() has been called on 'data' before.
|
|
|
|
- */
|
|
|
|
-diff -x.svn -u fconfig/crunchfc.h ../../../snapgear_avila/user/fconfig/crunchfc.h
|
|
|
|
---- fconfig/crunchfc.h 2006-03-15 01:18:17.000000000 +1100
|
|
|
|
-+++ ../../../snapgear_avila/user/fconfig/crunchfc.h 2007-09-06 13:48:38.000000000 +1000
|
|
|
|
-@@ -31,6 +31,7 @@
|
|
|
|
- int8_t verify_fconfig(struct config_data *data);
|
|
|
|
- int8_t get_key_value(struct config_data *data, uint8_t *nickname);
|
|
|
|
- int8_t set_key_value(struct config_data *data, uint8_t *nickname, void *value);
|
|
|
|
-+int8_t list_keys(struct config_data *data);
|
|
|
|
- void recalculate_crc(struct config_data *data);
|
|
|
|
-
|
|
|
|
- #endif //CRUNCHFC_H
|
|
|
|
-diff -x.svn -u fconfig/fconfig.c ../../../snapgear_avila/user/fconfig/fconfig.c
|
|
|
|
---- fconfig/fconfig.c 2006-03-15 01:18:18.000000000 +1100
|
|
|
|
-+++ ../../../snapgear_avila/user/fconfig/fconfig.c 2007-09-06 13:48:38.000000000 +1000
|
|
|
|
-@@ -35,8 +35,9 @@
|
|
|
|
- #include <string.h>
|
|
|
|
- #include <unistd.h>
|
|
|
|
- #include <fcntl.h>
|
|
|
|
-+#include <getopt.h>
|
|
|
|
-
|
|
|
|
- #include "debug.h"
|
|
|
|
- #include "ftypes.h"
|
|
|
|
- #include "crunchfc.h"
|
|
|
|
-
|
|
|
|
-@@ -72,7 +73,7 @@
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- fputs("Read or write Redboot configuration\n", stdout);
|
|
|
|
-- fputs("usage: fconfig [-r|-w] -d dev -n nickname -x value\n", stdout);
|
|
|
|
-+ fputs("usage: fconfig [-r|-w|-l] -d dev -n nickname -x value\n", stdout);
|
|
|
|
- fputs("'dev' may be a char device, block device or a file\n", stdout);
|
|
|
|
- fputs("Supported types: \n", stdout);
|
|
|
|
- for (i = 0; i < NUM_TYPES; i++) {
|
|
|
|
-@@ -181,7 +182,33 @@
|
|
|
|
- close_fconfig_handle(data);
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
--exit_fail:
|
|
|
|
-+exit_fail:
|
|
|
|
-+ close_fconfig_handle(data);
|
|
|
|
-+ return 1;
|
|
|
|
-+}
|
|
|
|
-+
|
|
|
|
-+/*
|
|
|
|
-+ * List mode of operation: list parameter values from the configuration.
|
|
|
|
-+ */
|
|
|
|
-+static int list_mode(struct config_data *data, uint8_t *device)
|
|
|
|
-+{
|
|
|
|
-+ if (get_fconfig_handle(data, device, O_RDONLY) == NULL) {
|
|
|
|
-+ MESSAGE(VERB_LOW, "Could not get a config data handle!\n");
|
|
|
|
-+ return 1;
|
|
|
|
-+ }
|
|
|
|
-+ if (verify_fconfig(data)) {
|
|
|
|
-+ MESSAGE(VERB_LOW, "Config verification failed!\n");
|
|
|
|
-+ goto exit_fail;
|
|
|
|
-+ }
|
|
|
|
-+
|
|
|
|
-+ if (list_keys(data)) {
|
|
|
|
-+ goto exit_fail;
|
|
|
|
-+ }
|
|
|
|
-+
|
|
|
|
-+ close_fconfig_handle(data);
|
|
|
|
-+ return 0;
|
|
|
|
-+
|
|
|
|
-+exit_fail:
|
|
|
|
- close_fconfig_handle(data);
|
|
|
|
- return 1;
|
|
|
|
- }
|
|
|
|
-@@ -189,6 +216,7 @@
|
|
|
|
- #define MODE_NONE 0
|
|
|
|
- #define MODE_WRITE 1
|
|
|
|
- #define MODE_READ 2
|
|
|
|
-+#define MODE_LIST 3
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * main(). ...nuff said.
|
|
|
|
-@@ -202,14 +230,17 @@
|
|
|
|
- uint8_t *value = NULL;
|
|
|
|
- uint8_t *device = NULL;
|
|
|
|
-
|
|
|
|
-- while ((c = getopt(argc, argv, "hrwvsd:n:x:")) != -1) {
|
|
|
|
-+ while ((c = getopt(argc, argv, "hrwlvsd:n:x:")) != -1) {
|
|
|
|
- switch (c) {
|
|
|
|
- case 'r':
|
|
|
|
- mode = MODE_READ;
|
|
|
|
- break;
|
|
|
|
-- case 'w':
|
|
|
|
-+ case 'w':
|
|
|
|
- mode = MODE_WRITE;
|
|
|
|
- break;
|
|
|
|
-+ case 'l':
|
|
|
|
-+ mode = MODE_LIST;
|
|
|
|
-+ break;
|
|
|
|
- case 'n':
|
|
|
|
- nickname = optarg;
|
|
|
|
- break;
|
|
|
|
-@@ -240,7 +271,7 @@
|
|
|
|
- MESSAGE(VERB_NORMAL, "Normal verbosity messages are printed.\n");
|
|
|
|
- MESSAGE(VERB_HIGH, "High verbosity messages are printed.\n");
|
|
|
|
-
|
|
|
|
-- if (nickname == NULL) {
|
|
|
|
-+ if (nickname == NULL && mode != MODE_LIST) {
|
|
|
|
- usage();
|
|
|
|
- exit(1);
|
|
|
|
- }
|
|
|
|
-@@ -251,13 +282,16 @@
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch (mode) {
|
|
|
|
-- case MODE_WRITE :
|
|
|
|
-+ case MODE_WRITE :
|
|
|
|
- ret = write_mode(&data, device, nickname, value);
|
|
|
|
- break;
|
|
|
|
-- case MODE_READ :
|
|
|
|
-+ case MODE_READ :
|
|
|
|
- ret = read_mode(&data, device, nickname);
|
|
|
|
- break;
|
|
|
|
-- default :
|
|
|
|
-+ case MODE_LIST :
|
|
|
|
-+ ret = list_mode(&data, device);
|
|
|
|
-+ break;
|
|
|
|
-+ default :
|
|
|
|
- MESSAGE(VERB_LOW, "Unknown mode of operation\n");
|
|
|
|
- usage();
|
|
|
|
- ret = 1;
|
|
|