diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-07-02 10:36:47 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-07-02 11:44:20 +0800 |
commit | 4a9725bb74e7a05731eff0b9166c4d1e99b7064d (patch) | |
tree | ae023a3c80e84ddd89eb779e76054d16e355b7f7 | |
parent | 434a6c9c100bc8daca1e6c41137f993d88f20fe3 (diff) | |
download | talos-petitboot-4a9725bb74e7a05731eff0b9166c4d1e99b7064d.tar.gz talos-petitboot-4a9725bb74e7a05731eff0b9166c4d1e99b7064d.zip |
config/powerpc-nvram: Don't require petitboot, prefix on all params
Currently, we only store nvram params with a "petitboot," prefix, so
that we don't grow the config list to an unbound size. However,
the "auto-boot?" param has no prefix.
Instead, remove the requirement for the "petitboot," prefix, and use an
array of known parameters instead.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r-- | lib/pb-config/storage-powerpc-nvram.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/lib/pb-config/storage-powerpc-nvram.c b/lib/pb-config/storage-powerpc-nvram.c index 4e4d29a..96d279c 100644 --- a/lib/pb-config/storage-powerpc-nvram.c +++ b/lib/pb-config/storage-powerpc-nvram.c @@ -12,7 +12,6 @@ #include "storage.h" static const char *partition = "common"; -static const char *prefix = "petitboot,"; struct param { char *name; @@ -26,12 +25,33 @@ struct powerpc_nvram_storage { struct list params; }; +static const char *known_params[] = { + "auto-boot?", + "petitboot,network", + NULL, +}; + #define to_powerpc_nvram_storage(s) \ container_of(s, struct powerpc_nvram_storage, storage) /* a partition max a max size of 64k * 16bytes = 1M */ static const int max_partition_size = 64 * 1024 * 16; +static bool param_is_known(const char *param, unsigned int len) +{ + const char *known_param; + unsigned int i; + + for (i = 0; known_params[i]; i++) { + known_param = known_params[i]; + if (len == strlen(known_param) && + !strncmp(param, known_param, len)) + return true; + } + + return false; +} + static int parse_nvram_params(struct powerpc_nvram_storage *nv, char *buf, int len) { @@ -70,13 +90,10 @@ static int parse_nvram_params(struct powerpc_nvram_storage *nv, continue; namelen = name - value; - if (namelen <= strlen(prefix)) - continue; - if (strncmp(name, prefix, strlen(prefix))) + if (!param_is_known(name, namelen)) continue; - name += strlen(prefix); value++; param = talloc(nv, struct param); @@ -249,7 +266,7 @@ static void populate_network_config(struct powerpc_nvram_storage *nv, char *val; int i; - cval = get_param(nv, "network"); + cval = get_param(nv, "petitboot,network"); if (!cval || !strlen(cval)) return; |