diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-01-31 19:12:46 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1999-01-31 19:12:46 +0000 |
commit | 379d2ed5a965fc1bdb2785bcd0fe0f95cf4a59d9 (patch) | |
tree | b427e8abd37c0f2edfbcbd7d7bb8248674e0ec16 /c/src/libmisc/dumpbuf/dumpbuf.c | |
parent | Patch from Eric Norum <eric@skatter.usask.ca> to avoid dereferencing a (diff) | |
download | rtems-379d2ed5a965fc1bdb2785bcd0fe0f95cf4a59d9.tar.bz2 |
New files added to ease debugging.
Diffstat (limited to 'c/src/libmisc/dumpbuf/dumpbuf.c')
-rw-r--r-- | c/src/libmisc/dumpbuf/dumpbuf.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/c/src/libmisc/dumpbuf/dumpbuf.c b/c/src/libmisc/dumpbuf/dumpbuf.c new file mode 100644 index 0000000000..1e41f52bbf --- /dev/null +++ b/c/src/libmisc/dumpbuf/dumpbuf.c @@ -0,0 +1,75 @@ +/* + * COPYRIGHT (c) 1997. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may in + * the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include <rtems/dumpbuf.h> + +/* + * Put the body below Dump_Buffer so it won't get inlined. + */ + +static inline void Dump_Line( + unsigned char *buffer, + int length +); + +void Dump_Buffer( + unsigned char *buffer, + int length +) +{ + + int i, mod, max; + + if ( !length ) return; + + mod = length % 16; + + max = length - mod; + + for ( i=0 ; i<max ; i+=16 ) + Dump_Line( &buffer[ i ], 16 ); + + if ( mod ) + Dump_Line( &buffer[ max ], mod ); +} + +static inline void Dump_Line( + unsigned char *buffer, + int length +) +{ + + int i; + char line_buffer[120]; + + line_buffer[0] = '\0'; + + for( i=0 ; i<length ; i++ ) + sprintf( line_buffer, "%s%02x ", line_buffer, buffer[ i ] ); + + for( ; i<16 ; i++ ) + strcat( line_buffer, " " ); + + strcat( line_buffer, "|" ); + for( i=0 ; i<length ; i++ ) + sprintf( line_buffer, "%s%c", line_buffer, + isprint( buffer[ i ] ) ? buffer[ i ] : '.' ); + + for( ; i<16 ; i++ ) + strcat( line_buffer, " " ); + + strcat( line_buffer, "|\n" ); + + printf( line_buffer ); +} |