Virgin import of Christos Zoulas's FILE 3.39.

This commit is contained in:
David E. O'Brien 2002-09-16 05:54:26 +00:00
parent 649d615c25
commit 8ed12636aa
60 changed files with 2782 additions and 972 deletions

32
contrib/file/Magdir/acorn Normal file
View File

@ -0,0 +1,32 @@
#------------------------------------------------------------------------------
# acorn: file(1) magic for files found on Acorn systems
#
# RISC OS Chunk File Format
# From RISC OS Programmer's Reference Manual, Appendix D
# We guess the file type from the type of the first chunk.
0 lelong 0xc3cbc6c5 RISC OS Chunk data
>12 string OBJ_ \b, AOF object
>12 string LIB_ \b, ALF library
# RISC OS AIF, contains "SWI OS_Exit" at offset 16.
16 lelong 0xef000011 RISC OS AIF executable
# RISC OS Draw files
# From RISC OS Programmer's Reference Manual, Appendix E
0 string Draw RISC OS Draw file data
# RISC OS new format font files
# From RISC OS Programmer's Reference Manual, Appendix E
0 string FONT\0 RISC OS outline font data,
>5 byte x version %d
0 string FONT\1 RISC OS 1bpp font data,
>5 byte x version %d
0 string FONT\4 RISC OS 4bpp font data
>5 byte x version %d
# RISC OS Music files
# From RISC OS Programmer's Reference Manual, Appendix E
0 string Maestro\r RISC OS music file
>8 byte x version %d

View File

@ -4,11 +4,12 @@
#
# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998
# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
#
# ALAN
# I assume there are other, lower versions, but these are the only ones I
# saw in the archive.
0 beshort 0x0206 ALAN text adventure code data
0 beshort 0x0206 ALAN game data
>2 byte <10 version 2.6%d
# Conflicts with too much other stuff!
@ -34,6 +35,29 @@
#>18 string >\0 Serial %.6s)
# TADS (Text Adventure Development System)
0 string TADS TADS game data
>13 string >\0 (ver. %.6s,
>22 string >\0 date %s)
# All files are machine-independent (games compile to byte-code) and are tagged
# with a version string of the form "V2.<digit>.<digit>\0" (but TADS 3 is
# on the way).
# Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
0 string TADS2\ bin TADS
>9 belong !0x0A0D1A00 game data, CORRUPTED
>9 belong 0x0A0D1A00
>>13 string >\0 %s game data
# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
0 string TADS2\ rsc TADS
>9 belong !0x0A0D1A00 resource data, CORRUPTED
>9 belong 0x0A0D1A00
>>13 string >\0 %s resource data
# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
# 2-byte length N, the N-char name of the game file *without* a NUL (darn!),
# "TADS2 save\n\r\032\0" and the interpreter version.
0 string TADS2\ save/g TADS
>12 belong !0x0A0D1A00 saved game data, CORRUPTED
>12 belong 0x0A0D1A00
>>(16.s+32) string >\0 %s saved game data
# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
# version.
0 string TADS2\ save TADS
>10 belong !0x0A0D1A00 saved game data, CORRUPTED
>10 belong 0x0A0D1A00
>>14 string >\0 %s saved game data

View File

@ -8,3 +8,32 @@
#
0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary
0 belong 0x000003e7 AmigaOS object/library data
#
0 beshort 0xe310 Amiga Workbench
>2 beshort 1
>>48 byte 1 disk icon
>>48 byte 2 drawer icon
>>48 byte 3 tool icon
>>48 byte 4 project icon
>>48 byte 5 garbage icon
>>48 byte 6 device icon
>>48 byte 7 kickstart icon
>>48 byte 8 workbench application icon
>2 beshort >1 icon, vers. %d
#
# various sound formats from the Amiga
# G=F6tz Waschk <waschk@informatik.uni-rostock.de>
#
0 string FC14 Future Composer 1.4 Module sound file
0 string SMOD Future Composer 1.3 Module sound file
0 string AON4artofnoise Art Of Noise Module sound file
1 string MUGICIAN/SOFTEYES Mugician Module sound file
58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file
0 string Synth4.0 Synthesis Module sound file
0 string ARP. The Holy Noise Module sound file
0 string BeEp\0 JamCracker Module sound file
0 string COSO\0 Hippel-COSO Module sound file
26 string V.3 Brian Postma's Soundmon Module sound file v3
26 string BPSM Brian Postma's Soundmon Module sound file v3
26 string V.2 Brian Postma's Soundmon Module sound file v2

View File

@ -15,75 +15,96 @@
# MPEG Audio (*.mpx)
# from dreesen@math.fu-berlin.de
# XXX
# This conflicts with the FF FE signature for UTF-16-encoded Unicode
# text, which will be identified as an MP3 file. I don't have any MP3s
# so I don't know how to (or even if it's possible to) change this to
# tell the two apart. enf@pobox.com
# MPEG 1.0 Layer 3
0 beshort&0xfffe =0xfffa \bMP3
>2 byte&0xf0 =0x10 \b, 32 kBits
>2 byte&0xf0 =0x20 \b, 40 kBits
>2 byte&0xf0 =0x30 \b, 48 kBits
>2 byte&0xf0 =0x40 \b, 56 kBits
>2 byte&0xf0 =0x50 \b, 64 kBits
>2 byte&0xf0 =0x60 \b, 80 kBits
>2 byte&0xf0 =0x70 \b, 96 kBits
>2 byte&0xf0 =0x80 \b, 112 kBits
>2 byte&0xf0 =0x90 \b, 128 kBits
>2 byte&0xf0 =0xA0 \b, 160 kBits
>2 byte&0xf0 =0xB0 \b, 192 kBits
>2 byte&0xf0 =0xC0 \b, 224 kBits
>2 byte&0xf0 =0xD0 \b, 256 kBits
>2 byte&0xf0 =0xE0 \b, 320 kBits
# freq
>2 byte&0x0C =0x00 \b, 44.1 kHz
>2 byte&0x0C =0x04 \b, 48 kHz
>2 byte&0x0C =0x08 \b, 32 kHz
# misc
>3 byte&0xC0 =0x00 \b, Stereo
>3 byte&0xC0 =0x40 \b, JStereo
>3 byte&0xC0 =0x80 \b, Dual-Ch
>3 byte&0xC0 =0xC0 \b, Mono
#>1 byte&0x01 =0x00 \b, Error Protection
#>2 byte&0x02 =0x02 \b, Padding
#>2 byte&0x01 =0x01 \b, Private
#>3 byte&0x08 =0x08 \b, Copyright
#>3 byte&0x04 =0x04 \b, Original
#>3 byte&0x03 1 \b, Emphasis 5
#>3 byte&0x03 3 \b, Emphasis c
0 beshort &0xfff0 MP
# MPEG 1.0
>1 byte&0x08 =0x08 \b
# Layer 3
>>1 byte &0x02 \b3
>>>2 byte&0xf0 =0x10 \b, 32 kBits
>>>2 byte&0xf0 =0x20 \b, 40 kBits
>>>2 byte&0xf0 =0x30 \b, 48 kBits
>>>2 byte&0xf0 =0x40 \b, 56 kBits
>>>2 byte&0xf0 =0x50 \b, 64 kBits
>>>2 byte&0xf0 =0x60 \b, 80 kBits
>>>2 byte&0xf0 =0x70 \b, 96 kBits
>>>2 byte&0xf0 =0x80 \b, 112 kBits
>>>2 byte&0xf0 =0x90 \b, 128 kBits
>>>2 byte&0xf0 =0xA0 \b, 160 kBits
>>>2 byte&0xf0 =0xB0 \b, 192 kBits
>>>2 byte&0xf0 =0xC0 \b, 224 kBits
>>>2 byte&0xf0 =0xD0 \b, 256 kBits
>>>2 byte&0xf0 =0xE0 \b, 320 kBits
# Layer 2
>>1 byte &0x04 \b2
>>>2 byte&0xf0 =0x10 \b, 32 kBits
>>>2 byte&0xf0 =0x20 \b, 48 kBits
>>>2 byte&0xf0 =0x30 \b, 56 kBits
>>>2 byte&0xf0 =0x40 \b, 64 kBits
>>>2 byte&0xf0 =0x50 \b, 80 kBits
>>>2 byte&0xf0 =0x60 \b, 96 kBits
>>>2 byte&0xf0 =0x70 \b, 112 kBits
>>>2 byte&0xf0 =0x80 \b, 128 kBits
>>>2 byte&0xf0 =0x90 \b, 160 kBits
>>>2 byte&0xf0 =0xA0 \b, 192 kBits
>>>2 byte&0xf0 =0xB0 \b, 224 kBits
>>>2 byte&0xf0 =0xC0 \b, 256 kBits
>>>2 byte&0xf0 =0xD0 \b, 320 kBits
>>>2 byte&0xf0 =0xE0 \b, 384 kBits
# MPEG 1.0 Layer 2
0 beshort&0xfffe =0xfffc \bMP2
>2 byte&0xf0 =0x10 \b, 32 kBits
>2 byte&0xf0 =0x20 \b, 48 kBits
>2 byte&0xf0 =0x30 \b, 56 kBits
>2 byte&0xf0 =0x40 \b, 64 kBits
>2 byte&0xf0 =0x50 \b, 80 kBits
>2 byte&0xf0 =0x60 \b, 96 kBits
>2 byte&0xf0 =0x70 \b, 112 kBits
>2 byte&0xf0 =0x80 \b, 128 kBits
>2 byte&0xf0 =0x90 \b, 160 kBits
>2 byte&0xf0 =0xA0 \b, 192 kBits
>2 byte&0xf0 =0xB0 \b, 224 kBits
>2 byte&0xf0 =0xC0 \b, 256 kBits
>2 byte&0xf0 =0xD0 \b, 320 kBits
>2 byte&0xf0 =0xE0 \b, 384 kBits
# freq
>>2 byte&0x0C =0x00 \b, 44.1 kHz
>>2 byte&0x0C =0x04 \b, 48 kHz
>>2 byte&0x0C =0x08 \b, 32 kHz
>2 byte&0x0C =0x00 \b, 44.1 kHz
>2 byte&0x0C =0x04 \b, 48 kHz
>2 byte&0x0C =0x08 \b, 32 kHz
# misc
>3 byte&0xC0 =0x00 \b, Stereo
>3 byte&0xC0 =0x40 \b, JStereo
>3 byte&0xC0 =0x80 \b, Dual-Ch
>3 byte&0xC0 =0xC0 \b, Mono
#>1 byte&0x01 =0x00 \b, Error Protection
#>2 byte&0x02 =0x02 \b, Padding
#>2 byte&0x01 =0x01 \b, Private
#>3 byte&0x08 =0x08 \b, Copyright
#>3 byte&0x04 =0x04 \b, Original
#>3 byte&0x03 1 \b, Emphasis 5
#>3 byte&0x03 3 \b, Emphasis c
# MPEG 2.0
>1 byte&0x08 =0x00 \b
0 beshort&0xfff8 =0xfff0 MP
# Layer 3
>>1 byte &0x02 \b3
>1 byte &0x02 \b3
# Layer 2
>>1 byte &0x04 \b2
>>2 byte&0xf0 =0x10 \b, 8 kBits
>>2 byte&0xf0 =0x20 \b, 16 kBits
>>2 byte&0xf0 =0x30 \b, 24 kBits
>>2 byte&0xf0 =0x40 \b, 32 kBits
>>2 byte&0xf0 =0x50 \b, 40 kBits
>>2 byte&0xf0 =0x60 \b, 48 kBits
>>2 byte&0xf0 =0x70 \b, 56 kBits
>>2 byte&0xf0 =0x80 \b, 64 kBits
>>2 byte&0xf0 =0x90 \b, 80 kBits
>>2 byte&0xf0 =0xA0 \b, 96 kBits
>>2 byte&0xf0 =0xB0 \b, 112 kBits
>>2 byte&0xf0 =0xC0 \b, 128 kBits
>>2 byte&0xf0 =0xD0 \b, 144 kBits
>>2 byte&0xf0 =0xE0 \b, 160 kBits
>1 byte &0x04 \b2
>2 byte&0xf0 =0x10 \b, 8 kBits
>2 byte&0xf0 =0x20 \b, 16 kBits
>2 byte&0xf0 =0x30 \b, 24 kBits
>2 byte&0xf0 =0x40 \b, 32 kBits
>2 byte&0xf0 =0x50 \b, 40 kBits
>2 byte&0xf0 =0x60 \b, 48 kBits
>2 byte&0xf0 =0x70 \b, 56 kBits
>2 byte&0xf0 =0x80 \b, 64 kBits
>2 byte&0xf0 =0x90 \b, 80 kBits
>2 byte&0xf0 =0xA0 \b, 96 kBits
>2 byte&0xf0 =0xB0 \b, 112 kBits
>2 byte&0xf0 =0xC0 \b, 128 kBits
>2 byte&0xf0 =0xD0 \b, 144 kBits
>2 byte&0xf0 =0xE0 \b, 160 kBits
# freq
>>2 byte&0x0C =0x00 \b, 22.05 kHz
>>2 byte&0x0C =0x04 \b, 24 kHz
>>2 byte&0x0C =0x08 \b, 16 kHz
>2 byte&0x0C =0x00 \b, 22.05 kHz
>2 byte&0x0C =0x04 \b, 24 kHz
>2 byte&0x0C =0x08 \b, 16 kHz
# misc
>3 byte&0xC0 =0x00 \b, Stereo
>3 byte&0xC0 =0x40 \b, JStereo
@ -168,3 +189,8 @@
# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>
0 belong 0x3026b275 Microsoft ASF
# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
0 string \x8aMNG MNG video data,
>4 belong !0x0d0a1a0a CORRUPTED,
>4 belong 0x0d0a1a0a

View File

@ -250,3 +250,9 @@
>>14 beshort 0x677a (gzipped)
>>14 beshort !0x677a (not gzipped)
>13 string >3 version %s
############################################################################
# Parity archive reconstruction file, the 'par' file format now used on Usenet.
0 string PAR\0 PARity archive data
>48 leshort =0 - Index file
>48 leshort >0 - file number %d

View File

@ -136,9 +136,28 @@
# Audio Visual Research <mpruett@sgi.com>
0 string 2BIT Audio Visual Research file
# From Felix von Leitner <leitner@fefe.de>
0 string OggS Ogg-Vorbis compressed sound file
# SGI SoundTrack <mpruett@sgi.com>
0 string _SGI_SoundTrack SGI SoundTrack project file
0 string ID3 mp3 file with ID3 2.0 tag
# ID3 version 2 tags <waschk@informatik.uni-rostock.de>
0 string ID3 MP3 file with ID3 version 2.
>3 ubyte <0xff \b%d.
>4 ubyte <0xff \b%d tag
# NSF (NES sound file) magic
0 string NESM\x1a NES Sound File
>14 string >\0 ("%s" by
>46 string >\0 %s, copyright
>78 string >\0 %s),
>5 byte x version %d,
>6 byte x %d tracks,
>122 byte&0x2 =1 dual PAL/NTSC
>122 byte&0x1 =1 PAL
>122 byte&0x1 =0 NTSC
# Impuse tracker module (audio/x-it)
0 string IMPM Impulse Tracker module sound data -
>4 string >\0 "%s"
# Imago Orpheus module (audio/x-imf)
60 string IM10 Imago Orpheus module sound data -
>0 string >\0 "%s"

11
contrib/file/Magdir/cddb Normal file
View File

@ -0,0 +1,11 @@
#------------------------------------------------------------------------------
# CDDB: file(1) magic for CDDB(tm) format CD text data files
#
# From <steve@gracenote.com>
#
# This is the /etc/magic entry to decode datafiles as used by
# CDDB-enabled CD player applications.
#
0 string/b #\040xmcd CDDB(tm) format CD text data

View File

@ -27,16 +27,6 @@
0 string/b #!\ /usr/bin/awk awk script text executable
0 string BEGIN awk script text
# For Larry Wall's perl language. The ``eval'' line recognizes an
# outrageously clever hack for USG systems.
# Keith Waclena <keith@cerberus.uchicago.edu>
0 string/b #!\ /bin/perl perl script text executable
0 string eval\ "exec\ /bin/perl perl script text
0 string/b #!\ /usr/bin/perl perl script text executable
0 string eval\ "exec\ /usr/bin/perl perl script text
0 string/b #!\ /usr/local/bin/perl perl script text
0 string eval\ "exec\ /usr/local/bin/perl perl script text executable
# AT&T Bell Labs' Plan 9 shell
0 string/b #!\ /bin/rc Plan 9 rc shell script text executable
@ -60,3 +50,13 @@
>2 string >\0 %s script text executable
0 string #!\ script text executable
>3 string >\0 for %s
# PHP scripts
# Ulf Harnhammar <ulfh@update.uu.se>
0 string/c =<?php PHP script text
0 string =<?\n PHP script text
0 string =<?\r PHP script text
0 string/b #!\ /usr/local/bin/php PHP script text executable
0 string/b #!\ /usr/bin/php PHP script text executable
0 string Zend\x00 PHP script Zend Optimizer data

View File

