X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fdtest.c;h=8297d6a881586104802145a4fe427eda7ea38ab4;hb=afa2cd1893875266c58677cc640514c1d9eef41f;hp=240909a0c3bb19e745f954d7c60c1ea405da3ec9;hpb=e27ba3f0eedbb2fb1b42cfe8cc935319f655895b;p=openldap diff --git a/libraries/liblber/dtest.c b/libraries/liblber/dtest.c index 240909a0c3..8297d6a881 100644 --- a/libraries/liblber/dtest.c +++ b/libraries/liblber/dtest.c @@ -1,6 +1,7 @@ /* dtest.c - lber decoding test program */ +/* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -18,19 +19,20 @@ #include "portable.h" #include -#include +#include #include #include #include +#include #ifdef HAVE_CONSOLE_H #include -#endif /* MACOS */ +#endif -#include "lber-int.h" +#include -static void usage( char *name ) +static void usage( const char *name ) { fprintf( stderr, "usage: %s fmt\n", name ); } @@ -39,15 +41,17 @@ int main( int argc, char **argv ) { char *s; - int rc; - unsigned long tag, len; + ber_tag_t tag; + ber_len_t len; BerElement *ber; Sockbuf *sb; + int fd; /* enable debugging */ - ber_int_debug = -1; + int ival = -1; + ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &ival ); if ( argc < 2 ) { usage( argv[0] ); @@ -57,22 +61,32 @@ main( int argc, char **argv ) #ifdef HAVE_CONSOLE_H ccommand( &argv ); cshow( stdout ); -#endif /* MACOS */ +#endif - sb = ber_sockbuf_alloc_fd( fileno(stdin) ); + sb = ber_sockbuf_alloc(); + fd = fileno( stdin ); + ber_sockbuf_add_io( sb, &ber_sockbuf_io_fd, LBER_SBIOD_LEVEL_PROVIDER, + (void *)&fd ); - if( (ber = ber_alloc_t(LBER_USE_DER)) == NULL ) { + ber = ber_alloc_t(LBER_USE_DER); + if( ber == NULL ) { perror( "ber_alloc_t" ); return( EXIT_FAILURE ); } - if(( tag = ber_get_next( sb, &len, ber) ) == LBER_ERROR ) { + for (;;) { + tag = ber_get_next( sb, &len, ber); + if( tag != LBER_ERROR ) break; + + if( errno == EWOULDBLOCK ) continue; + if( errno == EAGAIN ) continue; + perror( "ber_get_next" ); return( EXIT_FAILURE ); } printf("decode: message tag 0x%lx and length %ld\n", - tag, len ); + (unsigned long) tag, (long) len ); for( s = argv[1]; *s; s++ ) { char buf[128]; @@ -81,22 +95,15 @@ main( int argc, char **argv ) fmt[1] = '\0'; printf("decode: format %s\n", fmt ); - rc = ber_scanf( ber, fmt, &buf[0], &len ); + len = sizeof(buf); + tag = ber_scanf( ber, fmt, &buf[0], &len ); - if( rc == LBER_ERROR ) { + if( tag == LBER_ERROR ) { perror( "ber_scanf" ); return( EXIT_FAILURE ); } } - if(( tag = ber_get_next( sb, &len, ber) ) == LBER_ERROR ) { - perror( "ber_get_next" ); - return( EXIT_FAILURE ); - } - - printf("decode: message tag 0x%lx and length %ld\n", - tag, len ); - ber_sockbuf_free( sb ); return( EXIT_SUCCESS ); }