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 ");