This commit was generated by cvs2svn to compensate for changes in r2479,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
Geoff Rehmet 1994-09-03 19:16:28 +00:00
commit 87e1d90a3d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=2480
102 changed files with 5269 additions and 72 deletions

37
usr.bin/file/LEGAL.NOTICE Normal file
View file

@ -0,0 +1,37 @@
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 $
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 is not subject to any export provision of the United States
Department of Commerce, and may be exported to any country or planet.
Permission is granted to anyone to use this software for any purpose on
any computer system, and to alter it and redistribute it freely, subject
to the following restrictions:
1. The author is not responsible for the consequences of use of this
software, no matter how awful, even if they arise from flaws in it.
2. The origin of this software must not be misrepresented, either by
explicit claim or by omission. Since few users ever read sources,
credits must appear in the documentation.
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.
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.

33
usr.bin/file/MAINT Normal file
View file

@ -0,0 +1,33 @@
$Id: MAINT,v 1.2 1993/09/23 21:47:01 christos Exp $
Maintenance notes:
I am continuing to maintain the file command. I welcome your help,
but to make my life easier I'd like to request the following:
- Don't change the version numbers!
If your changes are extensive, I will have to work hard to
integrate them into my version. If you check it into SCCS locally,
the version numbers will likely be kept. IF you check it into RCS
or CVS locally, please use -k to keep the version numbers, and
please use branch deltas (1.21.1, 1.21.2, ...). If you don't do
this, I will likely be unable to use your changes; life's just too
short.
- Do not distribute changed versions.
People trying to be helpful occasionally put up their hacked versions
of the file command for FTP, then the "archie" server finds and publishes
the hacked version, and people all over the world get copies of it.
Within a day or two I am getting email from around the world
asking me why "my" file command won't compile!!! Needless to say this
detracts from the limited time I have available to work on the actual
software. Therefore I ask you again to please NOT distribute
your changed version.
Thank you for your assistance and cooperation.
Mark Moraes Christos Zoulas
moraes@deshaw.com christos@deshaw.com

View file

@ -0,0 +1,5 @@
#! file
# Magic data for file(1) command.
# Machine-genererated from src/cmd/file/magdir/*; edit there only!
# Format is described in magic(files), where:
# files is 4 on V7 and BSD, 4 on SV, and ?? in the SVID.

View file

@ -0,0 +1,3 @@
# $Id: Localstuff,v 1.2 1993/01/05 13:22:25 ian Exp $
# Add any locally-observed files here. Remember:
# text if readable, executable if runnable binary, data if unreadable.

View file

@ -0,0 +1,15 @@
#
# 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".
# If it's the i860-based one, they should probably become either the
# big-endian or little-endian versions, depending on the mode they ran
# the 860 in....
#
0 short 0420 0420 Alliant virtual executable
>2 short &0x0020 common library
>16 long >0 not stripped
0 short 0421 0421 Alliant compact executable
>2 short &0x0020 common library
>16 long >0 not stripped

4
usr.bin/file/Magdir/apl Normal file
View file

@ -0,0 +1,4 @@
#
# magic.apl:
#
0 long 0100554 APL workspace (Ken's original?)

10
usr.bin/file/Magdir/apple Normal file
View file

@ -0,0 +1,10 @@
#
# Apple II file formats
#
0 string FiLeStArTfIlEsTaRt binscii (apple ][) text
0 string \x0aGL Binary II (apple ][) data
0 string \x76\xff Squeezed (apple ][) data
0 string SIT! StuffIt (macintosh) text
0 string NuFile NuFile archive (apple ][) data
0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data

104
usr.bin/file/Magdir/ar Normal file
View file

@ -0,0 +1,104 @@
#
# "ar", for all kinds of archives.
#
# 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 long 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
0 byte 26 'arc' archive
>1 byte 0 (empty)
>1 byte 1 (old format)
# Rahul Dhesi's zoo archive format, from keith@cerberus.uchicago.edu.
20 long 0xdca7c4fd Rahul Dhesi's "zoo" archive
# ZIP archiver
0 string PK zip archive file
>4 byte x - version
>4 byte 10 1.0
>4 byte 20 2.0
2 string -lh LHarc archive data
>6 byte x type %c
>20 byte x - header level %d
# From: <u31b3hs@pool.informatik.rwth-aachen.de> (Michael Haardt)
2 string -lh0- Lharc 1.x archive
2 string -lh1- Lharc 1.x archive
2 string -lz4- Lharc 1.x archive
2 string -lz5- Lharc 1.x archive
2 string -lzs- LHa 2.x? archive [lzs]
2 string -lh - LHa 2.x? archive [lh ]
2 string -lhd- LHa 2.x? archive [lhd]
2 string -lh2- LHa 2.x? archive [lh2]
2 string -lh3- LHa 2.x? archive [lh3]
2 string -lh4- LHa 2.x? archive [lh4]
2 string -lh5- LHa (2.x) archive
# ARJ archive data from jason@jarthur.Claremont.EDU
0 leshort 0xea60 ARJ archive data
>5 byte x - version %d,
>8 byte >0 flags:
>>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]

3
usr.bin/file/Magdir/arc Normal file
View file

@ -0,0 +1,3 @@
0 byte 26 'arc' archive
>1 byte 0 (empty)
>1 byte 1 (old format)

View file

@ -0,0 +1,15 @@
# A collection of various "ar" and "cpio" archive formats.
# "Tar" archives are handled in the C code.
0 short 070707 cpio archive
0 string 070707 ASCII cpio archive
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
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

38
usr.bin/file/Magdir/att3b Normal file
View file

@ -0,0 +1,38 @@
#
# AT&T 3B machines
#
# The `versions' should be un-commented if they work for you.
# (Was the problem just one of endianness?)
#
# 3B20
#
0 beshort 0550 3b20 COFF executable
>12 belong >0 not stripped
#>22 beshort >0 - version %ld
0 beshort 0551 3b20 COFF executable (TV)
>12 belong >0 not stripped
#>22 beshort >0 - version %ld
#
# WE32K
#
0 beshort 0560 WE32000 COFF
>18 beshort ^00000020 object
>18 beshort &00000020 executable
>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
>20 beshort 0407 (impure)
>20 beshort 0410 (pure)
>20 beshort 0413 (demand paged)
>20 beshort 0443 (target shared library)
>22 beshort >0 - version %ld
0 beshort 0561 WE32000 COFF executable (TV)
>12 belong >0 not stripped
#>18 beshort &00020000 - 32100 required
#>18 beshort &00040000 and mau hardware required
#>22 beshort >0 - version %ld
#
# core file for 3b2
0 string \000\004\036\212\200 3b2 core file
>364 string >\0 of '%s'

43
usr.bin/file/Magdir/audio Normal file
View file

@ -0,0 +1,43 @@
#
# Sound formats, from Jan Nicolai Langfeldt <janl@ifi.uio.no>,
#
# Sun/NeXT audio data
0 string .snd audio data:
>12 belong 1 8-bit u-law,
>12 belong 2 8-bit linear 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),
>20 belong 1 mono,
>20 belong 2 stereo,
>20 belong 4 quad,
>16 belong x %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 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),
>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
usr.bin/file/Magdir/blit Normal file
View file

@ -0,0 +1,16 @@
# 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
# little-endian machines as well? If so, what's the deal with
# "VAX-order" and "VAX-order2"?
#
#0 long 0407 68K Blit (standalone) executable
#0 short 0407 VAX-order2 68K Blit (standalone) executable
0 short 03401 VAX-order 68K Blit (standalone) executable
0 long 0406 68k Blit mpx/mux executable
0 short 0406 VAX-order2 68k Blit mpx/mux executable
0 short 03001 VAX-order 68k Blit mpx/mux executable
# Need more values for WE32 DMD executables.
# Note that 0520 is the same as COFF
#0 short 0520 tty630 layers executable

2
usr.bin/file/Magdir/bsdi Normal file
View file

@ -0,0 +1,2 @@
# BSDI BSD/386
0 long 0314 BSD/386 demand paged (first page unmapped) pure executable

View file

@ -0,0 +1,3 @@
# 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

4
usr.bin/file/Magdir/chi Normal file
View file

@ -0,0 +1,4 @@
# ChiWriter files
0 string \\1cw\ ChiWriter file
>5 string >\0 version %s
0 string \\1cw ChiWriter file

View file

