Well, read and write operations are working on intervals, and those intervals have a lower and an upper endpoint. If we simply rounded them both down to the nearest physical sector bounds, everything would work perfectly:
Physical sectors: [========][========][========][========][========][========][========] Aligned (no change): [--requested--------) [--floor()-ed-------) __________[========][========]________________________________________ | [--requested--------) [--floor()-ed-------) ______________________________[========][========]____________________ Not-aligned: [--requested------) [--floor()-ed-------) | __________[========][========]________________________________________ | [--requested-------) [--floor()-ed-------) ______________________________[========][========]____________________ ------------------------------------------------- Externet Webmail: http://webmail.externet.hu _______________________________________________ Bug-ddrescue mailing list Bug-ddrescue@gnu.org https://lists.gnu.org/mailman/listinfo/bug-ddrescue