@ -14,28 +14,32 @@
>2 byte&0x1f x %d bits
# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
# * Original filename is only at offset 10 if "extra field" absent
# * Produce shorter output - notably, only report compression methods
# other than 8 ("deflate", the only method defined in RFC 1952).
0 string \037\213 gzip compressed data
>2 byte <8 \b, reserved method,
>2 byte 8 \b, deflated,
>3 byte &0x01 ASCII,
>3 byte &0x02 continuation,
>3 byte &0x04 extra field,
>3 byte &0x08 original filename,
>>10 string x `%s',
>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
>2 byte <8 \b, reserved method
>2 byte >8 \b, unknown method
>3 byte &0x01 \b, ASCII
>3 byte &0x02 \b, continuation
>3 byte &0x04 \b, extra field
>3 byte&0xC =0x08
>>10 string x \b, was "%s"
>9 byte =0x00 \b, from MS-DOS
>9 byte =0x01 \b, from Amiga
>9 byte =0x02 \b, from VMS
>9 byte =0x03 \b, from Unix
>9 byte =0x05 \b, from Atari
>9 byte =0x06 \b, from OS/2
>9 byte =0x07 \b, from MacOS
>9 byte =0x0A \b, from Tops/20
>9 byte =0x0B \b, from Win/32
>3 byte &0x10 \b, comment
>3 byte &0x20 \b, encrypted
### >4 ledate x last modified: %s,
>8 byte 2 \b, max compression
>8 byte 4 \b, max speed
# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
0 string \037\036 packed data
@ -144,3 +148,7 @@
>>17 byte =0x0A os: Tops/20
>>17 byte =0x0B os: WinNT
>>17 byte =0x0E os: Win32
# 4.3BSD-Quasijarus Strong Compression
# http://minnie.tuhs.org/Quasijarus/compress.html
0 string \037\241 Quasijarus strong compressed data

6
contrib/file/Magdir/cvs Normal file
View File

@ -0,0 +1,6 @@
#------------------------------------------------------------------------------
# file(1) magic for cvs(1) files
# From Hendrik Scholz <hendrik@scholz.net>
0 string /1\ :pserver: cvs password text file

View File

@ -72,3 +72,9 @@
# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>
0 string RRD RRDTool DB
>4 string x version %s
#----------------------------------------------------------------------
# ROOT: file(1) magic for ROOT databases
#
0 string root\0 ROOT file
>4 belong x Version %d
>33 belong x (Compression: %d)

57
contrib/file/Magdir/dolby Normal file
View File

@ -0,0 +1,57 @@
# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>
# from http://www.atsc.org/standards/a_52a.pdf
# corrections, additions, etc. are always welcome!
#
# syncword
0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream,
# fscod
>4 byte&0xc0 0x00 48 kHz,
>4 byte&0xc0 0x40 44.1 kHz,
>4 byte&0xc0 0x80 32 kHz,
# is this one used for 96 kHz?
>4 byte&0xc0 0xc0 reserved frequency,
#
>5 byte&7 = 0 \b, complete main (CM)
>5 byte&7 = 1 \b, music and effects (ME)
>5 byte&7 = 2 \b, visually impaired (VI)
>5 byte&7 = 3 \b, hearing impaired (HI)
>5 byte&7 = 4 \b, dialogue (D)
>5 byte&7 = 5 \b, commentary (C)
>5 byte&7 = 6 \b, emergency (E)
# acmod
>6 byte&0xe0 0x00 1+1 front,
>6 byte&0xe0 0x20 1 front/0 rear,
>6 byte&0xe0 0x40 2 front/0 rear,
>6 byte&0xe0 0x60 3 front/0 rear,
>6 byte&0xe0 0x80 2 front/1 rear,
>6 byte&0xe0 0xa0 3 front/1 rear,
>6 byte&0xe0 0xc0 2 front/2 rear,
>6 byte&0xe0 0xe0 3 front/2 rear,
# lfeon (these may be incorrect)
>7 byte&0x40 0x00 LFE off,
>7 byte&0x40 0x40 LFE on,
#
>4 byte&0x3e = 0x00 \b, 32 kbit/s
>4 byte&0x3e = 0x02 \b, 40 kbit/s
>4 byte&0x3e = 0x04 \b, 48 kbit/s
>4 byte&0x3e = 0x06 \b, 56 kbit/s
>4 byte&0x3e = 0x08 \b, 64 kbit/s
>4 byte&0x3e = 0x0a \b, 80 kbit/s
>4 byte&0x3e = 0x0c \b, 96 kbit/s
>4 byte&0x3e = 0x0e \b, 112 kbit/s
>4 byte&0x3e = 0x10 \b, 128 kbit/s
>4 byte&0x3e = 0x12 \b, 160 kbit/s
>4 byte&0x3e = 0x14 \b, 192 kbit/s
>4 byte&0x3e = 0x16 \b, 224 kbit/s
>4 byte&0x3e = 0x18 \b, 256 kbit/s
>4 byte&0x3e = 0x1a \b, 320 kbit/s
>4 byte&0x3e = 0x1c \b, 384 kbit/s
>4 byte&0x3e = 0x1e \b, 448 kbit/s
>4 byte&0x3e = 0x20 \b, 512 kbit/s
>4 byte&0x3e = 0x22 \b, 576 kbit/s
>4 byte&0x3e = 0x24 \b, 640 kbit/s
# dsurmod (these may be incorrect)
>6 beshort&0x0180 0x0000 Dolby Surround not indicated
>6 beshort&0x0180 0x0080 not Dolby Surround encoded
>6 beshort&0x0180 0x0100 Dolby Surround encoded
>6 beshort&0x0180 0x0180 reserved Dolby Surround mode

View File

@ -7,3 +7,7 @@
>4 string 1 CP 852
>4 string 2 KOI8-CS
>4 string >2 unknown encoding
# Vi IMproved Encrypted file
# by David Necas <yeti@physics.muni.cz>
0 string VimCrypt~ Vim encrypted file data

View File

@ -5,38 +5,45 @@
# We have to check the byte order flag to see what byte order all the
# other stuff in the header is in.
#
# MIPS R3000 may also be for MIPS R2000.
# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
#
# updated by Daniel Quinlan (quinlan@yggdrasil.com)
0 string \177ELF ELF
>4 byte 0 invalid class
>4 byte 1 32-bit
# only for MIPS
# only for MIPS - in the future, the ABI field of e_flags should be used.
>>18 beshort 8
>>18 beshort 10
>>>36 belong &0x20 N32
>4 byte 2 64-bit
>5 byte 0 invalid byte order
>5 byte 1 LSB
# only for MIPS R3000_BE
# The official e_machine number for MIPS is now #8, regardless of endianness.
# The second number (#10) will be deprecated later. For now, we still
# say something if #10 is encountered, but only gory details for #8.
>>18 leshort 8
# only for 32-bit
>>>4 byte 1
>>>>36 lelong&0xf0000000 0x00000000 mips-1
>>>>36 lelong&0xf0000000 0x10000000 mips-2
>>>>36 lelong&0xf0000000 0x20000000 mips-3
>>>>36 lelong&0xf0000000 0x30000000 mips-4
>>>>36 lelong&0xf0000000 0x40000000 mips-5
>>>>36 lelong&0xf0000000 0x50000000 mips-6
>>>>36 lelong&0xf0000000 0x00000000 MIPS-I
>>>>36 lelong&0xf0000000 0x10000000 MIPS-II
>>>>36 lelong&0xf0000000 0x20000000 MIPS-III
>>>>36 lelong&0xf0000000 0x30000000 MIPS-IV
>>>>36 lelong&0xf0000000 0x40000000 MIPS-V
>>>>36 lelong&0xf0000000 0x60000000 MIPS32
>>>>36 lelong&0xf0000000 0x70000000 MIPS64
>>>>36 lelong&0xf0000000 0x80000000 MIPS32 rel2
>>>>36 lelong&0xf0000000 0x90000000 MIPS64 rel2
# only for 64-bit
>>>4 byte 2
>>>>48 lelong&0xf0000000 0x00000000 mips-1
>>>>48 lelong&0xf0000000 0x10000000 mips-2
>>>>48 lelong&0xf0000000 0x20000000 mips-3
>>>>48 lelong&0xf0000000 0x30000000 mips-4
>>>>48 lelong&0xf0000000 0x40000000 mips-5
>>>>48 lelong&0xf0000000 0x50000000 mips-6
>>>>48 lelong&0xf0000000 0x00000000 MIPS-I
>>>>48 lelong&0xf0000000 0x10000000 MIPS-II
>>>>48 lelong&0xf0000000 0x20000000 MIPS-III
>>>>48 lelong&0xf0000000 0x30000000 MIPS-IV
>>>>48 lelong&0xf0000000 0x40000000 MIPS-V
>>>>48 lelong&0xf0000000 0x60000000 MIPS32
>>>>48 lelong&0xf0000000 0x70000000 MIPS64
>>>>48 lelong&0xf0000000 0x80000000 MIPS32 rel2
>>>>48 lelong&0xf0000000 0x90000000 MIPS64 rel2
>>16 leshort 0 no file type,
>>16 leshort 1 relocatable,
>>16 leshort 2 executable,
@ -44,21 +51,24 @@
# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
>>16 leshort 4 core file
>>>(0x38+0xcc) string >\0 of '%s'
>>>(0x38+0x10) lelong >0 (signal %d),
# Core file detection is not reliable.
#>>>(0x38+0xcc) string >\0 of '%s'
#>>>(0x38+0x10) lelong >0 (signal %d),
>>16 leshort &0xff00 processor-specific,
>>18 leshort 0 no machine,
>>18 leshort 1 AT&T WE32100 - invalid byte order,
>>18 leshort 2 SPARC - invalid byte order,
>>18 leshort 3 Intel 80386,
>>18 leshort 4 Motorola 68000 - invalid byte order,
>>18 leshort 4 Motorola
>>>36 lelong &0x01000000 68000 - invalid byte order,
>>>36 lelong &0x00810000 CPU32 - invalid byte order,
>>>36 lelong 0 68020 - invalid byte order,
>>18 leshort 5 Motorola 88000 - invalid byte order,
>>18 leshort 6 Intel 80486,
>>18 leshort 7 Intel 80860,
# "officially" big endian, but binutils bfd only emits magic #8 for MIPS.
>>18 leshort 8 MIPS R3000_LE [bfd bug],
>>18 leshort 8 MIPS,
>>18 leshort 9 Amdahl - invalid byte order,
>>18 leshort 10 MIPS R3000_LE,
>>18 leshort 10 MIPS (deprecated),
>>18 leshort 11 RS6000 - invalid byte order,
>>18 leshort 15 PA-RISC - invalid byte order,
>>>50 leshort 0x0214 2.0
@ -92,43 +102,52 @@
>>20 lelong 1 version 1
>>36 lelong 1 MathCoPro/FPU/MAU Required
>5 byte 2 MSB
# only for MIPS R3000_BE
# only for MIPS - see comment in little-endian section above.
>>18 beshort 8
# only for 32-bit
>>>4 byte 1
>>>>36 belong&0xf0000000 0x00000000 mips-1
>>>>36 belong&0xf0000000 0x10000000 mips-2
>>>>36 belong&0xf0000000 0x20000000 mips-3
>>>>36 belong&0xf0000000 0x30000000 mips-4
>>>>36 belong&0xf0000000 0x40000000 mips-5
>>>>36 belong&0xf0000000 0x50000000 mips-6
>>>>36 belong&0xf0000000 0x00000000 MIPS-I
>>>>36 belong&0xf0000000 0x10000000 MIPS-II
>>>>36 belong&0xf0000000 0x20000000 MIPS-III
>>>>36 belong&0xf0000000 0x30000000 MIPS-IV
>>>>36 belong&0xf0000000 0x40000000 MIPS-V
>>>>36 belong&0xf0000000 0x60000000 MIPS32
>>>>36 belong&0xf0000000 0x70000000 MIPS64
>>>>36 belong&0xf0000000 0x80000000 MIPS32 rel2
>>>>36 belong&0xf0000000 0x90000000 MIPS64 rel2
# only for 64-bit
>>>4 byte 2
>>>>48 belong&0xf0000000 0x00000000 mips-1
>>>>48 belong&0xf0000000 0x10000000 mips-2
>>>>48 belong&0xf0000000 0x20000000 mips-3
>>>>48 belong&0xf0000000 0x30000000 mips-4
>>>>48 belong&0xf0000000 0x40000000 mips-5
>>>>48 belong&0xf0000000 0x50000000 mips-6
>>>>48 belong&0xf0000000 0x00000000 MIPS-I
>>>>48 belong&0xf0000000 0x10000000 MIPS-II
>>>>48 belong&0xf0000000 0x20000000 MIPS-III
>>>>48 belong&0xf0000000 0x30000000 MIPS-IV
>>>>48 belong&0xf0000000 0x40000000 MIPS-V
>>>>48 belong&0xf0000000 0x60000000 MIPS32
>>>>48 belong&0xf0000000 0x70000000 MIPS64
>>>>48 belong&0xf0000000 0x80000000 MIPS32 rel2
>>>>48 belong&0xf0000000 0x90000000 MIPS64 rel2
>>16 beshort 0 no file type,
>>16 beshort 1 relocatable,
>>16 beshort 2 executable,
>>16 beshort 3 shared object,
>>16 beshort 4 core file,
>>>(0x38+0xcc) string >\0 of '%s'
>>>(0x38+0x10) belong >0 (signal %d),
#>>>(0x38+0xcc) string >\0 of '%s'
#>>>(0x38+0x10) belong >0 (signal %d),
>>16 beshort &0xff00 processor-specific,
>>18 beshort 0 no machine,
>>18 beshort 1 AT&T WE32100,
>>18 beshort 2 SPARC,
>>18 beshort 3 Intel 80386 - invalid byte order,
>>18 beshort 4 Motorola 68000,
>>18 beshort 4 Motorola
>>>36 belong &0x01000000 68000,
>>>36 belong &0x00810000 CPU32,
>>>36 belong 0 68020,
>>18 beshort 5 Motorola 88000,
>>18 beshort 6 Intel 80486 - invalid byte order,
>>18 beshort 7 Intel 80860,
>>18 beshort 8 MIPS R3000_BE,
>>18 beshort 8 MIPS,
>>18 beshort 9 Amdahl,
>>18 beshort 10 MIPS R3000_LE - invalid byte order,
>>18 beshort 10 MIPS (deprecated),
>>18 beshort 11 RS6000,
>>18 beshort 15 PA-RISC
>>>50 beshort 0x0214 2.0

View File

@ -25,7 +25,12 @@
>512 belong&077777777 0600407 \b, boot block present
0x1FE leshort 0xAA55 x86 boot sector
>2 string OSBS \b, OS/BS MBR
# J\xf6rg Jenderek <joerg@pcialias.localnet>
>0x8C string Invalid\ partition\ table \b, MS-DOS MBR
>0x9D string Invalid\ partition\ table \b, DR-DOS MBR, version 7.01 to 7.03
>0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222
>0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950
>0x145 string Default:\ F \b, FREE-DOS MBR
>0 string \0\0\0\0 \b, extended partition table
>0 leshort 0x3CEB \b, system
>>3 string >\0 %s
@ -41,8 +46,17 @@
>>>>32 lelong x %d sectors
>0x200 lelong 0x82564557 \b, BSD disklabel
# Solaris 7 FAT12 floppies J\xf6rg Jenderek <joerg@pcialias.localnet>
>0 leshort 0x7AEB \b, system
>>3 string >\0 %s
>>0x36 string FAT \b, %s
>>>0x39 string 12 (%s bit)
# Minix filesystems - Juan Cespedes <cespedes@debian.org>
0x410 leshort 0x137f Minix filesystem
0x410 beshort 0x137f Minix filesystem (big endian),
>0x402 beshort !0 \b, %d zones
>0x1e string minix \b, bootable
0x410 leshort 0x138f Minix filesystem, 30 char names
0x410 leshort 0x2468 Minix filesystem, version 2
0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names
@ -116,3 +130,72 @@
>0x68 beshort x inosz=3D%d,
>0x64 beshort ^0x2004 v1 dirs)
>0x64 beshort &0x2004 v2 dirs)
############################################################################
# Minix-ST kernel floppy
0x800 belong 0x46fc2700 Atari-ST Minix kernel image
>19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy
>19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy
############################################################################
# Hmmm, is this a better way of detecting _standard_ floppy images ?
19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k
>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k
>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k
>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM
>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs
>0x1FE leshort 0xAA55 \b, x86 hard disk boot sector
19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k
19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k
# Valid media descriptor bytes for MS-DOS:
#
# Byte Capacity Media Size and Type
# -------------------------------------------------
#
# F0 2.88 MB 3.5-inch, 2-sided, 36-sector
# F0 1.44 MB 3.5-inch, 2-sided, 18-sector
# F9 720K 3.5-inch, 2-sided, 9-sector
# F9 1.2 MB 5.25-inch, 2-sided, 15-sector
# FD 360K 5.25-inch, 2-sided, 9-sector
# FF 320K 5.25-inch, 2-sided, 8-sector
# FC 180K 5.25-inch, 1-sided, 9-sector
# FE 160K 5.25-inch, 1-sided, 8-sector
# FE 250K 8-inch, 1-sided, single-density
# FD 500K 8-inch, 2-sided, single-density
# FE 1.2 MB 8-inch, 2-sided, double-density
# F8 ----- Fixed disk
#
# FC xxxK Apricot 70x1x9 boot disk.
#
# Originally a bitmap:
# xxxxxxx0 Not two sided
# xxxxxxx1 Double sided
# xxxxxx0x Not 8 SPT
# xxxxxx1x 8 SPT
# xxxxx0xx Not Removable drive
# xxxxx1xx Removable drive
# 11111xxx Must be one.
#
# But now it's rather random:
# 111111xx Low density disk
# 00 SS, Not 8 SPT
# 01 DS, Not 8 SPT
# 10 SS, 8 SPT
# 11 DS, 8 SPT
#
# 11111001 Double density 3½ floppy disk, high density 5¼
# 11110000 High density 3½ floppy disk
# 11111000 Hard disk any format
#
# CDROM Filesystems
32769 string CD001 ISO 9660 CD-ROM filesystem data
37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
32776 string CDROM High Sierra CD-ROM filesystem data

View File

@ -0,0 +1,25 @@
#------------------------------------------------------------------------------
# gringotts: file(1) magic for Gringotts
# http://devel.pluto.linux.it/projects/Gringotts/
# author: Germano Rizzo <mano@pluto.linux.it>
#GRG2????Y
0 string GRG Gringotts data file
>3 string 1 v.1, SERPENT crypt, SHA-256 hash, ZLib lvl.9
>3 string 2 v.2,
>>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
>>8 byte&0x70 0x10 SERPENT crypt,
>>8 byte&0x70 0x20 TWOFISH crypt,
>>8 byte&0x70 0x30 CAST-256 crypt,
>>8 byte&0x70 0x40 SAFER+ crypt,
>>8 byte&0x70 0x50 LOKI97 crypt,
>>8 byte&0x70 0x60 3DES crypt,
>>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
>>8 byte&0x08 0x00 SHA1 hash,
>>8 byte&0x08 0x08 RIPEMD-160 hash,
>>8 byte&0x04 0x00 ZLib
>>8 byte&0x04 0x04 BZip2
>>8 byte&0x03 0x00 lvl.0
>>8 byte&0x03 0x01 lvl.3
>>8 byte&0x03 0x02 lvl.6
>>8 byte&0x03 0x03 lvl.9

View File

@ -7,12 +7,12 @@
0 beshort 0x0500 Hitachi SH big-endian COFF
>18 beshort&0x0002 =0x0000 object
>18 beshort&0x0002 =0x0002 executable
>18 beshort&0x0008 =0x0000 \b, stripped
>18 beshort&0x0008 =0x0008 \b, not stripped
>18 beshort&0x0008 =0x0008 \b, stripped
>18 beshort&0x0008 =0x0000 \b, not stripped
#
0 leshort 0x0550 Hitachi SH little-endian COFF
>18 leshort&0x0002 =0x0000 object
>18 leshort&0x0002 =0x0002 executable
>18 leshort&0x0008 =0x0000 \b, stripped
>18 leshort&0x0008 =0x0008 \b, not stripped
>18 leshort&0x0008 =0x0008 \b, stripped
>18 leshort&0x0008 =0x0000 \b, not stripped

View File

@ -0,0 +1,25 @@
#------------------------------------------------------------------------------
# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats
0 string HU Human68k
>68 string LZX LZX compressed
>>72 string >\0 (version %s)
>(8.L+74) string LZX LZX compressed
>>(8.L+78) string >\0 (version %s)
>60 belong >0 binded
>(8.L+66) string #HUPAIR hupair
>0 string HU X executable
>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1
>4 belong >0 - base address 0x%x
>28 belong >0 not stripped
>32 belong >0 with debug information
0 beshort 0x601a Human68k Z executable
0 beshort 0x6000 Human68k object file
0 belong 0xd1000000 Human68k ar binary archive
0 belong 0xd1010000 Human68k ar ascii archive
0 beshort 0x0068 Human68k lib archive
4 string LZX Human68k LZX compressed
>8 string >\0 (version %s)
>4 string LZX R executable
2 string #HUPAIR Human68k hupair R executable

View File

@ -79,7 +79,7 @@
>4 string 7a \b, version 8%s,
>4 string 9a \b, version 8%s,
>6 leshort >0 %hd x
>8 leshort >0 %hd,
>8 leshort >0 %hd
#>10 byte &0x80 color mapped,
#>10 byte&0x07 =0x00 2 colors
#>10 byte&0x07 =0x01 4 colors

View File

@ -0,0 +1,18 @@
#------------------------------------------------------------------------------
# impulse tracker: file(1) magic for Impulse Tracker data files
#
# From <collver1@attbi.com>
# These are the /etc/magic entries to decode modules, instruments, and
# samples in Impulse Tracker's native format.
0 string IMPS Impulse Tracker Sample
>18 byte &2 16 bit
>18 byte ^2 8 bit
>18 byte &4 stereo
>18 byte ^4 mono
0 string IMPI Impulse Tracker Instrument
>28 leshort !0 ITv%x
>30 byte !0 %d samples
0 string IMPM Impulse Tracker Module
>40 leshort !0 compatible w/ITv%x
>42 leshort !0 created w/ITv%x

View File

@ -58,6 +58,8 @@
>3 byte >0 8x%d
# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>
4086 string SWAP-SPACE Linux/i386 swap file
# according to man page of mkswap (8) March 1999
4086 string SWAPSPACE2 Linux/i386 swap file (new style)
# ECOFF magic for OSF/1 and Linux (only tested under Linux though)
#
# from Erik Troan (ewt@redhat.com) examining od dumps, so this
@ -99,3 +101,67 @@
>0x1e9 string Loading from prehistoric times
# LSM entries - Nicolás Lichtmaier <nick@feedback.net.ar>
0 string Begin3 Linux Software Map entry text
############################################################################
# Linux kernel versions
0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux
>497 leshort 0 x86 boot sector
>>514 belong 0x8e of a kernel from the dawn of time!
>>514 belong 0x908ed8b4 version 0.99-1.1.42
>>514 belong 0x908ed8b8 for memtest86
>497 leshort !0 x86 kernel
>>504 leshort >0 RAMdisksize=%u KB
>>502 leshort >0 swap=0x%X
>>508 leshort >0 root=0x%X
>>>498 leshort 1 \b-ro
>>>498 leshort 0 \b-rw
>>506 leshort 0xFFFF vga=normal
>>506 leshort 0xFFFE vga=extended
>>506 leshort 0xFFFD vga=ask
>>506 leshort >0 vga=%d
>>514 belong 0x908ed881 version 1.1.43-1.1.45
>>514 belong 0x15b281cd
>>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0
>>>0xa99 belong 0x55AA5a5a version 1.3.1,2
>>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30
>>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41
>>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45
>>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72
>>514 string HdrS
>>>518 leshort >0x1FF
>>>>529 byte 0 \b, zImage
>>>>529 byte 1 \b, bzImage
>>>>(526.s+0x200) string >\0 \b, version %s
# Linux boot sector thefts.
0 belong 0xb8c0078e Linux
>0x1e6 belong 0x454c4b53 ELKS Kernel
>0x1e6 belong !0x454c4b53 style boot sector
############################################################################
# Linux 8086 executable
0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
>5 string .
>>4 string >\0 \b, libc version %s
0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable
>2 byte&0x01 !0 \b, unmapped zero page
>2 byte&0x20 0 \b, impure
>2 byte&0x20 !0
>>2 byte&0x10 !0 \b, A_EXEC
>2 byte&0x02 !0 \b, A_PAL
>2 byte&0x04 !0 \b, A_NSYM
>2 byte&0x08 !0 \b, A_STAND
>2 byte&0x40 !0 \b, A_PURE
>2 byte&0x80 !0 \b, A_TOVLY
>28 long !0 \b, not stripped
>37 string .
>>36 string >\0 \b, libc version %s
# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable
# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable
# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable
# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable

View File

@ -3,17 +3,24 @@
# lisp: file(1) magic for lisp programs
#
# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
# This is a guess, but a good one.
0 string ;; Lisp/Scheme program text
# Emacs 18 - this is always correct, but not very magical.
0 string \012( byte-compiled Emacs-Lisp program data
0 string \012( Emacs v18 byte-compiled Lisp data
# Emacs 19+ - ver. recognition added by Ian Springer
0 string ;ELC byte-compiled Emacs-Lisp program data,
>4 byte >0 version %d
#
# Also applies to XEmacs 19+ .elc files; could tell them apart if we had regexp
# support or similar - Chris Chittleborough <cchittleborough@yahoo.com.au>
0 string ;ELC
>4 byte >19
>4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>
0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program text
0 long 0x70768BD2 CLISP memory image data
0 long 0xD28B7670 CLISP memory image data, other endian
# Files produced by GNU gettext
0 long 0xDE120495 GNU-format message catalog data
0 long 0x950412DE GNU-format message catalog data

View File

@ -1,31 +1,36 @@
#------------------------------------------------------------------------------
# Mavroyanopoulos Nikos <nmav@hellug.gr>
# mcrypt: file(1) magic for mcrypt 2.2.x;
0 string \0m\2 mcrypt 2.2 encrypted data,
>3 byte 0 algorithm: blowfish-448,
>3 byte 1 algorithm: DES,
>3 byte 2 algorithm: 3DES,
>3 byte 3 algorithm: 3-WAY,
>3 byte 4 algorithm: GOST,
>3 byte 6 algorithm: SAFER-SK64,
>3 byte 7 algorithm: SAFER-SK128,
>3 byte 8 algorithm: CAST-128,
>3 byte 9 algorithm: xTEA,
>3 byte 10 algorithm: TWOFISH-128,
>3 byte 11 algorithm: RC2,
>3 byte 12 algorithm: TWOFISH-192,
>3 byte 13 algorithm: TWOFISH-256,
>3 byte 14 algorithm: blowfish-128,
>3 byte 15 algorithm: blowfish-192,
>3 byte 16 algorithm: blowfish-256,
>3 byte 100 algorithm: RC6,
>3 byte 101 algorithm: IDEA,
>4 byte 0 mode: CBC,
>4 byte 1 mode: ECB,
>4 byte 2 mode: CFB,
>4 byte 3 mode: OFB,
>4 byte 4 mode: nOFB,
>5 byte 0 keymode: 8bit
>5 byte 1 keymode: 4bit
>5 byte 2 keymode: SHA-1 hash
>5 byte 3 keymode: MD5 hash
0 string \0m\3 mcrypt 2.5 encrypted data,
>4 string >\0 algorithm: %s,
>>&1 leshort >0 keysize: %d bytes,
>>>&0 string >\0 mode: %s,
0 string \0m\2 mcrypt 2.2 encrypted data,
>3 byte 0 algorithm: blowfish-448,
>3 byte 1 algorithm: DES,
>3 byte 2 algorithm: 3DES,
>3 byte 3 algorithm: 3-WAY,
>3 byte 4 algorithm: GOST,
>3 byte 6 algorithm: SAFER-SK64,
>3 byte 7 algorithm: SAFER-SK128,
>3 byte 8 algorithm: CAST-128,
>3 byte 9 algorithm: xTEA,
>3 byte 10 algorithm: TWOFISH-128,
>3 byte 11 algorithm: RC2,
>3 byte 12 algorithm: TWOFISH-192,
>3 byte 13 algorithm: TWOFISH-256,
>3 byte 14 algorithm: blowfish-128,
>3 byte 15 algorithm: blowfish-192,
>3 byte 16 algorithm: blowfish-256,
>3 byte 100 algorithm: RC6,
>3 byte 101 algorithm: IDEA,
>4 byte 0 mode: CBC,
>4 byte 1 mode: ECB,
>4 byte 2 mode: CFB,
>4 byte 3 mode: OFB,
>4 byte 4 mode: nOFB,
>5 byte 0 keymode: 8bit
>5 byte 1 keymode: 4bit
>5 byte 2 keymode: SHA-1 hash
>5 byte 3 keymode: MD5 hash

View File

@ -0,0 +1,7 @@
#------------------------------------------------------------------------------
# mlssa: file(1) magic for MLSSA datafiles
#
0 lelong 0xffffabcd MLSSA datafile,
>4 leshort x algorithm %d,
>10 lelong x %d samples

View File

@ -0,0 +1,12 @@
#------------------------------------------------------------------------------
# nitpicker: file(1) magic for Flowfiles.
# From: Christian Jachmann <C.Jachmann@gmx.net> http://www.nitpicker.de
0 string NPFF NItpicker Flow File
>4 byte x V%d.
>5 byte x %d
>6 bedate x started: %s
>10 bedate x stopped: %s
>14 belong x Bytes: %u
>18 belong x Bytes1: %u
>22 belong x Flows: %u
>26 belong x Pkts: %u

18
contrib/file/Magdir/perl Normal file
View File

@ -0,0 +1,18 @@
#------------------------------------------------------------------------------
# perl: file(1) magic for Larry Wall's perl language.
#
# The ``eval'' line recognizes an outrageously clever hack for USG systems.
# Keith Waclena <keith@cerberus.uchicago.edu>
# Send additions to <perl5-porters@perl.org>
0 string/b #!\ /bin/perl perl script text executable
0 string eval\ "exec\ /bin/perl perl script text
0 string/b #!\ /usr/bin/perl perl script text executable
0 string eval\ "exec\ /usr/bin/perl perl script text
0 string/b #!\ /usr/local/bin/perl perl script text
0 string eval\ "exec\ /usr/local/bin/perl perl script text executable
# a couple more, by me
# XXX: christos matches
#0 regex package Perl5 module source text (via regex)
0 string package Perl5 module source text

View File

@ -86,3 +86,7 @@
>45 string >0 face %
# From Jukka Ukkonen
0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data
# From <mike@flyn.org>
# These are the /etc/magic entries to decode data sent to an Epson printer.
0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data

View File

@ -0,0 +1,12 @@
#------------------------------------------------------------------------------
# pulsar: file(1) magic for Pulsar POP3 daemon binary files
#
# http://pulsar.sourceforge.net
# mailto:rok.papez@lugos.si
#
0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file.
>4 ubelong x Version: %d.
>8 ubelong x \b%d

View File

@ -8,3 +8,12 @@
>16 string >\0 - version %s
0 short 0x271c Sendmail frozen configuration
>16 string >\0 - version %s
#------------------------------------------------------------------------------
# sendmail: file(1) magic for sendmail m4(1) files
#
# From Hendrik Scholz <hendrik@scholz.net>
# i.e. files in /usr/share/sendmail/cf/
#
0 string divert(-1)\n sendmail m4 text file

View File

@ -37,6 +37,10 @@
0 string \\documentclass LaTeX 2e document text
0 string \\relax LaTeX auxiliary file
0 string \\contentsline LaTeX table of contents
0 string %\ -*-latex-*- LaTeX document text
# Tex document, from Hendrik Scholz <hendrik@scholz.net>
0 string \\ifx TeX document text
# Index and glossary files
0 string \\indexentry LaTeX raw index file
@ -44,4 +48,56 @@
0 string \\glossaryentry LaTeX raw glossary
0 string \\begin{theglossary} LaTeX sorted glossary
0 string This\ is\ makeindex Makeindex log file
# End of TeX
#------------------------------------------------------------------------------
# file(1) magic for BibTex text files
# From Hendrik Scholz <hendrik@scholz.net>
0 string @article{ BibTex text file
0 string @book{ BibTex text file
0 string @inbook{ BibTex text file
0 string @incollection{ BibTex text file
0 string @inproceedings{ BibTex text file
0 string @manual{ BibTex text file
0 string @misc{ BibTex text file
0 string @preamble{ BibTex text file
0 string @phdthesis{ BibTex text file
0 string @techreport{ BibTex text file
0 string @unpublished{ BibTex text file
0 string @Article{ BibTex text file
0 string @Book{ BibTex text file
0 string @Inbook{ BibTex text file
0 string @Incollection{ BibTex text file
0 string @Inproceedings{ BibTex text file
0 string @Manual{ BibTex text file
0 string @Misc{ BibTex text file
0 string @Preamble{ BibTex text file
0 string @Phdthesis{ BibTex text file
0 string @Techreport{ BibTex text file
0 string @Unpublished{ BibTex text file
0 string @ARTICLE{ BibTex text file
0 string @BOOK{ BibTex text file
0 string @INBOOK{ BibTex text file
0 string @INCOLLECTION{ BibTex text file
0 string @INPROCEEDINGS{ BibTex text file
0 string @MANUAL{ BibTex text file
0 string @MISC{ BibTex text file
0 string @PREAMBLE{ BibTex text file
0 string @PHDTHESIS{ BibTex text file
0 string @TECHREPORT{ BibTex text file
0 string @UNPUBLISHED{ BibTex text file
73 string %%%\ \ BibTeX-file{ BibTex text file (with full header)
73 string %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header)
0 string %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file
0 string %\ BibTeX\ ` BibTeX custom bibliography style text file
0 string @c\ @mapfile{ TeX font aliases text file

6
contrib/file/Magdir/tgif Normal file
View File

@ -0,0 +1,6 @@
#------------------------------------------------------------------------------
# file(1) magic for tgif(1) files
# From Hendrik Scholz <hendrik@scholz.net>
0 string %TGIF\ 4 tgif version 4 object file

View File

@ -26,3 +26,7 @@
# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>
0 string gmon GNU prof performance data
>4 long x - version %ld
# From: Dave Pearson <davep@davep.org>
# Harbour <URL:http://www.harbour-project.org/> HRB files.
0 string \xc0HRB Harbour HRB file
>4 short x version %d

View File

@ -4,6 +4,7 @@
#
# From Felix von Leitner <leitner@fefe.de>
# Extended by Beni Cherniavsky <cben@crosswinds.net>
# Further extended by Greg Wooledge <greg@wooledge.org>
#
# Most (everything but the number of channels and bitrate) is commented
# out with `##' as it's not interesting to the average user. The most
@ -29,34 +30,44 @@
>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b,
# The above tests if at least one of these is specified:
>>>>>44 lelong !-1
>>>>>>44 lelong x >%lu
# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
# instead of -1.
>>>>>>44 lelong !-1000
>>>>>>>44 lelong x >%lu
>>>>>48 lelong !-1
>>>>>>48 lelong x ~%lu
>>>>>52 lelong !-1
>>>>>>52 lelong x <%lu
>>>>>>52 lelong !-1000
>>>>>>>52 lelong x <%lu
>>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff kbps
# -- Second vorbis header packet - the comments
>>>102 string \x03vorbis
# A kludge to read the vendor string. It's a counted string, not a
# zero-terminated one, so file(1) can't read it in a generic way.
# libVorbis is the only one existing currently, so I detect specifically
# it. The interesting value is the cvs date (8 digits decimal).
##>>>>113 string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
##>>>>>137 string >00000000 %.8s
# Post-RC1 Ogg files have the second header packet (and thus the version)
# in a different place, so we must use an indirect offset.
>>>(84.b+85) string \x03vorbis
>>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
>>>>>(84.b+120) string >00000000 %.8s
# Map to beta version numbers:
##>>>>>>137 string <20000508 (<beta1 - prepublic)
>>>>>>(84.b+120) string <20000508 (<beta1 - prepublic)
>>>>>>(84.b+120) string 20000508 (beta1/2)
>>>>>>(84.b+120) string >20000508
>>>>>>>(84.b+120) string <20001031 (beta2-3)
>>>>>>(84.b+120) string 20001031 (beta3)
>>>>>>(84.b+120) string >20001031
>>>>>>>(84.b+120) string <20010225 (beta3-4)
>>>>>>(84.b+120) string 20010225 (beta4)
>>>>>>(84.b+120) string >20010225
>>>>>>>(84.b+120) string <20010615 (beta4-RC1)
>>>>>>(84.b+120) string 20010615 (RC1)
>>>>>>(84.b+120) string 20010813 (RC2)
>>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1)
>>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2)
>>>>>>(84.b+120) string 20011217 (pre-RC3 CVS)
>>>>>>(84.b+120) string 20011231 (RC3)
# The string has not changed from beta1 to 2 - they are indistinguishable.
##>>>>>>137 string 20000508 (beta1/2)
##>>>>>>137 string >20000508
##>>>>>>>137 string <20001031 (beta2-3)
##>>>>>>137 string 20001031 (beta3)
##>>>>>>137 string >20001031
##>>>>>>>137 string <20010225 (beta3-4)
##>>>>>>137 string 20010225 (beta4)
##>>>>>>137 string >20010225
##>>>>>>>137 string <20010615 (beta4-RC1)
##>>>>>>137 string 20010615 (RC1)
##>>>>>>137 string >20010615 (>RC1)
# Then come the comments, again length-counted (and number-counted).
# Some looping constructs and registers would allow reading them but now
# it's impossible. However we can print the number of comments present