@ -0,0 +1,63 @@
#
# Intergraph, formerly Fairchild, Clipper.
#
# XXX - what byte order does the Clipper use?
#
# XXX - what's the "!" stuff:
#
# >18 short !074000,000000 C1 R1
# >18 short !074000,004000 C2 R1
# >18 short !074000,010000 C3 R1
# >18 short !074000,074000 TEST
#
# I shall assume it's ANDing the field with the first value and
# comparing it with the second, and rewrite it as:
#
# >18 short&074000 000000 C1 R1
# >18 short&074000 004000 C2 R1
# >18 short&074000 010000 C3 R1
# >18 short&074000 074000 TEST
#
# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
# sort, nor does SunOS 4.x, so either it's something Intergraph added
# in CLIX, or something AT&T added in SVR3.2 or later, or something
# somebody else thought was a good idea; it's not documented in the
# man page for this version of "magic", nor does it appear to be
# implemented (at least not after I blew off the bogus code to turn
# old-style "&"s into new-style "&"s, which just didn't work at all).
#
0 short 0575 CLIPPER COFF executable (VAX #)
>20 short 0407 (impure)
>20 short 0410 (5.2 compatible)
>20 short 0411 (pure)
>20 short 0413 (demand paged)
>20 short 0443 (target shared library)
>12 long >0 not stripped
>22 short >0 - version %ld
0 short 0577 CLIPPER COFF executable
>18 short&074000 000000 C1 R1
>18 short&074000 004000 C2 R1
>18 short&074000 010000 C3 R1
>18 short&074000 074000 TEST
>20 short 0407 (impure)
>20 short 0410 (pure)
>20 short 0411 (separate I&D)
>20 short 0413 (paged)
>20 short 0443 (target shared library)
>12 long >0 not stripped
>22 short >0 - version %ld
>48 long&01 01 alignment trap enabled
>52 byte 1 -Ctnc
>52 byte 2 -Ctsw
>52 byte 3 -Ctpw
>52 byte 4 -Ctcb
>53 byte 1 -Cdnc
>53 byte 2 -Cdsw
>53 byte 3 -Cdpw
>53 byte 4 -Cdcb
>54 byte 1 -Csnc
>54 byte 2 -Cssw
>54 byte 3 -Cspw
>54 byte 4 -Cscb
4 string pipe CLIPPER instruction trace
4 string prof CLIPPER instruction profile

View file

@ -0,0 +1,40 @@
#
# "Commands": stuff 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
# 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 #!\ / 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

View file

@ -0,0 +1,40 @@
#
# 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
#
# This magic number is byte-order-independent.
#
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
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
# I didn't have a crunched file handy, so the crunch number is untested.
# 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)
#
# Standard unix compress
#
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

View file

@ -0,0 +1,4 @@
#
# XXX - what byte order does a Convex use?
#
0 long 0513 Convex executable

16
usr.bin/file/Magdir/cpio Normal file
View file

@ -0,0 +1,16 @@
#
# Yes, the 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 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)

View file

@ -0,0 +1,8 @@
#
# ... diamond is a multi-media mail and electronic conferencing system....
#
# XXX - I think it was either renamed Slate, or replaced by Slate....
#
# The full deal is too long...
#0 string <list>\n<protocol\ bbn-multimedia-format> Diamond Multimedia Document
0 string =<list>\n<protocol\ bbn-m Diamond Multimedia Document

6
usr.bin/file/Magdir/diff Normal file
View file

@ -0,0 +1,6 @@
#
# 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
0 string Common\ subdirectories:\ 'diff' output text

View file

@ -0,0 +1,4 @@
# Magic numbers for ditroff intermediate language
0 string x\ T\ cat titroff output for the C/A/T text
0 string x\ T\ ps titroff output for PostScript
0 string x\ T titroff output text

80
usr.bin/file/Magdir/dump Normal file
View file

@ -0,0 +1,80 @@
#
# magic.dump, dump file format. For new and old dump filesystems
#
# We specify both byte orders in order to recognize byte-swapped dumps.
#
24 belong 60012 new-fs dump file (big endian),
>4 bedate x Previous dump %s,
>8 bedate x This dump %s,
>12 belong >0 Volume %ld,
>692 belong 0 Level zero, type:
>692 belong >0 Level %d, type:
>0 belong 1 tape header,
>0 belong 2 beginning of file record,
>0 belong 3 map of inodes on tape,
>0 belong 4 continuation of file record,
>0 belong 5 end of volume,
>0 belong 6 map of inodes deleted,
>0 belong 7 end of medium (for floppy),
>676 string >\0 Label %s,
>696 string >\0 Filesystem %s,
>760 string >\0 Device %s,
>824 string >\0 Host %s,
>888 belong >0 Flags %x
24 belong 60011 old-fs dump file (big endian),
#>4 bedate x Previous dump %s,
#>8 bedate x This dump %s,
>12 belong >0 Volume %ld,
>692 belong 0 Level zero, type:
>692 belong >0 Level %d, type:
>0 belong 1 tape header,
>0 belong 2 beginning of file record,
>0 belong 3 map of inodes on tape,
>0 belong 4 continuation of file record,
>0 belong 5 end of volume,
>0 belong 6 map of inodes deleted,
>0 belong 7 end of medium (for floppy),
>676 string >\0 Label %s,
>696 string >\0 Filesystem %s,
>760 string >\0 Device %s,
>824 string >\0 Host %s,
>888 belong >0 Flags %x
24 lelong 60012 new-fs dump file (little endian),
>4 ledate x Previous dump %s,
>8 ledate x This dump %s,
>12 lelong >0 Volume %ld,
>692 lelong 0 Level zero, type:
>692 lelong >0 Level %d, type:
>0 lelong 1 tape header,
>0 lelong 2 beginning of file record,
>0 lelong 3 map of inodes on tape,
>0 lelong 4 continuation of file record,
>0 lelong 5 end of volume,
>0 lelong 6 map of inodes deleted,
>0 lelong 7 end of medium (for floppy),
>676 string >\0 Label %s,
>696 string >\0 Filesystem %s,
>760 string >\0 Device %s,
>824 string >\0 Host %s,
>888 lelong >0 Flags %x
24 lelong 60011 old-fs dump file (little endian),
#>4 ledate x Previous dump %s,
#>8 ledate x This dump %s,
>12 lelong >0 Volume %ld,
>692 lelong 0 Level zero, type:
>692 lelong >0 Level %d, type:
>0 lelong 1 tape header,
>0 lelong 2 beginning of file record,
>0 lelong 3 map of inodes on tape,
>0 lelong 4 continuation of file record,
>0 lelong 5 end of volume,
>0 lelong 6 map of inodes deleted,
>0 lelong 7 end of medium (for floppy),
>676 string >\0 Label %s,
>696 string >\0 Filesystem %s,
>760 string >\0 Device %s,
>824 string >\0 Host %s,
>888 lelong >0 Flags %x

44
usr.bin/file/Magdir/elf Normal file
View file

@ -0,0 +1,44 @@
#
# ELF
# Missing MIPS image type and flags
#
# 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.
#
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
>>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
>>36 belong 1 MathCoPro/FPU/MAU Required

View file

@ -0,0 +1,20 @@
#
# magic.encore: Recognize 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).
#
0 short 0x154 Encore
>20 short 0x107 executable
>20 short 0x108 pure executable
>20 short 0x10b demand-paged executable
>20 short 0x10f unsupported executable
>12 long >0 not stripped
>22 short >0 - version %ld
>22 short 0 -
#>4 date x stamp %s
0 short 0x155 Encore unsupported executable
>12 long >0 not stripped
>22 short >0 - version %ld
>22 short 0 -
#>4 date x stamp %s

View file

@ -0,0 +1 @@
0 string \366\366\366\366 Formatted floppy w/ no filesystem data

View file

@ -0,0 +1,3 @@
0 string FONT ASCII vfont text
0 short 0436 Berkeley vfont data
0 short 017001 byte-swapped Berkeley vfont data

28
usr.bin/file/Magdir/frame Normal file
View file

@ -0,0 +1,28 @@
#
# 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 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
>9 string 3.0 (3.0)
>9 string 2.0 (2.0)
>9 string 1.0 (1.x)
0 string \<MakerDictionary FraneMaker 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
>17 string 1.01 (%s)
0 string \<MML FrameMaker MML file
0 string \<Book 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

21
usr.bin/file/Magdir/gzip Normal file
View file

@ -0,0 +1,21 @@
0 string \037\213 gzip compressed data
>2 byte <8 - reserved method
>2 byte 8 - deflate method
>3 byte &0x01 , ascii
>3 byte &0x02 , continuation
>3 byte &0x04 , extra field
>3 byte &0x08 , original file name
>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

191
usr.bin/file/Magdir/hp Normal file
View file

@ -0,0 +1,191 @@
#
# magic.hp: Hewlett Packard Magic
#
# XXX - somebody should figure out whether any byte order needs to be
# applied to the "TML" stuff; I'm assuming the Apollo stuff is
# big-endian as it was mostly 68K-based.
#
# HP-PA is big-endian, so it (and "800", which is *also* HP-PA-based; I
# assume "HPPA-RISC1.1" really means "HP-PA Version 1.1", which first
# showed up in the 700 series, although later 800 series machines are,
# I think, based on the PA7100 which implements HP-PA 1.1) are flagged
# as big-endian.
#
# I think the 500 series was the old stack-based machines, running a
# 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.
#
# 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
>22 beshort >0 - version %ld
0 beshort 0624 apollo a88k COFF executable
>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
0 long 01003405017 TML 2301 byte-order format
0 long 01602007412 TML 3210 byte-order format
#### HPPA
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
0 belong 0x02100108 HPPA-RISC1.1 shared executable
>(144) belong 0x054ef630 dynamically linked
>96 belong >0 -not stripped
0 belong 0x0210010b HPPA-RISC1.1 demand-load executable
>(144) belong 0x054ef630 dynamically linked
>96 belong >0 -not stripped
0 belong 0x0210010e HPPA-RISC1.1 shared library
>96 belong >0 -not stripped
0 belong 0x0210010d HPPA-RISC1.1 dynamic load library
>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
0 belong 0x020b0108 HP s800 shared executable
>(144) belong 0x054ef630 dynamically linked
>96 belong >0 -not stripped
0 belong 0x020b010b HP s800 demand-load executable
>(144) belong 0x054ef630 dynamically linked
>96 belong >0 -not stripped
0 belong 0x020b010e HP s800 shared library
>96 belong >0 -not stripped
0 belong 0x020b010d HP s800 dynamic load library
>96 belong >0 -not stripped
0 belong 0x213c6172 archive file
>68 belong 0x020b0619 -HP s800 relocatable library
#### 500
0 long 0x02080106 HP s500 relocatable executable
>16 long >0 -version %ld
0 long 0x02080107 HP s500 executable
>16 long >0 -version %ld
0 long 0x02080108 HP s500 pure executable
>16 long >0 -version %ld
#### 200
0 belong 0x020c0108 HP s200 pure executable
>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
>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
>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
>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
>36 belong >0 not stripped
0 belong 0x020a0107 HP s200 (2.x release) executable
>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
>36 belong >0 not stripped
0 belong 0x020c010d HP s200 dynamic load library
>4 beshort >0 -version %ld
>6 beshort >0 -highwater %d
>36 belong >0 not stripped
#### MISC
0 long 0x0000ff65 HP old archive
0 long 0x020aff65 HP s200 old archive
0 long 0x020cff65 HP s200 old archive
0 long 0x0208ff65 HP s500 old archive
0 long 0x015821a6 HP core file
0 long 0x4da7eee8 HP-WINDOWS font
>8 byte >0 -version %ld
0 string Bitmapfile HP Bitmapfile
0 string IMGfile CIS compimg HP Bitmapfile
0 short 0x8000 lif file
0 long 0x020c010c compiled Lisp
0 string msgcat01 HP NLS message catalog,
>8 long >0 %d messages
# addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92
0 string HPHP48- HP48 binary
>7 byte >0 - Rev %c
>8 short 0x1129 (ADR)
>8 short 0x3329 (REAL)
>8 short 0x5529 (LREAL)
>8 short 0x7729 (COMPLX)
>8 short 0x9d29 (LCOMPLX)
>8 short 0xbf29 (CHAR)
>8 short 0xe829 (ARRAY)
>8 short 0x0a2a (LNKARRAY)
>8 short 0x2c2a (STRING)
>8 short 0x4e2a (HXS)
>8 short 0x742a (LIST)
>8 short 0x962a (DIR)
>8 short 0xb82a (ALG)
>8 short 0xda2a (UNIT)
>8 short 0xfc2a (TAGGED)
>8 short 0x1e2b (GROB)
>8 short 0x402b (LIB)
>8 short 0x622b (BACKUP)
>8 short 0x882b (LIBDATA)
>8 short 0x9d2d (PROG)
>8 short 0xcc2d (CODE)
>8 short 0x482e (GNAME)
>8 short 0x6d2e (LNAME)
>8 short 0x922e (XLIB)
0 string %%HP: HP48 text
>6 string T(0) - T(0)
>6 string T(1) - T(1)
>6 string T(2) - T(2)
>6 string T(3) - T(3)
>10 string A(D) A(D)
>10 string A(R) A(R)
>10 string A(G) A(G)
>14 string F(.) F(.);
>14 string F(,) F(,);

View file

@ -0,0 +1,19 @@
#
# IBM 370 and compatibles.
#
# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
# What the heck *is* "USS/370"?
#
0 beshort 0531 SVR2 executable (Amdahl-UTS)
>12 belong >0 not stripped
>24 belong >0 - version %ld
0 beshort 0534 SVR2 pure executable (Amdahl-UTS)
>12 belong >0 not stripped
>24 belong >0 - version %ld
0 beshort 0530 SVR2 pure executable (USS/370)
>12 belong >0 not stripped
>24 belong >0 - version %ld
0 beshort 0535 SVR2 executable (USS/370)
>12 belong >0 not stripped
>24 belong >0 - version %ld

View file

@ -0,0 +1,17 @@
#
# magic.rs6000:
#
# RS/6000 and the RT PC.
#
0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
>12 belong >0 not stripped
# Breaks sun4 statically linked execs.
#0 beshort 0x0103 executable (RT Version 2) or obj module
#>2 byte 0x50 pure
#>28 belong >0 not stripped
#>6 beshort >0 - version %ld
0 beshort 0x0104 shared library
0 beshort 0x0105 ctab data
0 beshort 0xfe04 structured file
0 string 0xabcdef message catalog
#0 string <aiaff> archive

5
usr.bin/file/Magdir/iff Normal file
View file

@ -0,0 +1,5 @@
# 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

View file

@ -0,0 +1,14 @@
# Tell file about magic for 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.
#
# Now magic for IMAGEN font files...
0 string Rast RST-format raster font data
>45 string >0 face %

View file

@ -0,0 +1,69 @@
# image formats, 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?
#
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)
0 string IIN1 NIFF raster data
# GIF
0 string GIF GIF picture
>3 string 87a - version %s
>3 string 89a - version %s
>6 leshort >0 %hd x
>8 leshort >0 %hd,
>10 byte &0x40 interlaced,
>10 byte&0x07 =0x00 2 colors
>10 byte&0x07 =0x01 4 colors
>10 byte&0x07 =0x02 8 colors
>10 byte&0x07 =0x03 16 colors
>10 byte&0x07 =0x04 32 colors
>10 byte&0x07 =0x05 64 colors
>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
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

31
usr.bin/file/Magdir/intel Normal file
View file

@ -0,0 +1,31 @@
#
# Various flavors of x86 UNIX executable/object (other than Xenix, which
# is in "microsoft"). DOS is in "ms-dos"; the ambitious soul can do
# Windows as well.
#
# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere
# as well, if, as, and when IBM makes it portable.
#
# The `versions' should be un-commented if they work for you.
# (Was the problem just one of endianness?)
#
0 leshort 0502 basic-16 executable
>12 lelong >0 not stripped
#>22 leshort >0 - version %ld
0 leshort 0503 basic-16 executable (TV)
>12 lelong >0 not stripped
#>22 leshort >0 - version %ld
0 leshort 0510 x86 executable
>12 lelong >0 not stripped
0 leshort 0511 x86 executable (TV)
>12 lelong >0 not stripped
0 leshort =0512 iAPX 286 executable small model (COFF)
>12 lelong >0 not stripped
#>22 leshort >0 - version %ld
0 leshort =0522 iAPX 286 executable large model (COFF)
>12 lelong >0 not stripped
#>22 leshort >0 - version %ld
0 leshort =0514 80386 COFF executable
>12 lelong >0 not stripped
>22 leshort >0 - version %ld

View file

@ -0,0 +1,7 @@
#
# magic for InterLeaf TPS:
0 string =\210OPS Interleaf saved data
0 string =<!OPS Interleaf document text
>5 string ,\ Version\ (version
>>14 string >\0 %s)

57
usr.bin/file/Magdir/iris Normal file
View file

@ -0,0 +1,57 @@
#
# magic.iris: Magic for mips from an iris4d
#
# Dunno what byte-order munging is needed; all of SGI's *current*
# machines and OSes run in big-endian mode on the MIPS machines,
# as far as I know, but they do have the MIPSEB and MIPSEL stuff
# here....
#
0 short 0x0160 mipseb
>20 short 0407 executable
>20 short 0410 pure
>20 short 0413 demand paged
>8 long >0 not stripped
>8 long 0 stripped
>22 byte >0 - version %ld.
>23 byte >0 %ld
0 short 0x0162 mipsel
>20 short 0407 executable
>20 short 0410 pure
>20 short 0413 demand paged
>8 long >0 not stripped
>8 long 0 stripped
>23 byte >0 - version %ld.
>22 byte >0 %ld
0 short 0x6001 swapped mipseb
>20 short 03401 executable
>20 short 04001 pure
>20 short 05401 demand paged
>8 long >0 not stripped
>8 long 0 stripped
>22 byte >0 - version %ld.
>23 byte >0 %ld
0 short 0x6201 swapped mipsel
>20 short 03401 executable
>20 short 04001 pure
>20 short 05401 demand paged
>8 long >0 not stripped
>8 long 0 stripped
>22 byte >0 - version %ld.
>23 byte >0 %ld
0 short 0x180 mipseb ucode
0 short 0x182 mipsel ucode
#
# IRIX core format version 1 (from /usr/include/core.out.h)
0 long 0xdeadadb0 IRIX core dump
>4 long 1 of
>16 string >\0 '%s'
#
# Archives - This handles archive subtypes
#
0 string !<arch>\n__________E MIPS archive
>20 string U with mipsucode members
>21 string L with mipsel members
>21 string B with mipseb members
>19 string L and a EL hash table
>19 string B and a EB hash table
>22 string X -- out of date

View file

@ -0,0 +1,23 @@
#
# magic.ispell
#
# XXX - byte order?
#
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

3
usr.bin/file/Magdir/lex Normal file
View file

@ -0,0 +1,3 @@
# derived empirically, your offsets may vary!
53 string yyprevious c program text (from lex)
>3 string >\0 for %s

6
usr.bin/file/Magdir/lif Normal file
View file

@ -0,0 +1,6 @@
#
# magic.lif:
#
# XXX - byte order?
#
0 short 0x8000 lif file

11
usr.bin/file/Magdir/linux Normal file
View file

@ -0,0 +1,11 @@
# 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

View file

@ -0,0 +1 @@
0 string #\ Magic magic text file for file(1) cmd

View file

@ -0,0 +1,13 @@
# 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.
0 string Relay-Version: old news text
0 string #!\ rnews batched news text
0 string N#!\ rnews mailed, batched news text
0 string Forward\ to mail forwarding text
0 string Pipe\ to mail piping text
0 string Return-Path: smtp mail text
0 string Path: news text
0 string Xref: news text
0 string From: news or mail text
0 string Article saved news text

View file

