00001
00002
00003
00004
00005
00014 #if HAVE_CONFIG_H
00015 #include <config.h>
00016 #endif
00017
00018 #include <stdio.h>
00019 #include "odr-priv.h"
00020
00021 int ber_boolean(ODR o, int *val)
00022 {
00023 int res, len;
00024
00025 switch (o->direction)
00026 {
00027 case ODR_ENCODE:
00028 if (ber_enclen(o, 1, 1, 1) != 1)
00029 return 0;
00030 if (odr_putc(o, *val) < 0)
00031 return 0;
00032 return 1;
00033 case ODR_DECODE:
00034 if ((res = ber_declen(o->bp, &len, odr_max(o))) < 0)
00035 {
00036 odr_seterror(o, OPROTO, 9);
00037 return 0;
00038 }
00039 o->bp+= res;
00040 if (len != 1 || odr_max(o) < len)
00041 {
00042 odr_seterror(o, OPROTO, 10);
00043 return 0;
00044 }
00045 *val = *o->bp;
00046 o->bp++;
00047 return 1;
00048 case ODR_PRINT:
00049 return 1;
00050 default: odr_seterror(o, OOTHER, 11); return 0;
00051 }
00052 }
00053
00054
00055
00056
00057
00058
00059
00060