Home | History | Annotate | Line # | Download | only in include
      1 /*	$NetBSD: lber_pvt.h,v 1.4 2025/09/05 21:16:19 christos Exp $	*/
      2 
      3 /* $OpenLDAP$ */
      4 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
      5  *
      6  * Copyright 1998-2024 The OpenLDAP Foundation.
      7  * All rights reserved.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted only as authorized by the OpenLDAP
     11  * Public License.
     12  *
     13  * A copy of this license is available in file LICENSE in the
     14  * top-level directory of the distribution or, alternatively, at
     15  * <http://www.OpenLDAP.org/license.html>.
     16  */
     17 
     18 /*
     19  * lber_pvt.h - Header for ber_pvt_ functions.
     20  * These are meant to be internal to OpenLDAP Software.
     21  */
     22 
     23 #ifndef _LBER_PVT_H
     24 #define _LBER_PVT_H 1
     25 
     26 #include <lber.h>
     27 
     28 LDAP_BEGIN_DECL
     29 
     30 /* for allocating aligned buffers (on the stack) */
     31 #define LBER_ALIGNED_BUFFER(uname,size) \
     32 	union uname { \
     33 		char buffer[size]; \
     34 		/* force alignment */ \
     35 		int ialign; \
     36 		long lalign; \
     37 		float falign; \
     38 		double dalign; \
     39 		char* palign; \
     40 	}
     41 
     42 #define LBER_ELEMENT_SIZEOF (256) /* must be >= sizeof(BerElement) */
     43 typedef LBER_ALIGNED_BUFFER(lber_berelement_u,LBER_ELEMENT_SIZEOF)
     44 	BerElementBuffer;
     45 
     46 typedef struct sockbuf_buf {
     47 	ber_len_t		buf_size;
     48 	ber_len_t		buf_ptr;
     49 	ber_len_t		buf_end;
     50 	char			*buf_base;
     51 } Sockbuf_Buf;
     52 
     53 /*
     54  * bprint.c
     55  */
     56 LBER_V( BER_LOG_PRINT_FN ) ber_pvt_log_print;
     57 
     58 LBER_F( int )
     59 ber_pvt_log_printf LDAP_P((
     60 	int errlvl,
     61 	int loglvl,
     62 	const char *fmt,
     63 	... )) LDAP_GCCATTR((format(printf, 3, 4)));
     64 
     65 /*
     66  * sockbuf.c
     67  */
     68 LBER_F( ber_slen_t )
     69 ber_pvt_sb_do_write LDAP_P(( Sockbuf_IO_Desc *sbiod, Sockbuf_Buf *buf_out ));
     70 
     71 LBER_F( void )
     72 ber_pvt_sb_buf_init LDAP_P(( Sockbuf_Buf *buf ));
     73 
     74 LBER_F( void )
     75 ber_pvt_sb_buf_destroy LDAP_P(( Sockbuf_Buf *buf ));
     76 
     77 LBER_F( int )
     78 ber_pvt_sb_grow_buffer LDAP_P(( Sockbuf_Buf *buf, ber_len_t minsize ));
     79 
     80 LBER_F( ber_len_t )
     81 ber_pvt_sb_copy_out LDAP_P(( Sockbuf_Buf *sbb, char *buf, ber_len_t len ));
     82 
     83 LBER_F( int )
     84 ber_pvt_socket_set_nonblock LDAP_P(( ber_socket_t sd, int nb ));
     85 
     86 /*
     87  * memory.c
     88  */
     89 LBER_F( void * )
     90 ber_memalloc_x LDAP_P((
     91 	ber_len_t s, void *ctx));
     92 
     93 LBER_F( void * )
     94 ber_memrealloc_x LDAP_P((
     95 	void* p,
     96 	ber_len_t s, void *ctx ));
     97 
     98 LBER_F( void * )
     99 ber_memcalloc_x LDAP_P((
    100 	ber_len_t n,
    101 	ber_len_t s, void *ctx ));
    102 
    103 LBER_F( void )
    104 ber_memfree_x LDAP_P((
    105 	void* p, void *ctx ));
    106 
    107 LBER_F( void )
    108 ber_memvfree_x LDAP_P((
    109 	void** vector, void *ctx ));
    110 
    111 LBER_F( void )
    112 ber_bvfree_x LDAP_P((
    113 	struct berval *bv, void *ctx ));
    114 
    115 LBER_F( void )
    116 ber_bvecfree_x LDAP_P((
    117 	struct berval **bv, void *ctx ));
    118 
    119 LBER_F( int )
    120 ber_bvecadd_x LDAP_P((
    121 	struct berval ***bvec,
    122 	struct berval *bv, void *ctx ));
    123 
    124 LBER_F( struct berval * )
    125 ber_dupbv_x LDAP_P((
    126 	struct berval *dst, struct berval *src, void *ctx ));
    127 
    128 LBER_F( struct berval * )
    129 ber_str2bv_x LDAP_P((
    130 	LDAP_CONST char *, ber_len_t len, int dup, struct berval *bv, void *ctx));
    131 
    132 LBER_F( struct berval * )
    133 ber_mem2bv_x LDAP_P((
    134 	LDAP_CONST char *, ber_len_t len, int dup, struct berval *bv, void *ctx));
    135 
    136 LBER_F( char * )
    137 ber_strdup_x LDAP_P((
    138 	LDAP_CONST char *, void *ctx ));
    139 
    140 LBER_F( struct berval * )
    141 ber_bvreplace_x LDAP_P((
    142 	struct berval *dst, LDAP_CONST struct berval *src, void *ctx ));
    143 
    144 LBER_F( void )
    145 ber_bvarray_free_x LDAP_P(( BerVarray p, void *ctx ));
    146 
    147 LBER_F( int )
    148 ber_bvarray_add_x LDAP_P(( BerVarray *p, BerValue *bv, void *ctx ));
    149 
    150 LBER_F( int )
    151 ber_bvarray_dup_x LDAP_P(( BerVarray *dst, BerVarray src, void *ctx ));
    152 
    153 #if 0
    154 #define ber_bvstrcmp(v1,v2) \
    155 	((v1)->bv_len < (v2)->bv_len \
    156 		? -1 : ((v1)->bv_len > (v2)->bv_len \
    157 			? 1 : strncmp((v1)->bv_val, (v2)->bv_val, (v1)->bv_len) ))
    158 #else
    159 	/* avoid strncmp() */
    160 #define ber_bvstrcmp(v1,v2)	ber_bvcmp((v1),(v2))
    161 #endif
    162 
    163 #define ber_bvstrcasecmp(v1,v2) \
    164 	((v1)->bv_len < (v2)->bv_len \
    165 		? -1 : ((v1)->bv_len > (v2)->bv_len \
    166 			? 1 : strncasecmp((v1)->bv_val, (v2)->bv_val, (v1)->bv_len) ))
    167 
    168 #define ber_bvccmp(v1,c) \
    169 	( (v1)->bv_len == 1 && (v1)->bv_val[0] == (c) )
    170 
    171 #define ber_strccmp(s,c) \
    172 	( (s)[0] == (c) && (s)[1] == '\0' )
    173 
    174 #define ber_bvchr(bv,c) \
    175 	((char *) memchr( (bv)->bv_val, (c), (bv)->bv_len ))
    176 
    177 #define ber_bvrchr(bv,c) \
    178 	((char *) lutil_memrchr( (bv)->bv_val, (c), (bv)->bv_len ))
    179 
    180 #define ber_bvchr_post(dst,bv,c) \
    181 	do { \
    182 		(dst)->bv_val = memchr( (bv)->bv_val, (c), (bv)->bv_len ); \
    183 		(dst)->bv_len = (dst)->bv_val ? (bv)->bv_len - ((dst)->bv_val - (bv)->bv_val) : 0; \
    184 	} while (0)
    185 
    186 #define ber_bvchr_pre(dst,bv,c) \
    187 	do { \
    188 		(dst)->bv_val = memchr( (bv)->bv_val, (c), (bv)->bv_len ); \
    189 		(dst)->bv_len = (dst)->bv_val ? ((dst)->bv_val - (bv)->bv_val) : (bv)->bv_len; \
    190 		(dst)->bv_val = (bv)->bv_val; \
    191 	} while (0)
    192 
    193 #define ber_bvrchr_post(dst,bv,c) \
    194 	do { \
    195 		(dst)->bv_val = lutil_memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \
    196 		(dst)->bv_len = (dst)->bv_val ? (bv)->bv_len - ((dst)->bv_val - (bv)->bv_val) : 0; \
    197 	} while (0)
    198 
    199 #define ber_bvrchr_pre(dst,bv,c) \
    200 	do { \
    201 		(dst)->bv_val = lutil_memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \
    202 		(dst)->bv_len = (dst)->bv_val ? ((dst)->bv_val - (bv)->bv_val) : (bv)->bv_len; \
    203 		(dst)->bv_val = (bv)->bv_val; \
    204 	} while (0)
    205 
    206 #define BER_STRLENOF(s)	(sizeof(s)-1)
    207 #define BER_BVC(s)		{ BER_STRLENOF(s), (char *)(s) }
    208 #define BER_BVNULL		{ 0L, NULL }
    209 #define BER_BVZERO(bv) \
    210 	do { \
    211 		(bv)->bv_len = 0; \
    212 		(bv)->bv_val = NULL; \
    213 	} while (0)
    214 #define BER_BVSTR(bv,s)	\
    215 	do { \
    216 		(bv)->bv_len = BER_STRLENOF(s); \
    217 		(bv)->bv_val = (s); \
    218 	} while (0)
    219 #define BER_BVISNULL(bv)	((bv)->bv_val == NULL)
    220 #define BER_BVISEMPTY(bv)	((bv)->bv_len == 0)
    221 
    222 LDAP_END_DECL
    223 
    224 #endif
    225 
    226