13
contrib/file/Magdir/vxl Normal file
View File

@ -0,0 +1,13 @@
#------------------------------------------------------------------------------
# VXL: file(1) magic for VXL binary IO data files
#
# from Ian Scott <scottim@sf.net>
#
# VXL is a collection of C++ libraries for Computer Vision.
# See the vsl chapter in the VXL Book for more info
# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
# http:/vxl.sf.net
2 lelong 0x472b2c4e VXL data file,
>0 leshort >0 schema version no %d

View File

@ -3,7 +3,7 @@ AUTOMAKE_OPTIONS = foreign no-dependencies
bin_PROGRAMS = file
data_DATA = magic magic.mime magic.mgc
data_DATA = magic magic.mime magic.mgc magic.mime.mgc
MAGIC = @datadir@/magic
CPPFLAGS = -DMAGIC='"$(MAGIC)"'
@ -23,7 +23,7 @@ file_SOURCES = file.c apprentice.c fsmagic.c softmagic.c ascmagic.c \
EXTRA_DIST = LEGAL.NOTICE MAINT PORTING Makefile.std magic2mime \
Localstuff Header $(magic_FRAGMENTS) file.man magic.man
CLEANFILES = $(man_MANS) magic magic.mgc
CLEANFILES = $(man_MANS) magic magic.mgc magic.mime.mgc
magic: Header Localstuff $(magic_FRAGMENTS)
cat $(srcdir)/Header $(srcdir)/Localstuff > $@
@ -39,6 +39,9 @@ magic: Header Localstuff $(magic_FRAGMENTS)
magic.mgc: magic file
./file -C -m magic
magic.mime.mgc: magic.mime file
./file -C -m $(srcdir)/magic.mime
file.1: Makefile file.man
@rm -f $@
sed -e s@__CSECTION__@1@g \
@ -53,31 +56,159 @@ magic.${fsect}: Makefile magic.man
-e s@__VERSION__@${VERSION}@g \
-e s@__MAGIC__@${MAGIC}@g $(srcdir)/magic.man > $@
magic_FRAGMENTS = Magdir/adi Magdir/adventure Magdir/allegro Magdir/alliant \
Magdir/alpha Magdir/amanda Magdir/amigaos Magdir/animation \
Magdir/apl Magdir/apple Magdir/applix Magdir/archive Magdir/asterix \
Magdir/att3b Magdir/audio Magdir/blender Magdir/blit Magdir/bsdi \
Magdir/c-lang Magdir/chi Magdir/cisco Magdir/claris Magdir/clipper \
Magdir/commands Magdir/compress Magdir/console Magdir/convex \
Magdir/database Magdir/diamond Magdir/diff Magdir/digital \
Magdir/dump Magdir/elf Magdir/encore Magdir/epoc Magdir/filesystems \
Magdir/flash Magdir/fonts Magdir/frame Magdir/freebsd Magdir/fsav \
Magdir/gimp Magdir/gnu Magdir/grace Magdir/hp Magdir/ibm370 \
Magdir/ibm6000 Magdir/iff Magdir/images Magdir/intel \
Magdir/interleaf Magdir/island Magdir/ispell Magdir/java \
Magdir/jpeg Magdir/karma Magdir/lecter Magdir/lex Magdir/lif \
Magdir/linux Magdir/lisp Magdir/mach Magdir/macintosh Magdir/magic \
Magdir/mail.news Magdir/maple Magdir/mathematica Magdir/mcrypt \
Magdir/mime Magdir/mips Magdir/mirage Magdir/mkid Magdir/mmdf Magdir/modem \
Magdir/motorola Magdir/msdos Magdir/msvc Magdir/ncr Magdir/netbsd \
Magdir/netscape Magdir/news Magdir/octave Magdir/olf Magdir/os2 \
Magdir/os9 Magdir/osf1 Magdir/palm Magdir/pbm Magdir/pdf Magdir/pdp \
Magdir/pgp Magdir/pkgadd Magdir/plus5 Magdir/printer Magdir/project \
Magdir/psdbms Magdir/pyramid Magdir/python Magdir/riff Magdir/rpm \
Magdir/rtf Magdir/sc Magdir/sccs Magdir/sendmail Magdir/sequent \
Magdir/sgml Magdir/sketch Magdir/sniffer Magdir/softquad Magdir/spectrum \
Magdir/sun Magdir/teapot Magdir/terminfo Magdir/tex Magdir/ti-8x \
Magdir/timezone Magdir/troff Magdir/typeset Magdir/unknown \
Magdir/uuencode Magdir/varied.out Magdir/vax Magdir/vicar Magdir/visx \
Magdir/vms Magdir/vmware Magdir/wordperfect Magdir/xdelta Magdir/xenix \
Magdir/zilog Magdir/zyxel
magic_FRAGMENTS = \
Magdir/acorn \
Magdir/adi \
Magdir/adventure \
Magdir/allegro \
Magdir/alliant \
Magdir/alpha \
Magdir/amanda \
Magdir/amigaos \
Magdir/animation \
Magdir/apl \
Magdir/apple \
Magdir/applix \
Magdir/archive \
Magdir/asterix \
Magdir/att3b \
Magdir/audio \
Magdir/blender \
Magdir/blit \
Magdir/bsdi \
Magdir/c-lang \
Magdir/cddb \
Magdir/chi \
Magdir/cisco \
Magdir/citrus \
Magdir/claris \
Magdir/clipper \
Magdir/commands \
Magdir/compress \
Magdir/console \
Magdir/convex \
Magdir/ctags \
Magdir/cvs \
Magdir/database \
Magdir/diamond \
Magdir/diff \
Magdir/digital \
Magdir/dolby \
Magdir/dump \
Magdir/dyadic \
Magdir/editors \
Magdir/elf \
Magdir/encore \
Magdir/epoc \
Magdir/filesystems \
Magdir/flash \
Magdir/fonts \
Magdir/frame \
Magdir/freebsd \
Magdir/fsav \
Magdir/gimp \
Magdir/gnu \
Magdir/grace \
Magdir/gringotts \
Magdir/hitachi-sh \
Magdir/hp \
Magdir/ibm370 \
Magdir/ibm6000 \
Magdir/iff \
Magdir/images \
Magdir/impulse \
Magdir/intel \
Magdir/interleaf \
Magdir/island \
Magdir/ispell \
Magdir/java \
Magdir/jpeg \
Magdir/karma \
Magdir/lecter \
Magdir/lex \
Magdir/lif \
Magdir/linux \
Magdir/lisp \
Magdir/mach \
Magdir/macintosh \
Magdir/magic \
Magdir/mail.news \
Magdir/maple \
Magdir/mathematica \
Magdir/mcrypt \
Magdir/mime \
Magdir/mips \
Magdir/mirage \
Magdir/mkid \
Magdir/mmdf \
Magdir/mlssa \
Magdir/modem \
Magdir/motorola \
Magdir/msdos \
Magdir/msvc \
Magdir/natinst \
Magdir/ncr \
Magdir/netbsd \
Magdir/netscape \
Magdir/news \
Magdir/nitpicker \
Magdir/octave \
Magdir/olf \
Magdir/os2 \
Magdir/os9 \
Magdir/osf1 \
Magdir/palm \
Magdir/parix \
Magdir/pbm \
Magdir/pdf \
Magdir/pdp \
Magdir/perl \
Magdir/pgp \
Magdir/pkgadd \
Magdir/plus5 \
Magdir/printer \
Magdir/project \
Magdir/psdbms \
Magdir/pulsar \
Magdir/pyramid \
Magdir/python \
Magdir/riff \
Magdir/rpm \
Magdir/rtf \
Magdir/sc \
Magdir/sccs \
Magdir/sendmail \
Magdir/sequent \
Magdir/sgml \
Magdir/sharc \
Magdir/sketch \
Magdir/smalltalk \
Magdir/sniffer \
Magdir/softquad \
Magdir/spectrum \
Magdir/sun \
Magdir/sysex \
Magdir/teapot \
Magdir/terminfo \
Magdir/tex \
Magdir/tgif \
Magdir/ti-8x \
Magdir/timezone \
Magdir/troff \
Magdir/tuxedo \
Magdir/typeset \
Magdir/unknown \
Magdir/uuencode \
Magdir/varied.out \
Magdir/vax \
Magdir/vicar \
Magdir/visx \
Magdir/vms \
Magdir/vmware \
Magdir/vorbis \
Magdir/vxl \
Magdir/wordperfect \
Magdir/xdelta \
Magdir/xenix \
Magdir/zilog \
Magdir/zyxel

View File

