def resize_chain blocks, size
new_num_blocks = (size / block_size.to_f).ceil
old_num_blocks = blocks.length
if new_num_blocks < old_num_blocks
(new_num_blocks...old_num_blocks).each { |i| self[blocks[i]] = AVAIL }
self[blocks[new_num_blocks-1]] = EOC if new_num_blocks > 0
blocks.slice! new_num_blocks..-1
elsif new_num_blocks > old_num_blocks
last_block = blocks.last
(new_num_blocks - old_num_blocks).times do
block = free_block
self[last_block] = block if last_block
blocks << block
last_block = block
self[last_block] = EOC
end
end
blocks
end