X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fetest.c;h=863cd7e563d3e9bbf3ccaeae368a1264934e98a5;hb=5f28673792d67dbd5b9636cf6cda4eb72432712a;hp=a41d9c379d0ac34853ea90eaf79dbcffa49c6ec4;hpb=f9bbdb34c5907d37d41864d04314861367de5675;p=openldap diff --git a/libraries/liblber/etest.c b/libraries/liblber/etest.c index a41d9c379d..863cd7e563 100644 --- a/libraries/liblber/etest.c +++ b/libraries/liblber/etest.c @@ -1,6 +1,7 @@ /* test.c - lber encoding test program */ +/* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -12,6 +13,8 @@ #include +#include + #include #include #include @@ -20,31 +23,44 @@ #include #endif /* HAVE_CONSOLE_H */ -#include +#include "lber.h" -static void usage( char *name ) +static void usage( const char *name ) { fprintf( stderr, "usage: %s fmtstring\n", name ); } +static char* getbuf( void ) { + char *p; + static char buf[128]; + + if ( fgets( buf, sizeof(buf), stdin ) == NULL ) + return NULL; + + if ( (p = strchr( buf, '\n' )) != NULL ) + *p = '\0'; + + return buf; +} + int main( int argc, char **argv ) { -#ifdef notdef - int i, len; - char *s, *p; -#endif - int fd, num; - Seqorset *sos = NULL; + char *s; + + int fd, rc; BerElement *ber; Sockbuf *sb; + /* enable debugging */ + int ival = -1; + ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &ival ); + if ( argc < 2 ) { usage( argv[0] ); - exit( 1 ); + return( EXIT_FAILURE ); } - #ifdef HAVE_CONSOLE_H ccommand( &argv ); cshow( stdout ); @@ -52,131 +68,92 @@ main( int argc, char **argv ) if (( fd = open( "lber-test", O_WRONLY|O_CREAT|O_TRUNC|O_BINARY )) < 0 ) { perror( "open" ); - exit( 1 ); + return( EXIT_FAILURE ); } + #else fd = fileno(stdout); -#endif /* MACOS */ +#endif - sb = ber_sockbuf_alloc_fd( fd); + sb = ber_sockbuf_alloc(); + ber_sockbuf_add_io( sb, &ber_sockbuf_io_fd, LBER_SBIOD_LEVEL_PROVIDER, + (void *)&fd ); if( sb == NULL ) { - perror( "lber_sockbuf_alloc_fd" ); - exit( 1 ); + perror( "ber_sockbuf_alloc_fd" ); + return( EXIT_FAILURE ); } if ( (ber = ber_alloc_t( LBER_USE_DER )) == NULL ) { perror( "ber_alloc" ); - exit( 1 ); + return( EXIT_FAILURE ); } -#ifndef notdef - num = 7; - if ( ber_printf( ber, "{ti}", 0x1f44UL, num ) == -1 ) { - fprintf( stderr, "ber_printf returns -1" ); - exit( 1 ); + fprintf(stderr, "encode: start\n" ); + if( ber_printf( ber, "{" /*}*/ ) ) { + perror( "ber_printf {" /*}*/ ); + return( EXIT_FAILURE ); } -#else for ( s = argv[1]; *s; s++ ) { - if ( fgets( buf, sizeof(buf), stdin ) == NULL ) - break; - if ( (p = strchr( buf, '\n' )) != NULL ) - *p = '\0'; + char *buf; + char fmt[2]; + + fmt[0] = *s; + fmt[1] = '\0'; + fprintf(stderr, "encode: %s\n", fmt ); switch ( *s ) { case 'i': /* int */ case 'b': /* boolean */ - i = atoi( buf ); - if ( ber_printf( ber, "i", i ) == -1 ) { - fprintf( stderr, "ber_printf i\n" ); - exit( 1 ); - } - break; - case 'e': /* enumeration */ - i = va_arg( ap, int ); - rc = ber_put_enum( ber, i, (char)ber->ber_tag ); + buf = getbuf(); + rc = ber_printf( ber, fmt, atoi(buf) ); break; case 'n': /* null */ - rc = ber_put_null( ber, (char)ber->ber_tag ); + case '{': /* begin sequence */ + case '}': /* end sequence */ + case '[': /* begin set */ + case ']': /* end set */ + rc = ber_printf( ber, fmt ); break; case 'o': /* octet string (non-null terminated) */ - s = va_arg( ap, char * ); - len = va_arg( ap, int ); - rc = ber_put_ostring( ber, s, len, (char)ber->ber_tag ); - break; - - case 's': /* string */ - s = va_arg( ap, char * ); - rc = ber_put_string( ber, s, (char)ber->ber_tag ); - break; - case 'B': /* bit string */ - s = va_arg( ap, char * ); - len = va_arg( ap, int ); /* in bits */ - rc = ber_put_bitstring( ber, s, len, (char)ber->ber_tag ); + buf = getbuf(); + rc = ber_printf( ber, fmt, buf, strlen(buf) ); break; + case 's': /* string */ case 't': /* tag for the next element */ - ber->ber_tag = va_arg( ap, int ); - ber->ber_usertag = 1; - break; - - case 'v': /* vector of strings */ - if ( (ss = va_arg( ap, char ** )) == NULL ) - break; - for ( i = 0; ss[i] != NULL; i++ ) { - if ( (rc = ber_put_string( ber, ss[i], - (char)ber->ber_tag )) == -1 ) - break; - } - break; - - case 'V': /* sequences of strings + lengths */ - if ( (bv = va_arg( ap, struct berval ** )) == NULL ) - break; - for ( i = 0; bv[i] != NULL; i++ ) { - if ( (rc = ber_put_ostring( ber, bv[i]->bv_val, - bv[i]->bv_len, (char)ber->ber_tag )) == -1 ) - break; - } - break; - - case '{': /* begin sequence */ - rc = ber_start_seq( ber, (char)ber->ber_tag ); - break; - - case '}': /* end sequence */ - rc = ber_put_seqorset( ber ); - break; - - case '[': /* begin set */ - rc = ber_start_set( ber, (char)ber->ber_tag ); - break; - - case ']': /* end set */ - rc = ber_put_seqorset( ber ); + buf = getbuf(); + rc = ber_printf( ber, fmt, buf ); break; default: -#ifdef LDAP_LIBUI - fprintf( stderr, "unknown fmt %c\n", *fmt ); -#endif /* LDAP_LIBUI */ + fprintf( stderr, "encode: unknown fmt %c\n", *fmt ); rc = -1; break; } + + if( rc == -1 ) { + perror( "ber_printf" ); + return( EXIT_FAILURE ); } } -#endif + + fprintf(stderr, "encode: end\n" ); + if( ber_printf( ber, /*{*/ "N}" ) == -1 ) { + perror( /*{*/ "ber_printf }" ); + return( EXIT_FAILURE ); + } if ( ber_flush( sb, ber, 1 ) == -1 ) { perror( "ber_flush" ); - exit( 1 ); + return( EXIT_FAILURE ); } ber_sockbuf_free( sb ); - return( 0 ); + return( EXIT_SUCCESS ); }