aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Pritchard <mpp@FreeBSD.org>1996-01-23 12:29:07 +0000
committerMike Pritchard <mpp@FreeBSD.org>1996-01-23 12:29:07 +0000
commit8356464a861a6f4246dd1be789103f9591135aa8 (patch)
tree9fa2da304b3ae0ff653631581c1717586dfb28c2
parentc7510038dc04bc187f80816d41cc88dfe8ae1e84 (diff)
downloadsrc-8356464a861a6f4246dd1be789103f9591135aa8.tar.gz
src-8356464a861a6f4246dd1be789103f9591135aa8.zip
Upgrade to file version 3.19.
Notes
Notes: svn path=/vendor/file/dist/; revision=13584
-rw-r--r--usr.bin/file/LEGAL.NOTICE24
-rw-r--r--usr.bin/file/Magdir/Localstuff8
-rw-r--r--usr.bin/file/Magdir/alliant4
-rw-r--r--usr.bin/file/Magdir/animation54
-rw-r--r--usr.bin/file/Magdir/apl6
-rw-r--r--usr.bin/file/Magdir/apple6
-rw-r--r--usr.bin/file/Magdir/archive210
-rw-r--r--usr.bin/file/Magdir/att3b9
-rw-r--r--usr.bin/file/Magdir/audio78
-rw-r--r--usr.bin/file/Magdir/blit5
-rw-r--r--usr.bin/file/Magdir/c-lang16
-rw-r--r--usr.bin/file/Magdir/chi5
-rw-r--r--usr.bin/file/Magdir/clipper5
-rw-r--r--usr.bin/file/Magdir/commands97
-rw-r--r--usr.bin/file/Magdir/compress76
-rw-r--r--usr.bin/file/Magdir/convex5
-rw-r--r--usr.bin/file/Magdir/database36
-rw-r--r--usr.bin/file/Magdir/diamond3
-rw-r--r--usr.bin/file/Magdir/diff4
-rw-r--r--usr.bin/file/Magdir/dump5
-rw-r--r--usr.bin/file/Magdir/elf76
-rw-r--r--usr.bin/file/Magdir/encore5
-rw-r--r--usr.bin/file/Magdir/filesystems6
-rw-r--r--usr.bin/file/Magdir/fonts29
-rw-r--r--usr.bin/file/Magdir/frame22
-rw-r--r--usr.bin/file/Magdir/hp85
-rw-r--r--usr.bin/file/Magdir/ibm3706
-rw-r--r--usr.bin/file/Magdir/ibm60007
-rw-r--r--usr.bin/file/Magdir/iff33
-rw-r--r--usr.bin/file/Magdir/images255
-rw-r--r--usr.bin/file/Magdir/intel6
-rw-r--r--usr.bin/file/Magdir/interleaf9
-rw-r--r--usr.bin/file/Magdir/ispell71
-rw-r--r--usr.bin/file/Magdir/karma8
-rw-r--r--usr.bin/file/Magdir/lex10
-rw-r--r--usr.bin/file/Magdir/lif7
-rw-r--r--usr.bin/file/Magdir/linux66
-rw-r--r--usr.bin/file/Magdir/lisp10
-rw-r--r--usr.bin/file/Magdir/magic4
-rw-r--r--usr.bin/file/Magdir/mail.news5
-rw-r--r--usr.bin/file/Magdir/microsoft10
-rw-r--r--usr.bin/file/Magdir/mirage3
-rw-r--r--usr.bin/file/Magdir/mkid3
-rw-r--r--usr.bin/file/Magdir/mmdf4
-rw-r--r--usr.bin/file/Magdir/motorola5
-rw-r--r--usr.bin/file/Magdir/ms-dos77
-rw-r--r--usr.bin/file/Magdir/ncr7
-rw-r--r--usr.bin/file/Magdir/netbsd84
-rw-r--r--usr.bin/file/Magdir/news13
-rw-r--r--usr.bin/file/Magdir/pbm3
-rw-r--r--usr.bin/file/Magdir/pdf7
-rw-r--r--usr.bin/file/Magdir/pdp9
-rw-r--r--usr.bin/file/Magdir/pgp14
-rw-r--r--usr.bin/file/Magdir/pkgadd5
-rw-r--r--usr.bin/file/Magdir/plus55
-rw-r--r--usr.bin/file/Magdir/printer55
-rw-r--r--usr.bin/file/Magdir/psdbms5
-rw-r--r--usr.bin/file/Magdir/pyramid5
-rw-r--r--usr.bin/file/Magdir/rpm14
-rw-r--r--usr.bin/file/Magdir/rtf12
-rw-r--r--usr.bin/file/Magdir/sc7
-rw-r--r--usr.bin/file/Magdir/sccs6
-rw-r--r--usr.bin/file/Magdir/sendmail5
-rw-r--r--usr.bin/file/Magdir/sequent4
-rw-r--r--usr.bin/file/Magdir/sgi165
-rw-r--r--usr.bin/file/Magdir/sgml27
-rw-r--r--usr.bin/file/Magdir/softquad7
-rw-r--r--usr.bin/file/Magdir/sun6
-rw-r--r--usr.bin/file/Magdir/terminfo5
-rw-r--r--usr.bin/file/Magdir/tex27
-rw-r--r--usr.bin/file/Magdir/timezone12
-rw-r--r--usr.bin/file/Magdir/troff29
-rw-r--r--usr.bin/file/Magdir/typeset6
-rw-r--r--usr.bin/file/Magdir/unknown5
-rw-r--r--usr.bin/file/Magdir/uuencode31
-rw-r--r--usr.bin/file/Magdir/varied.out10
-rw-r--r--usr.bin/file/Magdir/vax5
-rw-r--r--usr.bin/file/Magdir/visx5
-rw-r--r--usr.bin/file/Magdir/vms27
-rw-r--r--usr.bin/file/Magdir/zilog6
-rw-r--r--usr.bin/file/Magdir/zyxel15
-rw-r--r--usr.bin/file/Makefile12
-rw-r--r--usr.bin/file/apprentice.c125
-rw-r--r--usr.bin/file/ascmagic.c41
-rw-r--r--usr.bin/file/compress.c17
-rw-r--r--usr.bin/file/file.159
-rw-r--r--usr.bin/file/file.c133
-rw-r--r--usr.bin/file/file.h9
-rw-r--r--usr.bin/file/fsmagic.c4
-rw-r--r--usr.bin/file/magic.522
-rw-r--r--usr.bin/file/names.h13
-rw-r--r--usr.bin/file/patchlevel.h36
-rw-r--r--usr.bin/file/print.c8
-rw-r--r--usr.bin/file/softmagic.c28
94 files changed, 2097 insertions, 536 deletions
diff --git a/usr.bin/file/LEGAL.NOTICE b/usr.bin/file/LEGAL.NOTICE
index a8255b903a12..87c3176beb78 100644
--- a/usr.bin/file/LEGAL.NOTICE
+++ b/usr.bin/file/LEGAL.NOTICE
@@ -1,13 +1,10 @@
-Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992.
-Written by Ian F. Darwin and others.
-$Id: LEGAL.NOTICE,v 1.8 1993/03/17 11:35:30 ian Exp $
+Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
+Software written by Ian F. Darwin and others; maintained by Christos Zoulas.
+$Id: LEGAL.NOTICE,v 1.9 1995/10/27 23:14:20 christos Exp $
-This software is not subject to and may not be made subject to any
-license of the American Telephone and Telegraph Company (AT&T Inc.),
-UNIX System Laboratories (USL Inc.), Novell Inc., Sun Microsystems
-Inc., Digital Equipment Inc., Lotus Development Inc., the Regents of
-the University of California, The X Consortium or MIT, or The Free
-Software Foundation.
+This software (or derivative software) may not be made subject to any
+license which denies anyone permission to alter it and redistribute it
+freely. Derivative software must also still fall under this license.
This software is not subject to any export provision of the United States
Department of Commerce, and may be exported to any country or planet.
@@ -26,12 +23,9 @@ to the following restrictions:
3. Altered versions must be plainly marked as such, and must not be
misrepresented as being the original software. Since few users
ever read sources, credits must appear in the documentation.
+ Derivative works must also be marked as such, and credits must appear
+ in the documentation.
4. This notice may not be removed or altered.
-UNIX is a trademark of UNIX System Laboratories (which is probably a
-subsidiary of Novell, Inc., by the time you read this). The name "UNIX"
-may not be used by commercial undertakings without permission in
-writing from USL. Just ask BSDI (Berkeley Software Design Inc.), a
-commercial venture not officially connected with the University of
-California at Berkeley.
+
diff --git a/usr.bin/file/Magdir/Localstuff b/usr.bin/file/Magdir/Localstuff
index 224940b946e1..3c2fa0ef777f 100644
--- a/usr.bin/file/Magdir/Localstuff
+++ b/usr.bin/file/Magdir/Localstuff
@@ -1,3 +1,7 @@
-# $Id: Localstuff,v 1.2 1993/01/05 13:22:25 ian Exp $
-# Add any locally-observed files here. Remember:
+
+#------------------------------------------------------------------------------
+# Localstuff: file(1) magic for locally observed files
+#
+# $Id: Localstuff,v 1.3 1995/01/21 21:09:00 christos Exp $
+# Add any locally observed files here. Remember:
# text if readable, executable if runnable binary, data if unreadable.
diff --git a/usr.bin/file/Magdir/alliant b/usr.bin/file/Magdir/alliant
index 52ed628db293..69cf4b44d742 100644
--- a/usr.bin/file/Magdir/alliant
+++ b/usr.bin/file/Magdir/alliant
@@ -1,5 +1,7 @@
+
+#------------------------------------------------------------------------------
+# alliant: file(1) magic for Alliant FX series a.out files
#
-# Alliant FX series a.out files:
# If the FX series is the one that had a processor with a 68K-derived
# instruction set, the "short" should probably become "beshort" and the
# "long" should probably become "belong".
diff --git a/usr.bin/file/Magdir/animation b/usr.bin/file/Magdir/animation
new file mode 100644
index 000000000000..9d2dc8e69aa2
--- /dev/null
+++ b/usr.bin/file/Magdir/animation
@@ -0,0 +1,54 @@
+
+#------------------------------------------------------------------------------
+# animation: file(1) magic for animation/movie formats
+#
+# animation formats
+# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
+# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
+
+# MPEG animation format
+0 string \000\000\001\263 MPEG file
+
+# FLI animation format
+4 leshort 0xAF11 FLI file
+>6 leshort x - %d frames,
+>8 leshort x width=%d pixels,
+>10 leshort x height=%d pixels,
+>12 leshort x depth=%d,
+>16 leshort x ticks/frame=%d
+# FLC animation format
+4 leshort 0xAF12 FLC file
+>6 leshort x - %d frames
+>8 leshort x width=%d pixels,
+>10 leshort x height=%d pixels,
+>12 leshort x depth=%d,
+>16 leshort x ticks/frame=%d
+
+# DL animation format
+# XXX - collision with most `mips' magic
+#
+# I couldn't find a real magic number for these, however, this
+# -appears- to work. Note that it might catch other files, too, so be
+# careful!
+#
+# Note that title and author appear in the two 20-byte chunks
+# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
+# 255 (hex FF)! The DL format is really bad.
+#
+#0 byte 1 DL version 1, medium format (160x100, 4 images/screen)
+#>42 byte x - %d screens,
+#>43 byte x %d commands
+#0 byte 2 DL version 2
+#>1 byte 1 - large format (320x200,1 image/screen),
+#>1 byte 2 - medium format (160x100,4 images/screen),
+#>1 byte >2 - unknown format,
+#>42 byte x %d screens,
+#>43 byte x %d commands
+# Based on empirical evidence, DL version 3 have several nulls following the
+# \003. Most of them start with non-null values at hex offset 0x34 or so.
+#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3
+
+# SGI and Apple formats
+0 string MOVI Silicon Graphics movie file
+4 string moov Apple QuickTime movie file (moov)
+4 string mdat Apple QuickTime movie file (mdat)
diff --git a/usr.bin/file/Magdir/apl b/usr.bin/file/Magdir/apl
index 6ede926af378..040043191938 100644
--- a/usr.bin/file/Magdir/apl
+++ b/usr.bin/file/Magdir/apl
@@ -1,4 +1,6 @@
-#
-# magic.apl:
+
+#------------------------------------------------------------------------------
+# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL
+# workspaces)
#
0 long 0100554 APL workspace (Ken's original?)
diff --git a/usr.bin/file/Magdir/apple b/usr.bin/file/Magdir/apple
index eb48673cc0ed..a6492b74b2da 100644
--- a/usr.bin/file/Magdir/apple
+++ b/usr.bin/file/Magdir/apple
@@ -1,5 +1,6 @@
-#
-# Apple II file formats
+
+#------------------------------------------------------------------------------
+# apple: file(1) magic for Apple II file formats
#
0 string FiLeStArTfIlEsTaRt binscii (apple ][) text
0 string \x0aGL Binary II (apple ][) data
@@ -7,4 +8,3 @@
0 string SIT! StuffIt (macintosh) text
0 string NuFile NuFile archive (apple ][) data
0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data
-
diff --git a/usr.bin/file/Magdir/archive b/usr.bin/file/Magdir/archive
index 8999c2f497e5..bd400815444a 100644
--- a/usr.bin/file/Magdir/archive
+++ b/usr.bin/file/Magdir/archive
@@ -1,15 +1,215 @@
-# A collection of various "ar" and "cpio" archive formats.
-# "Tar" archives are handled in the C code.
+
+#------------------------------------------------------------------------------
+# archive: file(1) magic for archive formats (see also "msdos" for self-
+# extracting compressed archives)
+#
+# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
+# pre-POSIX "tar" archives are handled in the C code.
+
+# POSIX tar archives
+257 string ustar\0 POSIX tar archive
+257 string ustar\040\040\0 GNU tar archive
+
+# cpio archives
+#
+# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
+# The idea is to indicate archives produced on machines with the same
+# byte order as the machine running "file" with "cpio archive", and
+# to indicate archives produced on machines with the opposite byte order
+# from the machine running "file" with "byte-swapped cpio archive".
+#
+# The SVR4 "cpio(4)" hints that there are additional formats, but they
+# are defined as "short"s; I think all the new formats are
+# character-header formats and thus are strings, not numbers.
0 short 070707 cpio archive
-0 string 070707 ASCII cpio archive
+0 short 0143561 byte-swapped cpio archive
+0 string 070707 ASCII cpio archive (pre-SVR4 or odc)
+0 string 070701 ASCII cpio archive (SVR4 with no CRC)
+0 string 070702 ASCII cpio archive (SVR4 with CRC)
+
+# other archives
0 long 0177555 very old archive
0 short 0177555 very old PDP-11 archive
0 long 0177545 old archive
0 short 0177545 old PDP-11 archive
0 long 0100554 apl workspace
0 string =<ar> archive
+
+# MIPS archive (needs to go first)
+#
+0 string !<arch>\n__________E MIPS archive
+>20 string U with MIPS Ucode members
+>21 string L with MIPSEL members
+>21 string B with MIPSEB members
+>19 string L and an EL hash table
+>19 string B and an EB hash table
+>22 string X -- out of date
+
0 string !<arch> archive
>8 string __.SYMDEF random library
0 string -h- Software Tools format archive text
-# Rahul Dhesi's zoo archive format, from keith@cerberus.uchicago.edu.
-20 long 0xdca7c4fd Rahul Dhesi's "zoo" archive
+
+#
+# XXX - why are there multiple <ar> thingies? Note that 0x213c6172 is
+# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
+#
+# 0 string !<arch> current ar archive
+# 0 long 0x213c6172 archive file
+#
+# and for SVR3.1 archives, we have:
+#
+# 0 string \<ar> System V Release 1 ar archive
+# 0 string =<ar> archive
+# 0 string =<ar> archive
+#
+# XXX - did Aegis really store shared libraries, breakpointed modules,
+# and absolute code program modules in the same format as new-style
+# "ar" archives?
+#
+0 string !<arch> current ar archive
+>8 string __.SYMDEF random library
+>0 belong =65538 - pre SR9.5
+>0 belong =65539 - post SR9.5
+>0 beshort 2 - object archive
+>0 beshort 3 - shared library module
+>0 beshort 4 - debug break-pointed module
+>0 beshort 5 - absolute code program module
+0 string \<ar> System V Release 1 ar archive
+0 string =<ar> archive
+#
+# XXX - from "vax", which appears to collect a bunch of byte-swapped
+# thingies, to help you recognize VAX files on big-endian machines;
+# with "leshort", "lelong", and "string", that's no longer necessary....
+#
+0 belong 0x65ff0000 VAX 3.0 archive
+0 belong 0x3c61723e VAX 5.0 archive
+#
+0 long 0x213c6172 archive file
+0 lelong 0177555 very old VAX archive
+0 leshort 0177555 very old PDP-11 archive
+#
+# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
+# be a random library (it said 0xff65 rather than 0177545).
+#
+0 lelong 0177545 old VAX archive
+>8 string __.SYMDEF random library
+0 leshort 0177545 old PDP-11 archive
+>8 string __.SYMDEF random library
+#
+0 string =<ar> archive
+#
+# From "pdp":
+#
+0 lelong 0x39bed PDP-11 old archive
+0 lelong 0x39bee PDP-11 4.0 archive
+#
+0 string -h- Software Tools format archive text
+
+# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
+#
+# The first byte is the magic (0x1a), byte 2 is the compression type for
+# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
+# filename of the first file (null terminated). Since some types collide
+# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
+# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo.
+0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW
+0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed
+0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed
+0 lelong&0x8080ffff 0x0000031a ARC archive data, packed
+0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed
+0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched
+
+# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
+# I can't create either SPARK or ArcFS archives so I have not tested this stuff
+# [GRR: the original entries collide with ARC, above; replaced with combined
+# version (not tested)]
+#0 byte 0x1a RISC OS archive
+#>1 string archive (ArcFS format)
+0 string \032archive RISC OS archive (ArcFS format)
+
+# ARJ archiver (jason@jarthur.Claremont.EDU)
+0 leshort 0xea60 ARJ archive data
+>5 byte x \b, v%d,
+>8 byte &0x04 multi-volume,
+>8 byte &0x10 slash-switched,
+>8 byte &0x20 backup,
+>34 string x original name: %s,
+>7 byte 0 os: MS-DOS
+>7 byte 1 os: PRIMOS
+>7 byte 2 os: Unix
+>7 byte 3 os: Amiga
+>7 byte 4 os: Macintosh
+>7 byte 5 os: OS/2
+>7 byte 6 os: Apple ][ GS
+>7 byte 7 os: Atari ST
+>7 byte 8 os: NeXT
+>7 byte 9 os: VAX/VMS
+>3 byte >0 %d]
+
+# HA archiver (Greg Roelofs, newt@uchicago.edu)
+# This is a really bad format. A file containing HAWAII will match this...
+#0 string HA HA archive data,
+#>2 leshort =1 1 file,
+#>2 leshort >1 %u files,
+#>4 byte&0x0f =0 first is type CPY
+#>4 byte&0x0f =1 first is type ASC
+#>4 byte&0x0f =2 first is type HSC
+#>4 byte&0x0f =0x0e first is type DIR
+#>4 byte&0x0f =0x0f first is type SPECIAL
+
+# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
+0 string HPAK HPACK archive data
+
+# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
+0 string \351,\001JAM\ JAM archive,
+>7 string >\0 version %.4s
+>0x26 byte =0x27 -
+>>0x2b string >\0 label %.11s,
+>>0x27 lelong x serial %08x,
+>>0x36 string >\0 fstype %.8s
+
+# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
+2 string -lh0- LHarc 1.x archive data [lh0]
+2 string -lh1- LHarc 1.x archive data [lh1]
+2 string -lz4- LHarc 1.x archive data [lz4]
+2 string -lz5- LHarc 1.x archive data [lz5]
+# [never seen any but the last; -lh4- reported in comp.compression:]
+2 string -lzs- LHa 2.x? archive data [lzs]
+2 string -lh - LHa 2.x? archive data [lh ]
+2 string -lhd- LHa 2.x? archive data [lhd]
+2 string -lh2- LHa 2.x? archive data [lh2]
+2 string -lh3- LHa 2.x? archive data [lh3]
+2 string -lh4- LHa (2.x) archive data [lh4]
+2 string -lh5- LHa (2.x) archive data [lh5]
+>20 byte x - header level %d
+
+# RAR archiver (Greg Roelofs, newt@uchicago.edu)
+0 string Rar! RAR archive data
+
+# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
+0 string SQSH squished archive data (Acorn RISCOS)
+
+# UC2 archiver (Greg Roelofs, newt@uchicago.edu)
+# I can't figure out the self-extracting form of these buggers...
+0 string UC2\x1a UC2 archive data
+
+# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
+0 string PK\003\004 Zip archive data
+>4 byte 0x09 \b, at least v0.9 to extract
+>4 byte 0x0a \b, at least v1.0 to extract
+>4 byte 0x0b \b, at least v1.1 to extract
+>4 byte 0x14 \b, at least v2.0 to extract
+
+# Zoo archiver
+20 lelong 0xfdc4a7dc Zoo archive data
+>4 byte >48 \b, v%c.
+>>6 byte >47 \b%c
+>>>7 byte >47 \b%c
+>32 byte >0 \b, modify: v%d
+>>33 byte x \b.%d+
+>42 lelong 0xfdc4a7dc \b,
+>>70 byte >0 extract: v%d
+>>>71 byte x \b.%d+
+
+# Shell archives
+10 string #\ This\ is\ a\ shell\ archive shell archive text
diff --git a/usr.bin/file/Magdir/att3b b/usr.bin/file/Magdir/att3b
index c1e9e39fdde2..7723a7fb8e5f 100644
--- a/usr.bin/file/Magdir/att3b
+++ b/usr.bin/file/Magdir/att3b
@@ -1,5 +1,6 @@
-#
-# AT&T 3B machines
+
+#------------------------------------------------------------------------------
+# att3b: file(1) magic for AT&T 3B machines
#
# The `versions' should be un-commented if they work for you.
# (Was the problem just one of endianness?)
@@ -21,7 +22,7 @@
>12 belong >0 not stripped
>18 beshort ^00010000 N/A on 3b2/300 w/paging
>18 beshort &00020000 32100 required
->18 beshort &00040000 and mau hardware required
+>18 beshort &00040000 and MAU hardware required
>20 beshort 0407 (impure)
>20 beshort 0410 (pure)
>20 beshort 0413 (demand paged)
@@ -30,7 +31,7 @@
0 beshort 0561 WE32000 COFF executable (TV)
>12 belong >0 not stripped
#>18 beshort &00020000 - 32100 required
-#>18 beshort &00040000 and mau hardware required
+#>18 beshort &00040000 and MAU hardware required
#>22 beshort >0 - version %ld
#
# core file for 3b2
diff --git a/usr.bin/file/Magdir/audio b/usr.bin/file/Magdir/audio
index 6b4cb364532c..4dc9dddd6614 100644
--- a/usr.bin/file/Magdir/audio
+++ b/usr.bin/file/Magdir/audio
@@ -1,43 +1,73 @@
+
+#------------------------------------------------------------------------------
+# audio: file(1) magic for sound formats (see also "iff")
#
-# Sound formats, from Jan Nicolai Langfeldt <janl@ifi.uio.no>,
+# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
+# and others
#
# Sun/NeXT audio data
-0 string .snd audio data:
->12 belong 1 8-bit u-law,
->12 belong 2 8-bit linear PCM,
+0 string .snd Sun/NeXT audio data:
+>12 belong 1 8-bit ISDN u-law,
+>12 belong 2 8-bit linear PCM [REF-PCM],
>12 belong 3 16-bit linear PCM,
>12 belong 4 24-bit linear PCM,
>12 belong 5 32-bit linear PCM,
->12 belong 6 32-bit floating point,
->12 belong 7 64-bit floating point,
->12 belong 23 compressed (G.721 ADPCM),
+>12 belong 6 32-bit IEEE floating point,
+>12 belong 7 64-bit IEEE floating point,
+>12 belong 23 8-bit ISDN u-law compressed (CCITT G.721 ADPCM voice data encoding),
>20 belong 1 mono,
>20 belong 2 stereo,
>20 belong 4 quad,
->16 belong x %d Hz
+>16 belong >0 %d Hz
+
# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
# that uses little-endian encoding and has a different magic number
-# (0x0064732E in little-endian encoding).
0 lelong 0x0064732E DEC audio data:
->12 lelong 1 8-bit u-law,
->12 lelong 2 8-bit linear PCM,
+>12 lelong 1 8-bit ISDN u-law,
+>12 lelong 2 8-bit linear PCM [REF-PCM],
>12 lelong 3 16-bit linear PCM,
>12 lelong 4 24-bit linear PCM,
>12 lelong 5 32-bit linear PCM,
->12 lelong 6 32-bit floating point,
->12 lelong 7 64-bit floating point,
->12 lelong 23 compressed (G.721 ADPCM),
+>12 lelong 6 32-bit IEEE floating point,
+>12 lelong 7 64-bit IEEE floating point,
+>12 lelong 23 8-bit ISDN u-law compressed (CCITT G.721 ADPCM voice data encoding),
>20 lelong 1 mono,
>20 lelong 2 stereo,
>20 lelong 4 quad,
->16 lelong x %d Hz
-# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM"
-8 string AIFF AIFF audio data
-8 string AIFC AIFF-C audio data
-8 string 8SVX IFF/8SVX audio data
-# Bytes 0-3 of Waveform (*.wav) audio files are "RIFF"
-8 string WAVE Waveform audio data
-0 string Creative\ Voice\ File Soundblaster audio data
-0 long 0x4e54524b MultiTrack sound data file
->4 long x - version %ld
+>16 lelong >0 %d Hz
+
+# Creative Labs AUDIO stuff
+0 string MThd Standard MIDI data
+>9 byte >0 (format %d)
+>11 byte >1 using %d channels
+0 string CTMF Creative Music (CMF) data
+0 string SBI SoundBlaster instrument data
+0 string Creative\ Voice\ File Creative Labs voice data
+# is this next line right? it came this way...
+>19 byte 0x1A
+>23 byte >0 - version %d
+>22 byte >0 \b.%d
+
+# first entry is also the string "NTRK"
+0 belong 0x4e54524b MultiTrack sound data
+>4 belong x - version %ld
+
+# Microsoft WAVE format (*.wav)
+# [GRR 950115: probably all of the shorts and longs should be leshort/lelong]
+0 string RIFF Microsoft RIFF
+>8 string WAVE \b, WAVE audio data
+>34 short >0 \b, %d bit
+>22 short =1 \b, mono
+>22 short =2 \b, stereo
+>22 short >2 \b, %d channels
+>24 long >0 %d Hz
+
+# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED
+# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
+0 string EMOD Extended MOD sound data,
+>4 byte&0xf0 x version %d
+>4 byte&0x0f x \b.%d,
+>45 byte x %d instruments
+>83 byte 0 (module)
+>83 byte 1 (song)
diff --git a/usr.bin/file/Magdir/blit b/usr.bin/file/Magdir/blit
index 0f4804da8c02..7a470ed4a669 100644
--- a/usr.bin/file/Magdir/blit
+++ b/usr.bin/file/Magdir/blit
@@ -1,4 +1,7 @@
-# 68K Blit stuff as seen from 680x0 machine
+
+#------------------------------------------------------------------------------
+# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine
+#
# Note that this 0407 conflicts with several other a.out formats...
#
# XXX - should this be redone with "be" and "le", so that it works on
diff --git a/usr.bin/file/Magdir/c-lang b/usr.bin/file/Magdir/c-lang
index 79b2254bc699..1b0147595b7d 100644
--- a/usr.bin/file/Magdir/c-lang
+++ b/usr.bin/file/Magdir/c-lang
@@ -1,3 +1,13 @@
-# this first will upset you if you're a PL/1 shop...
-# in which case rm it; ascmagic will catch real C programs
-0 string /* c program text
+
+#------------------------------------------------------------------------------
+# c-lang: file(1) magic for C programs (or REXX)
+#
+
+# XPM icons (Greg Roelofs, newt@uchicago.edu)
+# if you uncomment "/*" for C/REXX below, also uncomment this entry
+#0 string /*\ XPM\ */ X pixmap image data
+
+# this first will upset you if you're a PL/1 shop...
+# in which case rm it; ascmagic will catch real C programs
+#0 string /* C or REXX program text
+0 string // C++ program text
diff --git a/usr.bin/file/Magdir/chi b/usr.bin/file/Magdir/chi
index 2dfbfcfced27..ee450f555881 100644
--- a/usr.bin/file/Magdir/chi
+++ b/usr.bin/file/Magdir/chi
@@ -1,4 +1,7 @@
-# ChiWriter files
+
+#------------------------------------------------------------------------------
+# chi: file(1) magic for ChiWriter files
+#
0 string \\1cw\ ChiWriter file
>5 string >\0 version %s
0 string \\1cw ChiWriter file
diff --git a/usr.bin/file/Magdir/clipper b/usr.bin/file/Magdir/clipper
index f4e9fa73cbce..c325cb8f7c7d 100644
--- a/usr.bin/file/Magdir/clipper
+++ b/usr.bin/file/Magdir/clipper
@@ -1,5 +1,6 @@
-#
-# Intergraph, formerly Fairchild, Clipper.
+
+#------------------------------------------------------------------------------
+# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
#
# XXX - what byte order does the Clipper use?
#
diff --git a/usr.bin/file/Magdir/commands b/usr.bin/file/Magdir/commands
index d7c04c1a40ac..8a2760707365 100644
--- a/usr.bin/file/Magdir/commands
+++ b/usr.bin/file/Magdir/commands
@@ -1,40 +1,75 @@
-#
-# "Commands": stuff for various shells and interpreters.
+
+#------------------------------------------------------------------------------
+# commands: file(1) magic for various shells and interpreters
#
0 string :\ shell archive or commands for antique kernel text
-0 string #!/bin/sh Bourne Shell script text
-0 string #!\ /bin/sh Bourne Shell script text
-0 string #!/bin/csh C Shell script text
-0 string #!\ /bin/csh C Shell script text
+0 string #!/bin/sh Bourne shell script text
+0 string #!\ /bin/sh Bourne shell script text
+0 string #!/bin/csh C shell script text
+0 string #!\ /bin/csh C shell script text
# korn shell magic, sent by George Wu, gwu@clyde.att.com
-0 string #!/bin/ksh Korn Shell script text
-0 string #!\ /bin/ksh Korn Shell script text
-0 string #!/bin/tcsh Tenex C Shell script text
-0 string #!\ /bin/tcsh Tenex C Shell script text
-0 string #!/usr/local/tcsh Tenex C Shell script text
-0 string #!\ /usr/local/tcsh Tenex C Shell script text
-0 string #!/usr/local/bin/tcsh Tenex C Shell script text
-0 string #!\ /usr/local/bin/tcsh Tenex C Shell script text
-0 string #!/bin/awk Awk Commands text
-0 string #!\ /bin/awk Awk Commands text
+0 string #!/bin/ksh Korn shell script text
+0 string #!\ /bin/ksh Korn shell script text
+0 string #!/bin/tcsh Tenex C shell script text
+0 string #!\ /bin/tcsh Tenex C shell script text
+0 string #!/usr/local/tcsh Tenex C shell script text
+0 string #!\ /usr/local/tcsh Tenex C shell script text
+0 string #!/usr/local/bin/tcsh Tenex C shell script text
+0 string #!\ /usr/local/bin/tcsh Tenex C shell script text
+#
+# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
+0 string #!/usr/local/bin/zsh Paul Falstad's zsh
+0 string #!\ /usr/local/bin/zsh Paul Falstad's zsh
+0 string #!/usr/local/bin/ash Neil Brown's ash
+0 string #!\ /usr/local/bin/ash Neil Brown's ash
+0 string #!/usr/local/bin/ae Neil Brown's ae
+0 string #!\ /usr/local/bin/ae Neil Brown's ae
+0 string #!/bin/nawk new awk script text
+0 string #!\ /bin/nawk new awk script text
+0 string #!/usr/bin/nawk new awk script text
+0 string #!\ /usr/bin/nawk new awk script text
+0 string #!/usr/local/bin/nawk new awk script text
+0 string #!\ /usr/local/bin/nawk new awk script text
+0 string #!/bin/gawk GNU awk script text
+0 string #!\ /bin/gawk GNU awk script text
+0 string #!/usr/bin/gawk GNU awk script text
+0 string #!\ /usr/bin/gawk GNU awk script text
+0 string #!/usr/local/bin/gawk GNU awk script text
+0 string #!\ /usr/local/bin/gawk GNU awk script text
+#
+0 string #!/bin/awk awk commands text
+0 string #!\ /bin/awk awk commands text
+0 string #!/usr/bin/awk awk commands text
+0 string #!\ /usr/bin/awk awk commands text
+0 string BEGIN awk commands text
+
+# For Larry Wall's perl language. The ``eval'' line recognizes an
+# outrageously clever hack for USG systems.
+# Keith Waclena <keith@cerberus.uchicago.edu>
+0 string #!/bin/perl perl commands text
+0 string #!\ /bin/perl perl commands text
+0 string eval\ "exec\ /bin/perl perl commands text
+0 string #!/usr/bin/perl perl commands text
+0 string #!\ /usr/bin/perl perl commands text
+0 string eval\ "exec\ /usr/bin/perl perl commands text
+0 string #!/usr/local/bin/perl perl commands text
+0 string #!\ /usr/local/bin/perl perl commands text
+0 string eval\ "exec\ /usr/local/bin/perl perl commands text
+
+# AT&T Bell Labs' Plan 9 shell
+0 string #!/bin/rc Plan 9 rc shell script text
+0 string #!\ /bin/rc Plan 9 rc shell script text
+
+# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
+0 string #!/bin/bash Bourne-Again shell script text
+0 string #!\ /bin/bash Bourne-Again shell script text
+0 string #!/usr/local/bin/bash Bourne-Again shell script text
+0 string #!\ /usr/local/bin/bash Bourne-Again shell script text
+
+# generic shell magic
0 string #!\ / a
>3 string >\0 %s script text
0 string #!/ a
>2 string >\0 %s script text
0 string #!\ commands text
>3 string >\0 for %s
-
-# For Larry Wall's perl language. The ``eval'' line recognizes an
-# outrageously clever hack for USG systems.
-# Keith Waclena <keith@cerberus.uchicago.edu>
-0 string #!/bin/perl perl commands text
-0 string #!\ /bin/perl perl commands text
-0 string eval\ "exec\ /bin/perl perl commands text
-0 string #!/usr/bin/perl perl commands text
-0 string #!\ /usr/bin/perl perl commands text
-0 string eval\ "exec\ /usr/bin/perl perl commands text
-0 string #!/usr/local/bin/perl perl commands text
-0 string #!\ /usr/local/bin/perl perl commands text
-0 string eval\ "exec\ /usr/local/bin/perl perl commands text
-0 string #!/bin/rc Plan 9 rc Shell script text
-0 string #!\ /bin/rc Plan 9 rc Shell script text
diff --git a/usr.bin/file/Magdir/compress b/usr.bin/file/Magdir/compress
index 6309c18061a1..2cf8d195f594 100644
--- a/usr.bin/file/Magdir/compress
+++ b/usr.bin/file/Magdir/compress
@@ -1,25 +1,60 @@
+
+#------------------------------------------------------------------------------
+# compress: file(1) magic for pure-compression formats (no archives)
+#
+# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
#
# Formats for various forms of compressed data
# Formats for "compress" proper have been moved into "compress.c",
# because it tries to uncompress it to figure out what's inside.
-# According to gzip.h, this is the correct byte order for packed data.
-#
-0 string \037\036 packed data
+# standard unix compress
+0 string \037\235 compress'd data
+>2 byte&0x80 >0 block compressed
+>2 byte&0x1f x %d bits
+# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
+0 string \037\213 gzip compressed data
+>2 byte <8 \b, reserved method,
+>2 byte 8 \b, deflated,
+>3 byte &0x01 ASCII,
+>3 byte &0x02 continuation,
+>3 byte &0x04 extra field,
+>3 byte &0x08 original filename,
+>3 byte &0x10 comment,
+>3 byte &0x20 encrypted,
+>4 ledate x last modified: %s,
+>8 byte 2 max compression,
+>8 byte 4 max speed,
+>9 byte =0x00 os: MS-DOS
+>9 byte =0x01 os: Amiga
+>9 byte =0x02 os: VMS
+>9 byte =0x03 os: Unix
+>9 byte =0x05 os: Atari
+>9 byte =0x06 os: OS/2
+>9 byte =0x07 os: MacOS
+>9 byte =0x0A os: Tops/20
+>9 byte =0x0B os: Win/32
+
+# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
+0 string \037\036 packed data
+>2 belong >1 \b, %d characters originally
+>2 belong =1 \b, %d character originally
#
-# This magic number is byte-order-independent.
-#
+# This magic number is byte-order-independent. XXX - Does that mean this
+# is big-endian, little-endian, either, or that you can't tell?
+# this short is valid for SunOS
0 short 017437 old packed data
-#
# XXX - why *two* entries for "compacted data", one of which is
# byte-order independent, and one of which is byte-order dependent?
#
0 short 0x1fff compacted data
+# This string is valid for SunOS (BE) and a matching "short" is listed
+# in the Ultrix (LE) magic file.
0 string \377\037 compacted data
0 short 0145405 huf output
-#
+
# Squeeze and Crunch...
# These numbers were gleaned from the Unix versions of the programs to
# handle these formats. Note that I can only uncrunch, not crunch, and
@@ -27,14 +62,25 @@
# Keith Waclena <keith@cerberus.uchicago.edu>
0 leshort 0x76FF squeezed data (CP/M, DOS)
0 leshort 0x76FE crunched data (CP/M, DOS)
+
# Freeze
-0 string \037\237 Frozen file 2.1
-0 string \037\236 Frozen file 1.0 (or gzip 0.5)
+0 string \037\237 frozen file 2.1
+0 string \037\236 frozen file 1.0 (or gzip 0.5)
+
+# SCO compress -H (LZH)
+0 string \037\240 SCO compress -H (LZH) data
+
+# European GSM 06.10 is a provisional standard for full-rate speech
+# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
+# excitation/long term prediction) coding at 13 kbit/s.
#
-# Standard unix compress
+# There's only a magic nibble (4 bits); that nibble repeats every 33
+# bytes. This isn't suited for use, but maybe we can use it someday.
#
-0 string \037\235 compressed data
->2 byte&0x80 >0 block compressed
->2 byte&0x1f x %d bits
-
-0 string \037\240 LZH compressed data
+# This will cause very short GSM files to be declared as data and
+# mismatches to be declared as data too!
+#0 byte&0xF0 0xd0 data
+#>33 byte&0xF0 0xd0
+#>66 byte&0xF0 0xd0
+#>99 byte&0xF0 0xd0
+#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio
diff --git a/usr.bin/file/Magdir/convex b/usr.bin/file/Magdir/convex
index 0220a8147368..14ed86742da2 100644
--- a/usr.bin/file/Magdir/convex
+++ b/usr.bin/file/Magdir/convex
@@ -1,4 +1,7 @@
+
+#------------------------------------------------------------------------------
+# convex: file(1) magic for Convex boxes
#
-# XXX - what byte order does a Convex use?
+# Convexes are big-endian.
#
0 long 0513 Convex executable
diff --git a/usr.bin/file/Magdir/database b/usr.bin/file/Magdir/database
new file mode 100644
index 000000000000..692ce6b31536
--- /dev/null
+++ b/usr.bin/file/Magdir/database
@@ -0,0 +1,36 @@
+
+#------------------------------------------------------------------------------
+# database: file(1) magic for various databases
+#
+# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
+#
+#
+# GDBM magic numbers
+# Will be maintained as part of the GDBM distribution in the future.
+# <downsj@teeny.org>
+0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian
+0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian
+0 string GDBM GNU dbm 2.x database
+#
+0 belong 0x061561 Berkeley DB Hash file
+>4 belong >0 (Version %d,
+>8 belong 1234 Little Endian,
+>8 belong 4321 Big Endian,
+>12 belong x Bucket Size %d,
+>16 belong x Directory Size %d,
+>20 belong x Segment Size %d,
+>24 belong x Segment Shift %d,
+>28 belong x Overflow Point %d,
+>32 belong x Last Freed %d,
+>36 belong x Max Bucket %d,
+>40 belong x High Mask 0x%x,
+>44 belong x Low Mask 0x%x,
+>48 belong x Fill Factor %d,
+>52 belong x Number of Keys %d)
+#
+0 belong 0x053162 Berkeley DB Btree file
+>4 belong >0 (Version %d,
+>8 belong x Page Size %d,
+>12 belong x Free Page %d,
+>16 belong x Number of Records %d,
+>20 belong x Flags 0x%x)
diff --git a/usr.bin/file/Magdir/diamond b/usr.bin/file/Magdir/diamond
index d515d61fe9a1..1abd01e0300f 100644
--- a/usr.bin/file/Magdir/diamond
+++ b/usr.bin/file/Magdir/diamond
@@ -1,3 +1,6 @@
+
+#------------------------------------------------------------------------------
+# diamond: file(1) magic for Diamond system
#
# ... diamond is a multi-media mail and electronic conferencing system....
#
diff --git a/usr.bin/file/Magdir/diff b/usr.bin/file/Magdir/diff
index abf1b87c7211..9e651465efd1 100644
--- a/usr.bin/file/Magdir/diff
+++ b/usr.bin/file/Magdir/diff
@@ -1,5 +1,7 @@
+
+#------------------------------------------------------------------------------
+# diff: file(1) magic for diff(1) output
#
-# magic file lines for output from "diff"...
0 string diff\ 'diff' output text
0 string ***\ 'diff' output text
0 string Only\ in\ 'diff' output text
diff --git a/usr.bin/file/Magdir/dump b/usr.bin/file/Magdir/dump
index d641747f38d4..955275b8c74f 100644
--- a/usr.bin/file/Magdir/dump
+++ b/usr.bin/file/Magdir/dump
@@ -1,5 +1,6 @@
-#
-# magic.dump, dump file format. For new and old dump filesystems
+
+#------------------------------------------------------------------------------
+# dump: file(1) magic for dump file format--for new and old dump filesystems
#
# We specify both byte orders in order to recognize byte-swapped dumps.
#
diff --git a/usr.bin/file/Magdir/elf b/usr.bin/file/Magdir/elf
index e34332dc1c70..f99712feba66 100644
--- a/usr.bin/file/Magdir/elf
+++ b/usr.bin/file/Magdir/elf
@@ -1,44 +1,56 @@
+
+#------------------------------------------------------------------------------
+# elf: file(1) magic for ELF executables
#
-# ELF
-# Missing MIPS image type and flags
+# We have to check the byte order flag to see what byte order all the
+# other stuff in the header is in.
#
-# Question marks on processor types flag "should not happen because the
-# byte order is wrong". We have to check the byte order flag to see what
-# byte order all the other stuff in the header is in.
+# Byte order is probably big-endian for MIPS RS3000 and Amdahl.
+# MIPS RS3000 may also be for MIPS RS2000.
#
+# updated by Daniel Quinlan (quinlan@yggdrasil.com)
0 string \177ELF ELF
>4 byte 0 invalid class
>4 byte 1 32-bit
>4 byte 2 64-bit
>5 byte 0 invalid byte order
>5 byte 1 LSB
->>16 leshort 0 unknown type
->>16 leshort 1 relocatable
->>16 leshort 2 executable
->>16 leshort 3 dynamic lib
->>16 leshort 4 core file
->>18 leshort 0 unknown machine
->>18 leshort 1 WE32100 and up
->>18 leshort 2 SPARC?
->>18 leshort 3 i386 (386 and up)
->>18 leshort 4 M68000?
->>18 leshort 5 M88000?
->>18 leshort 7 i860
->>20 lelong 1 Version 1
+>>16 leshort 0 no file type,
+>>16 leshort 1 relocatable,
+>>16 leshort 2 executable,
+>>16 leshort 3 shared object,
+>>16 leshort 4 core file,
+>>16 leshort &0xff00 processor-specific,
+>>18 leshort 0 no machine,
+>>18 leshort 1 AT&T WE32100 - invalid byte order,
+>>18 leshort 2 SPARC - invalid byte order,
+>>18 leshort 3 Intel 80386,
+>>18 leshort 4 Motorola 68000 - invalid byte order,
+>>18 leshort 5 Motorola 88000 - invalid byte order,
+>>18 leshort 6 Intel 80486,
+>>18 leshort 7 Intel 80860,
+>>18 leshort 8 MIPS RS3000,
+>>18 leshort 9 Amdahl,
+>>20 lelong 0 invalid version
+>>20 lelong 1 version 1
>>36 lelong 1 MathCoPro/FPU/MAU Required
>5 byte 2 MSB
->>16 beshort 0 unknown type
->>16 beshort 1 relocatable
->>16 beshort 2 executable
->>16 beshort 3 dynamic lib
->>16 beshort 4 core file
->>18 beshort 0 unknown machine
->>18 beshort 1 WE32100 and up
->>18 beshort 2 SPARC
->>18 beshort 3 i386 (386 and up)?
->>18 beshort 4 M68000
->>18 beshort 5 M88000
->>18 beshort 7 i860
->>20 belong 1 Version 1
+>>16 beshort 0 no file type,
+>>16 beshort 1 relocatable,
+>>16 beshort 2 executable,
+>>16 beshort 3 shared object,
+>>16 beshort 4 core file,
+>>16 beshort &0xff00 processor-specific,
+>>18 beshort 0 no machine,
+>>18 beshort 1 AT&T WE32100,
+>>18 beshort 2 SPARC,
+>>18 beshort 3 Intel 80386 - invalid byte order,
+>>18 beshort 4 Motorola 68000,
+>>18 beshort 5 Motorola 88000,
+>>18 beshort 6 Intel 80486 - invalid byte order,
+>>18 beshort 7 Intel 80860,
+>>18 beshort 8 MIPS RS3000,
+>>18 leshort 9 Amdahl,
+>>20 belong 0 invalid version
+>>20 belong 1 version 1
>>36 belong 1 MathCoPro/FPU/MAU Required
-
diff --git a/usr.bin/file/Magdir/encore b/usr.bin/file/Magdir/encore
index 7244f87a9110..63cb5d4f9f42 100644
--- a/usr.bin/file/Magdir/encore
+++ b/usr.bin/file/Magdir/encore
@@ -1,5 +1,6 @@
-#
-# magic.encore: Recognize encore machines
+
+#------------------------------------------------------------------------------
+# encore: file(1) magic for Encore machines
#
# XXX - needs to have the byte order specified (NS32K was little-endian,
# dunno whether they run the 88K in little-endian mode or not).
diff --git a/usr.bin/file/Magdir/filesystems b/usr.bin/file/Magdir/filesystems
new file mode 100644
index 000000000000..125250d9b6d9
--- /dev/null
+++ b/usr.bin/file/Magdir/filesystems
@@ -0,0 +1,6 @@
+
+#------------------------------------------------------------------------------
+# filesystems: file(1) magic for different filesystems
+#
+0x438 leshort 0xEF53 Linux/i386 ext2 filesystem
+0 string \366\366\366\366 PC formatted floppy with no filesystem
diff --git a/usr.bin/file/Magdir/fonts b/usr.bin/file/Magdir/fonts
index 594db76d91f0..dd7907f812b6 100644
--- a/usr.bin/file/Magdir/fonts
+++ b/usr.bin/file/Magdir/fonts
@@ -1,3 +1,26 @@
-0 string FONT ASCII vfont text
-0 short 0436 Berkeley vfont data
-0 short 017001 byte-swapped Berkeley vfont data
+
+#------------------------------------------------------------------------------
+# fonts: file(1) magic for font data
+#
+0 string FONT ASCII vfont text
+0 short 0436 Berkeley vfont data
+0 short 017001 byte-swapped Berkeley vfont data
+
+# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com
+0 string %!PS-AdobeFont-1.0 PostScript Type 1 font text
+>20 string >\0 (%s)
+6 string %!PS-AdobeFont-1.0 PostScript Type 1 font program data
+
+# X11 font files in SNF (Server Natural Format) format
+0 belong 00000004 X11 SNF font data, MSB first
+0 lelong 00000004 X11 SNF font data, LSB first
+
+# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string STARTFONT\040 X11 BDF font text
+
+# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)
+# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
+0 string \001fcp X11 Portable Compiled Font data
+>12 byte 0x02 \b, LSB first
+>12 byte 0x0a \b, MSB first
+0 string D1.0\015 X11 Speedo font data
diff --git a/usr.bin/file/Magdir/frame b/usr.bin/file/Magdir/frame
index 46e8648fddc6..47e48979d54a 100644
--- a/usr.bin/file/Magdir/frame
+++ b/usr.bin/file/Magdir/frame
@@ -1,28 +1,36 @@
+
+#------------------------------------------------------------------------------
+# frame: file(1) magic for FrameMaker files
#
-# Magic number for FrameMaker files
# This stuff came on a FrameMaker demo tape, most of which is
# copyright, but this file is "published" as witness the following:
#
0 string \<MakerFile FrameMaker document
+>11 string 4.0 (4.0
>11 string 3.0 (3.0
>11 string 2.0 (2.0
>11 string 1.0 (1.0
>14 byte x %c)
-0 string \<MIFFile FrameMaker MIF file
+0 string \<MIFFile FrameMaker MIF (ASCII) file
+>9 string 4.0 (4.0)
>9 string 3.0 (3.0)
>9 string 2.0 (2.0)
>9 string 1.0 (1.x)
-0 string \<MakerDictionary FraneMaker Dictionary text
+0 string \<MakerDictionary FrameMaker Dictionary text
>17 string 3.0 (3.0)
>17 string 2.0 (2.0)
>17 string 1.0 (1.x)
-0 string \<MakerScreenFon FrameMaker Font file
+0 string \<MakerScreenFont FrameMaker Font file
>17 string 1.01 (%s)
0 string \<MML FrameMaker MML file
-0 string \<Book FrameMaker Book file
+0 string \<BookFile FrameMaker Book file
>10 string 3.0 (3.0
>10 string 2.0 (2.0
>10 string 1.0 (1.0
>13 byte x %c)
-0 string \<Maker Intermediate Print File FrameMaker IPL file
-0 string \<MakerDictionary FraneMaker Dictionary text
+# XXX - this book entry should be verified, if you find one, uncomment this
+#0 string \<Book\ FrameMaker Book (ASCII) file
+#>6 string 3.0 (3.0)
+#>6 string 2.0 (2.0)
+#>6 string 1.0 (1.0)
+0 string \<Maker Intermediate Print File FrameMaker IPL file
diff --git a/usr.bin/file/Magdir/hp b/usr.bin/file/Magdir/hp
index db02e54bd597..82d11306c0a8 100644
--- a/usr.bin/file/Magdir/hp
+++ b/usr.bin/file/Magdir/hp
@@ -1,5 +1,6 @@
-#
-# magic.hp: Hewlett Packard Magic
+
+#------------------------------------------------------------------------------
+# hp: file(1) magic for Hewlett Packard machines (see also "printer")
#
# XXX - somebody should figure out whether any byte order needs to be
# applied to the "TML" stuff; I'm assuming the Apollo stuff is
@@ -15,18 +16,26 @@
# UNIX environment atop the "SUN kernel"; dunno whether it was
# big-endian or little-endian.
#
-# I'm guessing that the 200 series was 68K-based; the 300 and 400 series
-# are.
+# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;
+# hp300 are 68020+68881 based; hp400 are also 68k. The following basic
+# HP magic is useful for reference, but using "long" magic is a better
+# practice in order to avoid collisions.
+#
+# 0 beshort 200 hp200 (68010) BSD binary
+# 0 beshort 300 hp300 (68020+68881) BSD binary
+# 0 beshort 0x20c hp200/300 HP-UX binary
+# 0 beshort 0x20b hp800 HP-UX binary
+
#
# The "misc" stuff needs a byte order; the archives look suspiciously
# like the old 177545 archives (0xff65 = 0177545).
#
#### Old Apollo stuff
0 beshort 0627 Apollo m68k COFF executable
->18 beshort ^040000 not stripped
+>18 beshort ^040000 not stripped
>22 beshort >0 - version %ld
0 beshort 0624 apollo a88k COFF executable
->18 beshort ^040000 not stripped
+>18 beshort ^040000 not stripped
>22 beshort >0 - version %ld
0 long 01203604016 TML 0123 byte-order format
0 long 01702407010 TML 1032 byte-order format
@@ -36,101 +45,101 @@
0 belong 0x02100106 HPPA-RISC1.1 relocatable object
0 belong 0x02100107 HPPA-RISC1.1 executable
>(144) belong 0x054ef630 dynamically linked
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x02100108 HPPA-RISC1.1 shared executable
>(144) belong 0x054ef630 dynamically linked
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x0210010b HPPA-RISC1.1 demand-load executable
>(144) belong 0x054ef630 dynamically linked
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x0210010e HPPA-RISC1.1 shared library
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x0210010d HPPA-RISC1.1 dynamic load library
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
#### 800
0 belong 0x020b0106 HP s800 relocatable object
0 belong 0x020b0107 HP s800 executable
>(144) belong 0x054ef630 dynamically linked
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x020b0108 HP s800 shared executable
>(144) belong 0x054ef630 dynamically linked
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x020b010b HP s800 demand-load executable
>(144) belong 0x054ef630 dynamically linked
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x020b010e HP s800 shared library
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x020b010d HP s800 dynamic load library
->96 belong >0 -not stripped
+>96 belong >0 - not stripped
0 belong 0x213c6172 archive file
->68 belong 0x020b0619 -HP s800 relocatable library
+>68 belong 0x020b0619 - HP s800 relocatable library
#### 500
0 long 0x02080106 HP s500 relocatable executable
->16 long >0 -version %ld
+>16 long >0 - version %ld
0 long 0x02080107 HP s500 executable
->16 long >0 -version %ld
+>16 long >0 - version %ld
0 long 0x02080108 HP s500 pure executable
->16 long >0 -version %ld
+>16 long >0 - version %ld
#### 200
0 belong 0x020c0108 HP s200 pure executable
->4 beshort >0 -version %ld
+>4 beshort >0 - version %ld
>8 belong &0x80000000 save fp regs
>8 belong &0x40000000 dynamically linked
>8 belong &0x20000000 debuggable
>36 belong >0 not stripped
0 belong 0x020c0107 HP s200 executable
->4 beshort >0 -version %ld
+>4 beshort >0 - version %ld
>8 belong &0x80000000 save fp regs
>8 belong &0x40000000 dynamically linked
>8 belong &0x20000000 debuggable
>36 belong >0 not stripped
0 belong 0x020c010b HP s200 demand-load executable
->4 beshort >0 -version %ld
+>4 beshort >0 - version %ld
>8 belong &0x80000000 save fp regs
>8 belong &0x40000000 dynamically linked
>8 belong &0x20000000 debuggable
>36 belong >0 not stripped
0 belong 0x020c0106 HP s200 relocatable executable
->4 beshort >0 -version %ld
->6 beshort >0 -highwater %d
+>4 beshort >0 - version %ld
+>6 beshort >0 - highwater %d
>8 belong &0x80000000 save fp regs
>8 belong &0x20000000 debuggable
>8 belong &0x10000000 PIC
0 belong 0x020a0108 HP s200 (2.x release) pure executable
->4 beshort >0 -version %ld
+>4 beshort >0 - version %ld
>36 belong >0 not stripped
0 belong 0x020a0107 HP s200 (2.x release) executable
->4 beshort >0 -version %ld
+>4 beshort >0 - version %ld
>36 belong >0 not stripped
0 belong 0x020c010e HP s200 shared library
->4 beshort >0 -version %ld
->6 beshort >0 -highwater %d
+>4 beshort >0 - version %ld
+>6 beshort >0 - highwater %d
>36 belong >0 not stripped
0 belong 0x020c010d HP s200 dynamic load library
->4 beshort >0 -version %ld
->6 beshort >0 -highwater %d
+>4 beshort >0 - version %ld
+>6 beshort >0 - highwater %d
>36 belong >0 not stripped
#### MISC
@@ -142,10 +151,11 @@
0 long 0x015821a6 HP core file
0 long 0x4da7eee8 HP-WINDOWS font
->8 byte >0 -version %ld
+>8 byte >0 - version %ld
0 string Bitmapfile HP Bitmapfile
0 string IMGfile CIS compimg HP Bitmapfile
+# XXX - see "lif"
0 short 0x8000 lif file
0 long 0x020c010c compiled Lisp
@@ -189,3 +199,14 @@
>10 string A(G) A(G)
>14 string F(.) F(.);
>14 string F(,) F(,);
+
+# hpBSD magic numbers
+0 beshort 200 hp200 (68010) BSD
+>2 beshort 0407 impure binary
+>2 beshort 0410 read-only binary
+>2 beshort 0413 demand paged binary
+0 beshort 300 hp300 (68020+68881) BSD
+>2 beshort 0407 impure binary
+>2 beshort 0410 read-only binary
+>2 beshort 0413 demand paged binary
+
diff --git a/usr.bin/file/Magdir/ibm370 b/usr.bin/file/Magdir/ibm370
index b40fbf420887..32d6becd33dd 100644
--- a/usr.bin/file/Magdir/ibm370
+++ b/usr.bin/file/Magdir/ibm370
@@ -1,5 +1,6 @@
-#
-# IBM 370 and compatibles.
+
+#------------------------------------------------------------------------------
+# ibm370: file(1) magic for IBM 370 and compatibles.
#
# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
# What the heck *is* "USS/370"?
@@ -16,4 +17,3 @@
0 beshort 0535 SVR2 executable (USS/370)
>12 belong >0 not stripped
>24 belong >0 - version %ld
-
diff --git a/usr.bin/file/Magdir/ibm6000 b/usr.bin/file/Magdir/ibm6000
index e4d73df4ec7a..7b8e4948cb70 100644
--- a/usr.bin/file/Magdir/ibm6000
+++ b/usr.bin/file/Magdir/ibm6000
@@ -1,7 +1,6 @@
-#
-# magic.rs6000:
-#
-# RS/6000 and the RT PC.
+
+#------------------------------------------------------------------------------
+# ibm6000: file(1) magic for RS/6000 and the RT PC.
#
0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
>12 belong >0 not stripped
diff --git a/usr.bin/file/Magdir/iff b/usr.bin/file/Magdir/iff
index 2d2f95bba0b6..68d1b79bd86c 100644
--- a/usr.bin/file/Magdir/iff
+++ b/usr.bin/file/Magdir/iff
@@ -1,5 +1,28 @@
-# image file format
-# From Robert Potter, potter@cs.rochester.edu
-0 string Imagefile\ version- iff image data
-# this adds the whole header (inc. version number), informative but longish
->10 string >\0 %s
+
+#------------------------------------------------------------------------------
+# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
+#
+# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
+# Arts for file interchange. It has also been used by Apple, SGI, and
+# especially Commodore-Amiga.
+#
+# IFF files begin with an 8 byte FORM header, followed by a 4 character
+# FORM type, which is followed by the first chunk in the FORM.
+
+0 string FORM IFF data
+#>4 belong x \b, FORM is %d bytes long
+# audio formats
+>8 string AIFF \b, AIFF audio
+>8 string AIFC \b, AIFF-C compressed audio
+>8 string 8SVX \b, 8SVX 8-bit sampled sound voice
+>8 string SAMP \b, SAMP sampled audio
+# image formats
+>8 string ILBMBMHD \b, ILBM interleaved image
+>>20 beshort x \b, %d x
+>>22 beshort x %d
+>8 string RGBN \b, RGBN 12-bit RGB image
+>8 string RGB8 \b, RGB8 24-bit RGB image
+>8 string DR2D \b, DR2D 2-D object
+>8 string TDDD \b, TDDD 3-D rendering
+# other formats
+>8 string FTXT \b, FTXT formatted text
diff --git a/usr.bin/file/Magdir/images b/usr.bin/file/Magdir/images
index 074c743e65c7..4ff082489b3a 100644
--- a/usr.bin/file/Magdir/images
+++ b/usr.bin/file/Magdir/images
@@ -1,36 +1,58 @@
-# image formats, originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
+
+#------------------------------------------------------------------------------
+# images: file(1) magic for image formats (see also "iff")
+#
+# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
# additions by janl@ifi.uio.no as well as others. Jan also suggested
# merging several one- and two-line files into here.
#
-# XXX - byte order for GIF and TIFF fields?
-#
+# little magic: PCX (first byte is 0x0a)
+# no magic: Targa
+
+# PBMPLUS images
+# The next byte following the magic is always whitespace.
+0 string P1 PBM image text
+0 string P2 PGM image text
+0 string P3 PPM image text
+0 string P4 PBM "rawbits" image data
+0 string P5 PGM "rawbits" image data
+0 string P6 PPM "rawbits" image data
-0 string xbtoa btoa'd file
-
-# PBMPLUS
-0 string P1 PBM file
-0 string P2 PGM file
-0 string P3 PPM file
-0 string P4 PBM "rawbits" file
-0 string P5 PGM "rawbits" file
-0 string P6 PPM "rawbits" file
-
-# TIFF and friends
-0 string \115\115 TIFF file, big-endian
->2 short >0 version %d
-0 string \111\111 TIFF file, little-endian
->2 short >0 version %d
+# NIFF (Navy Interchange File Format, a modification of TIFF) images
+0 string IIN1 NIFF image data
+
+# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
+# The second word of TIFF files is the TIFF version number, 42, which has
+# never changed. The TIFF specification recommends testing for it.
+0 string MM\x00\x2a TIFF image data, big-endian
+0 string II\x2a\x00 TIFF image data, little-endian
+
+# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
+# (Greg Roelofs, newt@uchicago.edu)
+#
+# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
#
-# NIFF (Navy Interchange File Format, a modification of TIFF)
-0 string IIN1 NIFF raster data
+0 string \x89PNG PNG image data,
+>4 belong !0x0d0a1a0a CORRUPTED,
+>16 belong x %ld x
+>20 belong x %ld,
+>24 byte x %d-bit
+>25 byte 0 grayscale,
+>25 byte 2 \b/color RGB,
+>25 byte 3 colormap,
+>25 byte 4 gray+alpha,
+>25 byte 6 \b/color RGBA,
+#>26 byte 0 deflate/32K,
+>28 byte 0 non-interlaced
+>28 byte 1 interlaced
# GIF
-0 string GIF GIF picture
->3 string 87a - version %s
->3 string 89a - version %s
+0 string GIF8 GIF image data
+>4 string 7a \b, version 8%s,
+>4 string 9a \b, version 8%s,
>6 leshort >0 %hd x
>8 leshort >0 %hd,
->10 byte &0x40 interlaced,
+#>10 byte &0x80 color mapped,
>10 byte&0x07 =0x00 2 colors
>10 byte&0x07 =0x01 4 colors
>10 byte&0x07 =0x02 8 colors
@@ -40,30 +62,163 @@
>10 byte&0x07 =0x06 128 colors
>10 byte&0x07 =0x07 256 colors
-# Miscellany
-0 long 1123028772 Artisan image file
->4 long 1 rectangular 24-bit image
->4 long 2 rectangular 8-bit image with colormap
->4 long 3 rectangular 32-bit image (24-bit with matte)
-0 string \361\0\100\273 CMU window manager bitmap
-0 string #FIG FIG graphics savefile text
->6 string 2.1 Version 2.1
->6 string 2.0 Version 2.0
+# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster,
+# 1 plane, no encoding.
+0 string \361\0\100\273 CMU window manager raster image data
+>4 lelong >0 %d x
+>8 lelong >0 %d,
+>12 lelong >0 %d-bit
+
+# Magick Image File Format
+0 string id=ImageMagick MIFF image data
+
+# Artisan
+0 long 1123028772 Artisan image data
+>4 long 1 \b, rectangular 24-bit
+>4 long 2 \b, rectangular 8-bit with colormap
+>4 long 3 \b, rectangular 32-bit (24-bit with matte)
+
+# FIG (Facility for Interactive Generation of figures), an object-based format
+0 string #FIG FIG image text
+>5 string x \b, version %.3s
+
+# PHIGS
+0 string ARF_BEGARF PHIGS clear text archive
+0 string @(#)SunPHIGS SunPHIGS
+# version number follows, in the form m.n
+>40 string SunBin binary
+>32 string archive archive
+
+# GKS (Graphics Kernel System)
0 string GKSM GKS Metafile
-8 string ILBM IFF ILBM file
-6 string JFIF JPEG picture
-0 string ARF_BEGARF PHIGS clear text archive
-
-# From: <u31b3hs@pool.informatik.rwth-aachen.de> (Michael Haardt)
-0 string yz MGR bitmap, modern format, 8 bit aligned
-0 string zz MGR bitmap, old format, 1 bit deep, 16 bit aligned
-0 string xz MGR bitmap, old format, 1 bit deep, 32 bit aligned
-0 string yx MGR bitmap, modern format, squeezed
-
-0 string %bitmap FBM pixmap
->30 long 0x31 (mono)
->30 long 0x33 (color)
-
-4 string Research, Digifax-G3-File
->29 byte 1 , fine resolution
->29 byte 0 , normal resolution
+>24 string SunGKS \b, SunGKS
+
+# CGM image files
+0 string BEGMF clear text Computer Graphics Metafile
+# XXX - questionable magic
+0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile
+0 beshort 0x3020 character Computer Graphics Metafile
+
+# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
+0 string yz MGR bitmap, modern format, 8-bit aligned
+0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned
+0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned
+0 string yx MGR bitmap, modern format, squeezed
+
+# Fuzzy Bitmap (FBM) images
+0 string %bitmap\0 FBM image data
+>30 long 0x31 \b, mono
+>30 long 0x33 \b, color
+
+# facsimile data
+1 string PC\ Research,\ Inc group 3 fax data
+>29 byte 0 \b, normal resolution (204x98 DPI)
+>29 byte 1 \b, fine resolution (204x196 DPI)
+
+# JPEG images
+0 beshort 0xffd8 JPEG image data
+>6 string JFIF \b, JFIF standard
+# HSI is Handmade Software's proprietary JPEG encoding scheme
+0 string hsi1 JPEG image data, HSI proprietary
+
+# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu)
+0 string BM PC bitmap data
+>14 leshort 12 \b, OS/2 1.x format
+>>18 leshort x \b, %d x
+>>20 leshort x %d
+>14 leshort 64 \b, OS/2 2.x format
+>>18 leshort x \b, %d x
+>>20 leshort x %d
+>14 leshort 40 \b, Windows 3.x format
+>>18 lelong x \b, %d x
+>>22 lelong x %d x
+>>28 leshort x %d
+0 string IC PC icon data
+0 string PI PC pointer image data
+0 string CI PC color icon data
+0 string CP PC color pointer image data
+# Conflicts with other entries [BABYL]
+#0 string BA PC bitmap array data
+
+# XPM icons (Greg Roelofs, newt@uchicago.edu)
+# note possible collision with C/REXX entry in c-lang; currently commented out
+0 string /*\ XPM\ */ X pixmap image text
+
+# Utah Raster Toolkit RLE images (janl@ifi.uio.no)
+0 leshort 0xcc52 RLE image data,
+>6 leshort x %d x
+>8 leshort x %d
+>2 leshort >0 \b, lower left corner: %d
+>4 leshort >0 \b, lower right corner: %d
+>10 byte&0x1 =0x1 \b, clear first
+>10 byte&0x2 =0x2 \b, no background
+>10 byte&0x4 =0x4 \b, alpha channel
+>10 byte&0x8 =0x8 \b, comment
+>11 byte >0 \b, %d color channels
+>12 byte >0 \b, %d bits per pixel
+>13 byte >0 \b, %d color map channels
+
+# image file format (Robert Potter, potter@cs.rochester.edu)
+0 string Imagefile\ version- iff image data
+# this adds the whole header (inc. version number), informative but longish
+>10 string >\0 %s
+
+# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 belong 0x59a66a95 Sun raster image data
+>4 belong >0 \b, %d x
+>8 belong >0 %d,
+>12 belong >0 %d-bit,
+#>16 belong >0 %d bytes long,
+>20 belong 0 old format,
+#>20 belong 1 standard,
+>20 belong 2 compressed,
+>20 belong 3 RGB,
+>20 belong 4 TIFF,
+>20 belong 5 IFF,
+>20 belong 0xffff reserved for testing,
+>24 belong 0 no colormap
+>24 belong 1 RGB colormap
+>24 belong 2 raw colormap
+#>28 belong >0 colormap is %d bytes long
+
+# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
+# file://sgi.com/graphics/SGIIMAGESPEC
+0 beshort 474 SGI image data
+#>2 byte 0 \b, verbatim
+>2 byte 1 \b, RLE
+#>3 byte 1 \b, normal precision
+>3 byte 2 \b, high precision
+>4 beshort x \b, %d-D
+>6 beshort x \b, %d x
+>8 beshort x %d
+>10 beshort x \b, %d channel
+>10 beshort !1 \bs
+>80 string >0 \b, "%s"
+
+0 string IT01 FIT image data
+>4 belong x \b, %d x
+>8 belong x %d x
+>12 belong x %d
+#
+0 string IT02 FIT image data
+>4 belong x \b, %d x
+>8 belong x %d x
+>12 belong x %d
+#
+2048 string PCD_IPI Kodak Photo CD image pack file
+0 string PCD_OPA Kodak Photo CD overview pack file
+
+# FITS format. Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
+# FITS is the Flexible Image Transport System, the de facto standard for
+# data and image transfer, storage, etc., for the astronomical community.
+# (FITS floating point formats are big-endian.)
+0 string SIMPLE\ \ = FITS image data
+>109 string 8 \b, 8-bit, character or unsigned binary integer
+>108 string 16 \b, 16-bit, two's complement binary integer
+>107 string \ 32 \b, 32-bit, two's complement binary integer
+>107 string -32 \b, 32-bit, floating point, single precision
+>107 string -64 \b, 64-bit, floating point, double precision
+
+# other images
+0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file
+0 string !! Bennet Yee's "face" format
diff --git a/usr.bin/file/Magdir/intel b/usr.bin/file/Magdir/intel
index 3f7ade796204..d450e2661691 100644
--- a/usr.bin/file/Magdir/intel
+++ b/usr.bin/file/Magdir/intel
@@ -1,6 +1,9 @@
+
+#------------------------------------------------------------------------------
+# intel: file(1) magic for x86 Unix
#
# Various flavors of x86 UNIX executable/object (other than Xenix, which
-# is in "microsoft"). DOS is in "ms-dos"; the ambitious soul can do
+# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do
# Windows as well.
#
# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
@@ -26,6 +29,7 @@
0 leshort =0522 iAPX 286 executable large model (COFF)
>12 lelong >0 not stripped
#>22 leshort >0 - version %ld
+# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
0 leshort =0514 80386 COFF executable
>12 lelong >0 not stripped
>22 leshort >0 - version %ld
diff --git a/usr.bin/file/Magdir/interleaf b/usr.bin/file/Magdir/interleaf
index ab5f3c654f62..3eea3cff2690 100644
--- a/usr.bin/file/Magdir/interleaf
+++ b/usr.bin/file/Magdir/interleaf
@@ -1,7 +1,8 @@
+
+#------------------------------------------------------------------------------
+# interleaf: file(1) magic for InterLeaf TPS:
#
-# magic for InterLeaf TPS:
0 string =\210OPS Interleaf saved data
0 string =<!OPS Interleaf document text
->5 string ,\ Version\ (version
->>14 string >\0 %s)
-
+>5 string ,\ Version\ = \b, version
+>>17 string >\0 %.3s
diff --git a/usr.bin/file/Magdir/ispell b/usr.bin/file/Magdir/ispell
index 04814b8f1938..3c6bcdc883a8 100644
--- a/usr.bin/file/Magdir/ispell
+++ b/usr.bin/file/Magdir/ispell
@@ -1,23 +1,54 @@
+
+#------------------------------------------------------------------------------
+# ispell: file(1) magic for ispell
#
-# magic.ispell
+# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic
+# will match 0x9600 through 0x9603 in *both* little endian and big endian.
+# (No other current magic entries collide.)
#
-# XXX - byte order?
+# Updated by Daniel Quinlan (quinlan@yggdrasil.com)
#
-0 short 0xffff9601 ispell hash file
->2 short 0x00 - 8-bit, no capitalization, 26 flags
->2 short 0x01 - 7-bit, no capitalization, 26 flags
->2 short 0x02 - 8-bit, capitalization, 26 flags
->2 short 0x03 - 7-bit, capitalization, 26 flags
->2 short 0x04 - 8-bit, no capitalization, 52 flags
->2 short 0x05 - 7-bit, no capitalization, 52 flags
->2 short 0x06 - 8-bit, capitalization, 52 flags
->2 short 0x07 - 7-bit, capitalization, 52 flags
->2 short 0x08 - 8-bit, no capitalization, 128 flags
->2 short 0x09 - 7-bit, no capitalization, 128 flags
->2 short 0x0A - 8-bit, capitalization, 128 flags
->2 short 0x0B - 7-bit, capitalization, 128 flags
->2 short 0x0C - 8-bit, no capitalization, 256 flags
->2 short 0x0D - 7-bit, no capitalization, 256 flags
->2 short 0x0E - 8-bit, capitalization, 256 flags
->2 short 0x0F - 7-bit, capitalization, 256 flags
->4 short >0 and %d string characters
+0 leshort&0xFFFC 0x9600 little endian ispell
+>0 byte 0 hash file (?),
+>0 byte 1 3.0 hash file,
+>0 byte 2 3.1 hash file,
+>0 byte 3 hash file (?),
+>2 leshort 0x00 8-bit, no capitalization, 26 flags
+>2 leshort 0x01 7-bit, no capitalization, 26 flags
+>2 leshort 0x02 8-bit, capitalization, 26 flags
+>2 leshort 0x03 7-bit, capitalization, 26 flags
+>2 leshort 0x04 8-bit, no capitalization, 52 flags
+>2 leshort 0x05 7-bit, no capitalization, 52 flags
+>2 leshort 0x06 8-bit, capitalization, 52 flags
+>2 leshort 0x07 7-bit, capitalization, 52 flags
+>2 leshort 0x08 8-bit, no capitalization, 128 flags
+>2 leshort 0x09 7-bit, no capitalization, 128 flags
+>2 leshort 0x0A 8-bit, capitalization, 128 flags
+>2 leshort 0x0B 7-bit, capitalization, 128 flags
+>2 leshort 0x0C 8-bit, no capitalization, 256 flags
+>2 leshort 0x0D 7-bit, no capitalization, 256 flags
+>2 leshort 0x0E 8-bit, capitalization, 256 flags
+>2 leshort 0x0F 7-bit, capitalization, 256 flags
+>4 leshort >0 and %d string characters
+0 beshort&0xFFFC 0x9600 big endian ispell
+>1 byte 0 hash file (?),
+>1 byte 1 3.0 hash file,
+>1 byte 2 3.1 hash file,
+>1 byte 3 hash file (?),
+>2 beshort 0x00 8-bit, no capitalization, 26 flags
+>2 beshort 0x01 7-bit, no capitalization, 26 flags
+>2 beshort 0x02 8-bit, capitalization, 26 flags
+>2 beshort 0x03 7-bit, capitalization, 26 flags
+>2 beshort 0x04 8-bit, no capitalization, 52 flags
+>2 beshort 0x05 7-bit, no capitalization, 52 flags
+>2 beshort 0x06 8-bit, capitalization, 52 flags
+>2 beshort 0x07 7-bit, capitalization, 52 flags
+>2 beshort 0x08 8-bit, no capitalization, 128 flags
+>2 beshort 0x09 7-bit, no capitalization, 128 flags
+>2 beshort 0x0A 8-bit, capitalization, 128 flags
+>2 beshort 0x0B 7-bit, capitalization, 128 flags
+>2 beshort 0x0C 8-bit, no capitalization, 256 flags
+>2 beshort 0x0D 7-bit, no capitalization, 256 flags
+>2 beshort 0x0E 8-bit, capitalization, 256 flags
+>2 beshort 0x0F 7-bit, capitalization, 256 flags
+>4 beshort >0 and %d string characters
diff --git a/usr.bin/file/Magdir/karma b/usr.bin/file/Magdir/karma
new file mode 100644
index 000000000000..e256abfd05a1
--- /dev/null
+++ b/usr.bin/file/Magdir/karma
@@ -0,0 +1,8 @@
+
+#------------------------------------------------------------------------------
+# karma: file(1) magic for Karma data files
+#
+# From <rgooch@atnf.csiro.au>
+
+0 string KarmaRHD Version Karma Data Structure Version
+>16 long x %lu
diff --git a/usr.bin/file/Magdir/lex b/usr.bin/file/Magdir/lex
index 929e68dd67e5..7b6d0f74a400 100644
--- a/usr.bin/file/Magdir/lex
+++ b/usr.bin/file/Magdir/lex
@@ -1,3 +1,11 @@
+
+#------------------------------------------------------------------------------
+# lex: file(1) magic for lex
+#
# derived empirically, your offsets may vary!
-53 string yyprevious c program text (from lex)
+53 string yyprevious C program text (from lex)
>3 string >\0 for %s
+# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>
+21 string generated\ by\ flex C program text (from flex)
+# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>
+0 string %{ lex description text
diff --git a/usr.bin/file/Magdir/lif b/usr.bin/file/Magdir/lif
index 9ac80b9c1b86..f6d7901809b4 100644
--- a/usr.bin/file/Magdir/lif
+++ b/usr.bin/file/Magdir/lif
@@ -1,6 +1,7 @@
+
+#------------------------------------------------------------------------------
+# lif: file(1) magic for lif
#
-# magic.lif:
-#
-# XXX - byte order?
+# XXX - byte order? (Probably beshort, Daniel Quinlan <quinlan@yggdrasil.com>)
#
0 short 0x8000 lif file
diff --git a/usr.bin/file/Magdir/linux b/usr.bin/file/Magdir/linux
index 7c2855ee5908..a6e7520140db 100644
--- a/usr.bin/file/Magdir/linux
+++ b/usr.bin/file/Magdir/linux
@@ -1,11 +1,55 @@
-# Values for Linux/i386 binaries, From: Rik Faith <faith@cs.unc.edu>
-2 leshort 100 Linux/i386
->0 leshort 0407 executable or impure executable (OMAGIC)
->0 leshort 0410 pure executable (NMAGIC)
->0 leshort 0413 demand-paged executable (ZMAGIC)
->0 leshort 0314 demand-paged executable (QMAGIC)
->16 lelong >0 not stripped
->0 string Jump jump
-# core dump file
-216 lelong 0421 core file (Linux)
->220 string >\0 core file (Linux) of %s
+
+#------------------------------------------------------------------------------
+# linux: file(1) magic for Linux files
+#
+# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
+# The following basic Linux magic is useful for reference, but using
+# "long" magic is a better practice in order to avoid collisions.
+#
+# 2 leshort 100 Linux/i386
+# >0 leshort 0407 impure executable (OMAGIC)
+# >0 leshort 0410 pure executable (NMAGIC)
+# >0 leshort 0413 demand-paged executable (ZMAGIC)
+# >0 leshort 0314 demand-paged executable (QMAGIC)
+#
+0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC)
+>16 lelong 0 \b, stripped
+0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC)
+>16 lelong 0 \b, stripped
+0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC)
+>16 lelong 0 \b, stripped
+0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC)
+>16 lelong 0 \b, stripped
+#
+0 string \007\001\000 Linux/i386 object file
+>20 lelong >0x1020 \b, DLL library
+# message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
+0 string *nazgul* compiled message catalog
+>8 lelong >0 \b, version %ld
+# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>
+216 lelong 0421 Linux/i386 core file
+>220 string >\0 of '%s'
+>200 lelong >0 (signal %d)
+#
+# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>
+# this can be overridden by the DOS executable (COM) entry
+2 string LILO Linux/i386 LILO boot/chain loader
+#
+# Debian Packages, from Peter Tobias <tobias@server.et-inf.fho-emden.de>
+0 string 0.9
+>8 byte 0x0a Debian Binary Package
+>>3 byte >0 \b, created by dpkg 0.9%c
+>>4 byte >0 pl%c
+# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>
+0 leshort 0x0436 Linux/i386 PC Screen Font data,
+>2 byte 0 256 characters, no directory,
+>2 byte 1 512 characters, no directory,
+>2 byte 2 256 characters, Unicode directory,
+>2 byte 3 512 characters, Unicode directory,
+>3 byte >0 8x%d
+# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>
+4086 string SWAP-SPACE Linux/i386 swap file
+# From: Erik Troan <ewt@redhat.com>
+0 leshort 0x00070183 ECOFF (Linux/OSF) Alpha binary
+>10 leshort 0x0001 not stripped
+>10 leshort 0x0000 stripped
diff --git a/usr.bin/file/Magdir/lisp b/usr.bin/file/Magdir/lisp
new file mode 100644
index 000000000000..ac4ba7745dbf
--- /dev/null
+++ b/usr.bin/file/Magdir/lisp
@@ -0,0 +1,10 @@
+
+#------------------------------------------------------------------------------
+# lisp: file(1) magic for lisp programs
+#
+# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string ;; Lisp/Scheme program text
+# Emacs 18 - this is always correct, but not very magical.
+0 string \012( byte-compiled Emacs-Lisp program data
+# Emacs 19
+0 string ;ELC\023\000\000\000 byte-compiled Emacs-Lisp program data
diff --git a/usr.bin/file/Magdir/magic b/usr.bin/file/Magdir/magic
index 20ee340a0305..4a639c6579cd 100644
--- a/usr.bin/file/Magdir/magic
+++ b/usr.bin/file/Magdir/magic
@@ -1 +1,5 @@
+
+#------------------------------------------------------------------------------
+# magic: file(1) magic for magic files
+#
0 string #\ Magic magic text file for file(1) cmd
diff --git a/usr.bin/file/Magdir/mail.news b/usr.bin/file/Magdir/mail.news
index d55b108a9621..64c4e1c328c4 100644
--- a/usr.bin/file/Magdir/mail.news
+++ b/usr.bin/file/Magdir/mail.news
@@ -1,3 +1,7 @@
+
+#------------------------------------------------------------------------------
+# mail.news: file(1) magic for mail and news
+#
# Unfortunately, saved netnews also has From line added in some news software.
#0 string From mail text
# There are tests to ascmagic.c to cope with mail and news.
@@ -11,3 +15,4 @@
0 string Xref: news text
0 string From: news or mail text
0 string Article saved news text
+0 string BABYL Emacs RMAIL text
diff --git a/usr.bin/file/Magdir/microsoft b/usr.bin/file/Magdir/microsoft
index 72bb0df4af4f..74d1daf9de1e 100644
--- a/usr.bin/file/Magdir/microsoft
+++ b/usr.bin/file/Magdir/microsoft
@@ -1,5 +1,6 @@
-#
-# Microsoft (Xenix, not DOS)
+
+#------------------------------------------------------------------------------
+# microsoft: file(1) magic for Microsoft Xenix
#
# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
# model" lifted from "magic.xenix", with comment "derived empirically;
@@ -7,7 +8,7 @@
#
# "small model", "large model", "huge model" stuff lifted from XXX
#
-# XXX - "x.out" collides with PDP-11 archives....
+# XXX - "x.out" collides with PDP-11 archives
#
0 string core core file (Xenix)
0 byte 0x80 8086 relocatable (Microsoft)
@@ -26,7 +27,10 @@
>0x1c byte &0x40 word-swapped
>0x10 lelong >0 not-stripped
>0x1e leshort ^0xc000 pre-SysV
+>0x1e leshort &0x4000 V2.3
+>0x1e leshort &0x8000 V3.0
>0x1c byte &0x4 86
+>0x1c byte &0xb 186
>0x1c byte &0x9 286
>0x1c byte &0xa 386
>0x1f byte <0x040 small model
diff --git a/usr.bin/file/Magdir/mirage b/usr.bin/file/Magdir/mirage
index 8a2dbcbe8374..73c3747bb7fd 100644
--- a/usr.bin/file/Magdir/mirage
+++ b/usr.bin/file/Magdir/mirage
@@ -1,3 +1,6 @@
+
+#------------------------------------------------------------------------------
+# mirage: file(1) magic for Mirage executables
#
# XXX - byte order?
#
diff --git a/usr.bin/file/Magdir/mkid b/usr.bin/file/Magdir/mkid
index cd2cf864421f..dfb2d93f4389 100644
--- a/usr.bin/file/Magdir/mkid
+++ b/usr.bin/file/Magdir/mkid
@@ -1,3 +1,6 @@
+
+#------------------------------------------------------------------------------
+# mkid: file(1) magic for mkid(1) databases
#
# ID is the binary tags database produced by mkid(1).
#
diff --git a/usr.bin/file/Magdir/mmdf b/usr.bin/file/Magdir/mmdf
index 236c72140902..72cd9f32581b 100644
--- a/usr.bin/file/Magdir/mmdf
+++ b/usr.bin/file/Magdir/mmdf
@@ -1 +1,5 @@
+
+#------------------------------------------------------------------------------
+# mmdf: file(1) magic for MMDF mail files
+#
0 string \001\001\001\001 MMDF mailbox
diff --git a/usr.bin/file/Magdir/motorola b/usr.bin/file/Magdir/motorola
index b89279468fdb..d9fa2261ce6d 100644
--- a/usr.bin/file/Magdir/motorola
+++ b/usr.bin/file/Magdir/motorola
@@ -1,5 +1,6 @@
-#
-# Motorola
+
+#------------------------------------------------------------------------------
+# motorola: file(1) magic for Motorola 68K and 88K binaries
#
# 68K
#
diff --git a/usr.bin/file/Magdir/ms-dos b/usr.bin/file/Magdir/ms-dos
index 830493aef993..db2c03edfe09 100644
--- a/usr.bin/file/Magdir/ms-dos
+++ b/usr.bin/file/Magdir/ms-dos
@@ -1,8 +1,73 @@
+
+#------------------------------------------------------------------------------
+# msdos: file(1) magic for MS-DOS files
#
-# Various MS-DOS magic numbers
+
+# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
+0 string @echo\ off MS-DOS batch file text
+
+# .EXE formats (Greg Roelofs, newt@uchicago.edu)
#
-0 string MZ DOS executable (EXE)
-0 string LZ DOS executable (built-in)
-0 byte 0xe9 DOS executable (COM)
-0 byte 0xeb DOS executable (COM)
-0 byte 0xf0 MS-DOS program library
+0 string MZ MS-DOS executable (EXE)
+>24 string @ \b, OS/2 or Windows
+>1638 string -lh5- \b, LHa SFX archive v2.13S
+>7195 string Rar! \b, RAR self-extracting archive
+#
+# [GRR 950118: file 3.15 has a buffer-size limitation; offsets bigger than
+# 8161 bytes are ignored. To make the following entries work, increase
+# HOWMANY in file.h to 32K at least, and maybe to 70K or more for OS/2,
+# NT/Win32 and VMS.]
+# [GRR: some company sells a self-extractor/displayer for image data(!)]
+#
+>11696 string PK\003\004 \b, PKZIP SFX archive v1.1
+>13297 string PK\003\004 \b, PKZIP SFX archive v1.93a
+>15588 string PK\003\004 \b, PKZIP2 SFX archive v1.09
+>15770 string PK\003\004 \b, PKZIP SFX archive v2.04g
+>28374 string PK\003\004 \b, PKZIP2 SFX archive v1.02
+#
+# Info-ZIP self-extractors
+# these are the DOS versions:
+>25115 string PK\003\004 \b, Info-ZIP SFX archive v5.12
+>26331 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+# these are the OS/2 versions (OS/2 is flagged above):
+>47031 string PK\003\004 \b, Info-ZIP SFX archive v5.12
+>49845 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+# this is the NT/Win32 version:
+>69120 string PK\003\004 \b, Info-ZIP NT SFX archive v5.12 w/decryption
+#
+# TELVOX Teleinformatica CODEC self-extractor for OS/2:
+>49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21
+>>49824 leshort =1 \b, 1 file
+>>49824 leshort >1 \b, %u files
+
+# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)
+# Uncommenting only the first two lines will cover about 2/3 of COM files,
+# but it isn't feasible to match all COM files since there must be at least
+# two dozen different one-byte "magics".
+#0 byte 0xe9 MS-DOS executable (COM)
+#0 byte 0x8c MS-DOS executable (COM)
+# 0xeb conflicts with "sequent" magic
+#0 byte 0xeb MS-DOS executable (COM)
+#0 byte 0xb8 MS-DOS executable (COM)
+
+# miscellaneous formats
+0 string LZ MS-DOS executable (built-in)
+#0 byte 0xf0 MS-DOS program library data
+#
+
+# Popular applications
+2080 string Microsoft\ Word\ 6.0\ Document %s
+#
+0 belong 0x31be0000 Microsoft Word Document
+#
+2080 string Microsoft\ Excel\ 5.0\ Worksheet %s
+#
+0 belong 0x00001a00 Lotus 1-2-3
+>4 belong 0x00100400 wk3 document
+>4 belong 0x02100400 wk4 document
+>4 belong 0x07800100 fm3 or fmb document
+>4 belong 0x07800000 fm3 or fmb document
+#
+0 belong 0x00000200 Lotus 1-2-3
+>4 belong 0x06040600 wk1 document
+>4 belong 0x06800200 fmt document
diff --git a/usr.bin/file/Magdir/ncr b/usr.bin/file/Magdir/ncr
index 89df75058d6b..987c94e4a846 100644
--- a/usr.bin/file/Magdir/ncr
+++ b/usr.bin/file/Magdir/ncr
@@ -1,7 +1,8 @@
+
+#------------------------------------------------------------------------------
+# ncr: file(1) magic for NCR Tower objects
#
-# magic.tower:
-#
-# NCR Tower objects, contributed by
+# contributed by
# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa
# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP
#
diff --git a/usr.bin/file/Magdir/netbsd b/usr.bin/file/Magdir/netbsd
index c89f6fa7d074..ea948bd77ed5 100644
--- a/usr.bin/file/Magdir/netbsd
+++ b/usr.bin/file/Magdir/netbsd
@@ -1,3 +1,6 @@
+
+#------------------------------------------------------------------------------
+# netbsd: file(1) magic for NetBSD objects
#
# All new-style magic numbers are in network byte order.
#
@@ -5,6 +8,8 @@
>16 lelong >0 not stripped
0 lelong 000000314 BSDI demand paged executable
>16 lelong >0 not stripped
+>32 byte 0x6a (uses shared libs)
+
0 lelong 000000407 NetBSD little-endian object file
>16 lelong >0 not stripped
@@ -25,9 +30,12 @@
0 belong&0377777777 041400407 NetBSD/i386
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
+>>0 byte &0x40 position independent
>>20 lelong !0 executable
>>20 lelong =0 object file
>16 lelong >0 not stripped
+0 belong&0377777777 041400507 NetBSD/i386 core
+>12 string >\0 from '%s'
0 belong&0377777777 041600413 NetBSD/m68k demand paged
>0 byte &0x80
@@ -43,9 +51,12 @@
0 belong&0377777777 041600407 NetBSD/m68k
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
+>>0 byte &0x40 position independent
>>20 belong !0 executable
>>20 belong =0 object file
>16 belong >0 not stripped
+0 belong&0377777777 041600507 NetBSD/m68k core
+>12 string >\0 from '%s'
0 belong&0377777777 042000413 NetBSD/m68k4k demand paged
>0 byte &0x80
@@ -61,9 +72,12 @@
0 belong&0377777777 042000407 NetBSD/m68k4k
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
+>>0 byte &0x40 position independent
>>20 belong !0 executable
>>20 belong =0 object file
>16 belong >0 not stripped
+0 belong&0377777777 042000507 NetBSD/m68k4k core
+>12 string >\0 from '%s'
0 belong&0377777777 042200413 NetBSD/ns32532 demand paged
>0 byte &0x80
@@ -79,9 +93,12 @@
0 belong&0377777777 042200407 NetBSD/ns32532
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
+>>0 byte &0x40 position independent
>>20 lelong !0 executable
>>20 lelong =0 object file
>16 lelong >0 not stripped
+0 belong&0377777777 042200507 NetBSD/ns32532 core
+>12 string >\0 from '%s'
0 belong&0377777777 042400413 NetBSD/sparc demand paged
>0 byte &0x80
@@ -97,21 +114,72 @@
0 belong&0377777777 042400407 NetBSD/sparc
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
+>>0 byte &0x40 position independent
>>20 belong !0 executable
>>20 belong =0 object file
>16 belong >0 not stripped
-
-0 belong&0377777777 041400507 NetBSD/i386 core
->12 string >\0 from '%s'
-
-0 belong&0377777777 041600507 NetBSD/m68k core
+0 belong&0377777777 042400507 NetBSD/sparc core
>12 string >\0 from '%s'
-0 belong&0377777777 042000507 NetBSD/m68k4k core
+0 belong&0377777777 042600413 NetBSD/pmax demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 042600410 NetBSD/pmax pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 042600407 NetBSD/pmax
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 042600507 NetBSD/pmax core
>12 string >\0 from '%s'
-0 belong&0377777777 042200507 NetBSD/ns32532 core
+0 belong&0377777777 043000413 NetBSD/vax demand paged
+>0 byte &0x80
+>>20 lelong <4096 shared library
+>>20 lelong =4096 dynamically linked executable
+>>20 lelong >4096 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 043000410 NetBSD/vax pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 lelong >0 not stripped
+0 belong&0377777777 043000407 NetBSD/vax
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 lelong !0 executable
+>>20 lelong =0 object file
+>16 lelong >0 not stripped
+0 belong&0377777777 043000507 NetBSD/vax core
>12 string >\0 from '%s'
-0 belong&0377777777 042400507 NetBSD/sparc core
+0 belong&0377777777 043400413 NetBSD/mips demand paged
+>0 byte &0x80
+>>20 belong <8192 shared library
+>>20 belong =8192 dynamically linked executable
+>>20 belong >8192 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 043400410 NetBSD/mips pure
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80 executable
+>16 belong >0 not stripped
+0 belong&0377777777 043400407 NetBSD/mips
+>0 byte &0x80 dynamically linked executable
+>0 byte ^0x80
+>>0 byte &0x40 position independent
+>>20 belong !0 executable
+>>20 belong =0 object file
+>16 belong >0 not stripped
+0 belong&0377777777 043400507 NetBSD/mips core
>12 string >\0 from '%s'
diff --git a/usr.bin/file/Magdir/news b/usr.bin/file/Magdir/news
index df7b6599c5dd..0ac4fa269748 100644
--- a/usr.bin/file/Magdir/news
+++ b/usr.bin/file/Magdir/news
@@ -1,5 +1,12 @@
-# NeWS, not "news" as in "netnews"
+
+#------------------------------------------------------------------------------
+# news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
+#
0 string StartFontMetrics ASCII font metrics
0 string StartFont ASCII font bits
-0 long 0x137A2944 NeWS bitmap font
-0 long 0x137A2947 NeWS font family
+0 belong 0x137A2944 NeWS bitmap font
+0 belong 0x137A2947 NeWS font family
+0 belong 0x137A2950 scalable OpenFont binary
+0 belong 0x137A2951 encrypted scalable OpenFont binary
+8 belong 0x137A2B45 X11/NeWS bitmap font
+8 belong 0x137A2B48 X11/NeWS font family
diff --git a/usr.bin/file/Magdir/pbm b/usr.bin/file/Magdir/pbm
index bed702e66079..98c15f79485c 100644
--- a/usr.bin/file/Magdir/pbm
+++ b/usr.bin/file/Magdir/pbm
@@ -1,3 +1,6 @@
+
+#------------------------------------------------------------------------------
+# pbm: file(1) magic for Portable Bitmap files
#
# XXX - byte order?
#
diff --git a/usr.bin/file/Magdir/pdf b/usr.bin/file/Magdir/pdf
new file mode 100644
index 000000000000..3cea0de3457f
--- /dev/null
+++ b/usr.bin/file/Magdir/pdf
@@ -0,0 +1,7 @@
+
+#------------------------------------------------------------------------------
+# pdf: file(1) magic for Portable Document Format
+#
+
+0 string %PDF- PDF document
+>5 string x \b, version %.3s
diff --git a/usr.bin/file/Magdir/pdp b/usr.bin/file/Magdir/pdp
index cf1129dbc3b6..201dede3551c 100644
--- a/usr.bin/file/Magdir/pdp
+++ b/usr.bin/file/Magdir/pdp
@@ -1,22 +1,25 @@
-#
-# magic.pdp: PDP-11 executable/object and APL workspace
+
+#------------------------------------------------------------------------------
+# pdp: file(1) magic for PDP-11 executable/object and APL workspace
#
0 lelong 0101555 PDP-11 single precision APL workspace
0 lelong 0101554 PDP-11 double precision APL workspace
-
#
# PDP-11 a.out
#
0 leshort 0407 PDP-11 executable
>8 leshort >0 not stripped
+>15 byte >0 - version %ld
0 leshort 0401 PDP-11 UNIX/RT ldp
0 leshort 0405 PDP-11 old overlay
0 leshort 0410 PDP-11 pure executable
>8 leshort >0 not stripped
+>15 byte >0 - version %ld
0 leshort 0411 PDP-11 separate I&D executable
>8 leshort >0 not stripped
+>15 byte >0 - version %ld
0 leshort 0437 PDP-11 kernel overlay
diff --git a/usr.bin/file/Magdir/pgp b/usr.bin/file/Magdir/pgp
index 396555387929..aaff0e9b4bbc 100644
--- a/usr.bin/file/Magdir/pgp
+++ b/usr.bin/file/Magdir/pgp
@@ -1,10 +1,12 @@
+
+#------------------------------------------------------------------------------
+# pgp: file(1) magic for Pretty Good Privacy
#
-# pgp (pretty good protection)
-0 beshort 0x9900 pgp key public ring
-0 beshort 0x9501 pgp key security ring
-0 beshort 0x9500 pgp key security ring
-0 string -----BEGIN\040PGP pgp armored data
->15 string PUBLIC\040KEY\040BLOCK- public key blocK
+0 beshort 0x9900 PGP key public ring
+0 beshort 0x9501 PGP key security ring
+0 beshort 0x9500 PGP key security ring
+0 string -----BEGIN\040PGP PGP armored data
+>15 string PUBLIC\040KEY\040BLOCK- public key block
>15 string MESSAGE- message
>15 string SIGNED\040MESSAGE- signed message
>15 string PGP\040SIGNATURE- signature
diff --git a/usr.bin/file/Magdir/pkgadd b/usr.bin/file/Magdir/pkgadd
index 2cdb5e57f322..dc8ef5d93ab4 100644
--- a/usr.bin/file/Magdir/pkgadd
+++ b/usr.bin/file/Magdir/pkgadd
@@ -1,4 +1,5 @@
-#
-# SysV R4 PKG Datastreams:
+
+#------------------------------------------------------------------------------
+# pkgadd: file(1) magic for SysV R4 PKG Datastreams
#
0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)
diff --git a/usr.bin/file/Magdir/plus5 b/usr.bin/file/Magdir/plus5
index a5fa4e7dcced..acf3bf4037b6 100644
--- a/usr.bin/file/Magdir/plus5
+++ b/usr.bin/file/Magdir/plus5
@@ -1,5 +1,6 @@
-#
-#/etc/magic entries for Plus Five's UNIX MUMPS
+
+#------------------------------------------------------------------------------
+# plus5: file(1) magic for Plus Five's UNIX MUMPS
#
# XXX - byte order? Paging Hokey....
#
diff --git a/usr.bin/file/Magdir/printer b/usr.bin/file/Magdir/printer
new file mode 100644
index 000000000000..2d12bc5e4543
--- /dev/null
+++ b/usr.bin/file/Magdir/printer
@@ -0,0 +1,55 @@
+
+#------------------------------------------------------------------------------
+# printer: file(1) magic for printer-formatted files
+#
+
+# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)
+0 string %! PostScript document text
+>2 string PS-Adobe- conforming
+>>11 string >\0 at level %.3s
+>>>15 string EPS - type %s
+>>>15 string Query - type %s
+>>>15 string ExitServer - type %s
+# Some PCs have the annoying habit of adding a ^D as a document separator
+0 string \004%! PostScript document text
+>3 string PS-Adobe- conforming
+>>12 string >\0 at level %.3s
+>>>16 string EPS - type %s
+>>>16 string Query - type %s
+>>>16 string ExitServer - type %s
+
+# HP Printer Job Language
+0 string \033%-12345X@PJL HP Printer Job Language data
+>15 string \ ENTER\ LANGUAGE\ =
+>31 string PostScript Postscript
+
+# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \033E\033 HP PCL printer data
+>3 string \&l0A - default page size
+>3 string \&l1A - US executive page size
+>3 string \&l2A - US letter page size
+>3 string \&l3A - US legal page size
+>3 string \&l26A - A4 page size
+>3 string \&l80A - Monarch envelope size
+>3 string \&l81A - No. 10 envelope size
+>3 string \&l90A - Intl. DL envelope size
+>3 string \&l91A - Intl. C5 envelope size
+>3 string \&l100A - Intl. B5 envelope size
+>3 string \&l-81A - No. 10 envelope size (landscape)
+>3 string \&l-90A - Intl. DL envelope size (landscape)
+
+# IMAGEN printer-ready files:
+0 string @document( Imagen printer
+# this only works if "language xxx" is first item in Imagen header.
+>10 string language\ impress (imPRESS data)
+>10 string language\ daisy (daisywheel text)
+>10 string language\ diablo (daisywheel text)
+>10 string language\ printer (line printer emulation)
+>10 string language\ tektronix (Tektronix 4014 emulation)
+# Add any other languages that your Imagen uses - remember
+# to keep the word `text' if the file is human-readable.
+# [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)]
+#
+# Now magic for IMAGEN font files...
+0 string Rast RST-format raster font data
+>45 string >0 face %
diff --git a/usr.bin/file/Magdir/psdbms b/usr.bin/file/Magdir/psdbms
index b1fc2e18d4bc..f36121fcbcd4 100644
--- a/usr.bin/file/Magdir/psdbms
+++ b/usr.bin/file/Magdir/psdbms
@@ -1,5 +1,6 @@
-#
-# magic.ps: psdatabase magic
+
+#------------------------------------------------------------------------------
+# psdbms: file(1) magic for psdatabase
#
0 belong&0xff00ffff 0x56000000 ps database
>1 string >\0 version %s
diff --git a/usr.bin/file/Magdir/pyramid b/usr.bin/file/Magdir/pyramid
index b9c9e56cc8f0..fe16608436b8 100644
--- a/usr.bin/file/Magdir/pyramid
+++ b/usr.bin/file/Magdir/pyramid
@@ -1,5 +1,6 @@
-#
-# magic.pyramid: Magic for pyramids
+
+#------------------------------------------------------------------------------
+# pyramid: file(1) magic for Pyramids
#
# XXX - byte order?
#
diff --git a/usr.bin/file/Magdir/rpm b/usr.bin/file/Magdir/rpm
new file mode 100644
index 000000000000..7b89c682cf4c
--- /dev/null
+++ b/usr.bin/file/Magdir/rpm
@@ -0,0 +1,14 @@
+#------------------------------------------------------------------------------
+#
+# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com)
+#
+0 beshort 0xedab
+>2 beshort 0xeedb RPM
+>>4 byte x v%d
+>>6 beshort 0 bin
+>>6 beshort 1 src
+>>8 beshort 1 i386
+>>8 beshort 2 Alpha
+>>8 beshort 3 PowerPC
+>>8 beshort 4 Sparc
+>>10 string x %s
diff --git a/usr.bin/file/Magdir/rtf b/usr.bin/file/Magdir/rtf
new file mode 100644
index 000000000000..8e2d4166fa58
--- /dev/null
+++ b/usr.bin/file/Magdir/rtf
@@ -0,0 +1,12 @@
+
+#------------------------------------------------------------------------------
+# rtf: file(1) magic for Rich Text Format (RTF)
+#
+# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
+#
+0 string {\\rtf Rich Text Format data,
+>5 byte x version %c,
+>6 string \\ansi ANSI
+>6 string \\mac Apple Macintosh
+>6 string \\pc IBM PC, code page 437
+>6 string \\pca IBM PS/2, code page 850
diff --git a/usr.bin/file/Magdir/sc b/usr.bin/file/Magdir/sc
index 9bc91998e1f5..98599f264781 100644
--- a/usr.bin/file/Magdir/sc
+++ b/usr.bin/file/Magdir/sc
@@ -1,2 +1,5 @@
-# for SC
-38 string Spreadsheet sc file
+
+#------------------------------------------------------------------------------
+# sc: file(1) magic for "sc" spreadsheet
+#
+38 string Spreadsheet sc spreadsheet file
diff --git a/usr.bin/file/Magdir/sccs b/usr.bin/file/Magdir/sccs
index d27c5a70d925..11d50b23c003 100644
--- a/usr.bin/file/Magdir/sccs
+++ b/usr.bin/file/Magdir/sccs
@@ -1,3 +1,7 @@
+
+#------------------------------------------------------------------------------
+# sccs: file(1) magic for SCCS archives
+#
# SCCS archive structure:
# \001h01207
# \001s 00276/00000/00000
@@ -14,4 +18,4 @@
# is a checksum that could (presumably) have any leading digit,
# and we don't have regular expression matching yet.
# Hence the following official kludge:
-8 string \001s\ SCCS archive.
+8 string \001s\ SCCS archive data
diff --git a/usr.bin/file/Magdir/sendmail b/usr.bin/file/Magdir/sendmail
index 7eea31d217fb..503ef8967ad5 100644
--- a/usr.bin/file/Magdir/sendmail
+++ b/usr.bin/file/Magdir/sendmail
@@ -1,5 +1,6 @@
-#
-# magic.sendmail:
+
+#------------------------------------------------------------------------------
+# sendmail: file(1) magic for sendmail config files
#
# XXX - byte order?
#
diff --git a/usr.bin/file/Magdir/sequent b/usr.bin/file/Magdir/sequent
index bcb7061577f8..e6f7b52aacb1 100644
--- a/usr.bin/file/Magdir/sequent
+++ b/usr.bin/file/Magdir/sequent
@@ -1,3 +1,7 @@
+
+#------------------------------------------------------------------------------
+# sequent: file(1) magic for Sequent machines
+#
# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
# For Sequent's multiprocessor systems (incomplete).
0 lelong 0x00ea BALANCE NS32000 .o
diff --git a/usr.bin/file/Magdir/sgi b/usr.bin/file/Magdir/sgi
new file mode 100644
index 000000000000..a73cfcf0b3cb
--- /dev/null
+++ b/usr.bin/file/Magdir/sgi
@@ -0,0 +1,165 @@
+
+#------------------------------------------------------------------------------
+# sgi: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
+#
+# all of SGI's *current* machines and OSes run in big-endian mode on the
+# MIPS machines, as far as I know.
+#
+# XXX - what is the blank "-" line?
+#
+0 belong 0407 old SGI 68020 executable
+0 belong 0410 old SGI 68020 pure executable
+0 beshort 0x8765 disk quotas file
+0 beshort 0x0506 IRIS Showcase file
+>2 byte 0x49 -
+>3 byte x - version %ld
+0 beshort 0x0226 IRIS Showcase template
+>2 byte 0x63 -
+>3 byte x - version %ld
+0 belong 0x5343464d IRIS Showcase file
+>4 byte x - version %ld
+0 belong 0x5443464d IRIS Showcase template
+>4 byte x - version %ld
+0 belong 0xdeadbabe IRIX Parallel Arena
+>8 belong >0 - version %ld
+#
+0 beshort 0x0160 MIPSEB COFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x0162 MIPSEL COFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %d
+>22 byte x .%ld
+#
+0 beshort 0x6001 MIPSEB-LE COFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %d
+>23 byte x .%ld
+#
+0 beshort 0x6201 MIPSEL-LE COFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x .%ld
+#
+# MIPS 2 additions
+#
+0 beshort 0x0163 MIPSEB MIPS-II COFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x0166 MIPSEL MIPS-II COFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x6301 MIPSEB-LE MIPS-II COFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x6601 MIPSEL-LE MIPS-II COFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>23 byte x .%ld
+#
+# MIPS 3 additions
+#
+0 beshort 0x0140 MIPSEB MIPS-III COFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x0142 MIPSEL MIPS-III COFF executable
+>20 beshort 0407 (impure)
+>20 beshort 0410 (swapped)
+>20 beshort 0413 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>22 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x4001 MIPSEB-LE MIPS-III COFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x4201 MIPSEL-LE MIPS-III COFF executable
+>20 beshort 03401 (impure)
+>20 beshort 04001 (swapped)
+>20 beshort 05401 (paged)
+>8 belong >0 not stripped
+>8 belong 0 stripped
+>23 byte x - version %ld
+>23 byte x .%ld
+#
+0 beshort 0x180 MIPSEB Ucode
+0 beshort 0x182 MIPSEL Ucode
+# 32bit core file
+0 belong 0xdeadadb0 IRIX core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# 64bit core file
+0 belong 0xdeadad40 IRIX 64-bit core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# New style crash dump file
+0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
+>36 string >\0 '%s'
+# Trusted IRIX info
+0 string SGIAUDIT SGI Audit file
+>8 byte x - version %d
+>9 byte x .%ld
+# Are these three SGI-based file types or general ones?
+0 string WNGZWZSC Wingz compiled script
+0 string WNGZWZSS Wingz spreadsheet
+0 string WNGZWZHP Wingz help file
+#
+0 string \#Inventor V IRIS Inventor file
+# XXX - I don't know what next thing is! It is likely to be an image
+# (or movie) format
+0 string glfHeadMagic(); GLF_TEXT
+4 belong 0x41010000 GLF_BINARY_LSB_FIRST
+4 belong 0x00000141 GLF_BINARY_MSB_FIRST
diff --git a/usr.bin/file/Magdir/sgml b/usr.bin/file/Magdir/sgml
index bb8b5dd43d19..985bbeca21e3 100644
--- a/usr.bin/file/Magdir/sgml
+++ b/usr.bin/file/Magdir/sgml
@@ -1,6 +1,21 @@
-# $Id: sgml,v 1.3 1993/01/05 12:52:44 ian Exp $
-# SGML goop, mostly from rph@sq.
-0 string \<!DOCTYPE Exported SGML document
-0 string \<!doctype Exported SGML document
-0 string \<!SUBDOC Exported SGML subdocument
-0 string \<!subdoc Exported SGML subdocument
+
+#------------------------------------------------------------------------------
+# sgml: file(1) magic for Standard Generalized Markup Language
+
+# HyperText Markup Language (HTML) is an SGML document type,
+# from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \<!DOCTYPE\ HTML HTML document text
+0 string \<!doctype\ html HTML document text
+0 string \<HEAD HTML document text
+0 string \<head HTML document text
+0 string \<TITLE HTML document text
+0 string \<title HTML document text
+0 string \<html HTML document text
+0 string \<HTML HTML document text
+
+# SGML, mostly from rph@sq
+0 string \<!DOCTYPE exported SGML document text
+0 string \<!doctype exported SGML document text
+0 string \<!SUBDOC exported SGML subdocument text
+0 string \<!subdoc exported SGML subdocument text
+0 string \<!-- exported SGML document text
diff --git a/usr.bin/file/Magdir/softquad b/usr.bin/file/Magdir/softquad
index e49d052ee7cb..ffad996caa6e 100644
--- a/usr.bin/file/Magdir/softquad
+++ b/usr.bin/file/Magdir/softquad
@@ -1,5 +1,8 @@
-# SoftQuad Publishing Software magic numbers
-# $Id: softquad,v 1.8 1993/02/19 14:36:43 ian Exp $
+
+#------------------------------------------------------------------------------
+# softquad: file(1) magic for SoftQuad Publishing Software
+#
+# $Id: softquad,v 1.9 1995/01/21 21:09:00 christos Exp $
# Author/Editor and RulesBuilder
#
# XXX - byte order?
diff --git a/usr.bin/file/Magdir/sun b/usr.bin/file/Magdir/sun
index d6ce8093175c..f6695f1faa27 100644
--- a/usr.bin/file/Magdir/sun
+++ b/usr.bin/file/Magdir/sun
@@ -1,7 +1,9 @@
+
+#------------------------------------------------------------------------------
+# sun: file(1) magic for Sun machines
#
# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
-# releases.
-# (5.x uses ELF.)
+# releases. (5.x uses ELF.)
#
0 belong&077777777 0600413 sparc demand paged
>0 byte &0x80
diff --git a/usr.bin/file/Magdir/terminfo b/usr.bin/file/Magdir/terminfo
index 76e171d84db6..2226ce8cee53 100644
--- a/usr.bin/file/Magdir/terminfo
+++ b/usr.bin/file/Magdir/terminfo
@@ -1,5 +1,6 @@
-#
-# Terminfo
+
+#------------------------------------------------------------------------------
+# terminfo: file(1) magic for terminfo
#
# XXX - byte order for screen images?
#
diff --git a/usr.bin/file/Magdir/tex b/usr.bin/file/Magdir/tex
index 734bedd5a8e8..5126be8c8001 100644
--- a/usr.bin/file/Magdir/tex
+++ b/usr.bin/file/Magdir/tex
@@ -1,7 +1,6 @@
-#
-# magic.tex:
-#
-# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
+
+#------------------------------------------------------------------------------
+# tex: file(1) magic for TeX files
#
# From <conklin@talisman.kaleida.com>
@@ -9,17 +8,29 @@
# and font files, we can't use them reliably because they are not
# zero terminated. [but we do anyway, christos]
0 string \367\002 TeX DVI file
->16 string >\0 (%s)
+>16 string >\0 (%s)
0 string \367\203 TeX generic font data
0 string \367\131 TeX packed font data
->4 string >\0 (%s)
+>3 string >\0 (%s)
0 string \367\312 TeX virtual font data
-0 string This\ is\ TeX, TeX transcript text
+0 string This\ is\ TeX, TeX transcript text
0 string This\ is\ METAFONT, METAFONT transcript text
# There is no way to detect TeX Font Metric (*.tfm) files without
# breaking them apart and reading the data. The following patterns
# match most *.tfm files generated by METAFONT or afm2tfm.
2 string \000\021 TeX font metric data
+>33 string >\0 (%s)
2 string \000\022 TeX font metric data
->34 string >\0 (%s)
+>33 string >\0 (%s)
+
+# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \\input\ texinfo Texinfo source text
+0 string This\ is\ Info\ file GNU Info text
+
+# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)
+0 string \\input TeX document text
+0 string \\section LaTeX document text
+0 string \\setlength LaTeX document text
+0 string \\documentstyle LaTeX document text
+0 string \\chapter LaTeX document text
diff --git a/usr.bin/file/Magdir/timezone b/usr.bin/file/Magdir/timezone
new file mode 100644
index 000000000000..e47a3717abd6
--- /dev/null
+++ b/usr.bin/file/Magdir/timezone
@@ -0,0 +1,12 @@
+
+#------------------------------------------------------------------------------
+# timezone: file(1) magic for timezone data
+#
+# from Daniel Quinlan (quinlan@yggdrasil.com)
+# this should work on Linux, SunOS, and maybe others
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 timezone data
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 timezone data
diff --git a/usr.bin/file/Magdir/troff b/usr.bin/file/Magdir/troff
index d414c1649322..ea75e8516dbe 100644
--- a/usr.bin/file/Magdir/troff
+++ b/usr.bin/file/Magdir/troff
@@ -1,6 +1,27 @@
+
+#------------------------------------------------------------------------------
+# troff: file(1) magic for *roff
#
-# magic.troff:
-#
-0 string \100\357 very old (C/A/T) troff output data
-0 string ' [nt]roff, tbl, or eqn input text
+# updated by Daniel Quinlan (quinlan@yggdrasil.com)
+# troff input
+0 string .\\" troff or preprocessor input text
+0 string '\\" troff or preprocessor input text
+0 string '.\\" troff or preprocessor input text
+0 string \\" troff or preprocessor input text
+
+# ditroff intermediate output text
+0 string x\ T ditroff text
+>4 string cat for the C/A/T phototypesetter
+>4 string ps for PostScript
+>4 string dvi for DVI
+>4 string ascii for ASCII
+>4 string lj4 for LaserJet 4
+>4 string latin1 for ISO 8859-1 (Latin 1)
+>4 string X75 for xditview at 75dpi
+>>7 string -12 (12pt)
+>4 string X100 for xditview at 100dpi
+>>8 string -12 (12pt)
+
+# output data formats
+0 string \100\357 very old (C/A/T) troff output data
diff --git a/usr.bin/file/Magdir/typeset b/usr.bin/file/Magdir/typeset
index 506456350c18..2eda7c3e413f 100644
--- a/usr.bin/file/Magdir/typeset
+++ b/usr.bin/file/Magdir/typeset
@@ -1,5 +1,7 @@
-# other typesetting magic
-0 string \100\357 very old (C/A/T) troff output data
+
+#------------------------------------------------------------------------------
+# typeset: file(1) magic for other typesetting
+#
0 string Interpress/Xerox Xerox InterPress data
>16 string / (version
>>17 string >\0 %s)
diff --git a/usr.bin/file/Magdir/unknown b/usr.bin/file/Magdir/unknown
index 1ea5f066d6ff..843dc2936db0 100644
--- a/usr.bin/file/Magdir/unknown
+++ b/usr.bin/file/Magdir/unknown
@@ -1,5 +1,6 @@
-#
-# magic.unknown: Unknown machine magic
+
+#------------------------------------------------------------------------------
+# unknown: file(1) magic for unknown machines
#
# XXX - this probably should be pruned, as it'll match PDP-11 and
# VAX image formats.
diff --git a/usr.bin/file/Magdir/uuencode b/usr.bin/file/Magdir/uuencode
index add48a8c3276..7e88619d5ca9 100644
--- a/usr.bin/file/Magdir/uuencode
+++ b/usr.bin/file/Magdir/uuencode
@@ -1,3 +1,30 @@
-0 string begin uuencoded mail text
-# Btoa(1) is an alternative to uuencode that requires less space.
+
+#------------------------------------------------------------------------------
+# uuencode: file(1) magic for ASCII-encoded files
+#
+
+# GRR: the first line of xxencoded files is identical to that in uuencoded
+# files, but the first character in most subsequent lines is 'h' instead of
+# 'M'. (xxencoding uses lowercase letters in place of most of uuencode's
+# punctuation and survives BITNET gateways better.) If regular expressions
+# were supported, this entry could possibly be split into two with
+# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
+0 string begin\040 uuencoded or xxencoded text
+
+# btoa(1) is an alternative to uuencode that requires less space.
0 string xbtoa\ Begin btoa'd text
+
+# ship(1) is another, much cooler alternative to uuencode.
+# Greg Roelofs, newt@uchicago.edu
+0 string $\012ship ship'd binary text
+
+# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
+# Greg Roelofs, newt@uchicago.edu
+0 string Decode\ the\ following\ with\ bdeco bencoded News text
+
+# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
+# Daniel Quinlan, quinlan@yggdrasil.com
+11 string must\ be\ converted\ with\ BinHex BinHex binary text
+>41 string x \b, version %.3s
+
+# GRR: is MIME BASE64 encoding handled somewhere?
diff --git a/usr.bin/file/Magdir/varied.out b/usr.bin/file/Magdir/varied.out
index 3a997d1c5711..2d1c95658305 100644
--- a/usr.bin/file/Magdir/varied.out
+++ b/usr.bin/file/Magdir/varied.out
@@ -1,5 +1,15 @@
+
+#------------------------------------------------------------------------------
+# varied.out: file(1) magic for various USG systems
+#
# Herewith many of the object file formats used by USG systems.
# Most have been moved to files for a particular processor,
# and deleted if they duplicate other entries.
#
0 short 0610 Perkin-Elmer executable
+# AMD 29K
+0 beshort 0572 amd 29k coff noprebar executable
+0 beshort 01572 amd 29k coff prebar executable
+0 beshort 0160007 amd 29k coff archive
+# Cray
+6 beshort 0407 unicos (cray) executable
diff --git a/usr.bin/file/Magdir/vax b/usr.bin/file/Magdir/vax
index af665fa8a8f3..7dd86ccf53e1 100644
--- a/usr.bin/file/Magdir/vax
+++ b/usr.bin/file/Magdir/vax
@@ -1,5 +1,6 @@
-#
-# magic.pdp: VAX executable/object and APL workspace
+
+#------------------------------------------------------------------------------
+# vax: file(1) magic for VAX executable/object and APL workspace
#
0 lelong 0101557 VAX single precision APL workspace
0 lelong 0101556 VAX double precision APL workspace
diff --git a/usr.bin/file/Magdir/visx b/usr.bin/file/Magdir/visx
index e95cc5ee6ea0..491996426091 100644
--- a/usr.bin/file/Magdir/visx
+++ b/usr.bin/file/Magdir/visx
@@ -1,5 +1,6 @@
-#
-# magic.visx: Visx format file
+
+#------------------------------------------------------------------------------
+# visx: file(1) magic for Visx format files
#
0 short 0x5555 VISX image file
>2 byte 0 (zero)
diff --git a/usr.bin/file/Magdir/vms b/usr.bin/file/Magdir/vms
new file mode 100644
index 000000000000..c91186f68c3e
--- /dev/null
+++ b/usr.bin/file/Magdir/vms
@@ -0,0 +1,27 @@
+
+#------------------------------------------------------------------------------
+# vms: file(1) magic for VMS executables (experimental)
+#
+# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)
+
+# GRR 950122: I'm just guessing on these, based on inspection of the headers
+# of three executables each for Alpha and VAX architectures. The VAX files
+# all had headers similar to this:
+#
+# 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205
+# 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................
+#
+0 string \xb0\0\x30\0 VMS VAX executable
+>44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
+#
+# The AXP files all looked like this, except that the byte at offset 0x22
+# was 06 in some of them and 07 in others:
+#
+# 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................
+# 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h...............
+# 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+# 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
+# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................
+#
+0 belong 0x03000000 VMS Alpha executable
+>75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
diff --git a/usr.bin/file/Magdir/zilog b/usr.bin/file/Magdir/zilog
index c7503cddd5d1..b746e204f5b9 100644
--- a/usr.bin/file/Magdir/zilog
+++ b/usr.bin/file/Magdir/zilog
@@ -1,5 +1,6 @@
-#
-# Zilog Z8000.
+
+#------------------------------------------------------------------------------
+# zilog: file(1) magic for Zilog Z8000.
#
# Was it big-endian or little-endian? My Product Specification doesn't
# say.
@@ -8,4 +9,3 @@
0 long 0xe808 pure object file (z8000 a.out)
0 long 0xe809 separate object file (z8000 a.out)
0 long 0xe805 overlay object file (z8000 a.out)
-
diff --git a/usr.bin/file/Magdir/zyxel b/usr.bin/file/Magdir/zyxel
index dfb48bfad6ae..12a6abd5de8c 100644
--- a/usr.bin/file/Magdir/zyxel
+++ b/usr.bin/file/Magdir/zyxel
@@ -1,9 +1,16 @@
+
+#------------------------------------------------------------------------------
+# zyxel: file(1) magic for ZyXEL modems
+#
# From <rob@pe1chl.ampr.org>
# These are the /etc/magic entries to decode datafiles as used for the
# ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a
# ZyXEL-defined standard)
-0 string ZyXEL\002 ZyXEL voice data
->10 byte 0 - CELP encoding
->10 byte 1 - ADPCM2 encoding
->10 byte 2 - ADPCM3 encoding
+0 string ZyXEL\002 ZyXEL voice data
+>10 byte 0 - CELP encoding
+>10 byte&0x0B 1 - ADPCM2 encoding
+>10 byte&0x0B 2 - ADPCM3 encoding
+>10 byte&0x0B 3 - ADPCM4 encoding
+>10 byte&0x0B 8 - New ADPCM3 encoding
+>10 byte&0x04 4 with resync
diff --git a/usr.bin/file/Makefile b/usr.bin/file/Makefile
index d59f490fe237..624ab9eed407 100644
--- a/usr.bin/file/Makefile
+++ b/usr.bin/file/Makefile
@@ -1,6 +1,6 @@
# Makefile for file(1) cmd.
# Copyright (c) Ian F. Darwin 86/09/01 - see LEGAL.NOTICE.
-# @(#)$Id: Makefile,v 1.43 1994/05/03 17:57:59 christos Exp $
+# @(#)$Id: Makefile,v 1.49 1995/10/27 23:12:33 christos Exp $
#
# This software is not subject to any license of the American Telephone
# and Telegraph Company or of the Regents of the University of California.
@@ -21,7 +21,7 @@
# ever read sources, credits must appear in the documentation.
#
# 4. This notice may not be removed or altered.
-VERSION = 3.14
+VERSION = 3.19
SHELL = /bin/sh
#MAGIC = /etc/magic
MAGIC = /usr/local/etc/magic
@@ -91,7 +91,7 @@ try: all $(OFILE)
what ./file >lastnocore
file: $(OBJS)
- $(CC) $(CFLAGS) $(OBJS) -o $@
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o $@
lint: $(SRCS)
lint -ha $(DEFS) $(SRCS) | tee $@
magic: Magdir
@@ -119,12 +119,14 @@ clobber:
magic.${MANFEXT} : Makefile magic.man
@rm -f $@
- sed -e s@__SECTION__@${MANFEXT}@g \
+ sed -e s@__CSECTION__@${MANCEXT}@g \
+ -e s@__FSECTION__@${MANFEXT}@g \
-e s@__MAGIC__@${MAGIC}@g magic.man > $@
file.${MANCEXT} : Makefile file.man
@rm -f $@
- sed -e s@__SECTION__@${MANCEXT}@g \
+ sed -e s@__CSECTION__@${MANCEXT}@g \
+ -e s@__FSECTION__@${MANFEXT}@g \
-e s@__MAGIC__@${MAGIC}@g file.man > $@
send: dist
diff --git a/usr.bin/file/apprentice.c b/usr.bin/file/apprentice.c
index e1b4f4553070..d637399d58e2 100644
--- a/usr.bin/file/apprentice.c
+++ b/usr.bin/file/apprentice.c
@@ -29,56 +29,92 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <errno.h>
#include "file.h"
#ifndef lint
static char *moduleid =
- "@(#)$Id: apprentice.c,v 1.19 1994/05/03 17:58:23 christos Exp $";
+ "@(#)$Id: apprentice.c,v 1.23 1995/10/27 23:12:01 christos Exp $";
#endif /* lint */
#define EATAB {while (isascii((unsigned char) *l) && \
isspace((unsigned char) *l)) ++l;}
+#define LOWCASE(l) (isupper((unsigned char) (l)) ? \
+ tolower((unsigned char) (l)) : (l))
static int getvalue __P((struct magic *, char **));
static int hextoint __P((int));
static char *getstr __P((char *, char *, int, int *));
static int parse __P((char *, int *, int));
+static void eatsize __P((char **));
static int maxmagic = 0;
+static int apprentice_1 __P((char *, int));
+
int
apprentice(fn, check)
-char *fn; /* name of magic file */
+char *fn; /* list of magic files */
int check; /* non-zero? checking-only run. */
{
- FILE *f;
- char line[BUFSIZ+1];
- int errs = 0;
-
- f = fopen(fn, "r");
- if (f==NULL) {
- (void) fprintf(stderr, "%s: can't read magic file %s\n",
- progname, fn);
- if (check)
- return -1;
- else
- exit(1);
- }
+ char *p, *mfn;
+ int file_err, errs = -1;
maxmagic = MAXMAGIS;
- if ((magic = (struct magic *) calloc(sizeof(struct magic), maxmagic))
- == NULL) {
+ magic = (struct magic *) calloc(sizeof(struct magic), maxmagic);
+ mfn = malloc(strlen(fn)+1);
+ if (magic == NULL || mfn == NULL) {
(void) fprintf(stderr, "%s: Out of memory.\n", progname);
if (check)
return -1;
else
exit(1);
}
+ fn = strcpy(mfn, fn);
+ while (fn) {
+ p = strchr(fn, ':');
+ if (p)
+ *p++ = '\0';
+ file_err = apprentice_1(fn, check);
+ if (file_err > errs)
+ errs = file_err;
+ fn = p;
+ }
+ if (errs == -1)
+ (void) fprintf(stderr, "%s: couldn't find any magic files!\n",
+ progname);
+ if (!check && errs)
+ exit(1);
+
+ free(mfn);
+ return errs;
+}
+
+static int
+apprentice_1(fn, check)
+char *fn; /* name of magic file */
+int check; /* non-zero? checking-only run. */
+{
+ static const char hdr[] =
+ "cont\toffset\ttype\topcode\tmask\tvalue\tdesc";
+ FILE *f;
+ char line[BUFSIZ+1];
+ int errs = 0;
+
+ f = fopen(fn, "r");
+ if (f==NULL) {
+ if (errno != ENOENT)
+ (void) fprintf(stderr,
+ "%s: can't read magic file %s (%s)\n",
+ progname, fn, strerror(errno));
+ return -1;
+ }
+
/* parse it */
if (check) /* print silly verbose header for USG compat. */
- (void) printf("cont\toffset\ttype\topcode\tmask\tvalue\tdesc\n");
+ (void) printf("%s\n", hdr);
for (lineno = 1;fgets(line, BUFSIZ, f) != NULL; lineno++) {
if (line[0]=='#') /* comment, do not parse */
@@ -87,11 +123,11 @@ int check; /* non-zero? checking-only run. */
continue;
line[strlen(line)-1] = '\0'; /* delete newline */
if (parse(line, &nmagic, check) != 0)
- ++errs;
+ errs = 1;
}
(void) fclose(f);
- return errs ? -1 : 0;
+ return errs;
}
/*
@@ -147,8 +183,9 @@ int *ndx, check;
struct magic *m;
char *t, *s;
+#define ALLOC_INCR 20
if (nd+1 >= maxmagic){
- maxmagic += 20;
+ maxmagic += ALLOC_INCR;
if ((magic = (struct magic *) realloc(magic,
sizeof(struct magic) *
maxmagic)) == NULL) {
@@ -158,6 +195,7 @@ int *ndx, check;
else
exit(1);
}
+ memset(&magic[*ndx], 0, sizeof(struct magic) * ALLOC_INCR);
}
m = &magic[*ndx];
m->flag = 0;
@@ -174,7 +212,7 @@ int *ndx, check;
}
/* get offset, then skip over it */
- m->offset = (int) strtol(l,&t,0);
+ m->offset = (int) strtoul(l,&t,0);
if (l == t)
magwarn("offset %s invalid", l);
l = t;
@@ -186,13 +224,16 @@ int *ndx, check;
* read [.lbs][+-]nnnnn)
*/
if (*l == '.') {
- switch (*++l) {
+ l++;
+ switch (LOWCASE(*l)) {
case 'l':
m->in.type = LONG;
break;
+ case 'h':
case 's':
m->in.type = SHORT;
break;
+ case 'c':
case 'b':
m->in.type = BYTE;
break;
@@ -205,7 +246,7 @@ int *ndx, check;
s = l;
if (*l == '+' || *l == '-') l++;
if (isdigit((unsigned char)*l)) {
- m->in.offset = strtol(l, &t, 0);
+ m->in.offset = strtoul(l, &t, 0);
if (*s == '-') m->in.offset = - m->in.offset;
}
else
@@ -278,7 +319,8 @@ int *ndx, check;
/* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
if (*l == '&') {
++l;
- m->mask = signextend(m, strtol(l, &l, 0));
+ m->mask = signextend(m, strtoul(l, &l, 0));
+ eatsize(&l);
} else
m->mask = ~0L;
EATAB;
@@ -360,8 +402,10 @@ char **p;
*p = getstr(*p, m->value.s, sizeof(m->value.s), &slen);
m->vallen = slen;
} else
- if (m->reln != 'x')
- m->value.l = signextend(m, strtol(*p, p, 0));
+ if (m->reln != 'x') {
+ m->value.l = signextend(m, strtoul(*p, p, 0));
+ eatsize(p);
+ }
return 0;
}
@@ -549,3 +593,30 @@ int len;
}
}
}
+
+/*
+ * eatsize(): Eat the size spec from a number [eg. 10UL]
+ */
+static void
+eatsize(p)
+char **p;
+{
+ char *l = *p;
+
+ if (LOWCASE(*l) == 'u')
+ l++;
+
+ switch (LOWCASE(*l)) {
+ case 'l': /* long */
+ case 's': /* short */
+ case 'h': /* short */
+ case 'b': /* char/byte */
+ case 'c': /* char/byte */
+ l++;
+ /*FALLTHROUGH*/
+ default:
+ break;
+ }
+
+ *p = l;
+}
diff --git a/usr.bin/file/ascmagic.c b/usr.bin/file/ascmagic.c
index 600b0ab9d568..600d468b7da7 100644
--- a/usr.bin/file/ascmagic.c
+++ b/usr.bin/file/ascmagic.c
@@ -1,5 +1,5 @@
/*
- * Ascii magic -- file types that we know based on keywords
+ * ASCII magic -- file types that we know based on keywords
* that can appear anywhere in the file.
*
* Copyright (c) Ian F. Darwin, 1987.
@@ -36,7 +36,7 @@
#ifndef lint
static char *moduleid =
- "@(#)$Id: ascmagic.c,v 1.17 1994/01/21 01:25:30 christos Exp $";
+ "@(#)$Id: ascmagic.c,v 1.20 1995/05/20 22:09:21 christos Exp $";
#endif /* lint */
/* an optimisation over plain strcmp() */
@@ -47,13 +47,24 @@ ascmagic(buf, nbytes)
unsigned char *buf;
int nbytes; /* size actually read */
{
- int i, isblock, has_escapes = 0;
+ int i, has_escapes = 0;
unsigned char *s;
char nbuf[HOWMANY+1]; /* one extra for terminating '\0' */
char *token;
register struct names *p;
- /* these are easy, do them first */
+ /*
+ * Do the tar test first, because if the first file in the tar
+ * archive starts with a dot, we can confuse it with an nroff file.
+ */
+ switch (is_tar(buf, nbytes)) {
+ case 1:
+ ckfputs("tar archive", stdout);
+ return 1;
+ case 2:
+ ckfputs("POSIX tar archive", stdout);
+ return 1;
+ }
/*
* for troff, look for . + letter + letter or .\";
@@ -66,13 +77,13 @@ int nbytes; /* size actually read */
while (isascii(*tp) && isspace(*tp))
++tp; /* skip leading whitespace */
if ((isascii(*tp) && (isalnum(*tp) || *tp=='\\') &&
- isascii(*(tp+1)) && (isalnum(*(tp+1)) || *tp=='"'))) {
+ isascii(tp[1]) && (isalnum(tp[1]) || tp[1] == '"'))) {
ckfputs("troff or preprocessor input text", stdout);
return 1;
}
}
if ((*buf == 'c' || *buf == 'C') &&
- isascii(*(buf + 1)) && isspace(*(buf + 1))) {
+ isascii(buf[1]) && isspace(buf[1])) {
ckfputs("fortran program text", stdout);
return 1;
}
@@ -82,7 +93,7 @@ int nbytes; /* size actually read */
s = (unsigned char*) memcpy(nbuf, buf, nbytes);
s[nbytes] = '\0';
has_escapes = (memchr(s, '\033', nbytes) != NULL);
- while ((token = strtok((char*)s, " \t\n\r\f")) != NULL) {
+ while ((token = strtok((char *) s, " \t\n\r\f")) != NULL) {
s = NULL; /* make strtok() keep on tokin' */
for (p = names; p < names + NNAMES; p++) {
if (STREQ(p->name, token)) {
@@ -95,22 +106,14 @@ int nbytes; /* size actually read */
}
}
- switch (is_tar(buf, nbytes)) {
- case 1:
- ckfputs("tar archive", stdout);
- return 1;
- case 2:
- ckfputs("POSIX tar archive", stdout);
- return 1;
- }
for (i = 0; i < nbytes; i++) {
- if (!isascii(*(buf+i)))
- return 0; /* not all ascii */
+ if (!isascii(buf[i]))
+ return 0; /* not all ASCII */
}
- /* all else fails, but it is ascii... */
- ckfputs("ascii text", stdout);
+ /* all else fails, but it is ASCII... */
+ ckfputs("ASCII text", stdout);
if (has_escapes) {
ckfputs(" (with escape sequences)", stdout);
}
diff --git a/usr.bin/file/compress.c b/usr.bin/file/compress.c
index a665306ac951..096abb61e4b2 100644
--- a/usr.bin/file/compress.c
+++ b/usr.bin/file/compress.c
@@ -4,7 +4,7 @@
* information if recognized
* uncompress(method, old, n, newch) - uncompress old into new,
* using method, return sizeof new
- * $Id: compress.c,v 1.8 1994/01/21 01:38:24 christos Exp $
+ * $Id: compress.c,v 1.9 1995/05/20 22:09:21 christos Exp $
*/
#include <stdio.h>
#include <stdlib.h>
@@ -20,13 +20,12 @@ static struct {
char *argv[3];
int silent;
} compr[] = {
- { "\037\235", 2, { "uncompress", "-c", NULL }, 0 },
- { "\037\213", 2, { "gzip", "-dq", NULL }, 1 },
- /*
- * XXX pcat does not work, cause I don't know how to make it read stdin,
- * so we use gzip
- */
- { "\037\036", 2, { "gzip", "-dq", NULL }, 0 },
+ { "\037\235", 2, { "uncompress", "-c", NULL }, 0 }, /* compressed */
+ { "\037\213", 2, { "gzip", "-cdq", NULL }, 1 }, /* gzipped */
+ { "\037\236", 2, { "gzip", "-cdq", NULL }, 1 }, /* frozen */
+ { "\037\240", 2, { "gzip", "-cdq", NULL }, 1 }, /* SCO LZH */
+ /* the standard pack utilities do not accept standard input */
+ { "\037\036", 2, { "gzip", "-cdq", NULL }, 0 }, /* packed */
};
static int ncompr = sizeof(compr) / sizeof(compr[0]);
@@ -121,5 +120,3 @@ int n;
return n;
}
}
-
-
diff --git a/usr.bin/file/file.1 b/usr.bin/file/file.1
index c10b221c26ca..a1d33202ec4b 100644
--- a/usr.bin/file/file.1
+++ b/usr.bin/file/file.1
@@ -1,25 +1,19 @@
-.TH FILE 1 "Copyright but distributable"
-.\# $Id: file.man,v 1.23 1993/09/24 18:50:48 christos Exp $
+.TH FILE __CSECTION__ "Copyright but distributable"
+.\" $Id: file.man,v 1.26 1995/10/27 23:12:01 christos Exp $
.SH NAME
-.I file
+file
\- determine file type
.SH SYNOPSIS
.B file
[
-.B \-c
-]
-[
-.B \-z
-]
-[
-.B \-L
+.B \-vczL
]
[
.B \-f
namefile ]
[
.B \-m
-magicfile ]
+magicfiles ]
file ...
.SH DESCRIPTION
.I File
@@ -101,44 +95,47 @@ The language test routines also test for some miscellany
.I tar
archives) and determine whether an unknown file should be
labelled as `ascii text' or `data'.
-.PP
-Use
-.B \-m
-.I file
-to specify an alternate file of magic numbers.
-.PP
-The
+.SH OPTIONS
+.TP 8
+.B \-v
+Print the version of the program and exit.
+.TP 8
+.B \-m list
+Specify an alternate list of files containing magic numbers.
+This can be a single file, or a colon-separated list of files.
+.TP 8
.B \-z
-tries to look inside compressed files.
-.PP
-The
+Try to look inside compressed files.
+.TP 8
.B \-c
-option causes a checking printout of the parsed form of the magic file.
+Cause a checking printout of the parsed form of the magic file.
This is usually used in conjunction with
.B \-m
to debug a new magic file before installing it.
-.PP
-The
-.B \-f
-.I namefile
-option specifies that the names of the files to be examined
-are to be read (one per line) from
+.TP 8
+.B \-f namefile
+Read the names of the files to be examined from
.I namefile
+(one per line)
before the argument list.
Either
.I namefile
or at least one filename argument must be present;
to test the standard input, use ``-'' as a filename argument.
-.PP
-The
+.TP 8
.B \-L
option causes symlinks to be followed, as the like-named option in
.IR ls (1).
+(on systems that support symbolic links).
.SH FILES
.I __MAGIC__
\- default list of magic numbers
+.SH ENVIRONMENT
+The environment variable
+.B MAGIC
+can be used to set the default magic number files.
.SH SEE ALSO
-.IR magic (__SECTION__)
+.IR magic (__FSECTION__)
\- description of magic file format.
.br
.IR Strings (1), " od" (1)
diff --git a/usr.bin/file/file.c b/usr.bin/file/file.c
index a8acdd436b9e..0b617e16dd87 100644
--- a/usr.bin/file/file.c
+++ b/usr.bin/file/file.c
@@ -26,7 +26,7 @@
*/
#ifndef lint
static char *moduleid =
- "@(#)$Id: file.c,v 1.29 1993/10/27 20:59:05 christos Exp $";
+ "@(#)$Id: file.c,v 1.34 1995/10/27 23:12:01 christos Exp $";
#endif /* lint */
#include <stdio.h>
@@ -36,15 +36,24 @@ static char *moduleid =
#include <sys/param.h> /* for MAXPATHLEN */
#include <sys/stat.h>
#include <fcntl.h> /* for open() */
+#if (__COHERENT__ >= 0x420)
+#include <sys/utime.h>
+#else
#include <utime.h>
+#endif
#include <unistd.h> /* for read() */
+#ifdef __ELF__
+#include <elf.h>
+#endif
+
+#include "patchlevel.h"
#include "file.h"
#ifdef S_IFLNK
-# define USAGE "Usage: %s [-czL] [-f namefile] [-m magicfile] file...\n"
+# define USAGE "Usage: %s [-vczL] [-f namefile] [-m magicfiles] file...\n"
#else
-# define USAGE "Usage: %s [-cz] [-f namefile] [-m magicfile] file...\n"
+# define USAGE "Usage: %s [-vcz] [-f namefile] [-m magicfiles] file...\n"
#endif
#ifndef MAGIC
@@ -61,7 +70,7 @@ int /* Misc globals */
struct magic *magic; /* array of magic entries */
-char *magicfile = MAGIC;/* where magic be found */
+char *magicfile; /* where magic be found */
char *progname; /* used throughout */
int lineno; /* line number in the magic file */
@@ -78,15 +87,22 @@ int argc;
char *argv[];
{
int c;
- int check = 0, didsomefiles = 0, errflg = 0, ret = 0;
+ int check = 0, didsomefiles = 0, errflg = 0, ret = 0, app = 0;
if ((progname = strrchr(argv[0], '/')) != NULL)
progname++;
else
progname = argv[0];
- while ((c = getopt(argc, argv, "cdf:Lm:z")) != EOF)
+ if (!(magicfile = getenv("MAGIC")))
+ magicfile = MAGIC;
+
+ while ((c = getopt(argc, argv, "vcdf:Lm:z")) != EOF)
switch (c) {
+ case 'v':
+ (void) fprintf(stdout, "%s-%d.%d\n", progname,
+ FILE_VERSION_MAJOR, patchlevel);
+ return 1;
case 'c':
++check;
break;
@@ -94,6 +110,12 @@ char *argv[];
++debug;
break;
case 'f':
+ if (!app) {
+ ret = apprentice(magicfile, check);
+ if (check)
+ exit(ret);
+ app = 1;
+ }
unwrap(optarg);
++didsomefiles;
break;
@@ -113,14 +135,18 @@ char *argv[];
errflg++;
break;
}
+
if (errflg) {
(void) fprintf(stderr, USAGE, progname);
exit(2);
}
- ret = apprentice(magicfile, check);
- if (check)
- exit(ret);
+ if (!app) {
+ ret = apprentice(magicfile, check);
+ if (check)
+ exit(ret);
+ app = 1;
+ }
if (optind == argc) {
if (!didsomefiles) {
@@ -190,10 +216,11 @@ int wid;
struct utimbuf utbuf;
struct stat sb;
int nbytes = 0; /* number of bytes read from a datafile */
+ char match = '\0';
if (strcmp("-", inname) == 0) {
if (fstat(0, &sb)<0) {
- error("cannot fstat `%s' (%s).\n", stdname,
+ error("cannot fstat `%s' (%s).\n", stdname,
strerror(errno));
/*NOTREACHED*/
}
@@ -212,7 +239,7 @@ int wid;
putchar('\n');
return;
}
-
+
if ((fd = open(inname, O_RDONLY)) < 0) {
/* We can't open it, but we were able to stat it. */
if (sb.st_mode & 0002) ckfputs("writeable, ", stdout);
@@ -232,12 +259,59 @@ int wid;
/*NOTREACHED*/
}
- if (nbytes == 0)
+ if (nbytes == 0)
ckfputs("empty", stdout);
else {
buf[nbytes++] = '\0'; /* null-terminate it */
- tryit(buf, nbytes, zflag);
+ match = tryit(buf, nbytes, zflag);
+ }
+#ifdef __ELF__
+ /*
+ * ELF executables have multiple section headers in arbitrary
+ * file locations and thus file(1) cannot determine it from easily.
+ * Instead we traverse thru all section headers until a symbol table
+ * one is found or else the binary is stripped.
+ * XXX: This will not work for binaries of a different byteorder.
+ * Should come up with a better fix.
+ */
+
+ if (match == 's' && nbytes > sizeof (Elf32_Ehdr) &&
+ buf[EI_MAG0] == ELFMAG0 &&
+ buf[EI_MAG1] == ELFMAG1 &&
+ buf[EI_MAG2] == ELFMAG2 &&
+ buf[EI_MAG3] == ELFMAG3) {
+
+ union {
+ long l;
+ char c[sizeof (long)];
+ } u;
+ Elf32_Ehdr elfhdr;
+ int stripped = 1;
+
+ u.l = 1;
+ (void) memcpy(&elfhdr, buf, sizeof elfhdr);
+
+ /*
+ * If the system byteorder does not equal the object byteorder
+ * then don't test.
+ */
+ if ((u.c[sizeof(long) - 1] + 1) == elfhdr.e_ident[5]) {
+ if (lseek(fd, elfhdr.e_shoff, SEEK_SET)<0)
+ error("lseek failed (%s).\n", strerror(errno));
+
+ for ( ; elfhdr.e_shnum ; elfhdr.e_shnum--) {
+ if (read(fd, buf, elfhdr.e_shentsize)<0)
+ error("read failed (%s).\n", strerror(errno));
+ if (((Elf32_Shdr *)&buf)->sh_type == SHT_SYMTAB) {
+ stripped = 0;
+ break;
+ }
+ }
+ if (stripped)
+ (void) printf (", stripped");
+ }
}
+#endif
if (inname != stdname) {
/*
@@ -252,25 +326,24 @@ int wid;
}
-void
+int
tryit(buf, nb, zflag)
unsigned char *buf;
int nb, zflag;
{
- /*
- * Try compression stuff
- */
- if (!zflag || zmagic(buf, nb) != 1)
- /*
- * try tests in /etc/magic (or surrogate magic file)
- */
- if (softmagic(buf, nb) != 1)
- /*
- * try known keywords, check for ascii-ness too.
- */
- if (ascmagic(buf, nb) != 1)
- /*
- * abandon hope, all ye who remain here
- */
- ckfputs("data", stdout);
+ /* try compression stuff */
+ if (zflag && zmagic(buf, nb))
+ return 'z';
+
+ /* try tests in /etc/magic (or surrogate magic file) */
+ if (softmagic(buf, nb))
+ return 's';
+
+ /* try known keywords, check whether it is ASCII */
+ if (ascmagic(buf, nb))
+ return 'a';
+
+ /* abandon hope, all ye who remain here */
+ ckfputs("data", stdout);
+ return '\0';
}
diff --git a/usr.bin/file/file.h b/usr.bin/file/file.h
index 12d5c6f9571b..c0bbf0e00b81 100644
--- a/usr.bin/file/file.h
+++ b/usr.bin/file/file.h
@@ -1,6 +1,6 @@
/*
* file.h - definitions for file(1) program
- * @(#)$Id: file.h,v 1.19 1994/05/03 17:58:23 christos Exp $
+ * @(#)$Id: file.h,v 1.22 1995/05/20 22:09:21 christos Exp $
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
@@ -26,7 +26,9 @@
* 4. This notice may not be removed or altered.
*/
-#define HOWMANY 8192 /* how much of the file to look at */
+#ifndef HOWMANY
+# define HOWMANY 8192 /* how much of the file to look at */
+#endif
#define MAXMAGIS 1000 /* max entries in /etc/magic */
#define MAXDESC 50 /* max leng of text description */
#define MAXstring 32 /* max leng of "string" types */
@@ -92,7 +94,7 @@ extern void mdump __P((struct magic *));
extern void process __P((const char *, int));
extern void showstr __P((FILE *, const char *, int));
extern int softmagic __P((unsigned char *, int));
-extern void tryit __P((unsigned char *, int, int));
+extern int tryit __P((unsigned char *, int, int));
extern int zmagic __P((unsigned char *, int));
extern void ckfprintf __P((FILE *, const char *, ...));
extern unsigned long signextend __P((struct magic *, unsigned long));
@@ -121,6 +123,7 @@ extern int sys_nerr;
extern char *sys_errlist[];
#define strerror(e) \
(((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
+#define strtoul(a, b, c) strtol(a, b, c)
#endif
#ifndef MAXPATHLEN
diff --git a/usr.bin/file/fsmagic.c b/usr.bin/file/fsmagic.c
index 684e118df5d7..5e00c4f1146f 100644
--- a/usr.bin/file/fsmagic.c
+++ b/usr.bin/file/fsmagic.c
@@ -46,7 +46,7 @@
#ifndef lint
static char *moduleid =
- "@(#)$Id: fsmagic.c,v 1.22 1993/02/19 12:09:04 ian Exp $";
+ "@(#)$Id: fsmagic.c,v 1.23 1995/01/21 21:03:35 christos Exp $";
#endif /* lint */
int
@@ -151,10 +151,12 @@ struct stat *sb;
return 1;
#endif
#ifdef S_IFSOCK
+#ifndef __COHERENT__
case S_IFSOCK:
ckfputs("socket", stdout);
return 1;
#endif
+#endif
case S_IFREG:
break;
default:
diff --git a/usr.bin/file/magic.5 b/usr.bin/file/magic.5
index 7c2788e9b434..2ae8e69996a4 100644
--- a/usr.bin/file/magic.5
+++ b/usr.bin/file/magic.5
@@ -1,10 +1,10 @@
-.TH MAGIC __SECTION__ "Public Domain"
+.TH MAGIC __FSECTION__ "Public Domain"
.\" install as magic.4 on USG, magic.5 on V7 or Berkeley systems.
.SH NAME
magic \- file command's magic number file
.SH DESCRIPTION
The
-.IR file (1)
+.IR file (__CSECTION__)
command identifies the type of a file using,
among other tests,
a test for whether the file begins with a certain
@@ -79,10 +79,13 @@ value,
.BR & ,
to specify that the value from the file must have set all of the bits
that are set in the specified value,
-or
.BR ^ ,
to specify that the value from the file must have clear any of the bits
-that are set in the specified value.
+that are set in the specified value, or
+.BR x ,
+to specify that any value will match. If the character is omitted,
+it is assumed to be
+.BR = .
.IP
Numeric values are specified in C form; e.g.
.B 13
@@ -91,9 +94,6 @@ is decimal,
is octal, and
.B 0x13
is hexadecimal.
-to specify that any value will match. If the character
-is omitted, it is assumed to be
-.BR = .
.IP
For string values, the byte string from the
file must match the specified byte string.
@@ -143,7 +143,7 @@ If the first character following the last
is a
.B (
then the string after the parenthesis is interpreted as an indirect offset.
-That means that the number after the parenthesis is used as a offset in
+That means that the number after the parenthesis is used as an offset in
the file. The value at that offset is read, and is used again as an offset
in the file. Indirect offsets are of the form:
.BI (( x [.[bsl]][+-][ y ]).
@@ -168,7 +168,7 @@ The formats
.IR bedate ,
and
.I ledate
-are system-dependant; perhaps they should be specified as a number
+are system-dependent; perhaps they should be specified as a number
of bytes (2B, 4B, etc),
since the files being recognized typically come from
a system on which the lengths are invariant.
@@ -176,7 +176,7 @@ a system on which the lengths are invariant.
There is (currently) no support for specified-endian data to be used in
indirect offsets.
.SH SEE ALSO
-.IR file (1)
+.IR file (__CSECTION__)
\- the command that reads this file.
.\"
.\" From: guy@sun.uucp (Guy Harris)
@@ -191,4 +191,4 @@ indirect offsets.
.\" the changes I posted to the S5R2 version.
.\"
.\" Modified for Ian Darwin's version of the file command.
-.\" @(#)$Id: magic.man,v 1.11 1994/05/03 17:58:23 christos Exp $
+.\" @(#)$Id: magic.man,v 1.12 1995/01/21 21:03:35 christos Exp $
diff --git a/usr.bin/file/names.h b/usr.bin/file/names.h
index 5d989ee564ae..86633dd0d075 100644
--- a/usr.bin/file/names.h
+++ b/usr.bin/file/names.h
@@ -10,7 +10,7 @@
*
* See LEGAL.NOTICE
*
- * $Id: names.h,v 1.11 1993/09/16 21:14:20 christos Exp $
+ * $Id: names.h,v 1.12 1995/04/28 17:29:13 christos Exp $
*/
/* these types are used to index the table 'types': keep em in sync! */
@@ -25,13 +25,13 @@
#define L_NEWS 8 /* Usenet Netnews */
static char *types[] = {
- "c program text",
- "fortran program text",
+ "C program text",
+ "FORTRAN program text",
"make commands text" ,
- "pl/1 program text",
+ "PL/1 program text",
"assembler program text",
"English text",
- "pascal program text",
+ "Pascal program text",
"mail text",
"news text",
"can't happen error on names.h/types",
@@ -43,7 +43,7 @@ static struct names {
} names[] = {
/* These must be sorted by eye for optimal hit rate */
/* Add to this list only after substantial meditation */
- {"/*", L_C}, /* must preced "The", "the", etc. */
+ {"/*", L_C}, /* must precede "The", "the", etc. */
{"#include", L_C},
{"char", L_C},
{"The", L_ENG},
@@ -75,6 +75,7 @@ static struct names {
{".byte", L_MACH},
{".even", L_MACH},
{".globl", L_MACH},
+ {".text", L_MACH},
{"clr", L_MACH},
{"(input,", L_PAS},
{"dcl", L_PLI},
diff --git a/usr.bin/file/patchlevel.h b/usr.bin/file/patchlevel.h
index 25f01c8b6996..2da80f9f204e 100644
--- a/usr.bin/file/patchlevel.h
+++ b/usr.bin/file/patchlevel.h
@@ -1,11 +1,43 @@
#define FILE_VERSION_MAJOR 3
-#define patchlevel 14
+#define patchlevel 19
/*
* Patchlevel file for Ian Darwin's MAGIC command.
- * $Id: patchlevel.h,v 1.14 1994/05/03 17:58:23 christos Exp $
+ * $Id: patchlevel.h,v 1.19 1995/10/27 23:14:46 christos Exp $
*
* $Log: patchlevel.h,v $
+ * Revision 1.19 1995/10/27 23:14:46 christos
+ * Ability to parse colon separated list of magic files
+ * New LEGAL.NOTICE
+ * Various magic file changes
+ *
+ * Revision 1.18 1995/05/20 22:09:21 christos
+ * Passed incorrect argument to eatsize().
+ * Use %ld and %lx where appropriate.
+ * Remove unused variables
+ * ELF support for both big and little endian
+ * Fixes for small files again.
+ *
+ * Revision 1.17 1995/04/28 17:29:13 christos
+ * - Incorrect nroff detection fix from der Mouse
+ * - Lost and incorrect magic entries.
+ * - Added ELF stripped binary detection [in C; ugh]
+ * - Look for $MAGIC to find the magic file.
+ * - Eat trailing size specifications from numbers i.e. ignore 10L
+ * - More fixes for very short files
+ *
+ * Revision 1.16 1995/03/25 22:06:45 christos
+ * - use strtoul() where it exists.
+ * - fix sign-extend bug
+ * - try to detect tar archives before nroff files, otherwise
+ * tar files where the first file starts with a . will not work
+ *
+ * Revision 1.15 1995/01/21 21:03:35 christos
+ * Added CSECTION for the file man page
+ * Added version flag -v
+ * Fixed bug with -f input flag (from iorio@violet.berkeley.edu)
+ * Lots of magic fixes and reorganization...
+ *
* Revision 1.14 1994/05/03 17:58:23 christos
* changes from mycroft@gnu.ai.mit.edu (Charles Hannum) for unsigned
*
diff --git a/usr.bin/file/print.c b/usr.bin/file/print.c
index a91f4297e615..17e1136a0559 100644
--- a/usr.bin/file/print.c
+++ b/usr.bin/file/print.c
@@ -40,7 +40,7 @@
#ifndef lint
static char *moduleid =
- "@(#)$Id: print.c,v 1.21 1994/05/03 17:58:23 christos Exp $";
+ "@(#)$Id: print.c,v 1.22 1995/05/20 22:09:21 christos Exp $";
#endif /* lint */
#define SZOF(a) (sizeof(a) / sizeof(a[0]))
@@ -58,7 +58,7 @@ struct magic *m;
m->offset);
if (m->flag & INDIR)
- (void) fprintf(stderr, "(%s,%d),",
+ (void) fprintf(stderr, "(%s,%ld),",
(m->in.type >= 0 && m->in.type < SZOF(typ)) ?
typ[(unsigned char) m->in.type] :
"*bad*",
@@ -69,7 +69,7 @@ struct magic *m;
typ[(unsigned char) m->type] :
"*bad*");
if (m->mask != ~0L)
- (void) fprintf(stderr, " & %.8x", m->mask);
+ (void) fprintf(stderr, " & %.8lx", m->mask);
(void) fprintf(stderr, ",%c", m->reln);
@@ -82,7 +82,7 @@ struct magic *m;
case LELONG:
case BESHORT:
case BELONG:
- (void) fprintf(stderr, "%d", m->value.l);
+ (void) fprintf(stderr, "%ld", m->value.l);
break;
case STRING:
showstr(stderr, m->value.s, -1);
diff --git a/usr.bin/file/softmagic.c b/usr.bin/file/softmagic.c
index 1784096653de..76fd6d811541 100644
--- a/usr.bin/file/softmagic.c
+++ b/usr.bin/file/softmagic.c
@@ -34,7 +34,7 @@
#ifndef lint
static char *moduleid =
- "@(#)$Id: softmagic.c,v 1.26 1994/06/06 05:27:29 christos Exp $";
+ "@(#)$Id: softmagic.c,v 1.30 1995/05/20 22:09:21 christos Exp $";
#endif /* lint */
static int match __P((unsigned char *, int));
@@ -179,18 +179,24 @@ struct magic *m;
switch (m->type) {
case BYTE:
v = p->b;
+ v = signextend(m, v) & m->mask;
+ (void) printf(m->desc, (unsigned char) v);
break;
case SHORT:
case BESHORT:
case LESHORT:
v = p->h;
+ v = signextend(m, v) & m->mask;
+ (void) printf(m->desc, (unsigned short) v);
break;
case LONG:
case BELONG:
case LELONG:
v = p->l;
+ v = signextend(m, v) & m->mask;
+ (void) printf(m->desc, (unsigned long) v);
break;
case STRING:
@@ -214,9 +220,6 @@ struct magic *m;
error("invalid m->type (%d) in mprint().\n", m->type);
/*NOTREACHED*/
}
-
- v = signextend(m, v) & m->mask;
- (void) printf(m->desc, (unsigned char) v);
}
/*
@@ -270,7 +273,7 @@ long offset;
char *str;
int len;
{
- (void) fprintf(stderr, "mget @%d: ", offset);
+ (void) fprintf(stderr, "mget @%ld: ", offset);
showstr(stderr, (char *) str, len);
(void) fputc('\n', stderr);
(void) fputc('\n', stderr);
@@ -284,11 +287,20 @@ struct magic *m;
int nbytes;
{
long offset = m->offset;
- if (offset + sizeof(union VALUETYPE) > nbytes)
- return 0;
+ if (offset + sizeof(union VALUETYPE) <= nbytes)
+ memcpy(p, s + offset, sizeof(union VALUETYPE));
+ else {
+ /*
+ * the usefulness of padding with zeroes eludes me, it
+ * might even cause problems
+ */
+ long have = nbytes - offset;
+ memset(p, 0, sizeof(union VALUETYPE));
+ if (have > 0)
+ memcpy(p, s + offset, have);
+ }
- memcpy(p, s + offset, sizeof(union VALUETYPE));
if (debug) {
mdebug(offset, (char *) p, sizeof(union VALUETYPE));