@ -0,0 +1,68 @@
#
# Microsoft (Xenix, not DOS)
#
# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
# model" lifted from "magic.xenix", with comment "derived empirically;
# treat as folklore until proven"
#
# "small model", "large model", "huge model" stuff lifted from XXX
#
# XXX - "x.out" collides with PDP-11 archives....
#
0 string core core file (Xenix)
0 byte 0x80 8086 relocatable (Microsoft)
0 leshort 0xff65 x.out
>2 string __.SYMDEF randomized
>0 byte x archive
0 leshort 0x206 Microsoft a.out
>8 leshort 1 Middle model
>0x1e leshort &0x10 overlay
>0x1e leshort &0x2 separate
>0x1e leshort &0x4 pure
>0x1e leshort &0x800 segmented
>0x1e leshort &0x400 standalone
>0x1e leshort &0x8 fixed-stack
>0x1c byte &0x80 byte-swapped
>0x1c byte &0x40 word-swapped
>0x10 lelong >0 not-stripped
>0x1e leshort ^0xc000 pre-SysV
>0x1c byte &0x4 86
>0x1c byte &0x9 286
>0x1c byte &0xa 386
>0x1f byte <0x040 small model
>0x1f byte =0x048 large model
>0x1f byte =0x049 huge model
>0x1e leshort &0x1 executable
>0x1e leshort ^0x1 object file
>0x1e leshort &0x40 Large Text
>0x1e leshort &0x20 Large Data
>0x1e leshort &0x120 Huge Objects Enabled
>0x10 lelong >0 not stripped
0 leshort 0x140 old Microsoft 8086 x.out
>0x3 byte &0x4 separate
>0x3 byte &0x2 pure
>0 byte &0x1 executable
>0 byte ^0x1 relocatable
>0x14 lelong >0 not stripped
0 lelong 0x206 b.out
>0x1e leshort &0x10 overlay
>0x1e leshort &0x2 separate
>0x1e leshort &0x4 pure
>0x1e leshort &0x800 segmented
>0x1e leshort &0x400 standalone
>0x1e leshort &0x1 executable
>0x1e leshort ^0x1 object file
>0x1e leshort &0x4000 V2.3
>0x1e leshort &0x8000 V3.0
>0x1c byte &0x4 86
>0x1c byte &0xb 186
>0x1c byte &0x9 286
>0x1c byte &0x29 286
>0x1c byte &0xa 386
>0x1e leshort &0x4 Large Text
>0x1e leshort &0x2 Large Data
>0x1e leshort &0x102 Huge Objects Enabled
0 leshort 0x580 XENIX 8086 relocatable or 80286 small model

8
usr.bin/file/Magdir/mips Normal file
View file

@ -0,0 +1,8 @@
#
# RISC MIPS decstation
# Should this be "leshort", given that DEC ran the DECstations in
# little-endian mode?
#
# Where is the non-SGI, non-DEC MIPS stuff?
#
0 short 0x6201 MIPS executable

View file

@ -0,0 +1,4 @@
#
# XXX - byte order?
#
0 long 31415 Mirage Assembler m.out executable

7
usr.bin/file/Magdir/mkid Normal file
View file

@ -0,0 +1,7 @@
#
# ID is the binary tags database produced by mkid(1).
#
# XXX - byte order?
#
0 string \311\304 ID tags data
>2 short >0 version %d

1
usr.bin/file/Magdir/mmdf Normal file
View file

@ -0,0 +1 @@
0 string \001\001\001\001 MMDF mailbox

View file

@ -0,0 +1,28 @@
#
# Motorola
#
# 68K
#
0 beshort 0520 mc68k COFF
>18 beshort ^00000020 object
>18 beshort &00000020 executable
>12 belong >0 not stripped
>168 string .lowmem Apple toolbox
>20 beshort 0407 (impure)
>20 beshort 0410 (pure)
>20 beshort 0413 (demand paged)
>20 beshort 0421 (standalone)
0 beshort 0521 mc68k executable (shared)
>12 belong >0 not stripped
0 beshort 0522 mc68k executable (shared demand paged)
>12 belong >0 not stripped
#
# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
#
0 beshort 0554 68K BCS executable
#
# 88K
#
# Motorola/88Open BCS
#
0 beshort 0555 88K BCS executable

View file

@ -0,0 +1,8 @@
#
# Various MS-DOS magic numbers
#
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

47
usr.bin/file/Magdir/ncr Normal file
View file

@ -0,0 +1,47 @@
#
# magic.tower:
#
# NCR Tower objects, contributed by
# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne@ford-vax.arpa
# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne@fmsrl7.UUCP
#
0 beshort 000610 Tower/XP rel 2 object
>12 belong >0 not stripped
>20 beshort 0407 executable
>20 beshort 0410 pure executable
>22 beshort >0 - version %ld
0 beshort 000615 Tower/XP rel 2 object
>12 belong >0 not stripped
>20 beshort 0407 executable
>20 beshort 0410 pure executable
>22 beshort >0 - version %ld
0 beshort 000620 Tower/XP rel 3 object
>12 belong >0 not stripped
>20 beshort 0407 executable
>20 beshort 0410 pure executable
>22 beshort >0 - version %ld
0 beshort 000625 Tower/XP rel 3 object
>12 belong >0 not stripped
>20 beshort 0407 executable
>20 beshort 0410 pure executable
>22 beshort >0 - version %ld
0 beshort 000630 Tower32/600/400 68020 object
>12 belong >0 not stripped
>20 beshort 0407 executable
>20 beshort 0410 pure executable
>22 beshort >0 - version %ld
0 beshort 000640 Tower32/800 68020
>18 beshort &020000 w/68881 object
>18 beshort &040000 compatible object
>18 beshort &~060000 object
>20 beshort 0407 executable
>20 beshort 0413 pure executable
>12 belong >0 not stripped
>22 beshort >0 - version %ld
0 beshort 000645 Tower32/800 68010
>18 beshort &040000 compatible object
>18 beshort &~060000 object
>20 beshort 0407 executable
>20 beshort 0413 pure executable
>12 belong >0 not stripped
>22 beshort >0 - version %ld

117
usr.bin/file/Magdir/netbsd Normal file
View file

@ -0,0 +1,117 @@
#
# All new-style magic numbers are in network byte order.
#
0 lelong 000000413 386BSD demand paged executable
>16 lelong >0 not stripped
0 lelong 000000314 BSDI demand paged executable
>16 lelong >0 not stripped
0 lelong 000000407 NetBSD little-endian object file
>16 lelong >0 not stripped
0 belong 000000407 NetBSD big-endian object file
>16 belong >0 not stripped
0 belong&0377777777 041400413 NetBSD/i386 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 041400410 NetBSD/i386 pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 lelong >0 not stripped
0 belong&0377777777 041400407 NetBSD/i386
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
>>20 lelong !0 executable
>>20 lelong =0 object file
>16 lelong >0 not stripped
0 belong&0377777777 041600413 NetBSD/m68k 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 041600410 NetBSD/m68k pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&0377777777 041600407 NetBSD/m68k
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
>>20 belong !0 executable
>>20 belong =0 object file
>16 belong >0 not stripped
0 belong&0377777777 042000413 NetBSD/m68k4k demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
>>20 belong >4096 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&0377777777 042000410 NetBSD/m68k4k pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&0377777777 042000407 NetBSD/m68k4k
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
>>20 belong !0 executable
>>20 belong =0 object file
>16 belong >0 not stripped
0 belong&0377777777 042200413 NetBSD/ns32532 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 042200410 NetBSD/ns32532 pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 lelong >0 not stripped
0 belong&0377777777 042200407 NetBSD/ns32532
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
>>20 lelong !0 executable
>>20 lelong =0 object file
>16 lelong >0 not stripped
0 belong&0377777777 042400413 NetBSD/sparc 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 042400410 NetBSD/sparc pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&0377777777 042400407 NetBSD/sparc
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80
>>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
>12 string >\0 from '%s'
0 belong&0377777777 042000507 NetBSD/m68k4k core
>12 string >\0 from '%s'
0 belong&0377777777 042200507 NetBSD/ns32532 core
>12 string >\0 from '%s'
0 belong&0377777777 042400507 NetBSD/sparc core
>12 string >\0 from '%s'

5
usr.bin/file/Magdir/news Normal file
View file

@ -0,0 +1,5 @@
# NeWS, 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

4
usr.bin/file/Magdir/pbm Normal file
View file

@ -0,0 +1,4 @@
#
# XXX - byte order?
#
0 short 0x2a17 "compact bitmap" format (Poskanzer)

22
usr.bin/file/Magdir/pdp Normal file
View file

@ -0,0 +1,22 @@
#
# magic.pdp: 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
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
0 leshort 0411 PDP-11 separate I&D executable
>8 leshort >0 not stripped
0 leshort 0437 PDP-11 kernel overlay

10
usr.bin/file/Magdir/pgp Normal file
View file

@ -0,0 +1,10 @@
#
# 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
>15 string MESSAGE- message
>15 string SIGNED\040MESSAGE- signed message
>15 string PGP\040SIGNATURE- signature

View file

@ -0,0 +1,4 @@
#
# SysV R4 PKG Datastreams:
#
0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)

16
usr.bin/file/Magdir/plus5 Normal file
View file

@ -0,0 +1,16 @@
#
#/etc/magic entries for Plus Five's UNIX MUMPS
#
# XXX - byte order? Paging Hokey....
#
0 short 0x259 mumps avl global
>2 byte >0 (V%d)
>6 byte >0 with %d byte name
>7 byte >0 and %d byte data cells
0 short 0x25a mumps blt global
>2 byte >0 (V%d)
>8 short >0 - %d byte blocks
>15 byte 0x00 - P/D format
>15 byte 0x01 - P/K/D format
>15 byte 0x02 - K/D format
>15 byte >0x02 - Bad Flags

View file

@ -0,0 +1,17 @@
#
# magic.postscript: Magic for postscript files
#
# XXX - should we match only versions 1.0 and 2.0, or should we wildcard
# it?
#
0 string %! PostScript document
>2 string PS-Adobe- conforming
>>11 string 1.0 at level %s
>>11 string 2.0 at level %s
>>11 string 3.0 at level %s
# Some pc's have the annoying habit of adding a ^D
0 string \004%! PostScript document
>3 string PS-Adobe- conforming
>>12 string 1.0 at level %s
>>12 string 2.0 at level %s
>>12 string 3.0 at level %s

View file

@ -0,0 +1,6 @@
#
# magic.ps: psdatabase magic
#
0 belong&0xff00ffff 0x56000000 ps database
>1 string >\0 version %s
>4 string >\0 from kernel %s

View file

@ -0,0 +1,10 @@
#
# magic.pyramid: Magic for pyramids
#
# XXX - byte order?
#
0 long 0x50900107 Pyramid 90x family executable
0 long 0x50900108 Pyramid 90x family pure executable
>16 long >0 not stripped
0 long 0x5090010b Pyramid 90x family demand paged pure executable
>16 long >0 not stripped

19
usr.bin/file/Magdir/rle Normal file
View file

@ -0,0 +1,19 @@
# From <janl@ifi.uio.no>
# I made this with the help of the man page for rle(5). Ihey missing
# from the magic numbers I have:
#
# rle
#
0 short 0xcc52 Utah Raster Toolkit RLE
>2 short >0 lower left corner: %d
>4 short >0 lower right corner: %d
>6 short >0 %d x
>8 short >0 %d
>10 byte&0x1 =0x1 CLEARFIRST
>10 byte&0x2 =0x2 NO_BACKGROUND
>10 byte&0x4 =0x4 ALPHA
>10 byte&0x8 =0x8 COMMENT
>11 byte >0 %d colour channels
>12 byte >0 %d bits pr. pixel
>13 byte >0 %d colour map channels

2
usr.bin/file/Magdir/sc Normal file
View file

@ -0,0 +1,2 @@
# for SC
38 string Spreadsheet sc file

17
usr.bin/file/Magdir/sccs Normal file
View file

@ -0,0 +1,17 @@
# SCCS archive structure:
# \001h01207
# \001s 00276/00000/00000
# \001d D 1.1 87/09/23 08:09:20 ian 1 0
# \001c date and time created 87/09/23 08:09:20 by ian
# \001e
# \001u
# \001U
# ... etc.
# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
# *Sigh*. And these both came from various parts of the USG.
# Maybe we should just switch everybody from SCCS to RCS!
# Further, you can't just say '\001h0', because the five-digit number
# 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.

View file

@ -0,0 +1,9 @@
#
# magic.sendmail:
#
# XXX - byte order?
#
0 byte 046 Sendmail frozen configuration
>16 string >\0 - version %s
0 short 0x271c Sendmail frozen configuration
>16 string >\0 - version %s

View file

@ -0,0 +1,30 @@
# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
# For Sequent's multiprocessor systems (incomplete).
0 lelong 0x00ea BALANCE NS32000 .o
>16 lelong >0 not stripped
>124 lelong >0 version %ld
0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0)
>16 lelong >0 not stripped
>124 lelong >0 version %ld
0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0)
>16 lelong >0 not stripped
>124 lelong >0 version %ld
0 lelong 0x30ea BALANCE NS32000 standalone executable
>16 lelong >0 not stripped
>124 lelong >0 version %ld
#
# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.
# Symmetry magic nums will not be reached if DOS COM comes before them;
# byte 0xeb is matched before these get a chance.
0 leshort 0x12eb SYMMETRY i386 .o
>16 lelong >0 not stripped
>124 lelong >0 version %ld
0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0)
>16 lelong >0 not stripped
>124 lelong >0 version %ld
0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0)
>16 lelong >0 not stripped
>124 lelong >0 version %ld
0 leshort 0x42eb SYMMETRY i386 standalone executable
>16 lelong >0 not stripped
>124 lelong >0 version %ld

6
usr.bin/file/Magdir/sgml Normal file
View file

@ -0,0 +1,6 @@
# $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

View file

@ -0,0 +1,27 @@
# SoftQuad Publishing Software magic numbers
# $Id: softquad,v 1.8 1993/02/19 14:36:43 ian Exp $
# Author/Editor and RulesBuilder
#
# XXX - byte order?
#
0 string \<!SQ\ DTD> Compiled SGML rules file
>9 string >\0 Type %s
0 string \<!SQ\ A/E> A/E SGML Document binary
>9 string >\0 Type %s
0 string \<!SQ\ STS> A/E SGML binary styles file
>9 string >\0 Type %s
0 short 0xc0de Compiled PSI (v1) data
0 short 0xc0da Compiled PSI (v2) data
>3 string >\0 (%s)
# Binary sqtroff font/desc files...
0 short 0125252 SoftQuad DESC or font file binary
>2 short >0 - version %d
# Bitmaps...
0 string SQ\ BITMAP1 SoftQuad Raster Format text
#0 string SQ\ BITMAP2 SoftQuad Raster Format data
# sqtroff intermediate language (replacement for ditroff int. lang.)
0 string X\ SoftQuad troff Context intermediate
>2 string 495 for AT&T 495 laser printer
>2 string hp for Hewlett-Packard LaserJet
>2 string impr for IMAGEN imPRESS
>2 string ps for PostScript

84
usr.bin/file/Magdir/sun Normal file
View file

