X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=libraries%2Fliblber%2Fetest.c;h=0099e82ff52638869eb77709a7c57d2f2432cb73;hb=e8116a8a74fa6e056863c3c962b4fedcf5d93a00;hp=a41d9c379d0ac34853ea90eaf79dbcffa49c6ec4;hpb=f9bbdb34c5907d37d41864d04314861367de5675;p=openldap diff --git a/libraries/liblber/etest.c b/libraries/liblber/etest.c index a41d9c379d..0099e82ff5 100644 --- a/libraries/liblber/etest.c +++ b/libraries/liblber/etest.c @@ -11,6 +11,7 @@ #include "portable.h" #include +#include #include #include @@ -20,31 +21,43 @@ #include #endif /* HAVE_CONSOLE_H */ -#include +#include "lber-int.h" static void usage( char *name ) { fprintf( stderr, "usage: %s fmtstring\n", name ); } +static char* getbuf() { + 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 */ + ber_int_debug = -1; + if ( argc < 2 ) { usage( argv[0] ); - exit( 1 ); + return( EXIT_FAILURE ); } - #ifdef HAVE_CONSOLE_H ccommand( &argv ); cshow( stdout ); @@ -52,113 +65,65 @@ 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 */ - sb = ber_sockbuf_alloc_fd( fd); + sb = ber_sockbuf_alloc_fd( fd ); if( sb == NULL ) { perror( "lber_sockbuf_alloc_fd" ); - exit( 1 ); + 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: @@ -168,15 +133,24 @@ main( int argc, char **argv ) rc = -1; break; } + + if( rc == -1 ) { + perror( "ber_printf" ); + return( EXIT_FAILURE ); } } -#endif + + fprintf(stderr, "encode: end\n" ); + if( ber_printf( ber, /*{*/ "}" ) == -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 ); }