diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c index 5e312bbaf..438017a8b 100644 --- a/src/bdf/bdflib.c +++ b/src/bdf/bdflib.c @@ -526,8 +526,8 @@ { bdf_line_func_t_ cb; unsigned long lineno, buf_size; - int refill, hold, to_skip; - ptrdiff_t bytes, start, end, cursor, avail; + int hold, to_skip; + unsigned long bytes, start, end, cursor, avail; char* buf = NULL; FT_Memory memory = stream->memory; FT_Error error = FT_Err_Ok; @@ -549,26 +549,16 @@ lineno = 1; buf[0] = 0; start = 0; - avail = 0; cursor = 0; - refill = 1; to_skip = NO_SKIP; - bytes = 0; /* make compiler happy */ + + Refill: + bytes = FT_Stream_TryRead( stream, + (FT_Byte*)buf + cursor, buf_size - cursor ); + avail = cursor + bytes; for (;;) { - if ( refill ) - { - bytes = (ptrdiff_t)FT_Stream_TryRead( - stream, (FT_Byte*)buf + cursor, - buf_size - (unsigned long)cursor ); - avail = cursor + bytes; - cursor = 0; - refill = 0; - } - - end = start; - /* should we skip an optional character like \n or \r? */ if ( start < avail && buf[start] == to_skip ) { @@ -578,6 +568,7 @@ } /* try to find the end of the line */ + end = start; while ( end < avail && buf[end] != '\n' && buf[end] != '\r' ) end++; @@ -622,15 +613,13 @@ } else { - bytes = avail - start; + cursor = avail - start; - FT_MEM_MOVE( buf, buf + start, bytes ); + FT_MEM_MOVE( buf, buf + start, cursor ); - cursor = bytes; start = 0; } - refill = 1; - continue; + goto Refill; } /* Temporarily NUL-terminate the line. */ @@ -640,11 +629,11 @@ /* XXX: Use encoding independent value for 0x1A */ if ( buf[start] != '#' && buf[start] != 0x1A && end > start ) { - error = (*cb)( buf + start, (unsigned long)( end - start ), lineno, + error = (*cb)( buf + start, end - start, lineno, (void*)&cb, client_data ); /* Redo if we have encountered CHARS without properties. */ if ( error == -1 ) - error = (*cb)( buf + start, (unsigned long)( end - start ), lineno, + error = (*cb)( buf + start, end - start, lineno, (void*)&cb, client_data ); if ( error ) break;