X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fac%2Fstring.h;h=861f2c70bd6eeef4cfcc182f11b282c7ccf406a3;hb=5dad37ff1eb89b7d9ee3f13a88c9992bbcfca049;hp=980511d3d0d5b63ac15190d0ac090ae7ae5f360c;hpb=40fa9d36ce344cb67bb3e693eecc01f9d9832cf5;p=openldap diff --git a/include/ac/string.h b/include/ac/string.h index 980511d3d0..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,27 +48,29 @@ #endif /* use ldap_pvt_strtok instead of strtok or strtok_r! */ -LDAP_F(char *) ldap_pvt_strtok LDAP_P(( - char *str, const char *delim, char **pos )); - -LDAP_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 */ - extern char *(strdup)(); + /* Windows does not require this declaration */ + LDAP_LIBC_F(char *) (strdup)(); #endif /* * some systems fail to declare strcasecmp() and strncasecmp() * we need them declared so we can obtain pointers to them */ -extern int (strcasecmp)(); -extern int (strncasecmp)(); + +/* we don't want these declared for Windows or Mingw */ +#ifndef _WIN32 +int (strcasecmp)(); +int (strncasecmp)(); +#endif #ifndef SAFEMEMCPY # if defined( HAVE_MEMMOVE ) @@ -76,4 +83,36 @@ extern 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 */