X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Flber_pvt.h;h=4cf90bc6614464811ebaab51698dbb5a39d1c0f5;hb=09abc9f8ae2485adb67dbd91be4d02a4b4bb454c;hp=e978f15bc24947013ebd49b430172e9920ca5321;hpb=a2f36ae2d3ef4de8cd75d2c7da5c202e03edb8f0;p=openldap diff --git a/include/lber_pvt.h b/include/lber_pvt.h index e978f15bc2..4cf90bc661 100644 --- a/include/lber_pvt.h +++ b/include/lber_pvt.h @@ -1,17 +1,21 @@ /* $OpenLDAP$ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2006 The OpenLDAP Foundation. * All rights reserved. * * 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 at - * http://www.OpenLDAP.org/license.html or in file LICENSE in the - * top-level directory of the distribution. + * Public License. + * + * A copy of this license is available in file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ + /* - * lber_pvt.h - Header for ber_pvt_ functions. These are meant to be used - * by the OpenLDAP distribution only. + * lber_pvt.h - Header for ber_pvt_ functions. + * These are meant to be internal to OpenLDAP Software. */ #ifndef _LBER_PVT_H @@ -22,10 +26,9 @@ LDAP_BEGIN_DECL /* for allocating aligned buffers (on the stack) */ -#define LBER_ALIGN_BUFFER(uname,size) \ - union LDAP_CONCAT(lber_,uname) { \ +#define LBER_ALIGNED_BUFFER(uname,size) \ + union uname { \ char buffer[size]; \ - \ /* force alignment */ \ int ialign; \ long lalign; \ @@ -35,7 +38,8 @@ LDAP_BEGIN_DECL } #define LBER_ELEMENT_SIZEOF (256) /* must be >= sizeof(BerElement) */ -typedef LBER_ALIGN_BUFFER(berelement_u,LBER_ELEMENT_SIZEOF) BerElementBuffer; +typedef LBER_ALIGNED_BUFFER(lber_berelement_u,LBER_ELEMENT_SIZEOF) + BerElementBuffer; typedef struct sockbuf_buf { ber_len_t buf_size; @@ -131,6 +135,10 @@ LBER_F( char * ) ber_strdup_x LDAP_P(( LDAP_CONST char *, void *ctx )); +LBER_F( struct berval * ) +ber_bvreplace_x LDAP_P(( + struct berval *dst, LDAP_CONST struct berval *src, void *ctx )); + LBER_F( void ) ber_bvarray_free_x LDAP_P(( BerVarray p, void *ctx )); @@ -159,10 +167,51 @@ ber_bvarray_add_x LDAP_P(( BerVarray *p, BerValue *bv, void *ctx )); ( (s)[0] == (c) && (s)[1] == '\0' ) #define ber_bvchr(bv,c) \ - memchr( (bv)->bv_val, (c), (bv)->bv_len ) - -#define BER_BVC(x) { sizeof( (x) ) - 1, (x) } -#define BER_BVNULL { 0L, NULL } + ((char *) memchr( (bv)->bv_val, (c), (bv)->bv_len )) + +#define ber_bvrchr(bv,c) \ + ((char *) memrchr( (bv)->bv_val, (c), (bv)->bv_len )) + +#define ber_bvchr_post(dst,bv,c) \ + do { \ + (dst)->bv_val = memchr( (bv)->bv_val, (c), (bv)->bv_len ); \ + (dst)->bv_len = (dst)->bv_val ? (bv)->bv_len - ((dst)->bv_val - (bv)->bv_val) : 0; \ + } while (0) + +#define ber_bvchr_pre(dst,bv,c) \ + do { \ + (dst)->bv_val = memchr( (bv)->bv_val, (c), (bv)->bv_len ); \ + (dst)->bv_len = (dst)->bv_val ? ((dst)->bv_val - (bv)->bv_val) : (bv)->bv_len; \ + (dst)->bv_val = (bv)->bv_val; \ + } while (0) + +#define ber_bvrchr_post(dst,bv,c) \ + do { \ + (dst)->bv_val = memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \ + (dst)->bv_len = (dst)->bv_val ? (bv)->bv_len - ((dst)->bv_val - (bv)->bv_val) : 0; \ + } while (0) + +#define ber_bvrchr_pre(dst,bv,c) \ + do { \ + (dst)->bv_val = memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \ + (dst)->bv_len = (dst)->bv_val ? ((dst)->bv_val - (bv)->bv_val) : (bv)->bv_len; \ + (dst)->bv_val = (bv)->bv_val; \ + } while (0) + +#define BER_BVC(s) { STRLENOF(s), (s) } +#define BER_BVNULL { 0L, NULL } +#define BER_BVZERO(bv) \ + do { \ + (bv)->bv_len = 0; \ + (bv)->bv_val = NULL; \ + } while (0) +#define BER_BVSTR(bv,s) \ + do { \ + (bv)->bv_len = STRLENOF(s); \ + (bv)->bv_val = (s); \ + } while (0) +#define BER_BVISNULL(bv) ((bv)->bv_val == NULL) +#define BER_BVISEMPTY(bv) ((bv)->bv_len == 0) LDAP_END_DECL