3 * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
13 struct lber_options ber_int_options = {
14 LBER_UNINITIALIZED, 0, 0 };
22 LDAP_CONST BerElement *ber;
23 LDAP_CONST Sockbuf *sb;
25 ber_int_options.lbo_valid = LBER_INITIALIZED;
27 if(outvalue == NULL) {
28 /* no place to get to */
29 ber_errno = LBER_ERROR_PARAM;
30 return LBER_OPT_ERROR;
34 if(option == LBER_OPT_BER_DEBUG) {
35 * (int *) outvalue = ber_int_debug;
36 return LBER_OPT_SUCCESS;
39 ber_errno = LBER_ERROR_PARAM;
40 return LBER_OPT_ERROR;
47 case LBER_OPT_BER_OPTIONS:
48 assert( BER_VALID( ber ) );
49 * (int *) outvalue = ber->ber_options;
50 return LBER_OPT_SUCCESS;
52 case LBER_OPT_BER_DEBUG:
53 assert( BER_VALID( ber ) );
54 * (int *) outvalue = ber->ber_debug;
55 return LBER_OPT_SUCCESS;
57 case LBER_OPT_BER_REMAINING_BYTES:
58 *((ber_len_t *) outvalue) = ber->ber_end - ber->ber_ptr;
59 return LBER_OPT_SUCCESS;
61 case LBER_OPT_BER_TOTAL_BYTES:
62 *((ber_len_t *) outvalue) = ber->ber_end - ber->ber_buf;
63 return LBER_OPT_SUCCESS;
65 case LBER_OPT_BER_BYTES_TO_WRITE:
66 *((ber_len_t *) outvalue) = ber->ber_ptr - ber->ber_buf;
67 return LBER_OPT_SUCCESS;
71 ber_errno = LBER_ERROR_PARAM;
75 return LBER_OPT_ERROR;
82 LDAP_CONST void *invalue)
87 if( (ber_int_options.lbo_valid == LBER_UNINITIALIZED)
88 && ( ber_int_memory_fns == NULL )
89 && ( option == LBER_OPT_MEMORY_FNS )
90 && ( invalue != NULL ))
92 const BerMemoryFunctions *f =
93 (const BerMemoryFunctions *) invalue;
95 /* make sure all functions are provided */
96 if(!( f->bmf_malloc && f->bmf_calloc
97 && f->bmf_realloc && f->bmf_free ))
99 ber_errno = LBER_ERROR_PARAM;
100 return LBER_OPT_ERROR;
103 ber_int_memory_fns = (BerMemoryFunctions *)
104 (*(f->bmf_malloc))(sizeof(BerMemoryFunctions));
106 if ( ber_int_memory_fns == NULL ) {
107 ber_errno = LBER_ERROR_MEMORY;
108 return LBER_OPT_ERROR;
111 memcpy(ber_int_memory_fns, f, sizeof(BerMemoryFunctions));
113 ber_int_options.lbo_valid = LBER_INITIALIZED;
114 return LBER_OPT_SUCCESS;
117 ber_int_options.lbo_valid = LBER_INITIALIZED;
119 if(invalue == NULL) {
120 /* no place to set from */
121 ber_errno = LBER_ERROR_PARAM;
122 return LBER_OPT_ERROR;
126 if(option == LBER_OPT_BER_DEBUG) {
127 ber_int_debug = * (const int *) invalue;
128 return LBER_OPT_SUCCESS;
130 } else if(option == LBER_OPT_LOG_PRINT_FN) {
131 ber_pvt_log_print = (BER_LOG_PRINT_FN) invalue;
132 return LBER_OPT_SUCCESS;
135 ber_errno = LBER_ERROR_PARAM;
136 return LBER_OPT_ERROR;
143 case LBER_OPT_BER_OPTIONS:
144 assert( BER_VALID( ber ) );
145 ber->ber_options = * (const int *) invalue;
146 return LBER_OPT_SUCCESS;
148 case LBER_OPT_BER_DEBUG:
149 assert( BER_VALID( ber ) );
150 ber->ber_debug = * (const int *) invalue;
151 return LBER_OPT_SUCCESS;
153 case LBER_OPT_BER_REMAINING_BYTES:
154 ber->ber_end = &ber->ber_ptr[* (const ber_len_t *) invalue];
155 return LBER_OPT_SUCCESS;
157 case LBER_OPT_BER_TOTAL_BYTES:
158 ber->ber_end = &ber->ber_buf[* (const ber_len_t *) invalue];
159 return LBER_OPT_SUCCESS;
161 case LBER_OPT_BER_BYTES_TO_WRITE:
162 ber->ber_ptr = &ber->ber_buf[* (const ber_len_t *) invalue];
163 return LBER_OPT_SUCCESS;
167 ber_errno = LBER_ERROR_PARAM;
171 return LBER_OPT_ERROR;