@ -69,7 +69,7 @@ AUTOMAKE_OPTIONS = foreign no-dependencies
bin_PROGRAMS = file
data_DATA = magic magic.mime magic.mgc
data_DATA = magic magic.mime magic.mgc magic.mime.mgc
MAGIC = @datadir@/magic
CPPFLAGS = -DMAGIC='"$(MAGIC)"'
@ -84,9 +84,9 @@ file_SOURCES = file.c apprentice.c fsmagic.c softmagic.c ascmagic.c compress.c
EXTRA_DIST = LEGAL.NOTICE MAINT PORTING Makefile.std magic2mime Localstuff Header $(magic_FRAGMENTS) file.man magic.man
CLEANFILES = $(man_MANS) magic magic.mgc
CLEANFILES = $(man_MANS) magic magic.mgc magic.mime.mgc
magic_FRAGMENTS = Magdir/adi Magdir/adventure Magdir/allegro Magdir/alliant Magdir/alpha Magdir/amanda Magdir/amigaos Magdir/animation Magdir/apl Magdir/apple Magdir/applix Magdir/archive Magdir/asterix Magdir/att3b Magdir/audio Magdir/blender Magdir/blit Magdir/bsdi Magdir/c-lang Magdir/chi Magdir/cisco Magdir/claris Magdir/clipper Magdir/commands Magdir/compress Magdir/console Magdir/convex Magdir/database Magdir/diamond Magdir/diff Magdir/digital Magdir/dump Magdir/elf Magdir/encore Magdir/epoc Magdir/filesystems Magdir/flash Magdir/fonts Magdir/frame Magdir/freebsd Magdir/fsav Magdir/gimp Magdir/gnu Magdir/grace Magdir/hp Magdir/ibm370 Magdir/ibm6000 Magdir/iff Magdir/images Magdir/intel Magdir/interleaf Magdir/island Magdir/ispell Magdir/java Magdir/jpeg Magdir/karma Magdir/lecter Magdir/lex Magdir/lif Magdir/linux Magdir/lisp Magdir/mach Magdir/macintosh Magdir/magic Magdir/mail.news Magdir/maple Magdir/mathematica Magdir/mcrypt Magdir/mime Magdir/mips Magdir/mirage Magdir/mkid Magdir/mmdf Magdir/modem Magdir/motorola Magdir/msdos Magdir/msvc Magdir/ncr Magdir/natinst Magdir/netbsd Magdir/netscape Magdir/news Magdir/octave Magdir/olf Magdir/os2 Magdir/os9 Magdir/osf1 Magdir/palm Magdir/pbm Magdir/pdf Magdir/pdp Magdir/pgp Magdir/pkgadd Magdir/plus5 Magdir/printer Magdir/project Magdir/psdbms Magdir/pyramid Magdir/python Magdir/riff Magdir/rpm Magdir/rtf Magdir/sc Magdir/sccs Magdir/sendmail Magdir/sequent Magdir/sgml Magdir/sketch Magdir/sniffer Magdir/softquad Magdir/spectrum Magdir/sun Magdir/teapot Magdir/terminfo Magdir/tex Magdir/ti-8x Magdir/timezone Magdir/troff Magdir/typeset Magdir/unknown Magdir/uuencode Magdir/varied.out Magdir/vax Magdir/vicar Magdir/visx Magdir/vms Magdir/vmware Magdir/wordperfect Magdir/xdelta Magdir/xenix Magdir/zilog Magdir/zyxel
magic_FRAGMENTS = Magdir/acorn Magdir/adi Magdir/adventure Magdir/allegro Magdir/alliant Magdir/alpha Magdir/amanda Magdir/amigaos Magdir/animation Magdir/apl Magdir/apple Magdir/applix Magdir/archive Magdir/asterix Magdir/att3b Magdir/audio Magdir/blender Magdir/blit Magdir/bsdi Magdir/c-lang Magdir/cddb Magdir/chi Magdir/cisco Magdir/citrus Magdir/claris Magdir/clipper Magdir/commands Magdir/compress Magdir/console Magdir/convex Magdir/ctags Magdir/cvs Magdir/database Magdir/diamond Magdir/diff Magdir/digital Magdir/dolby Magdir/dump Magdir/dyadic Magdir/editors Magdir/elf Magdir/encore Magdir/epoc Magdir/filesystems Magdir/flash Magdir/fonts Magdir/frame Magdir/freebsd Magdir/fsav Magdir/gimp Magdir/gnu Magdir/grace Magdir/gringotts Magdir/hitachi-sh Magdir/hp Magdir/ibm370 Magdir/ibm6000 Magdir/iff Magdir/images Magdir/impulse Magdir/intel Magdir/interleaf Magdir/island Magdir/ispell Magdir/java Magdir/jpeg Magdir/karma Magdir/lecter Magdir/lex Magdir/lif Magdir/linux Magdir/lisp Magdir/mach Magdir/macintosh Magdir/magic Magdir/mail.news Magdir/maple Magdir/mathematica Magdir/mcrypt Magdir/mime Magdir/mips Magdir/mirage Magdir/mkid Magdir/mmdf Magdir/mlssa Magdir/modem Magdir/motorola Magdir/msdos Magdir/msvc Magdir/natinst Magdir/ncr Magdir/netbsd Magdir/netscape Magdir/news Magdir/nitpicker Magdir/octave Magdir/olf Magdir/os2 Magdir/os9 Magdir/osf1 Magdir/palm Magdir/parix Magdir/pbm Magdir/pdf Magdir/pdp Magdir/perl Magdir/pgp Magdir/pkgadd Magdir/plus5 Magdir/printer Magdir/project Magdir/psdbms Magdir/pulsar Magdir/pyramid Magdir/python Magdir/riff Magdir/rpm Magdir/rtf Magdir/sc Magdir/sccs Magdir/sendmail Magdir/sequent Magdir/sgml Magdir/sharc Magdir/sketch Magdir/smalltalk Magdir/sniffer Magdir/softquad Magdir/spectrum Magdir/sun Magdir/sysex Magdir/teapot Magdir/terminfo Magdir/tex Magdir/tgif Magdir/ti-8x Magdir/timezone Magdir/troff Magdir/tuxedo Magdir/typeset Magdir/unknown Magdir/uuencode Magdir/varied.out Magdir/vax Magdir/vicar Magdir/visx Magdir/vms Magdir/vmware Magdir/vorbis Magdir/vxl Magdir/wordperfect Magdir/xdelta Magdir/xenix Magdir/zilog Magdir/zyxel
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@ -122,7 +122,7 @@ missing mkinstalldirs
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
TAR = tar
GZIP_ENV = --best
SOURCES = $(file_SOURCES)
OBJECTS = $(file_OBJECTS)
@ -520,6 +520,9 @@ magic: Header Localstuff $(magic_FRAGMENTS)
magic.mgc: magic file
./file -C -m magic
magic.mime.mgc: magic.mime file
./file -C -m $(srcdir)/magic.mime
file.1: Makefile file.man
@rm -f $@
sed -e s@__CSECTION__@1@g \

View File

@ -1,6 +1,6 @@
# Makefile for file(1) cmd.
# Copyright (c) Ian F. Darwin 86/09/01 - see LEGAL.NOTICE.
# @(#)$Id: Makefile.std,v 1.12 2001/09/03 14:44:21 christos Exp $
# @(#)$Id: Makefile.std,v 1.15 2002/07/03 18:57:52 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.
@ -22,7 +22,7 @@
#
# 4. This notice may not be removed or altered.
#
VERSION = 3.37
VERSION = 3.39
SHELL = /bin/sh
#MAGIC = /etc/magic
MAGIC = /usr/local/etc/magic
@ -71,10 +71,10 @@ LOCALOBJS = # localsrc/getopt.o localsrc/strtol.o \
LOCALINC = # localinc/*.h localinc/sys/*.h
SRCS = file.c apprentice.c fsmagic.c softmagic.c ascmagic.c \
compress.c is_tar.c readelf.c internat.c \
compress.c is_tar.c readelf.c \
print.c $(LOCALSRCS) $(LOCALINC)
OBJS = file.o apprentice.o fsmagic.o softmagic.o ascmagic.o \
compress.o is_tar.o readelf.o internat.o \
compress.o is_tar.o readelf.o \
print.o $(LOCALOBJS)
HDRS = file.h names.h patchlevel.h readelf.h tar.h

View File

