Text File

Making the "file" command recognize zoo archives

Zoo archives have the following magic number: Beginning at offset 20 decimal, there are four bytes with the values 0xdc, 0xa7, 0xc4, and 0xfd. (But if you call the first byte of a zoo archive byte 1, then the magic bytes will be bytes 21 through 24.)

To make the "file" command identify zoo archives, changes can be made as follows.

4.3BSD: See the context diff near the end of this document, suitable for application with the "patch" utility, that works with the 4.3BSD "file" command on a VAX-11/785. I don't know if this will also work under 4.2BSD or with any other implementation of the "file" command or on any other CPU.

System V Release 2 (as exemplified by Microport System V/AT): At the end of the file "/etc/magic", add the following line:

20 long 0xfdc4a7dc zoo archive

This should work on a little-endian machine, in which the long value 0xfdc4a7dc is stored with the least-significant byte first. For a big- endian machine, you will probably need to replace it with 0xdca7c4fd. This assumes that long occupies 4 bytes. If not, use a data type name that is exactly 4 bytes.

===== Changes needed to make the 4.3BSD "file" command recognize zoo archives. Known to work on a VAX-11/785.

*** file.c.old Thu Mar 6 19:34:29 1986 --- file.c Sat Feb 21 19:28:52 1987 *************** *** 172,181 **** --- 172,187 ---- case 070707: printf("cpio data\n"); return; }

+ if (buf[20] == (char) 0xdc && buf[21] == (char) 0xa7 && + buf[22] == (char) 0xc4 && buf[23] == (char) 0xfd) { + printf ("zoo archive\n"); + return; + } + if (buf[0] == '#' && buf[1] == '!' && shellscript(buf+2, &mbuf)) return; if (buf[0] == '\037' && buf[1] == '\235') { if (buf[2]&0x80) printf("block ");