@ -0,0 +1,84 @@
#
# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
# releases.
# (5.x uses ELF.)
#
0 belong&077777777 0600413 sparc demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
>>20 belong >4096 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&077777777 0600410 sparc pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&077777777 0600407 sparc
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&077777777 0400413 mc68020 demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
>>20 belong >4096 dynamically linked executable
>16 belong >0 not stripped
0 belong&077777777 0400410 mc68020 pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&077777777 0400407 mc68020
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&077777777 0200413 mc68010 demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
>>20 belong >4096 dynamically linked executable
>16 belong >0 not stripped
0 belong&077777777 0200410 mc68010 pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
0 belong&077777777 0200407 mc68010
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
# reworked these to avoid anything beginning with zero becoming "old sun-2"
0 belong 0407 old sun-2 executable
>16 belong >0 not stripped
0 belong 0410 old sun-2 pure executable
>16 belong >0 not stripped
0 belong 0413 old sun-2 demand paged executable
>16 belong >0 not stripped
#
# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
# binary executed in compatibility mode under SunOS 5.x".
#
0 belong 0x080456 SunOS core file
>4 belong 432 (SPARC)
>>132 string >\0 from '%s'
>>116 belong =3 (quit)
>>116 belong =4 (illegal instruction)
>>116 belong =5 (trace trap)
>>116 belong =6 (abort)
>>116 belong =7 (emulator trap)
>>116 belong =8 (arithmetic exception)
>>116 belong =9 (kill)
>>116 belong =10 (bus error)
>>116 belong =11 (segmentation violation)
>>116 belong =12 (bad argument to system call)
>>116 belong =29 (resource lost)
>>120 belong x (T=%dK,
>>124 belong x D=%dK,
>>128 belong x S=%dK)
>4 belong 826 (68K)
>>128 string >\0 from '%s'
>4 belong 456 (SPARC 4.x BCP)
>>152 string >\0 from '%s'

View file

@ -0,0 +1,12 @@
#
# Sun rasterfiles
#
# XXX - byte order? What about the 386i?
#
0 string \x59\xa6\x6a\x95 rasterfile
>4 belong >0 %d
>8 belong >0 x %d
>12 belong >0 x %d
>20 belong 0 old format
>20 belong 2 compressed
>24 belong 1 with color map

View file

@ -0,0 +1,8 @@
#
# Terminfo
#
# XXX - byte order for screen images?
#
0 string \032\001 Compiled terminfo entry
0 short 0433 Curses screen image
0 short 0434 Curses screen image

25
usr.bin/file/Magdir/tex Normal file
View file

@ -0,0 +1,25 @@
#
# magic.tex:
#
# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
#
# From <conklin@talisman.kaleida.com>
# Although we may know the offset of certain text fields in TeX DVI
# 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)
0 string \367\203 TeX generic font data
0 string \367\131 TeX packed font data
>4 string >\0 (%s)
0 string \367\312 TeX virtual font data
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
2 string \000\022 TeX font metric data
>34 string >\0 (%s)

View file

@ -0,0 +1,6 @@
#
# magic.troff:
#
0 string \100\357 very old (C/A/T) troff output data
0 string ' [nt]roff, tbl, or eqn input text

View file

@ -0,0 +1,5 @@
# other typesetting magic
0 string \100\357 very old (C/A/T) troff output data
0 string Interpress/Xerox Xerox InterPress data
>16 string / (version
>>17 string >\0 %s)

View file

@ -0,0 +1,35 @@
#
# magic.unknown: Unknown machine magic
#
# XXX - this probably should be pruned, as it'll match PDP-11 and
# VAX image formats.
#
# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
# respectively).
#
# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
# have the "version %ld", which may be a bogus COFFism (I don't think
# there ever was COFF for the PDP-11).
#
# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
# long, as it would be on a VAX.
#
# 0x10C is 0414, 0x10D is 0415, and 0x10E is 416; those *are* unknown.
#
0 short 0x107 unknown machine executable
>8 short >0 not stripped
>15 byte >0 - version %ld
0 short 0x108 unknown pure executable
>8 short >0 not stripped
>15 byte >0 - version %ld
0 short 0x109 PDP-11 separate I&D
>8 short >0 not stripped
>15 byte >0 - version %ld
0 short 0x10b unknown pure executable
>8 short >0 not stripped
>15 byte >0 - version %ld
0 long 0x10c unknown demand paged pure executable
>16 long >0 not stripped
0 long 0x10d unknown demand paged pure executable
>16 long >0 not stripped
0 long 0x10e unknown readable demand paged pure executable

View file

@ -0,0 +1,3 @@
0 string begin uuencoded mail text
# Btoa(1) is an alternative to uuencode that requires less space.
0 string xbtoa\ Begin btoa'd text

View file

@ -0,0 +1,5 @@
# 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

33
usr.bin/file/Magdir/vax Normal file
View file

@ -0,0 +1,33 @@
#
# magic.pdp: VAX executable/object and APL workspace
#
0 lelong 0101557 VAX single precision APL workspace
0 lelong 0101556 VAX double precision APL workspace
#
# VAX a.out (32V, BSD)
#
0 lelong 0407 VAX executable
>16 lelong >0 not stripped
0 lelong 0410 VAX pure executable
>16 lelong >0 not stripped
0 lelong 0413 VAX demand paged pure executable
>16 lelong >0 not stripped
0 lelong 0420 VAX demand paged (first page unmapped) pure executable
>16 lelong >0 not stripped
#
# VAX COFF
#
# The `versions' should be un-commented if they work for you.
# (Was the problem just one of endianness?)
#
0 leshort 0570 VAX COFF executable
>12 lelong >0 not stripped
>22 leshort >0 - version %ld
0 leshort 0575 VAX COFF pure executable
>12 lelong >0 not stripped
>22 leshort >0 - version %ld

30
usr.bin/file/Magdir/visx Normal file
View file

@ -0,0 +1,30 @@
#
# magic.visx: Visx format file
#
0 short 0x5555 VISX image file
>2 byte 0 (zero)
>2 byte 1 (unsigned char)
>2 byte 2 (short integer)
>2 byte 3 (float 32)
>2 byte 4 (float 64)
>2 byte 5 (signed char)
>2 byte 6 (bit-plane)
>2 byte 7 (classes)
>2 byte 8 (statistics)
>2 byte 10 (ascii text)
>2 byte 15 (image segments)
>2 byte 100 (image set)
>2 byte 101 (unsigned char vector)
>2 byte 102 (short integer vector)
>2 byte 103 (float 32 vector)
>2 byte 104 (float 64 vector)
>2 byte 105 (signed char vector)
>2 byte 106 (bit plane vector)
>2 byte 121 (feature vector)
>2 byte 122 (feature vector library)
>2 byte 124 (chain code)
>2 byte 126 (bit vector)
>2 byte 130 (graph)
>2 byte 131 (adjacency graph)
>2 byte 132 (adjacency graph library)
>2 string .VISIX (ascii text)

9
usr.bin/file/Magdir/x11 Normal file
View file

@ -0,0 +1,9 @@
#
# magic.x11
#
# I think this is byte-order-dependent; if so, it should become:
#
# 0 belong 00000004 X11 big-endian snf font
# 0 lelong 00000004 X11 little-endian snf font
#
0 long 00000004 X11 snf font

11
usr.bin/file/Magdir/zilog Normal file
View file

@ -0,0 +1,11 @@
#
# Zilog Z8000.
#
# Was it big-endian or little-endian? My Product Specification doesn't
# say.
#
0 long 0xe807 object file (z8000 a.out)
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)

View file

@ -0,0 +1,9 @@
# 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

159
usr.bin/file/Makefile Normal file
View file

