Upgrade to file-4.12 (with RH patches).
authorjbj <devnull@localhost>
Mon, 3 Jan 2005 02:02:54 +0000 (02:02 +0000)
committerjbj <devnull@localhost>
Mon, 3 Jan 2005 02:02:54 +0000 (02:02 +0000)
CVS patchset: 7661
CVS date: 2005/01/03 02:02:54

52 files changed:
file/ChangeLog
file/LEGAL.NOTICE
file/Makefile.am
file/PORTING [new file with mode: 0644]
file/configure.ac
file/doc/Makefile.am
file/doc/libmagic.man
file/magic/Localstuff
file/magic/Magdir/animation
file/magic/Magdir/apple
file/magic/Magdir/archive
file/magic/Magdir/audio
file/magic/Magdir/console
file/magic/Magdir/elf
file/magic/Magdir/esri [new file with mode: 0644]
file/magic/Magdir/filesystems
file/magic/Magdir/images
file/magic/Magdir/linux
file/magic/Magdir/msdos
file/magic/Magdir/os9
file/magic/Magdir/perl
file/magic/Magdir/plan9
file/magic/Magdir/policy [new file with mode: 0644]
file/magic/Magdir/revision
file/magic/Magdir/sinclair
file/magic/Magdir/sniffer
file/magic/Magdir/tex
file/magic/Magdir/virtutech [new file with mode: 0644]
file/magic/Magdir/xo65 [new file with mode: 0644]
file/magic/Makefile.am
file/magic/magic.mime
file/mkinstalldirs
file/python/Makefile.am [new file with mode: 0644]
file/src/Makefile.am
file/src/apprentice.c
file/src/ascmagic.c
file/src/compress.c
file/src/file.c
file/src/file.h
file/src/fsmagic.c
file/src/funcs.c
file/src/is_tar.c
file/src/magic.c
file/src/magic.h
file/src/names.h
file/src/patchlevel.h
file/src/print.c
file/src/readelf.c
file/src/readelf.h
file/src/softmagic.c
file/src/tar.h
file/src/test.c

index 1239626..c7ca545 100644 (file)
@@ -1,3 +1,30 @@
+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>
 
index dd8b90a..0c2c719 100644 (file)
@@ -1,7 +1,7 @@
-$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.
@@ -15,11 +15,6 @@ are met:
 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
index 300900d..59dac9b 100644 (file)
@@ -1,6 +1,6 @@
 # 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
diff --git a/file/PORTING b/file/PORTING
new file mode 100644 (file)
index 0000000..e69de29
index 074f0d9..a9cd542 100644 (file)
@@ -1,41 +1,36 @@
 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)
@@ -61,10 +56,23 @@ AC_PROG_INSTALL
 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
@@ -79,27 +87,25 @@ AC_CHECK_HEADERS(getopt.h)
 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)
@@ -113,10 +119,6 @@ fi
 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)
@@ -125,16 +127,8 @@ AC_CHECK_SIZEOF_STDC_HEADERS(uint64_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
index d3e28e7..4a78589 100644 (file)
@@ -5,8 +5,7 @@ else
 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)
index c60a044..b4b343a 100644 (file)
@@ -11,8 +11,6 @@
 .\" 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
@@ -223,6 +221,6 @@ The compiled default magic database.
 .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.
index 8aa4864..0fd0c91 100644 (file)
@@ -6,33 +6,11 @@
 # 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)
index 815a208..08f92ae 100644 (file)
 # 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
 #
index 2b0a290..6944805 100644 (file)
 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,
index 070feab..84a55a3 100644 (file)
 #  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
index 6a4ef95..ccdf14c 100644 (file)
 
 # 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
+
index ff5a152..fdad7c4 100644 (file)
 # 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)
+
index 10aac06..67e5270 100644 (file)
 >>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),
diff --git a/file/magic/Magdir/esri b/file/magic/Magdir/esri
new file mode 100644 (file)
index 0000000..35c3492
--- /dev/null
@@ -0,0 +1,27 @@
+
+#------------------------------------------------------------------------------
+# 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
index c798525..5a4ac23 100644 (file)
 >>>>>>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
index b992a92..747c461 100644 (file)
 # 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
+
+
index 1b8961c..37c41bb 100644 (file)
 # 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
index 1c707d4..3c230b7 100644 (file)
 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
index df3bd1d..ed2ed2c 100644 (file)
 >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
index f70b8dc..417220e 100644 (file)
 # 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)
index b564fc8..58fb071 100644 (file)
@@ -1,4 +1,17 @@
+
 #------------------------------------------------------------------------------
 # 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
