shuffler: correctly handle one-to-many relationships
authorH. Peter Anvin <hpa@zytor.com>
Sun, 3 May 2009 00:27:03 +0000 (17:27 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Sun, 3 May 2009 00:27:03 +0000 (17:27 -0700)
commitb55f8a80e17e7b9c1b003c808ea8048c49fbf59c
tree0aeb376fcaf40764d94bcf526b9b9f438f217c78
parent9cd4a3b4fb21482b474d63486fe677966eeb2761
shuffler: correctly handle one-to-many relationships

One-to-many relationships, in which one chunk of a file is used in
more than one place, tends to naturally show up in decoding certain
fileformats, including (but not limited to) Microsoft SDI.  Make the
shuffler library handle those cases correctly, and remove a
special-purpose hack in sdi.c.

This is based on the observation that all one-to-many relationships
can be treated as a one-to-one shuffle followed by
destination-to-destination copies; i.e. one copy is (arbitrarily)
assigned the "master copy" status, and all aliases are then copied
from the master copy when the master copy is already in its final
place.  All other copies can then be simply ignored for the duration
of the shuffle, just as zero-memory is.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
com32/lib/syslinux/movebits.c
com32/modules/sdi.c