@ -0,0 +1,159 @@
# 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 $
#
# This software is not subject to any license of the American Telephone
# and Telegraph Company or of the Regents of the University of California.
#
# Permission is granted to anyone to use this software for any purpose on
# any computer system, and to alter it and redistribute it freely, subject
# to the following restrictions:
#
# 1. The author is not responsible for the consequences of use of this
# software, no matter how awful, even if they arise from flaws in it.
#
# 2. The origin of this software must not be misrepresented, either by
# explicit claim or by omission. Since few users ever read sources,
# credits must appear in the documentation.
#
# 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.
#
# 4. This notice may not be removed or altered.
VERSION = 3.14
SHELL = /bin/sh
#MAGIC = /etc/magic
MAGIC = /usr/local/etc/magic
DEFS = -DMAGIC='"$(MAGIC)"' # -Dvoid=int
CC = cc
COPTS = -O -g # newer compilers allow both; else drop -O
# For truly antique environments, use this for (dummy) include files:
COPTS = -O # -Ilocalinc
CFLAGS = $(COPTS) $(DEFS)
LDFLAGS = $(COPTS) # -Bstatic # older gdb couldn't handle shared libs
SHAR = bundle
OFILE = /usr/bin/file # old or distributed version, for comparison
# Where new binary lives; typically /usr/local (BSD), /usr/lbin (USG).
BINDIR = /usr/local/bin
# For installing our man pages;
# MANCxxx is manual section for Commands, MANFxxx is section for file formats.
# MANxDIR is directory names; MANxEXT is the filename extention. Usual values:
# Variable V7 4BSD Sys V
# MANCDIR /usr/man/man1 /usr/man/man1 /usr/man/u_man/man1
# MANFDIR /usr/man/man5 /usr/man/man5 /usr/man/u_man/man4
# MANCEXT 1 1 1
# MANFEXT 5 5 4
# --- possible alternative for 4BSD ---
# MANCDIR /usr/local/man/man1
# MANCEXT 1
# or
# MANCDIR /usr/man/manl
# MANCEXT l
# --- possible alternative for USG ---
# MANCDIR /usr/man/local/man1
# MANCEXT 1
MANCDIR = /usr/local/man/man1
MANCEXT = 1
MANFDIR = /usr/local/man/man4
MANFEXT = 4
# There are no system-dependant configuration options (except maybe CFLAGS).
# Uncomment any of these that is missing from your "standard" library.
LOCALSRCS = # localsrc/getopt.c localsrc/strtol.c \
# localsrc/strtok.c localsrc/strchr.c
LOCALOBJS = # localsrc/getopt.o localsrc/strtol.o \
# localsrc/strtok.o localsrc/strchr.o
# These are not compiled in unless you use -Ilocalinc, but
# are not commented out as "make dist" &c use them.
LOCALINC = # localinc/*.h localinc/sys/*.h
SRCS = file.c apprentice.c fsmagic.c softmagic.c ascmagic.c \
compress.c is_tar.c \
print.c $(LOCALSRCS) $(LOCALINC)
OBJS = file.o apprentice.o fsmagic.o softmagic.o ascmagic.o \
compress.o is_tar.o \
print.o $(LOCALOBJS)
ALLSRC = LEGAL.NOTICE README MAINT PORTING $(SRCS) *.h \
Makefile file.man magic.man
ALLMAGIC = Magdir/Makefile Magdir/Localstuff Magdir/Header Magdir/[a-z]*
all: file magic file.${MANCEXT} magic.${MANFEXT}
TESTFILES = * tst/*
try: all $(OFILE)
cd tst; $(MAKE)
time $(OFILE) $(TESTFILES) >/tmp/t1 # can't use ./magic
time ./file -m ./magic $(TESTFILES) >/tmp/t2
-diff -b /tmp/t[12]
what ./file >lastnocore
file: $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $@
lint: $(SRCS)
lint -ha $(DEFS) $(SRCS) | tee $@
magic: Magdir
# Magdir/Makefile's "install" mv's magic to here for testing.
cd Magdir; $(MAKE) install
ascmagic.o: names.h
compress.o apprentice.o ascmagic.o file.o fsmagic.o print.o softmagic.o: file.h
install: file magic
cp file $(BINDIR)/file
cp magic $(MAGIC)
install.man: file.${MANCEXT} magic.${MANFEXT}
cp file.${MANCEXT} $(MANCDIR)/file.$(MANCEXT)
cp magic.${MANFEXT} $(MANFDIR)/magic.$(MANFEXT)
clean:
rm -f *.o core file magic lint dist.* MANIFEST \
magic.${MANFEXT} file.${MANCEXT}
clobber:
cd tst; $(MAKE) clean
magic.${MANFEXT} : Makefile magic.man
@rm -f $@
sed -e s@__SECTION__@${MANFEXT}@g \
-e s@__MAGIC__@${MAGIC}@g magic.man > $@
file.${MANCEXT} : Makefile file.man
@rm -f $@
sed -e s@__SECTION__@${MANCEXT}@g \
-e s@__MAGIC__@${MAGIC}@g file.man > $@
send: dist
ftp ftp.cs
dist: dist.src dist.magic
@echo Now check this patchlevel!
ident patchlevel.h
dist.src: $(ALLSRC) MANIFEST
# Some versions of shar can't handle a single file from
# a subdirectory, so we manually insert mkdir as needed.
# The point is to exclude all the generable targets in tst.
(echo mkdir localinc localinc/sys localsrc tst; \
$(SHAR) $(ALLSRC) MANIFEST) > $@
rcsdiff: $(ALLSRC)
rcsdiff -q RCS/*
MANIFEST: $(ALLSRC)
ident $(ALLSRC) > MANIFEST
dist.magic: Magdir
# As above, but to exclude Magdir/RCS from being shipped.
(echo mkdir Magdir; $(SHAR) $(ALLMAGIC)) >$@
tar: $(ALLSRC) $(ALLMAGIC)
-rm -fr file-${VERSION}
-mkdir file-${VERSION} file-${VERSION}/Magdir
ln $(ALLSRC) file-${VERSION}
ln ${ALLMAGIC} file-${VERSION}/Magdir
tar cvf file-${VERSION}.tar file-${VERSION}
-rm -fr file-${VERSION}

76
usr.bin/file/PORTING Normal file
View file

@ -0,0 +1,76 @@
Portability of the new file(1) command.
@(#) $Id: PORTING,v 1.11 1993/09/23 21:47:23 christos Exp $
Read this file only if the program doesn't compile on your system.
This release has been around UNIX; it has been compiled and tested
in the following environments:
SunOS sqarc 4.1.1 8 sun4
No problems.
ULTRIX squint 4.2 0 RISC
No problems.
A/UX sqmac 3.0a9 SVR22 mc68020
No problems.
AIX sqibm 2 3 000XXXXXX100
Had weird "make" problems making "magic" file automatically; just
built it by hand. Your mileage may vary.
SCO sqwang 3.2 2 i386
Compiles fine; their weird make can't handle "[a-z]*" as a dependancy,
so build magic by hand. Runs fine.
sqzme sqzme 3.1.1 3 3B2
The 3B2 SVR3 needed a few tweaks as well as COPTS = -Ilocalinc
in order to compile.
This version, reluctanly, includes <stdlib.h>, which won't exist
on older systems or those that aren't even close to the ANSI C
standard. There is a null "stdlib.h", and some other bogus headers,
in subdirectory "localinc"; if you get complaints about missing
stdlib.h and others, uncomment the line with COPTS=-Ilocalinc
in the Makefile, and try again.
You must have either <stdarg.h> or the older <varargs.h>, otherwise you'll
have to butcher some routines in print.c.
Beyond that, I have tried to make a program that doesn't need any
command-line defines (-D) to specify what version of UNIX is in use,
by using the definitions available in the system #include
files. For example, the lstat(2) call is normally found in
4BSD systems, but might be grafted into some other variant
of UNIX. If it's done right (ie., using the same definitions),
my program will compile and work correctly. Look at the #ifdefs
to see how it's done.
I've also tried to include source for all the non-portable library routines
I used (getopt, str*). Non-portable here means `not in every
reasonably standard UNIX out there: V7, System V, 4BSD'.
These are in subdirectory "localsrc", and not used unless you
need them; again, see the Makefile.
There is one area that just might cause problems. On System
V, they moved the definition of major() and minor() out of
<sys/types.h> into <sys/sysmacros.h>. Hence, if major isn't
defined after including types.h, I automatically include sys/sysmacros.h.
This will work for 99% of the systems out there. ONLY if you
have a system in which neither types.h nor sysmacros.h defines
`major' will this automatic include fail (I hope). On such
systems, you will get a compilation error in trying to compile
a warning message. Please do the following:
1) change the appropriate #include at the start of fsmagic.c
and 2) let me know the name of the system, the release number,
and the name of the header file that *does* include
this "standard" definition.
If you are running the old Ritchie PDP-11 C compiler or
some other compiler that doesn't know about `void', you will have
to include `-Dvoid=int' in the variable COPTS in the Makefile.
Other than this, there should be no portability problems,
but one never knows these days. Please let me know of any
other problems you find porting to a UNIX system. I don't much
care about non-UNIX systems but will collect widely-used magic
numbers for them as well as for UNIX systems.
Mark Moraes and Christos Zoulas
(address in README)

79
usr.bin/file/README Normal file
View file

@ -0,0 +1,79 @@
** README for file(1) Command **
@(#) $Id: README,v 1.20 1993/09/23 21:47:01 christos Exp $
This is Release 3.x of Ian Darwin's (copyright but distributable)
file(1) command. Release 3.x is scheduled for inclusion in the
4.4 BSD (Berkeley Software Distribution) of UNIX-like
software, and is the standard "file" command for Linux, 386bsd,
and other systems. (See "patchlevel.h" for the exact release number).
UNIX is a trademark of UNIX System Laboratories.
The prime contributor to Release 3.8 was Guy Harris, who put in megachanges
including byte-order independance.
The prime contributor to Release 3.0 was Christos Zoulas, who put
in hundreds of lines of source code changes, including his own
ANSIfication of the code (I liked my own ANSIfication better, but
his (__P()) is the "Berkeley standard" way of doing it, and I wanted UCB
to include the code...), his HP-like "indirection" (a feature of
the HP file command, I think), and his mods that finally got the
uncompress (-z) mode finished and working.
This release has compiled in numerous environments; see PORTING
for a list and problems.
This fine freeware file(1) follows the USG (System V) model of the file
command, rather than the Research (V7) version or the V7-derived 4.[23]
Berkeley one. That is, the file /etc/magic contains much of the ritual
information that is the source of this program's power. My version
knows a little more magic (including tar archives) than System V; the
/etc/magic parsing seems to be compatible with the (poorly documented)
System V /etc/magic format (with one exception; see the man page).
In addition, the /etc/magic file is built from a subdirectory
for easier(?) maintenance. I will act as a clearinghouse for
magic numbers assigned to all sorts of data files that
are in reasonable circulation. Send your magic numbers,
in magic(4) format please, to the maintainer, Christos Zoulas.
LEGAL.NOTICE - read this first.
README - read this second (you are currently reading this file).
PORTING - read this only if the program won't compile.
Makefile - read this next, adapt it as needed (particularly
the location of the old existing file command and
the man page layouts), type "make" to compile,
"make try" to try it out against your old version.
Expect some diffs, particularly since your original
file(1) may not grok the imbedded-space ("\ ") in
the current magic file, or may even not use the
magic file.
apprentice.c - parses /etc/magic to learn magic
ascmagic.c - third & last set of tests, based on hardwired assumptions.
core - not included in distribution due to mailer limitations.
debug.c - includes -c printout routine
file.1 - man page for the command
magic.4 - man page for the magic file, courtesy Guy Harris.
Install as magic.4 on USG and magic.5 on V7 or Berkeley; cf Makefile.
file.c - main program
file.h - header file
fsmagic.c - first set of tests the program runs, based on filesystem info
is_tar.c - knows about tarchives (courtesy John Gilmore).
magdir - directory of /etc/magic pieces
magdir/Makefile - ADJUST THIS FOR YOUR CONFIGURATION
names.h - header file for ascmagic.c
softmagic.c - 2nd set of tests, based on /etc/magic
strtok.c, getopt.c - in case you them (courtesy of Henry Spencer).
strtol.c, strchr.c - in case you need them - public domain.
tst - simple test suite, built from tst/Makefile
E-mail: christos@deshaw.com, moraes@deshaw.com
Phone: Do not even think of telephoning me about this program. Send cash first!
Parts of this software were developed at SoftQuad Inc., 56 Aberfoyle
Cres, # 810, Toronto, Ontario CANADA M8X 2W4. Phone: 416-239-4801 or
800-387-2777. Email: mail@sq.com. Call for information on SGML editing
and browsing, Unix text processing, and customised products on Unix,
DOS and Mac.

551
usr.bin/file/apprentice.c Normal file
View file

@ -0,0 +1,551 @@
/*
* apprentice - make one pass through /etc/magic, learning its secrets.
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits must appear in the documentation.
*
* 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.
*
* 4. This notice may not be removed or altered.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "file.h"
#ifndef lint
static char *moduleid =
"@(#)$Id: apprentice.c,v 1.19 1994/05/03 17:58:23 christos Exp $";
#endif /* lint */
#define EATAB {while (isascii((unsigned char) *l) && \
isspace((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 int maxmagic = 0;
int
apprentice(fn, check)
char *fn; /* name of magic file */
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);
}
maxmagic = MAXMAGIS;
if ((magic = (struct magic *) calloc(sizeof(struct magic), maxmagic))
== NULL) {
(void) fprintf(stderr, "%s: Out of memory.\n", progname);
if (check)
return -1;
else
exit(1);
}
/* parse it */
if (check) /* print silly verbose header for USG compat. */
(void) printf("cont\toffset\ttype\topcode\tmask\tvalue\tdesc\n");
for (lineno = 1;fgets(line, BUFSIZ, f) != NULL; lineno++) {
if (line[0]=='#') /* comment, do not parse */
continue;
if (strlen(line) <= (unsigned)1) /* null line, garbage, etc */
continue;
line[strlen(line)-1] = '\0'; /* delete newline */
if (parse(line, &nmagic, check) != 0)
++errs;
}
(void) fclose(f);
return errs ? -1 : 0;
}
/*
* extend the sign bit if the comparison is to be signed
*/
unsigned long
signextend(m, v)
struct magic *m;
unsigned long v;
{
if (!(m->flag & UNSIGNED))
switch(m->type) {
/*
* Do not remove the casts below. They are
* vital. When later compared with the data,
* the sign extension must have happened.
*/
case BYTE:
v = (char) v;
break;
case SHORT:
case BESHORT:
case LESHORT:
v = (short) v;
break;
case DATE:
case BEDATE:
case LEDATE:
case LONG:
case BELONG:
case LELONG:
v = (long) v;
break;
case STRING:
break;
default:
magwarn("can't happen: m->type=%d\n",
m->type);
return -1;
}
return v;
}
/*
* parse one line from magic file, put into magic[index++] if valid
*/
static int
parse(l, ndx, check)
char *l;
int *ndx, check;
{
int i = 0, nd = *ndx;
struct magic *m;
char *t, *s;
if (nd+1 >= maxmagic){
maxmagic += 20;
if ((magic = (struct magic *) realloc(magic,
sizeof(struct magic) *
maxmagic)) == NULL) {
(void) fprintf(stderr, "%s: Out of memory.\n", progname);
if (check)
return -1;
else
exit(1);
}
}
m = &magic[*ndx];
m->flag = 0;
m->cont_level = 0;
while (*l == '>') {
++l; /* step over */
m->cont_level++;
}
if (m->cont_level != 0 && *l == '(') {
++l; /* step over */
m->flag |= INDIR;
}
/* get offset, then skip over it */
m->offset = (int) strtol(l,&t,0);
if (l == t)
magwarn("offset %s invalid", l);
l = t;
if (m->flag & INDIR) {
m->in.type = LONG;
m->in.offset = 0;
/*
* read [.lbs][+-]nnnnn)
*/
if (*l == '.') {
switch (*++l) {
case 'l':
m->in.type = LONG;
break;
case 's':
m->in.type = SHORT;
break;
case 'b':
m->in.type = BYTE;
break;
default:
magwarn("indirect offset type %c invalid", *l);
break;
}
l++;
}
s = l;
if (*l == '+' || *l == '-') l++;
if (isdigit((unsigned char)*l)) {
m->in.offset = strtol(l, &t, 0);
if (*s == '-') m->in.offset = - m->in.offset;
}
else
t = l;
if (*t++ != ')')
magwarn("missing ')' in indirect offset");
l = t;
}
while (isascii((unsigned char)*l) && isdigit((unsigned char)*l))
++l;
EATAB;
#define NBYTE 4
#define NSHORT 5
#define NLONG 4
#define NSTRING 6
#define NDATE 4
#define NBESHORT 7
#define NBELONG 6
#define NBEDATE 6
#define NLESHORT 7
#define NLELONG 6
#define NLEDATE 6
if (*l == 'u') {
++l;
m->flag |= UNSIGNED;
}
/* get type, skip it */
if (strncmp(l, "byte", NBYTE)==0) {
m->type = BYTE;
l += NBYTE;
} else if (strncmp(l, "short", NSHORT)==0) {
m->type = SHORT;
l += NSHORT;
} else if (strncmp(l, "long", NLONG)==0) {
m->type = LONG;
l += NLONG;
} else if (strncmp(l, "string", NSTRING)==0) {
m->type = STRING;
l += NSTRING;
} else if (strncmp(l, "date", NDATE)==0) {
m->type = DATE;
l += NDATE;
} else if (strncmp(l, "beshort", NBESHORT)==0) {
m->type = BESHORT;
l += NBESHORT;
} else if (strncmp(l, "belong", NBELONG)==0) {
m->type = BELONG;
l += NBELONG;
} else if (strncmp(l, "bedate", NBEDATE)==0) {
m->type = BEDATE;
l += NBEDATE;
} else if (strncmp(l, "leshort", NLESHORT)==0) {
m->type = LESHORT;
l += NLESHORT;
} else if (strncmp(l, "lelong", NLELONG)==0) {
m->type = LELONG;
l += NLELONG;
} else if (strncmp(l, "ledate", NLEDATE)==0) {
m->type = LEDATE;
l += NLEDATE;
} else {
magwarn("type %s invalid", l);
return -1;
}
/* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
if (*l == '&') {
++l;
m->mask = signextend(m, strtol(l, &l, 0));
} else
m->mask = ~0L;
EATAB;
switch (*l) {
case '>':
case '<':
/* Old-style anding: "0 byte &0x80 dynamically linked" */
case '&':
case '^':
case '=':
m->reln = *l;
++l;
break;
case '!':
if (m->type != STRING) {
m->reln = *l;
++l;
break;
}
/* FALL THROUGH */
default:
if (*l == 'x' && isascii((unsigned char)l[1]) &&
isspace((unsigned char)l[1])) {
m->reln = *l;
++l;
goto GetDesc; /* Bill The Cat */
}
m->reln = '=';
break;
}
EATAB;
if (getvalue(m, &l))
return -1;
/*
* TODO finish this macro and start using it!
* #define offsetcheck {if (offset > HOWMANY-1)
* magwarn("offset too big"); }
*/
/*
* now get last part - the description
*/
GetDesc:
EATAB;
if (l[0] == '\b') {
++l;
m->nospflag = 1;
} else if ((l[0] == '\\') && (l[1] == 'b')) {
++l;
++l;
m->nospflag = 1;
} else
m->nospflag = 0;
while ((m->desc[i++] = *l++) != '\0' && i<MAXDESC)
/* NULLBODY */;
if (check) {
mdump(m);
}
++(*ndx); /* make room for next */
return 0;
}
/*
* Read a numeric value from a pointer, into the value union of a magic
* pointer, according to the magic type. Update the string pointer to point
* just after the number read. Return 0 for success, non-zero for failure.
*/
static int
getvalue(m, p)
struct magic *m;
char **p;
{
int slen;
if (m->type == STRING) {
*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));
return 0;
}
/*
* Convert a string containing C character escapes. Stop at an unescaped
* space or tab.
* Copy the converted version to "p", returning its length in *slen.
* Return updated scan pointer as function result.
*/
static char *
getstr(s, p, plen, slen)
register char *s;
register char *p;
int plen, *slen;
{
char *origs = s, *origp = p;
char *pmax = p + plen - 1;
register int c;
register int val;
while ((c = *s++) != '\0') {
if (isspace((unsigned char) c))
break;
if (p >= pmax) {
fprintf(stderr, "String too long: %s\n", origs);
break;
}
if(c == '\\') {
switch(c = *s++) {
case '\0':
goto out;
default:
*p++ = (char) c;
break;
case 'n':
*p++ = '\n';
break;
case 'r':
*p++ = '\r';
break;
case 'b':
*p++ = '\b';
break;
case 't':
*p++ = '\t';
break;
case 'f':
*p++ = '\f';
break;
case 'v':
*p++ = '\v';
break;
/* \ and up to 3 octal digits */
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
val = c - '0';
c = *s++; /* try for 2 */
if(c >= '0' && c <= '7') {
val = (val<<3) | (c - '0');
c = *s++; /* try for 3 */
if(c >= '0' && c <= '7')
val = (val<<3) | (c-'0');
else
--s;
}
else
--s;
*p++ = (char)val;
break;
/* \x and up to 3 hex digits */
case 'x':
val = 'x'; /* Default if no digits */
c = hextoint(*s++); /* Get next char */
if (c >= 0) {
val = c;
c = hextoint(*s++);
if (c >= 0) {
val = (val << 4) + c;
c = hextoint(*s++);
if (c >= 0) {
val = (val << 4) + c;
} else
--s;
} else
--s;
} else
--s;
*p++ = (char)val;
break;
}
} else
*p++ = (char)c;
}
out:
*p = '\0';
*slen = p - origp;
return s;
}
/* Single hex char to int; -1 if not a hex char. */
static int
hextoint(c)
int c;
{
if (!isascii((unsigned char) c)) return -1;
if (isdigit((unsigned char) c)) return c - '0';
if ((c>='a')&&(c<='f')) return c + 10 - 'a';
if ((c>='A')&&(c<='F')) return c + 10 - 'A';
return -1;
}
/*
* Print a string containing C character escapes.
*/
void
showstr(fp, s, len)
FILE *fp;
const char *s;
int len;
{
register char c;
for (;;) {
c = *s++;
if (len == -1) {
if (c == '\0')
break;
}
else {
if (len-- == 0)
break;
}
if(c >= 040 && c <= 0176) /* TODO isprint && !iscntrl */
(void) fputc(c, fp);
else {
(void) fputc('\\', fp);
switch (c) {
case '\n':
(void) fputc('n', fp);
break;
case '\r':
(void) fputc('r', fp);
break;
case '\b':
(void) fputc('b', fp);
break;
case '\t':
(void) fputc('t', fp);
break;
case '\f':
(void) fputc('f', fp);
break;
case '\v':
(void) fputc('v', fp);
break;
default:
(void) fprintf(fp, "%.3o", c & 0377);
break;
}
}
}
}

