1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +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 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;

View File

@ -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