Cleaned up get_line for test data files
Look, ma, a use for do...while! Also removed 1-3 calls to strlen.
This commit is contained in:
parent
26182edd0c
commit
5b7ee07ff6
1 changed files with 16 additions and 8 deletions
|
@ -136,23 +136,31 @@ DISPATCH_FUNCTION
|
|||
"TESTCASE_FILENAME"
|
||||
|
||||
|
||||
/** Retrieve one input line into buf, which must have room for len
|
||||
* bytes. The trailing line break (if any) is stripped from the result.
|
||||
* Lines beginning with the character '#' are skipped. Lines that are
|
||||
* more than len-1 bytes long including the trailing line break are
|
||||
* truncated; note that the following bytes remain in the input stream.
|
||||
*
|
||||
* \return 0 on success, -1 on error or end of file
|
||||
*/
|
||||
int get_line( FILE *f, char *buf, size_t len )
|
||||
{
|
||||
char *ret;
|
||||
|
||||
buf[0] = '#';
|
||||
|
||||
while( buf[0] == '#' )
|
||||
do
|
||||
{
|
||||
ret = fgets( buf, len, f );
|
||||
if( ret == NULL )
|
||||
return( -1 );
|
||||
|
||||
if( strlen( buf ) && buf[strlen(buf) - 1] == '\n' )
|
||||
buf[strlen(buf) - 1] = '\0';
|
||||
if( strlen( buf ) && buf[strlen(buf) - 1] == '\r' )
|
||||
buf[strlen(buf) - 1] = '\0';
|
||||
}
|
||||
while( buf[0] == '#' );
|
||||
|
||||
ret = buf + strlen( buf );
|
||||
if( ret-- > buf && *ret == '\n' )
|
||||
*ret = '\0';
|
||||
if( ret-- > buf && *ret == '\r' )
|
||||
*ret = '\0';
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue