summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
authorSwen Schillig <swen@linux.ibm.com>2019-04-11 11:22:02 +0200
committerRalph Boehme <slow@samba.org>2019-06-30 11:32:18 +0000
commitf2997ad677dbbe96bd2ea73c7632e7e81876f1e8 (patch)
treebec59c44e4faf96a1c309f45509e4ab14f2b4e52 /lib/util
parent7fd0cd02b75782dc6e9a4755d3404e738a92e719 (diff)
downloadsamba-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.c34
-rw-r--r--lib/util/util.h9
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