Operating Systems Assignment 3
- Todo
- Done
Status of implementation
- Read the first 512 bytes of the device
- Parse BPB sector, read basic information (sector size, sectors per cluster, FAT size, current FAT id, etc.) and verify the filesystem is FAT32
- Locate and read raw data from the correct FAT table, then make sure you can follow cluster allocation chains
- Implement basic root directory parsing | make sure you can enumerate raw entries from the root directory until the final entry is indicated
- Implement basic short entry handling | parse short name (remove space-padding), attributes, size, first cluster, skip all other entries
- Add an ability to read the content of a file and a directory given the number of their first cluster
- Now you can start integrating with fuse | make sure you can list root ("/") directory and fill stat entries correctly (especially attribute S_IFREG and S_IFDIR). Make sure you can read top-level files
- Add multi-level directory resolution | traverse directory structure ("/dir1/dir2/file")
- Add support for long names. You will need to keep some state before you finally read the short entry holding the information about the file and you should check that long name entries are correct.
- Fill other stat fields (atime/mtime/ctime)
More tasks...
- Videos or music works
- Read from USB key
- find what's wrong about uids -> Had to declare mount_[gu]id static to avoid modifications to it
- get atime, ctime,... correct -> Made the conversion between FAT format for date and linux format for date (time_t)
- see if -1 as end of cluster works -> No, must mask MSB and check intervall [0xFFFFFF8,0xFFFFFFF]
- iconv UTF16 for long names -> Used iconv to convert the long filenames encoded in UTF-16le to UTF8
- directories should have size
Size of directory = number of clusters used for its directories entries (like linux
mount
) - ignore volume ID entries -> In order to not print device name as a file
- remove most magic numbers -> like root cluster no is not always 2
- Write the report/readme