@ -1,5 +1,5 @@
** README for file(1) Command **
@(#) $Id: README,v 1.25 2001/07/23 21:30:22 christos Exp $
@(#) $Id: README,v 1.26 2002/05/16 18:45:56 christos Exp $
This is Release 3.x of Ian Darwin's (copyright but distributable)
file(1) command. This version is the standard "file" command for Linux,
@ -8,7 +8,7 @@ file(1) command. This version is the standard "file" command for Linux,
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.
including byte-order independence.
The prime contributor to Release 3.0 was Christos Zoulas, who put
in hundreds of lines of source code changes, including his own
@ -43,7 +43,7 @@ Makefile - read this next, adapt it as needed (particularly
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
file(1) may not grok the embedded-space ("\ ") in
the current magic file, or may even not use the
magic file.
apprentice.c - parses /etc/magic to learn magic
@ -61,9 +61,8 @@ 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
readelf.[ch] - Standalone elf parsing code.
readelf.[ch] - Stand-alone elf parsing code.
compress.c - on-the-fly decompression.
internat.c - recognize international `text' files.
print.c - print results, errors, warnings.
If your gzip sometimes fails to decompress things complaining about a short

View File

@ -13,12 +13,21 @@
/* Define if the `long long' type works. */
#undef HAVE_LONG_LONG
/* Define if we have "tm_zone" in "struct tm". */
#undef HAVE_TM_ZONE
/* Define if we have a global "char * []" "tzname" variable. */
#undef HAVE_TZNAME
/* Define if we have "tm_isdst" in "struct tm". */
#undef HAVE_TM_ISDST
/* Define if we have a global "int" variable "daylight". */
#undef HAVE_DAYLIGHT
/* Define if we have a mkstemp */
#undef HAVE_MKSTEMP
/* Define to `unsigned char' if standard headers don't define. */
#undef uint8_t

View File

@ -1,5 +1,5 @@
dnl cloned from autoconf 2.13 acspecific.m4
AC_DEFUN(AC_C_LONG_LONG,
AC_DEFUN([AC_C_LONG_LONG],
[AC_CACHE_CHECK(for long long, ac_cv_c_long_long,
[if test "$GCC" = yes; then
ac_cv_c_long_long=yes
@ -14,23 +14,16 @@ if test $ac_cv_c_long_long = yes; then
fi
])
dnl from autoconf 2.13 acgeneral.m4, with patch:
dnl Date: Fri, 15 Jan 1999 05:52:41 -0800
dnl Message-ID: <199901151352.FAA18237@shade.twinsun.com>
dnl From: eggert@twinsun.com (Paul Eggert)
dnl Subject: autoconf 2.13 AC_CHECK_TYPE doesn't allow shell vars
dnl Newsgroups: gnu.utils.bug
dnl from autoconf 2.13 acspecific.m4, with changes to check for daylight
AC_DEFUN(AC_STRUCT_TIMEZONE_DAYLIGHT,
AC_DEFUN([AC_STRUCT_TIMEZONE_DAYLIGHT],
[AC_REQUIRE([AC_STRUCT_TM])dnl
AC_CACHE_CHECK([for tm_zone in struct tm], ac_cv_struct_tm_zone,
[AC_TRY_COMPILE([#include <sys/types.h>
#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_zone;],
ac_cv_struct_tm_zone=yes, ac_cv_struct_tm_zone=no)])
if test "$ac_cv_struct_tm_zone" = yes; then
AC_DEFINE(HAVE_TM_ZONE)
AC_DEFINE(HAVE_TM_ZONE,1,[HAVE_TM_ZONE])
fi
AC_CACHE_CHECK(for tzname, ac_cv_var_tzname,
[AC_TRY_LINK(
@ -42,7 +35,7 @@ extern char *tzname[]; /* RS6000 and others reject char **tzname. */
changequote([, ])dnl
[atoi(*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)])
if test $ac_cv_var_tzname = yes; then
AC_DEFINE(HAVE_TZNAME)
AC_DEFINE(HAVE_TZNAME,1,[HAVE_TZNAME])
fi
AC_CACHE_CHECK([for tm_isdst in struct tm], ac_cv_struct_tm_isdst,
@ -66,15 +59,27 @@ changequote([, ])dnl
fi
])
dnl AC_CHECK_TYPE2(TYPE, DEFAULT)
AC_DEFUN(AC_CHECK_TYPE2,
dnl from autoconf 2.13 acgeneral.m4, with patch:
dnl Date: Fri, 15 Jan 1999 05:52:41 -0800
dnl Message-ID: <199901151352.FAA18237@shade.twinsun.com>
dnl From: eggert@twinsun.com (Paul Eggert)
dnl Subject: autoconf 2.13 AC_CHECK_TYPE doesn't allow shell vars
dnl Newsgroups: gnu.utils.bug
dnl
dnl now include <stdint.h> if available
dnl AC_CHECK_TYPE2_STDC(TYPE, DEFAULT)
AC_DEFUN([AC_CHECK_TYPE2_STDC],
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_HEADER_STDINT])dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_type_$1,
[AC_EGREP_CPP(dnl
changequote(<<,>>)dnl
<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
changequote([,]), [#include <sys/types.h>
[(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]],
[#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
@ -88,14 +93,12 @@ fi
])
dnl from autoconf 2.13 acgeneral.m4, with additional third argument
dnl AC_CHECK_SIZEOF_INCLUDES(TYPE [, CROSS-SIZE, [INCLUDES]])
AC_DEFUN(AC_CHECK_SIZEOF_INCLUDES,
[changequote(<<, >>)dnl
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
dnl AC_CHECK_SIZEOF_INCLUDES(TYPE [, CROSS-SIZE [, INCLUDES]])
AC_DEFUN([AC_CHECK_SIZEOF_INCLUDES],
[dnl The name to #define.
define([AC_TYPE_NAME], translit(sizeof_$1, [[[a-z *]]], [[[A-Z_P]]]))dnl
dnl The cache variable name.
define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
changequote([, ])dnl
define([AC_CV_NAME], translit(ac_cv_sizeof_$1, [[[ *]]], [[[_p]]]))dnl
AC_MSG_CHECKING(size of $1)
AC_CACHE_VAL(AC_CV_NAME,
[AC_TRY_RUN([$3
@ -114,11 +117,138 @@ undefine([AC_CV_NAME])dnl
])
dnl AC_CHECK_SIZEOF_STDC_HEADERS(TYPE [, CROSS_SIZE])
AC_DEFUN(AC_CHECK_SIZEOF_STDC_HEADERS,
[AC_CHECK_SIZEOF_INCLUDES($1, $2,
[#include <sys/types.h>
AC_DEFUN([AC_CHECK_SIZEOF_STDC_HEADERS],
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_HEADER_STDINT])dnl
AC_CHECK_SIZEOF_INCLUDES($1, $2,
[#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#ifdef STDC_HEADERS
#include <stdlib.h>
#endif
])
])
dnl AC_CHECK_TYPE_STDC(TYPE, DEFAULT)
AC_DEFUN([AC_CHECK_TYPE_STDC],
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_HEADER_STDINT])dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_type_$1,
[AC_EGREP_CPP(dnl
[(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]],
[#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl
AC_MSG_RESULT($ac_cv_type_$1)
if test $ac_cv_type_$1 = no; then
AC_DEFINE($1, $2)
fi
])
dnl AC_HEADER_STDINT
AC_DEFUN([AC_HEADER_STDINT], [AC_CHECK_HEADERS(stdint.h)])
#serial 19
dnl By default, many hosts won't let programs access large files;
dnl one must use special compiler options to get large-file access to work.
dnl For more details about this brain damage please see:
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
dnl Written by Paul Eggert <eggert@twinsun.com>.
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_TEST_INCLUDES
AC_DEFUN([AC_SYS_LARGEFILE_TEST_INCLUDES],
[[#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply "#define LARGE_OFF_T 9223372036854775807",
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
# define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
]])
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR, COMMENT, INCLU=
DES, FUNCTION-BODY)
AC_DEFUN([AC_SYS_LARGEFILE_MACRO_VALUE],
[AC_CACHE_CHECK([for $1 value needed for large files], $3,
[$3=no
AC_TRY_COMPILE([$5],
[$6],
,
[AC_TRY_COMPILE([#define $1 $2]
[$5]
,
[$6],
[$3=$2])])])
if test "[$]$3" != no; then
AC_DEFINE_UNQUOTED([$1], [$]$3, [$4])
fi])
AC_DEFUN([AC_SYS_LARGEFILE],
[AC_REQUIRE([AC_PROG_CC])
AC_ARG_ENABLE(largefile,
[ --disable-largefile omit support for large files])
if test "$enable_largefile" != no; then
AC_CACHE_CHECK([for special C compiler options needed for large files=
],
ac_cv_sys_largefile_CC,
[ac_cv_sys_largefile_CC=no
if test "$GCC" != yes; then
# IRIX 6.2 and later do not support large files by default,
# so use the C compiler's -n32 option if that helps.
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , ,
[ac_save_CC="$CC"
CC="$CC -n32"
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, ,
ac_cv_sys_largefile_CC=' -n32')
CC="$ac_save_CC"])
fi])
if test "$ac_cv_sys_largefile_CC" != no; then
CC="$CC$ac_cv_sys_largefile_CC"
fi
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
ac_cv_sys_file_offset_bits,
[Number of bits in a file offset, on hosts where this is settable.],
AC_SYS_LARGEFILE_TEST_INCLUDES)
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
ac_cv_sys_large_files,
[Define for large files, on AIX-style hosts.],
AC_SYS_LARGEFILE_TEST_INCLUDES)
fi
])
AC_DEFUN([AC_FUNC_FSEEKO],
[AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1,
ac_cv_sys_largefile_source,
[Define to make fseeko visible on some hosts (e.g. glibc 2.2).],
[#include <stdio.h>], [return !fseeko;])
# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
# in glibc 2.1.3, but that breaks too many other things.
# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
AC_CACHE_CHECK([for fseeko], ac_cv_func_fseeko,
[ac_cv_func_fseeko=no
AC_TRY_LINK([#include <stdio.h>],
[return fseeko && fseeko (stdin, 0, 0);],
[ac_cv_func_fseeko=yes])])
if test $ac_cv_func_fseeko != no; then
AC_DEFINE(HAVE_FSEEKO, 1,
[Define if fseeko (and presumably ftello) exists and is declared.])
fi])

View File

@ -11,7 +11,7 @@ dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
dnl cloned from autoconf 2.13 acspecific.m4
AC_DEFUN(AC_C_LONG_LONG,
AC_DEFUN([AC_C_LONG_LONG],
[AC_CACHE_CHECK(for long long, ac_cv_c_long_long,
[if test "$GCC" = yes; then
ac_cv_c_long_long=yes
@ -26,23 +26,16 @@ if test $ac_cv_c_long_long = yes; then
fi
])
dnl from autoconf 2.13 acgeneral.m4, with patch:
dnl Date: Fri, 15 Jan 1999 05:52:41 -0800
dnl Message-ID: <199901151352.FAA18237@shade.twinsun.com>
dnl From: eggert@twinsun.com (Paul Eggert)
dnl Subject: autoconf 2.13 AC_CHECK_TYPE doesn't allow shell vars
dnl Newsgroups: gnu.utils.bug
dnl from autoconf 2.13 acspecific.m4, with changes to check for daylight
AC_DEFUN(AC_STRUCT_TIMEZONE_DAYLIGHT,
AC_DEFUN([AC_STRUCT_TIMEZONE_DAYLIGHT],
[AC_REQUIRE([AC_STRUCT_TM])dnl
AC_CACHE_CHECK([for tm_zone in struct tm], ac_cv_struct_tm_zone,
[AC_TRY_COMPILE([#include <sys/types.h>
#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_zone;],
ac_cv_struct_tm_zone=yes, ac_cv_struct_tm_zone=no)])
if test "$ac_cv_struct_tm_zone" = yes; then
AC_DEFINE(HAVE_TM_ZONE)
AC_DEFINE(HAVE_TM_ZONE,1,[HAVE_TM_ZONE])
fi
AC_CACHE_CHECK(for tzname, ac_cv_var_tzname,
[AC_TRY_LINK(
@ -54,7 +47,7 @@ extern char *tzname[]; /* RS6000 and others reject char **tzname. */
changequote([, ])dnl
[atoi(*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)])
if test $ac_cv_var_tzname = yes; then
AC_DEFINE(HAVE_TZNAME)
AC_DEFINE(HAVE_TZNAME,1,[HAVE_TZNAME])
fi
AC_CACHE_CHECK([for tm_isdst in struct tm], ac_cv_struct_tm_isdst,
@ -78,15 +71,27 @@ changequote([, ])dnl
fi
])
dnl AC_CHECK_TYPE2(TYPE, DEFAULT)
AC_DEFUN(AC_CHECK_TYPE2,
dnl from autoconf 2.13 acgeneral.m4, with patch:
dnl Date: Fri, 15 Jan 1999 05:52:41 -0800
dnl Message-ID: <199901151352.FAA18237@shade.twinsun.com>
dnl From: eggert@twinsun.com (Paul Eggert)
dnl Subject: autoconf 2.13 AC_CHECK_TYPE doesn't allow shell vars
dnl Newsgroups: gnu.utils.bug
dnl
dnl now include <stdint.h> if available
dnl AC_CHECK_TYPE2_STDC(TYPE, DEFAULT)
AC_DEFUN([AC_CHECK_TYPE2_STDC],
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_HEADER_STDINT])dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_type_$1,
[AC_EGREP_CPP(dnl
changequote(<<,>>)dnl
<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
changequote([,]), [#include <sys/types.h>
[(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]],
[#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
@ -100,14 +105,12 @@ fi
])
dnl from autoconf 2.13 acgeneral.m4, with additional third argument
dnl AC_CHECK_SIZEOF_INCLUDES(TYPE [, CROSS-SIZE, [INCLUDES]])
AC_DEFUN(AC_CHECK_SIZEOF_INCLUDES,
[changequote(<<, >>)dnl
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
dnl AC_CHECK_SIZEOF_INCLUDES(TYPE [, CROSS-SIZE [, INCLUDES]])
AC_DEFUN([AC_CHECK_SIZEOF_INCLUDES],
[dnl The name to #define.
define([AC_TYPE_NAME], translit(sizeof_$1, [[[a-z *]]], [[[A-Z_P]]]))dnl
dnl The cache variable name.
define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
changequote([, ])dnl
define([AC_CV_NAME], translit(ac_cv_sizeof_$1, [[[ *]]], [[[_p]]]))dnl
AC_MSG_CHECKING(size of $1)
AC_CACHE_VAL(AC_CV_NAME,
[AC_TRY_RUN([$3
@ -126,15 +129,142 @@ undefine([AC_CV_NAME])dnl
])
dnl AC_CHECK_SIZEOF_STDC_HEADERS(TYPE [, CROSS_SIZE])
AC_DEFUN(AC_CHECK_SIZEOF_STDC_HEADERS,
[AC_CHECK_SIZEOF_INCLUDES($1, $2,
[#include <sys/types.h>
AC_DEFUN([AC_CHECK_SIZEOF_STDC_HEADERS],
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_HEADER_STDINT])dnl
AC_CHECK_SIZEOF_INCLUDES($1, $2,
[#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#ifdef STDC_HEADERS
#include <stdlib.h>
#endif
])
])
dnl AC_CHECK_TYPE_STDC(TYPE, DEFAULT)
AC_DEFUN([AC_CHECK_TYPE_STDC],
[AC_REQUIRE([AC_HEADER_STDC])dnl
AC_REQUIRE([AC_HEADER_STDINT])dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_type_$1,
[AC_EGREP_CPP(dnl
[(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]],
[#if HAVE_STDINT_H
#include <stdint.h>
#endif
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl
AC_MSG_RESULT($ac_cv_type_$1)
if test $ac_cv_type_$1 = no; then
AC_DEFINE($1, $2)
fi
])
dnl AC_HEADER_STDINT
AC_DEFUN([AC_HEADER_STDINT], [AC_CHECK_HEADERS(stdint.h)])
#serial 19
dnl By default, many hosts won't let programs access large files;
dnl one must use special compiler options to get large-file access to work.
dnl For more details about this brain damage please see:
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
dnl Written by Paul Eggert <eggert@twinsun.com>.
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_TEST_INCLUDES
AC_DEFUN([AC_SYS_LARGEFILE_TEST_INCLUDES],
[[#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply "#define LARGE_OFF_T 9223372036854775807",
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
# define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
]])
dnl Internal subroutine of AC_SYS_LARGEFILE.
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR, COMMENT, INCLU=
DES, FUNCTION-BODY)
AC_DEFUN([AC_SYS_LARGEFILE_MACRO_VALUE],
[AC_CACHE_CHECK([for $1 value needed for large files], $3,
[$3=no
AC_TRY_COMPILE([$5],
[$6],
,
[AC_TRY_COMPILE([#define $1 $2]
[$5]
,
[$6],
[$3=$2])])])
if test "[$]$3" != no; then
AC_DEFINE_UNQUOTED([$1], [$]$3, [$4])
fi])
AC_DEFUN([AC_SYS_LARGEFILE],
[AC_REQUIRE([AC_PROG_CC])
AC_ARG_ENABLE(largefile,
[ --disable-largefile omit support for large files])
if test "$enable_largefile" != no; then
AC_CACHE_CHECK([for special C compiler options needed for large files=
],
ac_cv_sys_largefile_CC,
[ac_cv_sys_largefile_CC=no
if test "$GCC" != yes; then
# IRIX 6.2 and later do not support large files by default,
# so use the C compiler's -n32 option if that helps.
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , ,
[ac_save_CC="$CC"
CC="$CC -n32"
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, ,
ac_cv_sys_largefile_CC=' -n32')
CC="$ac_save_CC"])
fi])
if test "$ac_cv_sys_largefile_CC" != no; then
CC="$CC$ac_cv_sys_largefile_CC"
fi
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
ac_cv_sys_file_offset_bits,
[Number of bits in a file offset, on hosts where this is settable.],
AC_SYS_LARGEFILE_TEST_INCLUDES)
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
ac_cv_sys_large_files,
[Define for large files, on AIX-style hosts.],
AC_SYS_LARGEFILE_TEST_INCLUDES)
fi
])
AC_DEFUN([AC_FUNC_FSEEKO],
[AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1,
ac_cv_sys_largefile_source,
[Define to make fseeko visible on some hosts (e.g. glibc 2.2).],
[#include <stdio.h>], [return !fseeko;])
# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
# in glibc 2.1.3, but that breaks too many other things.
# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
AC_CACHE_CHECK([for fseeko], ac_cv_func_fseeko,
[ac_cv_func_fseeko=no
AC_TRY_LINK([#include <stdio.h>],
[return fseeko && fseeko (stdin, 0, 0);],
[ac_cv_func_fseeko=yes])])
if test $ac_cv_func_fseeko != no; then
AC_DEFINE(HAVE_FSEEKO, 1,
[Define if fseeko (and presumably ftello) exists and is declared.])
fi])
# Do all the work for Automake. This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.

View File

@ -26,23 +26,19 @@
*/
#include "file.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <string.h>
#include <ctype.h>
#include <errno.h>
#ifdef QUICK
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef QUICK
#include <sys/mman.h>
#endif
#ifndef lint
FILE_RCSID("@(#)$Id: apprentice.c,v 1.44 2001/08/01 14:03:19 christos Exp $")
FILE_RCSID("@(#)$Id: apprentice.c,v 1.49 2002/07/03 19:00:41 christos Exp $")
#endif /* lint */
#define EATAB {while (isascii((unsigned char) *l) && \
@ -74,23 +70,20 @@ FILE_RCSID("@(#)$Id: apprentice.c,v 1.44 2001/08/01 14:03:19 christos Exp $")
#endif
static int getvalue __P((struct magic *, char **));
static int hextoint __P((int));
static char *getstr __P((char *, char *, int, int *));
static int parse __P((struct magic **, uint32 *, char *, int));
static void eatsize __P((char **));
static int apprentice_1 __P((const char *, int));
static int apprentice_file __P((struct magic **, uint32 *,
const char *, int));
static void byteswap __P((struct magic *, uint32));
static void bs1 __P((struct magic *));
static uint16 swap2 __P((uint16));
static uint32 swap4 __P((uint32));
static char *mkdbname __P((const char *));
static int apprentice_map __P((struct magic **, uint32 *,
const char *, int));
static int apprentice_compile __P((struct magic **, uint32 *,
const char *, int));
static int getvalue(struct magic *, char **);
static int hextoint(int);
static char *getstr(char *, char *, int, int *);
static int parse(struct magic **, uint32_t *, char *, int);
static void eatsize(char **);
static int apprentice_1(const char *, int);
static int apprentice_file(struct magic **, uint32_t *, const char *, int);
static void byteswap(struct magic *, uint32_t);
static void bs1(struct magic *);
static uint16_t swap2(uint16_t);
static uint32_t swap4(uint32_t);
static char *mkdbname(const char *);
static int apprentice_map(struct magic **, uint32_t *, const char *, int);
static int apprentice_compile(struct magic **, uint32_t *, const char *, int);
static int maxmagic = 0;
@ -101,12 +94,10 @@ const char *magicfile;
char *progname;
int lineno;
int main __P((int, char *[]));
int main(int, char *[]);
int
main(argc, argv)
int argc;
char *argv[];
main(int argc, char *argv[])
{
int ret;
@ -130,12 +121,10 @@ main(argc, argv)
* Handle one file.
*/
static int
apprentice_1(fn, action)
const char *fn;
int action;
apprentice_1(const char *fn, int action)
{
struct magic *magic = NULL;
uint32 nmagic = 0;
uint32_t nmagic = 0;
struct mlist *ml;
int rv = -1;
@ -180,10 +169,9 @@ apprentice_1(fn, action)
}
/* const char *fn: list of magic files */
int
apprentice(fn, action)
const char *fn; /* list of magic files */
int action;
apprentice(const char *fn, int action)
{
char *p, *mfn;
int file_err, errs = -1;
@ -221,13 +209,11 @@ apprentice(fn, action)
/*
* parse from a file
* const char *fn: name of magic file
*/
static int
apprentice_file(magicp, nmagicp, fn, action)
struct magic **magicp;
uint32 *nmagicp;
const char *fn; /* name of magic file */
int action;
apprentice_file(struct magic **magicp, uint32_t *nmagicp, const char *fn,
int action)
{
static const char hdr[] =
"cont\toffset\ttype\topcode\tmask\tvalue\tdesc";
@ -279,10 +265,8 @@ apprentice_file(magicp, nmagicp, fn, action)
/*
* extend the sign bit if the comparison is to be signed
*/
uint32
signextend(m, v)
struct magic *m;
uint32 v;
uint32_t
signextend(struct magic *m, uint32_t v)
{
if (!(m->flag & UNSIGNED))
switch(m->type) {
@ -308,11 +292,13 @@ signextend(m, v)
case LONG:
case BELONG:
case LELONG:
v = (int32) v;
v = (int32_t) v;
break;
case STRING:
case PSTRING:
break;
case REGEX:
break;
default:
magwarn("can't happen: m->type=%d\n",
m->type);
@ -325,11 +311,7 @@ signextend(m, v)
* parse one line from magic file, put into magic[index++] if valid
*/
static int
parse(magicp, nmagicp, l, action)
struct magic **magicp;
uint32 *nmagicp;
char *l;
int action;
parse(struct magic **magicp, uint32_t *nmagicp, char *l, int action)
{
int i = 0;
struct magic *m;
@ -479,6 +461,7 @@ parse(magicp, nmagicp, l, action)
#define NLDATE 5
#define NBELDATE 7
#define NLELDATE 7
#define NREGEX 5
if (*l == 'u') {
++l;
@ -534,6 +517,9 @@ parse(magicp, nmagicp, l, action)
} else if (strncmp(l, "leldate", NLELDATE)==0) {
m->type = LELDATE;
l += NLELDATE;
} else if (strncmp(l, "regex", NREGEX)==0) {
m->type = REGEX;
l += sizeof("regex");
} else {
magwarn("type %s invalid", l);
return -1;
@ -679,9 +665,11 @@ parse(magicp, nmagicp, l, action)
while ((m->desc[i++] = *l++) != '\0' && i<MAXDESC)
/* NULLBODY */;
#ifndef COMPILE_ONLY
if (action == CHECK) {
mdump(m);
}
#endif
++(*nmagicp); /* make room for next */
return 0;
}
@ -692,13 +680,11 @@ parse(magicp, nmagicp, l, action)
* just after the number read. Return 0 for success, non-zero for failure.
*/
static int
getvalue(m, p)
struct magic *m;
char **p;
getvalue(struct magic *m, char **p)
{
int slen;
if (m->type == STRING || m->type == PSTRING) {
if (m->type == STRING || m->type == PSTRING || m->type == REGEX) {
*p = getstr(*p, m->value.s, sizeof(m->value.s), &slen);
m->vallen = slen;
} else
@ -716,10 +702,7 @@ getvalue(m, p)
* Return updated scan pointer as function result.
*/
static char *
getstr(s, p, plen, slen)
char *s;
char *p;
int plen, *slen;
getstr(char *s, char *p, int plen, int *slen)
{
char *origs = s, *origp = p;
char *pmax = p + plen - 1;
@ -819,8 +802,7 @@ getstr(s, p, plen, slen)
/* Single hex char to int; -1 if not a hex char. */
static int
hextoint(c)
int c;
hextoint(int c)
{
if (!isascii((unsigned char) c))
return -1;
@ -838,10 +820,7 @@ hextoint(c)
* Print a string containing C character escapes.
*/
void
showstr(fp, s, len)
FILE *fp;
const char *s;
int len;
showstr(FILE *fp, const char *s, int len)
{
char c;
@ -897,8 +876,7 @@ showstr(fp, s, len)
* eatsize(): Eat the size spec from a number [eg. 10UL]
*/
static void
eatsize(p)
char **p;
eatsize(char **p)
{
char *l = *p;
@ -921,21 +899,19 @@ eatsize(p)
}
/*
* handle an mmaped file.
* handle a compiled file.
*/
static int
apprentice_map(magicp, nmagicp, fn, action)
struct magic **magicp;
uint32 *nmagicp;
const char *fn;
int action;
apprentice_map(struct magic **magicp, uint32_t *nmagicp, const char *fn,
int action)
{
int fd;
struct stat st;
uint32 *ptr;
uint32 version;
uint32_t *ptr;
uint32_t version;
int needsbyteswap;
char *dbname = mkdbname(fn);
void *mm;
if (dbname == NULL)
return -1;
@ -950,27 +926,28 @@ apprentice_map(magicp, nmagicp, fn, action)
}
#ifdef QUICK
if ((*magicp = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
if ((mm = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FILE, fd, (off_t)0)) == MAP_FAILED) {
(void)fprintf(stderr, "%s: Cannot map `%s' (%s)\n",
progname, dbname, strerror(errno));
goto error;
}
#else
if ((*magicp = malloc((size_t)st.st_size)) == NULL) {
if ((mm = malloc((size_t)st.st_size)) == NULL) {
(void) fprintf(stderr, "%s: Out of memory (%s).\n", progname,
strerror(errno));
goto error;
}
if (read(fd, *magicp, (size_t)st.st_size) != (size_t)st.st_size) {
if (read(fd, mm, (size_t)st.st_size) != (size_t)st.st_size) {
(void) fprintf(stderr, "%s: Read failed (%s).\n", progname,
strerror(errno));
goto error;
}
#endif
*magicp = mm;
(void)close(fd);
fd = -1;
ptr = (uint32 *) *magicp;
ptr = (uint32_t *) *magicp;
if (*ptr != MAGICNO) {
if (swap4(*ptr) != MAGICNO) {
(void)fprintf(stderr, "%s: Bad magic in `%s'\n",
@ -999,11 +976,11 @@ apprentice_map(magicp, nmagicp, fn, action)
error:
if (fd != -1)
(void)close(fd);
if (*magicp) {
if (mm) {
#ifdef QUICK
(void)munmap(*magicp, (size_t)st.st_size);
(void)munmap(mm, (size_t)st.st_size);
#else
free(*magicp);
free(mm);
#endif
} else {
*magicp = NULL;
@ -1016,15 +993,12 @@ apprentice_map(magicp, nmagicp, fn, action)
* handle an mmaped file.
*/
static int
apprentice_compile(magicp, nmagicp, fn, action)
struct magic **magicp;
uint32 *nmagicp;
const char *fn;
int action;
apprentice_compile(struct magic **magicp, uint32_t *nmagicp, const char *fn,
int action)
{
int fd;
char *dbname = mkdbname(fn);
static const uint32 ar[] = {
static const uint32_t ar[] = {
MAGICNO, VERSIONNO
};
@ -1064,8 +1038,7 @@ apprentice_compile(magicp, nmagicp, fn, action)
* make a dbname
*/
char *
mkdbname(fn)
const char *fn;
mkdbname(const char *fn)
{
static const char ext[] = ".mgc";
static char *buf = NULL;
@ -1088,11 +1061,9 @@ mkdbname(fn)
* Byteswap an mmap'ed file if needed
*/
static void
byteswap(magic, nmagic)
struct magic *magic;
uint32 nmagic;
byteswap(struct magic *magic, uint32_t nmagic)
{
uint32 i;
uint32_t i;
for (i = 0; i < nmagic; i++)
bs1(&magic[i]);
}
@ -1100,13 +1071,12 @@ byteswap(magic, nmagic)
/*
* swap a short
*/
static uint16
swap2(sv)
uint16 sv;
static uint16_t
swap2(uint16_t sv)
{
uint16 rv;
uint8 *s = (uint8 *) &sv;
uint8 *d = (uint8 *) &rv;
uint16_t rv;
uint8_t *s = (uint8_t *) &sv;
uint8_t *d = (uint8_t *) &rv;
d[0] = s[1];
d[1] = s[0];
return rv;
@ -1115,13 +1085,12 @@ swap2(sv)
/*
* swap an int
*/
static uint32
swap4(sv)
uint32 sv;
static uint32_t
swap4(uint32_t sv)
{
uint32 rv;
uint8 *s = (uint8 *) &sv;
uint8 *d = (uint8 *) &rv;
uint32_t rv;
uint8_t *s = (uint8_t *) &sv;
uint8_t *d = (uint8_t *) &rv;
d[0] = s[3];
d[1] = s[2];
d[2] = s[1];
@ -1133,8 +1102,7 @@ swap4(sv)
* byteswap a single magic entry
*/
static
void bs1(m)
struct magic *m;
void bs1(struct magic *m)
{
m->cont_level = swap2(m->cont_level);
m->offset = swap4(m->offset);

View File

@ -35,7 +35,6 @@
*/
#include "file.h"
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <ctype.h>
@ -46,7 +45,7 @@
#include "names.h"
#ifndef lint
FILE_RCSID("@(#)$Id: ascmagic.c,v 1.30 2001/07/26 13:15:49 christos Exp $")
FILE_RCSID("@(#)$Id: ascmagic.c,v 1.32 2002/07/03 18:26:37 christos Exp $")
#endif /* lint */
typedef unsigned long unichar;
@ -55,18 +54,17 @@ typedef unsigned long unichar;
#define ISSPC(x) ((x) == ' ' || (x) == '\t' || (x) == '\r' || (x) == '\n' \
|| (x) == 0x85 || (x) == '\f')
static int looks_ascii __P((const unsigned char *, int, unichar *, int *));
static int looks_utf8 __P((const unsigned char *, int, unichar *, int *));
static int looks_unicode __P((const unsigned char *, int, unichar *, int *));
static int looks_latin1 __P((const unsigned char *, int, unichar *, int *));
static int looks_extended __P((const unsigned char *, int, unichar *, int *));
static void from_ebcdic __P((const unsigned char *, int, unsigned char *));
static int ascmatch __P((const unsigned char *, const unichar *, int));
static int looks_ascii(const unsigned char *, int, unichar *, int *);
static int looks_utf8(const unsigned char *, int, unichar *, int *);
static int looks_unicode(const unsigned char *, int, unichar *, int *);
static int looks_latin1(const unsigned char *, int, unichar *, int *);
static int looks_extended(const unsigned char *, int, unichar *, int *);
static void from_ebcdic(const unsigned char *, int, unsigned char *);
static int ascmatch(const unsigned char *, const unichar *, int);
/* int nbytes: size actually read */
int
ascmagic(buf, nbytes)
unsigned char *buf;
int nbytes; /* size actually read */
ascmagic(unsigned char *buf, int nbytes)
{
int i;
char nbuf[HOWMANY+1]; /* one extra for terminating '\0' */
@ -322,10 +320,7 @@ ascmagic(buf, nbytes)
}
static int
ascmatch(s, us, ulen)
const unsigned char *s;
const unichar *us;
int ulen;
ascmatch(const unsigned char *s, const unichar *us, int ulen)
{
size_t i;
@ -420,11 +415,7 @@ static char text_chars[256] = {
};
static int
looks_ascii(buf, nbytes, ubuf, ulen)
const unsigned char *buf;
int nbytes;
unichar *ubuf;
int *ulen;
looks_ascii(const unsigned char *buf, int nbytes, unichar *ubuf, int *ulen)
{
int i;
@ -443,11 +434,7 @@ looks_ascii(buf, nbytes, ubuf, ulen)
}
static int
looks_latin1(buf, nbytes, ubuf, ulen)
const unsigned char *buf;
int nbytes;
unichar *ubuf;
int *ulen;
looks_latin1(const unsigned char *buf, int nbytes, unichar *ubuf, int *ulen)
{
int i;
@ -466,11 +453,7 @@ looks_latin1(buf, nbytes, ubuf, ulen)
}
static int
looks_extended(buf, nbytes, ubuf, ulen)
const unsigned char *buf;
int nbytes;
unichar *ubuf;
int *ulen;
looks_extended(const unsigned char *buf, int nbytes, unichar *ubuf, int *ulen)
{
int i;
@ -489,11 +472,7 @@ looks_extended(buf, nbytes, ubuf, ulen)
}
int
looks_utf8(buf, nbytes, ubuf, ulen)
const unsigned char *buf;
int nbytes;
unichar *ubuf;
int *ulen;
looks_utf8(const unsigned char *buf, int nbytes, unichar *ubuf, int *ulen)
{
int i, n;
unichar c;
@ -555,11 +534,7 @@ looks_utf8(buf, nbytes, ubuf, ulen)
}
static int
looks_unicode(buf, nbytes, ubuf, ulen)
const unsigned char *buf;
int nbytes;
unichar *ubuf;
int *ulen;
looks_unicode(const unsigned char *buf, int nbytes, unichar *ubuf, int *ulen)
{
int bigend;
int i;
@ -676,10 +651,7 @@ unsigned char ebcdic_1047_to_8859[] = {
* Copy buf[0 ... nbytes-1] into out[], translating EBCDIC to ASCII.
*/
static void
from_ebcdic(buf, nbytes, out)
const unsigned char *buf;
int nbytes;
unsigned char *out;
from_ebcdic(const unsigned char *buf, int nbytes, unsigned char *out)
{
int i;

View File

@ -6,7 +6,6 @@
* using method, return sizeof new
*/
#include "file.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@ -15,8 +14,12 @@
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
#ifdef HAVE_LIBZ
#include <zlib.h>
#endif
#ifndef lint
FILE_RCSID("@(#)$Id: compress.c,v 1.20 2001/07/22 21:04:15 christos Exp $")
FILE_RCSID("@(#)$Id: compress.c,v 1.25 2002/07/03 18:26:37 christos Exp $")
#endif
@ -41,14 +44,15 @@ static struct {
static int ncompr = sizeof(compr) / sizeof(compr[0]);
static int uncompress __P((int, const unsigned char *, unsigned char **, int));
static int swrite __P((int, const void *, size_t));
static int sread __P((int, void *, size_t));
static int swrite(int, const void *, size_t);
static int sread(int, void *, size_t);
static int uncompressbuf(int, const unsigned char *, unsigned char **, int);
#ifdef HAVE_LIBZ
static int uncompressgzipped(const unsigned char *, unsigned char **, int);
#endif
int
zmagic(buf, nbytes)
unsigned char *buf;
int nbytes;
zmagic(const char *fname, unsigned char *buf, int nbytes)
{
unsigned char *newbuf;
int newsize;
@ -58,11 +62,11 @@ zmagic(buf, nbytes)
if (nbytes < compr[i].maglen)
continue;
if (memcmp(buf, compr[i].magic, compr[i].maglen) == 0 &&
(newsize = uncompress(i, buf, &newbuf, nbytes)) != 0) {
tryit(newbuf, newsize, 1);
(newsize = uncompressbuf(i, buf, &newbuf, nbytes)) != 0) {
tryit(fname, newbuf, newsize, 1);
free(newbuf);
printf(" (");
tryit(buf, nbytes, 0);
tryit(fname, buf, nbytes, 0);
printf(")");
return 1;
}
@ -78,10 +82,7 @@ zmagic(buf, nbytes)
* `safe' write for sockets and pipes.
*/
static int
swrite(fd, buf, n)
int fd;
const void *buf;
size_t n;
swrite(int fd, const void *buf, size_t n)
{
int rv;
size_t rn = n;
@ -94,7 +95,7 @@ swrite(fd, buf, n)
return -1;
default:
n -= rv;
buf = ((char *)buf) + rv;
buf = ((const char *)buf) + rv;
break;
}
while (n > 0);
@ -106,10 +107,7 @@ swrite(fd, buf, n)
* `safe' read for sockets and pipes.
*/
static int
sread(fd, buf, n)
int fd;
void *buf;
size_t n;
sread(int fd, void *buf, size_t n)
{
int rv;
size_t rn = n;
@ -120,6 +118,8 @@ sread(fd, buf, n)
if (errno == EINTR)
continue;
return -1;
case 0:
return rn - n;
default:
n -= rv;
buf = ((char *)buf) + rv;
@ -129,15 +129,150 @@ sread(fd, buf, n)
return rn;
}
int
pipe2file(int fd, void *startbuf, size_t nbytes)
{
char buf[4096];
int r, tfd;
(void)strcpy(buf, "/tmp/file.XXXXXX");
#ifndef HAVE_MKSTEMP
{
char *ptr = mktemp(buf);
tfd = open(ptr, O_RDWR|O_TRUNC|O_EXCL|O_CREAT, 0600);
r = errno;
(void)unlink(ptr);
errno = r;
}
#else
tfd = mkstemp(buf);
r = errno;
(void)unlink(buf);
errno = r;
#endif
if (tfd == -1) {
error("Can't create temporary file for pipe copy (%s)\n",
strerror(errno));
/*NOTREACHED*/
}
if (swrite(tfd, startbuf, nbytes) != nbytes)
r = 1;
else {
while ((r = sread(fd, buf, sizeof(buf))) > 0)
if (swrite(tfd, buf, r) != r)
break;
}
switch (r) {
case -1:
error("Error copying from pipe to temp file (%s)\n",
strerror(errno));
/*NOTREACHED*/
case 0:
break;
default:
error("Error while writing to temp file (%s)\n",
strerror(errno));
/*NOTREACHED*/
}
/*
* We duplicate the file descriptor, because fclose on a
* tmpfile will delete the file, but any open descriptors
* can still access the phantom inode.
*/
if ((fd = dup2(tfd, fd)) == -1) {
error("Couldn't dup destcriptor for temp file(%s)\n",
strerror(errno));
/*NOTREACHED*/
}
(void)close(tfd);
if (lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) {
error("Couldn't seek on temp file (%s)\n", strerror(errno));
/*NOTREACHED*/
}
return fd;
}
#ifdef HAVE_LIBZ
#define FHCRC (1 << 1)
#define FEXTRA (1 << 2)
#define FNAME (1 << 3)
#define FCOMMENT (1 << 4)
static int
uncompress(method, old, newch, n)
int method;
const unsigned char *old;
unsigned char **newch;
int n;
uncompressgzipped(const unsigned char *old, unsigned char **newch, int n)
{
unsigned char flg = old[3];
int data_start = 10;
z_stream z;
int rc;
if (flg & FEXTRA)
data_start += 2 + old[data_start] + old[data_start + 1] * 256;
if (flg & FNAME) {
while(old[data_start])
data_start++;
data_start++;
}
if(flg & FCOMMENT) {
while(old[data_start])
data_start++;
data_start++;
}
if(flg & FHCRC)
data_start += 2;
if ((*newch = (unsigned char *)malloc(HOWMANY + 1)) == NULL) {
return 0;
}
z.next_in = (Bytef *)(old + data_start);
z.avail_in = n - data_start;
z.next_out = *newch;
z.avail_out = HOWMANY;
z.zalloc = Z_NULL;
z.zfree = Z_NULL;
z.opaque = Z_NULL;
rc = inflateInit2(&z, -15);
if (rc != Z_OK) {
(void) fprintf(stderr,"%s: zlib: %s\n", progname, z.msg);
return 0;
}
rc = inflate(&z, Z_SYNC_FLUSH);
if (rc != Z_OK && rc != Z_STREAM_END) {
fprintf(stderr,"%s: zlib: %s\n", progname, z.msg);
return 0;
}
n = z.total_out;
inflateEnd(&z);
/* let's keep the nul-terminate tradition */
(*newch)[n++] = '\0';
return n;
}
#endif
static int
uncompressbuf(int method, const unsigned char *old, unsigned char **newch,
int n)
{
int fdin[2], fdout[2];
/* The buffer is NUL terminated, and we don't need that. */
n--;
#ifdef HAVE_LIBZ
if (method == 2)
return uncompressgzipped(old,newch,n);
#endif
if (pipe(fdin) == -1 || pipe(fdout) == -1) {
error("cannot create pipe (%s).\n", strerror(errno));
/*NOTREACHED*/
@ -173,15 +308,17 @@ uncompress(method, old, newch, n)
}
(void) close(fdin[1]);
fdin[1] = -1;
if ((*newch = (unsigned char *) malloc(n)) == NULL) {
if ((*newch = (unsigned char *) malloc(HOWMANY + 1)) == NULL) {
n = 0;
goto err;
}
if ((n = sread(fdout[0], *newch, n)) <= 0) {
if ((n = sread(fdout[0], *newch, HOWMANY)) <= 0) {
free(*newch);
n = 0;
goto err;
}
/* NUL terminate, as every buffer is handled here. */
(*newch)[n++] = '\0';
err:
if (fdin[1] != -1)
(void) close(fdin[1]);

View File

@ -9,13 +9,6 @@
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
/* Define if your struct tm has tm_zone. */
#undef HAVE_TM_ZONE
/* Define if you don't have tm_zone but do have the external array
tzname. */
#undef HAVE_TZNAME
/* Define if major, minor, and makedev are declared in <mkdev.h>. */
#undef MAJOR_IN_MKDEV
@ -74,6 +67,9 @@
/* The number of bytes in a uint64_t. */
#define SIZEOF_UINT64_T 0
/* Define if you have the mkstemp function. */
#undef HAVE_MKSTEMP
/* Define if you have the mmap function. */
#undef HAVE_MMAP
@ -83,18 +79,48 @@
/* Define if you have the strtoul function. */
#undef HAVE_STRTOUL
/* Define if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define if you have the <getopt.h> header file. */
#undef HAVE_GETOPT_H
/* Define if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
/* Define if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H
/* Define if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define if you have the z library (-lz). */
#undef HAVE_LIBZ
/* Name of package */
#undef PACKAGE
/* Version number of package */
#undef VERSION
/* HAVE_TM_ZONE */
#undef HAVE_TM_ZONE
/* HAVE_TZNAME */
#undef HAVE_TZNAME
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES

678
contrib/file/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(file.c)
AM_INIT_AUTOMAKE(file, 3.37)
AM_INIT_AUTOMAKE(file, 3.39)
AM_CONFIG_HEADER(config.h)
AC_MSG_CHECKING(for builtin ELF support)
@ -57,9 +57,13 @@ dnl Checks for headers
AC_HEADER_STDC
AC_HEADER_MAJOR
AC_HEADER_SYS_WAIT
AC_HEADER_STDINT
AC_CHECK_HEADERS(fcntl.h locale.h)
AC_CHECK_HEADERS(sys/mman.h sys/stat.h sys/types.h)
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(getopt.h)
AC_CHECK_HEADERS(locale.h)
AC_CHECK_HEADERS(sys/mman.h)
AC_CHECK_HEADERS(stdint.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
@ -67,12 +71,11 @@ AC_TYPE_OFF_T
AC_TYPE_SIZE_T
AC_STRUCT_ST_RDEV
AC_STRUCT_TIMEZONE_DAYLIGHT
AC_SYS_LARGEFILE
dnl FIXME: only found in standard headers!
AC_CHECK_TYPE(uint8_t, unsigned char)
AC_CHECK_TYPE(uint16_t, unsigned short)
AC_CHECK_TYPE(uint32_t, unsigned int)
AC_CHECK_TYPE_STDC(uint8_t, unsigned char)
AC_CHECK_TYPE_STDC(uint16_t, unsigned short)
AC_CHECK_TYPE_STDC(uint32_t, unsigned int)
AC_C_LONG_LONG
if test $ac_cv_c_long_long = yes; then
long64='unsigned long long';
@ -80,7 +83,7 @@ else
long64='unsigned long';
fi
dnl This needs a patch to autoconf 2.13 acgeneral.m4
AC_CHECK_TYPE2(uint64_t, $long64)
AC_CHECK_TYPE2_STDC(uint64_t, $long64)
AC_CHECK_SIZEOF_STDC_HEADERS(uint8_t, 0)
AC_CHECK_SIZEOF_STDC_HEADERS(uint16_t, 0)
@ -88,6 +91,9 @@ AC_CHECK_SIZEOF_STDC_HEADERS(uint32_t, 0)
AC_CHECK_SIZEOF_STDC_HEADERS(uint64_t, 0)
dnl Checks for functions
AC_CHECK_FUNCS(mmap strerror strtoul)
AC_CHECK_FUNCS(mmap strerror strtoul mkstemp)
dnl Checks for libraries
AC_CHECK_LIB(z,gzopen)
AC_OUTPUT(Makefile)

View File

@ -24,13 +24,12 @@
*
* 4. This notice may not be removed or altered.
*/
#include <stdio.h>
#include "file.h"
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/param.h> /* for MAXPATHLEN */
#include <sys/stat.h>
#include <fcntl.h> /* for open() */
#ifdef RESTORE_TIME
# if (__COHERENT__ >= 0x420)
@ -50,13 +49,16 @@
#include <locale.h>
#endif
#ifdef HAVE_GETOPT_H
#include <getopt.h> /* for long options (is this portable?)*/
#endif
#include <netinet/in.h> /* for byte swapping */
#include "file.h"
#include "patchlevel.h"
#ifndef lint
FILE_RCSID("@(#)$Id: file.c,v 1.59 2001/07/23 00:02:32 christos Exp $")
FILE_RCSID("@(#)$Id: file.c,v 1.66 2002/07/03 19:00:41 christos Exp $")
#endif /* lint */
@ -66,6 +68,11 @@ FILE_RCSID("@(#)$Id: file.c,v 1.59 2001/07/23 00:02:32 christos Exp $")
# define USAGE "Usage: %s [-bciknsvz] [-f namefile] [-m magicfiles] file...\n"
#endif
#ifdef __EMX__
static char *apptypeName = NULL;
int os2_apptype (const char *fn, char *buf, int nb);
#endif /* __EMX__ */
#ifndef MAGIC
# define MAGIC "/etc/magic"
#endif
@ -96,32 +103,62 @@ char *progname; /* used throughout */
int lineno; /* line number in the magic file */
static void unwrap __P((char *fn));
static void usage __P((void));
static void unwrap(char *fn);
static void usage(void);
#ifdef HAVE_GETOPT_H
static void help(void);
#endif
#if 0
static int byteconv4 __P((int, int, int));
static short byteconv2 __P((int, int, int));
static int byteconv4(int, int, int);
static short byteconv2(int, int, int);
#endif
int main __P((int, char *[]));
int main(int, char *[]);
/*
* main - parse arguments and handle options
*/
int
main(argc, argv)
int argc;
char *argv[];
main(int argc, char **argv)
{
int c;
int action = 0, didsomefiles = 0, errflg = 0, ret = 0, app = 0;
char *mime, *home, *usermagic;
struct stat sb;
#define OPTSTRING "bcdf:ikm:nsvzCL"
#ifdef HAVE_GETOPT_H
int longindex;
static struct option long_options[] =
{
{"version", 0, 0, 'v'},
{"help", 0, 0, 0},
{"brief", 0, 0, 'b'},
{"checking-printout", 0, 0, 'c'},
{"debug", 0, 0, 'd'},
{"files-from", 1, 0, 'f'},
{"mime", 0, 0, 'i'},
{"keep-going", 0, 0, 'k'},
#ifdef S_IFLNK
{"dereference", 0, 0, 'L'},
#endif
{"magic-file", 1, 0, 'm'},
{"uncompress", 0, 0, 'z'},
{"no-buffer", 0, 0, 'n'},
{"special-files", 0, 0, 's'},
{"compile", 0, 0, 'C'},
{0, 0, 0, 0},
};
#endif
#ifdef LC_CTYPE
setlocale(LC_CTYPE, ""); /* makes islower etc work for other langs */
#endif
#ifdef __EMX__
/* sh-like wildcard expansion! Shouldn't hurt at least ... */
_wildcard(&argc, &argv);
#endif
if ((progname = strrchr(argv[0], '/')) != NULL)
progname++;
else
@ -142,8 +179,19 @@ main(argc, argv)
}
}
while ((c = getopt(argc, argv, "bcdf:ikm:nsvzCL")) != EOF)
#ifndef HAVE_GETOPT_H
while ((c = getopt(argc, argv, OPTSTRING)) != -1)
#else
while ((c = getopt_long(argc, argv, OPTSTRING, long_options,
&longindex)) != -1)
#endif
switch (c) {
#ifdef HAVE_GETOPT_H
case 0 :
if (longindex == 1)
help();
break;
#endif
case 'b':
++bflag;
break;
@ -241,8 +289,7 @@ main(argc, argv)
* unwrap -- read a file of filenames, do each one.
*/
static void
unwrap(fn)
char *fn;
unwrap(char *fn)
{
char buf[MAXPATHLEN];
FILE *f;
@ -286,10 +333,7 @@ unwrap(fn)
* big_endian whether we are a big endian host
*/
static int
byteconv4(from, same, big_endian)
int from;
int same;
int big_endian;
byteconv4(int from, int same, int big_endian)
{
if (same)
return from;
@ -316,10 +360,7 @@ byteconv4(from, same, big_endian)
* Same as byteconv4, but for shorts
*/
static short
byteconv2(from, same, big_endian)
int from;
int same;
int big_endian;
byteconv2(int from, int same, int big_endian)
{
if (same)
return from;
@ -344,9 +385,7 @@ byteconv2(from, same, big_endian)
* process - process input file
*/
void
process(inname, wid)
const char *inname;
int wid;
process(const char *inname, int wid)
{
int fd = 0;
static const char stdname[] = "standard input";
@ -400,7 +439,7 @@ process(inname, wid)
ckfputs(iflag ? "application/x-empty" : "empty", stdout);
else {
buf[nbytes++] = '\0'; /* null-terminate it */
match = tryit(buf, nbytes, zflag);
match = tryit(inname, buf, nbytes, zflag);
}
#ifdef BUILTIN_ELF
@ -446,12 +485,24 @@ process(inname, wid)
int
tryit(buf, nb, zflag)
unsigned char *buf;
int nb, zflag;
tryit(const char *fn, unsigned char *buf, int nb, int zfl)
{
/*
* The main work is done here!
* We have the file name and/or the data buffer to be identified.
*/
#ifdef __EMX__
/*
* Ok, here's the right place to add a call to some os-specific
* routine, e.g.
*/
if (os2_apptype(fn, buf, nb) == 1)
return 'o';
#endif
/* try compression stuff */
if (zflag && zmagic(buf, nb))
if (zfl && zmagic(fn, buf, nb))
return 'z';
/* try tests in /etc/magic (or surrogate magic file) */
@ -463,14 +514,46 @@ tryit(buf, nb, zflag)
return 'a';
/* abandon hope, all ye who remain here */
ckfputs("data", stdout);
ckfputs(iflag ? "application/octet-stream" : "data", stdout);
return '\0';
}
static void
usage()
usage(void)
{
(void)fprintf(stderr, USAGE, progname);
(void)fprintf(stderr, "Usage: %s -C [-m magic]\n", progname);
#ifdef HAVE_GETOPT_H
(void)fputs("Try `file --help' for more information.\n", stderr);
#endif
exit(1);
}
#ifdef HAVE_GETOPT_H
static void
help(void)
{
puts(
"Usage: file [OPTION]... [FILE]...\n"
"Determine file type of FILEs.\n"
"\n"
" -m, --magic-file LIST use LIST as a colon-separated list of magic\n"
" number files\n"
" -z, --uncompress try to look inside compressed files\n"
" -b, --brief do not prepend filenames to output lines\n"
" -c, --checking-printout print the parsed form of the magic file, use in\n"
" conjunction with -m to debug a new magic file\n"
" before installing it\n"
" -f, --files-from FILE read the filenames to be examined from FILE\n"
" -i, --mime output mime type strings\n"
" -k, --keep-going don't stop at the first match\n"
" -L, --dereference causes symlinks to be followed\n"
" -n, --no-buffer do not buffer output\n"
" -s, --special-files treat special (block/char devices) files as\n"
" ordinary ones\n"
" --help display this help and exit\n"
" --version output version information and exit\n"
);
exit(0);
}
#endif

View File

@ -1,6 +1,6 @@
/*
* file.h - definitions for file(1) program
* @(#)$Id: file.h,v 1.37 2001/07/22 21:04:15 christos Exp $
* @(#)$Id: file.h,v 1.43 2002/07/03 18:57:52 christos Exp $
*
* Copyright (c) Ian F. Darwin, 1987.
* Written by Ian F. Darwin.
@ -29,21 +29,28 @@
#ifndef __file_h__
#define __file_h__
#ifndef __linux__
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#endif
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
typedef int int32;
typedef unsigned int uint32;
typedef short int16;
typedef unsigned short uint16;
typedef char int8;
typedef unsigned char uint8;
#include <errno.h>
#include <stdio.h>
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
/* Do this here and now, because struct stat gets re-defined on solaris */
#include <sys/stat.h>
#ifndef HOWMANY
# define HOWMANY 16384 /* how much of the file to look at */
# define HOWMANY 65536 /* how much of the file to look at */
#endif
#define MAXMAGIS 1000 /* max entries in /etc/magic */
#define MAXMAGIS 4096 /* max entries in /etc/magic */
#define MAXDESC 50 /* max leng of text description */
#define MAXstring 32 /* max leng of "string" types */
@ -54,16 +61,16 @@ typedef unsigned char uint8;
#define COMPILE 2
struct magic {
uint16 cont_level;/* level of ">" */
uint8 nospflag; /* supress space character */
uint8 flag;
uint16_t cont_level; /* level of ">" */
uint8_t nospflag; /* supress space character */
uint8_t flag;
#define INDIR 1 /* if '>(...)' appears, */
#define UNSIGNED 2 /* comparison is unsigned */
#define OFFADD 4 /* if '>&' appears, */
uint8 reln; /* relation (0=eq, '>'=gt, etc) */
uint8 vallen; /* length of string value, if any */
uint8 type; /* int, short, long or string. */
uint8 in_type; /* type of indirrection */
uint8_t reln; /* relation (0=eq, '>'=gt, etc) */
uint8_t vallen; /* length of string value, if any */
uint8_t type; /* int, short, long or string. */
uint8_t in_type; /* type of indirrection */
#define BYTE 1
#define SHORT 2
#define LONG 4
@ -79,8 +86,9 @@ struct magic {
#define LDATE 14
#define BELDATE 15
#define LELDATE 16
uint8 in_op; /* operator for indirection */
uint8 mask_op; /* operator for mask */
#define REGEX 17
uint8_t in_op; /* operator for indirection */
uint8_t mask_op; /* operator for mask */
#define OPAND 1
#define OPOR 2
#define OPXOR 3
@ -90,19 +98,20 @@ struct magic {
#define OPDIVIDE 7
#define OPMODULO 8
#define OPINVERSE 0x80
int32 offset; /* offset to magic number */
int32 in_offset; /* offset from indirection */
int32_t offset; /* offset to magic number */
int32_t in_offset; /* offset from indirection */
union VALUETYPE {
unsigned char b;
unsigned short h;
uint32 l;
uint8_t b;
uint16_t h;
uint32_t l;
char s[MAXstring];
unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
unsigned char hl[4]; /* 4 bytes of a fixed-endian "long" */
char *buf;
uint8_t hs[2]; /* 2 bytes of a fixed-endian "short" */
uint8_t hl[4]; /* 4 bytes of a fixed-endian "long" */
} value; /* either number or string */
uint32 mask; /* mask before comparison with value */
uint32_t mask; /* mask before comparison with value */
char desc[MAXDESC]; /* description */
};
} __attribute__((__packed__));
#define BIT(A) (1 << (A))
#define STRING_IGNORE_LOWERCASE BIT(0)
@ -116,41 +125,31 @@ struct magic {
/* list of magic entries */
struct mlist {
struct magic *magic; /* array of magic entries */
uint32 nmagic; /* number of entries in array */
uint32_t nmagic; /* number of entries in array */
struct mlist *next, *prev;
};
#include <stdio.h> /* Include that here, to make sure __P gets defined */
#include <errno.h>
#ifndef __P
# if defined(__STDC__) || defined(__cplusplus)
# define __P(a) a
# else
# define __P(a) ()
# define const
# endif
#endif
extern int apprentice __P((const char *, int));
extern int ascmagic __P((unsigned char *, int));
extern void error __P((const char *, ...));
extern void ckfputs __P((const char *, FILE *));
extern int apprentice(const char *, int);
extern int ascmagic(unsigned char *, int);
extern void error(const char *, ...);
extern void ckfputs(const char *, FILE *);
struct stat;
extern int fsmagic __P((const char *, struct stat *));
extern char *fmttime __P((long, int));
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 int tryit __P((unsigned char *, int, int));
extern int zmagic __P((unsigned char *, int));
extern void ckfprintf __P((FILE *, const char *, ...));
extern uint32 signextend __P((struct magic *, unsigned int32));
extern void tryelf __P((int, unsigned char *, int));
extern int fsmagic(const char *, struct stat *);
extern char *fmttime(long, int);
extern int is_compress(const unsigned char *, int *);
extern int is_tar(unsigned char *, int);
extern void magwarn(const char *, ...);
extern void mdump(struct magic *);
extern void process(const char *, int);
extern void showstr(FILE *, const char *, int);
extern int softmagic(unsigned char *, int);
extern int tryit(const char *, unsigned char *, int, int);
extern int zmagic(const char *, unsigned char *, int);
extern void ckfprintf(FILE *, const char *, ...);
extern uint32_t signextend(struct magic *, unsigned int32);
extern void tryelf(int, unsigned char *, int);
extern int pipe2file(int, void *, size_t);
extern char *progname; /* the program name */
extern const char *magicfile; /* name of the magic file */
@ -164,8 +163,10 @@ extern int lflag; /* follow symbolic links? */
extern int sflag; /* read/analyze block special files? */
extern int iflag; /* Output types as mime-types */
#ifdef NEED_GETOPT
extern int optind; /* From getopt(3) */
extern char *optarg;
#endif
#ifndef HAVE_STRERROR
extern int sys_nerr;
@ -182,13 +183,9 @@ extern char *sys_errlist[];
#define QUICK
#endif
#ifdef __STDC__
#define FILE_RCSID(id) \
static const char *rcsid(const char *p) { \
return rcsid(p = id); \
}
#else
#define FILE_RCSID(id) static char rcsid[] = id;
#endif
#endif /* __file_h__ */

View File

@ -1,5 +1,5 @@
.TH FILE __CSECTION__ "Copyright but distributable"
.\" $Id: file.man,v 1.39 2001/04/27 22:48:33 christos Exp $
.\" $Id: file.man,v 1.42 2002/07/03 18:26:37 christos Exp $
.SH NAME
file
\- determine file type
@ -13,16 +13,16 @@ file
.I namefile
]
[
.B \-m
.B \-m
.I magicfiles
]
.I file
\&...
\*[Am]...
.br
.B file
.B -C
[
.B \-m
.B \-m
magicfile ]
.SH DESCRIPTION
This manual page documents version __VERSION__ of the
@ -54,7 +54,7 @@ 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,
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.
@ -77,13 +77,13 @@ Any known file types appropriate to the system you are running on
implement them)
are intuited if they are defined in
the system header file
.IR <sys/stat.h> .
.IR \*[Lt]sys/stat.h\*[Gt] .
.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)
.I a.out
file, whose format is defined in
file, whose format is defined in
.I a.out.h
and possibly
.I exec.h
@ -97,7 +97,7 @@ offset into the file can usually be described in this way.
The information identifying these files is read from the compiled
magic file
.I __MAGIC__.mgc ,
or
or
.I __MAGIC__
if the compile file does not exist.
.PP
@ -135,13 +135,13 @@ For example, the keyword
.B .br
indicates that the file is most likely a
.BR troff (1)
input file, just as the keyword
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
(such as
.BR tar (1)
archives).
.PP
@ -154,7 +154,7 @@ Do not prepend filenames to output lines (brief mode).
.TP 8
.B \-c
Cause a checking printout of the parsed form of the magic file.
This is usually used in conjunction with
This is usually used in conjunction with
.B \-m
to debug a new magic file before installing it.
.TP 8
@ -163,11 +163,11 @@ Write a magic.mgc output file that contains a pre-parsed version of
file.
.TP 8
.BI \-f " namefile"
Read the names of the files to be examined from
Read the names of the files to be examined from
.I namefile
(one per line)
(one per line)
before the argument list.
Either
Either
.I namefile
or at least one filename argument must be present;
to test the standard input, use ``\-'' as a filename argument.
@ -250,22 +250,22 @@ can be used to set the default magic number files.
.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.
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.
different (albeit more accurate) output in many cases.
.PP
The one significant difference
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)
\*[Gt]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)
\*[Gt]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
@ -281,16 +281,16 @@ SunOS releases 3.2 and later from Sun Microsystems include a
.BR 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,
It includes the extension of the `\*[Am]' operator, used as,
for example,
.br
>16 long&0x7fffffff >0 not stripped
\*[Gt]16 long\*[Am]0x7fffffff \*[Gt]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
A consolidation of magic file entries
will be distributed periodically.
.PP
The order of entries in the magic file is significant.
@ -300,16 +300,19 @@ If your old
.B file
command uses a magic file,
keep the old magic file around for comparison purposes
(rename it to
(rename it to
.IR __MAGIC__.orig ).
.SH EXAMPLES
.nf
$ file file.c file /dev/hda
$ file file.c file /dev/{wd0a,hda}
file.c: C program text
file: ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked, not stripped
/dev/hda: block special
file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda: block special (3/0)
$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
@ -323,30 +326,32 @@ $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda9: empty
/dev/hda10: empty
$ file -i file.c file /dev/hda
$ file -i file.c file /dev/{wd0a,hda}
file.c: text/x-c
file: application/x-executable, dynamically linked (uses shared libs), not stripped
file: application/x-executable, dynamically linked (uses shared libs),
not stripped
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file
.fi
.SH HISTORY
There has been a
There has been a
.B file
command in every \s-1UNIX\s0 since at least Research Version 6
(man page dated January 16, 1975).
command in every \s-1UNIX\s0 since at least Research Version 4
(man page dated November, 1973).
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 <ian@darwinsys.com>
was written by Ian Darwin \*[Lt]ian@darwinsys.com\*[Gt]
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.
Contributions by the `&' operator by Rob McMahon, cudcv@warwick.ac.uk, 1989.
Contributions by the `\*[Am]' operator by Rob McMahon, cudcv@warwick.ac.uk, 1989.
.PP
Guy Harris, guy@netapp.com, made many changes from 1993 to the present.
.PP
@ -413,11 +418,11 @@ 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
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
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.
@ -429,12 +434,12 @@ 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
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.
possible to use the first guess.
.PP
This program is slower than some vendors' file commands.
The new support for multiple character codes makes it even slower.

View File

@ -26,10 +26,7 @@
*/
#include "file.h"
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@ -54,13 +51,11 @@
#undef HAVE_MAJOR
#ifndef lint
FILE_RCSID("@(#)$Id: fsmagic.c,v 1.33 2000/08/05 17:36:48 christos Exp $")
FILE_RCSID("@(#)$Id: fsmagic.c,v 1.36 2002/07/03 19:00:41 christos Exp $")
#endif /* lint */
int
fsmagic(fn, sb)
const char *fn;
struct stat *sb;
fsmagic(const char *fn, struct stat *sb)
{
int ret = 0;

View File

@ -5,25 +5,25 @@
* Public 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.13 2000/08/05 17:36:48 christos Exp $
* $Id: is_tar.c,v 1.17 2002/07/03 18:26:38 christos Exp $
*
* Comments changed and some code/comments reformatted
* for file command by Ian Darwin.
*/
#include "file.h"
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include "tar.h"
#include "file.h"
#ifndef lint
FILE_RCSID("@(#)$Id: is_tar.c,v 1.13 2000/08/05 17:36:48 christos Exp $")
FILE_RCSID("@(#)$Id: is_tar.c,v 1.17 2002/07/03 18:26:38 christos Exp $")
#endif
#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
static int from_oct __P((int, char *)); /* Decode octal number */
static int from_oct(int, char *); /* Decode octal number */
/*
* Return
@ -32,9 +32,7 @@ static int from_oct __P((int, char *)); /* Decode octal number */
* 2 for Unix Std (POSIX) tar file.
*/
int
is_tar(buf, nbytes)
unsigned char *buf;
int nbytes;
is_tar(unsigned char *buf, int nbytes)
{
union record *header = (union record *)buf;
int i;
@ -77,9 +75,7 @@ is_tar(buf, nbytes)
* Result is -1 if the field is invalid (all blank, or nonoctal).
*/
static int
from_oct(digs, where)
int digs;
char *where;
from_oct(int digs, char *where)
{
int value;

View File

@ -7,7 +7,7 @@ This manual page documents the format of the magic file as
used by the
.BR file (__CSECTION__)
command, version __VERSION__. The
.B file
.BR file
command identifies the type of a file using,
among other tests,
a test for whether the file begins with a certain
@ -70,7 +70,7 @@ than UTC.
.RE
.PP
The numeric types may optionally be followed by
.B &
.B \*[Am]
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
@ -87,17 +87,17 @@ 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 < ,
.BR \*[Lt] ,
to specify that the value from the file must be less than the specified
value,
.BR > ,
.BR \*[Gt] ,
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
.BR \*[Am] ,
to specify that the value from the file must have set all of the bits
that are set in the specified value,
.BR ^ ,
to specify that the value from the file must have clear any of the bits
to specify that the value from the file must have clear any of the bits
that are set in the specified value, or
.BR x ,
to specify that any value will match. If the character is omitted,
@ -113,34 +113,34 @@ is octal, and
is hexadecimal.
.IP
For string values, the byte string from the
file must match the specified byte string.
file must match the specified byte string.
The operators
.BR = ,
.B <
.B \*[Lt]
and
.B >
.B \*[Gt]
(but not
.BR & )
.BR \*[Am] )
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
.B \*[Gt]\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
.BR printf (3S)
.BR printf (3)
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 >
.B \*[Gt]
indicates additional tests and messages to be printed. The number of
.B >
.B \*[Gt]
on the line indicates the level of the test; a line with no
.B >
.B \*[Gt]
at the beginning is considered to be at level 0.
Each line at level
.IB n \(pl1
@ -156,7 +156,7 @@ line at level
.I n
terminates this.
If the first character following the last
.B >
.B \*[Gt]
is a
.B (
then the string after the parenthesis is interpreted as an indirect offset.
@ -164,11 +164,11 @@ That means that the number after the parenthesis is used as an offset in
the file. The value at that offset is read, and is used again as an offset
in the file. Indirect offsets are of the form:
.BI (( x [.[bslBSL]][+-][ y ]).
The value of
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 [bslBSL]
depending on the
.B [bslBSL]
type specifier. The capitalized types interpret the number as a big endian
value, whereas the small letter versions interpet the number as a little
endian value. To that number the value of
@ -179,13 +179,13 @@ if one is not specified is long.
Sometimes you do not know the exact offset as this depends on the length of
preceding fields. You can specify an offset relative to the end of the
last uplevel field (of course this may only be done for sublevel tests, i.e.
test beginning with
.B >
test beginning with
.B \*[Gt]
). Such a relative offset is specified using
.B &
.B \*[Am]
as a prefix to the offset.
.SH BUGS
The formats
The formats
.IR long ,
.IR belong ,
.IR lelong ,
@ -197,7 +197,7 @@ The formats
and
.I ledate
are system-dependent; perhaps they should be specified as a number
of bytes (2B, 4B, etc),
of bytes (2B, 4B, etc),
since the files being recognized typically come from
a system on which the lengths are invariant.
.PP
@ -210,13 +210,13 @@ indirect offsets.
.\" From: guy@sun.uucp (Guy Harris)
.\" Newsgroups: net.bugs.usg
.\" Subject: /etc/magic's format isn't well documented
.\" Message-ID: <2752@sun.uucp>
.\" Message-ID: \*[Lt]2752@sun.uucp\*[Gt]
.\" 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.17 2001/08/07 15:38:42 christos Exp $
.\" @(#)$Id: magic.man,v 1.19 2002/07/03 18:26:38 christos Exp $

View File

@ -94,10 +94,9 @@
0 belong 0x2e7261fd application/x-realaudio
# MPEG Layer 3 sound files
# Modified the 11/20/97 at 15:59:04 by Christophe Prud'homme <christophe.prudhomme@asci.fr>
0 belong 0xfffb audio/x-mp3
0 beshort &0xffe0 audio/mpeg
#MP3 with ID3 tag
0 string ID3 audio/x-mp3
0 string ID3 audio/mpeg
# Ogg/Vorbis
0 string OggS audio/x-ogg
@ -541,3 +540,6 @@
#PNG Image Format
0 string \x89PNG image/png
# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
0 string \x8aMNG video/x-mng

View File

@ -1,7 +1,7 @@
/*
* 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
* the first HOWMANY bytes, while tokens in MAGIC must
* appear at fixed offsets into the file. Don't make HOWMANY
* too high unless you have a very fast CPU.
*
@ -10,7 +10,7 @@
*
* See LEGAL.NOTICE
*
* $Id: names.h,v 1.18 2000/08/05 17:36:49 christos Exp $
* $Id: names.h,v 1.19 2002/05/16 15:01:41 christos Exp $
*/
/*

View File

@ -1,11 +1,26 @@
#define FILE_VERSION_MAJOR 3
#define patchlevel 37
#define patchlevel 39
/*
* Patchlevel file for Ian Darwin's MAGIC command.
* $Id: patchlevel.h,v 1.37 2001/09/03 14:44:22 christos Exp $
* $Id: patchlevel.h,v 1.39 2002/07/03 18:57:52 christos Exp $
*
* $Log: patchlevel.h,v $
* Revision 1.39 2002/07/03 18:57:52 christos
* - ansify/c99ize
* - more magic
* - better COMPILE_ONLY support.
* - new magic files.
* - fix solaris compilation problems.
*
* Revision 1.38 2002/05/16 18:45:56 christos
* - pt_note elf additions from NetBSD
* - EMX os specific changes (Alexander Mai)
* - stdint.h detection, acconfig.h fixes (Maciej W. Rozycki, Franz Korntner)
* - regex file additions (Kim Cromie)
* - getopt_long support and misc cleanups (Michael Piefel)
* - many magic fixes and additions
*
* Revision 1.37 2001/09/03 14:44:22 christos
* daylight/tm_isdst detection
* magic fixes

View File

@ -26,8 +26,6 @@
*/
#include "file.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
#ifdef __STDC__
# include <stdarg.h>
@ -41,20 +39,20 @@
#include <time.h>
#ifndef lint
FILE_RCSID("@(#)$Id: print.c,v 1.34 2001/08/07 16:01:26 christos Exp $")
FILE_RCSID("@(#)$Id: print.c,v 1.38 2002/07/03 18:37:44 christos Exp $")
#endif /* lint */
#define SZOF(a) (sizeof(a) / sizeof(a[0]))
#ifndef COMPILE_ONLY
void
mdump(m)
struct magic *m;
mdump(struct magic *m)
{
static const char *typ[] = { "invalid", "byte", "short", "invalid",
"long", "string", "date", "beshort",
"belong", "bedate", "leshort", "lelong",
"ledate", "pstring", "ldate", "beldate",
"leldate" };
"leldate", "regex" };
static const char optyp[] = { '@', '&', '|', '^', '+', '-',
'*', '/', '%' };
(void) fputc('[', stderr);
@ -110,6 +108,7 @@ mdump(m)
break;
case STRING:
case PSTRING:
case REGEX:
showstr(stderr, m->value.s, -1);
break;
case DATE:
@ -129,15 +128,14 @@ mdump(m)
}
(void) fprintf(stderr, ",\"%s\"]\n", m->desc);
}
#endif
/*
* ckfputs - fputs, but with error checking
* ckfprintf - fprintf, but with error checking
*/
void
ckfputs(str, fil)
const char *str;
FILE *fil;
ckfputs(const char *str, FILE *fil)
{
if (fputs(str,fil) == EOF)
error("write failed.\n");
@ -145,23 +143,11 @@ ckfputs(str, fil)
/*VARARGS*/
void
#ifdef __STDC__
ckfprintf(FILE *f, const char *fmt, ...)
#else
ckfprintf(va_alist)
va_dcl
#endif
{
va_list va;
#ifdef __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");
@ -173,21 +159,11 @@ ckfprintf(va_alist)
*/
/*VARARGS*/
void
#ifdef __STDC__
error(const char *f, ...)
#else
error(va_alist)
va_dcl
#endif
{
va_list va;
#ifdef __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);
@ -200,21 +176,11 @@ error(va_alist)
/*VARARGS*/
void
#ifdef __STDC__
magwarn(const char *f, ...)
#else
magwarn(va_alist)
va_dcl
#endif
{
va_list va;
#ifdef __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);
@ -227,10 +193,9 @@ magwarn(va_alist)
}
#ifndef COMPILE_ONLY
char *
fmttime(v, local)
long v;
int local;
fmttime(long v, int local)
{
char *pp, *rt;
time_t t = (time_t)v;
@ -262,3 +227,4 @@ fmttime(v, local)
*rt = '\0';
return pp;
}
#endif

View File

@ -1,36 +1,31 @@
#include "file.h"
#ifdef BUILTIN_ELF
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <errno.h>
#include "readelf.h"
#ifndef lint
FILE_RCSID("@(#)$Id: readelf.c,v 1.17 2000/08/05 19:00:12 christos Exp $")
FILE_RCSID("@(#)$Id: readelf.c,v 1.22 2002/07/03 18:26:38 christos Exp $")
#endif
#ifdef ELFCORE
static void dophn_core __P((int, int, int, off_t, int, size_t));
static void dophn_core(int, int, int, off_t, int, size_t);
#endif
static void dophn_exec __P((int, int, int, off_t, int, size_t));
static void doshn __P((int, int, int, off_t, int, size_t));
static void dophn_exec(int, int, int, off_t, int, size_t);
static void doshn(int, int, int, off_t, int, size_t);
static uint16_t getu16 __P((int, int));
static uint32_t getu32 __P((int, uint32_t));
static uint64_t getu64 __P((int, uint64_t));
static uint16_t getu16(int, uint16_t);
static uint32_t getu32(int, uint32_t);
static uint64_t getu64(int, uint64_t);
static uint16_t
getu16(swap, value)
int swap;
uint16_t value;
getu16(int swap, uint16_t value)
{
union {
uint16_t ui;
@ -49,9 +44,7 @@ getu16(swap, value)
}
static uint32_t
getu32(swap, value)
int swap;
uint32_t value;
getu32(int swap, uint32_t value)
{
union {
uint32_t ui;
@ -72,9 +65,7 @@ getu32(swap, value)
}
static uint64_t
getu64(swap, value)
int swap;
uint64_t value;
getu64(int swap, uint64_t value)
{
union {
uint64_t ui;
@ -130,13 +121,7 @@ getu64(swap, value)
: prpsoffsets64[i])
static void
doshn(class, swap, fd, off, num, size)
int class;
int swap;
int fd;
off_t off;
int num;
size_t size;
doshn(int class, int swap, int fd, off_t off, int num, size_t size)
{
Elf32_Shdr sh32;
Elf64_Shdr sh64;
@ -161,18 +146,17 @@ doshn(class, swap, fd, off, num, size)
* otherwise it's statically linked.
*/
static void
dophn_exec(class, swap, fd, off, num, size)
int class;
int swap;
int fd;
off_t off;
int num;
size_t size;
dophn_exec(int class, int swap, int fd, off_t off, int num, size_t size)
{
Elf32_Phdr ph32;
Elf32_Nhdr *nh32 = NULL;
Elf64_Phdr ph64;
Elf64_Nhdr *nh64 = NULL;
char *linking_style = "statically";
char *shared_libraries = "";
char nbuf[BUFSIZ];
int bufsize;
size_t offset, nameoffset;
if (lseek(fd, off, SEEK_SET) == -1)
error("lseek failed (%s).\n", strerror(errno));
@ -188,6 +172,112 @@ dophn_exec(class, swap, fd, off, num, size)
case PT_INTERP:
shared_libraries = " (uses shared libs)";
break;
case PT_NOTE:
/*
* This is a PT_NOTE section; loop through all the notes
* in the section.
*/
if (lseek(fd, (off_t) ph_offset, SEEK_SET) == -1)
error("lseek failed (%s).\n", strerror(errno));
bufsize = read(fd, nbuf, BUFSIZ);
if (bufsize == -1)
error(": " "read failed (%s).\n",
strerror(errno));
offset = 0;
for (;;) {
if (offset >= bufsize)
break;
if (class == ELFCLASS32)
nh32 = (Elf32_Nhdr *)&nbuf[offset];
else
nh64 = (Elf64_Nhdr *)&nbuf[offset];
offset += nh_size;
if (offset + nh_namesz >= bufsize) {
/*
* We're past the end of the buffer.
*/
break;
}
nameoffset = offset;
offset += nh_namesz;
offset = ((offset + 3)/4)*4;
if (offset + nh_descsz >= bufsize)
break;
if (nh_namesz == 4 &&
strcmp(&nbuf[nameoffset], "GNU") == 0 &&
nh_type == NT_GNU_VERSION &&
nh_descsz == 16) {
uint32_t *desc =
(uint32_t *)&nbuf[offset];
printf(", for GNU/");
switch (getu32(swap, desc[0])) {
case GNU_OS_LINUX:
printf("Linux");
break;
case GNU_OS_HURD:
printf("Hurd");
break;
case GNU_OS_SOLARIS:
printf("Solaris");
break;
default:
printf("<unknown>");
}
printf(" %d.%d.%d",
getu32(swap, desc[1]),
getu32(swap, desc[2]),
getu32(swap, desc[3]));
}
if (nh_namesz == 7 &&
strcmp(&nbuf[nameoffset], "NetBSD") == 0 &&
nh_type == NT_NETBSD_VERSION &&
nh_descsz == 4) {
printf(", for NetBSD");
/*
* Version number is stuck at 199905,
* and hence is basically content-free.
*/
}
if (nh_namesz == 8 &&
strcmp(&nbuf[nameoffset], "FreeBSD") == 0 &&
nh_type == NT_FREEBSD_VERSION &&
nh_descsz == 4) {
uint32_t desc = getu32(swap,
*(uint32_t *)&nbuf[offset]);
printf(", for FreeBSD");
/*
* Contents is __FreeBSD_version,
* whose relation to OS versions is
* defined by a huge table in the
* Porters' Handbook. Happily, the
* first three digits are the version
* number, at least in versions of
* FreeBSD that use this note.
*/
printf(" %d.%d", desc / 100000,
desc / 10000 % 10);
if (desc / 1000 % 10 > 0)
printf(".%d",
desc / 1000 % 10);
}
if (nh_namesz == 8 &&
strcmp(&nbuf[nameoffset], "OpenBSD") == 0 &&
nh_type == NT_OPENBSD_VERSION &&
nh_descsz == 4) {
printf(", for OpenBSD");
/* Content of note is always 0 */
}
}
break;
}
}
printf(", %s linked%s", linking_style, shared_libraries);
@ -230,25 +320,30 @@ size_t prpsoffsets64[] = {
* *do* have that binary, the debugger will probably tell you what
* signal it was.)
*/
#define OS_STYLE_SVR4 0
#define OS_STYLE_FREEBSD 1
#define OS_STYLE_NETBSD 2
static const char *os_style_names[] = {
"SVR4",
"FreeBSD",
"NetBSD",
};
static void
dophn_core(class, swap, fd, off, num, size)
int class;
int swap;
int fd;
off_t off;
int num;
size_t size;
dophn_core(int class, int swap, int fd, off_t off, int num, size_t size)
{
Elf32_Phdr ph32;
Elf32_Nhdr *nh32;
Elf32_Nhdr *nh32 = NULL;
Elf64_Phdr ph64;
Elf64_Nhdr *nh64;
Elf64_Nhdr *nh64 = NULL;
size_t offset, nameoffset, noffset, reloffset;
unsigned char c;
int i, j;
char nbuf[BUFSIZ];
int bufsize;
int is_freebsd;
int os_style = -1;
/*
* Loop through all the program headers.
@ -283,7 +378,7 @@ dophn_core(class, swap, fd, off, num, size)
/*
* Check whether this note has the name "CORE" or
* "FreeBSD".
* "FreeBSD", or "NetBSD-CORE".
*/
if (offset + nh_namesz >= bufsize) {
/*
@ -310,17 +405,50 @@ dophn_core(class, swap, fd, off, num, size)
* doesn't include the terminating null in the
* name....
*/
if ((nh_namesz == 4 &&
strncmp(&nbuf[nameoffset], "CORE", 4) == 0) ||
(nh_namesz == 5 &&
strcmp(&nbuf[nameoffset], "CORE") == 0))
is_freebsd = 0;
else if ((nh_namesz == 8 &&
strcmp(&nbuf[nameoffset], "FreeBSD") == 0))
is_freebsd = 1;
else
continue;
if (nh_type == NT_PRPSINFO) {
if (os_style == -1) {
if ((nh_namesz == 4 &&
strncmp(&nbuf[nameoffset],
"CORE", 4) == 0) ||
(nh_namesz == 5 &&
strcmp(&nbuf[nameoffset],
"CORE") == 0)) {
os_style = OS_STYLE_SVR4;
} else
if ((nh_namesz == 8 &&
strcmp(&nbuf[nameoffset],
"FreeBSD") == 0)) {
os_style = OS_STYLE_FREEBSD;
} else
if ((nh_namesz >= 11 &&
strncmp(&nbuf[nameoffset],
"NetBSD-CORE", 11) == 0)) {
os_style = OS_STYLE_NETBSD;
} else
continue;
printf(", %s-style", os_style_names[os_style]);
}
if (os_style == OS_STYLE_NETBSD &&
nh_type == NT_NETBSD_CORE_PROCINFO) {
uint32_t signo;
/*
* Extract the program name. It is at
* offset 0x7c, and is up to 32-bytes,
* including the terminating NUL.
*/
printf(", from '%.31s'", &nbuf[offset + 0x7c]);
/*
* Extract the signal number. It is at
* offset 0x08.
*/
memcpy(&signo, &nbuf[offset + 0x08],
sizeof(signo));
printf(" (signal %u)", getu32(swap, signo));
} else
if (os_style != OS_STYLE_NETBSD &&
nh_type == NT_PRPSINFO) {
/*
* Extract the program name. We assume
* it to be 16 characters (that's what it
@ -399,18 +527,21 @@ dophn_core(class, swap, fd, off, num, size)
#endif
void
tryelf(fd, buf, nbytes)
int fd;
unsigned char *buf;
int nbytes;
tryelf(int fd, unsigned char *buf, int nbytes)
{
union {
int32 l;
char c[sizeof (int32)];
int32_t l;
char c[sizeof (int32_t)];
} u;
int class;
int swap;
/*
* If we can't seek, it must be a pipe, socket or fifo.
*/
if((lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) && (errno == ESPIPE))
fd = pipe2file(fd, buf, nbytes);
/*
* ELF executables have multiple section headers in arbitrary
* file locations and thus file(1) cannot determine it from easily.
@ -433,7 +564,7 @@ tryelf(fd, buf, nbytes)
u.l = 1;
(void) memcpy(&elfhdr, buf, sizeof elfhdr);
swap = (u.c[sizeof(int32) - 1] + 1) != elfhdr.e_ident[5];
swap = (u.c[sizeof(int32_t) - 1] + 1) != elfhdr.e_ident[5];
if (getu16(swap, elfhdr.e_type) == ET_CORE)
#ifdef ELFCORE
@ -470,7 +601,7 @@ tryelf(fd, buf, nbytes)
u.l = 1;
(void) memcpy(&elfhdr, buf, sizeof elfhdr);
swap = (u.c[sizeof(int32) - 1] + 1) != elfhdr.e_ident[5];
swap = (u.c[sizeof(int32_t) - 1] + 1) != elfhdr.e_ident[5];
if (getu16(swap, elfhdr.e_type) == ET_CORE)
#ifdef ELFCORE

View File

@ -1,6 +1,8 @@
/* $NetBSD: readelf.h,v 1.9 2002/05/18 07:00:47 pooka Exp $ */
/*
* readelf.h
* @(#)$Id: readelf.h,v 1.7 1999/02/14 17:16:11 christos Exp $
* @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
*
* Provide elf data structures for non-elf machines, allowing file
* non-elf hosts to determine if an elf binary is stripped.
@ -9,6 +11,10 @@
#ifndef __fake_elf_h__
#define __fake_elf_h__
#if HAVE_STDINT_H
#include <stdint.h>
#endif
typedef uint32_t Elf32_Addr;
typedef uint32_t Elf32_Off;
typedef uint16_t Elf32_Half;
@ -166,6 +172,8 @@ typedef struct {
#define NT_PRPSINFO 3
#define NT_TASKSTRUCT 4
#define NT_NETBSD_CORE_PROCINFO 1
/* Note header in a PT_NOTE section */
typedef struct elf_note {
Elf32_Word n_namesz; /* Name size */
@ -186,4 +194,18 @@ typedef struct {
#define NT_PLATFORM 5
#define NT_AUXV 6
/* Note types used in executables */
/* NetBSD executables (name = "NetBSD") */
#define NT_NETBSD_VERSION 1
#define NT_NETBSD_EMULATION 2
#define NT_FREEBSD_VERSION 1
#define NT_OPENBSD_VERSION 1
/* GNU executables (name = "GNU") */
#define NT_GNU_VERSION 1
/* GNU OS tags */
#define GNU_OS_LINUX 0
#define GNU_OS_HURD 1
#define GNU_OS_SOLARIS 2
#endif

View File

@ -25,39 +25,35 @@
* 4. This notice may not be removed or altered.
*/
#include <stdio.h>
#include "file.h"
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <regex.h>
#include "file.h"
#ifndef lint
FILE_RCSID("@(#)$Id: softmagic.c,v 1.46 2001/07/23 00:02:32 christos Exp $")
FILE_RCSID("@(#)$Id: softmagic.c,v 1.51 2002/07/03 18:26:38 christos Exp $")
#endif /* lint */
static int match __P((struct magic *, uint32, unsigned char *, int));
static int mget __P((union VALUETYPE *,
unsigned char *, struct magic *, int));
static int mcheck __P((union VALUETYPE *, struct magic *));
static int32 mprint __P((union VALUETYPE *, struct magic *));
static void mdebug __P((int32, char *, int));
static int mconvert __P((union VALUETYPE *, struct magic *));
static int match(struct magic *, uint32_t, unsigned char *, int);
static int mget(union VALUETYPE *, unsigned char *, struct magic *, int);
static int mcheck(union VALUETYPE *, struct magic *);
static int32_t mprint(union VALUETYPE *, struct magic *);
static void mdebug(int32_t, char *, int);
static int mconvert(union VALUETYPE *, struct magic *);
extern int kflag;
/*
* softmagic - lookup one file in database
* (already read from /etc/magic by apprentice.c).
* (already read from MAGIC by apprentice.c).
* Passed the name and FILE * of one file to be typed.
*/
/*ARGSUSED1*/ /* nbytes passed for regularity, maybe need later */
int
softmagic(buf, nbytes)
unsigned char *buf;
int nbytes;
softmagic(unsigned char *buf, int nbytes)
{
struct mlist *ml;
@ -96,24 +92,20 @@ softmagic(buf, nbytes)
* so that higher-level continuations are processed.
*/
static int
match(magic, nmagic, s, nbytes)
struct magic *magic;
uint32 nmagic;
unsigned char *s;
int nbytes;
match(struct magic *magic, uint32_t nmagic, unsigned char *s, int nbytes)
{
int magindex = 0;
int cont_level = 0;
int need_separator = 0;
union VALUETYPE p;
static int32 *tmpoff = NULL;
static int32_t *tmpoff = NULL;
static size_t tmplen = 0;
int32 oldoff = 0;
int32_t oldoff = 0;
int returnval = 0; /* if a match is found it is set to 1*/
int firstline = 1; /* a flag to print X\n X\n- X */
if (tmpoff == NULL)
if ((tmpoff = (int32 *) malloc(tmplen = 20)) == NULL)
if ((tmpoff = (int32_t *) malloc(tmplen = 20)) == NULL)
error("out of memory\n");
for (magindex = 0; magindex < nmagic; magindex++) {
@ -144,7 +136,7 @@ match(magic, nmagic, s, nbytes)
need_separator = 1;
/* and any continuations that match */
if (++cont_level >= tmplen)
if ((tmpoff = (int32 *) realloc(tmpoff,
if ((tmpoff = (int32_t *) realloc(tmpoff,
tmplen += 20)) == NULL)
error("out of memory\n");
while (magic[magindex+1].cont_level != 0 &&
@ -191,7 +183,7 @@ match(magic, nmagic, s, nbytes)
*/
if (++cont_level >= tmplen)
if ((tmpoff =
(int32 *) realloc(tmpoff,
(int32_t *) realloc(tmpoff,
tmplen += 20)) == NULL)
error("out of memory\n");
}
@ -209,13 +201,11 @@ match(magic, nmagic, s, nbytes)
return returnval; /* This is hit if -k is set or there is no match */
}
static int32
mprint(p, m)
union VALUETYPE *p;
struct magic *m;
static int32_t
mprint(union VALUETYPE *p, struct magic *m)
{
uint32 v;
int32 t=0 ;
uint32_t v;
int32_t t=0 ;
switch (m->type) {
@ -237,8 +227,8 @@ mprint(p, m)
case BELONG:
case LELONG:
v = signextend(m, p->l);
(void) printf(m->desc, (uint32) v);
t = m->offset + sizeof(int32);
(void) printf(m->desc, (uint32_t) v);
t = m->offset + sizeof(int32_t);
break;
case STRING:
@ -271,6 +261,10 @@ mprint(p, m)
(void) printf(m->desc, fmttime(p->l, 0));
t = m->offset + sizeof(time_t);
break;
case REGEX:
(void) printf(m->desc, p->s);
t = m->offset + strlen(p->s);
break;
default:
error("invalid m->type (%d) in mprint().\n", m->type);
@ -285,9 +279,7 @@ mprint(p, m)
* (unless you have a better idea)
*/
static int
mconvert(p, m)
union VALUETYPE *p;
struct magic *m;
mconvert(union VALUETYPE *p, struct magic *m)
{
switch (m->type) {
case BYTE:
@ -445,7 +437,7 @@ mconvert(p, m)
case BELONG:
case BEDATE:
case BELDATE:
p->l = (int32)
p->l = (int32_t)
((p->hl[0]<<24)|(p->hl[1]<<16)|(p->hl[2]<<8)|(p->hl[3]));
if (m->mask)
switch (m->mask_op&0x7F) {
@ -512,7 +504,7 @@ mconvert(p, m)
case LELONG:
case LEDATE:
case LELDATE:
p->l = (int32)
p->l = (int32_t)
((p->hl[3]<<24)|(p->hl[2]<<16)|(p->hl[1]<<8)|(p->hl[0]));
if (m->mask)
switch (m->mask_op&0x7F) {
@ -544,6 +536,8 @@ mconvert(p, m)
if (m->mask_op & OPINVERSE)
p->l = ~p->l;
return 1;
case REGEX:
return 1;
default:
error("invalid type %d in mconvert().\n", m->type);
return 0;
@ -552,10 +546,7 @@ mconvert(p, m)
static void
mdebug(offset, str, len)
int32 offset;
char *str;
int len;
mdebug(int32_t offset, char *str, int len)
{
(void) fprintf(stderr, "mget @%d: ", offset);
showstr(stderr, (char *) str, len);
@ -564,35 +555,40 @@ mdebug(offset, str, len)
}
static int
mget(p, s, m, nbytes)
union VALUETYPE* p;
unsigned char *s;
struct magic *m;
int nbytes;
mget(union VALUETYPE *p, unsigned char *s, struct magic *m, int nbytes)
{
int32 offset = m->offset;
int32_t offset = m->offset;
if (offset + sizeof(union VALUETYPE) <= nbytes)
if (m->type == REGEX) {
/*
* offset is interpreted as last line to search,
* (starting at 1), not as bytes-from start-of-file
*/
char *last = NULL;
p->buf = s;
for (; offset && (s = strchr(s, '\n')) != NULL; offset--, s++)
last = s;
if (last != NULL)
*last = '\0';
} else if (offset + sizeof(union VALUETYPE) <= nbytes)
memcpy(p, s + offset, sizeof(union VALUETYPE));
else {
/*
* the usefulness of padding with zeroes eludes me, it
* might even cause problems
*/
int32 have = nbytes - offset;
int32_t have = nbytes - offset;
memset(p, 0, sizeof(union VALUETYPE));
if (have > 0)
memcpy(p, s + offset, have);
}
if (debug) {
mdebug(offset, (char *) p, sizeof(union VALUETYPE));
mdump(m);
}
if (m->flag & INDIR) {
switch (m->in_type) {
case BYTE:
if (m->in_offset)
@ -754,56 +750,56 @@ mget(p, s, m, nbytes)
if (m->in_offset)
switch (m->in_op&0x7F) {
case OPAND:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) &
m->in_offset;
break;
case OPOR:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) |
m->in_offset;
break;
case OPXOR:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) ^
m->in_offset;
break;
case OPADD:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) +
m->in_offset;
break;
case OPMINUS:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) -
m->in_offset;
break;
case OPMULTIPLY:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) *
m->in_offset;
break;
case OPDIVIDE:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) /
m->in_offset;
break;
case OPMODULO:
offset = (int32)((p->hl[0]<<24)|
offset = (int32_t)((p->hl[0]<<24)|
(p->hl[1]<<16)|
(p->hl[2]<<8)|
(p->hl[3])) %
@ -817,56 +813,56 @@ mget(p, s, m, nbytes)
if (m->in_offset)
switch (m->in_op&0x7F) {
case OPAND:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) &
m->in_offset;
break;
case OPOR:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) |
m->in_offset;
break;
case OPXOR:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) ^
m->in_offset;
break;
case OPADD:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) +
m->in_offset;
break;
case OPMINUS:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) -
m->in_offset;
break;
case OPMULTIPLY:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) *
m->in_offset;
break;
case OPDIVIDE:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) /
m->in_offset;
break;
case OPMODULO:
offset = (int32)((p->hl[3]<<24)|
offset = (int32_t)((p->hl[3]<<24)|
(p->hl[2]<<16)|
(p->hl[1]<<8)|
(p->hl[0])) %
@ -932,12 +928,10 @@ mget(p, s, m, nbytes)
}
static int
mcheck(p, m)
union VALUETYPE* p;
struct magic *m;
mcheck(union VALUETYPE *p, struct magic *m)
{
uint32 l = m->value.l;
uint32 v;
uint32_t l = m->value.l;
uint32_t v;
int matched;
if ( (m->value.s[0] == 'x') && (m->value.s[1] == '\0') ) {
@ -971,7 +965,7 @@ mcheck(p, m)
case STRING:
case PSTRING:
{
{
/*
* What we want here is:
* v = strncmp(m->value.s, p->s, m->vallen);
@ -1016,6 +1010,21 @@ mcheck(p, m)
}
break;
}
case REGEX:
{
int rc;
regex_t rx;
char errmsg[512];
rc = regcomp(&rx, m->value.s, REG_EXTENDED|REG_NOSUB);
if (rc) {
regerror(rc, &rx, errmsg, sizeof(errmsg));
error("regex error %d, (%s)\n", rc, errmsg);
} else {
rc = regexec(&rx, p->buf, 0, 0, 0);
return !rc;
}
}
default:
error("invalid type %d in mcheck().\n", m->type);
return 0;/*NOTREACHED*/
@ -1053,7 +1062,7 @@ mcheck(p, m)
v, l, matched);
}
else {
matched = (int32) v > (int32) l;
matched = (int32_t) v > (int32_t) l;
if (debug)
(void) fprintf(stderr, "%d > %d = %d\n",
v, l, matched);
@ -1068,7 +1077,7 @@ mcheck(p, m)
v, l, matched);
}
else {
matched = (int32) v < (int32) l;
matched = (int32_t) v < (int32_t) l;
if (debug)
(void) fprintf(stderr, "%d < %d = %d\n",
v, l, matched);