diff options
author | Swen Schillig <swen@linux.ibm.com> | 2019-04-11 11:22:02 +0200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2019-06-30 11:32:18 +0000 |
commit | f2997ad677dbbe96bd2ea73c7632e7e81876f1e8 (patch) | |
tree | bec59c44e4faf96a1c309f45509e4ab14f2b4e52 /lib/util | |
parent | 7fd0cd02b75782dc6e9a4755d3404e738a92e719 (diff) | |
download | samba-f2997ad677dbbe96bd2ea73c7632e7e81876f1e8.tar.gz |
lib: Prepare for strtoul_err(), strtoull_err() API change
In order to still be bisectable when changing the API for the wrappers
strtoul_err() and strtoull_err() some preparations need to be performed.
Signed-off-by: Swen Schillig <swen@linux.ibm.com>
Reviewed-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Christof Schmitt <cs@samba.org>
Diffstat (limited to 'lib/util')
-rw-r--r-- | lib/util/util.c | 34 | ||||
-rw-r--r-- | lib/util/util.h | 9 |
2 files changed, 31 insertions, 12 deletions
diff --git a/lib/util/util.c b/lib/util/util.c index 83af14cac1e..ebb418465c3 100644 --- a/lib/util/util.c +++ b/lib/util/util.c @@ -55,8 +55,13 @@ * @param endptr [optional] reference to remainder of the string * @param base base of the numbering scheme * @param err error occured during conversion + * @flags controlling conversion feature * @result result of the conversion as provided by strtoul * + * The following flags are supported + * SMB_STR_STANDARD # raise error if negative or non-numeric + * SMB_STR_ALLOW_NEGATIVE # allow strings with a leading "-" + * * The following errors are detected * - wrong base * - value overflow @@ -64,7 +69,7 @@ * - no conversion due to empty string or not representing a number */ unsigned long int -strtoul_err(const char *nptr, char **endptr, int base, int *err) +smb_strtoul(const char *nptr, char **endptr, int base, int *err, int flags) { unsigned long int val; int saved_errno = errno; @@ -93,10 +98,12 @@ strtoul_err(const char *nptr, char **endptr, int base, int *err) return val; } - /* did we convert a negative "number" ? */ - needle = strchr(nptr, '-'); - if (needle != NULL && needle < tmp_endptr) { - *err = EINVAL; + if ((flags & SMB_STR_ALLOW_NEGATIVE ) == 0) { + /* did we convert a negative "number" ? */ + needle = strchr(nptr, '-'); + if (needle != NULL && needle < tmp_endptr) { + *err = EINVAL; + } } errno = saved_errno; @@ -110,8 +117,13 @@ strtoul_err(const char *nptr, char **endptr, int base, int *err) * @param endptr [optional] reference to remainder of the string * @param base base of the numbering scheme * @param err error occured during conversion + * @flags controlling conversion feature * @result result of the conversion as provided by strtoull * + * The following flags are supported + * SMB_STR_STANDARD # raise error if negative or non-numeric + * SMB_STR_ALLOW_NEGATIVE # allow strings with a leading "-" + * * The following errors are detected * - wrong base * - value overflow @@ -119,7 +131,7 @@ strtoul_err(const char *nptr, char **endptr, int base, int *err) * - no conversion due to empty string or not representing a number */ unsigned long long int -strtoull_err(const char *nptr, char **endptr, int base, int *err) +smb_strtoull(const char *nptr, char **endptr, int base, int *err, int flags) { unsigned long long int val; int saved_errno = errno; @@ -148,10 +160,12 @@ strtoull_err(const char *nptr, char **endptr, int base, int *err) return val; } - /* did we convert a negative "number" ? */ - needle = strchr(nptr, '-'); - if (needle != NULL && needle < tmp_endptr) { - *err = EINVAL; + if ((flags & SMB_STR_ALLOW_NEGATIVE ) == 0) { + /* did we convert a negative "number" ? */ + needle = strchr(nptr, '-'); + if (needle != NULL && needle < tmp_endptr) { + *err = EINVAL; + } } errno = saved_errno; diff --git a/lib/util/util.h b/lib/util/util.h index 2ed036358d0..d65d8c9ff24 100644 --- a/lib/util/util.h +++ b/lib/util/util.h @@ -3,6 +3,7 @@ Utility functions for Samba Copyright (C) Andrew Tridgell 1992-1999 Copyright (C) Jelmer Vernooij 2005 + Copyright (C) Swen Schillig 2019 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,11 +30,15 @@ SMB_STR_ALLOW_NEGATIVE) unsigned long int -strtoul_err(const char *nptr, char **endptr, int base, int *err); +smb_strtoul(const char *nptr, char **endptr, int base, int *err, int flags); unsigned long long int -strtoull_err(const char *nptr, char **endptr, int base, int *err); +smb_strtoull(const char *nptr, char **endptr, int base, int *err, int flags); +#define strtoul_err(nptr, endptr, base, err) \ + smb_strtoul(nptr, endptr, base, err, SMB_STR_STANDARD) +#define strtoull_err(nptr, endptr, base, err) \ + smb_strtoull(nptr, endptr, base, err, SMB_STR_STANDARD) /** * Write dump of binary data to a callback |