X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fac%2Fstring.h;h=861f2c70bd6eeef4cfcc182f11b282c7ccf406a3;hb=5dad37ff1eb89b7d9ee3f13a88c9992bbcfca049;hp=4fe3b4a9b654f1e3355aad0d97caeab4d4fdac7f;hpb=eaaea51b538450656e746708732cfd36f45f77e7;p=openldap diff --git a/include/ac/string.h b/include/ac/string.h index 4fe3b4a9b6..861f2c70bd 100644 --- a/include/ac/string.h +++ b/include/ac/string.h @@ -1,13 +1,17 @@ /* Generic string.h */ /* $OpenLDAP$ */ -/* - * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2012 The OpenLDAP Foundation. * All rights reserved. * - * Redistribution and use in source and binary forms are permitted only - * as authorized by the OpenLDAP Public License. A copy of this - * license is available at http://www.OpenLDAP.org/license.html or - * in file LICENSE in the top-level directory of the distribution. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #ifndef _AC_STRING_H @@ -19,7 +23,8 @@ #else # ifdef HAVE_STRING_H # include -# elif HAVE_STRINGS_H +# endif +# if defined(HAVE_STRINGS_H) && (!defined(HAVE_STRING_H) || defined(BOTH_STRINGS_H)) # include # endif @@ -43,18 +48,17 @@ #endif /* use ldap_pvt_strtok instead of strtok or strtok_r! */ -LIBLDAP_F(char *) ldap_pvt_strtok LDAP_P(( char *str, const char *delim, - char **pos )); - -LIBLDAP_F(char *) ldap_pvt_strdup LDAP_P(( const char * s )); +LDAP_F(char *) ldap_pvt_strtok LDAP_P(( char *str, + const char *delim, char **pos )); #ifndef HAVE_STRDUP /* strdup() is missing, declare our own version */ # undef strdup -# define strdup(s) ldap_pvt_strdup(s) -#else +# define strdup(s) ber_strdup(s) +#elif !defined(_WIN32) /* some systems fail to declare strdup */ - LIBC_F(char *) (strdup)(); + /* Windows does not require this declaration */ + LDAP_LIBC_F(char *) (strdup)(); #endif /* @@ -62,9 +66,11 @@ LIBLDAP_F(char *) ldap_pvt_strdup LDAP_P(( const char * s )); * we need them declared so we can obtain pointers to them */ -/* In Mingw32, strcasecmp is not in the C library, so we don't LIBC_F it */ +/* we don't want these declared for Windows or Mingw */ +#ifndef _WIN32 int (strcasecmp)(); int (strncasecmp)(); +#endif #ifndef SAFEMEMCPY # if defined( HAVE_MEMMOVE ) @@ -77,4 +83,36 @@ int (strncasecmp)(); # endif #endif +#define AC_MEMCPY( d, s, n ) (SAFEMEMCPY((d),(s),(n))) +#define AC_FMEMCPY( d, s, n ) do { \ + if((n) == 1) *((char*)(d)) = *((char*)(s)); \ + else AC_MEMCPY( (d), (s), (n) ); \ + } while(0) + +#ifdef NEED_MEMCMP_REPLACEMENT + int (lutil_memcmp)(const void *b1, const void *b2, size_t len); +#define memcmp lutil_memcmp +#endif + +void *(lutil_memrchr)(const void *b, int c, size_t n); +/* GNU extension (glibc >= 2.1.91), only declared when defined(_GNU_SOURCE) */ +#if defined(HAVE_MEMRCHR) && defined(_GNU_SOURCE) +#define lutil_memrchr(b, c, n) memrchr(b, c, n) +#endif /* ! HAVE_MEMRCHR */ + +#define STRLENOF(s) (sizeof(s)-1) + +#if defined( HAVE_NONPOSIX_STRERROR_R ) +# define AC_STRERROR_R(e,b,l) (strerror_r((e), (b), (l))) +#elif defined( HAVE_STRERROR_R ) +# define AC_STRERROR_R(e,b,l) (strerror_r((e), (b), (l)) == 0 ? (b) : "Unknown error") +#elif defined( HAVE_SYS_ERRLIST ) +# define AC_STRERROR_R(e,b,l) ((e) > -1 && (e) < sys_nerr \ + ? sys_errlist[(e)] : "Unknown error" ) +#elif defined( HAVE_STRERROR ) +# define AC_STRERROR_R(e,b,l) (strerror(e)) /* NOTE: may be NULL */ +#else +# define AC_STRERROR_R(e,b,l) ("Unknown error") +#endif + #endif /* _AC_STRING_H */