fix: ramdisk - dereference symlinks, they pack as zero-byte files
Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NQRTGoYgnZQsh7uCh6Jsxm
This commit is contained in:
+13
-2
@@ -14,7 +14,18 @@ if [ ! -d "$INPUT_DIR" ]; then
|
|||||||
echo "MontaukOS ramdisk" > "$INPUT_DIR/readme.txt"
|
echo "MontaukOS ramdisk" > "$INPUT_DIR/readme.txt"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create USTAR tar archive
|
# Create USTAR tar archive.
|
||||||
tar --format=ustar -cf "$OUTPUT_PATH" -C "$INPUT_DIR" .
|
#
|
||||||
|
# -h (dereference) is NOT optional: Fs/Ramdisk.cpp only recognises typeflag
|
||||||
|
# '5' (directory), so a symlink entry unpacks as a zero-length regular file --
|
||||||
|
# silently, with no error anywhere. A staged tree containing symlinks would
|
||||||
|
# ship empty files. Copying the target in is the only faithful representation.
|
||||||
|
tar --format=ustar -h -cf "$OUTPUT_PATH" -C "$INPUT_DIR" .
|
||||||
|
|
||||||
|
if tar -tvf "$OUTPUT_PATH" | grep -q '^l'; then
|
||||||
|
echo "mkramdisk: ERROR: symlink survived into $OUTPUT_PATH (would unpack as an empty file)" >&2
|
||||||
|
tar -tvf "$OUTPUT_PATH" | grep '^l' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "mkramdisk: created $OUTPUT_PATH from $INPUT_DIR ($(wc -c < "$OUTPUT_PATH") bytes)"
|
echo "mkramdisk: created $OUTPUT_PATH from $INPUT_DIR ($(wc -c < "$OUTPUT_PATH") bytes)"
|
||||||
|
|||||||
Reference in New Issue
Block a user