diff --git a/file/magic/Magdir/policy b/file/magic/Magdir/policy
new file mode 100644 (file)
index 0000000..50a6122
--- /dev/null
@@ -0,0 +1,6 @@
+# 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
index 36a829b..8b57aa3 100644 (file)
@@ -3,3 +3,9 @@
 # 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)
index 702875e..fbad852 100644 (file)
 # 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
index b45b63e..282c44f 100644 (file)
@@ -32,6 +32,7 @@
 #
 # 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)
@@ -54,6 +55,7 @@
 # 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
index be84ecc..a6c734e 100644 (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)
 
diff --git a/file/magic/Magdir/virtutech b/file/magic/Magdir/virtutech
new file mode 100644 (file)
index 0000000..cea8443
--- /dev/null
@@ -0,0 +1,10 @@
+#------------------------------------------------------------------------------
+# 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
diff --git a/file/magic/Magdir/xo65 b/file/magic/Magdir/xo65
new file mode 100644 (file)
index 0000000..1020cee
--- /dev/null
@@ -0,0 +1,29 @@
+
+#------------------------------------------------------------------------------
+# 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
index eb8116c..82e2719 100644 (file)
@@ -1,6 +1,4 @@
-#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)
 
@@ -69,11 +67,11 @@ Magdir/diff \
 Magdir/digital \
 Magdir/dolby \
 Magdir/dump \
-Magdir/dyadic \
 Magdir/editors \
 Magdir/elf \
 Magdir/encore \
 Magdir/epoc \
+Magdir/esri \
 Magdir/fcs \
 Magdir/filesystems \
 Magdir/flash \
@@ -149,6 +147,7 @@ Magdir/pgp \
 Magdir/pkgadd \
 Magdir/plan9 \
 Magdir/plus5 \
+Magdir/policy \
 Magdir/printer \
 Magdir/project \
 Magdir/psdbms \
@@ -171,6 +170,7 @@ Magdir/sinclair \
 Magdir/sketch \
 Magdir/smalltalk \
 Magdir/sniffer \
+Magdir/dyadic \
 Magdir/softquad \
 Magdir/spectrum \
 Magdir/sql \
@@ -191,6 +191,7 @@ Magdir/varied.out \
 Magdir/varied.script \
 Magdir/vax \
 Magdir/vicar \
+Magdir/virtutech \
 Magdir/visx \
 Magdir/vms \
 Magdir/vmware \
@@ -199,6 +200,7 @@ Magdir/vxl \
 Magdir/wordprocessors \
 Magdir/xdelta \
 Magdir/xenix \
+Magdir/xo65 \
 Magdir/xwindows \
 Magdir/zilog \
 Magdir/zyxel
index d314c4f..30ad667 100644 (file)
 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
-     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
index 922a27e..8ab885e 100644 (file)
@@ -4,9 +4,53 @@
 # 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
@@ -22,13 +66,24 @@ 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/"
@@ -37,3 +92,8 @@ done
 
 exit $errstatus
 
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 3
+# End:
+# mkinstalldirs ends here
diff --git a/file/python/Makefile.am b/file/python/Makefile.am
new file mode 100644 (file)
index 0000000..6052d9c
--- /dev/null
@@ -0,0 +1,2 @@
+
+EXTRA_DIST = README example.py py_magic.c py_magic.h setup.py
index 2a957b2..1977b88 100644 (file)
@@ -1,7 +1,8 @@
 LINT = splint
 BUILT_SOURCES = listobjs
 
-#MAGIC  = $(pkgdatadir)/magic
+EXTRA_DIST = test.c
+
 pkglibdir =  @prefix@/lib/rpm
 MAGIC    = $(pkglibdir)/magic
 
@@ -31,7 +32,7 @@ listobjs:
 .PHONY: lint
 lint:
        $(LINT)  $(DEFS) $(INCLUDES) $(file_SOURCES) $(libmagic_la_SOURCES) $(include_HEADERS) $(noinst_HEADERS)
-                                                                                
+                                                                                 
 .PHONY: sources
 sources:
        @echo $(libmagic_la_SOURCES:%=file/src/%)
index 5aa4c29..31d94ab 100644 (file)
  * 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
@@ -50,7 +45,7 @@
 #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) && \
@@ -79,6 +74,9 @@ FILE_RCSID("@(#)$Id: apprentice.c,v 1.78 2004/07/24 20:38:56 christos Exp $")
 #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@*/
@@ -87,24 +85,21 @@ private size_t magicsize = sizeof(struct magic);
 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)
@@ -115,17 +110,17 @@ private uint16_t swap2(uint16_t sv)
        /*@*/;
 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 @*/;
 
@@ -194,7 +189,7 @@ apprentice_1(struct magic_set *ms, const char *fn, int action,
 #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;
@@ -325,10 +320,9 @@ apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
                "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'",
@@ -349,12 +343,14 @@ apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
                (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;
        }
@@ -402,12 +398,14 @@ file_signextend(struct magic_set *ms, struct magic *m, uint32_t v)
                        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;
                }
