X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fdtest.c;h=8297d6a881586104802145a4fe427eda7ea38ab4;hb=afa2cd1893875266c58677cc640514c1d9eef41f;hp=30d803eb93a70076b2687218c500ad6dbdfcb839;hpb=2d4f915de9a491109a1789464a81e3f02128072e;p=openldap diff --git a/libraries/liblber/dtest.c b/libraries/liblber/dtest.c index 30d803eb93..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 @@ -23,6 +24,7 @@ #include #include #include +#include #ifdef HAVE_CONSOLE_H #include @@ -30,7 +32,7 @@ #include -static void usage( char *name ) +static void usage( const char *name ) { fprintf( stderr, "usage: %s fmt\n", name ); } @@ -39,13 +41,13 @@ int main( int argc, char **argv ) { char *s; - int rc; ber_tag_t tag; ber_len_t len; BerElement *ber; Sockbuf *sb; + int fd; /* enable debugging */ int ival = -1; @@ -61,20 +63,30 @@ main( int argc, char **argv ) cshow( stdout ); #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", - (unsigned long) tag, (long) len ); + (unsigned long) tag, (long) len ); for( s = argv[1]; *s; s++ ) { char buf[128]; @@ -84,9 +96,9 @@ main( int argc, char **argv ) printf("decode: format %s\n", fmt ); len = sizeof(buf); - rc = ber_scanf( ber, fmt, &buf[0], &len ); + tag = ber_scanf( ber, fmt, &buf[0], &len ); - if( rc == LBER_ERROR ) { + if( tag == LBER_ERROR ) { perror( "ber_scanf" ); return( EXIT_FAILURE ); }