@(#) TODO 1.15 87/11/06 Test owner/group on extraction better. creation of links, symlinks, nodes doesn't follow the -k (f_keep) guidelines; if the file already exists, it is not replaced, even though no -k. Check stderr and stdout for errors after writing, and quit if so. Preliminary design of Multifile option to handle EOFs on input and output. Multifile can just close the archive when it hits end of archive, and ask for archive to be changed. It has no choice on some media, e.g. floppies and cartridge tapes, where there is no room for an EOF block there. Start off 2nd archive medium with odd header block, duplicating original, but with offset to start of data spec'd. Reading such a header causes tar non-'M' to complain while extracting (but to seek there and do it anyway!) Big win -- this works on cartridge tapes, should work on floppies, might work on magtape. It would encourage the *&%#$ systems programmers to fix their drivers, too! Profile it and see where the time, call counts, etc are going. Fix directory timestamps after inserting files into them. Wait til next file that's not in the directory. Need a stack of them. Option to seek the input file (in skip_file) rather than reading and tossing it? (Could just jump in buffer if stuff is in core.) Could misalign archive reads versus filesys and slow it down, who knows? Add -C option for creating from odd directories a la 4.2BSD? Break out odd bits of code into separate support modules. Add the r, u, X, l, F, C, and digit options of Unix tar. V8 tar does something that is quite handy when reading tapes written on 4.2 system into non-4.2 systems: it reduces file name components to 14 bytes or less and ensures that they are unique (I think it truncates to 10 bytes and appends "..aa" where aa are two unique letters) and puts out a file containing the mapping between long names on tape and short names on disk. Clean up 'd' (diff) option. Currently it works for regular files and symlinks, needs work for dirs and links. Ideally, output should look like "diff -r" or -rl after an extract of the tape and a real diff. Right now it's very messy. To do the above, we'd need to read the directories that we touch and check all the file names against what's on the tape. All we do now is check the file contents and stats. Check "int" variables to see if they really need to be long (file sizes, record counts, etc). Sizes of in-core buffers should be int; since malloc() takes an int argument we can never allocate one any bigger. Maybe unsigned int would be better, though. Little system people, help me out here! (E.g. run lint on it on your system and send me the result if it shows anything fixable.)