Open
Description
Repro:
# First let's create a file with the first block all zeros
dd if=/dev/zero of=SPARSE#060000 bs=1 count=512
echo "Hello World" >> SPARSE#060000
# Now let's create a volume and add the file
cadius CREATEVOLUME tmp.po TEST 800kb
cadius ADDFILE tmp.po /TEST SPARSE#060000
cadius CATALOG tmp.po
# note 1 sparse block
cadius CHECKVOLUME tmp.po
# note no errors
Now mount a ProDOS-8 system disk (2.0.3, 2.4.3, shouldn't matter) and the tmp.po
disk and run BASIC.SYSTEM:
DELETE /TEST/SPARSE
Back to the shell:
cadius CHECKVOLUME tmp.po
# => Block 0000 is declared FREE in the Bitmap, but used by Boot
Ooops! For even more fun, go back to BASIC.SYSTEM:
10 HOME
SAVE /TEST/HELLO
# ProDOS crashes with RESTART SYSTEM-$0C
Per ProDOS-8 Technical Reference Manual:
By the Way: The first data block of a standard file, be it a seedling, sapling, or tree file, is always allocated. Thus there is always a data block to be read in when the file is opened.
So it appears Cadius is violating this filesystem assumption, and it makes ProDOS very sad.