dhesi@bsu-cs.UUCP (Rahul Dhesi) (08/28/87)
1. A speculative fix to make the zoo archiver work on machines on which
`long' is longer than 32 bits.
2. A patch to make the 4.3BSD `file' command recognize zoo archives.
3. A patch to make the System V Release 2 `file' command recognize
zoo archives.
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
# cray.bug -- speculative fix for large word size machines
# file.changes -- how to make `file' recognize zoo archives
# file.diff -- context diff for 4.3BSD `file'
# This archive created: Thu Aug 27 16:22:59 1987
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'cray.bug'" '(1321 characters)'
if test -f 'cray.bug'
then
echo shar: "will not over-write existing file 'cray.bug'"
else
sed 's/^X//' << \SHAR_EOF > 'cray.bug'
X Cray Bug
X
XOn machines with `long' greater than 32 bits, zoo will create archives
Xcorrectly but will report an invalid archive and refuse to extract
Xthem. The original bug report was for a Cray.
X
XSince I don't have a Cray, I'm not sure if the following fix will
Xwork. Patch the file zoo.h as shown. The basic idea is to define
XZOO_TAG such that its lowest 32 bits contain the bit pattern
Xcorresponding to the number 0xFDC4A7DC and the remaining bits, if any,
Xare zero.
X
XIf this fix doesn't work get me a guest account on your Cray and I will
Xfind another.
X
X Rahul Dhesi 1987/08/27
X
Xdiff -c old/zoo.h ./zoo.h
X*** old/zoo.h Wed Aug 26 20:12:54 1987
X--- ./zoo.h Wed Aug 26 20:18:19 1987
X***************
X*** 58,64 ****
X #define MINOR_EXT_VER 0
X
X #define CTRL_Z 26
X! #define ZOO_TAG ((unsigned long) 0xFDC4A7DC) /* A random choice */
X #define TEXT "ZOO 1.50 Archive.\032" /* Header text for archive. */
X #define SIZ_TEXT 20 /* Size of header text */
X
X--- 58,64 ----
X #define MINOR_EXT_VER 0
X
X #define CTRL_Z 26
X! #define ZOO_TAG ((unsigned long) 0xFDC4A7DCL) /* A random choice */
X #define TEXT "ZOO 1.50 Archive.\032" /* Header text for archive. */
X #define SIZ_TEXT 20 /* Size of header text */
X
SHAR_EOF
fi
echo shar: "extracting 'file.changes'" '(1161 characters)'
if test -f 'file.changes'
then
echo shar: "will not over-write existing file 'file.changes'"
else
sed 's/^X//' << \SHAR_EOF > 'file.changes'
X Making the "file" command recognize zoo archives
X
XZoo archives have the following magic number: Beginning at offset 20
Xdecimal, there are four bytes with the values 0xdc, 0xa7, 0xc4, and
X0xfd. (But if you call the first byte of a zoo archive byte 1, then
Xthe magic bytes will be bytes 21 through 24.)
X
XTo make the "file" command identify zoo archives, changes can be made
Xas follows.
X
X4.3BSD: See the file "file.diff" for a context diff that works with
Xthe 4.3BSD "file" command on a VAX-11/785. I don't know if this will
Xalso work under 4.2BSD or with any other implementation of the "file"
Xcommand or on any other CPU.
X
XSystem V Release 2 (as exemplified by Microport System V/AT): At the
Xend of the file "/etc/magic", add the following line:
X
X20 long 0xfdc4a7dc zoo archive
X
XThis should work on a little-endian machine, in which the long value
X0xfdc4a7dc is stored with the least-significant byte first. For a big-
Xendian machine, you will probably need to replace it with 0xdca7c4fd.
XThis assumes that long occupies 4 bytes. If not, use a data type name
Xthat is exactly 4 bytes.
X
X Rahul Dhesi 1987/08/27
SHAR_EOF
fi
echo shar: "extracting 'file.diff'" '(704 characters)'
if test -f 'file.diff'
then
echo shar: "will not over-write existing file 'file.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'file.diff'
XChanges needed to make the 4.3BSD "file" command recognize zoo
Xarchives. Known to work on a VAX-11/785.
X
X Rahul Dhesi 1987/08/27
X
X*** file.c.old Thu Mar 6 19:34:29 1986
X--- file.c Sat Feb 21 19:28:52 1987
X***************
X*** 172,181 ****
X--- 172,187 ----
X case 070707:
X printf("cpio data\n");
X return;
X }
X
X+ if (buf[20] == (char) 0xdc && buf[21] == (char) 0xa7 &&
X+ buf[22] == (char) 0xc4 && buf[23] == (char) 0xfd) {
X+ printf ("zoo archive\n");
X+ return;
X+ }
X+
X if (buf[0] == '#' && buf[1] == '!' && shellscript(buf+2, &mbuf))
X return;
X if (buf[0] == '\037' && buf[1] == '\235') {
X if (buf[2]&0x80)
X printf("block ");
SHAR_EOF
fi
exit 0
# End of shell archive
--
Rahul Dhesi UUCP: {ihnp4,seismo}!{iuvax,pur-ee}!bsu-cs!dhesi