diff options
author | tron <tron@openttd.org> | 2005-09-23 20:20:08 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2005-09-23 20:20:08 +0000 |
commit | 1b16f210c21b85a9ac0e5f0db977f783a1e3d3fc (patch) | |
tree | e70c48872cb4fabc6a0a7d5be8307ee160aa77cf | |
parent | b1e6b54f94c8f173c8ab6a1e10e8daf89dd888ab (diff) | |
download | openttd-1b16f210c21b85a9ac0e5f0db977f783a1e3d3fc.tar.xz |
(svn r2979) Avoid unnecessary recursion
-rw-r--r-- | oldloader.c | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/oldloader.c b/oldloader.c index c751eb003..20f409bda 100644 --- a/oldloader.c +++ b/oldloader.c @@ -125,36 +125,26 @@ static byte ReadByte(LoadgameState *ls) byte. If that byte is negative, we have to repeat the next byte that many times (+1). Else, we need to read that amount of bytes. Works pretty good if you have many zero's behind eachother */ - int8 new_byte; - /* Check if we are reading a chunk */ - if (ls->chunk_size != 0) { - ls->total_read++; - ls->chunk_size--; - - /* If we are decoding, return the decode_char */ - if (ls->decoding) - return ls->decode_char; - - /* Else return byte from file */ - return ReadByteFromFile(ls); + if (ls->chunk_size == 0) { + /* Read new chunk */ + int8 new_byte = ReadByteFromFile(ls); + + if (new_byte < 0) { + /* Repeat next char for new_byte times */ + ls->decoding = true; + ls->decode_char = ReadByteFromFile(ls); + ls->chunk_size = -new_byte + 1; + } else { + ls->decoding = false; + ls->chunk_size = new_byte + 1; + } } - /* Read new chunk */ - new_byte = ReadByteFromFile(ls); - - if (new_byte < 0) { - /* Repeat next char for new_byte times */ - ls->decoding = true; - ls->decode_char = ReadByteFromFile(ls); - ls->chunk_size = -new_byte + 1; - } else { - ls->decoding = false; - ls->chunk_size = new_byte + 1; - } + ls->total_read++; + ls->chunk_size--; - /* Call this function again to return a byte */ - return ReadByte(ls); + return ls->decoding ? ls->decode_char : ReadByteFromFile(ls); } /** |