*** empty log message ***
[yaz-moved-to-github.git] / odr / odr_bit.c
1 /*
2  * Copyright (C) 1994, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: odr_bit.c,v $
7  * Revision 1.2  1995-02-03 17:04:37  quinn
8  * *** empty log message ***
9  *
10  * Revision 1.1  1995/02/02  20:38:50  quinn
11  * Updates.
12  *
13  *
14  */
15
16 #include <odr.h>
17 #include <string.h>
18
19 /*
20  * Top level bitstring string en/decoder.
21  * Returns 1 on success, 0 on error.
22  */
23 int odr_bitstring(ODR o, Odr_bitmask **p, int opt)
24 {
25     int res, cons = 0;
26
27     if (o->t_class < 0)
28     {
29         o->t_class = ODR_UNIVERSAL;
30         o->t_tag = ODR_BITSTRING;
31     }
32     if ((res = ber_tag(o, *p, o->t_class, o->t_tag, &cons)) < 0)
33         return 0;
34     if (!res)
35     {
36         *p = 0;
37         return opt;
38     }
39     if (o->direction == ODR_PRINT)
40     {
41         fprintf(o->print, "BITSTRING(len=%d)\n", (*p)->top + 1);
42         return 1;
43     }
44     if (o->direction == ODR_DECODE && !*p)
45     {
46         *p = nalloc(o, sizeof(Odr_bitmask));
47         memset((*p)->bits, 0, ODR_BITMASK_SIZE);
48         (*p)->top = -1;
49     }
50     return ber_bitstring(o, *p, cons);
51 }