@@ -466,7 +464,7 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l,
        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) {
@@ -500,8 +498,8 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l,
                                break;
                        default:
                                if (ms->flags & MAGIC_CHECK)
-                                       file_magwarn(
-                                           "indirect offset type %c invalid",
+                                       file_magwarn(ms,
+                                           "indirect offset type `%c' invalid",
                                            *l);
                                break;
                        }
@@ -551,7 +549,8 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l,
                        t = l;
                if (*t++ != ')') 
                        if (ms->flags & MAGIC_CHECK)
-                               file_magwarn("missing ')' in indirect offset");
+                               file_magwarn(ms,
+                                   "missing ')' in indirect offset");
                l = t;
        }
 
@@ -576,6 +575,8 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l,
 #define NBELDATE       7
 #define NLELDATE       7
 #define NREGEX         5
+#define NBESTRING16    10
+#define NLESTRING16    10
 
        if (*l == 'u') {
                ++l;
@@ -633,23 +634,28 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *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);
@@ -671,8 +677,8 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l,
                                        break;
                                default:
                                        if (ms->flags & MAGIC_CHECK)
-                                               file_magwarn(
-                                               "string extension %c invalid",
+                                               file_magwarn(ms,
+                                               "string extension `%c' invalid",
                                                *l);
                                        return -1;
                                }
@@ -700,7 +706,7 @@ parse(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, char *l,
                }
                break;
        case '!':
-               if (m->type != FILE_STRING && m->type != FILE_PSTRING) {
+               if (!IS_STRING(m->type)) {
                        m->reln = *l;
                        ++l;
                        break;
@@ -744,7 +750,7 @@ GetDesc:
                /* NULLBODY */;
 
        if (ms->flags & MAGIC_CHECK) {
-               if (!check_format(m))
+               if (!check_format(ms, m))
                        return -1;
        }
 #ifndef COMPILE_ONLY
@@ -761,7 +767,7 @@ GetDesc:
  * the type of the magic.
  */
 private int
-check_format(struct magic *m)
+check_format(struct magic_set *ms, struct magic *m)
 {
 /*@-nullassign@*/
 /*@observer@*/
@@ -779,13 +785,13 @@ check_format(struct magic *m)
                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++) {
@@ -798,12 +804,12 @@ check_format(struct magic *m)
        }
        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;
@@ -822,13 +828,15 @@ getvalue(struct magic_set *ms, struct magic *m, char **p)
        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;
                }
@@ -1060,7 +1068,7 @@ apprentice_map(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
        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)
@@ -1152,7 +1160,7 @@ apprentice_compile(struct magic_set *ms, struct magic **magicp,
 {
        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;
@@ -1189,13 +1197,14 @@ private const char ext[] = ".mgc";
  * 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;
 }
@@ -1250,7 +1259,7 @@ bs1(struct magic *m)
        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);
 }
index 3572ba7..e1d5bc3 100644 (file)
  * 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
@@ -54,7 +49,7 @@
 #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;
@@ -63,23 +58,17 @@ 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)
        /*@*/;
@@ -673,6 +662,7 @@ private unsigned char ebcdic_to_ascii[] = {
  * 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,
index 6101397..b0236f4 100644 (file)
  * 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
@@ -55,7 +50,7 @@
 #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
 
 
@@ -90,8 +85,8 @@ private ssize_t swrite(int fd, const void *buf, size_t n)
        /*@*/;
 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
index b237290..425b82b 100644 (file)
  * 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
@@ -77,7 +72,7 @@
 #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 */
 
 
@@ -109,7 +104,7 @@ private char *separator = ":";      /* Default field separator      */
 /*@unchecked@*/ /*@null@*/
 private char *progname;                /* used throughout              */
 
-/*@unchecked@*/ /*@observer@*/ /*@null@*/
+/*@unchecked@*/ /*@only@*/ /*@null@*/
 private struct magic_set *magic;
 
 private void unwrap(char *fn)
@@ -124,9 +119,9 @@ private void help(void)
        /*@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
 
@@ -343,6 +338,8 @@ main(int argc, char *argv[])
                        process(argv[optind], wid);
        }
 
+       magic_close(magic);
+       magic = NULL;
        return 0;
 }
 
@@ -394,7 +391,8 @@ unwrap(char *fn)
        }
 
        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);
index 186a46c..846f130 100644 (file)
  * 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
@@ -32,7 +27,7 @@
  */
 /*
  * 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__
@@ -113,6 +108,8 @@ struct magic {
 #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",            \
@@ -132,7 +129,9 @@ struct magic {
 /* 14 */                       "ldate",                \
 /* 15 */                       "beldate",              \
 /* 16 */                       "leldate",              \
-/* 17 */                       "regex",
+/* 17 */                       "regex",                \
+/* 18 */                       "bestring16",           \
+/* 19 */                       "lestring16",
 
 #define        FILE_FMT_NUM    "cduxXi"
 #define FILE_FMT_STR   "s"     
@@ -155,7 +154,9 @@ struct magic {
 /* 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 */
@@ -240,6 +241,8 @@ struct magic_set {
     int error;
     int flags;
     int haderr;
+    const char *file;
+    size_t line;
 };
 
 struct stat;
@@ -249,10 +252,9 @@ protected char *file_fmttime(uint32_t, int)
 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 *, ...)
@@ -279,7 +281,7 @@ protected struct mlist *file_apprentice(struct magic_set *ms, const char *, int)
 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)
