3 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
13 extern void * ber_pvt_err_file; /* bprint.c */
15 struct lber_options ber_int_options = {
16 LBER_UNINITIALIZED, 0, 0 };
24 LDAP_CONST BerElement *ber;
25 LDAP_CONST Sockbuf *sb;
27 ber_int_options.lbo_valid = LBER_INITIALIZED;
29 if(outvalue == NULL) {
30 /* no place to get to */
31 ber_errno = LBER_ERROR_PARAM;
32 return LBER_OPT_ERROR;
36 if(option == LBER_OPT_BER_DEBUG) {
37 * (int *) outvalue = ber_int_debug;
38 return LBER_OPT_SUCCESS;
41 ber_errno = LBER_ERROR_PARAM;
42 return LBER_OPT_ERROR;
49 case LBER_OPT_BER_OPTIONS:
50 assert( BER_VALID( ber ) );
51 * (int *) outvalue = ber->ber_options;
52 return LBER_OPT_SUCCESS;
54 case LBER_OPT_BER_DEBUG:
55 assert( BER_VALID( ber ) );
56 * (int *) outvalue = ber->ber_debug;
57 return LBER_OPT_SUCCESS;
59 case LBER_OPT_BER_REMAINING_BYTES:
60 *((ber_len_t *) outvalue) = ber->ber_end - ber->ber_ptr;
61 return LBER_OPT_SUCCESS;
63 case LBER_OPT_BER_TOTAL_BYTES:
64 *((ber_len_t *) outvalue) = ber->ber_end - ber->ber_buf;
65 return LBER_OPT_SUCCESS;
67 case LBER_OPT_BER_BYTES_TO_WRITE:
68 *((ber_len_t *) outvalue) = ber->ber_ptr - ber->ber_buf;
69 return LBER_OPT_SUCCESS;
73 ber_errno = LBER_ERROR_PARAM;
77 return LBER_OPT_ERROR;
84 LDAP_CONST void *invalue)
89 if( (ber_int_options.lbo_valid == LBER_UNINITIALIZED)
90 && ( ber_int_memory_fns == NULL )
91 && ( option == LBER_OPT_MEMORY_FNS )
92 && ( invalue != NULL ))
94 const BerMemoryFunctions *f =
95 (const BerMemoryFunctions *) invalue;
97 /* make sure all functions are provided */
98 if(!( f->bmf_malloc && f->bmf_calloc
99 && f->bmf_realloc && f->bmf_free ))
101 ber_errno = LBER_ERROR_PARAM;
102 return LBER_OPT_ERROR;
105 ber_int_memory_fns = (BerMemoryFunctions *)
106 (*(f->bmf_malloc))(sizeof(BerMemoryFunctions));
108 if ( ber_int_memory_fns == NULL ) {
109 ber_errno = LBER_ERROR_MEMORY;
110 return LBER_OPT_ERROR;
113 memcpy(ber_int_memory_fns, f, sizeof(BerMemoryFunctions));
115 ber_int_options.lbo_valid = LBER_INITIALIZED;
116 return LBER_OPT_SUCCESS;
119 ber_int_options.lbo_valid = LBER_INITIALIZED;
121 if(invalue == NULL) {
122 /* no place to set from */
123 ber_errno = LBER_ERROR_PARAM;
124 return LBER_OPT_ERROR;
128 if(option == LBER_OPT_BER_DEBUG) {
129 ber_int_debug = * (const int *) invalue;
130 return LBER_OPT_SUCCESS;
132 } else if(option == LBER_OPT_LOG_PRINT_FN) {
133 ber_pvt_log_print = (BER_LOG_PRINT_FN) invalue;
134 return LBER_OPT_SUCCESS;
135 } else if(option == LBER_OPT_LOG_PRINT_FILE) {
136 ber_pvt_err_file = (void *) invalue;
137 return LBER_OPT_SUCCESS;
140 ber_errno = LBER_ERROR_PARAM;
141 return LBER_OPT_ERROR;
148 case LBER_OPT_BER_OPTIONS:
149 assert( BER_VALID( ber ) );
150 ber->ber_options = * (const int *) invalue;
151 return LBER_OPT_SUCCESS;
153 case LBER_OPT_BER_DEBUG:
154 assert( BER_VALID( ber ) );
155 ber->ber_debug = * (const int *) invalue;
156 return LBER_OPT_SUCCESS;
158 case LBER_OPT_BER_REMAINING_BYTES:
159 ber->ber_end = &ber->ber_ptr[* (const ber_len_t *) invalue];
160 return LBER_OPT_SUCCESS;
162 case LBER_OPT_BER_TOTAL_BYTES:
163 ber->ber_end = &ber->ber_buf[* (const ber_len_t *) invalue];
164 return LBER_OPT_SUCCESS;
166 case LBER_OPT_BER_BYTES_TO_WRITE:
167 ber->ber_ptr = &ber->ber_buf[* (const ber_len_t *) invalue];
168 return LBER_OPT_SUCCESS;
172 ber_errno = LBER_ERROR_PARAM;
176 return LBER_OPT_ERROR;