+2004-11-24 12:39 Christos Zoulas <christos@zoulas.com>
+
+ * Stack smash fix, and ELF more conservative reading.
+ Jakub Bogusz <qboosh@pld-linux.org>
+
+2004-11-20 18:50 Christos Zoulas <christos@zoulas.com>
+
+ * New FreeBSD version parsing code:
+ Jon Noack <noackjr@alumni.rice.edu>
+
+ * Hackish support for ucs16 strings <christos@zoulas.com>
+
+2004-11-13 03:07 Christos Zoulas <christos@zoulas.com>
+
+ * print the file name and line number in syntax errors.
+
+2004 10-12 10:50 Christos Zoulas <christos@zoulas.com>
+
+ * Fix stack overwriting on 0 length strings: Tim Waugh
+ <twaugh@redhat.com> Ned Ludd <solar@gentoo.org>
+
+2004-09-27 11:30 Christos Zoulas <christos@zoulas.com>
+
+ * Remove 3rd and 4th copyright clause; approved by Ian Darwin.
+
+ * Fix small memory leaks; caught by: Tamas Sarlos
+ <stamas@csillag.ilab.sztaki.hu>
2004-07-24 16:33 Christos Zoulas <christos@zoulas.com>
-$Id: LEGAL.NOTICE,v 1.13 2003/03/23 22:23:30 christos Exp $
+$Id: LEGAL.NOTICE,v 1.14 2004/09/11 19:15:56 christos Exp $
Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
Software written by Ian F. Darwin and others;
-maintained 1994-2003 Christos Zoulas.
+maintained 1994-2004 Christos Zoulas.
This software is not subject to any export provision of the United States
Department of Commerce, and may be exported to any country or planet.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by Ian F. Darwin and others.
-4. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# don't enforce GNU packaging standards
AUTOMAKE_OPTIONS = foreign no-dependencies
-EXTRA_DIST = ChangeLog LEGAL.NOTICE MAINT README
+EXTRA_DIST = LEGAL.NOTICE MAINT PORTING
-SUBDIRS = src magic doc
+SUBDIRS = src magic doc python
dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)
-AC_INIT([file],[4.10])
-AC_CANONICAL_TARGET
-AC_CONFIG_HEADERS([config.h])
-
-AM_INIT_AUTOMAKE([foreign])
-AM_MAINTAINER_MODE
+AC_INIT
+AC_CONFIG_SRCDIR([src/file.c])
+AM_INIT_AUTOMAKE(file, 4.12)
+AM_CONFIG_HEADER([config.h])
+dnl AM_MAINTAINER_MODE
AC_MSG_CHECKING(for builtin ELF support)
AC_ARG_ENABLE(elf,
[ --disable-elf disable builtin ELF support],
-AH_TEMPLATE([BUILTIN_ELF], [Define if builtin ELF support is enabled.])
[if test "${enableval}" = yes; then
AC_MSG_RESULT(yes)
- AC_DEFINE([BUILTIN_ELF], 1)
+ AC_DEFINE(BUILTIN_ELF)
else
AC_MSG_RESULT(no)
fi], [
# enable by default
AC_MSG_RESULT(yes)
- AC_DEFINE([BUILTIN_ELF], 1)
+ AC_DEFINE(BUILTIN_ELF)
])
AC_MSG_CHECKING(for ELF core file support)
AC_ARG_ENABLE(elf-core,
[ --disable-elf-core disable ELF core file support],
-AH_TEMPLATE([ELFCORE], [Define if ELF core file support is enabled.])
[if test "${enableval}" = yes; then
AC_MSG_RESULT(yes)
- AC_DEFINE([ELFCORE], 1)
+ AC_DEFINE(ELFCORE)
else
AC_MSG_RESULT(no)
fi], [
# enable by default
AC_MSG_RESULT(yes)
- AC_DEFINE([ELFCORE], 1)
+ AC_DEFINE(ELFCORE)
])
AC_MSG_CHECKING(for file formats in man section 5)
AC_PROG_LN_S
AC_PROG_LIBTOOL
-if test "$ac_cv_c_compiler_gnu" = yes; then
- CFLAGS="$CFLAGS -D_GNU_SOURCE -D_REENTRANT -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wno-char-subscripts"
-fi
-export CFLAGS
+dnl Templates for autoheader
+AH_TEMPLATE([BUILTIN_ELF],
+ [Use the builtin ELF recognition code])
+AH_TEMPLATE([ELFCORE],
+ [Recognize ELF core files])
+AH_TEMPLATE([HAVE_DAYLIGHT], [])
+AH_TEMPLATE([HAVE_LONG_LONG], [])
+AH_TEMPLATE([HAVE_TM_ISDST], [])
+AH_TEMPLATE([SIZEOF_UINT16_T], [])
+AH_TEMPLATE([SIZEOF_UINT32_T], [])
+AH_TEMPLATE([SIZEOF_UINT64_T], [])
+AH_TEMPLATE([SIZEOF_UINT8_T], [])
+AH_TEMPLATE([int32_t], [])
+AH_TEMPLATE([uint16_t], [])
+AH_TEMPLATE([uint32_t], [])
+AH_TEMPLATE([uint64_t], [])
+AH_TEMPLATE([uint8_t], [])
dnl Checks for headers
AC_HEADER_STDC
AC_CHECK_HEADERS(locale.h)
AC_CHECK_HEADERS(utime.h)
AC_CHECK_HEADERS(sys/utime.h)
-AC_CHECK_HEADERS(regex.h)
AC_CHECK_HEADERS(wchar.h)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_OFF_T
-AC_TYPE_PID_T
AC_TYPE_SIZE_T
-AC_STRUCT_ST_RDEV
-AH_TEMPLATE([HAVE_DAYLIGHT], [Define if we have a global "int" variable "daylight".])
-AH_TEMPLATE([HAVE_TM_ISDST], [Define if we have "tm_isdst" in "struct tm".])
+AC_DIAGNOSE([obsolete],[AC_STRUCT_ST_RDEV:
+ your code should no longer depend upon `HAVE_ST_RDEV', but
+ `HAVE_STRUCT_STAT_ST_RDEV'. Remove this warning and
+ the `AC_DEFINE' when you adjust the code.])
+AC_CHECK_MEMBERS([struct stat.st_rdev],[AC_DEFINE(HAVE_ST_RDEV, 1,
+ [Define to 1 if your `struct stat' has `st_rdev'.
+ Deprecated, use `HAVE_STRUCT_STAT_ST_RDEV'
+ instead.])])
+
AC_STRUCT_TIMEZONE_DAYLIGHT
AC_SYS_LARGEFILE
AC_MBSTATE_T
-AH_TEMPLATE([uint8_t], [Define to `unsigned char' if standard headers don't define.])
-AH_TEMPLATE([uint16_t], [Define to `unsigned short' if standard headers don't define.])
-AH_TEMPLATE([uint32_t], [Define to `unsigned int' if standard headers don't define.])
-AH_TEMPLATE([int32_t], [Define to `int' if standard headers don't define.])
-AH_TEMPLATE([HAVE_LONG_LONG],[Define if the `long long' type works.])
-AH_TEMPLATE([uint64_t], [Define to `unsigned long long', if available, or `unsigned long', if standard headers don't define.])
AC_CHECK_TYPE_STDC(uint8_t, unsigned char)
AC_CHECK_TYPE_STDC(uint16_t, unsigned short)
AC_CHECK_TYPE_STDC(uint32_t, unsigned int)
dnl This needs a patch to autoconf 2.13 acgeneral.m4
AC_CHECK_TYPE2_STDC(uint64_t, $long64)
-AH_TEMPLATE([SIZEOF_UINT8_T], [The number of bytes in a uint8_t.])
-AH_TEMPLATE([SIZEOF_UINT16_T], [The number of bytes in a uint16_t.])
-AH_TEMPLATE([SIZEOF_UINT32_T], [The number of bytes in a uint32_t.])
-AH_TEMPLATE([SIZEOF_UINT64_T], [The number of bytes in a uint64_t.])
AC_CHECK_SIZEOF_STDC_HEADERS(uint8_t, 0)
AC_CHECK_SIZEOF_STDC_HEADERS(uint16_t, 0)
AC_CHECK_SIZEOF_STDC_HEADERS(uint32_t, 0)
dnl Checks for functions
AC_CHECK_FUNCS(mmap strerror strtoul mbrtowc mkstemp getopt_long utimes utime wcwidth)
-# XXX Choose /usr/lib or /usr/lib64 for library installs.
-MARK64=
-case "${target_cpu}" in
-x86_64*|powerpc64*|ppc64*|sparc64*|s390x*) MARK64=64 ;;
-esac
-AC_SUBST(MARK64)
-
dnl Checks for libraries
AC_CHECK_LIB(z,gzopen)
-dnl AC_CHECK_LIB(bz2, BZ2_bzReadOpen)
-AC_CONFIG_FILES(Makefile src/Makefile magic/Makefile doc/Makefile)
+AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile doc/Makefile python/Makefile])
AC_OUTPUT
man_MAGIC = magic.4
endif
fsect = @fsect@
-#man_MANS = file.1 $(man_MAGIC) libmagic.3
-noinst_MANS = file.1 $(man_MAGIC) libmagic.3
+man_MANS = file.1 $(man_MAGIC) libmagic.3
EXTRA_DIST = file.man magic.man libmagic.man
CLEANFILES = $(man_MANS)
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
-.\" 3. The name of the author may not be used to endorse or promote products
-.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.Xr file __CSECTION__ ,
.Xr magic __FSECTION__
.Sh AUTHORS
-Måns Rullgård Initial libmagic implementation,
+Måns Rullgård Initial libmagic implementation,
and configuration.
Christos Zoulas API cleanup, error code and allocation handling.
# Add any locally observed files here. Remember:
# text if readable, executable if runnable binary, data if unreadable.
-#
-# RPM: file(1) magic for RPM packages and headers
-#
-0 beshort 0xedab
->2 beshort 0xeedb RPM
->>4 byte x v%d package
->>6 beshort 0 bin
->>6 beshort 1 src
->>8 beshort 1 i386
->>8 beshort 2 Alpha
->>8 beshort 3 Sparc
->>8 beshort 4 MIPS
->>8 beshort 5 PPC
->>8 beshort 6 68000
->>8 beshort 7 SGI
->>8 beshort 8 RS6000
->>8 beshort 10 Sparc64
->>8 beshort 11 MIPSEL
->>8 beshort 12 ARM
->>8 beshort 13 m68kmint
->>8 beshort 14 s390
->>8 beshort 15 s390x
->>8 beshort 16 PPC64
->>8 beshort 17 SH
->>8 beshort 18 Xtensa
->>10 string x %s
-
-0 beshort 0x8ead
->2 beshort 0xe801 RPM header
-
+# XXX promoted from tex so that *.tfm is not mis-identified as mc68k file.
+# There is no way to detect TeX Font Metric (*.tfm) files without
+# breaking them apart and reading the data. The following patterns
+# match most *.tfm files generated by METAFONT or afm2tfm.
+2 string \000\021 TeX font metric data
+>33 string >\0 (%s)
+2 string \000\022 TeX font metric data
+>33 string >\0 (%s)
# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
-# MPEG animation format
-0 belong 0x000001b3 MPEG video stream data
-#>4 beshort&0xfff0 x (%d x
-#>5 beshort&0x0fff x %d)
-0 belong 0x000001ba MPEG system stream data
+# MPEG sequences
+# Scans for all common MPEG header start codes
+0 belong&0xFFFFFF00 0x00000100 MPEG sequence
+>3 byte 0xBA
+>>4 byte &0x40 \b, v2, program multiplex
+>>4 byte ^0x40 \b, v1, system multiplex
+>3 byte 0xBB \b, v1/2, multiplex (missing pack header)
+>3 byte 0xB0 \b, v4
+>>5 belong 0x000001B5
+>>>9 byte &0x80
+>>>>10 byte&0xF0 16 \b, video
+>>>>10 byte&0xF0 32 \b, still texture
+>>>>10 byte&0xF0 48 \b, mesh
+>>>>10 byte&0xF0 64 \b, face
+>>>9 byte ^0x80
+>>>>9 byte&0xF8 8 \b, video
+>>>>9 byte&0xF8 16 \b, still texture
+>>>>9 byte&0xF8 24 \b, mesh
+>>>>9 byte&0xF8 32 \b, face
+>>4 byte 1 \b, simple @ L1
+>>4 byte 2 \b, simple @ L2
+>>4 byte 3 \b, simple @ L3
+>>4 byte 4 \b, simple @ L0
+>>4 byte 17 \b, simple scalable @ L1
+>>4 byte 18 \b, simple scalable @ L2
+>>4 byte 33 \b, core @ L1
+>>4 byte 34 \b, core @ L2
+>>4 byte 50 \b, main @ L2
+>>4 byte 51 \b, main @ L3
+>>4 byte 53 \b, main @ L4
+>>4 byte 66 \b, n-bit @ L2
+>>4 byte 81 \b, scalable texture @ L1
+>>4 byte 97 \b, simple face animation @ L1
+>>4 byte 98 \b, simple face animation @ L2
+>>4 byte 99 \b, simple face basic animation @ L1
+>>4 byte 100 \b, simple face basic animation @ L2
+>>4 byte 113 \b, basic animation text @ L1
+>>4 byte 114 \b, basic animation text @ L2
+>>4 byte 129 \b, hybrid @ L1
+>>4 byte 130 \b, hybrid @ L2
+>>4 byte 145 \b, advanced RT simple @ L!
+>>4 byte 146 \b, advanced RT simple @ L2
+>>4 byte 147 \b, advanced RT simple @ L3
+>>4 byte 148 \b, advanced RT simple @ L4
+>>4 byte 161 \b, core scalable @ L1
+>>4 byte 162 \b, core scalable @ L2
+>>4 byte 163 \b, core scalable @ L3
+>>4 byte 177 \b, advanced coding efficiency @ L1
+>>4 byte 178 \b, advanced coding efficiency @ L2
+>>4 byte 179 \b, advanced coding efficiency @ L3
+>>4 byte 180 \b, advanced coding efficiency @ L4
+>>4 byte 193 \b, advanced core @ L1
+>>4 byte 194 \b, advanced core @ L2
+>>4 byte 209 \b, advanced scalable texture @ L1
+>>4 byte 210 \b, advanced scalable texture @ L2
+>>4 byte 211 \b, advanced scalable texture @ L3
+>>4 byte 225 \b, simple studio @ L1
+>>4 byte 226 \b, simple studio @ L2
+>>4 byte 227 \b, simple studio @ L3
+>>4 byte 228 \b, simple studio @ L4
+>>4 byte 229 \b, core studio @ L1
+>>4 byte 230 \b, core studio @ L2
+>>4 byte 231 \b, core studio @ L3
+>>4 byte 232 \b, core studio @ L4
+>>4 byte 240 \b, advanced simple @ L0
+>>4 byte 241 \b, advanced simple @ L1
+>>4 byte 242 \b, advanced simple @ L2
+>>4 byte 243 \b, advanced simple @ L3
+>>4 byte 244 \b, advanced simple @ L4
+>>4 byte 245 \b, advanced simple @ L5
+>>4 byte 247 \b, advanced simple @ L3b
+>>4 byte 248 \b, FGS @ L0
+>>4 byte 249 \b, FGS @ L1
+>>4 byte 250 \b, FGS @ L2
+>>4 byte 251 \b, FGS @ L3
+>>4 byte 252 \b, FGS @ L4
+>>4 byte 253 \b, FGS @ L5
+>3 byte 0xB5 \b, v4
+>>4 byte &0x80
+>>>5 byte&0xF0 16 \b, video (missing profile header)
+>>>5 byte&0xF0 32 \b, still texture (missing profile header)
+>>>5 byte&0xF0 48 \b, mesh (missing profile header)
+>>>5 byte&0xF0 64 \b, face (missing profile header)
+>>4 byte ^0x80
+>>>4 byte&0xF8 8 \b, video (missing profile header)
+>>>4 byte&0xF8 16 \b, still texture (missing profile header)
+>>>4 byte&0xF8 24 \b, mesh (missing profile header)
+>>>4 byte&0xF8 32 \b, face (missing profile header)
+>3 byte 0xB3
+>>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
+>>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
+>>12 belong 0x000001B5 \b, v2,
+>>>16 byte&0x0F 1 \b HP
+>>>16 byte&0x0F 2 \b Spt
+>>>16 byte&0x0F 3 \b SNR
+>>>16 byte&0x0F 4 \b MP
+>>>16 byte&0x0F 5 \b SP
+>>>17 byte&0xF0 64 \b@HL
+>>>17 byte&0xF0 96 \b@H-14
+>>>17 byte&0xF0 128 \b@ML
+>>>17 byte&0xF0 160 \b@LL
+>>>17 byte &0x08 \b progressive
+>>>17 byte ^0x08 \b interlaced
+>>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video
+>>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video
+>>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video
+>>11 byte &0x02
+>>>75 byte &0x01
+>>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>>140 belong 0x000001B5 \b, v2,
+>>>>>144 byte&0x0F 1 \b HP
+>>>>>144 byte&0x0F 2 \b Spt
+>>>>>144 byte&0x0F 3 \b SNR
+>>>>>144 byte&0x0F 4 \b MP
+>>>>>144 byte&0x0F 5 \b SP
+>>>>>145 byte&0xF0 64 \b@HL
+>>>>>145 byte&0xF0 96 \b@H-14
+>>>>>145 byte&0xF0 128 \b@ML
+>>>>>145 byte&0xF0 160 \b@LL
+>>>>>145 byte &0x08 \b progressive
+>>>>>145 byte ^0x08 \b interlaced
+>>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video
+>>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video
+>>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video
+>>>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video
+>>>76 belong 0x000001B5 \b, v2,
+>>>80 byte&0x0F 1 \b HP
+>>>80 byte&0x0F 2 \b Spt
+>>>80 byte&0x0F 3 \b SNR
+>>>80 byte&0x0F 4 \b MP
+>>>80 byte&0x0F 5 \b SP
+>>>81 byte&0xF0 64 \b@HL
+>>>81 byte&0xF0 96 \b@H-14
+>>>81 byte&0xF0 128 \b@ML
+>>>81 byte&0xF0 160 \b@LL
+>>>81 byte &0x08 \b progressive
+>>>81 byte ^0x08 \b interlaced
+>>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video
+>>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video
+>>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video
+>>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P
+>>>7 byte&0xF0 0x10 \b, 16:9
+>>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I
+>>>7 byte&0xF0 0x10 \b, 16:9
+>>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 beshort&0xFFF0 0x2C00 \b, 4CIF
+>>>5 beshort&0x0FFF 0x01E0 \b NTSC
+>>>5 beshort&0x0FFF 0x0240 \b PAL
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>>7 byte&0xF0 0x80 \b, PAL 4:3
+>>>7 byte&0xF0 0xC0 \b, NTSC 4:3
+>>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120
+>>>7 byte&0xF0 0x10 \b, 4:3
+>>4 beshort&0xFFF0 0x1600 \b, CIF
+>>>5 beshort&0x0FFF 0x00F0 \b NTSC
+>>>5 beshort&0x0FFF 0x0120 \b PAL
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>>7 byte&0xF0 0x80 \b, PAL 4:3
+>>>7 byte&0xF0 0xC0 \b, NTSC 4:3
+>>>5 beshort&0x0FFF 0x0240 \b PAL 625
+>>>>7 byte&0xF0 0x20 \b, 4:3
+>>>>7 byte&0xF0 0x30 \b, 16:9
+>>>>7 byte&0xF0 0x40 \b, 11:5
+>>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU
+>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
+>>>5 beshort&0x0FFF 0x0240 \b PAL 625
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>4 beshort&0xFFF0 0x1E00 \b, SVCD
+>>>5 beshort&0x0FFF 0x01E0 \b NTSC 525
+>>>5 beshort&0x0FFF 0x0240 \b PAL 625
+>>>7 byte&0xF0 0x20 \b, 4:3
+>>>7 byte&0xF0 0x30 \b, 16:9
+>>>7 byte&0xF0 0x40 \b, 11:5
+>>7 byte&0x0F 1 \b, 23.976 fps
+>>7 byte&0x0F 2 \b, 24 fps
+>>7 byte&0x0F 3 \b, 25 fps
+>>7 byte&0x0F 4 \b, 29.97 fps
+>>7 byte&0x0F 5 \b, 30 fps
+>>7 byte&0x0F 6 \b, 50 fps
+>>7 byte&0x0F 7 \b, 59.94 fps
+>>7 byte&0x0F 8 \b, 60 fps
+>>11 byte &0x04 \b, Constrained
-# MPEG Audio (*.mpx)
+# MPEG ADTS Audio (*.mpx/mxa/aac)
# from dreesen@math.fu-berlin.de
+# modified to fully support MPEG ADTS
-# 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
-
-# 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
-# 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
-0 beshort&0xfff8 =0xfff0 MP
-# Layer 3
->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
-# freq
->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
->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
-
-#From: Johan Gade <jgade@diku.dk>
-
-# MPEG-4 Advanced Audio Coding (AAC) file (perhaps also MPEG-2 ACC?)
-16 string M4A MPEG-4 Advanced Audio Coding file (AAC)
+# MP3, M1A
+0 beshort&0xFFFE 0xFFFA MPEG ADTS, layer III, v1
+# rates
+>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
+# timing
+>2 byte&0x0C 0x00 \b, 44.1 kHz
+>2 byte&0x0C 0x04 \b, 48 kHz
+>2 byte&0x0C 0x08 \b, 32 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+# MP2, M1A
+0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1
+# rates
+>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
+# timing
+>2 byte&0x0C 0x00 \b, 44.1 kHz
+>2 byte&0x0C 0x04 \b, 48 kHz
+>2 byte&0x0C 0x08 \b, 32 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MPA, M1A
+0 beshort&0xFFFE 0xFFFE MPEG ADTS, layer I, v1
+# rate
+>2 byte&0xF0 0x10 \b, 32 kBits
+>2 byte&0xF0 0x20 \b, 64 kBits
+>2 byte&0xF0 0x30 \b, 96 kBits
+>2 byte&0xF0 0x40 \b, 128 kBits
+>2 byte&0xF0 0x50 \b, 160 kBits
+>2 byte&0xF0 0x60 \b, 192 kBits
+>2 byte&0xF0 0x70 \b, 224 kBits
+>2 byte&0xF0 0x80 \b, 256 kBits
+>2 byte&0xF0 0x90 \b, 288 kBits
+>2 byte&0xF0 0xA0 \b, 320 kBits
+>2 byte&0xF0 0xB0 \b, 352 kBits
+>2 byte&0xF0 0xC0 \b, 384 kBits
+>2 byte&0xF0 0xD0 \b, 416 kBits
+>2 byte&0xF0 0xE0 \b, 448 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 44.1 kHz
+>2 byte&0x0C 0x04 \b, 48 kHz
+>2 byte&0x0C 0x08 \b, 32 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP3, M2A
+0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2
+# rate
+>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
+# timing
+>2 byte&0x0C 0x00 \b, 22.05 kHz
+>2 byte&0x0C 0x04 \b, 24 kHz
+>2 byte&0x0C 0x08 \b, 16 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP2, M2A
+0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2
+# rate
+>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
+# timing
+>2 byte&0x0C 0x00 \b, 22.05 kHz
+>2 byte&0x0C 0x04 \b, 24 kHz
+>2 byte&0x0C 0x08 \b, 16 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MPA, M2A
+0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2
+# rate
+>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, 144 kBits
+>2 byte&0xF0 0xA0 \b, 160 kBits
+>2 byte&0xF0 0xB0 \b, 176 kBits
+>2 byte&0xF0 0xC0 \b, 192 kBits
+>2 byte&0xF0 0xD0 \b, 224 kBits
+>2 byte&0xF0 0xE0 \b, 256 kBits
+# timing
+>2 byte&0x0C 0x00 \b, 22.05 kHz
+>2 byte&0x0C 0x04 \b, 24 kHz
+>2 byte&0x0C 0x08 \b, 16 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# MP3, M25A
+0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5
+# rate
+>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
+# timing
+>2 byte&0x0C 0x00 \b, 11.025 kHz
+>2 byte&0x0C 0x04 \b, 12 kHz
+>2 byte&0x0C 0x08 \b, 8 kHz
+# channels/options
+>3 byte&0xC0 0x00 \b, Stereo
+>3 byte&0xC0 0x40 \b, JntStereo
+>3 byte&0xC0 0x80 \b, 2x Monaural
+>3 byte&0xC0 0xC0 \b, Monaural
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Packet Pad
+#>2 byte &0x01 \b, Custom Flag
+#>3 byte &0x08 \b, Copyrighted
+#>3 byte &0x04 \b, Original Source
+#>3 byte&0x03 1 \b, NR: 50/15 ms
+#>3 byte&0x03 3 \b, NR: CCIT J.17
+
+# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio
+
+# Stored AAC streams (instead of the MP4 format)
+0 string ADIF MPEG ADIF, AAC
+>4 byte &0x80
+>>13 byte &0x10 \b, VBR
+>>13 byte ^0x10 \b, CBR
+>>16 byte&0x1E 0x02 \b, single stream
+>>16 byte&0x1E 0x04 \b, 2 streams
+>>16 byte&0x1E 0x06 \b, 3 streams
+>>16 byte &0x08 \b, 4 or more streams
+>>16 byte &0x10 \b, 8 or more streams
+>>4 byte &0x80 \b, Copyrighted
+>>13 byte &0x40 \b, Original Source
+>>13 byte &0x20 \b, Home Flag
+>4 byte ^0x80
+>>4 byte &0x10 \b, VBR
+>>4 byte ^0x10 \b, CBR
+>>7 byte&0x1E 0x02 \b, single stream
+>>7 byte&0x1E 0x04 \b, 2 streams
+>>7 byte&0x1E 0x06 \b, 3 streams
+>>7 byte &0x08 \b, 4 or more streams
+>>7 byte &0x10 \b, 8 or more streams
+>>4 byte &0x40 \b, Original Stream(s)
+>>4 byte &0x20 \b, Home Source
+
+# Live or stored single AAC stream (used with MPEG-2 systems)
+0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC
+>1 byte ^0x08 \b, v2
+>1 byte &0x08 \b, v4
+# profile
+>>2 byte &0xC0 \b LTP
+>2 byte&0xc0 0x00 \b, Main
+>2 byte&0xc0 0x40 \b, LC
+>2 byte&0xc0 0x80 \b, SSR
+# timing
+>2 byte&0x3c 0x00 \b, 96 kHz
+>2 byte&0x3c 0x04 \b, 88.2 kHz
+>2 byte&0x3c 0x08 \b, 64 kHz
+>2 byte&0x3c 0x0c \b, 48 kHz
+>2 byte&0x3c 0x10 \b, 44.1 kHz
+>2 byte&0x3c 0x14 \b, 32 kHz
+>2 byte&0x3c 0x18 \b, 24 kHz
+>2 byte&0x3c 0x1c \b, 22.05 kHz
+>2 byte&0x3c 0x20 \b, 16 kHz
+>2 byte&0x3c 0x24 \b, 12 kHz
+>2 byte&0x3c 0x28 \b, 11.025 kHz
+>2 byte&0x3c 0x2c \b, 8 kHz
+# channels/options
+>2 beshort&0x01c0 0x0040 \b, monaural
+>2 beshort&0x01c0 0x0080 \b, stereo
+>2 beshort&0x01c0 0x00c0 \b, stereo + center
+>2 beshort&0x01c0 0x0100 \b, stereo+center+LFE
+>2 beshort&0x01c0 0x0140 \b, surround
+>2 beshort&0x01c0 0x0180 \b, surround + LFE
+>2 beshort &0x01C0 \b, surround + side
+#>1 byte ^0x01 \b, Data Verify
+#>2 byte &0x02 \b, Custom Flag
+#>3 byte &0x20 \b, Original Stream
+#>3 byte &0x10 \b, Home Source
+#>3 byte &0x08 \b, Copyrighted
+
+# Live MPEG-4 audio streams (instead of RTP FlexMux)
+0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS
+#>1 beshort&0x1FFF x \b, %u byte packet
+>3 byte&0xE0 0x40
+>>4 byte&0x3C 0x04 \b, single stream
+>>4 byte&0x3C 0x08 \b, 2 streams
+>>4 byte&0x3C 0x0C \b, 3 streams
+>>4 byte &0x08 \b, 4 or more streams
+>>4 byte &0x20 \b, 8 or more streams
+>3 byte&0xC0 0
+>>4 byte&0x78 0x08 \b, single stream
+>>4 byte&0x78 0x10 \b, 2 streams
+>>4 byte&0x78 0x18 \b, 3 streams
+>>4 byte &0x20 \b, 4 or more streams
+>>4 byte &0x40 \b, 8 or more streams
+0 beshort 0x4DE1 MPEG-4 LO-EP audio stream
# FLI animation format
4 leshort 0xAF11 FLI file
# SGI formats
0 string MOVI Silicon Graphics movie file
-# Apple Quicktime: Scan for all known top-level QT atom markers
-4 string moov Apple QuickTime movie file (moov)
-4 string mdat Apple QuickTime movie file (mdat)
-4 string ftyp Apple QuickTime movie file (ftyp)
-4 string free Apple QuickTime movie file (free)
-4 string junk Apple QuickTime movie file (junk)
-4 string pnot Apple QuickTime movie file (pnot)
-4 string skip Apple QuickTime movie file (skip)
-4 string wide Apple QuickTime movie file (wide)
-4 string pict Apple QuickTime movie file (pict)
+# Apple Quicktime and ISO types
+4 string moov Apple QuickTime
+>12 string mvhd \b movie (fast start)
+>12 string mdra \b URL
+>12 string cmov \b movie (fast start, compressed header)
+>12 string rmra \b multiple URLs
+4 string mdat Apple QuickTime movie (unoptimized)
+4 string wide Apple QuickTime movie (unoptimized)
+4 string skip Apple QuickTime movie (modified)
+4 string free Apple QuickTime movie (modified)
+4 string idsc Apple QuickTime image (fast start)
+4 string idat Apple QuickTime image (unoptimized)
+4 string pckg Apple QuickTime compressed archive
+4 string/B jP JPEG 2000 image
+4 string ftyp ISO Media
+>8 string isom \b, MPEG v4 system
+>8 string mp41 \b, MPEG v4 system, version 1
+>8 string mp42 \b, MPEG v4 system, version 2
+>8 string/B jp2 \b, JPEG 2000 image
+>8 string 3gp \b, MPEG v4 system, 3GPP (H.263/AMR)
+>8 string mmp4 \b, MPEG v4 system, Mobile
+>8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC
+>8 string/B M4P \b, MPEG v4 system, ISMA encrypted AAC-LC
+>8 string/B M4B \b, MPEG v4 system, iTunes AAC-LC/AMR
+>8 string/B qt \b, Apple QuickTime movie
# iso 13818 transport stream
#
0 belong 0x00051600 AppleSingle encoded Macintosh file
0 belong 0x00051607 AppleDouble encoded Macintosh file
+# Apple Emulator 2IMG format
+#
+0 string 2IMG Apple ][ 2IMG Disk Image
+>4 string XGS! \b, XGS
+>4 string CTKG \b, Catakig
+>4 string ShIm \b, Sheppy's ImageMaker
+>4 string WOOF \b, Sweet 16
+>4 string B2TR \b, Bernie ][ the Rescue
+>4 string !nfc \b, ASIMOV2
+>4 string x \b, Unknown Format
+>0xc byte 00 \b, DOS 3.3 sector order
+>>0x10 byte 00 \b, Volume 254
+>>0x10 byte&0x7f x \b, Volume %u
+>0xc byte 01 \b, ProDOS sector order
+>>0x14 short x \b, %u Blocks
+>0xc byte 02 \b, NIB data
+
# magic for Newton PDA package formats
# from Ruda Moura <ruda@helllabs.org>
0 string package0 Newton package, NOS 1.x,
# version (not tested)]
#0 byte 0x1a RISC OS archive
#>1 string archive (ArcFS format)
-0 string \032archive RISC OS archive (ArcFS format)
+#0 string \032archive RISC OS archive (ArcFS format)
+0 string \032 RISC OS archive (spark format)
+0 string Archive\000 RISC OS archive (ArcFS format)
# ARJ archiver (jason@jarthur.Claremont.EDU)
0 leshort 0xea60 ARJ archive data
# From "Simon Hosie
0 string TFMX-SONG TFMX module sound data
+
+# From danny.milo@gmx.net (Danny Milosavljevic)
+# monkeysaudio for magic.mime
+0 string MAC\ X/Monkey audio,
+>4 leshort >0 version %d,
+>6 leshort >0 compression level %d,
+>8 leshort >0 flags %x,
+>10 leshort >0 channels %d,
+>12 lelong >0 samplerate %d,
+>24 lelong >0 frames %d
+
# Microsoft Xbox data file formats
0 string XIP0 XIP, Microsoft Xbox data
0 string XTF0 XTF, Microsoft Xbox data
+
+# Atari Lynx cartridge dump (EXE/BLL header)
+# From: "Stefan A. Haubenthal" <polluks@web.de>
+
+0 beshort 0x8008 Lynx cartridge,
+>2 beshort x RAM start $%04x
+>6 string BS93
+
+#------------------------------------------------------------------------------
+# Z-machine: file(1) magic for Z-machine binaries.
+#
+# This will match ${TEX_BASE}/texmf/omega/ocp/char2uni/inbig5.ocp which
+# appears to be a version-0 Z-machine binary.
+#
+# The (false match) message is to correct that behavior. Perhaps it is
+# not needed.
+#
+>16 belong&0xfe00f0f0 0x3030 Infocom game data
+>0 ubyte 0 (false match)
+>0 ubyte >0 (Z-machine %d,
+>>2 ubeshort x Release %d /
+>>18 string >\0 Serial %.6s)
+
+#------------------------------------------------------------------------------
+# Glulx: file(1) magic for Glulx binaries.
+#
+# I haven't checked for false matches yet.
+#
+0 string Glul Glulx game data
+
+
+
+# These go at the end of the iff rules
+#
+# I don't see why these might collide with anything else.
+#
+# Interactive Fiction related formats
+#
+>8 string IFRS \b, Blorb Interactive Fiction
+>>24 string Exec with executable chunk
+>8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal)
+
>>18 leshort 47 Hitachi H8/300H,
>>18 leshort 48 Hitachi H8S,
>>18 leshort 49 Hitachi H8/500,
->>18 leshort 50 IA-64 (Intel 64 bit architecture)
+>>18 leshort 50 IA-64,
>>18 leshort 51 Stanford MIPS-X,
>>18 leshort 52 Motorola Coldfire,
>>18 leshort 53 Motorola M68HC12,
>>18 leshort 62 AMD x86-64,
>>18 leshort 75 Digital VAX,
+>>18 leshort 88 Renesas M32R,
>>18 leshort 97 NatSemi 32k,
>>18 leshort 0x9026 Alpha (unofficial),
>>20 lelong 0 invalid version
>>18 beshort 47 Hitachi H8/300H,
>>18 beshort 48 Hitachi H8S,
>>18 beshort 49 Hitachi H8/500,
->>18 beshort 50 Intel Merced Processor,
+>>18 beshort 50 IA-64,
>>18 beshort 51 Stanford MIPS-X,
>>18 beshort 52 Motorola Coldfire,
>>18 beshort 53 Motorola M68HC12,
>>18 beshort 73 Cray NV1,
>>18 beshort 75 Digital VAX,
+>>18 beshort 88 Renesas M32R,
>>18 beshort 97 NatSemi 32k,
>>18 beshort 0x9026 Alpha (unofficial),
>>18 beshort 0xa390 IBM S/390 (obsolete),
--- /dev/null
+
+#------------------------------------------------------------------------------
+# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)
+# Based on info from
+# <URL:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>
+0 belong 9994 ESRI Shapefile
+>4 belong =0
+>8 belong =0
+>12 belong =0
+>16 belong =0
+>20 belong =0
+>28 lelong x version %d
+>24 belong x length %d
+>32 lelong =0 type Null Shape
+>32 lelong =1 type Point
+>32 lelong =3 type PolyLine
+>32 lelong =5 type Polygon
+>32 lelong =8 type MultiPoint
+>32 lelong =11 type PointZ
+>32 lelong =13 type PolyLineZ
+>32 lelong =15 type PolygonZ
+>32 lelong =18 type MultiPointZ
+>32 lelong =21 type PointM
+>32 lelong =23 type PolyLineM
+>32 lelong =25 type PolygonM
+>32 lelong =28 type MultiPointM
+>32 lelong =31 type MultiPatch
>>>>>>71 string =NO\ NAME \b, unlabeled
### FATs end
>0x200 lelong 0x82564557 \b, BSD disklabel
+# FATX
+0 string FATX FATX filesystem data
+
# Minix filesystems - Juan Cespedes <cespedes@debian.org>
0x410 leshort 0x137f Minix filesystem
# From: Tom Hilinski <tom.hilinski@comcast.net>
# http://www.unidata.ucar.edu/packages/netcdf/
0 string CDF\001 netcdf file
+
+
+# The boot loaders syslinux and isolinux use a RLE based image format
+# called SLL16 to store splash screens.
+0 lelong 0x1413f33d Syslinux SLL16 image data,
+>4 leshort >0 %hd x
+>6 leshort >0 %hd
+
+
# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable
# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable
+# SYSLINUX boot logo files (from 'ppmtolss16' sources)
+# http://syslinux.zytor.com/
+#
+0 lelong =0x1413f33d SYSLINUX' LSS16 image data
+>4 leshort x \b, width %d
+>6 leshort x \b, height %d
0 string regf Windows NT registry file
0 string CREG Windows 95 registry file
+
+# AAF files:
+# <stuartc@rd.bbc.co.uk> Stuart Cunningham
+0 string \320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377 AAF legacy file using MS Structured Storage
+>30 byte 9 (512B sectors)
+>30 byte 12 (4kB sectors)
+0 string \320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001 AAF file using MS Structured Storage
+>30 byte 9 (512B sectors)
+>30 byte 12 (4kB sectors)
+
# Popular applications
2080 string Microsoft\ Word\ 6.0\ Document %s
2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
>4 byte =0xC6 Folder database
>4 byte =0xC7 Accounts informations
>4 byte =0x30 Offline database
+
+
+# Windows Enhanced Metafile (EMF)
+# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
+# for further information. Note that "0 lelong 1" should be true i.e.
+# the first double word in the file should be 1. With the extended
+# syntax available by some file commands you could write:
+# 0 lelong 1
+# &40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data
+40 ulelong 0x464D4520 Windows Enhanced Metafile (EMF) image data
+>44 ulelong x version 0x%x.
+# If the description has a length greater than zero, it exists and is
+# found at offset (*64).
+>64 ulelong >0 Description available at offset 0x%x
+>>60 ulelong >0 (length 0x%x)
+# Note it would be better to print out the description, which is found
+# as below. Unfortunately the following only prints out the first couple
+# of characters instead of all the "description length"
+# number of characters -- indicated by the ulelong at offset 60.
+>>(64.l) lestring16 >0 Description: %15.15s
>6 byte&0x0f 0x00 non-executable
>6 byte&0x0f 0x01 machine language
>6 byte&0x0f 0x02 BASIC I-code
->6 byte&0x0f 0x03 P-code
+>6 byte&0x0f 0x03 Pascal P-code
>6 byte&0x0f 0x04 C I-code
>6 byte&0x0f 0x05 COBOL I-code
->6 byte&0x0f 0x06 FORTRAN I-code
+>6 byte&0x0f 0x06 Fortran I-code
#
>6 byte&0xf0 0x10 program executable
>6 byte&0xf0 0x20 subroutine
0 beshort 0x4AFC OS9/68K module:
#
# attr
->14 byte&0x80 0x80 re-entrant
->14 byte&0x40 0x40 ghost
->14 byte&0x20 0x20 system-state
+>0x14 byte&0x80 0x80 re-entrant
+>0x14 byte&0x40 0x40 ghost
+>0x14 byte&0x20 0x20 system-state
#
# lang:
#
->13 byte 1 machine language
->13 byte 2 BASIC I-code
->13 byte 3 P-code
->13 byte 4 C I-code
->13 byte 5 COBOL I-code
->13 byte 6 Fortran I-code
+>0x13 byte 1 machine language
+>0x13 byte 2 BASIC I-code
+>0x13 byte 3 Pascal P-code
+>0x13 byte 4 C I-code
+>0x13 byte 5 COBOL I-code
+>0x13 byte 6 Fortran I-code
#
#
# type:
#
->12 byte 1 program executable
->12 byte 2 subroutine
->12 byte 3 multi-module
->12 byte 4 data module
->12 byte 11 trap library
->12 byte 12 system module
->12 byte 13 file manager
->12 byte 14 device driver
->12 byte 15 device descriptor
+>0x12 byte 1 program executable
+>0x12 byte 2 subroutine
+>0x12 byte 3 multi-module
+>0x12 byte 4 data module
+>0x12 byte 11 trap library
+>0x12 byte 12 system module
+>0x12 byte 13 file manager
+>0x12 byte 14 device driver
+>0x12 byte 15 device descriptor
# XXX: christos matches
#0 regex package Perl5 module source text (via regex)
0 string package Perl5 module source text
+
+# Perl Storable data files.
+0 string perl-store perl Storable(v0.6) data
+>4 byte >0 (net-order %d)
+>>4 byte &01 (network-ordered)
+>>4 byte =3 (major 1)
+>>4 byte =2 (major 1)
+
+0 string pst0 perl Storable(v0.7) data
+>4 byte >0
+>>4 byte &01 (network-ordered)
+>>4 byte =5 (major 2)
+>>4 byte =4 (major 2)
+>>5 byte >0 (minor %d)
+
#------------------------------------------------------------------------------
# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables
+# From: "Stefan A. Haubenthal" <polluks@web.de>
#
-0 belong 0x000001EB Plan 9 executable
+0 belong 0x00000107 Plan 9 executable, Motorola 68k
+0 belong 0x000001EB Plan 9 executable, Intel 386
+0 belong 0x00000247 Plan 9 executable, Intel 960
+0 belong 0x000002AB Plan 9 executable, SPARC
+0 belong 0x00000407 Plan 9 executable, MIPS R3000
+0 belong 0x0000048B Plan 9 executable, AT&T DSP 3210
+0 belong 0x00000517 Plan 9 executable, MIPS R4000 BE
+0 belong 0x000005AB Plan 9 executable, AMD 29000
+0 belong 0x00000647 Plan 9 executable, ARM 7-something
+0 belong 0x000006EB Plan 9 executable, PowerPC
+0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE
+0 belong 0x0000084B Plan 9 executable, DEC Alpha
--- /dev/null
+# SE Linux policy database
+0 lelong 0xf97cff8c SE Linux policy
+>16 lelong x v%d
+>20 lelong 1 MLS
+>24 lelong x %d symbols
+>28 lelong x %d ocons
# file(1) magic for revision control files
# From Hendrik Scholz <hendrik@scholz.net>
0 string /1\ :pserver: cvs password text file
+
+
+# Subversion (SVN) dumps
+# Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de>
+0 string SVN-fs-dump-format-version: Subversion dumpfile
+>28 string >\0 (version: %s)
# Sinclair QL firmware executables (ThMO)
0 string NqNqNq`\004 QL firmware executable (BCPL)
-# Sinclair QL libraries (ThMO)
-0 beshort =0xFB01 QL library archive data
+# Sinclair QL libraries (was ThMO)
+0 beshort 0xFB01 QDOS object
+>2 pstring x '%s'
-# Sinclair QL executbables (ThMO)
-6 beshort =0x4AFB QL executable,
->10 string =\0 un-named
->8 beshort =1
->>10 string >\0 named: %.1s
->8 beshort =2
->>10 string >\0 named: %.2s
->8 beshort =3
->>10 string >\0 named: %.3s
->8 beshort =4
->>10 string >\0 named: %.4s
->8 beshort =5
->>10 string >\0 named: %.5s
->8 beshort =6
->>10 string >\0 named: %.6s
->8 beshort =7
->>10 string >\0 named: %.7s
->8 beshort =8
->>10 string >\0 named: %.8s
->8 beshort =9
->>10 string >\0 named: %.9s
->8 beshort =10
->>10 string >\0 named: %.10s
->8 beshort =11
->>10 string >\0 named: %.11s
->8 beshort =12
->>10 string >\0 named: %.12s
->8 beshort =13
->>10 string >\0 named: %.13s
->8 beshort =14
->>10 string >\0 named: %.14s
->8 beshort =15
->>10 string >\0 named: %.15s
->8 beshort =16
->>10 string >\0 named: %.16s
->8 beshort =17
->>10 string >\0 named: %.17s
->8 beshort =18
->>10 string >\0 named: %.18s
->8 beshort =19
->>10 string >\0 named: %.19s
->8 beshort =20
->>10 string >\0 named: %.20s
->8 beshort >20
->>10 string >\0 (truncated) named: %.20s
+# Sinclair QL executables (was ThMO)
+4 belong 0x4AFB QDOS executable
+>9 pstring x '%s'
-# Sinclair QL rom (ThMO)
+# Sinclair QL ROM (ThMO)
0 belong =0x4AFB0001 QL plugin-ROM data,
->10 string =\0 un-named
->8 beshort =1
->>10 string >\0 named: %.1s
->8 beshort =2
->>10 string >\0 named: %.2s
->8 beshort =3
->>10 string >\0 named: %.3s
->8 beshort =4
->>10 string >\0 named: %.4s
->8 beshort =5
->>10 string >\0 named: %.5s
->8 beshort =6
->>10 string >\0 named: %.6s
->8 beshort =7
->>10 string >\0 named: %.7s
->8 beshort =8
->>10 string >\0 named: %.8s
->8 beshort =9
->>10 string >\0 named: %.9s
->8 beshort =10
->>10 string >\0 named: %.10s
->8 beshort =11
->>10 string >\0 named: %.11s
->8 beshort =12
->>10 string >\0 named: %.12s
->8 beshort =13
->>10 string >\0 named: %.13s
->8 beshort =14
->>10 string >\0 named: %.14s
->8 beshort =15
->>10 string >\0 named: %.15s
->8 beshort =16
->>10 string >\0 named: %.16s
->8 beshort =17
->>10 string >\0 named: %.17s
->8 beshort =18
->>10 string >\0 named: %.18s
->8 beshort =19
->>10 string >\0 named: %.19s
->8 beshort =20
->>10 string >\0 named: %.20s
->8 beshort >20
->>10 string >\0 (truncated) named: %.20s
+>9 pstring =\0 un-named
+>9 pstring >\0 named: %s
#
# Network General Sniffer capture files.
# Sorry, make that "Network Associates Sniffer capture files."
+# Sorry, make that "Network General old DOS Sniffer capture files."
#
0 string TRSNIFF\ data\ \ \ \ \032 Sniffer capture file
>33 byte 2 (compressed)
# Sorry, make that "Network Associates Sniffer Basic capture files."
# Sorry, make that "Network Associates Sniffer Basic, and Windows
# Sniffer Pro", capture files."
+# Sorry, make that "Network General Sniffer capture files."
#
0 string XCP\0 NetXRay capture file
>4 string >\0 - version %s
>20 belong 12 (raw IP
>20 belong 13 (BSD/OS SLIP
>20 belong 14 (BSD/OS PPP
+>20 belong 19 (Linux ATM Classical IP
>20 belong 50 (PPP or Cisco HDLC
>20 belong 51 (PPP-over-Ethernet
+>20 belong 99 (Symantec Enterprise Firewall
>20 belong 100 (RFC 1483 ATM
>20 belong 101 (raw IP
>20 belong 102 (BSD/OS SLIP
>20 belong 114 (LocalTalk
>20 belong 117 (OpenBSD PFLOG
>20 belong 119 (802.11 with Prism header
+>20 belong 122 (RFC 2625 IP over Fibre Channel
>20 belong 123 (SunATM
>20 belong 127 (802.11 with radiotap header
>20 belong 129 (Linux ARCNET
+>20 belong 138 (Apple IP over IEEE 1394
>20 belong 140 (MTP2
>20 belong 141 (MTP3
>20 belong 143 (DOCSIS
>20 belong 144 (IrDA
+>20 belong 147 (Private use 0
+>20 belong 148 (Private use 1
+>20 belong 149 (Private use 2
+>20 belong 150 (Private use 3
+>20 belong 151 (Private use 4
+>20 belong 152 (Private use 5
+>20 belong 153 (Private use 6
+>20 belong 154 (Private use 7
+>20 belong 155 (Private use 8
+>20 belong 156 (Private use 9
+>20 belong 157 (Private use 10
+>20 belong 158 (Private use 11
+>20 belong 159 (Private use 12
+>20 belong 160 (Private use 13
+>20 belong 161 (Private use 14
+>20 belong 162 (Private use 15
+>20 belong 163 (802.11 with AVS header
>16 belong x \b, capture length %d)
0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian)
>4 leshort x - version %d
>20 lelong 12 (raw IP
>20 lelong 13 (BSD/OS SLIP
>20 lelong 14 (BSD/OS PPP
+>20 lelong 19 (Linux ATM Classical IP
>20 lelong 50 (PPP or Cisco HDLC
>20 lelong 51 (PPP-over-Ethernet
+>20 lelong 99 (Symantec Enterprise Firewall
>20 lelong 100 (RFC 1483 ATM
>20 lelong 101 (raw IP
>20 lelong 102 (BSD/OS SLIP
>20 lelong 106 (Linux Classical IP over ATM
>20 lelong 107 (Frame Relay
>20 lelong 108 (OpenBSD loopback
->20 lelong 109 (OpenBSD IPSEC encrypted
+>20 lelong 109 (OpenBSD IPsec encrypted
>20 lelong 112 (Cisco HDLC
>20 lelong 113 (Linux "cooked"
>20 lelong 114 (LocalTalk
>20 lelong 117 (OpenBSD PFLOG
>20 lelong 119 (802.11 with Prism header
+>20 lelong 122 (RFC 2625 IP over Fibre Channel
>20 lelong 123 (SunATM
>20 lelong 127 (802.11 with radiotap header
>20 lelong 129 (Linux ARCNET
+>20 lelong 138 (Apple IP over IEEE 1394
>20 lelong 140 (MTP2
>20 lelong 141 (MTP3
>20 lelong 143 (DOCSIS
>20 lelong 144 (IrDA
+>20 lelong 147 (Private use 0
+>20 lelong 148 (Private use 1
+>20 lelong 149 (Private use 2
+>20 lelong 150 (Private use 3
+>20 lelong 151 (Private use 4
+>20 lelong 152 (Private use 5
+>20 lelong 153 (Private use 6
+>20 lelong 154 (Private use 7
+>20 lelong 155 (Private use 8
+>20 lelong 156 (Private use 9
+>20 lelong 157 (Private use 10
+>20 lelong 158 (Private use 11
+>20 lelong 159 (Private use 12
+>20 lelong 160 (Private use 13
+>20 lelong 161 (Private use 14
+>20 lelong 162 (Private use 15
+>20 lelong 163 (802.11 with AVS header
>16 lelong x \b, capture length %d)
#
#
0 string NetS NetStumbler log file
>8 lelong x \b, %d stations found
+
+#
+# EtherPeek/AiroPeek "version 9" capture files.
+#
+0 string \177ver EtherPeek/AiroPeek capture file
+
+#
+# Visual Networks traffic capture files.
+#
+0 string \x05VNF Visual Networks traffic capture file
+
+#
+# Network Instruments Observer capture files.
+#
+0 string ObserverPktBuffe Network Instruments Observer capture file
+
+#
+# Files from Accellent Group's 5View products.
+#
+0 string \xaa\xaa\xaa\xaa 5View capture file
# 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
+0 string/c @article{ BibTeX text file
+0 string/c @book{ BibTeX text file
+0 string/c @inbook{ BibTeX text file
+0 string/c @incollection{ BibTeX text file
+0 string/c @inproceedings{ BibTeX text file
+0 string/c @manual{ BibTeX text file
+0 string/c @misc{ BibTeX text file
+0 string/c @preamble{ BibTeX text file
+0 string/c @phdthesis{ BibTeX text file
+0 string/c @techreport{ BibTeX text file
+0 string/c @unpublished{ BibTeX text file
73 string %%%\ \ BibTeX-file{ BibTex text file (with full header)
--- /dev/null
+#------------------------------------------------------------------------------
+# Virtutech Compressed Random Access File Format
+#
+# From <gustav@virtutech.com>
+0 string \211\277\036\203 Virtutech CRAFF
+>4 belong x v%d
+>20 belong 0 uncompressed
+>20 belong 1 bzipp2ed
+>20 belong 2 gzipped
+>24 belong 0 not clean
--- /dev/null
+
+#------------------------------------------------------------------------------
+# xo65 object files
+# From: "Ullrich von Bassewitz" <uz@cc65.org>
+#
+0 string \x55\x7A\x6E\x61 xo65 object,
+>4 leshort x version %d,
+>6 leshort&0x0001 =0x0001 with debug info
+>6 leshort&0x0001 =0x0000 no debug info
+
+# xo65 library files
+0 string \x6E\x61\x55\x7A xo65 library,
+>4 leshort x version %d
+
+# o65 object files
+0 string \x01\x00\x6F\x36\x35 o65
+>6 leshort&0x1000 =0x0000 executable,
+>6 leshort&0x1000 =0x1000 object,
+>5 byte x version %d,
+>6 leshort&0x8000 =0x8000 65816,
+>6 leshort&0x8000 =0x0000 6502,
+>6 leshort&0x2000 =0x2000 32 bit,
+>6 leshort&0x2000 =0x0000 16 bit,
+>6 leshort&0x4000 =0x4000 page reloc,
+>6 leshort&0x4000 =0x0000 byte reloc,
+>6 leshort&0x0003 =0x0000 alignment 1
+>6 leshort&0x0003 =0x0001 alignment 2
+>6 leshort&0x0003 =0x0002 alignment 4
+>6 leshort&0x0003 =0x0003 alignment 256
-#pkgdata_DATA = magic magic.mime magic.mgc magic.mime.mgc
-pkglibdir = @prefix@/lib/rpm
-pkglib_DATA = magic magic.mime magic.mgc magic.mime.mgc
+pkgdata_DATA = magic magic.mime magic.mgc magic.mime.mgc
EXTRA_DIST = magic2mime Localstuff Header magic.mime $(magic_FRAGMENTS)
Magdir/digital \
Magdir/dolby \
Magdir/dump \
-Magdir/dyadic \
Magdir/editors \
Magdir/elf \
Magdir/encore \
Magdir/epoc \
+Magdir/esri \
Magdir/fcs \
Magdir/filesystems \
Magdir/flash \
Magdir/pkgadd \
Magdir/plan9 \
Magdir/plus5 \
+Magdir/policy \
Magdir/printer \
Magdir/project \
Magdir/psdbms \
Magdir/sketch \
Magdir/smalltalk \
Magdir/sniffer \
+Magdir/dyadic \
Magdir/softquad \
Magdir/spectrum \
Magdir/sql \
Magdir/varied.script \
Magdir/vax \
Magdir/vicar \
+Magdir/virtutech \
Magdir/visx \
Magdir/vms \
Magdir/vmware \
Magdir/wordprocessors \
Magdir/xdelta \
Magdir/xenix \
+Magdir/xo65 \
Magdir/xwindows \
Magdir/zilog \
Magdir/zyxel
0 string RIFF
# - WAVE format
>8 string WAVE audio/x-wav
->8 string AVI video/x-msvideo
+>8 string/B AVI video/x-msvideo
#
-0 belong 0x2e7261fd application/x-realaudio
>8 string CDRA image/x-coreldraw
# MPEG Layer 3 sound files
-0 beshort &0xffe0 audio/mpeg
+0 beshort&0xfffe =0xfffa audio/mpeg
#MP3 with ID3 tag
0 string ID3 audio/mpeg
# Ogg/Vorbis
0 string /*\ XPM image/x-xpm 7bit
# 3DS (3d Studio files)
-16 beshort 0x3d3d image/x-3ds
+#16 beshort 0x3d3d image/x-3ds
# this first will upset you if you're a PL/1 shop... (are there any left?)
# in which case rm it; ascmagic will catch real C programs
# because it tries to uncompress it to figure out what's inside.
# standard unix compress
-0 string \037\235 application/x-compress
+#0 string \037\235 application/x-compress
# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
-0 string \037\213 application/x-gzip
+#0 string \037\213 application/x-gzip
0 string PK\003\004 application/x-zip
#
# from Daniel Quinlan <quinlan@yggdrasil.com>
#
-0 string \<HEAD text/html
-0 string \<head text/html
-0 string \<TITLE text/html
-0 string \<title text/html
-0 string \<html text/html
-0 string \<HTML text/html
+0 string/cB \<!DOCTYPE\ html text/html
+0 string/cb \<head text/html
+0 string/cb \<title text/html
+0 string/bc \<html text/html
0 string \<!-- text/html
-0 string \<h1 text/html
-0 string \<H1 text/html
-0 string \<!doctype\ HTML text/html
-0 string \<!DOCTYPE\ HTML text/html
-0 string \<!doctype\ html text/html
-0 string \<!doctype\ HTML text/html
+0 string/c \<h1 text/html
+
+0 string \<?xml text/xml
#------------------------------------------------------------------------------
# images: file(1) magic for image formats (see also "c-lang" for XPM bitmaps)
0 beshort 0xffd8 image/jpeg
# PC bitmaps (OS/2, Windoze BMP files) (Greg Roelofs, newt@uchicago.edu)
-0 string BM image/bmp
+0 string BM image/x-ms-bmp
#>14 byte 12 (OS/2 1.x format)
#>14 byte 64 (OS/2 2.x format)
#>14 byte 40 (Windows 3.x format)
#
# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8)
# MPEG file
-0 belong 0x000001b3 video/mpeg
-0 belong 0x000001ba video/mpeg
+# MPEG sequences
+0 belong 0x000001BA video/mpeg
+0 belong 0x000001BB video/mpeg
+0 belong 0x000001B0 video/mp4v-es
+0 belong 0x000001B5 video/mp4v-es
+0 belong 0x000001B3 video/mpv
+0 belong&0xFF5FFF1F 0x47400010 video/mp2t
# FLI animation format
0 leshort 0xAF11 video/fli
# FLC animation format
0 leshort 0xAF12 video/flc
-# AVI
->8 string AVI\ video/avi
#
# SGI and Apple formats
-#
-0 string MOVI video/sgi
-4 string moov video/quicktime moov
-4 string mdat video/quicktime mdat
+# Added ISO mimes
+# Added ISO mimes
+0 string MOVI video/sgi
+4 string moov video/quicktime
+4 string mdat video/quicktime
+4 string wide video/quicktime
+4 string skip video/quicktime
+4 string free video/quicktime
+4 string idsc image/x-quicktime
+4 string idat image/x-quicktime
+4 string pckg application/x-quicktime
+4 string/B jP image/jp2
+4 string ftyp application/octet-stream
+>8 string isom video/mp4
+>8 string mp41 video/mp4
+>8 string mp42 video/mp4
+>8 string/B jp2 image/jp2
+>8 string 3gp video/3gpp
+>8 string mmp4 video/mp4
+>8 string/B M4A audio/mp4
+>8 string/B qt video/quicktime
# The contributor claims:
# I couldn't find a real magic number for these, however, this
# -appears- to work. Note that it might catch other files, too,
#
# Executables
#
-0 string \177ELF
->4 byte 0
->4 byte 1
->4 byte 2
->5 byte 0
->5 byte 1
->>16 leshort 0
->>16 leshort 1 application/x-object
->>16 leshort 2 application/x-executable
->>16 leshort 3 application/x-sharedlib
->>16 leshort 4 application/x-coredump
+0 string \177ELF
+>16 leshort 0 application/octet-stream
+>16 leshort 1 application/x-object
+>16 leshort 2 application/x-executable
+>16 leshort 3 application/x-sharedlib
+>16 leshort 4 application/x-coredump
+>16 beshort 0 application/octet-stream
+>16 beshort 1 application/x-object
+>16 beshort 2 application/x-executable
+>16 beshort 3 application/x-sharedlib
+>16 beshort 4 application/x-coredump
#
# DOS
0 string MZ application/x-dosexec
# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
0 lelong 0x223e9f78 application/ms-tnef
-
-#
-# QuickTime format
-# Contributer: Peter Breton
-#
-
-0 string MOVI video/quicktime
-4 string moov video/quicktime
-4 string mdat video/quicktime
-
-# Video Formate
-0 string RIFF
-# AVI == Audio Video Interleave
->8 string AVI\
-#>0xbc string >\0 video/x-%s
-
->>0xbc string DIV3 video/x-DivX-3
->>0xbc string div3 video/x-divX-3
->>0xbc string DIV4 video/x-DivX-4
->>0x70 string DX50 video/x-DIVX-5
->>0x70 string MP4 video/x-MPEG-4
->>0xbc string DIVX video/x-DivX
->8 string WAVE audio/x-wav
-
# From: stephane.loeuillet@tiscali.f
# http://www.djvuzone.org/
0 string AT&TFORM image/x.djvu
# 0x9445366139FA (V 3.80)
# this is from source (http://www.adrift.org.uk/) and I have some taf
# files, and checked them.
-#0 belong 0x3C423FC9
-#>4 belong 0x6A87C2CF application/x-adrift
+#0 belong 0x3C423FC9
+#>4 belong 0x6A87C2CF application/x-adrift
+#0 string \000\000\001\000 image/x-ico
+
+# Quark Xpress 3 Files:
+# (made the mimetype up)
+0 string \0\0MMXPR3\0 application/x-quark-xpress-3
+
+# Gnumeric spreadsheet
+# This entry is only semi-helpful, as Gnumeric compresses its files, so
+# they will ordinarily reported as "compressed", but at least -z helps
+39 string =<gmr:Workbook application/x-gnumeric
# Created: 1993-05-16
# Public domain
-# $Id: mkinstalldirs,v 1.2 2000/11/13 00:30:49 christos Exp $
-
errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case "${1}" in
+ -h | --help | --h* ) # -h for help
+ echo "${usage}" 1>&2; exit 0 ;;
+ -m ) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
+ dirmode="${1}"
+ shift ;;
+ -- ) shift; break ;; # stop option processing
+ -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option
+ * ) break ;; # first non-opt arg
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+0) exit 0 ;;
+esac
+
+case $dirmode in
+'')
+ if mkdir -p -- . 2>/dev/null; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ fi ;;
+*)
+ if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ fi ;;
+esac
for file
do
esac
if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
- mkdir "$pathcomp" || lasterr=$?
+ lasterr=""
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
fi
pathcomp="$pathcomp/"
exit $errstatus
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 3
+# End:
+# mkinstalldirs ends here
--- /dev/null
+
+EXTRA_DIST = README example.py py_magic.c py_magic.h setup.py
LINT = splint
BUILT_SOURCES = listobjs
-#MAGIC = $(pkgdatadir)/magic
+EXTRA_DIST = test.c
+
pkglibdir = @prefix@/lib/rpm
MAGIC = $(pkglibdir)/magic
.PHONY: lint
lint:
$(LINT) $(DEFS) $(INCLUDES) $(file_SOURCES) $(libmagic_la_SOURCES) $(include_HEADERS) $(noinst_HEADERS)
-
+
.PHONY: sources
sources:
@echo $(libmagic_la_SOURCES:%=file/src/%)
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#endif
#ifndef lint
-FILE_RCSID("@(#)$Id: apprentice.c,v 1.78 2004/07/24 20:38:56 christos Exp $")
+FILE_RCSID("@(#)$Id: apprentice.c,v 1.82 2004/11/24 18:56:04 christos Exp $")
#endif /* lint */
#define EATAB {while (isascii((unsigned char) *l) && \
#define MAXPATHLEN 1024
#endif
+#define IS_STRING(t) ((t) == FILE_STRING || (t) == FILE_PSTRING || \
+ (t) == FILE_BESTRING16 || (t) == FILE_LESTRING16)
+
/*@unchecked@*/
private size_t maxmagic = 0;
/*@unchecked@*/
private int getvalue(struct magic_set *ms, struct magic *m, char **p)
/*@globals fileSystem @*/
/*@modifies ms, m, *p, fileSystem @*/;
-private int hextoint(int c)
+private int hextoint(int)
/*@*/;
/*@null@*/
-private char *getstr(struct magic_set *ms, /*@returned@*/ char *s, char *p, int plen,
- int *slen)
+private char *getstr(struct magic_set *ms, /*@returned@*/ char *s, char *p, int plen, int *slen)
/*@modifies ms, *p, *slen @*/;
-private int parse(struct magic_set *ms, struct magic **magicp,
- uint32_t *nmagicp, char *l, int action)
+private int parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l, int action)
/*@globals maxmagic, fileSystem @*/
/*@modifies ms, *magicp, *nmagicp, maxmagic, fileSystem @*/;
private void eatsize(char **p)
/*@modifies *p @*/;
-private int apprentice_1(struct magic_set *ms, const char *fn, int action,
- struct mlist *mlist)
+private int apprentice_1(struct magic_set *ms, const char *fn, int action, struct mlist *mlist)
/*@globals fileSystem, internalState @*/
/*@modifies ms, mlist, fileSystem, internalState @*/;
-private int apprentice_file(struct magic_set *ms, struct magic **magicp,
- uint32_t *nmagicp, const char *fn, int action)
+private int apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
+ const char *fn, int action)
/*@globals maxmagic, fileSystem @*/
/*@modifies ms, *magicp, *nmagicp, maxmagic, fileSystem @*/;
private void byteswap(struct magic *magic, uint32_t nmagic)
/*@*/;
private uint32_t swap4(uint32_t sv)
/*@*/;
-private char *mkdbname(const char *fn, /*@returned@*/ char *buf, size_t bufsiz)
+private char *mkdbname(const char *fn, /*@returned@*/ char *buf, size_t, int)
/*@modifies buf @*/;
-private int apprentice_map(struct magic_set *ms, struct magic **magicp,
- uint32_t *nmagicp, const char *fn)
+private int apprentice_map(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
+ const char *fn)
/*@globals fileSystem, internalState @*/
/*@modifies ms, *magicp, *nmagicp, fileSystem, internalState @*/;
-private int apprentice_compile(struct magic_set *ms, struct magic **magicp,
- uint32_t *nmagicp, const char *fn)
+private int apprentice_compile(struct magic_set *ms, struct magic **magicp, uint32_t * nmagicp,
+ const char *fn)
/*@globals fileSystem, internalState @*/
/*@modifies ms, fileSystem, internalState @*/;
-private int check_format(struct magic *m)
+private int check_format(struct magic_set *ms, struct magic *m)
/*@globals fileSystem @*/
/*@modifies fileSystem @*/;
#ifndef COMPILE_ONLY
if ((rv = apprentice_map(ms, &magic, &nmagic, fn)) == -1) {
if (ms->flags & MAGIC_CHECK)
- file_magwarn("using regular magic file `%s'", fn);
+ file_magwarn(ms, "using regular magic file `%s'", fn);
rv = apprentice_file(ms, &magic, &nmagic, fn, action);
if (rv != 0)
return -1;
"cont\toffset\ttype\topcode\tmask\tvalue\tdesc";
FILE *f;
char line[BUFSIZ+1];
- int lineno;
int errs = 0;
- f = fopen(fn, "r");
+ f = fopen(ms->file = fn, "r");
if (f == NULL) {
if (errno != ENOENT)
file_error(ms, errno, "cannot read magic file `%s'",
(void)fprintf(stderr, "%s\n", hdr);
/* parse it */
- for (lineno = 1; fgets(line, BUFSIZ, f) != NULL; lineno++) {
+ for (ms->line = 1; fgets(line, BUFSIZ, f) != NULL; ms->line++) {
+ size_t len;
if (line[0]=='#') /* comment, do not parse */
continue;
- if (strlen(line) <= (unsigned)1) /* null line, garbage, etc */
+ len = strlen(line);
+ if (len < 2) /* null line, garbage, etc */
continue;
- line[strlen(line)-1] = '\0'; /* delete newline */
+ line[len - 1] = '\0'; /* delete newline */
if (parse(ms, magicp, nmagicp, line, action) != 0)
errs = 1;
}
break;
case FILE_STRING:
case FILE_PSTRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
break;
case FILE_REGEX:
break;
default:
if (ms->flags & MAGIC_CHECK)
- file_magwarn("cannot happen: m->type=%d\n",
+ file_magwarn(ms, "cannot happen: m->type=%d\n",
m->type);
return ~0U;
}
m->offset = (uint32_t)strtoul(l, &t, 0);
if (l == t)
if (ms->flags & MAGIC_CHECK)
- file_magwarn("offset %s invalid", l);
+ file_magwarn(ms, "offset `%s' invalid", l);
l = t;
if (m->flag & INDIR) {
break;
default:
if (ms->flags & MAGIC_CHECK)
- file_magwarn(
- "indirect offset type %c invalid",
+ file_magwarn(ms,
+ "indirect offset type `%c' invalid",
*l);
break;
}
t = l;
if (*t++ != ')')
if (ms->flags & MAGIC_CHECK)
- file_magwarn("missing ')' in indirect offset");
+ file_magwarn(ms,
+ "missing ')' in indirect offset");
l = t;
}
#define NBELDATE 7
#define NLELDATE 7
#define NREGEX 5
+#define NBESTRING16 10
+#define NLESTRING16 10
if (*l == 'u') {
++l;
l += NLELDATE;
} else if (strncmp(l, "regex", NREGEX)==0) {
m->type = FILE_REGEX;
- l += sizeof("regex");
+ l += NREGEX;
+ } else if (strncmp(l, "bestring16", NBESTRING16)==0) {
+ m->type = FILE_BESTRING16;
+ l += NBESTRING16;
+ } else if (strncmp(l, "lestring16", NLESTRING16)==0) {
+ m->type = FILE_LESTRING16;
+ l += NLESTRING16;
} else {
if (ms->flags & MAGIC_CHECK)
- file_magwarn("type %s invalid", l);
+ file_magwarn(ms, "type `%s' invalid", l);
return -1;
}
/* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
/* New and improved: ~ & | ^ + - * / % -- exciting, isn't it? */
if (*l == '~') {
- if (FILE_STRING != m->type && FILE_PSTRING != m->type)
+ if (!IS_STRING(m->type))
m->mask_op = FILE_OPINVERSE;
++l;
}
if ((t = strchr(fops, *l)) != NULL) {
uint32_t op = (uint32_t)(t - fops);
- if (op != FILE_OPDIVIDE ||
- (FILE_STRING != m->type && FILE_PSTRING != m->type)) {
+ if (op != FILE_OPDIVIDE || !IS_STRING(m->type)) {
++l;
m->mask_op |= op;
val = (uint32_t)strtoul(l, &l, 0);
break;
default:
if (ms->flags & MAGIC_CHECK)
- file_magwarn(
- "string extension %c invalid",
+ file_magwarn(ms,
+ "string extension `%c' invalid",
*l);
return -1;
}
}
break;
case '!':
- if (m->type != FILE_STRING && m->type != FILE_PSTRING) {
+ if (!IS_STRING(m->type)) {
m->reln = *l;
++l;
break;
/* NULLBODY */;
if (ms->flags & MAGIC_CHECK) {
- if (!check_format(m))
+ if (!check_format(ms, m))
return -1;
}
#ifndef COMPILE_ONLY
* the type of the magic.
*/
private int
-check_format(struct magic *m)
+check_format(struct magic_set *ms, struct magic *m)
{
/*@-nullassign@*/
/*@observer@*/
return 1;
}
if (m->type >= sizeof(formats)/sizeof(formats[0])) {
- file_magwarn("Internal error inconsistency between m->type"
+ file_magwarn(ms, "Internal error inconsistency between m->type"
" and format strings");
return 0;
}
if (formats[m->type] == NULL) {
- file_magwarn("No format string for `%s' with description `%s'",
- m->desc, names[m->type]);
+ file_magwarn(ms, "No format string for `%s' with description "
+ "`%s'", m->desc, names[m->type]);
return 0;
}
for (; *ptr; ptr++) {
}
if (*ptr == '\0') {
/* Missing format string; bad */
- file_magwarn("Invalid format `%s' for type `%s'",
+ file_magwarn(ms, "Invalid format `%s' for type `%s'",
m->desc, names[m->type]);
return 0;
}
if (strchr(formats[m->type], *ptr) == NULL) {
- file_magwarn("Printf format `%c' is not valid for type `%s'"
+ file_magwarn(ms, "Printf format `%c' is not valid for type `%s'"
" in description `%s'",
*ptr, names[m->type], m->desc);
return 0;
int slen;
switch (m->type) {
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
case FILE_STRING:
case FILE_PSTRING:
case FILE_REGEX:
*p = getstr(ms, *p, m->value.s, sizeof(m->value.s), &slen);
if (*p == NULL) {
if (ms->flags & MAGIC_CHECK)
- file_magwarn("cannot get string from `%s'",
+ file_magwarn(ms, "cannot get string from `%s'",
m->value.s);
return -1;
}
uint32_t version;
int needsbyteswap;
char buf[MAXPATHLEN];
- char *dbname = mkdbname(fn, buf, sizeof(buf));
+ char *dbname = mkdbname(fn, buf, sizeof(buf), 0);
void *mm = NULL;
if (dbname == NULL)
{
int fd;
char buf[MAXPATHLEN];
- char *dbname = mkdbname(fn, buf, sizeof(buf));
+ char *dbname = mkdbname(fn, buf, sizeof(buf), 1);
if (dbname == NULL)
return -1;
* make a dbname
*/
private char *
-mkdbname(const char *fn, char *buf, size_t bufsiz)
+mkdbname(const char *fn, char *buf, size_t bufsiz, int strip)
{
-#ifdef notdef
- const char *p;
- if ((p = strrchr(fn, '/')) != NULL)
- fn = ++p;
-#endif
+ if (strip) {
+ const char *p;
+ if ((p = strrchr(fn, '/')) != NULL)
+ fn = ++p;
+ }
+
(void)snprintf(buf, bufsiz, "%s%s", fn, ext);
return buf;
}
m->cont_level = swap2(m->cont_level);
m->offset = swap4((uint32_t)m->offset);
m->in_offset = swap4((uint32_t)m->in_offset);
- if (m->type != FILE_STRING)
+ if (IS_STRING(m->type))
m->value.l = swap4(m->value.l);
m->mask = swap4(m->mask);
}
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include "names.h"
#ifndef lint
-FILE_RCSID("@(#)$Id: ascmagic.c,v 1.40 2003/11/20 00:25:39 christos Exp $")
+FILE_RCSID("@(#)$Id: ascmagic.c,v 1.41 2004/09/11 19:15:57 christos Exp $")
#endif /* lint */
typedef unsigned long unichar;
#define ISSPC(x) ((x) == ' ' || (x) == '\t' || (x) == '\r' || (x) == '\n' \
|| (x) == 0x85 || (x) == '\f')
-private int looks_ascii(const unsigned char *buf, size_t nbytes,
- unichar *ubuf, size_t *ulen)
+private int looks_ascii(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
/*@modifies *ubuf, *ulen @*/;
-private int looks_utf8(const unsigned char *buf, size_t nbytes,
- unichar *ubuf, size_t *ulen)
+private int looks_utf8(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
/*@modifies *ubuf, *ulen @*/;
-private int looks_unicode(const unsigned char *buf, size_t nbytes,
- unichar *ubuf, size_t *ulen)
+private int looks_unicode(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
/*@modifies *ubuf, *ulen @*/;
-private int looks_latin1(const unsigned char *buf, size_t nbytes,
- unichar *ubuf, size_t *ulen)
+private int looks_latin1(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
/*@modifies *ubuf, *ulen @*/;
-private int looks_extended(const unsigned char *buf, size_t nbytes,
- unichar *ubuf, size_t *ulen)
+private int looks_extended(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
/*@modifies *ubuf, *ulen @*/;
-private void from_ebcdic(const unsigned char *buf, size_t nbytes,
- unsigned char *out)
+private void from_ebcdic(const unsigned char *buf, size_t nbytes, unsigned char *out)
/*@modifies *out @*/;
private int ascmatch(const unsigned char *s, const unichar *us, size_t ulen)
/*@*/;
* cases for the NEL character can be taken out of the code.
*/
+/*@unchecked@*/ /*@observer@*/
private unsigned char ebcdic_1047_to_8859[] = {
0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#endif
#ifndef lint
-FILE_RCSID("@(#)$Id: compress.c,v 1.37 2004/07/24 21:00:56 christos Exp $")
+FILE_RCSID("@(#)$Id: compress.c,v 1.38 2004/09/11 19:15:57 christos Exp $")
#endif
/*@*/;
private ssize_t sread(int fd, void *buf, size_t n)
/*@modifies buf @*/;
-private size_t uncompressbuf(struct magic_set *ms, size_t method,
- const unsigned char *old, unsigned char **newch, size_t n)
+private size_t uncompressbuf(struct magic_set *ms, size_t method, const unsigned char *old,
+ unsigned char **newch, size_t n)
/*@globals fileSystem, internalState @*/
/*@modifies ms, *newch, fileSystem, internalState @*/;
#ifdef HAVE_LIBZ
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include "patchlevel.h"
#ifndef lint
-FILE_RCSID("@(#)$Id: file.c,v 1.93 2004/04/07 14:23:55 christos Exp $")
+FILE_RCSID("@(#)$Id: file.c,v 1.95 2004/09/27 15:28:37 christos Exp $")
#endif /* lint */
/*@unchecked@*/ /*@null@*/
private char *progname; /* used throughout */
-/*@unchecked@*/ /*@observer@*/ /*@null@*/
+/*@unchecked@*/ /*@only@*/ /*@null@*/
private struct magic_set *magic;
private void unwrap(char *fn)
/*@modifies fileSystem @*/;
#endif
#if 0
-private int byteconv4(int from, int same, int big_endian)
+private int byteconv4(int, int, int)
/*@*/;
-private short byteconv2(int from, int same, int big_endian)
+private short byteconv2(int, int, int)
/*@*/;
#endif
process(argv[optind], wid);
}
+ magic_close(magic);
+ magic = NULL;
return 0;
}
}
while (fgets(buf, MAXPATHLEN, f) != NULL) {
- buf[file_mbswidth(buf)-1] = '\0';
+ // cut off CR, we _need_ bytes here, not characters
+ buf[strlen(buf)-1] = '\0';
process(buf, wid);
if(nobuffer)
(void) fflush(stdout);
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
*/
/*
* file.h - definitions for file(1) program
- * @(#)$Id: file.h,v 1.61 2004/05/12 14:53:01 christos Exp $
+ * @(#)$Id: file.h,v 1.64 2004/11/20 23:50:12 christos Exp $
*/
#ifndef __file_h__
#define FILE_BELDATE 15
#define FILE_LELDATE 16
#define FILE_REGEX 17
+#define FILE_BESTRING16 18
+#define FILE_LESTRING16 19
#define FILE_FORMAT_NAME \
/* 0 */ "invalid 0", \
/* 14 */ "ldate", \
/* 15 */ "beldate", \
/* 16 */ "leldate", \
-/* 17 */ "regex",
+/* 17 */ "regex", \
+/* 18 */ "bestring16", \
+/* 19 */ "lestring16",
#define FILE_FMT_NUM "cduxXi"
#define FILE_FMT_STR "s"
/* 14 */ FILE_FMT_STR, \
/* 15 */ FILE_FMT_STR, \
/* 16 */ FILE_FMT_STR, \
-/* 17 */ FILE_FMT_STR,
+/* 17 */ FILE_FMT_STR, \
+/* 18 */ FILE_FMT_STR, \
+/* 19 */ FILE_FMT_STR,
/* Word 3 */
uint8_t in_op; /* operator for indirection */
int error;
int flags;
int haderr;
+ const char *file;
+ size_t line;
};
struct stat;
protected int file_buffer(struct magic_set *ms, const void *, size_t)
/*@globals fileSystem, internalState @*/
/*@modifies ms, fileSystem, internalState @*/;
-protected int file_fsmagic(struct magic_set *ms, /*@null@*/ const char * fn, struct stat *sb)
+protected int file_fsmagic(struct magic_set *ms, /*@null@*/ const char *fn, struct stat *sb)
/*@modifies ms, sb @*/;
-protected int file_pipe2file(struct magic_set *ms, int fd, const void *startbuf,
- size_t nbytes)
+protected int file_pipe2file(struct magic_set *ms, int fd, const void *startbuf, size_t nbytes)
/*@globals errno, fileSystem, internalState @*/
/*@modifies ms, errno, fileSystem, internalState @*/;
protected int file_printf(struct magic_set *ms, const char *, ...)
protected uint32_t file_signextend(struct magic_set *ms, struct magic *, uint32_t)
/*@globals fileSystem @*/
/*@modifies ms, fileSystem @*/;
-protected void file_delmagic(/*@only@*/ struct magic *p, int type, size_t entries)
+protected void file_delmagic(struct magic *p, int type, size_t entries)
/*@globals fileSystem @*/
/*@modifies p, fileSystem @*/;
protected void file_badread(struct magic_set *ms)
/*@modifies ms @*/;
protected void file_error(struct magic_set *ms, int, const char *, ...)
/*@modifies ms @*/;
-protected void file_magwarn(const char *f, ...)
+protected void file_magwarn(struct magic_set *ms, const char *, ...)
/*@globals fileSystem @*/
/*@modifies fileSystem @*/;
protected void file_mdump(struct magic *m)
/*@globals fileSystem @*/
/*@modifies m, fileSystem @*/;
-protected void file_showstr(FILE *fp, const char *s, size_t len)
+protected void file_showstr(FILE *fp, const char *, size_t)
/*@globals fileSystem @*/
/*@modifies fp, fileSystem @*/;
protected size_t file_mbswidth(const char *)
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#undef HAVE_MAJOR
#ifndef lint
-FILE_RCSID("@(#)$Id: fsmagic.c,v 1.43 2003/10/14 19:29:55 christos Exp $")
+FILE_RCSID("@(#)$Id: fsmagic.c,v 1.45 2004/11/13 10:19:48 christos Exp $")
#endif /* lint */
protected int
file_error(ms, errno, "cannot stat `%s'", fn);
return -1;
}
- if (file_printf(ms, "cannot open (%s)",
+ if (file_printf(ms, "cannot open `%s' (%s)",
fn, strerror(errno)) == -1)
return -1;
- return 1;
+ ms->haderr++;
+ return -1;
}
if ((ms->flags & MAGIC_MIME) != 0) {
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include <ctype.h>
#ifndef lint
-FILE_RCSID("@(#)$Id: funcs.c,v 1.12 2004/06/04 14:40:20 christos Exp $")
+FILE_RCSID("@(#)$Id: funcs.c,v 1.13 2004/09/11 19:15:57 christos Exp $")
#endif /* lint */
/*
* Like printf, only we print to a buffer and advance it.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include "tar.h"
#ifndef lint
-FILE_RCSID("@(#)$Id: is_tar.c,v 1.24 2003/11/11 20:01:46 christos Exp $")
+FILE_RCSID("@(#)$Id: is_tar.c,v 1.25 2004/09/11 19:15:57 christos Exp $")
#endif
#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include "patchlevel.h"
#ifndef lint
-FILE_RCSID("@(#)$Id: magic.c,v 1.22 2004/07/24 19:55:17 christos Exp $")
+FILE_RCSID("@(#)$Id: magic.c,v 1.24 2004/09/27 15:28:37 christos Exp $")
#endif /* lint */
#ifdef __EMX__
private void free_mlist(/*@only@*/ struct mlist *mlist)
/*@globals fileSystem @*/
/*@modifies mlist, fileSystem @*/;
-private void close_and_restore(const struct magic_set *ms, const char *name,
- int fd, const struct stat *sb)
+private void close_and_restore(const struct magic_set *ms, const char *name, int fd,
+ const struct stat *sb)
/*@globals fileSystem, internalState @*/
/*@modifies fileSystem, internalState @*/;
return NULL;
if (magic_setflags(ms, flags) == -1) {
- free(ms);
errno = EINVAL;
- return NULL;
+ goto free1;
}
ms->o.ptr = ms->o.buf = malloc(ms->o.size = 1024);
- ms->o.len = 0;
- if (ms->o.buf == NULL) {
- free(ms);
- return NULL;
- }
+ if (ms->o.buf == NULL)
+ goto free1;
+
ms->o.pbuf = malloc(ms->o.psize = 1024);
- if (ms->o.pbuf == NULL) {
- free(ms->o.buf);
- free(ms);
- return NULL;
- }
+ if (ms->o.pbuf == NULL)
+ goto free2;
+
ms->c.off = malloc((ms->c.len = 10) * sizeof(*ms->c.off));
- if (ms->c.off == NULL) {
- free(ms->o.pbuf);
- free(ms->o.buf);
- free(ms);
- return NULL;
- }
+ if (ms->c.off == NULL)
+ goto free3;
+
+ ms->o.len = 0;
ms->haderr = 0;
ms->error = -1;
ms->mlist = NULL;
return ms;
+free3:
+ free(ms->o.pbuf);
+free2:
+ free(ms->o.buf);
+free1:
+ free(ms);
+ return NULL;
}
private void
magic_close(struct magic_set *ms)
{
free_mlist(ms->mlist);
+ free(ms->o.pbuf);
free(ms->o.buf);
free(ms->c.off);
free(ms);
magic_compile(struct magic_set *ms, const char *magicfile)
{
struct mlist *ml = file_apprentice(ms, magicfile, FILE_COMPILE);
- if (ml) {
- free_mlist(ml);
- return 0;
- }
- return -1;
+ free_mlist(ml);
+ return ml ? 0 : -1;
}
public int
magic_check(struct magic_set *ms, const char *magicfile)
{
struct mlist *ml = file_apprentice(ms, magicfile, FILE_CHECK);
- if (ml) {
- free_mlist(ml);
- return 0;
- }
- return -1;
+ free_mlist(ml);
+ return ml ? 0 : -1;
}
private void
{
int fd = 0;
unsigned char buf[HOWMANY+1]; /* one extra for terminating '\0' */
- struct stat sb;
+ struct stat sb, * st = &sb;
ssize_t nbytes = 0; /* number of bytes read from a datafile */
if (file_reset(ms) == -1)
return NULL;
- switch (file_fsmagic(ms, inname, &sb)) {
+ switch (file_fsmagic(ms, inname, st)) {
case -1:
return NULL;
case 0:
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* appear at fixed offsets into the file. Don't make HOWMANY
* too high unless you have a very fast CPU.
*
- * $Id: names.h,v 1.24 2004/03/22 19:09:12 christos Exp $
+ * $Id: names.h,v 1.25 2004/09/11 19:15:57 christos Exp $
*/
/*
#define FILE_VERSION_MAJOR 4
-#define patchlevel 10
+#define patchlevel 12
/*
* Patchlevel file for Ian Darwin's MAGIC command.
- * $Id: patchlevel.h,v 1.53 2004/07/24 20:40:46 christos Exp $
+ * $Id: patchlevel.h,v 1.55 2004/11/24 18:57:47 christos Exp $
*
* $Log: patchlevel.h,v $
+ * Revision 1.55 2004/11/24 18:57:47 christos
+ * Re-do the autoconf stuff once more; passes make dist now.
+ *
+ * Revision 1.54 2004/11/21 05:52:05 christos
+ * ready for 4.11
+ *
* Revision 1.53 2004/07/24 20:40:46 christos
* welcome to 4.10
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include <time.h>
#ifndef lint
-FILE_RCSID("@(#)$Id: print.c,v 1.44 2003/09/12 19:39:44 christos Exp $")
+FILE_RCSID("@(#)$Id: print.c,v 1.46 2004/11/13 08:11:39 christos Exp $")
#endif /* lint */
#define SZOF(a) (sizeof(a) / sizeof(a[0]))
/*VARARGS*/
protected void
-file_magwarn(const char *f, ...)
+file_magwarn(struct magic_set *ms, const char *f, ...)
{
va_list va;
va_start(va, f);
/* cuz we use stdout for most, stderr here */
(void) fflush(stdout);
- (void) fprintf(stderr, "WARNING: ");
+ (void) fprintf(stderr, "%s, %lu: Warning ", ms->file,
+ (unsigned long)ms->line);
(void) vfprintf(stderr, f, va);
va_end(va);
fputc('\n', stderr);
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#include "readelf.h"
#ifndef lint
-FILE_RCSID("@(#)$Id: readelf.c,v 1.42 2004/07/24 20:57:22 christos Exp $")
+FILE_RCSID("@(#)$Id: readelf.c,v 1.45 2004/11/24 17:38:24 christos Exp $")
#endif
#ifdef ELFCORE
-private int dophn_core(struct magic_set *ms, int class, int swap, int fd,
- off_t off, int num, size_t size)
+private int dophn_core(struct magic_set *ms, int class, int swap, int fd, off_t off, int num, size_t size)
/*@modifies ms @*/;
#endif
-private int dophn_exec(struct magic_set *ms, int class, int swap, int fd,
- off_t off, int num, size_t size)
+private int dophn_exec(struct magic_set *ms, int class, int swap, int fd, off_t off, int num, size_t size)
/*@modifies ms @*/;
-private int doshn(struct magic_set *ms, int class, int swap, int fd, off_t off,
- int num, size_t size)
+private int doshn(struct magic_set *ms, int class, int swap, int fd, off_t off, int num, size_t size)
/*@modifies ms @*/;
-private size_t donote(struct magic_set *ms, unsigned char *nbuf, size_t offset,
- size_t size, int class, int swap, size_t align)
+private size_t donote(struct magic_set *ms, unsigned char *nbuf, size_t offset, size_t size, int class,
+ int swap, size_t align)
/*@modifies ms @*/;
#define ELF_ALIGN(a) ((((a) + align - 1) / align) * align)
file_badseek(ms);
return -1;
}
- bufsize = read(fd, nbuf, sizeof(nbuf));
+ bufsize = read(fd, nbuf,
+ ((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf)));
if (bufsize == -1) {
file_badread(ms);
return -1;
}
offset = ELF_ALIGN(doff + descsz);
- if (offset + descsz > size) {
+ if (doff + descsz > size) {
return offset;
}
/*
* Contents is __FreeBSD_version, whose relation to OS
- * versions is defined by a huge table in the Porters'
- * Handbook. For up to 5.x, the first three digits are
- * the version number. For 5.x and higher, the scheme
- * is: <major><two digit minor> <0 if release branch,
- * otherwise 1>xx
+ * versions is defined by a huge table in the Porter's
+ * Handbook. This is the general scheme:
+ *
+ * Releases:
+ * Mmp000 (before 4.10)
+ * Mmi0p0 (before 5.0)
+ * Mmm0p0
+ *
+ * Development branches:
+ * Mmpxxx (before 4.6)
+ * Mmp1xx (before 4.10)
+ * Mmi1xx (before 5.0)
+ * M000xx (pre-M.0)
+ * Mmm1xx
+ *
+ * M = major version
+ * m = minor version
+ * i = minor version increment (491000 -> 4.10)
+ * p = patchlevel
+ * x = revision
+ *
+ * The first release of FreeBSD to use ELF by default
+ * was version 3.0.
*/
- if (desc / 100000 < 5) {
- if (desc / 10000 % 10 == 9) {
- if (file_printf(ms, " %d.%d", desc / 100000,
- 9 + desc / 1000 % 10) == -1)
+ if (desc == 460002) {
+ if (file_printf(ms, " 4.6.2") == -1)
+ return size;
+ } else if (desc < 460100) {
+ if (file_printf(ms, " %d.%d", desc / 100000,
+ desc / 10000 % 10) == -1)
+ return size;
+ if (desc / 1000 % 10 > 0)
+ if (file_printf(ms, ".%d", desc / 1000 % 10)
+ == -1)
return size;
- } else {
- if (file_printf(ms, " %d.%d", desc / 100000,
- desc / 10000 % 10) == -1)
+ if ((desc % 1000 > 0) || (desc % 100000 == 0))
+ if (file_printf(ms, " (%d)", desc) == -1)
+ return size;
+ } else if (desc < 500000) {
+ if (file_printf(ms, " %d.%d", desc / 100000,
+ desc / 10000 % 10 + desc / 1000 % 10) == -1)
+ return size;
+ if (desc / 100 % 10 > 0) {
+ if (file_printf(ms, " (%d)", desc) == -1)
+ return size;
+ } else if (desc / 10 % 10 > 0) {
+ if (file_printf(ms, ".%d", desc / 10 % 10)
+ == -1)
return size;
- if (desc / 1000 % 10 > 0)
- if (file_printf(ms, ".%d", desc / 1000 % 10)
- == -1)
- return size;
- }
- if (desc / 10000 % 10 > 5) {
- desc %= 1000;
- if (desc >= 100) {
- if (file_printf(ms, "-STABLE (rev %d)",
- desc % 100) == -1)
- return size;
- } else if (desc != 0) {
- if (file_printf(ms, ".%d", desc) == -1)
- return size;
- }
}
} else {
if (file_printf(ms, " %d.%d", desc / 100000,
desc / 1000 % 100) == -1)
return size;
- desc %= 1000;
- if (desc >= 100) {
- if (file_printf(ms, "-CURRENT (rev %d)",
- desc % 100) == -1)
+ if ((desc / 100 % 10 > 0) ||
+ (desc % 100000 / 100 == 0)) {
+ if (file_printf(ms, " (%d)", desc) == -1)
return size;
- } else if (desc != 0) {
- if (file_printf(ms, ".%d", desc / 10) == -1)
+ } else if (desc / 10 % 10 > 0) {
+ if (file_printf(ms, ".%d", desc / 10 % 10)
+ == -1)
return size;
}
}
file_badseek(ms);
return -1;
}
- bufsize = read(fd, nbuf, sizeof(nbuf));
+ bufsize = read(fd, nbuf, ((ph_filesz < sizeof(nbuf)) ?
+ ph_filesz : sizeof(nbuf)));
if (bufsize == -1) {
file_badread(ms);
return -1;
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#ifndef lint
-FILE_RCSID("@(#)$Id: softmagic.c,v 1.66 2004/07/24 20:38:56 christos Exp $")
+FILE_RCSID("@(#)$Id: softmagic.c,v 1.72 2004/11/24 17:38:25 christos Exp $")
#endif /* lint */
private int match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
const unsigned char *s, size_t nbytes)
/*@globals fileSystem @*/
/*@modifies ms, magic, fileSystem @*/;
-private int mget(struct magic_set *ms, union VALUETYPE *p,
- const unsigned char *s, struct magic *m, size_t nbytes)
+private int mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
+ struct magic *m, size_t nbytes)
/*@globals fileSystem @*/
/*@modifies ms, p, m, fileSystem @*/;
private int mcheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
/*@globals fileSystem @*/
/*@modifies ms, p, fileSystem @*/;
-private int32_t mprint(struct magic_set *ms, union VALUETYPE *p,
- struct magic *m)
+private int32_t mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
/*@globals fileSystem @*/
/*@modifies ms, p, fileSystem @*/;
private void mdebug(uint32_t offset, const char *str, size_t len)
/*@globals fileSystem @*/
/*@modifies fileSystem @*/;
+private int mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
+ const unsigned char *s, size_t offset, size_t nbytes)
+ /*@modifies ms, p @*/;
private int mconvert(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
/*@modifies ms, p @*/;
private int check_mem(struct magic_set *ms, unsigned int level)
case FILE_STRING:
case FILE_PSTRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
if (m->reln == '=') {
if (file_printf(ms, m->desc, m->value.s) == -1)
return -1;
p->l = ~p->l;
return 1;
case FILE_STRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
{
- int n;
+ size_t len;
/* Null terminate and eat *trailing* return */
p->s[sizeof(p->s) - 1] = '\0';
- n = strlen(p->s) - 1;
- if (p->s[n] == '\n')
- p->s[n] = '\0';
+ len = strlen(p->s);
+ if (len-- && p->s[len] == '\n')
+ p->s[len] = '\0';
return 1;
}
case FILE_PSTRING:
{
char *ptr1 = p->s, *ptr2 = ptr1 + 1;
- unsigned int n = *p->s;
- if (n >= sizeof(p->s))
- n = sizeof(p->s) - 1;
- while (n--)
+ size_t len = *p->s;
+ if (len >= sizeof(p->s))
+ len = sizeof(p->s) - 1;
+ while (len--)
*ptr1++ = *ptr2++;
*ptr1 = '\0';
- n = strlen(p->s) - 1;
- if (p->s[n] == '\n')
- p->s[n] = '\0';
+ len = strlen(p->s);
+ if (len-- && p->s[len] == '\n')
+ p->s[len] = '\0';
return 1;
}
case FILE_BESHORT:
}
private int
-mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
- struct magic *m, size_t nbytes)
+mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
+ const unsigned char *s, size_t offset, size_t nbytes)
{
- uint32_t offset = m->offset;
-
- if (m->type == FILE_REGEX) {
+ if (type == FILE_REGEX && indir == 0) {
/*
* offset is interpreted as last line to search,
* (starting at 1), not as bytes-from start-of-file
last = b;
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
- */
- memset(p, 0, sizeof(union VALUETYPE));
- if (offset < nbytes)
- memcpy(p, s + offset, nbytes - offset);
+ return 0;
}
+ if (indir == 0 && (type == FILE_BESTRING16 || type == FILE_LESTRING16))
+ {
+ const char *src = s + offset;
+ const char *esrc = s + nbytes;
+ char *dst = p->s, *edst = &p->s[sizeof(p->s) - 1];
+
+ if (type == FILE_BESTRING16)
+ src++;
+
+ for (;src < esrc; src++, dst++) {
+ if (dst < edst)
+ *dst = *src++;
+ else
+ break;
+ if (*dst == '\0')
+ *dst = ' ';
+ }
+ *edst = '\0';
+ return 0;
+ }
+
+ if (offset >= nbytes) {
+ (void)memset(p, '\0', sizeof(*p));
+ return 0;
+ }
+ if (nbytes - offset < sizeof(*p))
+ nbytes = nbytes - offset;
+ else
+ nbytes = sizeof(*p);
+
+ (void)memcpy(p, s + offset, nbytes);
+
+ /*
+ * the usefulness of padding with zeroes eludes me, it
+ * might even cause problems
+ */
+ if (nbytes < sizeof(*p))
+ (void)memset(((char *)p) + nbytes, '\0', sizeof(*p) - nbytes);
+ return 0;
+}
+
+private int
+mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
+ struct magic *m, size_t nbytes)
+{
+ uint32_t offset = m->offset;
+
+ if (mcopy(ms, p, m->type, m->flag & INDIR, s, offset, nbytes) == -1)
+ return -1;
+
/* Verify we have enough data to match magic type */
switch (m->type) {
case FILE_BYTE:
break;
}
- if (nbytes < sizeof(union VALUETYPE) ||
- nbytes - sizeof(union VALUETYPE) < offset)
- return 0;
-
- memcpy(p, s + offset, sizeof(union VALUETYPE));
+ if (mcopy(ms, p, m->type, 0, s, offset, nbytes) == -1)
+ return -1;
if ((ms->flags & MAGIC_DEBUG) != 0) {
mdebug(offset, (char *)(void *)p,
break;
case FILE_STRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
case FILE_PSTRING:
{
/*
file_error(ms, 0, "regex error %d, (%s)", rc, errmsg);
return -1;
} else {
- rc = regexec(&rx, p->buf, 0, 0, 0);
/*@-immediatetrans -moduncon -noeffectuncon @*/ /* regfree annotate bogus only @*/
+ rc = regexec(&rx, p->buf, 0, 0, 0);
regfree(&rx);
/*@=immediatetrans =moduncon =noeffectuncon @*/
free(p->buf);
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Ian F. Darwin and others.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
*
* Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu.
*
- * $Id: tar.h,v 1.7 2003/10/14 19:29:56 christos Exp $ # checkin only
+ * $Id: tar.h,v 1.8 2004/09/11 19:15:58 christos Exp $ # checkin only
*/
/*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE