1 Most TODOs live in the TODO section of doc/file.man (i.e. file(1)). 2 They are more visible there, so please add any further TODOs to that 3 file, not here. More speculative material can live here. 4 5 (This change was made when Reuben Thomas noticed that all the bugs 6 listed in the BUGS section of the man page had been fixed!) 7 8 --- 9 It would be nice to simplify file considerably. For example, 10 reimplement the apprentice and non-pattern magic methods in Python, 11 and compile the magic patterns to a giant regex (or something similar; 12 maybe using Ragel (http://www.complang.org/ragel/)) so that only a 13 small amount of C is needed (because fast execution is typically only 14 required for soft magic, not the more detailed information given by 15 hard-wired routines). In this regard, note that hplip, which is 16 BSD-licensed, has a magic reimplementation in Python. 17 --- 18 Read the kerberos magic entry for more ideas. 19 --- 20 Write a string merger to make magic entry sizes dynamic. 21 Strings will be converted to offsets from the string table. 22 --- 23 Programming language support, we can introduce the concept of a group 24 of rules where n rules need to match before the rule is positive. This 25 could require structural changes to the matching code :-( 26 27 0 group 2 # require 2 matches 28 # rule 1 29 >0 .... 30 ... 31 # rule 2 32 >0 .... 33 ... 34 --- 35 - Merge the stat code dance in one place and keep it in one place 36 (perhaps struct buffer). 37 - Enable seeking around if offset > nbytes if possible (the fd 38 is seekable). 39 - We could use file_pipe2file more (for EOF offsets, CDF documents), 40 but that is expensive; perhaps we should provide a way to disable it 41 - The implementation of struct buffer needs re-thinking and more work. 42 For example we don't always pass the fd in the child. This is not 43 important yet as we don't have yet cases where use/indirect magic 44 needs negative offsets. 45 - Really the whole thing just needs here's an (offset, buffer, size) 46 you have (filebuffer, filebuffersize &&|| fd), fill the buffer with 47 data from offset. The buffer API should be changed to just do that. 48 49 christos 50