@@ -290,13 +292,13 @@ protected void file_oomem(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 *)
index 7581b72..ce41ad9 100644 (file)
  * 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
@@ -62,7 +57,7 @@
 #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
@@ -94,10 +89,11 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
                        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) {
index 44cbdf1..bd77f13 100644 (file)
@@ -11,8 +11,6 @@
  * 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
@@ -34,7 +32,7 @@
 #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.
index 4ab1a1f..84f201e 100644 (file)
  * 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
@@ -50,7 +45,7 @@
 #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') )
index c2d9e62..ceefbfa 100644 (file)
@@ -11,8 +11,6 @@
  * 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
@@ -65,7 +63,7 @@
 #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__
@@ -77,8 +75,8 @@ protected int file_os2_apptype(struct magic_set *ms, const char *fn,
 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 @*/;
 
@@ -91,34 +89,34 @@ magic_open(int flags)
                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
@@ -145,6 +143,7 @@ public 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);
@@ -169,22 +168,16 @@ public int
 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
@@ -224,13 +217,13 @@ magic_file(struct magic_set *ms, const char *inname)
 {
        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:
index ae0e12f..77fe8cc 100644 (file)
@@ -11,8 +11,6 @@
  * 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
index 6978a77..8e6d21f 100644 (file)
  * 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
@@ -37,7 +32,7 @@
  * 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 $
  */
 
 /*
index e5e1b01..1f74d48 100644 (file)
@@ -1,11 +1,17 @@
 #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
  *
index 161ffdd..6387808 100644 (file)
  * 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
@@ -46,7 +41,7 @@
 #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]))
@@ -143,7 +138,7 @@ file_mdump(struct magic *m)
 
 /*VARARGS*/
 protected void
-file_magwarn(const char *f, ...)
+file_magwarn(struct magic_set *ms, const char *f, ...)
 {
        va_list va;
        va_start(va, f);
@@ -151,7 +146,8 @@ file_magwarn(const char *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);
index 21405f1..cd20bed 100644 (file)
@@ -11,8 +11,6 @@
  * 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)
@@ -269,7 +264,8 @@ dophn_core(struct magic_set *ms, int class, int swap, int fd, off_t off,
                        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;
@@ -340,7 +336,7 @@ donote(struct magic_set *ms, unsigned char *nbuf, size_t offset, size_t size,
        }
 
        offset = ELF_ALIGN(doff + descsz);
-       if (offset + descsz > size) {
+       if (doff + descsz > size) {
                return offset;
        }
 
@@ -426,48 +422,67 @@ donote(struct magic_set *ms, unsigned char *nbuf, size_t offset, size_t size,
 
                /*
                 * 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;
                        }
                }
@@ -706,7 +721,8 @@ dophn_exec(struct magic_set *ms, int class, int swap, int fd, off_t off,
                                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;
index 391b54d..bc5e8e5 100644 (file)
@@ -11,8 +11,6 @@
  * 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
index dfb9301..82bc729 100644 (file)
  * 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)
@@ -289,6 +286,8 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
 
        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;
@@ -439,28 +438,30 @@ mconvert(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                        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:
@@ -616,12 +617,10 @@ mdebug(uint32_t offset, const char *str, size_t len)
 }
 
 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
@@ -637,18 +636,59 @@ mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
                        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:
@@ -1035,11 +1075,8 @@ mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
                        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,
@@ -1088,6 +1125,8 @@ mcheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                break;
 
        case FILE_STRING:
+       case FILE_BESTRING16:
+       case FILE_LESTRING16:
        case FILE_PSTRING:
        {
                /*
@@ -1147,8 +1186,8 @@ mcheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                        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);
index 983ab56..c3fc185 100644 (file)
  * 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
@@ -37,7 +32,7 @@
  *
  * 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
  */
 
 /*
index 2c60585..ab4c105 100644 (file)
@@ -11,8 +11,6 @@
  * 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