1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

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>
This commit is contained in:
Swen Schillig 2019-04-11 11:22:02 +02:00 committed by Ralph Boehme
parent 7fd0cd02b7
commit f2997ad677
2 changed files with 31 additions and 12 deletions

View File

@ -55,8 +55,13 @@
* @param endptr [optional] reference to remainder of the string * @param endptr [optional] reference to remainder of the string
* @param base base of the numbering scheme * @param base base of the numbering scheme
* @param err error occured during conversion * @param err error occured during conversion
* @flags controlling conversion feature
* @result result of the conversion as provided by strtoul * @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 * The following errors are detected
* - wrong base * - wrong base
* - value overflow * - value overflow
@ -64,7 +69,7 @@
* - no conversion due to empty string or not representing a number * - no conversion due to empty string or not representing a number
*/ */
unsigned long int 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; unsigned long int val;
int saved_errno = errno; int saved_errno = errno;
@ -93,10 +98,12 @@ strtoul_err(const char *nptr, char **endptr, int base, int *err)
return val; return val;
} }
/* did we convert a negative "number" ? */ if ((flags & SMB_STR_ALLOW_NEGATIVE ) == 0) {
needle = strchr(nptr, '-'); /* did we convert a negative "number" ? */
if (needle != NULL && needle < tmp_endptr) { needle = strchr(nptr, '-');
*err = EINVAL; if (needle != NULL && needle < tmp_endptr) {
*err = EINVAL;
}
} }
errno = saved_errno; 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 endptr [optional] reference to remainder of the string
* @param base base of the numbering scheme * @param base base of the numbering scheme
* @param err error occured during conversion * @param err error occured during conversion
* @flags controlling conversion feature
* @result result of the conversion as provided by strtoull * @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 * The following errors are detected
* - wrong base * - wrong base
* - value overflow * - 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 * - no conversion due to empty string or not representing a number
*/ */
unsigned long long int 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; unsigned long long int val;
int saved_errno = errno; int saved_errno = errno;
@ -148,10 +160,12 @@ strtoull_err(const char *nptr, char **endptr, int base, int *err)
return val; return val;
} }
/* did we convert a negative "number" ? */ if ((flags & SMB_STR_ALLOW_NEGATIVE ) == 0) {
needle = strchr(nptr, '-'); /* did we convert a negative "number" ? */
if (needle != NULL && needle < tmp_endptr) { needle = strchr(nptr, '-');
*err = EINVAL; if (needle != NULL && needle < tmp_endptr) {
*err = EINVAL;
}
} }
errno = saved_errno; errno = saved_errno;

View File

@ -3,6 +3,7 @@
Utility functions for Samba Utility functions for Samba
Copyright (C) Andrew Tridgell 1992-1999 Copyright (C) Andrew Tridgell 1992-1999
Copyright (C) Jelmer Vernooij 2005 Copyright (C) Jelmer Vernooij 2005
Copyright (C) Swen Schillig 2019
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -29,11 +30,15 @@
SMB_STR_ALLOW_NEGATIVE) SMB_STR_ALLOW_NEGATIVE)
unsigned long int 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 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 * Write dump of binary data to a callback