120
usr.bin/file/ascmagic.c Normal file
View file

@ -0,0 +1,120 @@
/*
* Ascii magic -- file types that we know based on keywords
* that can appear anywhere in the file.
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits must appear in the documentation.
*
* 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.
*
* 4. This notice may not be removed or altered.
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <unistd.h>
#include "file.h"
#include "names.h"
#ifndef lint
static char *moduleid =
"@(#)$Id: ascmagic.c,v 1.17 1994/01/21 01:25:30 christos Exp $";
#endif /* lint */
/* an optimisation over plain strcmp() */
#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
int
ascmagic(buf, nbytes)
unsigned char *buf;
int nbytes; /* size actually read */
{
int i, isblock, 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 */
/*
* for troff, look for . + letter + letter or .\";
* this must be done to disambiguate tar archives' ./file
* and other trash from real troff input.
*/
if (*buf == '.') {
unsigned char *tp = buf + 1;
while (isascii(*tp) && isspace(*tp))
++tp; /* skip leading whitespace */
if ((isascii(*tp) && (isalnum(*tp) || *tp=='\\') &&
isascii(*(tp+1)) && (isalnum(*(tp+1)) || *tp=='"'))) {
ckfputs("troff or preprocessor input text", stdout);
return 1;
}
}
if ((*buf == 'c' || *buf == 'C') &&
isascii(*(buf + 1)) && isspace(*(buf + 1))) {
ckfputs("fortran program text", stdout);
return 1;
}
/* look for tokens from names.h - this is expensive! */
/* make a copy of the buffer here because strtok() will destroy it */
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) {
s = NULL; /* make strtok() keep on tokin' */
for (p = names; p < names + NNAMES; p++) {
if (STREQ(p->name, token)) {
ckfputs(types[p->type], stdout);
if (has_escapes)
ckfputs(" (with escape sequences)",
stdout);
return 1;
}
}
}
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 */
}
/* all else fails, but it is ascii... */
ckfputs("ascii text", stdout);
if (has_escapes) {
ckfputs(" (with escape sequences)", stdout);
}
return 1;
}

125
usr.bin/file/compress.c Normal file
View file

@ -0,0 +1,125 @@
/*
* compress routines:
* zmagic() - returns 0 if not recognized, uncompresses and prints
* 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 $
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#include "file.h"
static struct {
char *magic;
int maglen;
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 },
};
static int ncompr = sizeof(compr) / sizeof(compr[0]);
static int uncompress __P((int, const unsigned char *, unsigned char **, int));
int
zmagic(buf, nbytes)
unsigned char *buf;
int nbytes;
{
unsigned char *newbuf;
int newsize;
int i;
for (i = 0; i < ncompr; i++) {
if (nbytes < compr[i].maglen)
continue;
if (memcmp(buf, compr[i].magic, compr[i].maglen) == 0)
break;
}
if (i == ncompr)
return 0;
if ((newsize = uncompress(i, buf, &newbuf, nbytes)) != 0) {
tryit(newbuf, newsize, 1);
free(newbuf);
printf(" (");
tryit(buf, nbytes, 0);
printf(")");
}
return 1;
}
static int
uncompress(method, old, newch, n)
int method;
const unsigned char *old;
unsigned char **newch;
int n;
{
int fdin[2], fdout[2];
if (pipe(fdin) == -1 || pipe(fdout) == -1) {
error("cannot create pipe (%s).\n", strerror(errno));
/*NOTREACHED*/
}
switch (fork()) {
case 0: /* child */
(void) close(0);
(void) dup(fdin[0]);
(void) close(fdin[0]);
(void) close(fdin[1]);
(void) close(1);
(void) dup(fdout[1]);
(void) close(fdout[0]);
(void) close(fdout[1]);
if (compr[method].silent)
(void) close(2);
execvp(compr[method].argv[0], compr[method].argv);
error("could not execute `%s' (%s).\n",
compr[method].argv[0], strerror(errno));
/*NOTREACHED*/
case -1:
error("could not fork (%s).\n", strerror(errno));
/*NOTREACHED*/
default: /* parent */
(void) close(fdin[0]);
(void) close(fdout[1]);
if (write(fdin[1], old, n) != n) {
error("write failed (%s).\n", strerror(errno));
/*NOTREACHED*/
}
(void) close(fdin[1]);
if ((*newch = (unsigned char *) malloc(n)) == NULL) {
error("out of memory.\n");
/*NOTREACHED*/
}
if ((n = read(fdout[0], *newch, n)) <= 0) {
free(*newch);
error("read failed (%s).\n", strerror(errno));
/*NOTREACHED*/
}
(void) close(fdout[0]);
(void) wait(NULL);
return n;
}
}

View file

@ -1,72 +1,351 @@
.\" Copyright (c) 1990, 1993, 1994
.\" The Regents of the University of California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)file.1 8.2 (Berkeley) 3/31/94
.\"
.Dd March 31, 1994
.Dt FILE 1
.Os
.Sh NAME
.Nm file
.Nd identify file content
.Sh SYNOPSIS
.Nm file
.Op Fl h
.Ar file ...
.Sh DESCRIPTION
.Nm File
tests the specified files and attempts to classify them.
If a file is a text file,
it attempts to determine the type of text (e.g.
.Xr csh 1
commands or C source code).
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl h
If a symbolic link is specified, identify the file as a symbolic
link.
By default, symbolic links are only identified if they reference
non-existent files.
.El
.Sh COMPATIBILITY
Previous implementations of the
.Nm file
utility did not follow symbolic links by default.
.Sh BUGS
As many tests are used and
.Nm file
stops testing on the first successful one, it can often make mistakes.
.Sh HISTORY
A
.Nm file
command appeared in
.At v6 .
.TH FILE 1 "Copyright but distributable"
.\# $Id: file.man,v 1.23 1993/09/24 18:50:48 christos Exp $
.SH NAME
.I file
\- determine file type
.SH SYNOPSIS
.B file
[
.B \-c
]
[
.B \-z
]
[
.B \-L
]
[
.B \-f
namefile ]
[
.B \-m
magicfile ]
file ...
.SH DESCRIPTION
.I File
tests each argument in an attempt to classify it.
There are three sets of tests, performed in this order:
filesystem tests, magic number tests, and language tests.
The
.I first
test that succeeds causes the file type to be printed.
.PP
The type printed will usually contain one of the words
.B text
(the file contains only ASCII characters and is
probably safe to read on an ASCII terminal),
.B executable
(the file contains the result of compiling a program
in a form understandable to some \s-1UNIX\s0 kernel or another),
or
.B data
meaning anything else (data is usually `binary' or non-printable).
Exceptions are well-known file formats (core files, tar archives)
that are known to contain binary data.
When modifying the file
.I __MAGIC__
or the program itself,
.B "preserve these keywords" .
People depend on knowing that all the readable files in a directory
have the word ``text'' printed.
Don't do as Berkeley did \- change ``shell commands text''
to ``shell script''.
.PP
The filesystem tests are based on examining the return from a
.IR stat (2)
system call.
The program checks to see if the file is empty,
or if it's some sort of special file.
Any known file types appropriate to the system you are running on
(sockets, symbolic links, or named pipes (FIFOs) on those systems that
implement them)
are intuited if they are defined in
the system header file
.BR sys/stat.h .
.PP
The magic number tests are used to check for files with data in
particular fixed formats.
The canonical example of this is a binary executable (compiled program)
.B a.out
file, whose format is defined in
.B a.out.h
and possibly
.B exec.h
in the standard include directory.
These files have a `magic number' stored in a particular place
near the beginning of the file that tells the \s-1UNIX\s0 operating system
that the file is a binary executable, and which of several types thereof.
The concept of `magic number' has been applied by extension to data files.
Any file with some invariant identifier at a small fixed
offset into the file can usually be described in this way.
The information in these files is read from the magic file
.I __MAGIC__.
.PP
If an argument appears to be an
.SM ASCII
file,
.I file
attempts to guess its language.
The language tests look for particular strings (cf \fInames.h\fP)
that can appear anywhere in the first few blocks of a file.
For example, the keyword
.B .br
indicates that the file is most likely a troff input file,
just as the keyword
.B struct
indicates a C program.
These tests are less reliable than the previous
two groups, so they are performed last.
The language test routines also test for some miscellany
(such as
.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
.B \-z
tries to look inside compressed files.
.PP
The
.B \-c
option causes 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
.I namefile
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
.B \-L
option causes symlinks to be followed, as the like-named option in
.IR ls (1).
.SH FILES
.I __MAGIC__
\- default list of magic numbers
.SH SEE ALSO
.IR magic (__SECTION__)
\- description of magic file format.
.br
.IR Strings (1), " od" (1)
\- tools for examining non-textfiles.
.SH STANDARDS CONFORMANCE
This program is believed to exceed the System V Interface Definition
of FILE(CMD), as near as one can determine from the vague language
contained therein.
Its behaviour is mostly compatible with the System V program of the same name.
This version knows more magic, however, so it will produce
different (albeit more accurate) output in many cases.
.PP
The one significant difference
between this version and System V
is that this version treats any white space
as a delimiter, so that spaces in pattern strings must be escaped.
For example,
.br
>10 string language impress\ (imPRESS data)
.br
in an existing magic file would have to be changed to
.br
>10 string language\e impress (imPRESS data)
.br
In addition, in this version, if a pattern string contains a backslash,
it must be escaped. For example
.br
0 string \ebegindata Andrew Toolkit document
.br
in an existing magic file would have to be changed to
.br
0 string \e\ebegindata Andrew Toolkit document
.br
.PP
SunOS releases 3.2 and later from Sun Microsystems include a
.IR file (1)
command derived from the System V one, but with some extensions.
My version differs from Sun's only in minor ways.
It includes the extension of the `&' operator, used as,
for example,
.br
>16 long&0x7fffffff >0 not stripped
.SH MAGIC DIRECTORY
The magic file entries have been collected from various sources,
mainly USENET, and contributed by various authors.
Christos Zoulas (address below) will collect additional
or corrected magic file entries.
A consolidation of magic file entries
will be distributed periodically.
.PP
The order of entries in the magic file is significant.
Depending on what system you are using, the order that
they are put together may be incorrect.
If your old
.I file
command uses a magic file,
keep the old magic file around for comparison purposes
(rename it to
.IR __MAGIC__.orig ).
.SH HISTORY
There has been a
.I file
command in every UNIX since at least Research Version 6
(man page dated January, 1975).
The System V version introduced one significant major change:
the external list of magic number types.
This slowed the program down slightly but made it a lot more flexible.
.PP
This program, based on the System V version,
was written by Ian Darwin without looking at anybody else's source code.
.PP
John Gilmore revised the code extensively, making it better than
the first version.
Geoff Collyer found several inadequacies
and provided some magic file entries.
The program has undergone continued evolution since.
.SH AUTHOR
Written by Ian F. Darwin, UUCP address {utzoo | ihnp4}!darwin!ian,
Internet address ian@sq.com,
postal address: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.
.PP
Altered by Rob McMahon, cudcv@warwick.ac.uk, 1989, to extend the `&' operator
from simple `x&y != 0' to `x&y op z'.
.PP
Altered by Guy Harris, guy@auspex.com, 1993, to:
.RS
.PP
put the ``old-style'' `&'
operator back the way it was, because 1) Rob McMahon's change broke the
previous style of usage, 2) the SunOS ``new-style'' `&' operator,
which this version of
.I file
supports, also handles `x&y op z', and 3) Rob's change wasn't documented
in any case;
.PP
put in multiple levels of `>';
.PP
put in ``beshort'', ``leshort'', etc. keywords to look at numbers in the
file in a specific byte order, rather than in the native byte order of
the process running
.IR file .
.RE
.PP
Changes by Ian Darwin and various authors including
Christos Zoulas (christos@ee.cornell.edu), 1990-1992.
.SH LEGAL NOTICE
Copyright (c) Ian F. Darwin, Toronto, Canada,
1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.
.PP
This software is not subject to and may not be made subject to any
license of the American Telephone and Telegraph Company, 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.
.PP
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.
.PP
Permission is granted to anyone to use this software for any purpose on
any computer system, and to alter it and redistribute it freely, subject
to the following restrictions:
.PP
1. The author is not responsible for the consequences of use of this
software, no matter how awful, even if they arise from flaws in it.
.PP
2. The origin of this software must not be misrepresented, either by
explicit claim or by omission. Since few users ever read sources,
credits must appear in the documentation.
.PP
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.
.PP
4. This notice may not be removed or altered.
.PP
A few support files (\fIgetopt\fP, \fIstrtok\fP)
distributed with this package
are by Henry Spencer and are subject to the same terms as above.
.PP
A few simple support files (\fIstrtol\fP, \fIstrchr\fP)
distributed with this package
are in the public domain; they are so marked.
.PP
The files
.I tar.h
and
.I is_tar.c
were written by John Gilmore from his public-domain
.I tar
program, and are not covered by the above restrictions.
.SH BUGS
There must be a better way to automate the construction of the Magic
file from all the glop in Magdir. What is it?
Better yet, the magic file should be compiled into binary (say,
.IR ndbm (3)
or, better yet, fixed-length ASCII strings
for use in heterogenous network environments) for faster startup.
Then the program would run as fast as the Version 7 program of the same name,
with the flexibility of the System V version.
.PP
.I File
uses several algorithms that favor speed over accuracy,
thus it can be misled about the contents of ASCII files.
.PP
The support for ASCII files (primarily for programming languages)
is simplistic, inefficient and requires recompilation to update.
.PP
There should be an ``else'' clause to follow a series of continuation lines.
.PP
The magic file and keywords should have regular expression support.
Their use of ASCII TAB as a field delimiter is ugly and makes
it hard to edit the files, but is entrenched.
.PP
It might be advisable to allow upper-case letters in keywords
for e.g., troff commands vs man page macros.
Regular expression support would make this easy.
.PP
The program doesn't grok \s-2FORTRAN\s0.
It should be able to figure \s-2FORTRAN\s0 by seeing some keywords which
appear indented at the start of line.
Regular expression support would make this easy.
.PP
The list of keywords in
.I ascmagic
probably belongs in the Magic file.
This could be done by using some keyword like `*' for the offset value.
.PP
Another optimisation would be to sort
the magic file so that we can just run down all the
tests for the first byte, first word, first long, etc, once we
have fetched it. Complain about conflicts in the magic file entries.
Make a rule that the magic entries sort based on file offset rather
than position within the magic file?
.PP
The program should provide a way to give an estimate
of ``how good'' a guess is.
We end up removing guesses (e.g. ``From '' as first 5 chars of file) because
they are not as good as other guesses (e.g. ``Newsgroups:'' versus
"Return-Path:"). Still, if the others don't pan out, it should be
possible to use the first guess.
.PP
This program is slower than some vendors' file commands.
.PP
This manual page, and particularly this section, is too long.
.SH AVAILABILITY
You can obtain the original author's latest version by anonymous FTP
on
.B tesla.ee.cornell.edu
in the directory
.BR /pub/file-X.YY.tar.gz

276
usr.bin/file/file.c Normal file
View file

@ -0,0 +1,276 @@
/*
* file - find type of a file or files - main program.
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits must appear in the documentation.
*
* 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.
*
* 4. This notice may not be removed or altered.
*/
#ifndef lint
static char *moduleid =
"@(#)$Id: file.c,v 1.29 1993/10/27 20:59:05 christos Exp $";
#endif /* lint */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/param.h> /* for MAXPATHLEN */
#include <sys/stat.h>
#include <fcntl.h> /* for open() */
#include <utime.h>
#include <unistd.h> /* for read() */
#include "file.h"
#ifdef S_IFLNK
# define USAGE "Usage: %s [-czL] [-f namefile] [-m magicfile] file...\n"
#else
# define USAGE "Usage: %s [-cz] [-f namefile] [-m magicfile] file...\n"
#endif
#ifndef MAGIC
# define MAGIC "/etc/magic"
#endif
int /* Global command-line options */
debug = 0, /* debugging */
lflag = 0, /* follow Symlinks (BSD only) */
zflag = 0; /* follow (uncompress) compressed files */
int /* Misc globals */
nmagic = 0; /* number of valid magic[]s */
struct magic *magic; /* array of magic entries */
char *magicfile = MAGIC;/* where magic be found */
char *progname; /* used throughout */
int lineno; /* line number in the magic file */
static void unwrap __P((char *fn));
/*
* main - parse arguments and handle options
*/
int
main(argc, argv)
int argc;
char *argv[];
{
int c;
int check = 0, didsomefiles = 0, errflg = 0, ret = 0;
if ((progname = strrchr(argv[0], '/')) != NULL)
progname++;
else
progname = argv[0];
while ((c = getopt(argc, argv, "cdf:Lm:z")) != EOF)
switch (c) {
case 'c':
++check;
break;
case 'd':
++debug;
break;
case 'f':
unwrap(optarg);
++didsomefiles;
break;
#ifdef S_IFLNK
case 'L':
++lflag;
break;
#endif
case 'm':
magicfile = optarg;
break;
case 'z':
zflag++;
break;
case '?':
default:
errflg++;
break;
}
if (errflg) {
(void) fprintf(stderr, USAGE, progname);
exit(2);
}
ret = apprentice(magicfile, check);
if (check)
exit(ret);
if (optind == argc) {
if (!didsomefiles) {
(void)fprintf(stderr, USAGE, progname);
exit(2);
}
}
else {
int i, wid, nw;
for (wid = 0, i = optind; i < argc; i++) {
nw = strlen(argv[i]);
if (nw > wid)
wid = nw;
}
for (; optind < argc; optind++)
process(argv[optind], wid);
}
return 0;
}
/*
* unwrap -- read a file of filenames, do each one.
*/
static void
unwrap(fn)
char *fn;
{
char buf[MAXPATHLEN];
FILE *f;
int wid = 0, cwid;
if ((f = fopen(fn, "r")) == NULL) {
error("Cannot open `%s' (%s).\n", fn, strerror(errno));
/*NOTREACHED*/
}
while (fgets(buf, MAXPATHLEN, f) != NULL) {
cwid = strlen(buf) - 1;
if (cwid > wid)
wid = cwid;
}
rewind(f);
while (fgets(buf, MAXPATHLEN, f) != NULL) {
buf[strlen(buf)-1] = '\0';
process(buf, wid);
}
(void) fclose(f);
}
/*
* process - process input file
*/
void
process(inname, wid)
const char *inname;
int wid;
{
int fd = 0;
static const char stdname[] = "standard input";
unsigned char buf[HOWMANY+1]; /* one extra for terminating '\0' */
struct utimbuf utbuf;
struct stat sb;
int nbytes = 0; /* number of bytes read from a datafile */
if (strcmp("-", inname) == 0) {
if (fstat(0, &sb)<0) {
error("cannot fstat `%s' (%s).\n", stdname,
strerror(errno));
/*NOTREACHED*/
}
inname = stdname;
}
if (wid > 0)
(void) printf("%s:%*s ", inname,
(int) (wid - strlen(inname)), "");
if (inname != stdname) {
/*
* first try judging the file based on its filesystem status
*/
if (fsmagic(inname, &sb) != 0) {
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);
if (sb.st_mode & 0111) ckfputs("executable, ", stdout);
ckfprintf(stdout, "can't read `%s' (%s).\n",
inname, strerror(errno));
return;
}
}
/*
* try looking at the first HOWMANY bytes
*/
if ((nbytes = read(fd, (char *)buf, HOWMANY)) == -1) {
error("read failed (%s).\n", strerror(errno));
/*NOTREACHED*/
}
if (nbytes == 0)
ckfputs("empty", stdout);
else {
buf[nbytes++] = '\0'; /* null-terminate it */
tryit(buf, nbytes, zflag);
}
if (inname != stdname) {
/*
* Try to restore access, modification times if read it.
*/
utbuf.actime = sb.st_atime;
utbuf.modtime = sb.st_mtime;
(void) utime(inname, &utbuf); /* don't care if loses */
(void) close(fd);
}
(void) putchar('\n');
}
void
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);
}

