From: Zebediah Figura Subject: [PATCH 2/3] storage.dll16: Correctly handle block values of -1. Message-Id: <1486850164-11843-2-git-send-email-z.figura12@gmail.com> Date: Sat, 11 Feb 2017 15:56:03 -0600 In-Reply-To: <1486850164-11843-1-git-send-email-z.figura12@gmail.com> References: <1486850164-11843-1-git-send-email-z.figura12@gmail.com> Signed-off-by: Zebediah Figura --- dlls/storage.dll16/storage.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/dlls/storage.dll16/storage.c b/dlls/storage.dll16/storage.c index 9fe8836..fed0d66 100644 --- a/dlls/storage.dll16/storage.c +++ b/dlls/storage.dll16/storage.c @@ -457,7 +457,7 @@ STORAGE_get_next_big_blocknr(stream_access16 *str,int blocknr) { READ_HEADER(str); - assert(blocknr>>7>7 < sth.num_of_bbd_blocks); if (sth.bbd_list[blocknr>>7]==0xffffffff) return -5; if (!STORAGE_get_big_block(str,sth.bbd_list[blocknr>>7],(LPBYTE)bbs)) @@ -587,7 +587,7 @@ STORAGE_get_next_small_blocknr(stream_access16 *str,int blocknr) { TRACE("(blocknr=%d)\n", blocknr); READ_HEADER(str); assert(blocknr>=0); - bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128); + bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr>>7); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); @@ -610,9 +610,10 @@ STORAGE_get_nth_next_small_blocknr(stream_access16*str,int blocknr,int nr) { READ_HEADER(str); assert(blocknr>=0); while ((nr--) && (blocknr>=0)) { - if (lastblocknr/128!=blocknr/128) { + if (lastblocknr>>7 != blocknr>>7) + { int bigblocknr; - bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128); + bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr>>7); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); @@ -806,7 +807,7 @@ STORAGE_set_big_chain(stream_access16*str,int blocknr,INT type) { READ_HEADER(str); assert(blocknr!=type); while (blocknr>=0) { - bigblocknr = sth.bbd_list[blocknr/128]; + bigblocknr = sth.bbd_list[blocknr>>7]; assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); @@ -840,8 +841,9 @@ STORAGE_set_small_chain(stream_access16*str,int blocknr,INT type) { lastblocknr=-129;bigblocknr=-2; while (blocknr>=0) { /* cache block ... */ - if (lastblocknr/128!=blocknr/128) { - bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr/128); + if (lastblocknr>>7 != blocknr>>7) + { + bigblocknr = STORAGE_get_nth_next_big_blocknr(str,sth.sbd_startblock,blocknr>>7); assert(bigblocknr>=0); ret = STORAGE_get_big_block(str,bigblocknr,block); assert(ret); -- 2.7.4