Bring in file 3.14 by Ian Darwin (and Christos Zoulas)
The following files were moved to different names: - file.man -> file.1 - magic.man -> magic.5 The following file was removed: - Magdir/Makefile
This commit is contained in:
parent
1e5214367d
commit
8d1a4c7e86
37
usr.bin/file/LEGAL.NOTICE
Normal file
37
usr.bin/file/LEGAL.NOTICE
Normal 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
33
usr.bin/file/MAINT
Normal 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
|
5
usr.bin/file/Magdir/Header
Normal file
5
usr.bin/file/Magdir/Header
Normal 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.
|
3
usr.bin/file/Magdir/Localstuff
Normal file
3
usr.bin/file/Magdir/Localstuff
Normal 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.
|
15
usr.bin/file/Magdir/alliant
Normal file
15
usr.bin/file/Magdir/alliant
Normal 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
4
usr.bin/file/Magdir/apl
Normal file
@ -0,0 +1,4 @@
|
||||
#
|
||||
# magic.apl:
|
||||
#
|
||||
0 long 0100554 APL workspace (Ken's original?)
|
10
usr.bin/file/Magdir/apple
Normal file
10
usr.bin/file/Magdir/apple
Normal 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
104
usr.bin/file/Magdir/ar
Normal 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
3
usr.bin/file/Magdir/arc
Normal file
@ -0,0 +1,3 @@
|
||||
0 byte 26 'arc' archive
|
||||
>1 byte 0 (empty)
|
||||
>1 byte 1 (old format)
|
15
usr.bin/file/Magdir/archive
Normal file
15
usr.bin/file/Magdir/archive
Normal 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
38
usr.bin/file/Magdir/att3b
Normal 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
43
usr.bin/file/Magdir/audio
Normal 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
16
usr.bin/file/Magdir/blit
Normal 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
2
usr.bin/file/Magdir/bsdi
Normal file
@ -0,0 +1,2 @@
|
||||
# BSDI BSD/386
|
||||
0 long 0314 BSD/386 demand paged (first page unmapped) pure executable
|
3
usr.bin/file/Magdir/c-lang
Normal file
3
usr.bin/file/Magdir/c-lang
Normal 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
4
usr.bin/file/Magdir/chi
Normal file
@ -0,0 +1,4 @@
|
||||
# ChiWriter files
|
||||
0 string \\1cw\ ChiWriter file
|
||||
>5 string >\0 version %s
|
||||
0 string \\1cw ChiWriter file
|
63
usr.bin/file/Magdir/clipper
Normal file
63
usr.bin/file/Magdir/clipper
Normal 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
|
40
usr.bin/file/Magdir/commands
Normal file
40
usr.bin/file/Magdir/commands
Normal 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
|
40
usr.bin/file/Magdir/compress
Normal file
40
usr.bin/file/Magdir/compress
Normal 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
|
4
usr.bin/file/Magdir/convex
Normal file
4
usr.bin/file/Magdir/convex
Normal 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
16
usr.bin/file/Magdir/cpio
Normal 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)
|
8
usr.bin/file/Magdir/diamond
Normal file
8
usr.bin/file/Magdir/diamond
Normal 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
6
usr.bin/file/Magdir/diff
Normal 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
|
4
usr.bin/file/Magdir/ditroff
Normal file
4
usr.bin/file/Magdir/ditroff
Normal 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
80
usr.bin/file/Magdir/dump
Normal 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
44
usr.bin/file/Magdir/elf
Normal 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
|
||||
|
20
usr.bin/file/Magdir/encore
Normal file
20
usr.bin/file/Magdir/encore
Normal 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
|
1
usr.bin/file/Magdir/floppy.raw
Normal file
1
usr.bin/file/Magdir/floppy.raw
Normal file
@ -0,0 +1 @@
|
||||
0 string \366\366\366\366 Formatted floppy w/ no filesystem data
|
3
usr.bin/file/Magdir/fonts
Normal file
3
usr.bin/file/Magdir/fonts
Normal 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
28
usr.bin/file/Magdir/frame
Normal 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
21
usr.bin/file/Magdir/gzip
Normal 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
191
usr.bin/file/Magdir/hp
Normal 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(,);
|
19
usr.bin/file/Magdir/ibm370
Normal file
19
usr.bin/file/Magdir/ibm370
Normal 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
|
||||
|
17
usr.bin/file/Magdir/ibm6000
Normal file
17
usr.bin/file/Magdir/ibm6000
Normal 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
5
usr.bin/file/Magdir/iff
Normal 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
|
14
usr.bin/file/Magdir/imagen
Normal file
14
usr.bin/file/Magdir/imagen
Normal 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 %
|
69
usr.bin/file/Magdir/images
Normal file
69
usr.bin/file/Magdir/images
Normal 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
31
usr.bin/file/Magdir/intel
Normal 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
|
7
usr.bin/file/Magdir/interleaf
Normal file
7
usr.bin/file/Magdir/interleaf
Normal 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
57
usr.bin/file/Magdir/iris
Normal 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
|
23
usr.bin/file/Magdir/ispell
Normal file
23
usr.bin/file/Magdir/ispell
Normal 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
3
usr.bin/file/Magdir/lex
Normal 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
6
usr.bin/file/Magdir/lif
Normal file
@ -0,0 +1,6 @@
|
||||
#
|
||||
# magic.lif:
|
||||
#
|
||||
# XXX - byte order?
|
||||
#
|
||||
0 short 0x8000 lif file
|
11
usr.bin/file/Magdir/linux
Normal file
11
usr.bin/file/Magdir/linux
Normal 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
|
1
usr.bin/file/Magdir/magic
Normal file
1
usr.bin/file/Magdir/magic
Normal file
@ -0,0 +1 @@
|
||||
0 string #\ Magic magic text file for file(1) cmd
|
13
usr.bin/file/Magdir/mail.news
Normal file
13
usr.bin/file/Magdir/mail.news
Normal 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
|
68
usr.bin/file/Magdir/microsoft
Normal file
68
usr.bin/file/Magdir/microsoft
Normal 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
8
usr.bin/file/Magdir/mips
Normal 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
|
4
usr.bin/file/Magdir/mirage
Normal file
4
usr.bin/file/Magdir/mirage
Normal file
@ -0,0 +1,4 @@
|
||||
#
|
||||
# XXX - byte order?
|
||||
#
|
||||
0 long 31415 Mirage Assembler m.out executable
|
7
usr.bin/file/Magdir/mkid
Normal file
7
usr.bin/file/Magdir/mkid
Normal 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
1
usr.bin/file/Magdir/mmdf
Normal file
@ -0,0 +1 @@
|
||||
0 string \001\001\001\001 MMDF mailbox
|
28
usr.bin/file/Magdir/motorola
Normal file
28
usr.bin/file/Magdir/motorola
Normal 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
|
8
usr.bin/file/Magdir/ms-dos
Normal file
8
usr.bin/file/Magdir/ms-dos
Normal 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
47
usr.bin/file/Magdir/ncr
Normal 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
117
usr.bin/file/Magdir/netbsd
Normal 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
5
usr.bin/file/Magdir/news
Normal 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
4
usr.bin/file/Magdir/pbm
Normal file
@ -0,0 +1,4 @@
|
||||
#
|
||||
# XXX - byte order?
|
||||
#
|
||||
0 short 0x2a17 "compact bitmap" format (Poskanzer)
|
22
usr.bin/file/Magdir/pdp
Normal file
22
usr.bin/file/Magdir/pdp
Normal 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
10
usr.bin/file/Magdir/pgp
Normal 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
|
4
usr.bin/file/Magdir/pkgadd
Normal file
4
usr.bin/file/Magdir/pkgadd
Normal file
@ -0,0 +1,4 @@
|
||||
#
|
||||
# SysV R4 PKG Datastreams:
|
||||
#
|
||||
0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)
|
16
usr.bin/file/Magdir/plus5
Normal file
16
usr.bin/file/Magdir/plus5
Normal 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
|
17
usr.bin/file/Magdir/postscript
Normal file
17
usr.bin/file/Magdir/postscript
Normal 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
|
6
usr.bin/file/Magdir/psdbms
Normal file
6
usr.bin/file/Magdir/psdbms
Normal 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
|
10
usr.bin/file/Magdir/pyramid
Normal file
10
usr.bin/file/Magdir/pyramid
Normal 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
19
usr.bin/file/Magdir/rle
Normal 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
2
usr.bin/file/Magdir/sc
Normal file
@ -0,0 +1,2 @@
|
||||
# for SC
|
||||
38 string Spreadsheet sc file
|
17
usr.bin/file/Magdir/sccs
Normal file
17
usr.bin/file/Magdir/sccs
Normal 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.
|
9
usr.bin/file/Magdir/sendmail
Normal file
9
usr.bin/file/Magdir/sendmail
Normal 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
|
30
usr.bin/file/Magdir/sequent
Normal file
30
usr.bin/file/Magdir/sequent
Normal 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
6
usr.bin/file/Magdir/sgml
Normal 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
|
27
usr.bin/file/Magdir/softquad
Normal file
27
usr.bin/file/Magdir/softquad
Normal 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
84
usr.bin/file/Magdir/sun
Normal 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'
|
12
usr.bin/file/Magdir/sunraster
Normal file
12
usr.bin/file/Magdir/sunraster
Normal 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
|
8
usr.bin/file/Magdir/terminfo
Normal file
8
usr.bin/file/Magdir/terminfo
Normal 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
25
usr.bin/file/Magdir/tex
Normal 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)
|
6
usr.bin/file/Magdir/troff
Normal file
6
usr.bin/file/Magdir/troff
Normal 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
|
||||
|
5
usr.bin/file/Magdir/typeset
Normal file
5
usr.bin/file/Magdir/typeset
Normal 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)
|
35
usr.bin/file/Magdir/unknown
Normal file
35
usr.bin/file/Magdir/unknown
Normal 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
|
3
usr.bin/file/Magdir/uuencode
Normal file
3
usr.bin/file/Magdir/uuencode
Normal 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
|
5
usr.bin/file/Magdir/varied.out
Normal file
5
usr.bin/file/Magdir/varied.out
Normal 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
33
usr.bin/file/Magdir/vax
Normal 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
30
usr.bin/file/Magdir/visx
Normal 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
9
usr.bin/file/Magdir/x11
Normal 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
11
usr.bin/file/Magdir/zilog
Normal 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)
|
||||
|
9
usr.bin/file/Magdir/zyxel
Normal file
9
usr.bin/file/Magdir/zyxel
Normal 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
159
usr.bin/file/Makefile
Normal 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
76
usr.bin/file/PORTING
Normal 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
79
usr.bin/file/README
Normal 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
551
usr.bin/file/apprentice.c
Normal 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
120
usr.bin/file/ascmagic.c
Normal 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
125
usr.bin/file/compress.c
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
276
usr.bin/file/file.c
Normal 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
128
usr.bin/file/file.h
Normal 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
174
usr.bin/file/fsmagic.c
Normal 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
100
usr.bin/file/is_tar.c
Normal 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
194
usr.bin/file/magic.5
Normal 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
90
usr.bin/file/names.h
Normal 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
53
usr.bin/file/patchlevel.h
Normal 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
204
usr.bin/file/print.c
Normal 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
Loading…
Reference in New Issue
Block a user