]> git.sur5r.net Git - openldap/blob - libraries/liblber/options.c
First cut at ber_set_option(NULL,LBER_OPT_MEMORY_FN, myrealloc) where
[openldap] / libraries / liblber / options.c
1 /*
2  * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
3  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
4  */
5 #include "portable.h"
6
7 #include <stdlib.h>
8
9 #include "lber-int.h"
10
11 struct lber_options ber_int_options = {
12         LBER_UNINITIALIZED, 0, 0 };
13
14 int
15 ber_get_option(
16         void    *item,
17         int             option,
18         void    *outvalue)
19 {
20         BerElement *ber;
21         Sockbuf *sb;
22
23         ber_int_options.lbo_valid = LBER_INITIALIZED;
24
25         if(outvalue == NULL) {
26                 /* no place to get to */
27                 return LBER_OPT_ERROR;
28         }
29
30         if(item == NULL) {
31                 if(option == LBER_OPT_BER_DEBUG) {
32                         * (int *) outvalue = ber_int_debug;
33                         return LBER_OPT_SUCCESS;
34                 }
35
36                 return LBER_OPT_ERROR;
37         }
38
39         ber = (BerElement *) item;
40         sb = (Sockbuf *) item;
41
42         switch(option) {
43         case LBER_OPT_BER_OPTIONS:
44                 assert( BER_VALID( ber ) );
45                 * (int *) outvalue = ber->ber_options;
46                 return LBER_OPT_SUCCESS;
47
48         case LBER_OPT_BER_DEBUG:
49                 assert( BER_VALID( ber ) );
50                 * (int *) outvalue = ber->ber_debug;
51                 return LBER_OPT_SUCCESS;
52
53         default:
54                 /* bad param */
55                 break;
56         }
57
58         return LBER_OPT_ERROR;
59 }
60
61 int
62 ber_set_option(
63         void    *item,
64         int             option,
65         LDAP_CONST void *invalue)
66 {
67         BerElement *ber;
68         Sockbuf *sb;
69
70         if( (ber_int_options.lbo_valid == LBER_UNINITIALIZED)
71                 && ( option == LBER_OPT_MEMORY_FN )
72                 && ( invalue != NULL ))
73         {
74                 ber_int_realloc = (BER_MEMORY_FN) invalue;
75                 ber_int_options.lbo_valid = LBER_INITIALIZED;
76                 return LBER_OPT_SUCCESS;
77         }
78
79         ber_int_options.lbo_valid = LBER_INITIALIZED;
80
81         if(invalue == NULL) {
82                 /* no place to set from */
83                 return LBER_OPT_ERROR;
84         }
85
86         if(item == NULL) {
87                 if(option == LBER_OPT_BER_DEBUG) {
88                         ber_int_debug = * (int *) invalue;
89                         return LBER_OPT_SUCCESS;
90
91                 } else if(option == LBER_OPT_LOG_PRINT_FN) {
92                         ber_pvt_log_print = (BER_LOG_PRINT_FN) invalue;
93                         return LBER_OPT_SUCCESS;
94                 }
95
96                 return LBER_OPT_ERROR;
97         }
98
99         ber = (BerElement *) item;
100         sb = (Sockbuf *) item;
101
102         switch(option) {
103         case LBER_OPT_BER_OPTIONS:
104                 assert( BER_VALID( ber ) );
105                 ber->ber_options = * (int *) invalue;
106                 return LBER_OPT_SUCCESS;
107
108         case LBER_OPT_BER_DEBUG:
109                 assert( BER_VALID( ber ) );
110                 ber->ber_debug = * (int *) invalue;
111                 return LBER_OPT_SUCCESS;
112
113         default:
114                 /* bad param */
115                 break;
116         }
117
118         return LBER_OPT_ERROR;
119 }