diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2015-09-01 09:43:55 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-09-01 09:43:55 +0200 |
commit | b7ab2081b1f1f13f0823bb6e8e33884510e105d7 (patch) | |
tree | cb8a8a24e3c13c6a7c5dfe0f3907edba8b7666e9 | |
parent | e582374ce333cb46a9f3f3ab3d75288f5caac0b3 (diff) | |
parent | c170240d3e5fb5cd134790dfc0c6e474fc0e6706 (diff) | |
download | barebox-b7ab2081b1f1f13f0823bb6e8e33884510e105d7.tar.gz barebox-b7ab2081b1f1f13f0823bb6e8e33884510e105d7.tar.xz |
Merge branch 'for-next/param'
-rw-r--r-- | include/globalvar.h | 4 | ||||
-rw-r--r-- | include/param.h | 4 | ||||
-rw-r--r-- | lib/parameter.c | 12 |
3 files changed, 12 insertions, 8 deletions
diff --git a/include/globalvar.h b/include/globalvar.h index 6e10956b89..e77209bd79 100644 --- a/include/globalvar.h +++ b/include/globalvar.h @@ -60,7 +60,7 @@ static inline int globalvar_add_simple_bool(const char *name, } static inline int globalvar_add_simple_enum(const char *name, - int *value, const char **names, int max) + int *value, const char * const *names, int max) { struct param_d *p; @@ -117,7 +117,7 @@ static inline int globalvar_add_simple_bool(const char *name, } static inline int globalvar_add_simple_enum(const char *name, - int *value, const char **names, int max) + int *value, const char * const *names, int max) { return 0; } diff --git a/include/param.h b/include/param.h index 3a851fc552..3fb4740b3a 100644 --- a/include/param.h +++ b/include/param.h @@ -50,7 +50,7 @@ struct param_d *dev_add_param_bool(struct device_d *dev, const char *name, struct param_d *dev_add_param_enum(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - int *value, const char **names, int max, void *priv); + int *value, const char * const *names, int max, void *priv); struct param_d *dev_add_param_int_ro(struct device_d *dev, const char *name, int value, const char *format); @@ -120,7 +120,7 @@ static inline struct param_d *dev_add_param_int(struct device_d *dev, const char static inline struct param_d *dev_add_param_enum(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - int *value, const char **names, int max, void *priv) + int *value, const char * const *names, int max, void *priv) { return ERR_PTR(-ENOSYS); diff --git a/lib/parameter.c b/lib/parameter.c index b23885958b..fd05b49adf 100644 --- a/lib/parameter.c +++ b/lib/parameter.c @@ -389,8 +389,8 @@ struct param_d *dev_add_param_int(struct device_d *dev, const char *name, struct param_enum { struct param_d param; - int *value; - const char **names; + unsigned int *value; + const char * const *names; int num_names; int (*set)(struct param_d *p, void *priv); int (*get)(struct param_d *p, void *priv); @@ -441,7 +441,11 @@ static const char *param_enum_get(struct device_d *dev, struct param_d *p) } free(p->value); - p->value = strdup(pe->names[*pe->value]); + + if (*pe->value >= pe->num_names) + p->value = asprintf("invalid:%d", *pe->value); + else + p->value = strdup(pe->names[*pe->value]); return p->value; } @@ -467,7 +471,7 @@ static void param_enum_info(struct param_d *p) struct param_d *dev_add_param_enum(struct device_d *dev, const char *name, int (*set)(struct param_d *p, void *priv), int (*get)(struct param_d *p, void *priv), - int *value, const char **names, int num_names, void *priv) + int *value, const char * const *names, int num_names, void *priv) { struct param_enum *pe; struct param_d *p; |