URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [tests/] [psxtests/] [psxfile01/] [test_cat.c] - Rev 1765
Compare with Previous | Blame | View Log
/* * A test support function which performs a crude version of * "cat" so you can look at specific parts of a file. * * test_cat.c,v 1.2 2002/08/02 00:53:21 joel Exp */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <ctype.h> #include <assert.h> #include <pmacros.h> /* * test_cat routine */ unsigned char test_cat_buffer[ 1024 ]; void test_cat( char *file, int offset_arg, int length ) { int fd; int status; int is_printable = 0; int my_length; int i; unsigned char c; int count = 0; off_t offset = (off_t)offset_arg; my_length = (length) ? length : sizeof( test_cat_buffer ); assert( my_length <= sizeof( test_cat_buffer ) ); fd = open( file, O_RDONLY ); if ( fd == -1 ) { printf( "test_cat: open( %s ) failed : %s\n", file, strerror( errno ) ); rtems_test_exit( 0 ); } for ( ;; ) { status = lseek( fd, offset, SEEK_SET ); assert( status != -1 ); status = read( fd, test_cat_buffer, sizeof(test_cat_buffer) ); if ( status <= 0 ) { if (!is_printable) printf( "(%d)", count ); puts( "" ); break; } for ( i=0 ; i<status ; i++ ) { c = test_cat_buffer[i]; if (isprint(c) || isspace(c)) { if (!is_printable) { printf( "(%d)", count ); count = 0; is_printable = 1; } putchar(c); } else { is_printable = 0; count++; } } offset += status; } status = close( fd ); assert( !status ); }