]> git.sur5r.net Git - openldap/blob - libraries/liblber/etest.c
adjust project settings
[openldap] / libraries / liblber / etest.c
1 /* test.c - lber encoding test program */
2 /*
3  * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6 /* Portions
7  * Copyright (c) 1990 Regents of the University of Michigan.
8  * All rights reserved.
9  */
10
11 #include "portable.h"
12
13 #include <stdio.h>
14
15 #include <ac/socket.h>
16 #include <ac/string.h>
17 #include <ac/unistd.h>
18
19 #ifdef HAVE_CONSOLE_H
20 #include <console.h>
21 #endif /* HAVE_CONSOLE_H */
22
23 #include <lber.h>
24
25 static void usage( char *name )
26 {
27         fprintf( stderr, "usage: %s fmtstring\n", name );
28 }
29
30 int
31 main( int argc, char **argv )
32 {
33 #ifdef notdef
34         int             i, len;
35         char    *s, *p;
36 #endif
37         int                     fd, num;
38         Seqorset        *sos = NULLSEQORSET;
39         BerElement      *ber;
40         Sockbuf         *sb;
41
42         if ( argc < 2 ) {
43                 usage( argv[0] );
44                 exit( 1 );
45         }
46
47
48 #ifdef HAVE_CONSOLE_H
49         ccommand( &argv );
50         cshow( stdout );
51
52         if (( fd = open( "lber-test", O_WRONLY|O_CREAT|O_TRUNC|O_BINARY ))
53                 < 0 ) {
54             perror( "open" );
55             exit( 1 );
56         }
57 #else
58         fd = fileno(stdout);
59 #endif /* MACOS */
60
61         sb = lber_pvt_sb_alloc_fd( fd );
62
63         if ( (ber = ber_alloc()) == NULLBER ) {
64                 perror( "ber_alloc" );
65                 exit( 1 );
66         }
67
68         num = 7;
69         if ( ber_printf( ber, "{ti}", 0x1f44, num ) == -1 ) {
70                 fprintf( stderr, "ber_printf returns -1" );
71                 exit( 1 );
72         }
73
74         if ( ber_flush( sb, ber, 1 ) == -1 ) {
75                 perror( "ber_flush" );
76                 exit( 1 );
77         }
78 #ifdef notdef
79         for ( s = argv[1]; *s; s++ ) {
80                 if ( fgets( buf, sizeof(buf), stdin ) == NULL )
81                         break;
82                 if ( (p = strchr( buf, '\n' )) != NULL )
83                         *p = '\0';
84
85                 switch ( *s ) {
86                 case 'i':       /* int */
87                 case 'b':       /* boolean */
88                         i = atoi( buf );
89                         if ( ber_printf( ber, "i", i ) == -1 ) {
90                                 fprintf( stderr, "ber_printf i\n" );
91                                 exit( 1 );
92                         }
93                         break;
94
95                 case 'e':       /* enumeration */
96                         i = va_arg( ap, int );
97                         rc = ber_put_enum( ber, i, (char)ber->ber_tag );
98                         break;
99
100                 case 'n':       /* null */
101                         rc = ber_put_null( ber, (char)ber->ber_tag );
102                         break;
103
104                 case 'o':       /* octet string (non-null terminated) */
105                         s = va_arg( ap, char * );
106                         len = va_arg( ap, int );
107                         rc = ber_put_ostring( ber, s, len, (char)ber->ber_tag );
108                         break;
109
110                 case 's':       /* string */
111                         s = va_arg( ap, char * );
112                         rc = ber_put_string( ber, s, (char)ber->ber_tag );
113                         break;
114
115                 case 'B':       /* bit string */
116                         s = va_arg( ap, char * );
117                         len = va_arg( ap, int );        /* in bits */
118                         rc = ber_put_bitstring( ber, s, len, (char)ber->ber_tag );
119                         break;
120
121                 case 't':       /* tag for the next element */
122                         ber->ber_tag = va_arg( ap, int );
123                         ber->ber_usertag = 1;
124                         break;
125
126                 case 'v':       /* vector of strings */
127                         if ( (ss = va_arg( ap, char ** )) == NULL )
128                                 break;
129                         for ( i = 0; ss[i] != NULL; i++ ) {
130                                 if ( (rc = ber_put_string( ber, ss[i],
131                                     (char)ber->ber_tag )) == -1 )
132                                         break;
133                         }
134                         break;
135
136                 case 'V':       /* sequences of strings + lengths */
137                         if ( (bv = va_arg( ap, struct berval ** )) == NULL )
138                                 break;
139                         for ( i = 0; bv[i] != NULL; i++ ) {
140                                 if ( (rc = ber_put_ostring( ber, bv[i]->bv_val,
141                                     bv[i]->bv_len, (char)ber->ber_tag )) == -1 )
142                                         break;
143                         }
144                         break;
145
146                 case '{':       /* begin sequence */
147                         rc = ber_start_seq( ber, (char)ber->ber_tag );
148                         break;
149
150                 case '}':       /* end sequence */
151                         rc = ber_put_seqorset( ber );
152                         break;
153
154                 case '[':       /* begin set */
155                         rc = ber_start_set( ber, (char)ber->ber_tag );
156                         break;
157
158                 case ']':       /* end set */
159                         rc = ber_put_seqorset( ber );
160                         break;
161
162                 default:
163 #ifdef LDAP_LIBUI
164                         fprintf( stderr, "unknown fmt %c\n", *fmt );
165 #endif /* LDAP_LIBUI */
166                         rc = -1;
167                         break;
168                 }
169                 }
170         }
171
172 #endif
173
174         lber_pvt_sb_free( sb );
175         return( 0 );
176 }