1 /*
2  * Copyright (c) 2001 by Sun Microsystems, Inc.
3  * All rights reserved.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 /*
9  * The contents of this file are subject to the Netscape Public
10  * License Version 1.1 (the "License"); you may not use this file
11  * except in compliance with the License. You may obtain a copy of
12  * the License at http://www.mozilla.org/NPL/
13  *
14  * Software distributed under the License is distributed on an "AS
15  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
16  * implied. See the License for the specific language governing
17  * rights and limitations under the License.
18  *
19  * The Original Code is Mozilla Communicator client code, released
20  * March 31, 1998.
21  *
22  * The Initial Developer of the Original Code is Netscape
23  * Communications Corporation. Portions created by Netscape are
24  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
25  * Rights Reserved.
26  *
27  * Contributor(s):
28  */
29 
30 /* bprint.c - a printing utility for debuging output */
31 #include <string.h>
32 #include "lber-int.h"
33 
34 #ifdef LDAP_DEBUG
35 /*
36  * Print arbitrary stuff, for debugging.
37  */
38 
39 #define BPLEN	48
40 
41 void
42 lber_bprint( char *data, int len )
43 {
44     static char	hexdig[] = "0123456789abcdef";
45     char	out[ BPLEN ];
46     int		i = 0;
47 
48     memset( out, 0, BPLEN );
49     for ( ;; ) {
50 	if ( len < 1 ) {
51 		char msg[BPLEN + 80];
52 	    sprintf( msg, "\t%s\n", ( i == 0 ) ? "(end)" : out );
53 		ber_err_print( msg );
54 	    break;
55 	}
56 
57 #ifndef HEX
58 	if ( isgraph( (unsigned char)*data )) {
59 	    out[ i ] = ' ';
60 	    out[ i+1 ] = *data;
61 	} else {
62 #endif
63 	    out[ i ] = hexdig[ ( *data & 0xf0 ) >> 4 ];
64 	    out[ i+1 ] = hexdig[ *data & 0x0f ];
65 #ifndef HEX
66 	}
67 #endif
68 	i += 2;
69 	len--;
70 	data++;
71 
72 	if ( i > BPLEN - 2 ) {
73 		char msg[BPLEN + 80];
74 	    sprintf( msg, "\t%s\n", out );
75 		ber_err_print( msg );
76 	    memset( out, 0, BPLEN );
77 	    i = 0;
78 	    continue;
79 	}
80 	out[ i++ ] = ' ';
81     }
82 }
83 
84 #endif
85 
86 void ber_err_print( char *data )
87 {
88 #ifdef USE_DEBUG_WIN
89 	OutputDebugString( data );
90 #else
91 	fputs( data, stderr );
92 	fflush( stderr );
93 #endif
94 }
95