mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-02-17 14:00:30 +08:00
ITS#6622
This commit is contained in:
parent
be86494186
commit
a74093d687
1
CHANGES
1
CHANGES
@ -36,6 +36,7 @@ OpenLDAP 2.4.24 Engineering
|
||||
Fixed contrib/nssov to only close socket on shutdown (ITS#6676)
|
||||
Fixed contrib/nssov multi platform support (ITS#6604)
|
||||
Build Environment
|
||||
Added support for [unsigned] long long (ITS#6622)
|
||||
Fixed slapd-tester EOF handling (ITS#6723)
|
||||
Fixed slapd-tesster filter initialization (ITS#6735)
|
||||
Documentation
|
||||
|
@ -2434,6 +2434,7 @@ AC_CHECK_FUNCS( \
|
||||
strtoq \
|
||||
strtouq \
|
||||
strtoll \
|
||||
strtoull \
|
||||
strspn \
|
||||
sysconf \
|
||||
waitpid \
|
||||
|
@ -299,6 +299,20 @@ lutil_atoulx( unsigned long *v, const char *s, int x );
|
||||
#define lutil_atol(v, s) lutil_atolx((v), (s), 10)
|
||||
#define lutil_atoul(v, s) lutil_atoulx((v), (s), 10)
|
||||
|
||||
#ifdef HAVE_LONG_LONG
|
||||
#if defined(HAVE_STRTOLL) || defined(HAVE_STRTOQ)
|
||||
LDAP_LUTIL_F (int)
|
||||
lutil_atollx( long long *v, const char *s, int x );
|
||||
#define lutil_atoll(v, s) lutil_atollx((v), (s), 10)
|
||||
#endif /* HAVE_STRTOLL || HAVE_STRTOQ */
|
||||
|
||||
#if defined(HAVE_STRTOULL) || defined(HAVE_STRTOUQ)
|
||||
LDAP_LUTIL_F (int)
|
||||
lutil_atoullx( unsigned long long *v, const char *s, int x );
|
||||
#define lutil_atoull(v, s) lutil_atoullx((v), (s), 10)
|
||||
#endif /* HAVE_STRTOULL || HAVE_STRTOUQ */
|
||||
#endif /* HAVE_LONG_LONG */
|
||||
|
||||
LDAP_LUTIL_F (int)
|
||||
lutil_str2bin( struct berval *in, struct berval *out, void *ctx );
|
||||
|
||||
|
@ -604,6 +604,9 @@
|
||||
/* Define to 1 if you have the `strtoul' function. */
|
||||
#undef HAVE_STRTOUL
|
||||
|
||||
/* Define to 1 if you have the `strtoull' function. */
|
||||
#undef HAVE_STRTOULL
|
||||
|
||||
/* Define to 1 if you have the `strtouq' function. */
|
||||
#undef HAVE_STRTOUQ
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "portable.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <ac/stdlib.h>
|
||||
#include <ac/stdarg.h>
|
||||
@ -514,17 +515,28 @@ lutil_atoux( unsigned *v, const char *s, int x )
|
||||
int
|
||||
lutil_atolx( long *v, const char *s, int x )
|
||||
{
|
||||
char *next;
|
||||
long l;
|
||||
char *next;
|
||||
long l;
|
||||
int save_errno;
|
||||
|
||||
assert( s != NULL );
|
||||
assert( v != NULL );
|
||||
|
||||
if ( isspace( s[ 0 ] ) ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
l = strtol( s, &next, x );
|
||||
save_errno = errno;
|
||||
if ( next == s || next[ 0 ] != '\0' ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( ( l == LONG_MIN || l == LONG_MAX ) && save_errno != 0 ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
*v = l;
|
||||
|
||||
return 0;
|
||||
@ -533,27 +545,117 @@ lutil_atolx( long *v, const char *s, int x )
|
||||
int
|
||||
lutil_atoulx( unsigned long *v, const char *s, int x )
|
||||
{
|
||||
char *next;
|
||||
unsigned long ul;
|
||||
char *next;
|
||||
unsigned long ul;
|
||||
int save_errno;
|
||||
|
||||
assert( s != NULL );
|
||||
assert( v != NULL );
|
||||
|
||||
/* strtoul() has an odd interface */
|
||||
if ( s[ 0 ] == '-' ) {
|
||||
if ( s[ 0 ] == '-' || isspace( s[ 0 ] ) ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
ul = strtoul( s, &next, x );
|
||||
save_errno = errno;
|
||||
if ( next == s || next[ 0 ] != '\0' ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
//#ifdef ULONG_MAX
|
||||
if ( ( ul == 0 || ul == ULONG_MAX ) && save_errno != 0 ) {
|
||||
return -1;
|
||||
}
|
||||
//#endif /* ULONG_MAX */
|
||||
|
||||
*v = ul;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LONG_LONG
|
||||
#if defined(HAVE_STRTOLL) || defined(HAVE_STRTOQ)
|
||||
int
|
||||
lutil_atollx( long long *v, const char *s, int x )
|
||||
{
|
||||
char *next;
|
||||
long long ll;
|
||||
int save_errno;
|
||||
|
||||
assert( s != NULL );
|
||||
assert( v != NULL );
|
||||
|
||||
if ( isspace( s[ 0 ] ) ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
#ifdef HAVE_STRTOLL
|
||||
ll = strtoll( s, &next, x );
|
||||
#else /* HAVE_STRTOQ */
|
||||
ll = (unsigned long long)strtoq( s, &next, x );
|
||||
#endif /* HAVE_STRTOQ */
|
||||
save_errno = errno;
|
||||
if ( next == s || next[ 0 ] != '\0' ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* LLONG_MIN, LLONG_MAX are C99 only */
|
||||
#if defined (LLONG_MIN) && defined(LLONG_MAX)
|
||||
if ( ( ll == LLONG_MIN || ll == LLONG_MAX ) && save_errno != 0 ) {
|
||||
return -1;
|
||||
}
|
||||
#endif /* LLONG_MIN && LLONG_MAX */
|
||||
|
||||
*v = ll;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_STRTOLL || HAVE_STRTOQ */
|
||||
|
||||
#if defined(HAVE_STRTOULL) || defined(HAVE_STRTOUQ)
|
||||
int
|
||||
lutil_atoullx( unsigned long long *v, const char *s, int x )
|
||||
{
|
||||
char *next;
|
||||
unsigned long long ull;
|
||||
int save_errno;
|
||||
|
||||
assert( s != NULL );
|
||||
assert( v != NULL );
|
||||
|
||||
/* strtoull() has an odd interface */
|
||||
if ( s[ 0 ] == '-' || isspace( s[ 0 ] ) ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
#ifdef HAVE_STRTOULL
|
||||
ull = strtoull( s, &next, x );
|
||||
#else /* HAVE_STRTOUQ */
|
||||
ull = (unsigned long long)strtouq( s, &next, x );
|
||||
#endif /* HAVE_STRTOUQ */
|
||||
save_errno = errno;
|
||||
if ( next == s || next[ 0 ] != '\0' ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* ULLONG_MAX is C99 only */
|
||||
#if defined(ULLONG_MAX)
|
||||
if ( ( ull == 0 || ull == ULLONG_MAX ) && save_errno != 0 ) {
|
||||
return -1;
|
||||
}
|
||||
#endif /* ULLONG_MAX */
|
||||
|
||||
*v = ull;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_STRTOULL || HAVE_STRTOUQ */
|
||||
#endif /* HAVE_LONG_LONG */
|
||||
|
||||
/* Multiply an integer by 100000000 and add new */
|
||||
typedef struct lutil_int_decnum {
|
||||
unsigned char *buf;
|
||||
|
Loading…
Reference in New Issue
Block a user