128
usr.bin/file/file.h Normal file
View file

@ -0,0 +1,128 @@
/*
* file.h - definitions for file(1) program
* @(#)$Id: file.h,v 1.19 1994/05/03 17:58:23 christos Exp $
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits must appear in the documentation.
*
* 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.
*
* 4. This notice may not be removed or altered.
*/
#define HOWMANY 8192 /* how much of the file to look at */
#define MAXMAGIS 1000 /* max entries in /etc/magic */
#define MAXDESC 50 /* max leng of text description */
#define MAXstring 32 /* max leng of "string" types */
struct magic {
short flag;
#define INDIR 1 /* if '>(...)' appears, */
#define UNSIGNED 2 /* comparison is unsigned */
short cont_level; /* level of ">" */
struct {
char type; /* byte short long */
long offset; /* offset from indirection */
} in;
long offset; /* offset to magic number */
unsigned char reln; /* relation (0=eq, '>'=gt, etc) */
char type; /* int, short, long or string. */
char vallen; /* length of string value, if any */
#define BYTE 1
#define SHORT 2
#define LONG 4
#define STRING 5
#define DATE 6
#define BESHORT 7
#define BELONG 8
#define BEDATE 9
#define LESHORT 10
#define LELONG 11
#define LEDATE 12
union VALUETYPE {
unsigned char b;
unsigned short h;
unsigned long l;
char s[MAXstring];
unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
unsigned char hl[4]; /* 2 bytes of a fixed-endian "long" */
} value; /* either number or string */
unsigned long mask; /* mask before comparison with value */
char nospflag; /* supress space character */
char desc[MAXDESC]; /* description */
};
#include <stdio.h> /* Include that here, to make sure __P gets defined */
#ifndef __P
# if __STDC__ || __cplusplus
# define __P(a) a
# else
# define __P(a) ()
# define const
# endif
#endif
extern int apprentice __P((char *, int));
extern int ascmagic __P((unsigned char *, int));
extern void error __P((const char *, ...));
extern void ckfputs __P((const char *, FILE *));
struct stat;
extern int fsmagic __P((const char *, struct stat *));
extern int is_compress __P((const unsigned char *, int *));
extern int is_tar __P((unsigned char *, int));
extern void magwarn __P((const char *, ...));
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 zmagic __P((unsigned char *, int));
extern void ckfprintf __P((FILE *, const char *, ...));
extern unsigned long signextend __P((struct magic *, unsigned long));
extern int errno; /* Some unixes don't define this.. */
extern char *progname; /* the program name */
extern char *magicfile; /* name of the magic file */
extern int lineno; /* current line number in magic file */
extern struct magic *magic; /* array of magic entries */
extern int nmagic; /* number of valid magic[]s */
extern int debug; /* enable debugging? */
extern int zflag; /* process compressed files? */
extern int lflag; /* follow symbolic links? */
extern int optind; /* From getopt(3) */
extern char *optarg;
#if !defined(__STDC__) || defined(sun) || defined(__sun__) || defined(__convex__)
extern int sys_nerr;
extern char *sys_errlist[];
#define strerror(e) \
(((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
#endif
#ifndef MAXPATHLEN
#define MAXPATHLEN 512
#endif

174
usr.bin/file/fsmagic.c Normal file
View file

@ -0,0 +1,174 @@
/*
* fsmagic - magic based on filesystem info - directory, special files, etc.
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits must appear in the documentation.
*
* 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.
*
* 4. This notice may not be removed or altered.
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#ifndef major /* if `major' not defined in types.h, */
#include <sys/sysmacros.h> /* try this one. */
#endif
#ifndef major /* still not defined? give up, manual intervention needed */
/* If cc tries to compile this, read and act on it. */
/* On most systems cpp will discard it automatically */
Congratulations, you have found a portability bug.
Please grep /usr/include/sys and edit the above #include
to point at the file that defines the "major" macro.
#endif /*major*/
#include "file.h"
#ifndef lint
static char *moduleid =
"@(#)$Id: fsmagic.c,v 1.22 1993/02/19 12:09:04 ian Exp $";
#endif /* lint */
int
fsmagic(fn, sb)
const char *fn;
struct stat *sb;
{
int ret = 0;
/*
* Fstat is cheaper but fails for files you don't have read perms on.
* On 4.2BSD and similar systems, use lstat() to identify symlinks.
*/
#ifdef S_IFLNK
if (!lflag)
ret = lstat(fn, sb);
else
#endif
ret = stat(fn, sb); /* don't merge into if; see "ret =" above */
if (ret) {
ckfprintf(stdout,
/* Yes, I do mean stdout. */
/* No \n, caller will provide. */
"can't stat `%s' (%s).", fn, strerror(errno));
return 1;
}
if (sb->st_mode & S_ISUID) ckfputs("setuid ", stdout);
if (sb->st_mode & S_ISGID) ckfputs("setgid ", stdout);
if (sb->st_mode & S_ISVTX) ckfputs("sticky ", stdout);
switch (sb->st_mode & S_IFMT) {
case S_IFDIR:
ckfputs("directory", stdout);
return 1;
case S_IFCHR:
(void) printf("character special (%d/%d)",
major(sb->st_rdev), minor(sb->st_rdev));
return 1;
case S_IFBLK:
(void) printf("block special (%d/%d)",
major(sb->st_rdev), minor(sb->st_rdev));
return 1;
/* TODO add code to handle V7 MUX and Blit MUX files */
#ifdef S_IFIFO
case S_IFIFO:
ckfputs("fifo (named pipe)", stdout);
return 1;
#endif
#ifdef S_IFLNK
case S_IFLNK:
{
char buf[BUFSIZ+4];
register int nch;
struct stat tstatbuf;
if ((nch = readlink(fn, buf, BUFSIZ-1)) <= 0) {
ckfprintf(stdout, "unreadable symlink (%s).",
strerror(errno));
return 1;
}
buf[nch] = '\0'; /* readlink(2) forgets this */
/* If broken symlink, say so and quit early. */
if (*buf == '/') {
if (stat(buf, &tstatbuf) < 0) {
ckfprintf(stdout,
"broken symbolic link to %s", buf);
return 1;
}
}
else {
char *tmp;
char buf2[BUFSIZ+BUFSIZ+4];
if ((tmp = strrchr(fn, '/')) == NULL) {
tmp = buf; /* in current directory anyway */
}
else {
strcpy (buf2, fn); /* take directory part */
buf2[tmp-fn+1] = '\0';
strcat (buf2, buf); /* plus (relative) symlink */
tmp = buf2;
}
if (stat(tmp, &tstatbuf) < 0) {
ckfprintf(stdout,
"broken symbolic link to %s", buf);
return 1;
}
}
/* Otherwise, handle it. */
if (lflag) {
process(buf, strlen(buf));
return 1;
} else { /* just print what it points to */
ckfputs("symbolic link to ", stdout);
ckfputs(buf, stdout);
}
}
return 1;
#endif
#ifdef S_IFSOCK
case S_IFSOCK:
ckfputs("socket", stdout);
return 1;
#endif
case S_IFREG:
break;
default:
error("invalid mode 0%o.\n", sb->st_mode);
/*NOTREACHED*/
}
/*
* regular file, check next possibility
*/
if (sb->st_size == 0) {
ckfputs("empty", stdout);
return 1;
}
return 0;
}

100
usr.bin/file/is_tar.c Normal file
View file

@ -0,0 +1,100 @@
/*
* is_tar() -- figure out whether file is a tar archive.
*
* Stolen (by the author!) from the public domain tar program:
* Pubic Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
*
* @(#)list.c 1.18 9/23/86 Public Domain - gnu
* $Id: is_tar.c,v 1.8 1993/09/16 21:09:35 christos Exp $
*
* Comments changed and some code/comments reformatted
* for file command by Ian Darwin.
*/
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include "tar.h"
#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
#if defined(__STDC__) || defined(__cplusplus)
static long from_oct(int, char*); /* Decode octal number */
#else
static long from_oct();
#endif
/*
* Return
* 0 if the checksum is bad (i.e., probably not a tar archive),
* 1 for old UNIX tar file,
* 2 for Unix Std (POSIX) tar file.
*/
int
is_tar(buf, nbytes)
unsigned char *buf;
int nbytes;
{
register union record *header = (union record *)buf;
register int i;
register long sum, recsum;
register char *p;
if (nbytes < sizeof(union record))
return 0;
recsum = from_oct(8, header->header.chksum);
sum = 0;
p = header->charptr;
for (i = sizeof(union record); --i >= 0;) {
/*
* We can't use unsigned char here because of old compilers,
* e.g. V7.
*/
sum += 0xFF & *p++;
}
/* Adjust checksum to count the "chksum" field as blanks. */
for (i = sizeof(header->header.chksum); --i >= 0;)
sum -= 0xFF & header->header.chksum[i];
sum += ' '* sizeof header->header.chksum;
if (sum != recsum)
return 0; /* Not a tar archive */
if (0==strcmp(header->header.magic, TMAGIC))
return 2; /* Unix Standard tar archive */
return 1; /* Old fashioned tar archive */
}
/*
* Quick and dirty octal conversion.
*
* Result is -1 if the field is invalid (all blank, or nonoctal).
*/
static long
from_oct(digs, where)
register int digs;
register char *where;
{
register long value;
while (isspace(*where)) { /* Skip spaces */
where++;
if (--digs <= 0)
return -1; /* All blank field */
}
value = 0;
while (digs > 0 && isodigit(*where)) { /* Scan til nonoctal */
value = (value << 3) | (*where++ - '0');
--digs;
}
if (digs > 0 && *where && !isspace(*where))
return -1; /* Ended on non-space/nul */
return value;
}

194
usr.bin/file/magic.5 Normal file
View file

@ -0,0 +1,194 @@
.TH MAGIC __SECTION__ "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)
command identifies the type of a file using,
among other tests,
a test for whether the file begins with a certain
.IR "magic number" .
The file
.B __MAGIC__
specifies what magic numbers are to be tested for,
what message to print if a particular magic number is found,
and additional information to extract from the file.
.PP
Each line of the file specifies a test to be performed.
A test compares the data starting at a particular offset
in the file with a 1-byte, 2-byte, or 4-byte numeric value or
a string. If the test succeeds, a message is printed.
The line consists of the following fields:
.IP offset \w'message'u+2n
A number specifying the offset, in bytes, into the file of the data
which is to be tested.
.IP type
The type of the data to be tested. The possible values are:
.RS
.IP byte \w'message'u+2n
A one-byte value.
.IP short
A two-byte value (on most systems) in this machine's native byte order.
.IP long
A four-byte value (on most systems) in this machine's native byte order.
.IP string
A string of bytes.
.IP date
A four-byte value interpreted as a unix date.
.IP beshort
A two-byte value (on most systems) in big-endian byte order.
.IP belong
A four-byte value (on most systems) in big-endian byte order.
.IP bedate
A four-byte value (on most systems) in big-endian byte order,
interpreted as a unix date.
.IP leshort
A two-byte value (on most systems) in little-endian byte order.
.IP lelong
A four-byte value (on most systems) in little-endian byte order.
.IP ledate
A four-byte value (on most systems) in little-endian byte order,
interpreted as a unix date.
.RE
.PP
The numeric types may optionally be followed by
.B &
and a numeric value,
to specify that the value is to be AND'ed with the
numeric value before any comparisons are done. Prepending a
.B u
to the type indicates that ordered comparisons should be unsigned.
.IP test
The value to be compared with the value from the file. If the type is
numeric, this value
is specified in C form; if it is a string, it is specified as a C string
with the usual escapes permitted (e.g. \en for new-line).
.IP
Numeric values
may be preceded by a character indicating the operation to be performed.
It may be
.BR = ,
to specify that the value from the file must equal the specified value,
.BR < ,
to specify that the value from the file must be less than the specified
value,
.BR > ,
to specify that the value from the file must be greater than the specified
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.
.IP
Numeric values are specified in C form; e.g.
.B 13
is decimal,
.B 013
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.
The operators
.BR = ,
.B <
and
.B >
(but not
.BR & )
can be applied to strings.
The length used for matching is that of the string argument
in the magic file. This means that a line can match any string, and
then presumably print that string, by doing
.B >\e0
(because all strings are greater than the null string).
.IP message
The message to be printed if the comparison succeeds. If the string
contains a
.IR printf (3S)
format specification, the value from the file (with any specified masking
performed) is printed using the message as the format string.
.PP
Some file formats contain additional information which is to be printed
along with the file type. A line which begins with the character
.B >
indicates additional tests and messages to be printed. The number of
.B >
on the line indicates the level of the test; a line with no
.B >
at the beginning is considered to be at level 0.
Each line at level
.IB n \(pl1
is under the control of the line at level
.IB n
most closely preceding it in the magic file.
If the test on a line at level
.I n
succeeds, the tests specified in all the subsequent lines at level
.IB n \(pl1
are performed, and the messages printed if the tests succeed. The next
line at level
.I n
terminates this.
If the first character following the last
.B >
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
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 ]).
The value of
.I x
is used as an offset in the file. A byte, short or long is read at that offset
depending on the
.B [bsl]
type specifier. To that number the value of
.I y
is added and the result is used as an offset in the file. The default type
if one is not specified is long.
.SH BUGS
The formats
.IR long ,
.IR belong ,
.IR lelong ,
.IR short ,
.IR beshort ,
.IR leshort ,
.IR date ,
.IR bedate ,
and
.I ledate
are system-dependant; 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.
.PP
There is (currently) no support for specified-endian data to be used in
indirect offsets.
.SH SEE ALSO
.IR file (1)
\- the command that reads this file.
.\"
.\" From: guy@sun.uucp (Guy Harris)
.\" Newsgroups: net.bugs.usg
.\" Subject: /etc/magic's format isn't well documented
.\" Message-ID: <2752@sun.uucp>
.\" Date: 3 Sep 85 08:19:07 GMT
.\" Organization: Sun Microsystems, Inc.
.\" Lines: 136
.\"
.\" Here's a manual page for the format accepted by the "file" made by adding
.\" 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 $

90
usr.bin/file/names.h Normal file
View file

@ -0,0 +1,90 @@
/*
* Names.h - names and types used by ascmagic in file(1).
* These tokens are here because they can appear anywhere in
* the first HOWMANY bytes, while tokens in /etc/magic must
* appear at fixed offsets into the file. Don't make HOWMANY
* too high unless you have a very fast CPU.
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* See LEGAL.NOTICE
*
* $Id: names.h,v 1.11 1993/09/16 21:14:20 christos Exp $
*/
/* these types are used to index the table 'types': keep em in sync! */
#define L_C 0 /* first and foremost on UNIX */
#define L_FORT 1 /* the oldest one */
#define L_MAKE 2 /* Makefiles */
#define L_PLI 3 /* PL/1 */
#define L_MACH 4 /* some kinda assembler */
#define L_ENG 5 /* English */
#define L_PAS 6 /* Pascal */
#define L_MAIL 7 /* Electronic mail */
#define L_NEWS 8 /* Usenet Netnews */
static char *types[] = {
"c program text",
"fortran program text",
"make commands text" ,
"pl/1 program text",
"assembler program text",
"English text",
"pascal program text",
"mail text",
"news text",
"can't happen error on names.h/types",
0};
static struct names {
char *name;
short type;
} 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. */
{"#include", L_C},
{"char", L_C},
{"The", L_ENG},
{"the", L_ENG},
{"double", L_C},
{"extern", L_C},
{"float", L_C},
{"real", L_C},
{"struct", L_C},
{"union", L_C},
{"CFLAGS", L_MAKE},
{"LDFLAGS", L_MAKE},
{"all:", L_MAKE},
{".PRECIOUS", L_MAKE},
/* Too many files of text have these words in them. Find another way
* to recognize Fortrash.
*/
#ifdef NOTDEF
{"subroutine", L_FORT},
{"function", L_FORT},
{"block", L_FORT},
{"common", L_FORT},
{"dimension", L_FORT},
{"integer", L_FORT},
{"data", L_FORT},
#endif /*NOTDEF*/
{".ascii", L_MACH},
{".asciiz", L_MACH},
{".byte", L_MACH},
{".even", L_MACH},
{".globl", L_MACH},
{"clr", L_MACH},
{"(input,", L_PAS},
{"dcl", L_PLI},
{"Received:", L_MAIL},
{">From", L_MAIL},
{"Return-Path:",L_MAIL},
{"Cc:", L_MAIL},
{"Newsgroups:", L_NEWS},
{"Path:", L_NEWS},
{"Organization:",L_NEWS},
{NULL, 0}
};
#define NNAMES ((sizeof(names)/sizeof(struct names)) - 1)

53
usr.bin/file/patchlevel.h Normal file
View file

@ -0,0 +1,53 @@
#define FILE_VERSION_MAJOR 3
#define patchlevel 14
/*
* Patchlevel file for Ian Darwin's MAGIC command.
* $Id: patchlevel.h,v 1.14 1994/05/03 17:58:23 christos Exp $
*
* $Log: patchlevel.h,v $
* Revision 1.14 1994/05/03 17:58:23 christos
* changes from mycroft@gnu.ai.mit.edu (Charles Hannum) for unsigned
*
* Revision 1.13 1994/01/21 01:27:01 christos
* Fixed null termination bug from Don Seeley at BSDI in ascmagic.c
*
* Revision 1.12 1993/10/27 20:59:05 christos
* Changed -z flag to understand gzip format too.
* Moved builtin compression detection to a table, and move
* the compress magic entry out of the source.
* Made printing of numbers unsigned, and added the mask to it.
* Changed the buffer size to 8k, because gzip will refuse to
* unzip just a few bytes.
*
* Revision 1.11 1993/09/24 18:49:06 christos
* Fixed small bug in softmagic.c introduced by
* copying the data to be examined out of the input
* buffer. Changed the Makefile to use sed to create
* the correct man pages.
*
* Revision 1.10 1993/09/23 21:56:23 christos
* Passed purify. Fixed indirections. Fixed byte order printing.
* Fixed segmentation faults caused by referencing past the end
* of the magic buffer. Fixed bus errors caused by referencing
* unaligned shorts or longs.
*
* Revision 1.9 1993/03/24 14:23:40 ian
* Batch of minor changes from several contributors.
*
* Revision 1.8 93/02/19 15:01:26 ian
* Numerous changes from Guy Harris too numerous to mention but including
* byte-order independance, fixing "old-style masking", etc. etc. A bugfix
* for broken symlinks from martin@@d255s004.zfe.siemens.de.
*
* Revision 1.7 93/01/05 14:57:27 ian
* Couple of nits picked by Christos (again, thanks).
*
* Revision 1.6 93/01/05 13:51:09 ian
* Lotsa work on the Magic directory.
*
* Revision 1.5 92/09/14 14:54:51 ian
* Fix a tiny null-pointer bug in previous fix for tar archive + uncompress.
*
*/

204
usr.bin/file/print.c Normal file
View file

@ -0,0 +1,204 @@
/*
* print.c - debugging printout routines
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone
* and Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on
* any computer system, and to alter it and redistribute it freely, subject
* to the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources,
* credits must appear in the documentation.
*
* 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.
*
* 4. This notice may not be removed or altered.
*/
#include <stdio.h>
#include <errno.h>
#include <string.h>
#if __STDC__
# include <stdarg.h>
#else
# include <varargs.h>
#endif
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "file.h"
#ifndef lint
static char *moduleid =
"@(#)$Id: print.c,v 1.21 1994/05/03 17:58:23 christos Exp $";
#endif /* lint */
#define SZOF(a) (sizeof(a) / sizeof(a[0]))
void
mdump(m)
struct magic *m;
{
static char *typ[] = { "invalid", "byte", "short", "invalid",
"long", "string", "date", "beshort",
"belong", "bedate", "leshort", "lelong",
"ledate" };
(void) fputc('[', stderr);
(void) fprintf(stderr, ">>>>>>>> %d" + 8 - (m->cont_level & 7),
m->offset);
if (m->flag & INDIR)
(void) fprintf(stderr, "(%s,%d),",
(m->in.type >= 0 && m->in.type < SZOF(typ)) ?
typ[(unsigned char) m->in.type] :
"*bad*",
m->in.offset);
(void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
(m->type >= 0 && m->type < SZOF(typ)) ?
typ[(unsigned char) m->type] :
"*bad*");
if (m->mask != ~0L)
(void) fprintf(stderr, " & %.8x", m->mask);
(void) fprintf(stderr, ",%c", m->reln);
if (m->reln != 'x') {
switch (m->type) {
case BYTE:
case SHORT:
case LONG:
case LESHORT:
case LELONG:
case BESHORT:
case BELONG:
(void) fprintf(stderr, "%d", m->value.l);
break;
case STRING:
showstr(stderr, m->value.s, -1);
break;
case DATE:
case LEDATE:
case BEDATE:
{
char *rt, *pp = ctime((time_t*) &m->value.l);
if ((rt = strchr(pp, '\n')) != NULL)
*rt = '\0';
(void) fprintf(stderr, "%s,", pp);
if (rt)
*rt = '\n';
}
break;
default:
(void) fputs("*bad*", stderr);
break;
}
}
(void) fprintf(stderr, ",\"%s\"]\n", m->desc);
}
/*
* ckfputs - futs, but with error checking
* ckfprintf - fprintf, but with error checking
*/
void
ckfputs(str, fil)
const char *str;
FILE *fil;
{
if (fputs(str,fil) == EOF)
error("write failed.\n");
}
/*VARARGS*/
void
#if __STDC__
ckfprintf(FILE *f, const char *fmt, ...)
#else
ckfprintf(va_alist)
va_dcl
#endif
{
va_list va;
#if __STDC__
va_start(va, fmt);
#else
FILE *f;
const char *fmt;
va_start(va);
f = va_arg(va, FILE *);
fmt = va_arg(va, const char *);
#endif
(void) vfprintf(f, fmt, va);
if (ferror(f))
error("write failed.\n");
va_end(va);
}
/*
* error - print best error message possible and exit
*/
/*VARARGS*/
void
#if __STDC__
error(const char *f, ...)
#else
error(va_alist)
va_dcl
#endif
{
va_list va;
#if __STDC__
va_start(va, f);
#else
const char *f;
va_start(va);
f = va_arg(va, const char *);
#endif
/* cuz we use stdout for most, stderr here */
(void) fflush(stdout);
if (progname != NULL)
(void) fprintf(stderr, "%s: ", progname);
(void) vfprintf(stderr, f, va);
va_end(va);
exit(1);
}
/*VARARGS*/
void
#if __STDC__
magwarn(const char *f, ...)
#else
magwarn(va_alist)
va_dcl
#endif
{
va_list va;
#if __STDC__
va_start(va, f);
#else
const char *f;
va_start(va);
f = va_arg(va, const char *);
#endif
/* cuz we use stdout for most, stderr here */
(void) fflush(stdout);
if (progname != NULL)
(void) fprintf(stderr, "%s: %s, %d: ",
progname, magicfile, lineno);
(void) vfprintf(stderr, f, va);
va_end(va);
fputc('\n', stderr);
}

Some files were not shown because too many files have changed in this diff Show more