From 5ee4ad2229b676ff521a1da9b8b32f474450f56c Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 23 Sep 2013 12:49:04 +0200 Subject: environment variables: introduce new helpers This introduces some new environment variable helpers and updates the existing ones. Newly introduced are: getenv_bool: read a bool variable getenv_ul: read an unsigned long variable getenev_uint: read an unsigned int variable getenv_nonempty: like normal getenv, but does return NULL instead of an empty string All new helpers take a pointer to the value. This value is only modified when the variable exists. This allows the following programming scheme: unsigned int myvalue = sanedefault; getenv_uint("myvalue", &myvalue); So without checking the return value myvalue contains the best possible value. getenv_ull is updated to this scheme. Signed-off-by: Sascha Hauer --- common/env.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 5 deletions(-) (limited to 'common/env.c') diff --git a/common/env.c b/common/env.c index 33a871f7eb..748b655a6b 100644 --- a/common/env.c +++ b/common/env.c @@ -267,13 +267,74 @@ void export_env_ull(const char *name, unsigned long long val) } EXPORT_SYMBOL(export_env_ull); -unsigned long long getenv_ull(const char *name) +/* + * Like regular getenv, but never returns an empty string. + * If the string is empty, NULL is returned instead + */ +const char *getenv_nonempty(const char *var) { - const char *valstr = getenv(name); + const char *val = getenv(var); - if (!valstr) - return 0; + if (val && *val) + return val; - return simple_strtoull(valstr, NULL, 0); + return NULL; +} +EXPORT_SYMBOL(getenv_nonempty); + +int getenv_ull(const char *var , unsigned long long *val) +{ + const char *valstr = getenv(var); + + if (!valstr || !*valstr) + return -EINVAL; + + *val = simple_strtoull(valstr, NULL, 0); + + return 0; } EXPORT_SYMBOL(getenv_ull); + +int getenv_ul(const char *var , unsigned long *val) +{ + const char *valstr = getenv(var); + + if (!valstr || !*valstr) + return -EINVAL; + + *val = simple_strtoul(valstr, NULL, 0); + + return 0; +} +EXPORT_SYMBOL(getenv_ul); + +int getenv_uint(const char *var , unsigned int *val) +{ + const char *valstr = getenv(var); + + if (!valstr || !*valstr) + return -EINVAL; + + *val = simple_strtoul(valstr, NULL, 0); + + return 0; +} +EXPORT_SYMBOL(getenv_uint); + +int getenv_bool(const char *var, int *val) +{ + const char *valstr = getenv(var); + + if (!valstr || !*valstr) + return -EINVAL; + + if (!*valstr) + *val = false; + else if (*valstr == '0') + *val = false; + else + *val = true; + + return 0; +} +EXPORT_SYMBOL(getenv_bool); -- cgit v1.2.3