X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Fdtest.c;h=7d9339f295af7163deaeae0d5118d2695bf0e737;hb=7002d101c0c920e4b097087f9c1d3e1963917481;hp=e602315634d959b22dfbcbadc4ef6f40bf375c8d;hpb=60d9aeed6e61463fa266bcf47bf50e2dd0cfad3d;p=openldap diff --git a/libraries/liblber/dtest.c b/libraries/liblber/dtest.c index e602315634..7d9339f295 100644 --- a/libraries/liblber/dtest.c +++ b/libraries/liblber/dtest.c @@ -1,10 +1,19 @@ /* dtest.c - lber decoding test program */ -/* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2012 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ -/* Portions - * Copyright (c) 1990 Regents of the University of Michigan. +/* Portions Copyright (c) 1990 Regents of the University of Michigan. * All rights reserved. * * Redistribution and use in source and binary forms are permitted @@ -14,15 +23,20 @@ * software without specific prior written permission. This software * is provided ``as is'' without express or implied warranty. */ +/* ACKNOWLEDGEMENTS: + * This work was originally developed by the University of Michigan + * (as part of U-MICH LDAP). + */ #include "portable.h" #include -#include +#include #include #include #include +#include #ifdef HAVE_CONSOLE_H #include @@ -30,7 +44,7 @@ #include -static void usage( char *name ) +static void usage( const char *name ) { fprintf( stderr, "usage: %s fmt\n", name ); } @@ -39,12 +53,13 @@ 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 */ int ival = -1; @@ -60,20 +75,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", - tag, len ); + (unsigned long) tag, (long) len ); for( s = argv[1]; *s; s++ ) { char buf[128]; @@ -83,9 +108,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 ); }