fn read_fname(data: &[u8], offset: usize) -> (Option<String>, usize)
Read a length-prefixed, null-terminated FName string.
Layout: <u32 length><bytes><optional null> Returns (string, new_offset) or (None, offset) on failure.
<u32 length><bytes><optional null>