[Midnightbsd-cvs] src [11008] trunk/contrib/file: cleanup
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Jun 15 18:27:45 EDT 2018
Revision: 11008
http://svnweb.midnightbsd.org/src/?rev=11008
Author: laffer1
Date: 2018-06-15 18:27:44 -0400 (Fri, 15 Jun 2018)
Log Message:
-----------
cleanup
Modified Paths:
--------------
trunk/contrib/file/compile
trunk/contrib/file/configure
trunk/contrib/file/magic/Magdir/adventure
trunk/contrib/file/magic/Magdir/amanda
trunk/contrib/file/magic/Magdir/amigaos
trunk/contrib/file/magic/Magdir/android
trunk/contrib/file/magic/Magdir/animation
trunk/contrib/file/magic/Magdir/apple
trunk/contrib/file/magic/Magdir/archive
trunk/contrib/file/magic/Magdir/att3b
trunk/contrib/file/magic/Magdir/audio
trunk/contrib/file/magic/Magdir/blackberry
trunk/contrib/file/magic/Magdir/blender
trunk/contrib/file/magic/Magdir/c-lang
trunk/contrib/file/magic/Magdir/c64
trunk/contrib/file/magic/Magdir/cad
trunk/contrib/file/magic/Magdir/cafebabe
trunk/contrib/file/magic/Magdir/claris
trunk/contrib/file/magic/Magdir/clipper
trunk/contrib/file/magic/Magdir/commands
trunk/contrib/file/magic/Magdir/compress
trunk/contrib/file/magic/Magdir/console
trunk/contrib/file/magic/Magdir/cups
trunk/contrib/file/magic/Magdir/database
trunk/contrib/file/magic/Magdir/diff
trunk/contrib/file/magic/Magdir/dolby
trunk/contrib/file/magic/Magdir/dump
trunk/contrib/file/magic/Magdir/dyadic
trunk/contrib/file/magic/Magdir/editors
trunk/contrib/file/magic/Magdir/elf
trunk/contrib/file/magic/Magdir/filesystems
trunk/contrib/file/magic/Magdir/flash
trunk/contrib/file/magic/Magdir/fonts
trunk/contrib/file/magic/Magdir/fortran
trunk/contrib/file/magic/Magdir/frame
trunk/contrib/file/magic/Magdir/fsav
trunk/contrib/file/magic/Magdir/games
trunk/contrib/file/magic/Magdir/gcc
trunk/contrib/file/magic/Magdir/geo
trunk/contrib/file/magic/Magdir/gnu
trunk/contrib/file/magic/Magdir/gpt
trunk/contrib/file/magic/Magdir/gringotts
trunk/contrib/file/magic/Magdir/hitachi-sh
trunk/contrib/file/magic/Magdir/ibm370
trunk/contrib/file/magic/Magdir/ibm6000
trunk/contrib/file/magic/Magdir/icc
trunk/contrib/file/magic/Magdir/iff
trunk/contrib/file/magic/Magdir/images
trunk/contrib/file/magic/Magdir/intel
trunk/contrib/file/magic/Magdir/isz
trunk/contrib/file/magic/Magdir/java
trunk/contrib/file/magic/Magdir/jpeg
trunk/contrib/file/magic/Magdir/karma
trunk/contrib/file/magic/Magdir/kml
trunk/contrib/file/magic/Magdir/linux
trunk/contrib/file/magic/Magdir/lisp
trunk/contrib/file/magic/Magdir/m4
trunk/contrib/file/magic/Magdir/mach
trunk/contrib/file/magic/Magdir/macintosh
trunk/contrib/file/magic/Magdir/mail.news
trunk/contrib/file/magic/Magdir/make
trunk/contrib/file/magic/Magdir/map
trunk/contrib/file/magic/Magdir/maple
trunk/contrib/file/magic/Magdir/marc21
trunk/contrib/file/magic/Magdir/mathematica
trunk/contrib/file/magic/Magdir/metastore
trunk/contrib/file/magic/Magdir/mime
trunk/contrib/file/magic/Magdir/misctools
trunk/contrib/file/magic/Magdir/modem
trunk/contrib/file/magic/Magdir/mozilla
trunk/contrib/file/magic/Magdir/msdos
trunk/contrib/file/magic/Magdir/msooxml
trunk/contrib/file/magic/Magdir/msvc
trunk/contrib/file/magic/Magdir/msx
trunk/contrib/file/magic/Magdir/mup
trunk/contrib/file/magic/Magdir/netbsd
trunk/contrib/file/magic/Magdir/netscape
trunk/contrib/file/magic/Magdir/nitpicker
trunk/contrib/file/magic/Magdir/os2
trunk/contrib/file/magic/Magdir/os9
trunk/contrib/file/magic/Magdir/pascal
trunk/contrib/file/magic/Magdir/pbf
trunk/contrib/file/magic/Magdir/pdf
trunk/contrib/file/magic/Magdir/pdp
trunk/contrib/file/magic/Magdir/perl
trunk/contrib/file/magic/Magdir/pgf
trunk/contrib/file/magic/Magdir/pgp
trunk/contrib/file/magic/Magdir/printer
trunk/contrib/file/magic/Magdir/project
trunk/contrib/file/magic/Magdir/psdbms
trunk/contrib/file/magic/Magdir/python
trunk/contrib/file/magic/Magdir/riff
trunk/contrib/file/magic/Magdir/ruby
trunk/contrib/file/magic/Magdir/sccs
trunk/contrib/file/magic/Magdir/scientific
trunk/contrib/file/magic/Magdir/sendmail
trunk/contrib/file/magic/Magdir/sequent
trunk/contrib/file/magic/Magdir/sereal
trunk/contrib/file/magic/Magdir/sgi
trunk/contrib/file/magic/Magdir/sgml
trunk/contrib/file/magic/Magdir/sharc
trunk/contrib/file/magic/Magdir/sinclair
trunk/contrib/file/magic/Magdir/sketch
trunk/contrib/file/magic/Magdir/sql
trunk/contrib/file/magic/Magdir/ssh
trunk/contrib/file/magic/Magdir/ssl
trunk/contrib/file/magic/Magdir/sysex
trunk/contrib/file/magic/Magdir/terminfo
trunk/contrib/file/magic/Magdir/varied.script
trunk/contrib/file/magic/Magdir/vms
trunk/contrib/file/magic/Magdir/vmware
trunk/contrib/file/magic/Magdir/vorbis
trunk/contrib/file/magic/Magdir/windows
trunk/contrib/file/magic/Magdir/wordprocessors
trunk/contrib/file/magic/Magdir/xenix
trunk/contrib/file/magic/Magdir/xilinx
trunk/contrib/file/magic/Magdir/xwindows
trunk/contrib/file/magic/Makefile.am
trunk/contrib/file/magic/Makefile.in
Added Paths:
-----------
trunk/contrib/file/magic/Magdir/vacuum-cleaner
trunk/contrib/file/magic/Magdir/webassembly
trunk/contrib/file/magic/Magdir/x68000
trunk/contrib/file/magic/Magdir/yara
trunk/contrib/file/missing
trunk/contrib/file/python/
trunk/contrib/file/python/Makefile.am
trunk/contrib/file/python/Makefile.in
trunk/contrib/file/python/README
trunk/contrib/file/python/example.py
trunk/contrib/file/python/magic.py
trunk/contrib/file/python/setup.py
trunk/contrib/file/src/
trunk/contrib/file/src/Makefile.am
trunk/contrib/file/src/Makefile.in
trunk/contrib/file/src/apprentice.c
trunk/contrib/file/src/apptype.c
trunk/contrib/file/src/ascmagic.c
trunk/contrib/file/src/asctime_r.c
trunk/contrib/file/src/asprintf.c
trunk/contrib/file/src/cdf.c
trunk/contrib/file/src/cdf.h
trunk/contrib/file/src/cdf_time.c
trunk/contrib/file/src/compress.c
trunk/contrib/file/src/ctime_r.c
trunk/contrib/file/src/der.c
trunk/contrib/file/src/der.h
trunk/contrib/file/src/dprintf.c
trunk/contrib/file/src/elfclass.h
trunk/contrib/file/src/encoding.c
trunk/contrib/file/src/file.c
trunk/contrib/file/src/file.h
trunk/contrib/file/src/file_opts.h
trunk/contrib/file/src/fmtcheck.c
trunk/contrib/file/src/fsmagic.c
trunk/contrib/file/src/funcs.c
trunk/contrib/file/src/getline.c
trunk/contrib/file/src/getopt_long.c
trunk/contrib/file/src/gmtime_r.c
trunk/contrib/file/src/is_tar.c
trunk/contrib/file/src/localtime_r.c
trunk/contrib/file/src/magic.c
trunk/contrib/file/src/magic.h.in
trunk/contrib/file/src/mygetopt.h
trunk/contrib/file/src/pread.c
trunk/contrib/file/src/print.c
trunk/contrib/file/src/readcdf.c
trunk/contrib/file/src/readelf.c
trunk/contrib/file/src/readelf.h
trunk/contrib/file/src/softmagic.c
trunk/contrib/file/src/strcasestr.c
trunk/contrib/file/src/strlcat.c
trunk/contrib/file/src/strlcpy.c
trunk/contrib/file/src/tar.h
trunk/contrib/file/src/vasprintf.c
trunk/contrib/file/tests/
trunk/contrib/file/tests/Makefile.am
trunk/contrib/file/tests/Makefile.in
trunk/contrib/file/tests/README
trunk/contrib/file/tests/escapevel.result
trunk/contrib/file/tests/escapevel.testfile
trunk/contrib/file/tests/gedcom.result
trunk/contrib/file/tests/gedcom.testfile
trunk/contrib/file/tests/hddrawcopytool.result
trunk/contrib/file/tests/hddrawcopytool.testfile
trunk/contrib/file/tests/issue311docx.result
trunk/contrib/file/tests/issue311docx.testfile
trunk/contrib/file/tests/test.c
Removed Paths:
-------------
trunk/contrib/file/magic.c
trunk/contrib/file/magic.h
trunk/contrib/file/magic.h.in
trunk/contrib/file/magic.man
trunk/contrib/file/magic.mime
trunk/contrib/file/magic2mime
trunk/contrib/file/mkinstalldirs
trunk/contrib/file/mygetopt.h
trunk/contrib/file/pread.c
trunk/contrib/file/print.c
trunk/contrib/file/readcdf.c
trunk/contrib/file/readelf.c
trunk/contrib/file/readelf.h
trunk/contrib/file/softmagic.c
trunk/contrib/file/strcasestr.c
trunk/contrib/file/strlcat.c
trunk/contrib/file/strlcpy.c
trunk/contrib/file/tar.h
trunk/contrib/file/vasprintf.c
Modified: trunk/contrib/file/compile
===================================================================
--- trunk/contrib/file/compile 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/compile 2018-06-15 22:27:44 UTC (rev 11008)
@@ -3,7 +3,7 @@
scriptversion=2012-10-14.11; # UTC
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey at cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
Modified: trunk/contrib/file/configure
===================================================================
--- trunk/contrib/file/configure 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/configure 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for file 5.19.
+# Generated by GNU Autoconf 2.69 for file 5.32.
#
# Report bugs to <christos at astron.com>.
#
@@ -590,8 +590,8 @@
# Identity of this package.
PACKAGE_NAME='file'
PACKAGE_TARNAME='file'
-PACKAGE_VERSION='5.19'
-PACKAGE_STRING='file 5.19'
+PACKAGE_VERSION='5.32'
+PACKAGE_STRING='file 5.32'
PACKAGE_BUGREPORT='christos at astron.com'
PACKAGE_URL=''
@@ -766,6 +766,7 @@
enable_silent_rules
enable_elf
enable_elf_core
+enable_zlib
enable_fsect_man5
enable_dependency_tracking
enable_static
@@ -1327,7 +1328,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures file 5.19 to adapt to many kinds of systems.
+\`configure' configures file 5.32 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1397,7 +1398,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of file 5.19:";;
+ short | recursive ) echo "Configuration of file 5.32:";;
esac
cat <<\_ACEOF
@@ -1409,6 +1410,7 @@
--disable-silent-rules verbose build output (undo: "make V=0")
--disable-elf disable builtin ELF support
--disable-elf-core disable ELF core file support
+ --disable-zlib disable zlib compression support [default=auto]
--enable-fsect-man5 enable file formats in man section 5
--enable-dependency-tracking
do not reject slow dependency extractors
@@ -1507,7 +1509,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-file configure 5.19
+file configure 5.32
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2163,7 +2165,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by file $as_me 5.19, which was
+It was created by file $as_me 5.32, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2514,7 +2516,7 @@
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-am__api_version='1.14'
+am__api_version='1.15'
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2715,8 +2717,8 @@
ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
@@ -2735,7 +2737,7 @@
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -3029,7 +3031,7 @@
# Define the identity of the package.
PACKAGE='file'
- VERSION='5.19'
+ VERSION='5.32'
cat >>confdefs.h <<_ACEOF
@@ -3063,8 +3065,8 @@
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
mkdir_p='$(MKDIR_P)'
-# We need awk for the "check" target. The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}'
@@ -3121,6 +3123,7 @@
as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
fi
fi
+
# Check whether --enable-silent-rules was given.
if test "${enable_silent_rules+set}" = set; then :
enableval=$enable_silent_rules;
@@ -3217,6 +3220,16 @@
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib support" >&5
+$as_echo_n "checking for zlib support... " >&6; }
+# Check whether --enable-zlib was given.
+if test "${enable_zlib+set}" = set; then :
+ enableval=$enable_zlib;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_zlib" >&5
+$as_echo "$enable_zlib" >&6; }
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for file formats in man section 5" >&5
$as_echo_n "checking for file formats in man section 5... " >&6; }
# Check whether --enable-fsect-man5 was given.
@@ -12785,7 +12798,7 @@
done
-for ac_header in getopt.h err.h
+for ac_header in getopt.h err.h xlocale.h signal.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -12811,7 +12824,8 @@
done
-for ac_header in zlib.h
+if test "$enable_zlib" != "no"; then
+ for ac_header in zlib.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
if test "x$ac_cv_header_zlib_h" = xyes; then :
@@ -12823,7 +12837,19 @@
done
+fi
+ac_fn_c_check_type "$LINENO" "sig_t" "ac_cv_type_sig_t" "
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+"
+if test "x$ac_cv_type_sig_t" = xyes; then :
+$as_echo "#define HAVE_SIG_T 1" >>confdefs.h
+
+fi
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
if ${ac_cv_c_const+:} false; then :
@@ -14191,7 +14217,7 @@
fi
-for ac_func in strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof
+for ac_func in strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale setlocale
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -14308,6 +14334,32 @@
fi
+ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
+if test "x$ac_cv_func_localtime_r" = xyes; then :
+ $as_echo "#define HAVE_LOCALTIME_R 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" localtime_r.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS localtime_r.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
+if test "x$ac_cv_func_gmtime_r" = xyes; then :
+ $as_echo "#define HAVE_GMTIME_R 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" gmtime_r.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext"
+ ;;
+esac
+
+fi
+
ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread"
if test "x$ac_cv_func_pread" = xyes; then :
$as_echo "#define HAVE_PREAD 1" >>confdefs.h
@@ -14347,9 +14399,23 @@
fi
+ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf"
+if test "x$ac_cv_func_dprintf" = xyes; then :
+ $as_echo "#define HAVE_DPRINTF 1" >>confdefs.h
+else
+ case " $LIBOBJS " in
+ *" dprintf.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS dprintf.$ac_objext"
+ ;;
+esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5
+fi
+
+
+
+if test "$enable_zlib" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5
$as_echo_n "checking for gzopen in -lz... " >&6; }
if ${ac_cv_lib_z_gzopen+:} false; then :
$as_echo_n "(cached) " >&6
@@ -14394,6 +14460,7 @@
fi
+fi
if test "$MINGW" = 1; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for regexec in -lgnurx" >&5
$as_echo_n "checking for regexec in -lgnurx... " >&6; }
@@ -14453,6 +14520,16 @@
fi
+if test "$enable_zlib" = "yes"; then
+ if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" != "yesyes"; then
+ as_fn_error $? "zlib support requested but not found" "$LINENO" 5
+ fi
+elif test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then
+
+$as_echo "#define ZLIBSUPPORT 1" >>confdefs.h
+
+fi
+
ac_config_files="$ac_config_files Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile"
cat >confcache <<\_ACEOF
@@ -14998,7 +15075,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by file $as_me 5.19, which was
+This file was extended by file $as_me 5.32, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15064,7 +15141,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-file config.status 5.19
+file config.status 5.32
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
Modified: trunk/contrib/file/magic/Magdir/adventure
===================================================================
--- trunk/contrib/file/magic/Magdir/adventure 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/adventure 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: adventure,v 1.14 2012/06/21 01:32:26 christos Exp $
+# $File: adventure,v 1.17 2017/07/03 16:03:40 christos Exp $
# adventure: file(1) magic for Adventure game files
#
# from Allen Garvin <earendil at faeryland.tamu-commerce.edu>
@@ -17,6 +17,7 @@
# Infocom (see z-machine)
#------------------------------------------------------------------------------
# Z-machine: file(1) magic for Z-machine binaries.
+# Sanity checks by David Griffith <dave at 661.org>
# Updated by Adam Buchbinder <adam.buchbinder at gmail.com>
#
#http://www.gnelson.demon.co.uk/zspec/sect11.html
@@ -35,16 +36,19 @@
>0 ubyte <9
>>16 belong&0xfe00f0f0 0x3030
>>>0 ubyte < 10
->>>>2 ubeshort < 10
+>>>>2 ubeshort x
>>>>>18 regex [0-9][0-9][0-9][0-9][0-9][0-9]
->>>>>>0 ubyte < 10 Infocom (Z-machine %d,
->>>>>>>2 ubeshort < 10 Release %d /
->>>>>>>>18 string >\0 Serial %.6s)
+>>>>>>0 ubyte < 10 Infocom (Z-machine %d
+>>>>>>>2 ubeshort x \b, Release %d
+>>>>>>>>18 string >\0 \b, Serial %.6s
+>>>>>>>>18 string x \b)
!:strength + 40
+!:mime application/x-zmachine
#------------------------------------------------------------------------------
# Glulx: file(1) magic for Glulx binaries.
#
+# David Griffith <dave at 661.org>
# I haven't checked for false matches yet.
#
0 string Glul Glulx game data
@@ -52,9 +56,9 @@
>>6 byte x \b.%d
>>8 byte x \b.%d)
>36 string Info Compiled by Inform
+!:mime application/x-glulx
-
# For Quetzal and blorb magic see iff
@@ -66,18 +70,21 @@
>9 belong !0x0A0D1A00 game data, CORRUPTED
>9 belong 0x0A0D1A00
>>13 string >\0 %s game data
+!:mime application/x-tads
# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
0 string TADS2\ rsc TADS
>9 belong !0x0A0D1A00 resource data, CORRUPTED
>9 belong 0x0A0D1A00
>>13 string >\0 %s resource data
+!:mime application/x-tads
# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
# 2-byte length N, the N-char name of the game file *without* a NUL (darn!),
-# "TADS2 save\n\r\032\0" and the interpreter version.
+# "TADS2 save\n\r\032\0" and the interpreter version.
0 string TADS2\ save/g TADS
>12 belong !0x0A0D1A00 saved game data, CORRUPTED
>12 belong 0x0A0D1A00
>>(16.s+32) string >\0 %s saved game data
+!:mime application/x-tads
# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
# version.
0 string TADS2\ save TADS
@@ -84,6 +91,7 @@
>10 belong !0x0A0D1A00 saved game data, CORRUPTED
>10 belong 0x0A0D1A00
>>14 string >\0 %s saved game data
+!:mime application/x-tads
# TADS (Text Adventure Development System) version 3
# Game files start with "T3-image\015\012\032"
@@ -97,14 +105,18 @@
>>11 byte x \b%c
>>12 byte x \b%c
>>13 byte x \b%c)
+!:mime application/x-t3vm-image
+# edited by David Griffith <dave at 661.org>
# Danny Milosavljevic <danny.milo at gmx.net>
-# this are adrift (adventure game standard) game files, extension .taf
-# depending on version magic continues with 0x93453E6139FA (V 4.0)
-# 0x9445376139FA (V 3.90)
-# 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 Adrift game file
-#!:mime application/x-adrift
+# These are ADRIFT (adventure game standard) game files, extension .taf
+# Checked from source at (http://www.adrift.co/) and various taf files
+# found at the Interactive Fiction Archive (http://ifarchive.org/)
+0 belong 0x3C423FC9
+>4 belong 0x6A87C2CF Adrift game file version
+>>8 belong 0x94453661 3.80
+>>8 belong 0x94453761 3.90
+>>8 belong 0x93453E61 4.0
+>>8 belong 0x92453E61 5.0
+>>8 default x unknown
+!:mime application/x-adrift
Modified: trunk/contrib/file/magic/Magdir/amanda
===================================================================
--- trunk/contrib/file/magic/Magdir/amanda 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/amanda 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: amanda,v 1.5 2009/09/19 16:28:07 christos Exp $
+# $File: amanda,v 1.6 2017/03/17 21:35:28 christos Exp $
# amanda: file(1) magic for amanda file format
#
-0 string AMANDA:\ AMANDA
+0 string AMANDA:\ AMANDA
>8 string TAPESTART\ DATE tape header file,
>>23 string X
>>>25 string >\ Unused %s
Modified: trunk/contrib/file/magic/Magdir/amigaos
===================================================================
--- trunk/contrib/file/magic/Magdir/amigaos 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/amigaos 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: amigaos,v 1.15 2012/06/21 01:13:59 christos Exp $
+# $File: amigaos,v 1.16 2017/03/17 21:35:28 christos Exp $
# amigaos: file(1) magic for AmigaOS binary formats:
#
@@ -11,7 +11,7 @@
0 belong 0x000003e7 AmigaOS object/library data
#
0 beshort 0xe310 Amiga Workbench
->2 beshort 1
+>2 beshort 1
>>48 byte 1 disk icon
>>48 byte 2 drawer icon
>>48 byte 3 tool icon
@@ -49,7 +49,7 @@
0 string/c @database AmigaGuide file
# Amiga disk types
-#
+#
0 string RDSK Rigid Disk Block
>160 string x on %.24s
0 string DOS\0 Amiga DOS disk
Modified: trunk/contrib/file/magic/Magdir/android
===================================================================
--- trunk/contrib/file/magic/Magdir/android 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/android 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------
-# $File: android,v 1.4 2014/06/03 19:01:34 christos Exp $
+# $File: android,v 1.10 2017/03/17 21:35:28 christos Exp $
# Various android related magic entries
#------------------------------------------------------------
@@ -15,20 +15,11 @@
>0 regex dey\n[0-9]{2}\0 Dalvik dex file (optimized for host)
>4 string >000 version %s
-# http://android.stackexchange.com/questions/23357/\
-# is-there-a-way-to-look-inside-and-modify-an-adb-backup-created-file/\
-# 23608#23608
-0 string ANDROID\040BACKUP\n Android Backup
->15 string 1\n \b, version 1
->17 string 0\n \b, uncompressed
->17 string 1\n \b, compressed
->19 string none\n \b, unencrypted
->19 string AES-256\n \b, encrypted AES-256
-
# Android bootimg format
# From https://android.googlesource.com/\
# platform/system/core/+/master/mkbootimg/bootimg.h
0 string ANDROID! Android bootimg
+>1024 string LOKI\01 \b, LOKI'd
>8 lelong >0 \b, kernel
>>12 lelong >0 \b (0x%x)
>16 lelong >0 \b, ramdisk
@@ -38,41 +29,7 @@
>36 lelong >0 \b, page size: %d
>38 string >0 \b, name: %s
>64 string >0 \b, cmdline (%s)
-# Dalvik .dex format. http://retrodev.com/android/dexformat.html
-# From <mkf at google.com> "Mike Fleming"
-# Fixed to avoid regexec 17 errors on some dex files
-# From <diff at lookout.com> "Tim Strazzere"
-0 string dex\n
->0 regex dex\n[0-9]{2}\0 Dalvik dex file
->4 string >000 version %s
-0 string dey\n
->0 regex dey\n[0-9]{2}\0 Dalvik dex file (optimized for host)
->4 string >000 version %s
-# http://android.stackexchange.com/questions/23357/\
-# is-there-a-way-to-look-inside-and-modify-an-adb-backup-created-file/\
-# 23608#23608
-0 string ANDROID\040BACKUP\n Android Backup
->15 string 1\n \b, version 1
->17 string 0\n \b, uncompressed
->17 string 1\n \b, compressed
->19 string none\n \b, unencrypted
->19 string AES-256\n \b, encrypted AES-256
-
-# Android bootimg format
-# From https://android.googlesource.com/\
-# platform/system/core/+/master/mkbootimg/bootimg.h
-0 string ANDROID! Android bootimg
->8 lelong >0 \b, kernel
->>12 lelong >0 \b (0x%x)
->16 lelong >0 \b, ramdisk
->>20 lelong >0 \b (0x%x)
->24 lelong >0 \b, second stage
->>28 lelong >0 \b (0x%x)
->36 lelong >0 \b, page size: %d
->38 string >0 \b, name: %s
->64 string >0 \b, cmdline (%s)
-
# Android Backup archive
# From: Ariel Shkedi
# File extension: .ab
@@ -98,3 +55,91 @@
#>>>>>&1 regex/1l .* \b, PBKDF2 rounds: %s
#>>>>>>&1 regex/1l .* \b, IV: %s
#>>>>>>>&1 regex/1l .* \b, Key: %s
+
+# *.pit files by Joerg Jenderek
+# http://forum.xda-developers.com/showthread.php?p=9122369
+# http://forum.xda-developers.com/showthread.php?t=816449
+# Partition Information Table for Samsung's smartphone with Android
+# used by flash software Odin
+0 ulelong 0x12349876
+# 1st pit entry marker
+>0x01C ulequad&0xFFFFFFFCFFFFFFFC =0x0000000000000000
+# minimal 13 and maximal 18 PIT entries found
+>>4 ulelong <128 Partition Information Table for Samsung smartphone
+>>>4 ulelong x \b, %d entries
+# 1. pit entry
+>>>4 ulelong >0 \b; #1
+>>>0x01C use PIT-entry
+>>>4 ulelong >1 \b; #2
+>>>0x0A0 use PIT-entry
+>>>4 ulelong >2 \b; #3
+>>>0x124 use PIT-entry
+>>>4 ulelong >3 \b; #4
+>>>0x1A8 use PIT-entry
+>>>4 ulelong >4 \b; #5
+>>>0x22C use PIT-entry
+>>>4 ulelong >5 \b; #6
+>>>0x2B0 use PIT-entry
+>>>4 ulelong >6 \b; #7
+>>>0x334 use PIT-entry
+>>>4 ulelong >7 \b; #8
+>>>0x3B8 use PIT-entry
+>>>4 ulelong >8 \b; #9
+>>>0x43C use PIT-entry
+>>>4 ulelong >9 \b; #10
+>>>0x4C0 use PIT-entry
+>>>4 ulelong >10 \b; #11
+>>>0x544 use PIT-entry
+>>>4 ulelong >11 \b; #12
+>>>0x5C8 use PIT-entry
+>>>4 ulelong >12 \b; #13
+>>>>0x64C use PIT-entry
+# 14. pit entry
+>>>4 ulelong >13 \b; #14
+>>>>0x6D0 use PIT-entry
+>>>4 ulelong >14 \b; #15
+>>>0x754 use PIT-entry
+>>>4 ulelong >15 \b; #16
+>>>0x7D8 use PIT-entry
+>>>4 ulelong >16 \b; #17
+>>>0x85C use PIT-entry
+# 18. pit entry
+>>>4 ulelong >17 \b; #18
+>>>0x8E0 use PIT-entry
+
+0 name PIT-entry
+# garbage value implies end of pit entries
+>0x00 ulequad&0xFFFFFFFCFFFFFFFC =0x0000000000000000
+# skip empty partition name
+>>0x24 ubyte !0
+# partition name
+>>>0x24 string >\0 %-.32s
+# flags
+>>>0x0C ulelong&0x00000002 2 \b+RW
+# partition ID:
+# 0~IPL,MOVINAND,GANG;1~PIT,GPT;2~HIDDEN;3~SBL,HIDDEN;4~SBL2,HIDDEN;5~BOOT;6~KENREl,RECOVER,misc;7~RECOVER
+# ;11~MODEM;20~efs;21~PARAM;22~FACTORY,SYSTEM;23~DBDATAFS,USERDATA;24~CACHE;80~BOOTLOADER;81~TZSW
+>>>0x08 ulelong x (0x%x)
+# filename
+>>>0x44 string >\0 "%-.64s"
+#>>>0x18 ulelong >0
+# blocksize in 512 byte units ?
+#>>>>0x18 ulelong x \b, %db
+# partition size in blocks ?
+#>>>>0x22 ulelong x \b*%d
+
+# Android sparse img format
+# From https://android.googlesource.com/\
+# platform/system/core/+/master/libsparse/sparse_format.h
+0 lelong 0xed26ff3a Android sparse image
+>4 leshort x \b, version: %d
+>6 leshort x \b.%d
+>16 lelong x \b, Total of %d
+>12 lelong x \b %d-byte output blocks in
+>20 lelong x \b %d input chunks.
+
+# Android binary XML magic
+# In include/androidfw/ResourceTypes.h:
+# RES_XML_TYPE = 0x0003 followed by the size of the header (ResXMLTree_header),
+# which is 8 bytes (2 bytes type + 2 bytes header size + 4 bytes size).
+0 lelong 0x00080003 Android binary XML
Modified: trunk/contrib/file/magic/Magdir/animation
===================================================================
--- trunk/contrib/file/magic/Magdir/animation 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/animation 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: animation,v 1.53 2014/04/30 21:41:02 christos Exp $
+# $File: animation,v 1.63 2017/05/26 14:33:07 christos Exp $
# animation: file(1) magic for animation/movie formats
#
# animation formats
@@ -32,53 +32,176 @@
!:mime application/x-quicktime-player
4 string/W jP JPEG 2000 image
!:mime image/jp2
+# http://www.ftyps.com/ with local additions
4 string ftyp ISO Media
->8 string isom \b, MPEG v4 system, version 1
-!:mime video/mp4
->8 string iso2 \b, MPEG v4 system, part 12 revision
->8 string mp41 \b, MPEG v4 system, version 1
-!:mime video/mp4
->8 string mp42 \b, MPEG v4 system, version 2
-!:mime video/mp4
->8 string mp7t \b, MPEG v4 system, MPEG v7 XML
->8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML
->8 string/W jp2 \b, JPEG 2000
-!:mime image/jp2
+# http://aeroquartet.com/wordpress/2016/03/05/3-xavc-s/
+>8 string XAVC \b, MPEG v4 system, Sony XAVC Codec
+>>96 string x \b, Audio "%.4s"
+>>118 beshort x at %dHz
+>>140 string x \b, Video "%.4s"
+>>168 beshort x %d
+>>170 beshort x \bx%d
+>8 string 3g2 \b, MPEG v4 system, 3GPP2
+!:mime video/3gpp2
+>>11 byte 4 \b v4 (H.263/AMR GSM 6.10)
+>>11 byte 5 \b v5 (H.263/AMR GSM 6.10)
+>>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10)
+# http://www.3gpp2.org/Public_html/Specs/C.S0050-B_v1.0_070521.pdf
+# Section 8.1.1, corresponds to a, b, c
+>>11 byte 0x61 \b C.S0050-0 V1.0
+>>11 byte 0x62 \b C.S0050-0-A V1.0.0
+>>11 byte 0x63 \b C.S0050-0-B V1.0
>8 string 3ge \b, MPEG v4 system, 3GPP
!:mime video/3gpp
+>>11 byte 6 \b, Release 6 MBMS Extended Presentations
+>>11 byte 7 \b, Release 7 MBMS Extended Presentations
>8 string 3gg \b, MPEG v4 system, 3GPP
+>11 byte 6 \b, Release 6 General Profile
!:mime video/3gpp
>8 string 3gp \b, MPEG v4 system, 3GPP
+>11 byte 1 \b, Release %d (non existent)
+>11 byte 2 \b, Release %d (non existent)
+>11 byte 3 \b, Release %d (non existent)
+>11 byte 4 \b, Release %d
+>11 byte 5 \b, Release %d
+>11 byte 6 \b, Release %d
+>11 byte 7 \b, Release %d Streaming Servers
!:mime video/3gpp
>8 string 3gs \b, MPEG v4 system, 3GPP
+>11 byte 7 \b, Release %d Streaming Servers
!:mime video/3gpp
->8 string 3g2 \b, MPEG v4 system, 3GPP2
+>8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC [ISO 14496-12:2005]
+!:mime video/mp4
+>8 string/W qt \b, Apple QuickTime movie
+!:mime video/quicktime
+>8 string CAEP \b, Canon Digital Camera
+>8 string caqv \b, Casio Digital Camera
+>8 string CDes \b, Convergent Design
+>8 string da0a \b, DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG
+>8 string da0b \b, DMB MAF, ext DA0A, with 3GPP timed text, DID, TVA, REL, IPMP
+>8 string da1a \b, DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images
+>8 string da1b \b, DMB MAF, ext da1a, with 3GPP timed text, DID, TVA, REL, IPMP
+>8 string da2a \b, DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG
+>8 string da2b \b, DMB MAF, ext da2a, with 3GPP timed text, DID, TVA, REL, IPMP
+>8 string da3a \b, DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images
+>8 string da3b \b, DMB MAF, ext da3a w/ BIFS, 3GPP, DID, TVA, REL, IPMP
+>8 string dash \b, MPEG v4 system, Dynamic Adaptive Streaming over HTTP
+!:mime video/mp4
+>8 string dmb1 \b, DMB MAF supporting all the components defined in the spec
+>8 string dmpf \b, Digital Media Project
+>8 string drc1 \b, Dirac (wavelet compression), encap in ISO base media (MP4)
+>8 string dv1a \b, DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG, TS
+>8 string dv1b \b, DMB MAF, ext dv1a, with 3GPP timed text, DID, TVA, REL, IPMP
+>8 string dv2a \b, DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG, TS
+>8 string dv2b \b, DMB MAF, ext dv2a, with 3GPP timed text, DID, TVA, REL, IPMP
+>8 string dv3a \b, DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG, TS
+>8 string dv3b \b, DMB MAF, ext dv3a, with 3GPP timed text, DID, TVA, REL, IPMP
+>8 string dvr1 \b, DVB (.DVB) over RTP
+!:mime video/vnd.dvb.file
+>8 string dvt1 \b, DVB (.DVB) over MPEG-2 Transport Stream
+!:mime video/vnd.dvb.file
+>8 string F4V \b, Video for Adobe Flash Player 9+ (.F4V)
+!:mime video/mp4
+>8 string F4P \b, Protected Video for Adobe Flash Player 9+ (.F4P)
+!:mime video/mp4
+>8 string F4A \b, Audio for Adobe Flash Player 9+ (.F4A)
+!:mime audio/mp4
+>8 string F4B \b, Audio Book for Adobe Flash Player 9+ (.F4B)
+!:mime audio/mp4
+>8 string isc2 \b, ISMACryp 2.0 Encrypted File
+# ?/enc-isoff-generic
+>8 string iso2 \b, MP4 Base Media v2 [ISO 14496-12:2005]
+!:mime video/mp4
+>8 string isom \b, MP4 Base Media v1 [IS0 14496-12:2003]
+!:mime video/mp4
+>8 string/W jp2 \b, JPEG 2000
+!:mime image/jp2
+>8 string JP2 \b, JPEG 2000 Image (.JP2) [ISO 15444-1 ?]
+!:mime image/jp2
+>8 string JP20 \b, Unknown, from GPAC samples (prob non-existent)
+>8 string jpm \b, JPEG 2000 Compound Image (.JPM) [ISO 15444-6]
+!:mime image/jpm
+>8 string jpx \b, JPEG 2000 w/ extensions (.JPX) [ISO 15444-2]
+!:mime image/jpx
+>8 string KDDI \b, 3GPP2 EZmovie for KDDI 3G cellphones
!:mime video/3gpp2
->>11 byte 4 \b v4 (H.263/AMR GSM 6.10)
->>11 byte 5 \b v5 (H.263/AMR GSM 6.10)
->>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10)
+>8 string M4A \b, Apple iTunes ALAC/AAC-LC (.M4A) Audio
+!:mime audio/x-m4a
+>8 string M4B \b, Apple iTunes ALAC/AAC-LC (.M4B) Audio Book
+!:mime audio/mp4
+>8 string M4P \b, Apple iTunes ALAC/AAC-LC (.M4P) AES Protected Audio
+!:mime video/mp4
+>8 string M4V \b, Apple iTunes Video (.M4V) Video
+!:mime video/x-m4v
+>8 string M4VH \b, Apple TV (.M4V)
+!:mime video/x-m4v
+>8 string M4VP \b, Apple iPhone (.M4V)
+!:mime video/x-m4v
+>8 string mj2s \b, Motion JPEG 2000 [ISO 15444-3] Simple Profile
+!:mime video/mj2
+>8 string mjp2 \b, Motion JPEG 2000 [ISO 15444-3] General Profile
+!:mime video/mj2
+>8 string mmp4 \b, MPEG-4/3GPP Mobile Profile (.MP4 / .3GP) (for NTT)
+!:mime video/mp4
+>8 string mobi \b, MPEG-4, MOBI format
+!:mime video/mp4
+>8 string mp21 \b, MPEG-21 [ISO/IEC 21000-9]
+>8 string mp41 \b, MP4 v1 [ISO 14496-1:ch13]
+!:mime video/mp4
+>8 string mp42 \b, MP4 v2 [ISO 14496-14]
+!:mime video/mp4
+>8 string mp71 \b, MP4 w/ MPEG-7 Metadata [per ISO 14496-12]
+>8 string mp7t \b, MPEG v4 system, MPEG v7 XML
+>8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML
>8 string mmp4 \b, MPEG v4 system, 3GPP Mobile
!:mime video/mp4
->8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC
-!:mime video/3gpp
->8 string/W M4A \b, MPEG v4 system, iTunes AAC-LC
+>8 string MPPI \b, Photo Player, MAF [ISO/IEC 23000-3]
+>8 string mqt \b, Sony / Mobile QuickTime (.MQV) US Pat 7,477,830
+!:mime video/quicktime
+>8 string MSNV \b, MPEG-4 (.MP4) for SonyPSP
!:mime audio/mp4
->8 string/W M4V \b, MPEG v4 system, iTunes AVC-LC
+>8 string NDAS \b, MP4 v2 [ISO 14496-14] Nero Digital AAC Audio
+!:mime audio/mp4
+>8 string NDSC \b, MPEG-4 (.MP4) Nero Cinema Profile
!:mime video/mp4
->8 string/W M4P \b, MPEG v4 system, iTunes AES encrypted
->8 string/W M4B \b, MPEG v4 system, iTunes bookmarked
->8 string/W qt \b, Apple QuickTime movie
+>8 string NDSH \b, MPEG-4 (.MP4) Nero HDTV Profile
+!:mime video/mp4
+>8 string NDSM \b, MPEG-4 (.MP4) Nero Mobile Profile
+!:mime video/mp4
+>8 string NDSP \b, MPEG-4 (.MP4) Nero Portable Profile
+!:mime video/mp4
+>8 string NDSS \b, MPEG-4 (.MP4) Nero Standard Profile
+!:mime video/mp4
+>8 string NDXC \b, H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile
+!:mime video/mp4
+>8 string NDXH \b, H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile
+!:mime video/mp4
+>8 string NDXM \b, H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile
+!:mime video/mp4
+>8 string NDXP \b, H.264/MPEG-4 AVC (.MP4) Nero Portable Profile
+!:mime video/mp4
+>8 string NDXS \b, H.264/MPEG-4 AVC (.MP4) Nero Standard Profile
+!:mime video/mp4
+>8 string odcf \b, OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A)
+>8 string opf2 \b, OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C)
+>8 string opx2 \b, OMA PDCF DRM + XBS ext (OMA-TS-DRM_XBS-V1_0-20070529-C)
+>8 string pana \b, Panasonic Digital Camera
+>8 string qt \b, Apple QuickTime (.MOV/QT)
!:mime video/quicktime
+>8 string ROSS \b, Ross Video
+>8 string sdv \b, SD Memory Card Video
+>8 string ssc1 \b, Samsung stereo, single stream (patent pending)
+>8 string ssc2 \b, Samsung stereo, dual stream (patent pending)
# MPEG sequences
# Scans for all common MPEG header start codes
-0 belong 0x00000001
+0 belong 0x00000001
>4 byte&0x1F 0x07 JVT NAL sequence, H.264 video
>>5 byte 66 \b, baseline
>>5 byte 77 \b, main
>>5 byte 88 \b, extended
>>7 byte x \b @ L %u
-0 belong&0xFFFFFF00 0x00000100
+0 belong&0xFFFFFF00 0x00000100
>3 byte 0xBA MPEG sequence
!:mime video/mpeg
>>4 byte &0x40 \b, v2, program multiplex
@@ -379,8 +502,8 @@
# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448
# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)
# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries
-#0 beshort&0xFFFE 0xFFFE
-#>2 ubyte&0xF0 >0x0F
+#0 beshort&0xFFFE 0xFFFE
+#>2 ubyte&0xF0 >0x0F
#>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1
## rate
#>>>2 byte&0xF0 0x10 \b, 32 kbps
@@ -452,9 +575,9 @@
# MP2, M2A
0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2
!:mime audio/mpeg
-# rate
+# rate
>2 byte&0xF0 0x10 \b, 8 kbps
->2 byte&0xF0 0x20 \b, 16 kbps
+>2 byte&0xF0 0x20 \b, 16 kbps
>2 byte&0xF0 0x30 \b, 24 kbps
>2 byte&0xF0 0x40 \b, 32 kbps
>2 byte&0xF0 0x50 \b, 40 kbps
@@ -522,7 +645,7 @@
# MP3, M25A
0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5
!:mime audio/mpeg
-# rate
+# rate
>2 byte&0xF0 0x10 \b, 8 kbps
>2 byte&0xF0 0x20 \b, 16 kbps
>2 byte&0xF0 0x30 \b, 24 kbps
@@ -741,10 +864,12 @@
# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd]
# From Michel Briand <michelbriand at free.fr>
-0 string/t \<?xml\ version="
-!:strength +1
->20 search/1000/cw \<!DOCTYPE\ X3D X3D (Extensible 3D) model xml text
-!:mime model/x3d
+# mimetype from https://www.iana.org/assignments/media-types/model/x3d+xml
+# Example http://www.web3d.org/x3d/content/examples/Basic/course/CreateX3DFromStringRandomSpheres.x3d
+0 string/w \<?xml\ version=
+!:strength + 5
+>20 search/1000/w \<!DOCTYPE\ X3D X3D (Extensible 3D) model xml text
+!:mime model/x3d+xml
#---------------------------------------------------------------------------
# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
@@ -894,3 +1019,11 @@
>4 lelong x %d x
>8 lelong x %d,
>12 lelong x %d frames
+
+# Material Exchange Format
+# More information:
+# https://en.wikipedia.org/wiki/Material_Exchange_Format
+# http://www.freemxf.org/
+0 string \x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02\x01\x01\x02 Material exchange container format
+!:ext mxf
+!:mime application/mxf
Modified: trunk/contrib/file/magic/Magdir/apple
===================================================================
--- trunk/contrib/file/magic/Magdir/apple 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/apple 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: apple,v 1.29 2014/04/30 21:41:02 christos Exp $
+# $File: apple,v 1.36 2017/03/17 21:35:28 christos Exp $
# apple: file(1) magic for Apple file formats
#
0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text
@@ -65,19 +65,49 @@
# Eric Fischer <enf at pobox.com>
# AppleWorks word processor:
-#
-# This matches the standard tab stops for an AppleWorks file, but if
-# a file has a tab stop set in the first four columns this will fail.
-#
+# URL: https://en.wikipedia.org/wiki/AppleWorks
+# Reference: http://www.gno.org/pub/apple2/doc/apple/filetypes/ftn.1a.xxxx
+# Update: Joerg Jenderek
+# NOTE:
# The "O" is really the magic number, but that's so common that it's
# necessary to check the tab stops that follow it to avoid false positives.
+# and/or look for unused bits of booleans bytes like zoom, paginated, mail merge
+# the newer AppleWorks is from claris with extension CWK
+4 string O
+# test for unused bits of zoom- , paginated-boolean bytes
+>84 ubequad ^0x00Fe00000000Fe00
+# look for tabstop definitions "=" no tab, "|" no tab
+# "<" left tab,"^" center tab,">" right tab, "." decimal tab,
+# unofficial "!" other , "\x8a" other
+# official only if SFMinVers is nonzero
+>>5 regex/s [=.<>|!^\x8a]{79} AppleWorks Word Processor
+# AppleWorks Word Processor File (Apple II)
+# ./apple (version 5.25) labeled the entry as "AppleWorks word processor data"
+# application/x-appleworks is mime type for claris version with cwk extension
+!:mime application/x-appleworks3
+# http://home.earthlink.net/~hughhood/appleiiworksenvoy/
+# ('p' + 1-byte ProDOS File Type + 2-byte ProDOS Aux Type')
+# $70 $1A $F8 $FF is this the apple type ?
+#:apple pdosp\xF8\xFF
+!:ext awp
+# minimum version needed to read this files. SFMinVers (0 , 30~3.0 )
+>>>183 ubyte 30 3.0
+>>>183 ubyte !30
+>>>>183 ubyte !0 0x%x
+# usual tabstop start sequence "=====<"
+>>>5 string x \b, tabstop ruler "%6.6s"
+# tabstop ruler
+#>>>5 string >\0 \b, tabstops "%-79s"
+# zoom switch
+>>>85 byte&0x01 >0 \b, zoomed
+# whether paginated
+>>>90 byte&0x01 >0 \b, paginated
+# contains any mail-merge commands
+>>>92 byte&0x01 >0 \b, with mail merge
+# left margin in 1/10 inches ( normally 0 or 10 )
+>>>91 ubyte >0
+>>>>91 ubyte x \b, %d/10 inch left margin
-4 string O==== AppleWorks word processor data
->85 byte&0x01 >0 \b, zoomed
->90 byte&0x01 >0 \b, paginated
->92 byte&0x01 >0 \b, with mail merge
-#>91 byte x \b, left margin %d
-
# AppleWorks database:
#
# This isn't really a magic number, but it's the closest thing to one
@@ -110,13 +140,13 @@
# GRR: this test is still too general as it catches also Gujin BOOT144.SYS (0xfa080000)
#0 belong&0xff00ff 0x80000 Applesoft BASIC program data
-0 belong&0x00ff00ff 0x00080000
+0 belong&0x00ff00ff 0x00080000
# assuming that line number must be positive
>2 leshort >0 Applesoft BASIC program data, first line number %d
#>2 leshort x \b, first line number %d
# ORCA/EZ assembler:
-#
+#
# This will not identify ORCA/M source files, since those have
# some sort of date code instead of the two zero bytes at 6 and 7
# XXX Conflicts with ELF
@@ -156,11 +186,11 @@
# From Johan Gade.
# These entries are disabled for now until we fix the following issues.
#
-# Note there might be some problems with the "VAX COFF executable"
-# entry. Note this entry should be placed before the mac filesystem section,
+# Note there might be some problems with the "VAX COFF executable"
+# entry. Note this entry should be placed before the mac filesystem section,
# particularly the "Apple Partition data" entry.
#
-# The intended meaning of these tests is, that the file is only of the
+# The intended meaning of these tests is, that the file is only of the
# specified type if both of the lines are correct - i.e. if the first
# line matches and the second doesn't then it is not of that type.
#
@@ -167,7 +197,7 @@
#0 long 0x7801730d
#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO)
#
-# Note that this entry is recognized correctly by the "Apple Partition
+# Note that this entry is recognized correctly by the "Apple Partition
# data" entry - however since this entry is more specific - this
# information seems to be more useful.
#0 long 0x45520200
@@ -255,48 +285,149 @@
# .vdi
4 string innotek\ VirtualBox\ Disk\ Image %s
-# Apple disk partition stuff, strengthen the magic using byte 4
+# Apple disk partition stuff
+# URL: https://en.wikipedia.org/wiki/Apple_Partition_Map
+# Reference: https://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/sys/bootblock.h
+# Update: Joerg Jenderek
+# "ER" is APPLE_DRVR_MAP_MAGIC signature
0 beshort 0x4552
->4 byte 0 Apple Driver Map
+# display Apple Driver Map (strength=50) after Syslinux bootloader (71)
+#!:strength +0
+# strengthen the magic by looking for used blocksizes 512 2048
+>2 ubeshort&0xf1FF 0 Apple Driver Map
+# last 6 bytes for padding found are 0 or end with 55AAh marker for MBR hybrid
+#>>504 ubequad&0x0000FFffFFff0000 0
+!:mime application/x-apple-diskimage
+!:apple ????devr
+# https://en.wikipedia.org/wiki/Apple_Disk_Image
+!:ext dmg/iso
+# sbBlkSize for driver descriptor map 512 2048
>>2 beshort x \b, blocksize %d
->>4 belong x \b, blockcount %d
->>10 beshort x \b, devtype %d
->>12 beshort x \b, devid %d
->>20 beshort x \b, descriptors %d
-# Assume 8 partitions each at a multiple of the sector size.
-# We could glean this from the partition descriptors, but they are empty!?!?
->>(2.S*1) indirect \b, contains[@0x%x]:
->>(2.S*2) indirect \b, contains[@0x%x]:
->>(2.S*3) indirect \b, contains[@0x%x]:
->>(2.S*4) indirect \b, contains[@0x%x]:
->>(2.S*5) indirect \b, contains[@0x%x]:
->>(2.S*6) indirect \b, contains[@0x%x]:
->>(2.S*7) indirect \b, contains[@0x%x]:
->>(2.S*8) indirect \b, contains[@0x%x]:
+# sbBlkCount sometimes garbish like
+# 0xb0200000 for unzlibed install_flash_player_19.0.0.245_osx.dmg
+# 0xf2720100 for bunziped Firefox 48.0-2.dmg
+# 0xeb02ffff for super_grub2_disk_hybrid_2.02s3.iso
+# 0x00009090 by syslinux-6.03/utils/isohybrid.c
+>>4 ubelong x \b, blockcount %u
+# following device/driver information not very useful
+# device type 0 1 (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso)
+>>8 ubeshort x \b, devtype %u
+# device id 0 1 (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso)
+>>10 ubeshort x \b, devid %u
+# driver data 0 (2425393296 garbage for super_grub2_disk_hybrid_2.02s3.iso)
+>>12 ubelong >0
+>>>12 ubelong x \b, driver data %u
+# number of driver descriptors sbDrvrCount <= 61
+# (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso)
+>>16 ubeshort x \b, driver count %u
+# 61 * apple_drvr_descriptor[8]. information not very useful or same as in partition map
+# >>18 use apple-driver-map
+# >>26 use apple-driver-map
+# # ...
+# >>500 use apple-driver-map
+# number of partitions is always same in every partition (map block count)
+#>>0x0204 ubelong x \b, %u partitions
+>>0x0204 ubelong >0 \b, contains[@0x200]:
+>>>0x0200 use apple-apm
+>>0x0204 ubelong >1 \b, contains[@0x400]:
+>>>0x0400 use apple-apm
+>>0x0204 ubelong >2 \b, contains[@0x600]:
+>>>0x0600 use apple-apm
+>>0x0204 ubelong >3 \b, contains[@0x800]:
+>>>0x0800 use apple-apm
+>>0x0204 ubelong >4 \b, contains[@0xA00]:
+>>>0x0A00 use apple-apm
+>>0x0204 ubelong >5 \b, contains[@0xC00]:
+>>>0x0C00 use apple-apm
+>>0x0204 ubelong >6 \b, contains[@0xE00]:
+>>>0x0E00 use apple-apm
+>>0x0204 ubelong >7 \b, contains[@0x1000]:
+>>>0x1000 use apple-apm
+# display apple driver descriptor map (start-block, # blocks in sbBlkSize sizes, type)
+0 name apple-driver-map
+>0 ubequad !0
+# descBlock first block of driver
+>>0 ubelong x \b, driver start block %u
+# descSize driver size in blocks
+>>4 ubeshort x \b, size %u
+# descType driver system type 1 701h F8FFh FFFFh
+>>6 ubeshort x \b, type 0x%x
-# Yes, the 3rd and 4th bytes are reserved, but we use them to make the
+# URL: https://en.wikipedia.org/wiki/Apple_Partition_Map
+# Reference: http://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-116/IOApplePartitionScheme.h
+# Update: Joerg Jenderek
+# Yes, the 3rd and 4th bytes pmSigPad are reserved, but we use them to make the
# magic stronger.
-0 belong 0x504d0000 Apple Partition Map
->4 belong x \b, map block count %d
->8 belong x \b, start block %d
->12 belong x \b, block count %d
->16 string >0 \b, name %s
->48 string >0 \b, type %s
->124 string >0 \b, processor %s
->140 string >0 \b, boot arguments %s
->92 belong & 1 \b, valid
->92 belong & 2 \b, allocated
->92 belong & 4 \b, in use
->92 belong & 8 \b, has boot info
->92 belong & 16 \b, readable
->92 belong & 32 \b, writable
->92 belong & 64 \b, pic boot code
->92 belong & 128 \b, chain compatible driver
->92 belong & 256 \b, real driver
->92 belong & 512 \b, chain driver
->92 belong & 1024 \b, mount at startup
->92 belong & 2048 \b, is the startup partition
+# for apple partition map stored as a single file
+0 belong 0x504d0000
+# to display Apple Partition Map (strength=70) after Syslinux bootloader (71)
+#!:strength +0
+>0 use apple-apm
+# magic/Magdir/apple14.test, 365: Warning: Current entry does not yet have a description for adding a EXTENSION type
+# file: could not find any valid magic files!
+#!:ext bin
+# display apple partition map. Normally called after Apple driver map
+0 name apple-apm
+>0 belong 0x504d0000 Apple Partition Map
+# number of partitions
+>>4 ubelong x \b, map block count %u
+# logical block (512 bytes) start of partition
+>>8 ubelong x \b, start block %u
+>>12 ubelong x \b, block count %u
+>>16 string >0 \b, name %s
+>>48 string >0 \b, type %s
+# processor type dpme_process_id[16] e.g. "68000" "68020"
+>>120 string >0 \b, processor %s
+# A/UX boot arguments BootArgs[128]
+>>136 string >0 \b, boot arguments %s
+# status of partition dpme_flags
+>>88 belong & 1 \b, valid
+>>88 belong & 2 \b, allocated
+>>88 belong & 4 \b, in use
+>>88 belong & 8 \b, has boot info
+>>88 belong & 16 \b, readable
+>>88 belong & 32 \b, writable
+>>88 belong & 64 \b, pic boot code
+>>88 belong & 128 \b, chain compatible driver
+>>88 belong & 256 \b, real driver
+>>88 belong & 512 \b, chain driver
+# mount automatically at startup APPLE_PS_AUTO_MOUNT
+>>88 ubelong &0x40000000 \b, mount at startup
+# is the startup partition APPLE_PS_STARTUP
+>>88 ubelong &0x80000000 \b, is the startup partition
-#http://wiki.mozilla.org/DS_Store_File_Format`
+#http://wiki.mozilla.org/DS_Store_File_Format
#http://en.wikipedia.org/wiki/.DS_Store
0 string \0\0\0\1Bud1\0 Apple Desktop Services Store
+
+# HFS/HFS+ Resource fork files (andrew.roazen at nau.edu Apr 13 2015)
+# Usually not in separate files, but have either filename rsrc with
+# no extension, or a filename corresponding to another file, with
+# extensions rsr/rsrc
+0 string \000\000\001\000
+>4 leshort 0
+>>16 lelong 0 Apple HFS/HFS+ resource fork
+
+#https://en.wikipedia.org/wiki/AppleScript
+0 string FasdUAS AppleScript compiled
+
+# AppleWorks/ClarisWorks
+# https://github.com/joshenders/appleworks_format
+# http://fileformats.archiveteam.org/wiki/AppleWorks
+0 name appleworks
+>0 belong&0x00ffffff 0x07e100 AppleWorks CWK Document
+>0 belong&0x00ffffff 0x008803 ClarisWorks CWK Document
+>0 default x
+>>0 belong x AppleWorks/ClarisWorks CWK Document
+>0 byte x \b, version %d
+>30 beshort x \b, %d
+>32 beshort x \bx%d
+!:ext cwk
+
+4 string BOBO
+>0 byte >4
+>>12 belong 0
+>>>26 belong 0
+>>>>0 use appleworks
+>0 belong 0x0481ad00
+>>0 use appleworks
Modified: trunk/contrib/file/magic/Magdir/archive
===================================================================
--- trunk/contrib/file/magic/Magdir/archive 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/archive 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: archive,v 1.87 2014/06/03 19:15:58 christos Exp $
+# $File: archive,v 1.108 2017/08/30 13:45:10 christos Exp $
# archive: file(1) magic for archive formats (see also "msdos" for self-
# extracting compressed archives)
#
@@ -246,7 +246,15 @@
# BA
# TODO: idarc says "bytes 0-2 == bytes 3-5"
# TTComp
-0 string \0\6 TTComp archive data
+# URL: http://fileformats.archiveteam.org/wiki/TTComp_archive
+# Update: Joerg Jenderek
+# GRR: line below is too general as it matches also Panorama database "TCDB 2003-10 demo.pan", others
+0 string \0\6
+# look for first keyword of Panorama database *.pan
+>12 search/261 DESIGN
+# skip keyword with low entropy
+>12 default x TTComp archive, binary, 4K dictionary
+# (version 5.25) labeled the above entry as "TTComp archive data"
# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
0 string ESP ESP archive data
# ZPack
@@ -434,16 +442,34 @@
# AIN
0 string \x33\x18 AIN archive data
0 string \x33\x17 AIN archive data
-# XPA32
-0 string xpa\0\1 XPA32 archive data
+# XPA32 test moved and merged with XPA by Joerg Jenderek at Sep 2015
# SZip (TODO: doesn't catch all versions)
0 string SZ\x0a\4 SZip archive data
# XPack DiskImage
-0 string jm XPack DiskImage archive data
+# *.XDI updated by Joerg Jenderek Sep 2015
+# ftp://ftp.sac.sk/pub/sac/pack/0index.txt
+# GRR: this test is still too general as it catches also text files starting with jm
+0 string jm
+# only found examples with this additional characteristic 2 bytes
+>2 string \x2\x4 Xpack DiskImage archive data
+#!:ext xdi
# XPack Data
-0 string xpa XPack archive data
+# *.xpa updated by Joerg Jenderek Sep 2015
+# ftp://ftp.elf.stuba.sk/pub/pc/pack/
+0 string xpa XPA
+!:ext xpa
+# XPA32
+# ftp://ftp.elf.stuba.sk/pub/pc/pack/xpa32.zip
+# created by XPA32.EXE version 1.0.2 for Windows
+>0 string xpa\0\1 \b32 archive data
+# created by XPACK.COM version 1.67m or 1.67r with short 0x1800
+>3 ubeshort !0x0001 \bck archive data
# XPack Single Data
-0 string \xc3\x8d\ jm XPack single archive data
+# changed by Joerg Jenderek Sep 2015 back to like in version 5.12
+# letter 'I'+ acute accent is equivalent to \xcd
+0 string \xcd\ jm Xpack single archive data
+#!:mime application/x-xpa-compressed
+!:ext xpa
# TODO: missing due to unknown magic/magic at end of file:
#DWC
@@ -526,56 +552,213 @@
>>0x36 string >\0 fstype %.8s
# LHARC/LHA archiver (Greg Roelofs, newt at uchicago.edu)
-2 string -lh0- LHarc 1.x/ARX archive data [lh0]
-!:mime application/x-lharc
-2 string -lh1- LHarc 1.x/ARX archive data [lh1]
-!:mime application/x-lharc
-2 string -lz4- LHarc 1.x archive data [lz4]
-!:mime application/x-lharc
-2 string -lz5- LHarc 1.x archive data [lz5]
-!:mime application/x-lharc
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
+# Reference: http://web.archive.org/web/20021005080911/http://www.osirusoft.com/joejared/lzhformat.html
+#
+# check and display information of lharc (LHa,PMarc) file
+0 name lharc-file
+# check 1st character of method id like -lz4- -lh5- or -pm2-
+>2 string -
+# check 5th character of method id
+>>6 string -
+# check header level 0 1 2 3
+>>>20 ubyte <4
+# check 2nd, 3th and 4th character of method id
+>>>>3 regex \^(lh[0-9a-ex]|lz[s2-8]|pm[012]|pc1) \b
+!:mime application/x-lzh-compressed
+# creator type "LHA "
+!:apple ????LHA
+# display archive type name like "LHa/LZS archive data" or "LArc archive"
+>>>>>2 string -lz \b
+!:ext lzs
+# already known -lzs- -lz4- -lz5- with old names
+>>>>>>2 string -lzs LHa/LZS archive data
+>>>>>>3 regex \^lz[45] LHarc 1.x archive data
+# missing -lz?- with wikipedia names
+>>>>>>3 regex \^lz[2378] LArc archive
+# display archive type name like "LHa (2.x) archive data"
+>>>>>2 string -lh \b
+# already known -lh0- -lh1- -lh2- -lh3- -lh4- -lh5- -lh6- -lh7- -lhd- variants with old names
+>>>>>>3 regex \^lh[01] LHarc 1.x/ARX archive data
+# LHice archiver use ".ICE" as name extension instead usual one ".lzh"
+# FOOBAR archiver use ".foo" as name extension instead usual one
+# "Florain Orjanov's and Olga Bachetska's ARchiver" not found at the moment
+>>>>>>>2 string -lh1 \b
+!:ext lha/lzh/ice
+>>>>>>3 regex \^lh[23d] LHa 2.x? archive data
+>>>>>>3 regex \^lh[7] LHa (2.x)/LHark archive data
+>>>>>>3 regex \^lh[456] LHa (2.x) archive data
+>>>>>>>2 string -lh5 \b
+# https://en.wikipedia.org/wiki/BIOS
+# Some mainboard BIOS like Award use LHa compression. So archives with unusal extension are found like
+# bios.rom , kd7_v14.bin, 1010.004, ...
+!:ext lha/lzh/rom/bin
+# missing -lh?- variants (Joe Jared)
+>>>>>>3 regex \^lh[89a-ce] LHa (Joe Jared) archive
+# UNLHA32 2.67a
+>>>>>>2 string -lhx LHa (UNLHA32) archive
+# lha archives with standard file name extensions ".lha" ".lzh"
+>>>>>>3 regex !\^(lh1|lh5) \b
+!:ext lha/lzh
+# this should not happen if all -lh variants are described
+>>>>>>2 default x LHa (unknown) archive
+#!:ext lha
+# PMarc
+>>>>>3 regex \^pm[012] PMarc archive data
+!:ext pma
+# append method id without leading and trailing minus character
+>>>>>3 string x [%3.3s]
+>>>>>>0 use lharc-header
+#
+# check and display information of lharc header
+0 name lharc-header
+# header size 0x4 , 0x1b-0x61
+>0 ubyte x
+# compressed data size != compressed file size
+#>7 ulelong x \b, data size %d
+# attribute: 0x2~?? 0x10~symlink|target 0x20~normal
+#>19 ubyte x \b, 19_0x%x
+# level identifier 0 1 2 3
+#>20 ubyte x \b, level %d
+# time stamp
+#>15 ubelong x DATE 0x%8.8x
+# OS ID for level 1
+>20 ubyte 1
+# 0x20 types find for *.rom files
+>>(21.b+24) ubyte <0x21 \b, 0x%x OS
+# ascii type like M for MSDOS
+>>(21.b+24) ubyte >0x20 \b, '%c' OS
+# OS ID for level 2
+>20 ubyte 2
+#>>23 ubyte x \b, OS ID 0x%x
+>>23 ubyte <0x21 \b, 0x%x OS
+>>23 ubyte >0x20 \b, '%c' OS
+# filename only for level 0 and 1
+>20 ubyte <2
+# length of filename
+>>21 ubyte >0 \b, with
+# filename
+>>>21 pstring x "%s"
+#
+#2 string -lh0- LHarc 1.x/ARX archive data [lh0]
+#!:mime application/x-lharc
+2 string -lh0-
+>0 use lharc-file
+#2 string -lh1- LHarc 1.x/ARX archive data [lh1]
+#!:mime application/x-lharc
+2 string -lh1-
+>0 use lharc-file
+# NEW -lz2- ... -lz8-
+2 string -lz2-
+>0 use lharc-file
+2 string -lz3-
+>0 use lharc-file
+2 string -lz4-
+>0 use lharc-file
+2 string -lz5-
+>0 use lharc-file
+2 string -lz7-
+>0 use lharc-file
+2 string -lz8-
+>0 use lharc-file
# [never seen any but the last; -lh4- reported in comp.compression:]
-2 string -lzs- LHa/LZS archive data [lzs]
-!:mime application/x-lha
-2 string -lh\40- LHa 2.x? archive data [lh ]
-!:mime application/x-lha
-2 string -lhd- LHa 2.x? archive data [lhd]
-!:mime application/x-lha
-2 string -lh2- LHa 2.x? archive data [lh2]
-!:mime application/x-lha
-2 string -lh3- LHa 2.x? archive data [lh3]
-!:mime application/x-lha
-2 string -lh4- LHa (2.x) archive data [lh4]
-!:mime application/x-lha
-2 string -lh5- LHa (2.x) archive data [lh5]
-!:mime application/x-lha
-2 string -lh6- LHa (2.x) archive data [lh6]
-!:mime application/x-lha
-2 string -lh7- LHa (2.x)/LHark archive data [lh7]
-!:mime application/x-lha
->20 byte x - header level %d
+#2 string -lzs- LHa/LZS archive data [lzs]
+2 string -lzs-
+>0 use lharc-file
+# According to wikipedia and others such a version does not exist
+#2 string -lh\40- LHa 2.x? archive data [lh ]
+#2 string -lhd- LHa 2.x? archive data [lhd]
+2 string -lhd-
+>0 use lharc-file
+#2 string -lh2- LHa 2.x? archive data [lh2]
+2 string -lh2-
+>0 use lharc-file
+#2 string -lh3- LHa 2.x? archive data [lh3]
+2 string -lh3-
+>0 use lharc-file
+#2 string -lh4- LHa (2.x) archive data [lh4]
+2 string -lh4-
+>0 use lharc-file
+#2 string -lh5- LHa (2.x) archive data [lh5]
+2 string -lh5-
+>0 use lharc-file
+#2 string -lh6- LHa (2.x) archive data [lh6]
+2 string -lh6-
+>0 use lharc-file
+#2 string -lh7- LHa (2.x)/LHark archive data [lh7]
+2 string -lh7-
+# !:mime application/x-lha
+# >20 byte x - header level %d
+>0 use lharc-file
+# NEW -lh8- ... -lhe- , -lhx-
+2 string -lh8-
+>0 use lharc-file
+2 string -lh9-
+>0 use lharc-file
+2 string -lha-
+>0 use lharc-file
+2 string -lhb-
+>0 use lharc-file
+2 string -lhc-
+>0 use lharc-file
+2 string -lhe-
+>0 use lharc-file
+2 string -lhx-
+>0 use lharc-file
# taken from idarc [JW]
2 string -lZ PUT archive data
-2 string -lz LZS archive data
+# already done by LHarc magics
+# this should never happen if all sub types of LZS archive are identified
+#2 string -lz LZS archive data
2 string -sw1- Swag archive data
-# RAR archiver (Greg Roelofs, newt at uchicago.edu)
-0 string Rar! RAR archive data,
+0 name rar-file-header
+>24 byte 15 \b, v1.5
+>24 byte 20 \b, v2.0
+>24 byte 29 \b, v4
+>15 byte 0 \b, os: MS-DOS
+>15 byte 1 \b, os: OS/2
+>15 byte 2 \b, os: Win32
+>15 byte 3 \b, os: Unix
+>15 byte 4 \b, os: Mac OS
+>15 byte 5 \b, os: BeOS
+
+0 name rar-archive-header
+>3 leshort&0x1ff >0 \b, flags:
+>>3 leshort &0x01 ArchiveVolume
+>>3 leshort &0x02 Commented
+>>3 leshort &0x04 Locked
+>>3 leshort &0x10 NewVolumeNaming
+>>3 leshort &0x08 Solid
+>>3 leshort &0x20 Authenticated
+>>3 leshort &0x40 RecoveryRecordPresent
+>>3 leshort &0x80 EncryptedBlockHeader
+>>3 leshort &0x100 FirstVolume
+
+# RAR (Roshal Archive) archive
+0 string Rar!\x1a\7\0 RAR archive data
!:mime application/x-rar
->44 byte x v%0x,
->10 byte >0 flags:
->>10 byte &0x01 Archive volume,
->>10 byte &0x02 Commented,
->>10 byte &0x04 Locked,
->>10 byte &0x08 Solid,
->>10 byte &0x20 Authenticated,
->35 byte 0 os: MS-DOS
->35 byte 1 os: OS/2
->35 byte 2 os: Win32
->35 byte 3 os: Unix
-# some old version? idarc says:
-0 string RE\x7e\x5e RAR archive data
+!:ext rar/cbr
+# file header
+>(0xc.l+9) byte 0x74
+>>(0xc.l+7) use rar-file-header
+# subblock seems to share information with file header
+>(0xc.l+9) byte 0x7a
+>>(0xc.l+7) use rar-file-header
+>9 byte 0x73
+>>7 use rar-archive-header
+0 string Rar!\x1a\7\1\0 RAR archive data, v5
+!:mime application/x-rar
+!:ext rar
+
+# Very old RAR archive
+# http://jasonblanks.com/wp-includes/images/papers/KnowyourarchiveRAR.pdf
+0 string RE\x7e\x5e RAR archive data (<v1.5)
+!:mime application/x-rar
+!:ext rar/cbr
+
# SQUISH archiver (Greg Roelofs, newt at uchicago.edu)
0 string SQSH squished archive data (Acorn RISCOS)
@@ -586,9 +769,12 @@
# PKZIP multi-volume archive
0 string PK\x07\x08PK\x03\x04 Zip multi-volume archive data, at least PKZIP v2.50 to extract
!:mime application/zip
+!:ext zip/cbz
# Zip archives (Greg Roelofs, c/o zip-bugs at wkuvx1.wku.edu)
0 string PK\005\006 Zip archive data (empty)
+!:mime application/zip
+!:ext zip/cbz
0 string PK\003\004
# Specialised zip formats which start with a member named 'mimetype'
@@ -705,6 +891,14 @@
>(26.s+30) leshort 0xcafe Java archive data (JAR)
!:mime application/java-archive
+# iOS App
+>(26.s+30) leshort !0xcafe
+>>26 string !\x8\0\0\0mimetype
+>>>30 string Payload/
+>>>>38 search/64 .app/ iOS App
+!:mime application/x-ios-app
+
+
# Generic zip archives (Greg Roelofs, c/o zip-bugs at wkuvx1.wku.edu)
# Next line excludes specialized formats:
>(26.s+30) leshort !0xcafe
@@ -714,7 +908,17 @@
>>>4 byte 0x0a \b, at least v1.0 to extract
>>>4 byte 0x0b \b, at least v1.1 to extract
>>>4 byte 0x14 \b, at least v2.0 to extract
->>>4 byte 0x2d \b, at least v3.0 to extract
+>>>4 byte 0x15 \b, at least v2.1 to extract
+>>>4 byte 0x19 \b, at least v2.5 to extract
+>>>4 byte 0x1b \b, at least v2.7 to extract
+>>>4 byte 0x2d \b, at least v4.5 to extract
+>>>4 byte 0x2e \b, at least v4.6 to extract
+>>>4 byte 0x32 \b, at least v5.0 to extract
+>>>4 byte 0x33 \b, at least v5.1 to extract
+>>>4 byte 0x34 \b, at least v5.2 to extract
+>>>4 byte 0x3d \b, at least v6.1 to extract
+>>>4 byte 0x3e \b, at least v6.2 to extract
+>>>4 byte 0x3f \b, at least v6.3 to extract
>>>0x161 string WINZIP \b, WinZIP self-extracting
# StarView Metafile
@@ -746,12 +950,24 @@
0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data
#
# PMA (CP/M derivative of LHA)
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
#
-2 string -pm0- PMarc archive data [pm0]
-2 string -pm1- PMarc archive data [pm1]
-2 string -pm2- PMarc archive data [pm2]
+#2 string -pm0- PMarc archive data [pm0]
+2 string -pm0-
+>0 use lharc-file
+#2 string -pm1- PMarc archive data [pm1]
+2 string -pm1-
+>0 use lharc-file
+#2 string -pm2- PMarc archive data [pm2]
+2 string -pm2-
+>0 use lharc-file
2 string -pms- PMarc SFX archive (CP/M, DOS)
+#!:mime application/x-foobar-exec
+!:ext com
5 string -pc1- PopCom compressed executable (CP/M)
+#!:mime application/x-
+#!:ext com
# From Rafael Laboissiere <rafael at laboissiere.net>
# The Project Revision Control System (see
@@ -784,6 +1000,9 @@
# Felix von Leitner <felix-file at fefe.de>
0 string d8:announce BitTorrent file
!:mime application/x-bittorrent
+# Durval Menezes, <jmgthbfile at durval dot com>
+0 string d13:announce-list BitTorrent file
+!:mime application/x-bittorrent
# Atari MSA archive - Teemu Hukkanen <tjhukkan at iki.fi>
0 beshort 0x0e0f Atari MSA archive data
@@ -871,11 +1090,6 @@
# From "Nelson A. de Oliveira" <naoliv at gmail.com>
0 string MPQ\032 MoPaQ (MPQ) archive
-# From: Dirk Jagdmann <doj at cubic.org>
-# xar archive format: http://code.google.com/p/xar/
-0 string xar! xar archive
->6 beshort x - version %d
-
# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
# .kgb
0 string KGB_arch KGB Archiver file
@@ -882,8 +1096,10 @@
>10 string x with compression level %.1s
# xar (eXtensible ARchiver) archive
+# xar archive format: http://code.google.com/p/xar/
# From: "David Remahl" <dremahl at apple.com>
0 string xar! xar archive
+!:mime application/x-xar
#>4 beshort x header size %d
>6 beshort x version %d,
#>8 quad x compressed TOC: %d,
@@ -911,6 +1127,9 @@
# ZPAQ: http://mattmahoney.net/dc/zpaq.html
0 string zPQ ZPAQ stream
>3 byte x \b, level %d
+# From: Barry Carter <carter.barry at gmail.com>
+# http://encode.ru/threads/456-zpaq-updates/page32
+0 string 7kSt ZPAQ file
# BBeB ebook, unencrypted (LRF format)
# URL: http://www.sven.de/librie/Librie/LrfFormat
@@ -936,12 +1155,12 @@
>3 ubyte 0 \b, no compression
>3 ubyte 2 \b, fast compression (Z1)
>3 ubyte 3 \b, medium compression (Z2)
->3 ubyte >3
+>3 ubyte >3
>>3 ubyte <11 \b, compression (Z%d-1)
->2 ubyte&0x08 0x00
+>2 ubyte&0x08 0x00
# ~ 30 byte password field only for *.gho
>>12 ubequad !0 \b, password protected
->>44 ubyte !1
+>>44 ubyte !1
# 1~Image All, sector-by-sector only for *.gho
>>>10 ubyte 1 \b, sector copy
# 1~Image Boot track only for *.gho
@@ -951,37 +1170,19 @@
# optional image description only *.gho
>>0xff string >\0 "%-.254s"
# look for DOS sector end sequence
->0xE08 search/7776 \x55\xAA
->>&-512 indirect x \b; contains
+>0xE08 search/7776 \x55\xAA
+>>&-512 indirect x \b; contains
-# Symantec GHOST image by Joerg Jenderek at May 2014
-# http://us.norton.com/ghost/
-# http://www.garykessler.net/library/file_sigs.html
-0 ubelong&0xFFFFf7f0 0xFEEF0100 Norton GHost image
-# *.GHO
->2 ubyte&0x08 0x00 \b, first file
-# *.GHS or *.[0-9] with cns program option
->2 ubyte&0x08 0x08 \b, split file
-# part of split index interesting for *.ghs
->>4 ubyte x id=0x%x
-# compression tag minus one equals numeric compression command line switch z[1-9]
->3 ubyte 0 \b, no compression
->3 ubyte 2 \b, fast compression (Z1)
->3 ubyte 3 \b, medium compression (Z2)
->3 ubyte >3
->>3 ubyte <11 \b, compression (Z%d-1)
->2 ubyte&0x08 0x00
-# ~ 30 byte password field only for *.gho
->>12 ubequad !0 \b, password protected
->>44 ubyte !1
-# 1~Image All, sector-by-sector only for *.gho
->>>10 ubyte 1 \b, sector copy
-# 1~Image Boot track only for *.gho
->>>43 ubyte 1 \b, boot track
-# 1~Image Disc only for *.gho implies Image Boot track and sector copy
->>44 ubyte 1 \b, disc sector copy
-# optional image description only *.gho
->>0xff string >\0 "%-.254s"
-# look for DOS sector end sequence
->0xE08 search/7776 \x55\xAA
->>&-512 indirect x \b; contains
+# Google Chrome extensions
+# https://developer.chrome.com/extensions/crx
+# https://developer.chrome.com/extensions/hosting
+0 string Cr24 Google Chrome extension
+!:mime application/x-chrome-extension
+>4 ulong x \b, version %u
+
+# SeqBox - Sequenced container
+# ext: sbx, seqbox
+# Marco Pontello marcopon at gmail.com
+# reference: https://github.com/MarcoPon/SeqBox
+0 string SBx SeqBox,
+>3 byte x version %d
Modified: trunk/contrib/file/magic/Magdir/att3b
===================================================================
--- trunk/contrib/file/magic/Magdir/att3b 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/att3b 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: att3b,v 1.9 2014/04/30 21:41:02 christos Exp $
+# $File: att3b,v 1.10 2017/03/17 21:35:28 christos Exp $
# att3b: file(1) magic for AT&T 3B machines
#
# The `versions' should be un-commented if they work for you.
@@ -36,6 +36,6 @@
#>18 beshort &00040000 and MAU hardware required
#>22 beshort >0 - version %d
#
-# core file for 3b2
+# core file for 3b2
0 string \000\004\036\212\200 3b2 core file
>364 string >\0 of '%s'
Modified: trunk/contrib/file/magic/Magdir/audio
===================================================================
--- trunk/contrib/file/magic/Magdir/audio 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/audio 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: audio,v 1.71 2014/05/14 23:30:28 christos Exp $
+# $File: audio,v 1.80 2017/08/13 00:21:47 christos Exp $
# audio: file(1) magic for sound formats (see also "iff")
#
# Jan Nicolai Langfeldt (janl at ifi.uio.no), Dan Quinlan (quinlan at yggdrasil.com),
@@ -300,7 +300,7 @@
>>5 byte &0x40 \b, extended header
>>5 byte &0x20 \b, experimental
>>5 byte &0x10 \b, footer present
->(6.I) indirect x \b, contains:
+>(6.I+10) indirect x \b, contains:
# NSF (NES sound file) magic
0 string NESM\x1a NES Sound File
@@ -313,6 +313,21 @@
>122 byte&0x1 =1 PAL
>122 byte&0x1 =0 NTSC
+# NSFE (Extended NES sound file) magic
+# http://slickproductions.org/docs/NSF/nsfespec.txt
+# From: David Pflug <david at pflug.email>
+0 string NSFE Extended NES Sound File
+>48 search/0x1000 auth
+>>&0 string >\0 ("%s"
+>>>&1 string >\0 by %s
+>>>>&1 string >\0 \b, copyright %s
+>>>>>&1 string >\0 \b, ripped by %s
+>20 byte x \b), %d tracks,
+>18 byte&0x2 =1 dual PAL/NTSC
+>18 byte&0x2 =0
+>>18 byte&0x1 =1 PAL
+>>18 byte&0x1 =0 NTSC
+
# Type: SNES SPC700 sound files
# From: Josh Triplett <josh at freedesktop.org>
0 string SNES-SPC700\ Sound\ File\ Data\ v SNES SPC700 sound file
@@ -454,6 +469,8 @@
>>20 byte&0xe 0xc \b, 7 channels
>>20 byte&0xe 0xe \b, 8 channels
# some common sample rates
+>>17 belong&0xfffff0 0x2ee000 \b, 192 kHz
+>>17 belong&0xfffff0 0x158880 \b, 88.2 kHz
>>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz
>>17 belong&0xfffff0 0x0bb800 \b, 48 kHz
>>17 belong&0xfffff0 0x07d000 \b, 32 kHz
@@ -570,7 +587,7 @@
0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music
# musepak support From: "Jiri Pejchal" <jiri.pejchal at gmail.com>
-0 string MP+ Musepack audio
+0 string MP+ Musepack audio (MP+)
!:mime audio/x-musepack
>3 byte 255 \b, SV pre8
>3 byte&0xF 0x6 \b, SV 6
@@ -604,6 +621,9 @@
>>27 byte 114 \b, Beta 1.14
>>27 byte 115 \b, Alpha 1.15
+0 string MPCK Musepack audio (MPCK)
+!:mime audio/x-musepack
+
# IMY
# from http://filext.com/detaillist.php?extdetail=IMY
# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm
@@ -640,7 +660,7 @@
# From Fabio R. Schmidlin <frs at pop.com.br>
# VGM music file
-0 string Vgm\
+0 string Vgm\040
>9 ubyte >0 VGM Video Game Music dump v
>>9 ubyte/16 >0 \b%d
>>9 ubyte&0x0F x \b%d
@@ -700,3 +720,93 @@
0 string ZBOT
>4 byte 0xc5 GVOX Encore music, version < 5.0
+# Summary: Garmin Voice Processing Module (WAVE audios)
+# From: Joerg Jenderek
+# URL: http://www.garmin.com/
+# Reference: http://turboccc.wikispaces.com/share/view/28622555
+# NOTE: there exist 2 other Garmin VPM formats
+0 string AUDIMG
+# skip text files starting with string "AUDIMG"
+>13 ubyte <13 Garmin Voice Processing Module
+!:mime audio/x-vpm-wav-garmin
+!:ext vpm
+# 3 bytes indicating the voice version (200,220)
+>>6 string x \b, version %3.3s
+# day of release (01-31)
+>>12 ubyte x \b, %.2d
+# month of release (01-12)
+>>13 ubyte x \b.%.2d
+# year of release (like 2006, 2007, 2008)
+>>14 uleshort x \b.%.4d
+# hour of release (0-23)
+>>11 ubyte x %.2d
+# minute of release (0-59)
+>>10 ubyte x \b:%.2d
+# second of release (0-59)
+>>9 ubyte x \b:%.2d
+# if you select a language like german on your garmin device
+# you can only select voice modules with corresponding language byte ID like 1
+>>18 ubyte x \b, language ID %d
+# pointer to 1st audio WAV sample
+>>16 uleshort >0
+>>>(16.s) ulelong >0 \b, at offset 0x%x
+# WAV length
+>>>>(16.s+4) ulelong >0 %d Bytes
+# look for magic
+>>>>>(&-8.l) string RIFF
+# determine type by ./riff
+>>>>>>&-4 indirect x \b
+# 2 - ~ 131 WAV samples following same way
+
+# From Martin Mueller Skarbiniks Pedersen
+0 string GDM
+>0x3 byte 0xFE General Digital Music.
+>0x4 string >\0 title: "%s"
+>0x24 string >\0 musician: "%s"
+>>0x44 beshort 0x0D0A
+>>>0x46 byte 0x1A
+>>>>0x47 string GMFS Version
+>>>>0x4B byte x %d.
+>>>>0x4C byte x \b%02d
+>>>>0x4D beshort 0x000 (2GDM v
+>>>>0x4F byte x \b%d.
+>>>>>0x50 byte x \b%d)
+
+0 string MTM Multitracker
+>0x3 byte/16 x Version %d.
+>0x3 byte&0x0F x \b%02d
+>>0x4 string >\0 title: "%s"
+
+0 string HVL
+>3 byte <2 Hively Tracker Song
+>3 byte 0 1 module data
+>3 byte 1 2 module data
+
+0 string MO3
+>3 ubyte <6 MOdule with MP3
+>>3 byte 0 Version 0 (With MP3 and lossless)
+>>3 byte 1 Version 1 (With ogg and lossless)
+>>3 byte 3 Version 2.2
+>>3 byte 4 (With no LAME header)
+>>3 byte 5 Version 2.4
+
+0 string ADRVPACK AProSys module
+
+# ftp://ftp.modland.com/pub/documents/format_documentation/\
+# Art%20Of%20Noise%20(.aon).txt
+0 string AON
+>4 string "ArtOfNoise by Bastian Spiegel(twice/lego)"
+>0x2e string NAME Art of Noise Tracker Song
+>3 string <9
+>3 string 4 (4 voices)
+>3 string 8 (8 voices)
+>>0x36 string >\0 Title: "%s"
+
+0 string FAR
+>0x2c byte 0x0d
+>0x2d byte 0x0a
+>0x2e byte 0x1a
+>>0x3 byte 0xFE Farandole Tracker Song
+>>>0x31 byte/16 x Version %d.
+>>>0x31 byte&0x0F x \b%02d
+>>>>0x4 string >\0 \b, title: "%s"
Modified: trunk/contrib/file/magic/Magdir/blackberry
===================================================================
--- trunk/contrib/file/magic/Magdir/blackberry 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/blackberry 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,8 +1,8 @@
#------------------------------------------------------------------------------
-# $File: blackberry,v 1.1 2014/01/31 01:51:32 christos Exp $
+# $File: blackberry,v 1.2 2017/03/17 21:35:28 christos Exp $
# blackberry: file(1) magic for BlackBerry file formats
#
-5 belong 0
+5 belong 0
>8 belong 010010010 BlackBerry RIM ETP file
>>22 string x \b for %s
Modified: trunk/contrib/file/magic/Magdir/blender
===================================================================
--- trunk/contrib/file/magic/Magdir/blender 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/blender 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,11 +1,11 @@
#------------------------------------------------------------------------------
-# $File: blender,v 1.5 2009/09/19 16:28:08 christos Exp $
+# $File: blender,v 1.7 2017/03/17 21:35:28 christos Exp $
# blender: file(1) magic for Blender 3D related files
#
-# Native format rule v1.2. For questions use the developers list
+# Native format rule v1.2. For questions use the developers list
# http://lists.blender.org/mailman/listinfo/bf-committers
-# GLOB chunk was moved near start and provides subversion info since 2.42
+# GLOB chunk was moved near start and provides subversion info since 2.42
0 string =BLENDER Blender3D,
>7 string =_ saved as 32-bits
@@ -35,5 +35,5 @@
>>>0x44 string =GLOB \b.
>>>>0x60 beshort x \b%.4d
-# Scripts that run in the embeded Python interpreter
+# Scripts that run in the embedded Python interpreter
0 string #!BPY Blender3D BPython script
Modified: trunk/contrib/file/magic/Magdir/c-lang
===================================================================
--- trunk/contrib/file/magic/Magdir/c-lang 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/c-lang 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,8 @@
#------------------------------------------------------------------------------
-# $File: c-lang,v 1.19 2014/06/03 19:17:27 christos Exp $
+# $File: c-lang,v 1.26 2017/08/14 07:40:38 christos Exp $
# c-lang: file(1) magic for C and related languages programs
#
+# The strength is to beat standard HTML
# BCPL
0 search/8192 "libhdr" BCPL source text
@@ -10,42 +11,72 @@
!:mime text/x-bcpl
# C
-0 regex \^#include C source text
+# Check for class if include is found, otherwise class is beaten by include becouse of lowered strength
+0 regex \^#include C
+>0 regex \^class[[:space:]]+
+>>&0 regex \\{[\.\*]\\}(;)?$ \b++
+>&0 clear x source text
+!:strength + 13
!:mime text/x-c
-0 regex \^char[\ \t\n]+ C source text
+0 regex \^#[[:space:]]*pragma C source text
!:mime text/x-c
-0 regex \^double[\ \t\n]+ C source text
+0 regex \^#[[:space:]]*(if\|ifn)def
+>&0 regex \^#[[:space:]]*endif$ C source text
!:mime text/x-c
-0 regex \^extern[\ \t\n]+ C source text
+0 regex \^#[[:space:]]*(if\|ifn)def
+>&0 regex \^#[[:space:]]*define C source text
!:mime text/x-c
-0 regex \^float[\ \t\n]+ C source text
+0 regex \^[[:space:]]*char(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text
!:mime text/x-c
-0 regex \^struct[\ \t\n]+ C source text
+0 regex \^[[:space:]]*double(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text
!:mime text/x-c
-0 regex \^union[\ \t\n]+ C source text
+0 regex \^[[:space:]]*extern[[:space:]]+ C source text
!:mime text/x-c
-0 search/8192 main( C source text
+0 regex \^[[:space:]]*float(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text
!:mime text/x-c
+0 regex \^struct[[:space:]]+ C source text
+!:mime text/x-c
+0 regex \^union[[:space:]]+ C source text
+!:mime text/x-c
+0 search/8192 main(
+>&0 regex \\)[[:space:]]*\\{ C source text
+!:mime text/x-c
# C++
# The strength of these rules is increased so they beat the C rules above
-0 regex \^template[\ \t\n]+ C++ source text
-!:strength + 5
+0 regex \^namespace[[:space:]]+[_[:alpha:]]{1,30}[[:space:]]*\\{ C++ source text
+!:strength + 30
!:mime text/x-c++
-0 regex \^virtual[\ \t\n]+ C++ source text
-!:strength + 5
+# using namespace [namespace] or using std::[lib]
+0 regex \^using[[:space:]]+(namespace\ )?std(::)?[[:alpha:]]*[[:space:]]*; C++ source text
+!:strength + 30
!:mime text/x-c++
-0 regex \^class[\ \t\n]+ C++ source text
-!:strength + 5
+0 regex \^[[:space:]]*template[[:space:]]*<.*>[[:space:]]*$ C++ source text
+!:strength + 30
!:mime text/x-c++
-0 regex \^public: C++ source text
-!:strength + 5
+0 regex \^[[:space:]]*virtual[[:space:]]+.*[};][[:space:]]*$ C++ source text
+!:strength + 30
!:mime text/x-c++
-0 regex \^private: C++ source text
-!:strength + 5
+# But class alone is reduced to avoid beating php (Jens Schleusener)
+0 regex \^[[:space:]]*class[[:space:]]+[[:digit:][:alpha:]:_]+[[:space:]]*\\{(.*[\n]*)*\\}(;)?$ C++ source text
+!:strength + 13
!:mime text/x-c++
+0 regex \^[[:space:]]*public: C++ source text
+!:strength + 30
+!:mime text/x-c++
+0 regex \^[[:space:]]*private: C++ source text
+!:strength + 30
+!:mime text/x-c++
+0 regex \^[[:space:]]*protected: C++ source text
+!:strength + 30
+!:mime text/x-c++
-# From: Mikhail Teterin <mi at aldan.algebra.com>
+# Objective-C
+0 regex \^#import Objective-C source text
+!:strength + 25
+!:mime text/x-objective-c
+
+# From: Mikhail Teterin <mi at aldan.algebra.com>
0 string cscope cscope reference data
>7 string x version %.2s
# We skip the path here, because it is often long (so file will
Modified: trunk/contrib/file/magic/Magdir/c64
===================================================================
--- trunk/contrib/file/magic/Magdir/c64 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/c64 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $
+# $File: c64,v 1.6 2015/08/24 05:17:42 christos Exp $
# c64: file(1) magic for various commodore 64 related files
#
# From: Dirk Jagdmann <doj at cubic.org>
@@ -41,3 +41,9 @@
>32 leshort x Version:0x%x
>36 leshort !0 Entries:%i
>40 string x Name:%.24s
+
+# Raw tape file format (.tap files)
+# Esa Hyyti <esa at netlab.tkk.fi>
+0 string C64-TAPE-RAW C64 Raw Tape File (.tap),
+>0x0c byte x Version:%u,
+>0x10 lelong x Length:%u cycles
Modified: trunk/contrib/file/magic/Magdir/cad
===================================================================
--- trunk/contrib/file/magic/Magdir/cad 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/cad 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: cad,v 1.13 2014/03/23 18:05:38 christos Exp $
+# $File: cad,v 1.15 2017/06/24 15:24:56 christos Exp $
# autocad: file(1) magic for cad files
#
@@ -9,7 +9,7 @@
# DGN is the default file extension of Microstation/Intergraph CAD files.
# CIT is the proprietary raster format (similar to TIFF) used to attach
# raster underlays to Microstation DGN (vector) drawings.
-#
+#
# http://www.wotsit.org/search.asp
# http://filext.com/detaillist.php?extdetail=DGN
# http://filext.com/detaillist.php?extdetail=CIT
@@ -42,7 +42,7 @@
>4 string \030\000\000 CITFile
>4 string \030\000\003 CITFile
-# AutoCAD
+# AutoCAD
# Merge of the different contributions and updates from http://en.wikipedia.org/wiki/Dwg
# and http://www.iana.org/assignments/media-types/image/vnd.dwg
0 string MC0.0 DWG AutoDesk AutoCAD Release 1.0
@@ -99,12 +99,12 @@
0 string AC1027 DWG AutoDesk AutoCAD 2013/2014
!:mime image/vnd.dwg
-# KOMPAS 2D drawing from ASCON
+# KOMPAS 2D drawing from ASCON
# This is KOMPAS 2D drawing or fragment of drawing but is not detailed nor
# gathered nor specification
# ASCON http://ascon.net/main/ in English,
# http://ascon.ru/ main site in Russian
-# Extension is CDW for drawing and FRW for fragment of drawing
+# Extension is CDW for drawing and FRW for fragment of drawing
# Sergey Zaykov (mail_of_sergey at mail.ru, sergey_zaikov at rambler.ru,
# ICQ 358572321, http://vkontakte.ru/id16076543)
# From:
@@ -111,30 +111,30 @@
# http://sd.ascon.ru/otrs/customer.pl?Action=CustomerFAQ&CategoryID=4&ItemID=292
# (in russian) and my experiments
0 string KF
->2 belong 0x4E00000C Kompas drawing 12.0 SP1
->2 belong 0x4D00000C Kompas drawing 12.0
->2 belong 0x3200000B Kompas drawing 11.0 SP1
->2 belong 0x3100000B Kompas drawing 11.0
->2 belong 0x2310000A Kompas drawing 10.0 SP1
->2 belong 0x2110000A Kompas drawing 10.0
->2 belong 0x08000009 Kompas drawing 9.0 SP1
->2 belong 0x05000009 Kompas drawing 9.0
->2 belong 0x33010008 Kompas drawing 8+
->2 belong 0x1A000008 Kompas drawing 8.0
->2 belong 0x2C010107 Kompas drawing 7+
->2 belong 0x05000007 Kompas drawing 7.0
->2 belong 0x32000006 Kompas drawing 6+
->2 belong 0x09000006 Kompas drawing 6.0
->2 belong 0x5C009005 Kompas drawing 5.11R03
->2 belong 0x54009005 Kompas drawing 5.11R02
->2 belong 0x51009005 Kompas drawing 5.11R01
->2 belong 0x22009005 Kompas drawing 5.10R03
->2 belong 0x22009005 Kompas drawing 5.10R02 mar
->2 belong 0x21009005 Kompas drawing 5.10R02 febr
->2 belong 0x19009005 Kompas drawing 5.10R01
->2 belong 0xF4008005 Kompas drawing 5.9R01.003
->2 belong 0x1C008005 Kompas drawing 5.9R01.002
->2 belong 0x11008005 Kompas drawing 5.8R01.003
+>2 belong 0x4E00000C Kompas drawing 12.0 SP1
+>2 belong 0x4D00000C Kompas drawing 12.0
+>2 belong 0x3200000B Kompas drawing 11.0 SP1
+>2 belong 0x3100000B Kompas drawing 11.0
+>2 belong 0x2310000A Kompas drawing 10.0 SP1
+>2 belong 0x2110000A Kompas drawing 10.0
+>2 belong 0x08000009 Kompas drawing 9.0 SP1
+>2 belong 0x05000009 Kompas drawing 9.0
+>2 belong 0x33010008 Kompas drawing 8+
+>2 belong 0x1A000008 Kompas drawing 8.0
+>2 belong 0x2C010107 Kompas drawing 7+
+>2 belong 0x05000007 Kompas drawing 7.0
+>2 belong 0x32000006 Kompas drawing 6+
+>2 belong 0x09000006 Kompas drawing 6.0
+>2 belong 0x5C009005 Kompas drawing 5.11R03
+>2 belong 0x54009005 Kompas drawing 5.11R02
+>2 belong 0x51009005 Kompas drawing 5.11R01
+>2 belong 0x22009005 Kompas drawing 5.10R03
+>2 belong 0x22009005 Kompas drawing 5.10R02 mar
+>2 belong 0x21009005 Kompas drawing 5.10R02 febr
+>2 belong 0x19009005 Kompas drawing 5.10R01
+>2 belong 0xF4008005 Kompas drawing 5.9R01.003
+>2 belong 0x1C008005 Kompas drawing 5.9R01.002
+>2 belong 0x11008005 Kompas drawing 5.8R01.003
# CAD: file(1) magic for computer aided design files
# Phillip Griffith <phillip dot griffith at gmail dot com>
@@ -147,8 +147,13 @@
>0x02 byte 0xfe
>>0x04 beshort 0x1800 CIT raster CAD
-# 3DS (3d Studio files) Conflicts with diff output 0x3d '='
-#16 beshort 0x3d3d image/x-3ds
+# 3DS (3d Studio files)
+0 leshort 0x4d4d
+>6 leshort 0x2
+>>8 lelong 0xa
+>>>16 leshort 0x3d3d 3D Studio model
+!:mime image/x-3ds
+!:extension 3ds
# MegaCAD 2D/3D drawing (.prt)
# http://megacad.de/
Modified: trunk/contrib/file/magic/Magdir/cafebabe
===================================================================
--- trunk/contrib/file/magic/Magdir/cafebabe 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/cafebabe 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: cafebabe,v 1.16 2014/04/30 21:41:02 christos Exp $
+# $File: cafebabe,v 1.23 2017/05/25 20:07:23 christos Exp $
# Cafe Babes unite!
#
# Since Java bytecode and Mach-O universal binaries have the same magic number,
@@ -7,8 +7,8 @@
# the test must be performed in the same "magic" sequence to get both right.
# The long at offset 4 in a Mach-O universal binary tells the number of
# architectures; the short at offset 4 in a Java bytecode file is the JVM minor
-# version and the short at offset 6 is the JVM major version. Since there are only
-# only 18 labeled Mach-O architectures at current, and the first released
+# version and the short at offset 6 is the JVM major version. Since there are only
+# only 18 labeled Mach-O architectures at current, and the first released
# Java class format was version 43.0, we can safely choose any number
# between 18 and 39 to test the number of architectures against
# (and use as a hack). Let's not use 18, because the Mach-O people
@@ -28,6 +28,8 @@
>>4 belong 0x0030 (Java 1.4)
>>4 belong 0x0031 (Java 1.5)
>>4 belong 0x0032 (Java 1.6)
+>>4 belong 0x0033 (Java 1.7)
+>>4 belong 0x0034 (Java 1.8)
0 belong 0xcafed00d JAR compressed with pack200,
>5 byte x version %d.
@@ -45,19 +47,26 @@
0 name mach-o \b [
>0 use mach-o-cpu \b
->&(8.L) indirect \b:
+>(8.L) indirect x \b:
>0 belong x \b]
0 belong 0xcafebabe
>4 belong 1 Mach-O universal binary with 1 architecture:
+!:mime application/x-mach-binary
>>8 use mach-o \b
>4 belong >1
>>4 belong <20 Mach-O universal binary with %d architectures:
+!:mime application/x-mach-binary
>>>8 use mach-o \b
+>>4 belong 2
>>>28 use mach-o \b
->>4 belong >2
+>>4 belong 3
>>>48 use mach-o \b
->>4 belong >3
+>>4 belong 4
>>>68 use mach-o \b
+>>4 belong 5
+>>>88 use mach-o \b
+>>4 belong 6
+>>>108 use mach-o \b
### MACH-O END ###
Modified: trunk/contrib/file/magic/Magdir/claris
===================================================================
--- trunk/contrib/file/magic/Magdir/claris 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/claris 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: claris,v 1.7 2014/06/03 19:17:27 christos Exp $
+# $File: claris,v 1.8 2016/07/18 19:23:38 christos Exp $
# claris: file(1) magic for claris
# "H. Nanosecond" <aldomel at ix.netcom.com>
# Claris Works a word processor, etc.
@@ -18,7 +18,8 @@
# Claris works files
# .cwk
-0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document
+# Moved to Apple AppleWorks document
+#0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document
# .plt
0 string \020\341\000\000\010\010 Claris Works palette files .plt
Modified: trunk/contrib/file/magic/Magdir/clipper
===================================================================
--- trunk/contrib/file/magic/Magdir/clipper 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/clipper 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: clipper,v 1.7 2014/04/30 21:41:02 christos Exp $
+# $File: clipper,v 1.8 2017/03/17 21:35:28 christos Exp $
# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
#
# XXX - what byte order does the Clipper use?
@@ -7,7 +7,7 @@
#
# XXX - what's the "!" stuff:
#
-# >18 short !074000,000000 C1 R1
+# >18 short !074000,000000 C1 R1
# >18 short !074000,004000 C2 R1
# >18 short !074000,010000 C3 R1
# >18 short !074000,074000 TEST
@@ -15,7 +15,7 @@
# I shall assume it's ANDing the field with the first value and
# comparing it with the second, and rewrite it as:
#
-# >18 short&074000 000000 C1 R1
+# >18 short&074000 000000 C1 R1
# >18 short&074000 004000 C2 R1
# >18 short&074000 010000 C3 R1
# >18 short&074000 074000 TEST
@@ -37,7 +37,7 @@
>12 long >0 not stripped
>22 short >0 - version %d
0 short 0577 CLIPPER COFF executable
->18 short&074000 000000 C1 R1
+>18 short&074000 000000 C1 R1
>18 short&074000 004000 C2 R1
>18 short&074000 010000 C3 R1
>18 short&074000 074000 TEST
Modified: trunk/contrib/file/magic/Magdir/commands
===================================================================
--- trunk/contrib/file/magic/Magdir/commands 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/commands 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: commands,v 1.50 2014/05/30 16:48:44 christos Exp $
+# $File: commands,v 1.59 2017/08/14 07:40:38 christos Exp $
# commands: file(1) magic for various shells and interpreters
#
#0 string/w : shell archive or script for antique kernel text
@@ -56,7 +56,7 @@
!:mime text/x-awk
0 string/wt #!\ /usr/bin/awk awk script text executable
!:mime text/x-awk
-0 regex/4096 =^\\s{0,100}BEGIN\\s{0,100}[{] awk script text
+0 regex/4096 =^[\040\t\f\r\n]{0,100}BEGIN[\040\t\f\r\n]{0,100}[{] awk or perl script text
# AT&T Bell Labs' Plan 9 shell
0 string/wt #!\ /bin/rc Plan 9 rc shell script text executable
@@ -78,11 +78,13 @@
!:mime text/x-shellscript
0 string/wb #!\ /usr/local/bin/bash Bourne-Again shell script executable (binary data)
!:mime text/x-shellscript
+0 string/wt #!\ /usr/bin/env\ bash Bourne-Again shell script text executable
+!:mime text/x-shellscript
# PHP scripts
# Ulf Harnhammar <ulfh at update.uu.se>
0 search/1/c =<?php PHP script text
-!:strength + 10
+!:strength + 30
!:mime text/x-php
0 search/1 =<?\n PHP script text
!:mime text/x-php
@@ -96,8 +98,10 @@
!:mime text/x-php
# Smarty compiled template, http://www.smarty.net/
# Elan Ruusamae <glen at delfi.ee>
-0 string =<?php\ /*\ Smarty\ version Smarty compiled template
->24 regex [0-9.]+ \b, version %s
+0 string =<?php
+>5 regex [\ \n]
+>>6 string /*\ Smarty\ version Smarty compiled template
+>>>24 regex [0-9.]+ \b, version %s
!:mime text/x-php
0 string Zend\x00 PHP script Zend Optimizer data
@@ -108,3 +112,7 @@
# URL: http://packages.debian.org/pdmenu
# From: Edward Betts <edward at debian.org>
0 string #!/usr/bin/pdmenu Pdmenu configuration file text
+
+# From Danny Weldon
+0 string \x0b\x13\x08\x00
+>0x04 uleshort <4 ksh byte-code version %d
Modified: trunk/contrib/file/magic/Magdir/compress
===================================================================
--- trunk/contrib/file/magic/Magdir/compress 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/compress 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: compress,v 1.58 2014/05/07 19:36:59 christos Exp $
+# $File: compress,v 1.68 2017/05/25 20:07:23 christos Exp $
# compress: file(1) magic for pure-compression formats (no archives)
#
# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
@@ -188,6 +188,7 @@
>6 byte x version %d
>7 byte x \b.%d
!:mime application/x-7z-compressed
+!:ext 7z/cb7
# Type: LZMA
0 lelong&0xffffff =0x5d
@@ -201,6 +202,7 @@
# http://tukaani.org/xz/xz-file-format.txt
0 ustring \xFD7zXZ\x00 XZ compressed data
+!:strength * 2
!:mime application/x-xz
# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt
@@ -218,6 +220,56 @@
0 lelong 0x184c2102 LZ4 compressed data (v0.1-v0.9)
!:mime application/x-lz4
+# Zstandard/LZ4 skippable frames
+# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
+0 lelong&0xFFFFFFF0 0x184D2A50
+>(4.l+8) indirect x
+
+# Zstandard Dictionary ID subroutine
+0 name zstd-dictionary-id
+# Single Segment = True
+>0 byte &0x20 \b, Dictionary ID:
+>>0 byte&0x03 0 None
+>>0 byte&0x03 1
+>>>1 byte x %u
+>>0 byte&0x03 2
+>>>1 leshort x %u
+>>0 byte&0x03 3
+>>>1 lelong x %u
+# Single Segment = False
+>0 byte ^0x20 \b, Dictionary ID:
+>>0 byte&0x03 0 None
+>>0 byte&0x03 1
+>>>2 byte x %u
+>>0 byte&0x03 2
+>>>2 leshort x %u
+>>0 byte&0x03 3
+>>>2 lelong x %u
+
+# Zstandard compressed data
+# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
+0 lelong 0xFD2FB522 Zstandard compressed data (v0.2)
+!:mime application/x-zstd
+0 lelong 0xFD2FB523 Zstandard compressed data (v0.3)
+!:mime application/x-zstd
+0 lelong 0xFD2FB524 Zstandard compressed data (v0.4)
+!:mime application/x-zstd
+0 lelong 0xFD2FB525 Zstandard compressed data (v0.5)
+!:mime application/x-zstd
+0 lelong 0xFD2FB526 Zstandard compressed data (v0.6)
+!:mime application/x-zstd
+0 lelong 0xFD2FB527 Zstandard compressed data (v0.7)
+!:mime application/x-zstd
+>4 use zstd-dictionary-id
+0 lelong 0xFD2FB528 Zstandard compressed data (v0.8+)
+!:mime application/x-zstd
+>4 use zstd-dictionary-id
+
+# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
+0 lelong 0xEC30A437 Zstandard dictionary
+!:mime application/x-zstd-dictionary
+>4 lelong x (ID %u)
+
# AFX compressed files (Wolfram Kleff)
2 string -afx- AFX compressed file data
@@ -251,3 +303,14 @@
# http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt
0 string \377\006\0\0sNaPpY snappy framed data
!:mime application/x-snappy-framed
+
+# qpress, http://www.quicklz.com/
+0 string qpress10 qpress compressed data
+!:mime application/x-qpress
+
+# Zlib https://www.ietf.org/rfc/rfc6713.txt
+0 string/b x
+>0 beshort%31 =0
+>>0 byte&0xf =8
+>>>0 byte&0x80 =0 zlib compressed data
+!:mime application/zlib
Modified: trunk/contrib/file/magic/Magdir/console
===================================================================
--- trunk/contrib/file/magic/Magdir/console 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/console 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,53 +1,159 @@
#------------------------------------------------------------------------------
-# $File: console,v 1.19 2013/02/06 14:18:52 christos Exp $
+# $File: console,v 1.32 2017/08/13 00:21:47 christos Exp $
# Console game magic
# Toby Deshane <hac at shoelace.digivill.net>
-# ines: file(1) magic for Marat's iNES Nintendo Entertainment System
-# ROM dump format
-0 string NES\032 iNES ROM dump,
->4 byte x %dx16k PRG
->5 byte x \b, %dx8k CHR
->6 byte&0x01 =0x1 \b, [Vert.]
->6 byte&0x01 =0x0 \b, [Horiz.]
->6 byte&0x02 =0x2 \b, [SRAM]
->6 byte&0x04 =0x4 \b, [Trainer]
->6 byte&0x04 =0x8 \b, [4-Scr]
+# ines: file(1) magic for Marat's iNES Nintendo Entertainment System ROM dump format
+# Updated by David Korth <gerbilsoft at gerbilsoft.com>
+# References:
+# - http://wiki.nesdev.com/w/index.php/INES
+# - http://wiki.nesdev.com/w/index.php/NES_2.0
+# Common header for iNES, NES 2.0, and Wii U iNES.
+0 name nes-rom-image-ines
+>7 byte&0x0C =0x8 (NES 2.0)
+>4 byte x \b: %ux16k PRG
+>5 byte x \b, %ux8k CHR
+>6 byte&0x08 =0x8 [4-Scr]
+>6 byte&0x09 =0x0 [H-mirror]
+>6 byte&0x09 =0x1 [V-mirror]
+>6 byte&0x02 =0x2 [SRAM]
+>6 byte&0x04 =0x4 [Trainer]
+>7 byte&0x03 =0x2 [PC10]
+>7 byte&0x03 =0x1 [VS]
+>>7 byte&0x0C =0x8
+# NES 2.0: VS PPU
+>>>13 byte&0x0F =0x0 \b, RP2C03B
+>>>13 byte&0x0F =0x1 \b, RP2C03G
+>>>13 byte&0x0F =0x2 \b, RP2C04-0001
+>>>13 byte&0x0F =0x3 \b, RP2C04-0002
+>>>13 byte&0x0F =0x4 \b, RP2C04-0003
+>>>13 byte&0x0F =0x5 \b, RP2C04-0004
+>>>13 byte&0x0F =0x6 \b, RP2C03B
+>>>13 byte&0x0F =0x7 \b, RP2C03C
+>>>13 byte&0x0F =0x8 \b, RP2C05-01
+>>>13 byte&0x0F =0x9 \b, RP2C05-02
+>>>13 byte&0x0F =0xA \b, RP2C05-03
+>>>13 byte&0x0F =0xB \b, RP2C05-04
+>>>13 byte&0x0F =0xC \b, RP2C05-05
+# TODO: VS protection hardware?
+>>7 byte x \b]
+# NES 2.0-specific flags.
+>7 byte&0x0C =0x8
+>>12 byte&0x03 =0x0 [NTSC]
+>>12 byte&0x03 =0x1 [PAL]
+>>12 byte&0x02 =0x2 [NTSC+PAL]
+
+# Standard iNES ROM header.
+0 string NES\x1A NES ROM image (iNES)
+>0 use nes-rom-image-ines
+
+# Wii U Virtual Console iNES ROM header.
+0 belong 0x4E455300 NES ROM image (Wii U Virtual Console)
+>0 use nes-rom-image-ines
+
#------------------------------------------------------------------------------
-# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
+# unif: file(1) magic for UNIF-format Nintendo Entertainment System ROM images
+# Reference: http://wiki.nesdev.com/w/index.php/UNIF
+# From: David Korth <gerbilsoft at gerbilsoft.com>
#
-0x104 belong 0xCEED6666 Gameboy ROM:
->0x134 string >\0 "%.16s"
->0x146 byte 0x03 \b,[SGB]
->0x147 byte 0x00 \b, [ROM ONLY]
->0x147 byte 0x01 \b, [ROM+MBC1]
->0x147 byte 0x02 \b, [ROM+MBC1+RAM]
->0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT]
->0x147 byte 0x05 \b, [ROM+MBC2]
->0x147 byte 0x06 \b, [ROM+MBC2+BATTERY]
->0x147 byte 0x08 \b, [ROM+RAM]
->0x147 byte 0x09 \b, [ROM+RAM+BATTERY]
->0x147 byte 0x0B \b, [ROM+MMM01]
->0x147 byte 0x0C \b, [ROM+MMM01+SRAM]
->0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT]
->0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT]
->0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT]
->0x147 byte 0x11 \b, [ROM+MBC3]
->0x147 byte 0x12 \b, [ROM+MBC3+RAM]
->0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT]
->0x147 byte 0x19 \b, [ROM+MBC5]
->0x147 byte 0x1A \b, [ROM+MBC5+RAM]
->0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT]
->0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE]
->0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM]
->0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT]
->0x147 byte 0x1F \b, [Pocket Camera]
->0x147 byte 0xFD \b, [Bandai TAMA5]
->0x147 byte 0xFE \b, [Hudson HuC-3]
->0x147 byte 0xFF \b, [Hudson HuC-1]
+# NOTE: The UNIF format uses chunks instead of a fixed header,
+# so most of the data isn't easily parseable.
+#
+0 string UNIF
+>4 lelong <16 NES ROM image (UNIF v%d format)
+#------------------------------------------------------------------------------
+# fds: file(1) magic for Famciom Disk System disk images
+# Reference: http://wiki.nesdev.com/w/index.php/Family_Computer_Disk_System#.FDS_format
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# TODO: Check "Disk info block" and get info from that in addition to the optional header.
+
+# Disk info block. (block 1)
+0 name nintendo-fds-disk-info-block
+>23 byte !1 FMC-
+>23 byte 1 FSC-
+>16 string x \b%.3s
+>15 byte x \b, mfr %02X
+>20 byte x (Rev.%02u)
+
+# Headered version.
+0 string FDS\x1A
+>0x11 string *NINTENDO-HVC* Famicom Disk System disk image:
+>>0x10 use nintendo-fds-disk-info-block
+>4 byte 1 (%u side)
+>4 byte !1 (%u sides)
+
+# Unheadered version.
+1 string *NINTENDO-HVC* Famicom Disk System disk image:
+>0 use nintendo-fds-disk-info-block
+
+#------------------------------------------------------------------------------
+# tnes: file(1) magic for TNES-format Nintendo Entertainment System ROM images
+# Used by Nintendo 3DS NES Virtual Console games.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+#
+0 string TNES NES ROM image (Nintendo 3DS Virtual Console)
+>4 byte 100 \b: FDS,
+>>0x2010 use nintendo-fds-disk-info-block
+>4 byte !100 \b: TNES mapper %u
+>>5 byte x \b, %ux8k PRG
+>>6 byte x \b, %ux8k CHR
+>>7 byte&0x08 =1 [WRAM]
+>>8 byte&0x09 =1 [H-mirror]
+>>8 byte&0x09 =2 [V-mirror]
+>>8 byte&0x02 =3 [VRAM]
+
+#------------------------------------------------------------------------------
+# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
+# Reference: http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
+#
+0x104 bequad 0xCEED6666CC0D000B Game Boy ROM image
+>0x143 byte&0x80 0x80
+>>0x134 string >\0 \b: "%.15s"
+>0x143 byte&0x80 !0x80
+>>0x134 string >\0 \b: "%.16s"
+>0x14c byte x (Rev.%02u)
+
+# Machine type. (SGB, CGB, SGB+CGB)
+>0x14b byte 0x33
+>>0x146 byte 0x03
+>>>0x143 byte&0x80 0x80 [SGB+CGB]
+>>>0x143 byte&0x80 !0x80 [SGB]
+>>0x146 byte !0x03
+>>>0x143 byte&0xC0 0x80 [CGB]
+>>>0x143 byte&0xC0 0xC0 [CGB ONLY]
+
+# Mapper.
+>0x147 byte 0x00 [ROM ONLY]
+>0x147 byte 0x01 [MBC1]
+>0x147 byte 0x02 [MBC1+RAM]
+>0x147 byte 0x03 [MBC1+RAM+BATT]
+>0x147 byte 0x05 [MBC2]
+>0x147 byte 0x06 [MBC2+BATTERY]
+>0x147 byte 0x08 [ROM+RAM]
+>0x147 byte 0x09 [ROM+RAM+BATTERY]
+>0x147 byte 0x0B [MMM01]
+>0x147 byte 0x0C [MMM01+SRAM]
+>0x147 byte 0x0D [MMM01+SRAM+BATT]
+>0x147 byte 0x0F [MBC3+TIMER+BATT]
+>0x147 byte 0x10 [MBC3+TIMER+RAM+BATT]
+>0x147 byte 0x11 [MBC3]
+>0x147 byte 0x12 [MBC3+RAM]
+>0x147 byte 0x13 [MBC3+RAM+BATT]
+>0x147 byte 0x19 [MBC5]
+>0x147 byte 0x1A [MBC5+RAM]
+>0x147 byte 0x1B [MBC5+RAM+BATT]
+>0x147 byte 0x1C [MBC5+RUMBLE]
+>0x147 byte 0x1D [MBC5+RUMBLE+SRAM]
+>0x147 byte 0x1E [MBC5+RUMBLE+SRAM+BATT]
+>0x147 byte 0xFC [Pocket Camera]
+>0x147 byte 0xFD [Bandai TAMA5]
+>0x147 byte 0xFE [Hudson HuC-3]
+>0x147 byte 0xFF [Hudson HuC-1]
+
+# ROM size.
>0x148 byte 0 \b, ROM: 256Kbit
>0x148 byte 1 \b, ROM: 512Kbit
>0x148 byte 2 \b, ROM: 1Mbit
@@ -55,59 +161,199 @@
>0x148 byte 4 \b, ROM: 4Mbit
>0x148 byte 5 \b, ROM: 8Mbit
>0x148 byte 6 \b, ROM: 16Mbit
+>0x148 byte 7 \b, ROM: 32Mbit
>0x148 byte 0x52 \b, ROM: 9Mbit
>0x148 byte 0x53 \b, ROM: 10Mbit
>0x148 byte 0x54 \b, ROM: 12Mbit
+# RAM size.
>0x149 byte 1 \b, RAM: 16Kbit
>0x149 byte 2 \b, RAM: 64Kbit
>0x149 byte 3 \b, RAM: 128Kbit
>0x149 byte 4 \b, RAM: 1Mbit
+>0x149 byte 5 \b, RAM: 512Kbit
-#>0x14e long x \b, CRC: %x
+#------------------------------------------------------------------------------
+# genesis: file(1) magic for various Sega Mega Drive / Genesis ROM image and disc formats
+# Updated by David Korth <gerbilsoft at gerbilsoft.com>
+# References:
+# - http://www.retrodev.com/segacd.html
+# - http://devster.monkeeh.com/sega/32xguide1.txt
+#
+# Common Sega Mega Drive header format.
+# FIXME: Name fields are 48 bytes, but have spaces for padding instead of 00s.
+0 name sega-mega-drive-header
+# ROM title. (Use domestic if present; if not, use international.)
+>0x120 byte >0x20
+>>0x120 string >\0 \b: "%.16s"
+>0x120 byte <0x21
+>>0x150 string >\0 \b: "%.16s"
+# Other information.
+>0x180 string >\0 (%.14s
+>>0x110 string >\0 \b, %.16s
+>0x180 byte 0
+>>0x110 string >\0 (%.16s
+>0 byte x \b)
+
+# TODO: Check for 32X CD?
+# Sega Mega CD disc images: 2048-byte sectors.
+0 string SEGADISCSYSTEM\ \ Sega Mega CD disc image
+>0 use sega-mega-drive-header
+>0 byte x \b, 2048-byte sectors
+0 string SEGABOOTDISC\ \ \ \ Sega Mega CD disc image
+>0 use sega-mega-drive-header
+>0 byte x \b, 2048-byte sectors
+# Sega Mega CD disc images: 2352-byte sectors.
+0x10 string SEGADISCSYSTEM\ \ Sega Mega CD disc image
+>0x10 use sega-mega-drive-header
+>0 byte x \b, 2352-byte sectors
+0x10 string SEGABOOTDISC\ \ \ \ Sega Mega CD disc image
+>0x10 use sega-mega-drive-header
+>0 byte x \b, 2352-byte sectors
+
+# Sega Mega Drive, 32X, Pico, and Mega CD Boot ROM images.
+0x100 string SEGA
+>0x3C0 bequad 0x4D41525320434845 Sega 32X ROM image
+>>0 use sega-mega-drive-header
+>0x3C0 bequad !0x4D41525320434845
+>>0x105 belong 0x5049434F Sega Pico ROM image
+>>>0 use sega-mega-drive-header
+>>0x105 belong !0x5049434F
+>>>0x180 beshort 0x4252 Sega Mega CD Boot ROM image
+>>>0x180 beshort !0x4252 Sega Mega Drive / Genesis ROM image
+>>>0 use sega-mega-drive-header
+
#------------------------------------------------------------------------------
-# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format
+# genesis: file(1) magic for the Super MegaDrive ROM dump format
#
-0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump
->0x120 string >\0 Name: "%.16s"
->0x110 string >\0 %.16s
->0x1B0 string RA with SRAM
+# NOTE: Due to interleaving, we can't display anything
+# other than the copier header information.
+0 name sega-genesis-smd-header
+>0 byte x %dx16k blocks
+>2 byte 0 \b, last in series or standalone
+>2 byte >0 \b, split ROM
+
+# "Sega Genesis" header.
+0x280 string EAGN
+>8 beshort 0xAABB Sega Mega Drive / Genesis ROM image (SMD format):
+>>0 use sega-genesis-smd-header
+
+# "Sega Mega Drive" header.
+0x280 string EAMG
+>8 beshort 0xAABB Sega Mega Drive / Genesis ROM image (SMD format):
+>>0 use sega-genesis-smd-header
+
#------------------------------------------------------------------------------
-# genesis: file(1) magic for the Super MegaDrive ROM dump format
+# smsgg: file(1) magic for Sega Master System and Game Gear ROM images
+# Detects all Game Gear and export Sega Master System ROM images,
+# and some Japanese Sega Master System ROM images.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://www.smspower.org/Development/ROMHeader
#
-0x280 string EAGN Super MagicDrive ROM dump
->0 byte x %dx16k blocks
->2 byte 0 \b, last in series or standalone
->2 byte >0 \b, split ROM
->8 byte 0xAA
->9 byte 0xBB
+# General SMS header rule.
+# The SMS boot ROM checks the header at three locations.
+0 name sega-master-system-rom-header
+# Machine type.
+>0x0F byte&0xF0 0x30 Sega Master System
+>0x0F byte&0xF0 0x40 Sega Master System
+>0x0F byte&0xF0 0x50 Sega Game Gear
+>0x0F byte&0xF0 0x60 Sega Game Gear
+>0x0F byte&0xF0 0x70 Sega Game Gear
+>0x0F byte&0xF0 <0x30 Sega Master System / Game Gear
+>0x0F byte&0xF0 >0x70 Sega Master System / Game Gear
+>0 byte x ROM image:
+# Product code.
+>0x0E byte&0xF0 0x10 1
+>0x0E byte&0xF0 0x20 2
+>0x0E byte&0xF0 0x30 3
+>0x0E byte&0xF0 0x40 4
+>0x0E byte&0xF0 0x50 5
+>0x0E byte&0xF0 0x60 6
+>0x0E byte&0xF0 0x70 7
+>0x0E byte&0xF0 0x80 8
+>0x0E byte&0xF0 0x90 9
+>0x0E byte&0xF0 0xA0 10
+>0x0E byte&0xF0 0xB0 11
+>0x0E byte&0xF0 0xC0 12
+>0x0E byte&0xF0 0xD0 13
+>0x0E byte&0xF0 0xE0 14
+>0x0E byte&0xF0 0xF0 15
+# If the product code is 5 digits, we'll need to backspace here.
+>0x0E byte&0xF0 !0
+>>0x0C leshort x \b%04x
+>0x0E byte&0xF0 0
+>>0x0C leshort x %04x
+# Revision.
+>0x0E byte&0x0F x (Rev.%02d)
+# ROM size. (Used for the boot ROM checksum routine.)
+>0x0F byte&0x0F 0x0A (8 KB)
+>0x0F byte&0x0F 0x0B (16 KB)
+>0x0F byte&0x0F 0x0C (32 KB)
+>0x0F byte&0x0F 0x0D (48 KB)
+>0x0F byte&0x0F 0x0E (64 KB)
+>0x0F byte&0x0F 0x0F (128 KB)
+>0x0F byte&0x0F 0x00 (256 KB)
+>0x0F byte&0x0F 0x01 (512 KB)
+>0x0F byte&0x0F 0x02 (1 MB)
+
+# SMS/GG header locations.
+0x7FF0 string TMR\ SEGA
+>0x7FF0 use sega-master-system-rom-header
+0x3FF0 string TMR\ SEGA
+>0x3FF0 use sega-master-system-rom-header
+0x1FF0 string TMR\ SEGA
+>0x1FF0 use sega-master-system-rom-header
+
#------------------------------------------------------------------------------
-# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format
+# saturn: file(1) magic for the Sega Saturn disc image format.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
#
-0x280 string EAMG Super MagicDrive ROM dump
->0 byte x %dx16k blocks
->2 byte x \b, last in series or standalone
->8 byte 0xAA
->9 byte 0xBB
+# Common Sega Saturn disc header format.
+# NOTE: Title is 112 bytes, but we're only showing 32 due to space padding.
+# TODO: Release date, device information, region code, others?
+0 name sega-saturn-disc-header
+>0x60 string >\0 \b: "%.32s"
+>0x20 string >\0 (%.10s
+>>0x2A string >\0 \b, %.6s)
+>>0x2A byte 0 \b)
+
+# 2048-byte sector version.
+0 string SEGA\ SEGASATURN\ Sega Saturn disc image
+>0 use sega-saturn-disc-header
+>0 byte x (2048-byte sectors)
+# 2352-byte sector version.
+0x10 string SEGA\ SEGASATURN\ Sega Saturn disc image
+>0x10 use sega-saturn-disc-header
+>0 byte x (2352-byte sectors)
+
#------------------------------------------------------------------------------
-# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps
+# dreamcast: file(1) magic for the Sega Dreamcast disc image format.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://mc.pp.se/dc/ip0000.bin.html
#
-# Does not detect all images. Very preliminary guesswork. Need more data
-# on format.
-#
-# FIXME: need a little more info...;P
-#
-#0 byte 0xF3
-#>1 byte 0xED Sega Master System/Game Gear ROM dump
-#>1 byte 0x31 Sega Master System/Game Gear ROM dump
-#>1 byte 0xDB Sega Master System/Game Gear ROM dump
-#>1 byte 0xAF Sega Master System/Game Gear ROM dump
-#>1 byte 0xC3 Sega Master System/Game Gear ROM dump
+# Common Sega Dreamcast disc header format.
+# NOTE: Title is 128 bytes, but we're only showing 32 due to space padding.
+# TODO: Release date, device information, region code, others?
+0 name sega-dreamcast-disc-header
+>0x80 string >\0 \b: "%.32s"
+>0x40 string >\0 (%.10s
+>>0x4A string >\0 \b, %.6s)
+>>0x4A byte 0 \b)
+
+# 2048-byte sector version.
+0 string SEGA\ SEGAKATANA\ Sega Dreamcast disc image
+>0 use sega-dreamcast-disc-header
+>0 byte x (2048-byte sectors)
+# 2352-byte sector version.
+0x10 string SEGA\ SEGAKATANA\ Sega Dreamcast disc image
+>0x10 use sega-dreamcast-disc-header
+>0 byte x (2352-byte sectors)
+
#------------------------------------------------------------------------------
# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format
#
@@ -115,27 +361,114 @@
0 string LCDi Dream Animator file
#------------------------------------------------------------------------------
-# v64: file(1) uncertain magic for the V64 format N64 ROM dumps
+# z64: file(1) magic for the Z64 format N64 ROM dumps
+# Reference: http://forum.pj64-emu.com/showthread.php?t=2239
+# From: David Korth <gerbilsoft at gerbilsoft.com>
#
-0 belong 0x37804012 V64 Nintendo 64 ROM dump
+0 bequad 0x803712400000000F Nintendo 64 ROM image
+>0x20 string >\0 \b: "%.20s"
+>0x3B string x (%.4s
+>0x3F byte x \b, Rev.%02u)
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-# Nintendo .nds
-192 string \044\377\256Qi\232 Nintendo DS Game ROM Image
-# Nintendo .gba
-0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image
+#------------------------------------------------------------------------------
+# v64: file(1) magic for the V64 format N64 ROM dumps
+# Same as z64 format, but with 16-bit byteswapping.
+#
+0 bequad 0x3780401200000F00 Nintendo 64 ROM image (V64)
#------------------------------------------------------------------------------
+# n64-swap2: file(1) magic for the swap2 format N64 ROM dumps
+# Same as z64 format, but with swapped 16-bit words.
+#
+0 bequad 0x12408037000F0000 Nintendo 64 ROM image (wordswapped)
+
+#------------------------------------------------------------------------------
+# n64-le32: file(1) magic for the 32-bit byteswapped format N64 ROM dumps
+# Same as z64 format, but with 32-bit byteswapping.
+#
+0 bequad 0x401237800F000000 Nintendo 64 ROM image (32-bit byteswapped)
+
+#------------------------------------------------------------------------------
+# gba: file(1) magic for the Nintendo Game Boy Advance raw ROM format
+# Reference: http://problemkaputt.de/gbatek.htm#gbacartridgeheader
+#
+# Original version from: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# Updated version from: David Korth <gerbilsoft at gerbilsoft.com>
+#
+4 bequad 0x24FFAE51699AA221 Game Boy Advance ROM image
+>0xA0 string >\0 \b: "%.12s"
+>0xAC string x (%.6s
+>0xBC byte x \b, Rev.%02u)
+
+#------------------------------------------------------------------------------
+# nds: file(1) magic for the Nintendo DS(i) raw ROM format
+# Reference: http://problemkaputt.de/gbatek.htm#dscartridgeheader
+#
+# Original version from: "Nelson A. de Oliveira" <naoliv at gmail.com>
+# Updated version from: David Korth <gerbilsoft at gerbilsoft.com>
+#
+0xC0 bequad 0x24FFAE51699AA221 Nintendo DS ROM image
+>0x00 string >\0 \b: "%.12s"
+>0x0C string x (%.6s
+>0x1E byte x \b, Rev.%02u)
+>0x12 byte 2 (DSi enhanced)
+>0x12 byte 3 (DSi only)
+# Secure Area check.
+>0x20 lelong <0x4000 (homebrew)
+>0x20 lelong >0x3FFF
+>>0x4000 lequad 0x0000000000000000 (multiboot)
+>>0x4000 lequad !0x0000000000000000
+>>>0x4000 lequad 0xE7FFDEFFE7FFDEFF (decrypted)
+>>>0x4000 lequad !0xE7FFDEFFE7FFDEFF
+>>>>0x1000 lequad 0x0000000000000000 (encrypted)
+>>>>0x1000 lequad !0x0000000000000000 (mask ROM)
+
+#------------------------------------------------------------------------------
+# nds_passme: file(1) magic for Nintendo DS ROM images for GBA cartridge boot.
+# This is also used for loading .nds files using the MSET exploit on 3DS.
+# Reference: https://github.com/devkitPro/ndstool/blob/master/source/ndscreate.cpp
+0xC0 bequad 0xC8604FE201708FE2 Nintendo DS Slot-2 ROM image (PassMe)
+
+#------------------------------------------------------------------------------
+# ngp: file(1) magic for the Neo Geo Pocket (Color) raw ROM format.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# References:
+# - https://neogpc.googlecode.com/svn-history/r10/trunk/src/core/neogpc.cpp
+# - http://www.devrs.com/ngp/files/ngpctech.txt
+#
+0x0A string BY\ SNK\ CORPORATION Neo Geo Pocket
+>0x23 byte 0x10 Color
+>0 byte x ROM image
+>0x24 string >\0 \b: "%.12s"
+>0x1F byte 0xFF (debug mode enabled)
+
+#------------------------------------------------------------------------------
# msx: file(1) magic for MSX game cartridge dumps
# Too simple - MPi
-#0 beshort 0x4142 MSX game cartridge dump
+#0 beshort 0x4142 MSX game cartridge dump
#------------------------------------------------------------------------------
# Sony Playstation executables (Adam Sjoegren <asjo at diku.dk>) :
0 string PS-X\ EXE Sony Playstation executable
+>16 lelong x PC=0x%08x,
+>20 lelong !0 GP=0x%08x,
+>24 lelong !0 .text=[0x%08x,
+>>28 lelong x \b0x%x],
+>32 lelong !0 .data=[0x%08x,
+>>36 lelong x \b0x%x],
+>40 lelong !0 .bss=[0x%08x,
+>>44 lelong x \b0x%x],
+>48 lelong !0 Stack=0x%08x,
+>48 lelong =0 No Stack!,
+>52 lelong !0 StackSize=0x%x,
+#>76 string >\0 (%s)
# Area:
>113 string x (%s)
+# CPE executables
+0 string CPE CPE executable
+>3 byte x (version %d)
+
#------------------------------------------------------------------------------
# Microsoft Xbox executables .xbe (Esa Hyytia <ehyytia at cc.hut.fi>)
0 string XBEH XBE, Microsoft Xbox executable
@@ -167,7 +500,7 @@
# Double-check that the image type matches too, 0x8008 conflicts with
# 8 character OMF-86 object file headers.
-0 beshort 0x8008
+0 beshort 0x8008
>6 string BS93 Lynx homebrew cartridge
>>2 beshort x \b, RAM start $%04x
>6 string LYNX Lynx cartridge
@@ -177,10 +510,24 @@
# From: Serge van den Boom <svdb at stack.nl>
0 string \x01ZZZZZ\x01 3DO "Opera" file system
-# From Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+# From: Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+# From: David Pflug <david at pflug.email>
+# is the offset 12 or the offset 16 correct?
+# GBS (Game Boy Sound) magic
+# ftp://ftp.modland.com/pub/documents/format_documentation/\
+# Gameboy%20Sound%20System%20(.gbs).txt
0 string GBS Nintendo Gameboy Music/Audio Data
-12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module
+#12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module
+>16 string >\0 ("%s" by
+>48 string >\0 %s, copyright
+>80 string >\0 %s),
+>3 byte x version %d,
+>4 byte x %d tracks
+# IPS Patch Files from: From: Thomas Klausner <tk at giga.or.at>
+# see http://zerosoft.zophar.net/ips.php
+0 string PATCH IPS patch file
+
# Playstations Patch Files from: From: Thomas Klausner <tk at giga.or.at>
0 string PPF30 Playstation Patch File version 3.0
>5 byte 0 \b, PPF 1.0 patch
@@ -208,7 +555,7 @@
# SNES9x .smv "movie" file format.
0 string SMV\x1A SNES9x input recording
>0x4 lelong x \b, version %d
-# version 4 is latest so far
+# version 4 is latest so far
>0x4 lelong <5
>>0x8 ledate x \b, recorded at %s
>>0xc lelong >0 \b, rerecorded %d times
@@ -262,3 +609,241 @@
# From: Sven Hartge <debian at ds9.argh.org>
0 string SCVM ScummVM savegame
>12 string >\0 "%s"
+
+#------------------------------------------------------------------------------
+# Nintendo GameCube / Wii file formats.
+#
+
+# Type: Nintendo GameCube/Wii common disc header data.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://wiibrew.org/wiki/Wii_Disc
+0 name nintendo-gcn-disc-common
+>0x20 string x "%.64s"
+>0x00 string x (%.6s
+>0x06 byte >0
+>>0x06 byte 1 \b, Disc 2
+>>0x06 byte 2 \b, Disc 3
+>>0x06 byte 3 \b, Disc 4
+>0x07 byte x \b, Rev.%02u)
+
+# Type: Nintendo GameCube disc image
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://wiibrew.org/wiki/Wii_Disc
+0x1C belong 0xC2339F3D Nintendo GameCube disc image:
+>0 use nintendo-gcn-disc-common
+
+# Type: Nintendo GameCube embedded disc image
+# Commonly found on demo discs.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://hitmen.c02.at/files/yagcd/yagcd/index.html#idx14.8
+0 belong 0xAE0F38A2
+>0x0C belong 0x00100000
+>>(8.L+0x1C) belong 0xC2339F3D Nintendo GameCube embedded disc image:
+>>>(8.L) use nintendo-gcn-disc-common
+
+# Type: Nintendo Wii disc image
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://wiibrew.org/wiki/Wii_Disc
+0x18 belong 0x5D1C9EA3 Nintendo Wii disc image:
+>0 use nintendo-gcn-disc-common
+
+# Type: Nintendo Wii disc image (WBFS format)
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://wiibrew.org/wiki/Wii_Disc
+0 string WBFS
+>0x218 belong 0x5D1C9EA3 Nintendo Wii disc image (WBFS format):
+>>0x200 use nintendo-gcn-disc-common
+
+# Type: Nintendo GameCube/Wii disc image (CISO format)
+# NOTE: This is NOT the same as Compact ISO or PSP CISO,
+# though it has the same magic number.
+0 string CISO
+# Other fields are used to determine what type of CISO this is:
+# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size)
+# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size)
+# - None of the above: Compact ISO.
+>4 lelong 0x200000
+>>8 byte 1
+>>>0x801C belong 0xC2339F3D Nintendo GameCube disc image (CISO format):
+>>>>0x8000 use nintendo-gcn-disc-common
+>>>0x8018 belong 0x5D1C9EA3 Nintendo Wii disc image (CISO format):
+>>>>0x8000 use nintendo-gcn-disc-common
+
+# Type: Nintendo GameCube/Wii disc image (GCZ format)
+# Due to zlib compression, we can't get the actual disc information.
+0 lelong 0xB10BC001
+>4 lelong 0 Nintendo GameCube disc image (GCZ format)
+>4 lelong 1 Nintendo Wii disc image (GCZ format)
+>4 lelong >1 Nintendo GameCube/Wii disc image (GCZ format)
+
+# Type: Nintendo GameCube/Wii disc image (WDF format)
+0 string WII\001DISC
+>8 belong 1
+# WDFv1
+>>0x54 belong 0xC2339F3D Nintendo GameCube disc image (WDFv1 format):
+>>>0x38 use nintendo-gcn-disc-common
+>>0x58 belong 0x5D1C9EA3 Nintendo Wii disc image (WDFv1 format):
+>>>0x38 use nintendo-gcn-disc-common
+>8 belong 2
+# WDFv2
+>>(12.L+0x1C) belong 0xC2339F3D Nintendo GameCube disc image (WDFv2 format):
+>>>(12.L) use nintendo-gcn-disc-common
+>>(12.L+0x18) belong 0x5D1C9EA3 Nintendo Wii disc image (WDFv2 format):
+>>>(12.L) use nintendo-gcn-disc-common
+
+# Type: Nintendo GameCube/Wii disc image (WIA format)
+0 string WIA\001 Nintendo
+>0x48 belong 0 GameCube/Wii
+>0x48 belong 1 GameCube
+>0x48 belong 2 Wii
+>0x48 belong >2 GameCube/Wii
+>0x48 belong x disc image (WIA format):
+>>0x58 use nintendo-gcn-disc-common
+
+#------------------------------------------------------------------------------
+# Nintendo 3DS file formats.
+#
+
+# Type: Nintendo 3DS "NCSD" image. (game cards and eMMC)
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: https://www.3dbrew.org/wiki/NCSD
+0x100 string NCSD
+>0x118 lequad 0 Nintendo 3DS Game Card image
+# NCCH header for partition 0. (game data)
+>>0x1150 string >\0 \b: "%.16s"
+>>0x312 byte x (Rev.%02u)
+>>0x118C byte 2 (New3DS only)
+>>0x18D byte 0 (inner device)
+>>0x18D byte 1 (Card1)
+>>0x18D byte 2 (Card2)
+>>0x18D byte 3 (extended device)
+>0x118 bequad 0x0102020202000000 Nintendo 3DS eMMC dump (Old3DS)
+>0x118 bequad 0x0102020203000000 Nintendo 3DS eMMC dump (New3DS)
+
+# Nintendo 3DS version code.
+# Reference: https://www.3dbrew.org/wiki/Titles
+# Format: leshort containing three fields:
+# - 6-bit: Major
+# - 6-bit: Minor
+# - 4-bit: Revision
+# NOTE: Only supporting major/minor versions from 0-15 right now.
+# NOTE: Should be prefixed with "v".
+0 name nintendo-3ds-version-code
+# Raw version.
+>0 leshort x \b%u,
+# Major version.
+>0 leshort&0xFC00 0x0000 0
+>0 leshort&0xFC00 0x0400 1
+>0 leshort&0xFC00 0x0800 2
+>0 leshort&0xFC00 0x0C00 3
+>0 leshort&0xFC00 0x1000 4
+>0 leshort&0xFC00 0x1400 5
+>0 leshort&0xFC00 0x1800 6
+>0 leshort&0xFC00 0x1C00 7
+>0 leshort&0xFC00 0x2000 8
+>0 leshort&0xFC00 0x2400 9
+>0 leshort&0xFC00 0x2800 10
+>0 leshort&0xFC00 0x2C00 11
+>0 leshort&0xFC00 0x3000 12
+>0 leshort&0xFC00 0x3400 13
+>0 leshort&0xFC00 0x3800 14
+>0 leshort&0xFC00 0x3C00 15
+# Minor version.
+>0 leshort&0x03F0 0x0000 \b.0
+>0 leshort&0x03F0 0x0010 \b.1
+>0 leshort&0x03F0 0x0020 \b.2
+>0 leshort&0x03F0 0x0030 \b.3
+>0 leshort&0x03F0 0x0040 \b.4
+>0 leshort&0x03F0 0x0050 \b.5
+>0 leshort&0x03F0 0x0060 \b.6
+>0 leshort&0x03F0 0x0070 \b.7
+>0 leshort&0x03F0 0x0080 \b.8
+>0 leshort&0x03F0 0x0090 \b.9
+>0 leshort&0x03F0 0x00A0 \b.10
+>0 leshort&0x03F0 0x00B0 \b.11
+>0 leshort&0x03F0 0x00C0 \b.12
+>0 leshort&0x03F0 0x00D0 \b.13
+>0 leshort&0x03F0 0x00E0 \b.14
+>0 leshort&0x03F0 0x00F0 \b.15
+# Revision.
+>0 leshort&0x000F x \b.%u
+
+# Type: Nintendo 3DS "NCCH" container.
+# https://www.3dbrew.org/wiki/NCCH
+0x100 string NCCH Nintendo 3DS
+>0x18D byte&2 0 File Archive (CFA)
+>0x18D byte&2 2 Executable Image (CXI)
+>0x150 string >\0 \b: "%.16s"
+>0x18D byte 0x05
+>>0x10E leshort x (Old3DS System Update v
+>>0x10E use nintendo-3ds-version-code
+>>0x10E leshort x \b)
+>0x18D byte 0x15
+>>0x10E leshort x (New3DS System Update v
+>>0x10E use nintendo-3ds-version-code
+>>0x10E leshort x \b)
+>0x18D byte !0x05
+>>0x18D byte !0x15
+>>>0x112 byte x (v
+>>>0x112 use nintendo-3ds-version-code
+>>>0x112 byte x \b)
+>0x18C byte 2 (New3DS only)
+
+# Type: Nintendo 3DS "SMDH" file. (application description)
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: https://3dbrew.org/wiki/SMDH
+0 string SMDH Nintendo 3DS SMDH file
+>0x208 leshort !0
+>>0x208 lestring16 x \b: "%.128s"
+>>0x388 leshort !0
+>>>0x388 lestring16 x by %.128s
+>0x208 leshort 0
+>>0x008 leshort !0
+>>>0x008 lestring16 x \b: "%.128s"
+>>>0x188 leshort !0
+>>>>0x188 lestring16 x by %.128s
+
+# Type: Nintendo 3DS Homebrew Application.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: https://3dbrew.org/wiki/3DSX_Format
+0 string 3DSX Nintendo 3DS Homebrew Application (3DSX)
+
+#------------------------------------------------------------------------------
+# a7800: file(1) magic for the Atari 7800 raw ROM format.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: https://sites.google.com/site/atari7800wiki/a78-header
+
+0 byte >0
+>0 byte <3
+>>1 string ATARI7800 Atari 7800 ROM image
+>>>0x11 string >\0 \b: "%.32s"
+# Display type.
+>>>0x39 byte 0 (NTSC)
+>>>0x39 byte 1 (PAL)
+>>>0x36 byte&1 1 (POKEY)
+
+#------------------------------------------------------------------------------
+# vectrex: file(1) magic for the GCE Vectrex raw ROM format.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: http://www.playvectrex.com/designit/chrissalo/hello1.htm
+#
+# NOTE: Title is terminated with 0x80, not 0.
+# The header is terminated with a 0, so that will
+# terminate the title as well.
+#
+0 string g\ GCE Vectrex ROM image
+>0x11 string >\0 \b: "%.16s"
+
+#------------------------------------------------------------------------------
+# amiibo: file(1) magic for Nintendo amiibo NFC dumps.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# Reference: https://www.3dbrew.org/wiki/Amiibo
+0x00 byte 0x04
+>0x0A beshort 0x0FE0
+>>0x0C belong 0xF110FFEE
+>>>0x208 beshort 0x0100
+>>>>0x020A byte 0x0F
+>>>>>0x020C bequad 0x000000045F000000
+>>>>>>0x5B byte 0x02
+>>>>>>>0x54 belong x Nintendo amiibo NFC dump - amiibo ID: %08X-
+>>>>>>>0x58 belong x \b%08X
Modified: trunk/contrib/file/magic/Magdir/cups
===================================================================
--- trunk/contrib/file/magic/Magdir/cups 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/cups 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: cups,v 1.3 2014/05/28 19:50:41 christos Exp $
+# $File: cups,v 1.5 2017/03/17 21:35:28 christos Exp $
# Cups: file(1) magic for the cups raster file format
# From: Laurent Martelli <martellilaurent at gmail.com>
# http://www.cups.org/documentation.php/spec-raster.html
@@ -39,16 +39,16 @@
>404 lelong 20 ColorSpace=AdobeRGB
# Cups Raster image format, Big Endian
-0 string RaS
+0 string RaS
>3 string t Cups Raster version 1, Big Endian
>3 string 2 Cups Raster version 2, Big Endian
>3 string 3 Cups Raster version 3, Big Endian
!:mime application/vnd.cups-raster
->0 use ^cups-le
+>0 use \^cups-le
# Cups Raster image format, Little Endian
-1 string SaR
+1 string SaR
>0 string t Cups Raster version 1, Little Endian
>0 string 2 Cups Raster version 2, Little Endian
>0 string 3 Cups Raster version 3, Little Endian
Modified: trunk/contrib/file/magic/Magdir/database
===================================================================
--- trunk/contrib/file/magic/Magdir/database 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/database 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: database,v 1.41 2014/06/03 19:17:27 christos Exp $
+# $File: database,v 1.52 2017/08/13 00:21:47 christos Exp $
# database: file(1) magic for various databases
#
# extracted from header/code files by Graeme Wilford (eep2gw at ee.surrey.ac.uk)
@@ -9,10 +9,18 @@
# GDBM magic numbers
# Will be maintained as part of the GDBM distribution in the future.
# <downsj at teeny.org>
-0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian
+0 belong 0x13579acd GNU dbm 1.x or ndbm database, big endian, 32-bit
!:mime application/x-gdbm
-0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian
+0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian, old
!:mime application/x-gdbm
+0 belong 0x13579acf GNU dbm 1.x or ndbm database, big endian, 64-bit
+!:mime application/x-gdbm
+0 lelong 0x13579acd GNU dbm 1.x or ndbm database, little endian, 32-bit
+!:mime application/x-gdbm
+0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian, old
+!:mime application/x-gdbm
+0 lelong 0x13579acf GNU dbm 1.x or ndbm database, little endian, 64-bit
+!:mime application/x-gdbm
0 string GDBM GNU dbm 2.x database
!:mime application/x-gdbm
#
@@ -76,7 +84,7 @@
# From Max Bowsher.
12 long 0x00040988 Berkeley DB
>16 long >0 (Log, version %d, native byte-order)
-12 belong 0x00040988 Berkeley DB
+12 belong 0x00040988 Berkeley DB
>16 belong >0 (Log, version %d, big-endian)
12 lelong 0x00040988 Berkeley DB
>16 lelong >0 (Log, version %d, little-endian)
@@ -95,7 +103,7 @@
>>>12 long !0 32bit aligned
>>>>12 bedouble 8.642135e+130 big-endian
>>>>>20 long 0 64bit long
->>>>>20 long !0 32bit long
+>>>>>20 long !0 32bit long
>>>>12 ledouble 8.642135e+130 little-endian
>>>>>24 long 0 64bit long
>>>>>24 long !0 32bit long (i386)
@@ -120,22 +128,22 @@
# XXX: Weak magic.
# Alex Ott <ott at jet.msk.su>
## Paradox file formats
-#2 leshort 0x0800 Paradox
-#>0x39 byte 3 v. 3.0
-#>0x39 byte 4 v. 3.5
-#>0x39 byte 9 v. 4.x
-#>0x39 byte 10 v. 5.x
-#>0x39 byte 11 v. 5.x
-#>0x39 byte 12 v. 7.x
-#>>0x04 byte 0 indexed .DB data file
-#>>0x04 byte 1 primary index .PX file
-#>>0x04 byte 2 non-indexed .DB data file
-#>>0x04 byte 3 non-incrementing secondary index .Xnn file
-#>>0x04 byte 4 secondary index .Ynn file
-#>>0x04 byte 5 incrementing secondary index .Xnn file
-#>>0x04 byte 6 non-incrementing secondary index .XGn file
-#>>0x04 byte 7 secondary index .YGn file
-#>>>0x04 byte 8 incrementing secondary index .XGn file
+#2 leshort 0x0800 Paradox
+#>0x39 byte 3 v. 3.0
+#>0x39 byte 4 v. 3.5
+#>0x39 byte 9 v. 4.x
+#>0x39 byte 10 v. 5.x
+#>0x39 byte 11 v. 5.x
+#>0x39 byte 12 v. 7.x
+#>>0x04 byte 0 indexed .DB data file
+#>>0x04 byte 1 primary index .PX file
+#>>0x04 byte 2 non-indexed .DB data file
+#>>0x04 byte 3 non-incrementing secondary index .Xnn file
+#>>0x04 byte 4 secondary index .Ynn file
+#>>0x04 byte 5 incrementing secondary index .Xnn file
+#>>0x04 byte 6 non-incrementing secondary index .XGn file
+#>>0x04 byte 7 secondary index .YGn file
+#>>>0x04 byte 8 incrementing secondary index .XGn file
## XBase database files
# updated by Joerg Jenderek at Feb 2013
@@ -143,33 +151,33 @@
# http://www.clicketyclick.dk/databases/xbase/format/dbf.html
# http://home.f1.htw-berlin.de/scheibl/db/intern/dBase.htm
# inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
-0 ubelong&0x0000FFFF <0x00000C20
+0 ubelong&0x0000FFFF <0x00000C20
# skip Infocom game Z-machine
->2 ubyte >0
+>2 ubyte >0
# skip Androids *.xml
->>3 ubyte >0
->>>3 ubyte <32
+>>3 ubyte >0
+>>>3 ubyte <32
# 1 < version VV
->>>>0 ubyte >1
+>>>>0 ubyte >1
# skip HELP.CA3 by test for reserved byte ( NULL )
->>>>>27 ubyte 0
+>>>>>27 ubyte 0
# reserved bytes not always 0 ; also found 0x3901 (T4.DBF) ,0x7101 (T5.DBF,T6.DBF)
#>>>>>30 ubeshort x 30NULL?%x
-# possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
->>>>>>24 ubelong&0xffFFFFff >0x01302000
+# possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
+>>>>>>24 ubelong&0xffFFFFff >0x01302000
# .DBF or .MDX
->>>>>>24 ubelong&0xffFFFFff <0x01302001
+>>>>>>24 ubelong&0xffFFFFff <0x01302001
# for Xbase Database file (*.DBF) reserved (NULL) for multi-user
->>>>>>>24 ubelong&0xffFFFFff =0
+>>>>>>>24 ubelong&0xffFFFFff =0
# test for 2 reserved NULL bytes,transaction and encryption byte flag
->>>>>>>>12 ubelong&0xFFFFfEfE 0
+>>>>>>>>12 ubelong&0xFFFFfEfE 0
# test for MDX flag
->>>>>>>>>28 ubyte x
->>>>>>>>>28 ubyte&0xf8 0
+>>>>>>>>>28 ubyte x
+>>>>>>>>>28 ubyte&0xf8 0
# header size >= 32
->>>>>>>>>>8 uleshort >31
+>>>>>>>>>>8 uleshort >31
# skip PIC15736.PCX by test for language driver name or field name
->>>>>>>>>>>32 ubyte >0
+>>>>>>>>>>>32 ubyte >0
#!:mime application/x-dbf; charset=unknown-8bit ??
#!:mime application/x-dbase
>>>>>>>>>>>>0 use xbase-type
@@ -194,45 +202,45 @@
>>>>>>>>>>>>28 ubyte&0x02 2 \b, with memo .FPT
>>>>>>>>>>>>28 ubyte&0x04 4 \b, DataBaseContainer
# 1st record offset + 1 = header size
->>>>>>>>>>>>8 uleshort >0
->>>>>>>>>>>>(8.s+1) ubyte >0
+>>>>>>>>>>>>8 uleshort >0
+>>>>>>>>>>>>(8.s+1) ubyte >0
>>>>>>>>>>>>>8 uleshort >0 \b, at offset %d
->>>>>>>>>>>>>(8.s+1) ubyte >0
+>>>>>>>>>>>>>(8.s+1) ubyte >0
>>>>>>>>>>>>>>&-1 string >\0 1st record "%s"
-# for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserverd (NULL)
->>>>>>>24 ubelong&0x0133f7ff >0
+# for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
+>>>>>>>24 ubelong&0x0133f7ff >0
# test for reserved NULL byte
->>>>>>>>47 ubyte x
+>>>>>>>>47 ubyte 0
# test for valid TAG key format (0x10 or 0)
->>>>>>>>>559 ubyte&0xeF 0
+>>>>>>>>>559 ubyte&0xeF 0
# test MM <= 12
->>>>>>>>>45 ubeshort <0x0C20
->>>>>>>>>>45 ubyte >0
->>>>>>>>>>>46 ubyte <32
->>>>>>>>>>>>46 ubyte >0
+>>>>>>>>>>45 ubeshort <0x0C20
+>>>>>>>>>>>45 ubyte >0
+>>>>>>>>>>>>46 ubyte <32
+>>>>>>>>>>>>>46 ubyte >0
#!:mime application/x-mdx
->>>>>>>>>>>>>0 use xbase-type
->>>>>>>>>>>>>0 ubyte x \b MDX
->>>>>>>>>>>>>1 ubyte x \b, creation-date
->>>>>>>>>>>>>1 use xbase-date
->>>>>>>>>>>>>44 ubyte x \b, update-date
->>>>>>>>>>>>>44 use xbase-date
+>>>>>>>>>>>>>>0 use xbase-type
+>>>>>>>>>>>>>>0 ubyte x \b MDX
+>>>>>>>>>>>>>>1 ubyte x \b, creation-date
+>>>>>>>>>>>>>>1 use xbase-date
+>>>>>>>>>>>>>>44 ubyte x \b, update-date
+>>>>>>>>>>>>>>44 use xbase-date
# No.of tags in use (1,2,5,12)
->>>>>>>>>>>>>28 uleshort x \b, %d
+>>>>>>>>>>>>>>28 uleshort x \b, %d
# No. of entries in tag (0x30)
->>>>>>>>>>>>>25 ubyte x \b/%d tags
+>>>>>>>>>>>>>>25 ubyte x \b/%d tags
# Length of tag
->>>>>>>>>>>>>26 ubyte x * %d
+>>>>>>>>>>>>>>26 ubyte x * %d
# 1st tag name_
>>>>>>>>>>>>>548 string x \b, 1st tag "%.11s"
# 2nd tag name
#>>>>>>>>>>>>(26.b+548) string x \b, 2nd tag "%.11s"
#
-# Print the xBase names of different version variants
+# Print the xBase names of different version variants
0 name xbase-type
->0 ubyte <2
+>0 ubyte <2
# 1 < version
->0 ubyte >1
+>0 ubyte >1
>>0 ubyte 0x02 FoxBase
# FoxBase+/dBaseIII+, no memo
>>0 ubyte 0x03 FoxBase+/dBase III
@@ -285,7 +293,7 @@
# dBASE IV with SQL table, with memo .DBT
>>0 ubyte 0xCB dBase IV with SQL table, with memo .DBT
!:mime application/x-dbf
-# HiPer-Six format;Clipper SIX, with SMT memo file
+# HiPer-Six format;Clipper SIX, with SMT memo file
>>0 ubyte 0xE5 Clipper SIX with memo
!:mime application/x-dbf
# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
@@ -310,12 +318,12 @@
# test and print the date of xBase .DBF .MDX
0 name xbase-date
# inspect YYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
->0 ubelong x
->1 ubyte <13
->>1 ubyte >0
->>>2 ubyte >0
->>>>2 ubyte <32
->>>>>0 ubyte x
+>0 ubelong x
+>1 ubyte <13
+>>1 ubyte >0
+>>>2 ubyte >0
+>>>>2 ubyte <32
+>>>>>0 ubyte x
# YY is interpreted as 20YY or 19YY
>>>>>>0 ubyte <100 \b %.2d
# YY is interpreted 1900+YY; TODO: display yy or 20yy instead 1YY
@@ -325,74 +333,122 @@
# dBase memo files .DBT or .FPT
# http://msdn.microsoft.com/en-us/library/8599s21w(v=vs.80).aspx
-16 ubyte <4
->16 ubyte !2
->>16 ubyte !1
+16 ubyte <4
+>16 ubyte !2
+>>16 ubyte !1
# next free block index is positive
->>>0 ulelong >0
+>>>0 ulelong >0
# skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size
->>>>17 ubelong&0xFFfdFE00 0x00000000
+>>>>17 ubelong&0xFFfdFE00 0x00000000
# skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h
->>>>>20 ubelong&0xFF01209B 0x00000000
+>>>>>20 ubelong&0xFF01209B 0x00000000
# dBASE III
->>>>>>16 ubyte 3
+>>>>>>16 ubyte 3
# dBASE III DBT
->>>>>>>0 use xbase-memo-print
-# dBASE IV DBT , FoxPro FPT or many PNG , ZIP , DBF garbage
->>>>>>16 ubyte 0
-# dBASE IV DBT with DBF name or DBF garbage
->>>>>>>8 ubelong >0x40000000
-# skip DBF and catch dBASE IV DBT with DBF name and with non big index of next free block
->>>>>>>>0 ulelong <0x01010002
->>>>>>>>>0 use xbase-memo-print
->>>>>>>8 ubelong 0
+>>>>>>>0 use dbase3-memo-print
+# dBASE III DBT without version, dBASE IV DBT , FoxPro FPT , or many ZIP , DBF garbage
+>>>>>>16 ubyte 0
+# unusual dBASE III DBT like angest.dbt, dBASE IV DBT with block size 0 , FoxPro FPT , or garbage PCX DBF
+>>>>>>>20 uleshort 0
+# FoxPro FPT , unusual dBASE III DBT like biblio.dbt or garbage
+>>>>>>>>8 ulong =0
+>>>>>>>>>6 ubeshort >0
+# skip emacs.PIF
+>>>>>>>>>>4 ushort 0
+>>>>>>>>>>>0 use foxpro-memo-print
+# dBASE III DBT , garbage
+>>>>>>>>>6 ubeshort 0
# skip MM*DD*.bin by test for for reserved NULL byte
->>>>>>>>508 ubelong 0
-# real memo files should contain text here
->>>>>>>>>520 ubelong >0x20202019
->>>>>>>>>>520 ubelong <0xFEFEFEFF
->>>>>>>>>>>0 use xbase-memo-print
-# garbage PCX , ZIP , JAR , XPI
->>>>>>>8 default x
+>>>>>>>>>>510 ubeshort 0
+# skip TK-DOS11.img image by looking for memo text
+>>>>>>>>>>>512 ubelong <0xfeffff03
+# skip EFI executables by looking for memo text
+>>>>>>>>>>>>512 ubelong >0x1F202020
+>>>>>>>>>>>>>513 ubyte >0
+# unusual dBASE III DBT like adressen.dbt
+>>>>>>>>>>>>>>0 use dbase3-memo-print
+# dBASE III DBT like angest.dbt, or garbage PCX DBF
+>>>>>>>>8 ubelong !0
+# skip PCX and some DBF by test for for reserved NULL bytes
+>>>>>>>>>510 ubeshort 0
+# skip some DBF by test of invalid version
+>>>>>>>>>>0 ubyte >5
+>>>>>>>>>>>0 ubyte <48
+>>>>>>>>>>>>0 use dbase3-memo-print
+# dBASE IV DBT with positive block size
+>>>>>>>20 uleshort >0
+# dBASE IV DBT with valid block length like 512, 1024
+# multiple of 2 in between 16 and 16 K ,implies upper and lower bits are zero
+>>>>>>>>20 uleshort&0x800f 0
+>>>>>>>>>0 use dbase4-memo-print
-# Print the information of dBase DBT or FoxPro FPT memo files
-0 name xbase-memo-print
->0 ubyte x
-# test version
-# memo file
->>16 ubyte 3 dBase III DBT
->>16 ubyte 0
->>>512 ubelong <0x00000003 FoxPro FPT
-# Size of blocks for FoxPro
->>>>6 ubeshort x \b, blocks size %u
-# Number of next available block for appending data for FoxPro
->>>>0 ubelong =0 \b, next free block index %u
->>>>0 ubelong !0 \b, next free block index %u
->>>512 default x dBase IV DBT
-# DBF file name without extension
->>>>8 string >\0 \b of %-.8s.DBF
-# size of blocks ; not reliable 0x2020204C
-#>>>>4 ulelong =0 \b, blocks size %u
->>>>4 ulelong !0 \b, blocks size %u
-# Block length found 0 , 512
-#>>>>20 uleshort =0 \b, block length %u
->>>>20 uleshort !0 \b, block length %u
+# Print the information of dBase III DBT memo file
+0 name dbase3-memo-print
+>0 ubyte x dBase III DBT
+# instead 3 as version number 0 for unusual examples like biblio.dbt
+>16 ubyte !3 \b, version number %u
# Number of next available block for appending data
->>>>0 ulelong =0 \b, next free block index %u
->>>>0 ulelong !0 \b, next free block index %u
->>512 ubelong x
->>>512 ubelong =0xFFFF0800
->>>>520 string >\0 \b, 1st used item "%s"
-# FoxPro
->>>512 ubelong <3
-# FoxPro memo
->>>>512 ubelong =1
->>>>520 string >\0 \b, 1st used item "%s"
->>>512 default x
-# may be deleted memo field
->>>>512 string >\0 \b, 1st item "%s"
+#>0 lelong =0 \b, next free block index %u
+>0 lelong !0 \b, next free block index %u
+# no positiv block length
+#>20 uleshort =0 \b, block length %u
+>20 uleshort !0 \b, block length %u
+# dBase III memo field terminated by \032\032
+>512 string >\0 \b, 1st item "%s"
+# Print the information of dBase IV DBT memo file
+0 name dbase4-memo-print
+>0 lelong x dBase IV DBT
+!:mime application/x-dbt
+!:ext dbt
+# 8 character shorted main name of coresponding dBASE IV DBF file
+>8 ubelong >0x20000000
+# skip unusual like for angest.dbt
+>>20 uleshort >0
+>>>8 string >\0 \b of %-.8s.DBF
+# value 0 implies 512 as size
+#>4 ulelong =0 \b, blocks size %u
+# size of blocks not reliable like 0x2020204C in angest.dbt
+>4 ulelong !0
+>>4 ulelong&0x0000003f 0 \b, blocks size %u
+# dBase IV DBT with positive block length (found 512 , 1024)
+>20 uleshort >0 \b, block length %u
+# next available block
+#>0 lelong =0 \b, next free block index %u
+>0 lelong !0 \b, next free block index %u
+>20 uleshort >0
+>>(20.s) ubelong x
+>>>&-4 use dbase4-memofield-print
+# unusual dBase IV DBT without block length (implies 512 as length)
+>20 uleshort =0
+>>512 ubelong x
+>>>&-4 use dbase4-memofield-print
+# Print the information of dBase IV memo field
+0 name dbase4-memofield-print
+# free dBase IV memo field
+>0 ubelong !0xFFFF0800
+>>0 lelong x \b, next free block %u
+>>4 lelong x \b, next used block %u
+# used dBase IV memo field
+>0 ubelong =0xFFFF0800
+# length of memo field
+>>4 lelong x \b, field length %d
+>>>8 string >\0 \b, 1st used item "%s"
+# Print the information of FoxPro FPT memo file
+0 name foxpro-memo-print
+>0 belong x FoxPro FPT
+# Size of blocks for FoxPro ( 64,256 )
+>6 ubeshort x \b, blocks size %u
+# next available block
+#>0 belong =0 \b, next free block index %u
+>0 belong !0 \b, next free block index %u
+# field type ( 0~picture, 1~memo, 2~object )
+>512 ubelong <3 \b, field type %u
+# length of memo field
+>512 ubelong 1
+>>516 belong >0 \b, field length %d
+>>>520 string >\0 \b, 1st item "%s"
-# TODO:
+# TODO:
# DBASE index file *.NDX
# DBASE Compound Index file *.CDX
# dBASE IV Printer Driver *.PRF
@@ -404,6 +460,52 @@
4 string Standard\ ACE\ DB Microsoft Access Database
!:mime application/x-msaccess
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/Extensible_Storage_Engine
+# Reference: https://github.com/libyal/libesedb/archive/master.zip
+# libesedb-master/documentation/
+# Extensible Storage Engine (ESE) Database File (EDB) format.asciidoc
+# Note: also known as "JET Blue". Used by numerous Windows components such as
+# Windows Search, Mail, Exchange and Active Directory.
+4 ubelong 0xefcdab89
+# unknown1
+>132 ubelong 0 Extensible storage engine
+!:mime application/x-ms-ese
+# file_type 0~database 1~stream
+>>12 ulelong 0 DataBase
+# Security DataBase (sdb)
+!:ext edb/sdb
+>>12 ulelong 1 STreaMing
+!:ext stm
+# format_version 620h
+>>8 uleshort x \b, version 0x%x
+>>10 uleshort >0 revision 0x%4.4x
+>>0 ubelong x \b, checksum 0x%8.8x
+# Page size 4096 8192 32768
+>>236 ulequad x \b, page size %lld
+# database_state
+>>52 ulelong 1 \b, JustCreated
+>>52 ulelong 2 \b, DirtyShutdown
+#>>52 ulelong 3 \b, CleanShutdown
+>>52 ulelong 4 \b, BeingConverted
+>>52 ulelong 5 \b, ForceDetach
+# Windows\xA0NT major version when the databases indexes were updated.
+>>216 ulelong x \b, Windows version %d
+# Windows\xA0NT minor version
+>>220 ulelong x \b.%d
+
+# From: Joerg Jenderek
+# URL: http://forensicswiki.org/wiki/Windows_Application_Compatibility
+# Note: files contain application compatibility fixes, application compatibility modes and application help messages.
+8 string sdbf
+>7 ubyte 0
+# TAG_TYPE_LIST+TAG_INDEXES
+>>12 uleshort 0x7802 Windows application compatibility Shim DataBase
+# version? 2 3
+#>>>0 ulelong x \b, version %d
+!:mime application/x-ms-sdb
+!:ext sdb
+
# TDB database from Samba et al - Martin Pool <mbp at samba.org>
0 string TDB\ file TDB database
>32 lelong 0x2601196D version 6, little-endian
@@ -482,9 +584,51 @@
# From: Stephane Blondon http://www.yaal.fr
# Database file for Zope (done by FileStorage)
-0 string FS21 Zope Object Database File Storage (data)
+0 string FS21 Zope Object Database File Storage v3 (data)
+0 string FS30 Zope Object Database File Storage v4 (data)
+
# Cache file for the database of Zope (done by ClientStorage)
0 string ZEC3 Zope Object Database Client Cache File (data)
# IDA (Interactive Disassembler) database
0 string IDA1 IDA (Interactive Disassembler) database
+
+# Hopper (reverse engineering tool) http://www.hopperapp.com/
+0 string hopperdb Hopper database
+
+# URL: https://en.wikipedia.org/wiki/Panorama_(database_engine)
+# Reference: http://www.provue.com/Panorama/
+# From: Joerg Jenderek
+# NOTE: test only versions 4 and 6.0 with Windows
+# length of Panorama database name
+5 ubyte >0
+# look after database name for "some" null bits
+>(5.B+7) ubelong&0xF3ffF000 0
+# look for first keyword
+>>&1 search/2 DESIGN Panorama database
+#!:mime application/x-panorama-database
+!:apple KASXZEPD
+!:ext pan
+# database name
+>>>5 pstring x \b, "%s"
+
+#
+#
+# askSam Database by Stefan A. Haubenthal <polluks at web.de>
+0 string askw40\0 askSam DB
+
+#
+#
+# MUIbase Database Tool by Stefan A. Haubenthal <polluks at web.de>
+0 string MBSTV\040 MUIbase DB
+>6 string x version %s
+
+#
+# CDB database
+0 string NBCDB\012 NetBSD Constant Database
+>7 byte x \b, version %d
+>8 string x \b, for '%s'
+>24 lelong x \b, datasize %d
+>28 lelong x \b, entries %d
+>32 lelong x \b, index %d
+>36 lelong x \b, seed %#x
Modified: trunk/contrib/file/magic/Magdir/diff
===================================================================
--- trunk/contrib/file/magic/Magdir/diff 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/diff 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,15 +1,15 @@
#------------------------------------------------------------------------------
-# $File: diff,v 1.14 2012/09/16 23:08:54 christos Exp $
+# $File: diff,v 1.16 2017/03/17 22:20:22 christos Exp $
# diff: file(1) magic for diff(1) output
#
-0 search/1 diff\ diff output text
+0 search/1 diff\040 diff output text
!:mime text/x-diff
-0 search/1 ***\ diff output text
+0 search/1 ***\040 diff output text
!:mime text/x-diff
-0 search/1 Only\ in\ diff output text
+0 search/1 Only\040in\040 diff output text
!:mime text/x-diff
-0 search/1 Common\ subdirectories:\ diff output text
+0 search/1 Common\040subdirectories:\040 diff output text
!:mime text/x-diff
0 search/1 Index: RCS/CVS diff output text
@@ -20,9 +20,9 @@
# unified diff
-0 search/4096 ---\
+0 search/4096 ---\040
>&0 search/1024 \n
->>&0 search/1 +++\
+>>&0 search/1 +++\040
>>>&0 search/1024 \n
>>>>&0 search/1 @@ unified diff output text
!:mime text/x-diff
Modified: trunk/contrib/file/magic/Magdir/dolby
===================================================================
--- trunk/contrib/file/magic/Magdir/dolby 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/dolby 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: dolby,v 1.7 2014/01/08 22:37:23 christos Exp $
+# $File: dolby,v 1.8 2017/03/17 21:35:28 christos Exp $
# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka at gmx.at>
# from http://www.atsc.org/standards/a_52a.pdf
# corrections, additions, etc. are always welcome!
@@ -23,7 +23,7 @@
>5 byte&0x07 = 0x04 \b, dialogue (D)
>5 byte&0x07 = 0x05 \b, commentary (C)
>5 byte&0x07 = 0x06 \b, emergency (E)
->5 beshort&0x07e0 0x0720 \b, voiceover (VO)
+>5 beshort&0x07e0 0x0720 \b, voiceover (VO)
>5 beshort&0x07e0 >0x0720 \b, karaoke
# acmod
>6 byte&0xe0 = 0x00 1+1 front,
Modified: trunk/contrib/file/magic/Magdir/dump
===================================================================
--- trunk/contrib/file/magic/Magdir/dump 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/dump 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: dump,v 1.13 2014/04/30 21:41:02 christos Exp $
+# $File: dump,v 1.16 2017/07/22 19:21:02 christos Exp $
# dump: file(1) magic for dump file format--for new and old dump filesystems
#
# We specify both byte orders in order to recognize byte-swapped dumps.
@@ -62,23 +62,25 @@
>824 string >\0 Host %s,
>888 belong >0 Flags %x
-24 belong 60012 new-fs dump file (big endian),
+24 belong 60012 new-fs dump file (big endian),
>0 use new-dump-be
-24 belong 60011 old-fs dump file (big endian),
+24 belong 60011 old-fs dump file (big endian),
>0 use old-dump-be
-24 lelong 60012 new-fs dump file (little endian),
+24 lelong 60012 new-fs dump file (little endian),
+# to correctly recognize '*.mo' GNU message catalog (little endian)
+!:strength - 15
>0 use \^new-dump-be
-24 lelong 60011 old-fs dump file (little endian),
+24 lelong 60011 old-fs dump file (little endian),
>0 use \^old-dump-be
-24 belong 0x19540119 new-fs dump file (ufs2, big endian),
+24 belong 0x19540119 new-fs dump file (ufs2, big endian),
>0 use ufs2-dump-be
-24 lelong 0x19540119 new-fs dump file (ufs2, little endian),
+24 lelong 0x19540119 new-fs dump file (ufs2, little endian),
>0 use \^ufs2-dump-be
18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness),
Modified: trunk/contrib/file/magic/Magdir/dyadic
===================================================================
--- trunk/contrib/file/magic/Magdir/dyadic 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/dyadic 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: dyadic,v 1.6 2014/06/01 19:14:42 christos Exp $
+# $File: dyadic,v 1.8 2017/03/17 21:35:28 christos Exp $
# Dyadic: file(1) magic for Dyalog APL.
#
# updated by Joerg Jenderek at Oct 2013
@@ -10,9 +10,9 @@
# .DIN Dyalog APL Input Table
# .DOT Dyalog APL Output Table
# .DFT Dyalog APL Format File
-0 ubeshort&0xFF60 0xaa00
+0 ubeshort&0xFF60 0xaa00
# skip biblio.dbt
->1 byte !4
+>1 byte !4
# real Dyalog APL have non zero version numbers like 7.3 or 13.4
>>2 ubeshort >0x0000 Dyalog APL
>>>1 byte 0x00 aplcore
@@ -46,6 +46,11 @@
>>>1 byte 0x12 component file 64-bit level 3 journaled checksummed
>>>1 byte 0x13 component file 32-bit non-journaled checksummed
>>>1 byte 0x14 component file 64-bit non-journaled checksummed
+>>>1 byte 0x15 component file under construction
+>>>1 byte 0x16 DFS component file 64-bit level 1 journaled checksummed
+>>>1 byte 0x17 DFS component file 64-bit level 2 journaled checksummed
+>>>1 byte 0x18 DFS component file 64-bit level 3 journaled checksummed
+>>>1 byte 0x19 external workspace
>>>1 byte 0x80 DDB
>>>2 byte x version %d
>>>3 byte x \b.%d
Modified: trunk/contrib/file/magic/Magdir/editors
===================================================================
--- trunk/contrib/file/magic/Magdir/editors 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/editors 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: editors,v 1.8 2009/09/19 16:28:09 christos Exp $
-# T602 editor documents
+# $File: editors,v 1.11 2017/03/17 21:35:28 christos Exp $
+# T602 editor documents
# by David Necas <yeti at physics.muni.cz>
0 string @CT\ T602 document data,
>4 string 0 Kamenicky
@@ -9,10 +9,31 @@
>4 string 2 KOI8-CS
>4 string >2 unknown encoding
-# Vi IMproved Encrypted file
+# Vi IMproved Encrypted file
# by David Necas <yeti at physics.muni.cz>
0 string VimCrypt~ Vim encrypted file data
+
+0 name vimnanoswap
+>67 byte 0
+>>107 byte 0
+#>>>2 string x %s swap file
+>>>24 ulelong x \b, pid %d
+>>>28 string >\0 \b, user %s
+>>>68 string >\0 \b, host %s
+>>>108 string >\0 \b, file %s
+>>>1007 byte 0x55 \b, modified
+
# Vi IMproved Swap file
# by Sven Wegener <swegener at gentoo.org>
-0 string b0VIM\ Vim swap file
->&0 string >\0 \b, version %s
+0 string b0VIM\ Vim swap file
+>&0 string >\0 \b, version %s
+>0 use vimnanoswap
+
+
+# Lock/swap file for several editors, at least
+# Vi IMproved and nano
+0 string b0nano Nano swap file
+>0 use vimnanoswap
+
+# kate (K Advanced Text Editor)
+0 string \x00\x00\x00\x12Kate\ Swap\ File\ 2.0\x00 Kate swap file
Modified: trunk/contrib/file/magic/Magdir/elf
===================================================================
--- trunk/contrib/file/magic/Magdir/elf 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/elf 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: elf,v 1.67 2014/06/12 13:52:48 christos Exp $
+# $File: elf,v 1.70 2016/06/02 12:36:30 christos Exp $
# elf: file(1) magic for ELF executables
#
# We have to check the byte order flag to see what byte order all the
@@ -15,6 +15,32 @@
# Modified by (4): <gerardo.cacciari at gmail.com> (VMS Itanium)
# Modified by (5): Matthias Urlichs <smurf at debian.org> (Listing of many architectures)
+0 name elf-mips
+>0 lelong&0xf0000000 0x00000000 MIPS-I
+>0 lelong&0xf0000000 0x10000000 MIPS-II
+>0 lelong&0xf0000000 0x20000000 MIPS-III
+>0 lelong&0xf0000000 0x30000000 MIPS-IV
+>0 lelong&0xf0000000 0x40000000 MIPS-V
+>0 lelong&0xf0000000 0x50000000 MIPS32
+>0 lelong&0xf0000000 0x60000000 MIPS64
+>0 lelong&0xf0000000 0x70000000 MIPS32 rel2
+>0 lelong&0xf0000000 0x80000000 MIPS64 rel2
+>0 lelong&0xf0000000 0x90000000 MIPS32 rel6
+>0 lelong&0xf0000000 0xa0000000 MIPS64 rel6
+
+0 name elf-sparc
+>0 lelong&0x00ffff00 0x00000100 V8+ Required,
+>0 lelong&0x00ffff00 0x00000200 Sun UltraSPARC1 Extensions Required,
+>0 lelong&0x00ffff00 0x00000400 HaL R1 Extensions Required,
+>0 lelong&0x00ffff00 0x00000800 Sun UltraSPARC3 Extensions Required,
+>0 lelong&0x3 0 total store ordering,
+>0 lelong&0x3 1 partial store ordering,
+>0 lelong&0x3 2 relaxed memory ordering,
+
+0 name elf-pa-risc
+>2 leshort 0x0214 2.0
+>0 leshort &0x0008 (LP64)
+
0 name elf-le
>16 leshort 0 no file type,
!:mime application/octet-stream
@@ -55,26 +81,10 @@
>18 leshort 8
# only for 32-bit
>>4 byte 1
->>>36 lelong&0xf0000000 0x00000000 MIPS-I
->>>36 lelong&0xf0000000 0x10000000 MIPS-II
->>>36 lelong&0xf0000000 0x20000000 MIPS-III
->>>36 lelong&0xf0000000 0x30000000 MIPS-IV
->>>36 lelong&0xf0000000 0x40000000 MIPS-V
->>>36 lelong&0xf0000000 0x50000000 MIPS32
->>>36 lelong&0xf0000000 0x60000000 MIPS64
->>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2
->>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2
+>>>36 use elf-mips
# only for 64-bit
>>4 byte 2
->>>48 lelong&0xf0000000 0x00000000 MIPS-I
->>>48 lelong&0xf0000000 0x10000000 MIPS-II
->>>48 lelong&0xf0000000 0x20000000 MIPS-III
->>>48 lelong&0xf0000000 0x30000000 MIPS-IV
->>>48 lelong&0xf0000000 0x40000000 MIPS-V
->>>48 lelong&0xf0000000 0x50000000 MIPS32
->>>48 lelong&0xf0000000 0x60000000 MIPS64
->>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2
->>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2
+>>>48 use elf-mips
>18 leshort 9 Amdahl,
>18 leshort 10 MIPS (deprecated),
>18 leshort 11 RS6000,
@@ -81,21 +91,16 @@
>18 leshort 15 PA-RISC,
# only for 32-bit
>>4 byte 1
->>>38 leshort 0x0214 2.0
->>>36 leshort &0x0008 (LP64)
+>>>36 use elf-pa-risc
# only for 64-bit
>>4 byte 2
->>>50 leshort 0x0214 2.0
->>>48 leshort &0x0008 (LP64)
+>>>48 use elf-pa-risc
>18 leshort 16 nCUBE,
>18 leshort 17 Fujitsu VPP500,
>18 leshort 18 SPARC32PLUS,
# only for 32-bit
>>4 byte 1
->>>36 lelong&0xffff00 0x000100 V8+ Required,
->>>36 lelong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required,
->>>36 lelong&0xffff00 0x000400 HaL R1 Extensions Required,
->>>36 lelong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required,
+>>>36 use elf-sparc
>18 leshort 19 Intel 80960,
>18 leshort 20 PowerPC or cisco 4500,
>18 leshort 21 64-bit PowerPC or cisco 7500,
@@ -117,12 +122,7 @@
>18 leshort 42 Renesas SH,
>18 leshort 43 SPARC V9,
>>4 byte 2
->>>48 lelong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required,
->>>48 lelong&0xffff00 0x000400 HaL R1 Extensions Required,
->>>48 lelong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required,
->>>48 lelong&0x3 0 total store ordering,
->>>48 lelong&0x3 1 partial store ordering,
->>>48 lelong&0x3 2 relaxed memory ordering,
+>>>48 use elf-sparc
>18 leshort 44 Siemens Tricore Embedded Processor,
>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
>18 leshort 46 Renesas H8/300,
@@ -257,6 +257,7 @@
>18 leshort 216 Cognitive Smart Memory,
>18 leshort 217 iCelero CoolEngine,
>18 leshort 218 Nanoradio Optimized RISC,
+>18 leshort 243 UCB RISC-V,
>18 leshort 0x1057 AVR (unofficial),
>18 leshort 0x1059 MSP430 (unofficial),
>18 leshort 0x1223 Adapteva Epiphany (unofficial),
@@ -300,25 +301,23 @@
>>0 use elf-le
>5 byte 2 MSB
>>0 use \^elf-le
-# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
-# like proper ELF, but extracting the string had bad results.
->4 byte <0x80
->>8 string >\0 (%s)
->8 string \0
->>7 byte 0 (SYSV)
->>7 byte 1 (HP-UX)
->>7 byte 2 (NetBSD)
->>7 byte 3 (GNU/Linux)
->>7 byte 4 (GNU/Hurd)
->>7 byte 5 (86Open)
->>7 byte 6 (Solaris)
->>7 byte 7 (Monterey)
->>7 byte 8 (IRIX)
->>7 byte 9 (FreeBSD)
->>7 byte 10 (Tru64)
->>7 byte 11 (Novell Modesto)
->>7 byte 12 (OpenBSD)
->8 string \2
->>7 byte 13 (OpenVMS)
->>7 byte 97 (ARM)
->>7 byte 255 (embedded)
+>7 byte 0 (SYSV)
+>7 byte 1 (HP-UX)
+>7 byte 2 (NetBSD)
+>7 byte 3 (GNU/Linux)
+>7 byte 4 (GNU/Hurd)
+>7 byte 5 (86Open)
+>7 byte 6 (Solaris)
+>7 byte 7 (Monterey)
+>7 byte 8 (IRIX)
+>7 byte 9 (FreeBSD)
+>7 byte 10 (Tru64)
+>7 byte 11 (Novell Modesto)
+>7 byte 12 (OpenBSD)
+>7 byte 13 (OpenVMS)
+>7 byte 14 (HP NonStop Kernel)
+>7 byte 15 (AROS Research Operating System)
+>7 byte 16 (FenixOS)
+>7 byte 17 (Nuxi CloudABI)
+>7 byte 97 (ARM)
+>7 byte 255 (embedded)
Modified: trunk/contrib/file/magic/Magdir/filesystems
===================================================================
--- trunk/contrib/file/magic/Magdir/filesystems 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/filesystems 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,8 +1,8 @@
#------------------------------------------------------------------------------
-# $File: filesystems,v 1.95 2014/06/03 19:17:27 christos Exp $
+# $File: filesystems,v 1.122 2017/07/21 10:34:41 christos Exp $
# filesystems: file(1) magic for different filesystems
#
-0 name partid
+0 name partid
>0 ubyte 0x00 Unused
>0 ubyte 0x01 12-bit FAT
>0 ubyte 0x02 XENIX /
@@ -187,7 +187,7 @@
0 string \366\366\366\366 PC formatted floppy with no filesystem
# Sun disk labels
# From /usr/include/sun/dklabel.h:
-0774 beshort 0xdabe
+0774 beshort 0xdabe
# modified by Joerg Jenderek, because original test
# succeeds for Cabinet archive dao360.dl_ with negative blocks
>0770 long >0 Sun disk label
@@ -213,30 +213,30 @@
# (http://btmgr.sourceforge.net/docs/user-guide-3.html)
0 string SBMBAKUP_ Smart Boot Manager backup file
>9 string x \b, version %-5.5s
->>14 string =_
+>>14 string =_
>>>15 string x %-.1s
>>>>16 string =_ \b.
>>>>>17 string x \b%-.1s
>>>>>>18 string =_ \b.
>>>>>>>19 string x \b%-.1s
->>>22 ubyte 0
+>>>22 ubyte 0
>>>>21 ubyte x \b, from drive 0x%x
->>>22 ubyte >0
+>>>22 ubyte >0
>>>>21 string x \b, from drive %s
->>>535 search/17 \x55\xAA
->>>>&-512 indirect x \b; contains
+>>>535 search/17 \x55\xAA
+>>>>&-512 indirect x \b; contains
# updated by Joerg Jenderek at Nov 2012
# DOS Emulator image is 128 byte, null right padded header + harddisc image
-0 string DOSEMU\0
->0x27E leshort 0xAA55
+0 string DOSEMU\0
+>0x27E leshort 0xAA55
#offset is 128
->>19 ubyte 128
+>>19 ubyte 128
>>>(19.b-1) ubyte 0x0 DOS Emulator image
>>>>7 ulelong >0 \b, %u heads
>>>>11 ulelong >0 \b, %d sectors/track
>>>>15 ulelong >0 \b, %d cylinders
->>>>128 indirect x \b; contains
+>>>>128 indirect x \b; contains
# added by Joerg Jenderek at Nov 2012
# http://www.thenakedpc.com/articles/v04/08/0408-05.html
@@ -243,8 +243,8 @@
# Symantec (Peter Norton) Image.dat file consists of variable header, bootrecord, part of FAT and root directory data
0 string PNCIHISK\0 Norton Utilities disc image data
# real x86 boot sector with jump instruction
->509 search/1026 \x55\xAA\xeb
->>&-1 indirect x \b; contains
+>509 search/1026 \x55\xAA\xeb
+>>&-1 indirect x \b; contains
# http://file-extension.net/seeker/file_extension_dat
0 string PNCIUNDO Norton Disk Doctor UnDo file
#
@@ -251,36 +251,37 @@
# DOS/MBR boot sector updated by Joerg Jenderek at Sep 2007,May 2011,2013
# for any allowed sector sizes
-30 search/481 \x55\xAA
+30 search/481 \x55\xAA
# to display DOS/MBR boot sector (40) before old one (strength=50+21),Syslinux bootloader (71),SYSLINUX MBR (37+36),NetBSD mbr (110),AdvanceMAME mbr (111)
# DOS BPB information (70) and after DOS floppy (120) like in previous file version
-!:strength +72
+!:strength +65
# for sector sizes < 512 Bytes
->11 uleshort <512
+>11 uleshort <512
>>(11.s-2) uleshort 0xAA55 DOS/MBR boot sector
# for sector sizes with 512 or more Bytes
>0x1FE leshort 0xAA55 DOS/MBR boot sector
+
# keep old DOS/MBR boot sector as dummy for mbr and bootloader displaying
# only for sector sizes with 512 or more Bytes
-0x1FE leshort 0xAA55
+0x1FE leshort 0xAA55 DOS/MBR boot sector
#
# to display information (50) before DOS BPB (strength=70) and after DOS floppy (120) like in old file version
-!:strength +21
->2 string OSBS \b, OS/BS MBR
+!:strength +65
+>2 string OSBS OS/BS MBR
# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/
# and http://en.wikipedia.org/wiki/Master_Boot_Record
-# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by
+# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by
# characteristic assembler instructions: xor ax,ax;mov ss,ax;mov sp,7c00
>0 search/2 \x33\xc0\x8e\xd0\xbc\x00\x7c MS-MBR
# Microsoft Windows 95A and early ( http://thestarman.pcministry.com/asm/mbr/STDMBR.htm )
# assembler instructions: mov si,sp;push ax;pop es;push ax;pop ds;sti;cld
->>8 ubequad 0x8bf45007501ffbfc
+>>8 ubequad 0x8bf45007501ffbfc
# http://thestarman.pcministry.com/asm/mbr/200MBR.htm
>>>0x16 ubyte 0xF3 \b,DOS 2
>>>>219 regex Author\ -\ Author:
# found "David Litton" , "A Pehrsson "
>>>>>&0 string x "%s"
->>>0x16 ubyte 0xF2
+>>>0x16 ubyte 0xF2
# NEC MS-DOS 3.30 Rev. 3 . See http://thestarman.pcministry.com/asm/mbr/DOS33MBR.htm
# assembler instructions: mov di,077c;cmp word ptrl[di],a55a;jnz
>>>>0x22 ubequad 0xbf7c07813d5aa575 \b,NEC 3.3
@@ -315,7 +316,7 @@
>>>>>>(0x79.b) string >\0 "%s"
# Microsoft Windows 95B to XP (http://thestarman.pcministry.com/asm/mbr/95BMEMBR.htm)
# assembler instructions: push ax;pop es;push ax;pop ds;cld;mov si,7c1b
->>8 ubequad 0x5007501ffcbe1b7c
+>>8 ubequad 0x5007501ffcbe1b7c
# assembler instructions: rep;movsb;retf;mov si,07be;mov cl,04
>>>24 ubequad 0xf3a4cbbebe07b104 9M
# "Invalid partition table" nn=0x10F for english version
@@ -360,7 +361,7 @@
>>>>(0x1b7.b+0x100) string >\0 "%s"
# Microsoft Windows Vista or 7
# assembler instructions: ..;mov ds,ax;mov si,7c00;mov di,..00
->>8 ubequad 0xc08ed8be007cbf00
+>>8 ubequad 0xc08ed8be007cbf00
# Microsoft Windows Vista (http://thestarman.pcministry.com/asm/mbr/VistaMBR.htm)
# assembler instructions: jnz 0729;cmp ebx,"TCPA"
>>>0xEC ubequad 0x753b6681fb544350 Vista
@@ -401,38 +402,38 @@
# http://en.wikipedia.org/wiki/MBR_disk_signature#ID
>>0x1b8 ulelong >0 \b, disk signature 0x%-.4x
# driveID/timestamp for Win 95B,98,98SE and ME. See http://thestarman.pcministry.com/asm/mbr/mystery.htm
->>0xDA uleshort 0
+>>0xDA uleshort 0
>>>0xDC ulelong >0 \b, created
# physical drive number (0x80-0xFF) when the Windows wrote that byte to the drive
>>>>0xDC ubyte x with driveID 0x%x
-# hours, minutes and seconds
+# hours, minutes and seconds
>>>>0xDf ubyte x at %x
>>>>0xDe ubyte x \b:%x
>>>>0xDd ubyte x \b:%x
# special case for Microsoft MS-DOS 3.21 spanish
-# assembler instructions: cli;mov $0x30,%ax;mov %ax,%ss;mov
->0 ubequad 0xfab830008ed0bc00
-# assembler instructions: $0x1f00,%sp;mov $0x80cb,%di;add %cl,(%bx,%si);in (%dx),%ax;mov
+# assembler instructions: cli;mov $0x30,%ax;mov %ax,%ss;mov
+>0 ubequad 0xfab830008ed0bc00
+# assembler instructions: $0x1f00,%sp;mov $0x80cb,%di;add %cl,(%bx,%si);in (%dx),%ax;mov
>>8 ubequad 0x1fbfcb800008ed8 MS-MBR,D0S version 3.21 spanish
# Microsoft MBR IPL end
# dr-dos with some upper-, lowercase variants
->0x9D string Invalid\ partition\ table$
->>181 string No\ Operating\ System$
+>0x9D string Invalid\ partition\ table$
+>>181 string No\ Operating\ System$
>>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03
->0x9D string Invalid\ partition\ table$
->>181 string No\ operating\ system$
+>0x9D string Invalid\ partition\ table$
+>>181 string No\ operating\ system$
>>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03
->342 string Invalid\ partition\ table$
->>366 string No\ operating\ system$
+>342 string Invalid\ partition\ table$
+>>366 string No\ operating\ system$
>>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03
->295 string NEWLDR\0
->>302 string Bad\ PT\ $
->>>310 string No\ OS\ $
->>>>317 string OS\ load\ err$
->>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r
->>>>>>358 string Press\ any\ key\ to\ continue.\n\r$
->>>>>>>387 string Copyright\ (c)\ 1984,1998
+>295 string NEWLDR\0
+>>302 string Bad\ PT\ $
+>>>310 string No\ OS\ $
+>>>>317 string OS\ load\ err$
+>>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r
+>>>>>>358 string Press\ any\ key\ to\ continue.\n\r$
+>>>>>>>387 string Copyright\ (c)\ 1984,1998
>>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR)
#
# tests for different MS-DOS Master Boot Records (MBR) moved and merged
@@ -440,15 +441,15 @@
#>0x145 string Default:\ F \b, FREE-DOS MBR
#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR
>0x145 search/7 Default:\ F \b, FREE-DOS MBR
-#>>313 string F0\ .\ .\ .
-#>>>322 string disk\ 1
-#>>>>382 string FAT3
->64 string no\ active\ partition\ found
+#>>313 string F0\ .\ .\ .
+#>>>322 string disk\ 1
+#>>>>382 string FAT3
+>64 string no\ active\ partition\ found
>>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR
# Ranish Partition Manager http://www.ranish.com/part/
->387 search/4 \0\ Error!\r
->>378 search/7 Virus!
->>>397 search/4 Booting\
+>387 search/4 \0\ Error!\r
+>>378 search/7 Virus!
+>>>397 search/4 Booting\040
>>>>408 search/4 HD1/\0 \b, Ranish MBR (
>>>>>416 string Writing\ changes... \b2.37
>>>>>>438 ubyte x \b,0x%x dots
@@ -465,23 +466,23 @@
#
# SYSLINUX MBR moved
# http://www.acronis.de/
->362 string MBR\ Error\ \0\r
->>376 string ress\ any\ key\ to\
+>362 string MBR\ Error\ \0\r
+>>376 string ress\ any\ key\ to\040
>>>392 string boot\ from\ floppy...\0 \b, Acronis MBR
# added by Joerg Jenderek
# http://www.visopsys.org/
# http://partitionlogic.org.uk/
->309 string No\ bootable\ partition\ found\r
+>309 string No\ bootable\ partition\ found\r
>>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR
->349 string No\ bootable\ partition\ found\r
+>349 string No\ bootable\ partition\ found\r
>>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR
# bootloader, bootmanager
->0x40 string SBML
+>0x40 string SBML
# label with 11 characters of FAT 12 bit filesystem
->>43 string SMART\ BTMGR
+>>43 string SMART\ BTMGR
>>>430 string SBMK\ Bad!\r \b, Smart Boot Manager
# OEM-ID not always "SBM"
-#>>>>3 strings SBM
+#>>>>3 strings SBM
>>>>6 string >\0 \b, version %s
>382 string XOSLLOADXCF \b, eXtended Operating System Loader
>6 string LILO \b, LInux i386 boot LOader
@@ -491,11 +492,11 @@
# variables according to grub-0.97/stage1/stage1.S or
# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
# usual values are marked with comments to get only informations of strange GRUB loaders
->342 search/60 \0Geom\0
+>342 search/60 \0Geom\0
#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0
->>0x41 ubyte <2
+>>0x41 ubyte <2
>>>0x3E ubyte >2 \b; GRand Unified Bootloader
-# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
+# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
>>>>0x3E ubyte x \b, stage1 version 0x%x
#If it is 0xFF, use a drive passed by BIOS
>>>>0x40 ubyte <0xFF \b, boot drive 0x%x
@@ -520,7 +521,7 @@
>>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0
>>>>>385 string GRUB\ \0 \b, GRUB version 0.97
# unknown version
->>>343 string Geom\0Read\0\ Error\0
+>>>343 string Geom\0Read\0\ Error\0
>>>>321 string Loading\ stage1.5 \b, GRUB version x.y
>>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0
>>>>374 string GRUB\ \0 \b, GRUB version n.m
@@ -527,37 +528,37 @@
# SYSLINUX bootloader moved
>395 string chksum\0\ ERROR!\0 \b, Gujin bootloader
# http://www.bcdwb.de/bcdw/index_e.htm
->3 string BCDL
+>3 string BCDL
>>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z)
# mbr partition table entries updated by Joerg Jenderek at Sep 2013
# skip Norton Utilities disc image data
->3 string !IHISK
+>3 string !IHISK
# skip Linux style boot sector starting with assember instructions mov 0x7c0,ax;
->>0 belong !0xb8c0078e
-# not Linux kernel
->>>514 string !HdrS
+>>0 belong !0xb8c0078e
+# not Linux kernel
+>>>514 string !HdrS
# not BeOS
->>>>422 string !Be\ Boot\ Loader
-# jump over BPB instruction implies DOS bootsector or AdvanceMAME mbr
->>>>>0 ubelong&0xFD000000 =0xE9000000
+>>>>422 string !Be\ Boot\ Loader
+# jump over BPB instruction implies DOS bootsector or AdvanceMAME mbr
+>>>>>0 ubelong&0xFD000000 =0xE9000000
# AdvanceMAME mbr
->>>>>>(1.b+2) ubequad 0xfa31c08ed88ec08e
+>>>>>>(1.b+2) ubequad 0xfa31c08ed88ec08e
>>>>>>>446 use partition-table
# mbr, Norton Utilities disc image data, or 2nd,etc. sector of x86 bootloader
->>>>>0 ubelong&0xFD000000 !0xE9000000
+>>>>>0 ubelong&0xFD000000 !0xE9000000
# skip FSInfosector
->>>>>>0 string !RRaA
+>>>>>>0 string !RRaA
# skip 3rd sector of MS x86 bootloader with assember instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,
# http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm
->>>>>>>0 ubequad !0xfa660fb64610668b
+>>>>>>>0 ubequad !0xfa660fb64610668b
# skip 13rd sector of MS x86 bootloader
->>>>>>>>0 ubequad !0x660fb64610668b4e
+>>>>>>>>0 ubequad !0x660fb64610668b4e
# skip sector starting with DOS new line
->>>>>>>>>0 string !\r\n
+>>>>>>>>>0 string !\r\n
# allowed active flag 0,80h-FFh
->>>>>>>>>>446 ubyte 0
+>>>>>>>>>>446 ubyte 0
>>>>>>>>>>>446 use partition-table
->>>>>>>>>>446 ubyte >0x7F
+>>>>>>>>>>446 ubyte >0x7F
>>>>>>>>>>>446 use partition-table
# TODO: test for extended bootrecord (ebr) moved and merged with mbr partition table entries
# mbr partition table entries end
@@ -564,328 +565,328 @@
# http://www.acronis.de/
#FAT label=ACRONIS\ SZ
#OEM-ID=BOOTWIZ0
->442 string Non-system\ disk,\
+>442 string Non-system\ disk,\040
>>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader
# updated by Joerg Jenderek at Nov 2012, Sep 2013
# DOS names like F11.SYS or BOOTWIZ.SYS are 8 right space padded bytes+3 bytes
# display 1 space
->>>447 ubyte x \b
+>>>447 ubyte x \b
>>>477 use DOS-filename
#
->185 string FDBOOT\ Version\
->>204 string \rNo\ Systemdisk.\
->>>220 string Booting\ from\ harddisk.\n\r
->>>245 string Cannot\ load\ from\ harddisk.\n\r
->>>>273 string Insert\ Systemdisk\
+>185 string FDBOOT\ Version\040
+>>204 string \rNo\ Systemdisk.\040
+>>>220 string Booting\ from\ harddisk.\n\r
+>>>245 string Cannot\ load\ from\ harddisk.\n\r
+>>>>273 string Insert\ Systemdisk\040
>>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader
>>>>>>200 string >\0 \b, version %-3s
->242 string Bootsector\ from\ C.H.\ Hochst\204
+>242 string Bootsector\ from\ C.H.\ Hochst\204
# http://freecode.com/projects/dosfstools dosfstools-n.m/src/mkdosfs.c
# updated by Joerg Jenderek at Nov 2012. Use search directive with offset instead of string
# skip name "C.H. Hochstaetter" partly because it is sometimes written without umlaut
->242 search/127 Bootsector\ from\ C.H.\ Hochst
->>278 search/127 No\ Systemdisk.\ Booting\ from\ harddisk
+>242 search/127 Bootsector\ from\ C.H.\ Hochst
+>>278 search/127 No\ Systemdisk.\ Booting\ from\ harddisk
# followed by variants with point,CR-NL or NL-CR
->>>208 search/261 Cannot\ load\ from\ harddisk.
+>>>208 search/261 Cannot\ load\ from\ harddisk.
# followed by variants CR-NL or NL-CR
->>>>236 search/235 Insert\ Systemdisk\ and\ press\ any\ key.
+>>>>236 search/235 Insert\ Systemdisk\ and\ press\ any\ key.
# followed by variants with point,CR-NL or NL-CR
>>>>>180 search/96 Disk\ formatted\ with\ WinImage\ \b, WinImage harddisk Bootloader
# followed by string like "6.50 (c) 1993-2004 Gilles Vollant"
>>>>>>&0 string x \b, version %-4.4s
->(1.b+2) ubyte 0xe
->>(1.b+3) ubyte 0x1f
->>>(1.b+4) ubyte 0xbe
+>(1.b+2) ubyte 0xe
+>>(1.b+3) ubyte 0x1f
+>>>(1.b+4) ubyte 0xbe
# message offset found at (1.b+5) is 0x77 for FAT32 or 0x5b for others
->>>>(1.b+5) ubyte&0xd3 0x53
->>>>>(1.b+6) ubyte 0x7c
+>>>>(1.b+5) ubyte&0xd3 0x53
+>>>>>(1.b+6) ubyte 0x7c
# assembler instructions: lodsb;and al,al;jz 0xb;push si;mov ah,
->>>>>>(1.b+7) ubyte 0xac
->>>>>>>(1.b+8) ubyte 0x22
->>>>>>>>(1.b+9) ubyte 0xc0
->>>>>>>>>(1.b+10) ubyte 0x74
->>>>>>>>>>(1.b+11) ubyte 0x0b
->>>>>>>>>>>(1.b+12) ubyte 0x56
+>>>>>>(1.b+7) ubyte 0xac
+>>>>>>>(1.b+8) ubyte 0x22
+>>>>>>>>(1.b+9) ubyte 0xc0
+>>>>>>>>>(1.b+10) ubyte 0x74
+>>>>>>>>>>(1.b+11) ubyte 0x0b
+>>>>>>>>>>>(1.b+12) ubyte 0x56
>>>>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display
# FAT1X version
->>>>>>>>>>>>>(1.b+5) ubyte 0x5b
+>>>>>>>>>>>>>(1.b+5) ubyte 0x5b
>>>>>>>>>>>>>>0x5b string >\0 "%-s"
# FAT32 version
->>>>>>>>>>>>>(1.b+5) ubyte 0x77
+>>>>>>>>>>>>>(1.b+5) ubyte 0x77
>>>>>>>>>>>>>>0x77 string >\0 "%-s"
>214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display
-#>>244 string from\ dosemu-freedos-*-bin.tgz\r
-#>>>170 string Sorry,\ could\ not\ load\ an\
-#>>>>195 string operating\ system.\r\n
+#>>244 string from\ dosemu-freedos-*-bin.tgz\r
+#>>>170 string Sorry,\ could\ not\ load\ an\040
+#>>>>195 string operating\ system.\r\n
#
->103 string This\ is\ not\ a\ bootable\ disk.\
->>132 string Please\ insert\ a\ bootable\
->>>157 string floppy\ and\r\n
+>103 string This\ is\ not\ a\ bootable\ disk.\040
+>>132 string Please\ insert\ a\ bootable\040
+>>>157 string floppy\ and\r\n
>>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display
#
->66 string Solaris\ Boot\ Sector
->>99 string Incomplete\ MDBoot\ load.
+>66 string Solaris\ Boot\ Sector
+>>99 string Incomplete\ MDBoot\ load.
>>>89 string Version \b, Sun Solaris Bootloader
>>>>97 byte x version %c
#
->408 string OS/2\ !!\ SYS01475\r\0
->>429 string OS/2\ !!\ SYS02025\r\0
->>>450 string OS/2\ !!\ SYS02027\r\0
+>408 string OS/2\ !!\ SYS01475\r\0
+>>429 string OS/2\ !!\ SYS02025\r\0
+>>>450 string OS/2\ !!\ SYS02027\r\0
>>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader
#
->409 string OS/2\ !!\ SYS01475\r\0
->>430 string OS/2\ !!\ SYS02025\r\0
->>>451 string OS/2\ !!\ SYS02027\r\0
+>409 string OS/2\ !!\ SYS01475\r\0
+>>430 string OS/2\ !!\ SYS02025\r\0
+>>>451 string OS/2\ !!\ SYS02027\r\0
>>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader
->112 string This\ disk\ is\ not\ bootable\r
->>142 string If\ you\ wish\ to\ make\ it\ bootable
->>>176 string run\ the\ DOS\ program\ SYS\
->>>200 string after\ the\r
->>>>216 string system\ has\ been\ loaded\r\n
->>>>>242 string Please\ insert\ a\ DOS\ diskette\
->>>>>271 string into\r\n\ the\ drive\ and\
+>112 string This\ disk\ is\ not\ bootable\r
+>>142 string If\ you\ wish\ to\ make\ it\ bootable
+>>>176 string run\ the\ DOS\ program\ SYS\040
+>>>200 string after\ the\r
+>>>>216 string system\ has\ been\ loaded\r\n
+>>>>>242 string Please\ insert\ a\ DOS\ diskette\040
+>>>>>271 string into\r\n\ the\ drive\ and\040
>>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display
# XP
->430 string NTLDR\ is\ missing\xFF\r\n
->>449 string Disk\ error\xFF\r\n
+>430 string NTLDR\ is\ missing\xFF\r\n
+>>449 string Disk\ error\xFF\r\n
>>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader
# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
->>>>417 ubyte&0xDF >0
+>>>>417 ubyte&0xDF >0
>>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
+>>>>>>422 ubyte&0xDF >0
>>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
+>>>>>425 ubyte&0xDF >0
>>>>>>425 string >\ \b.%-.3s
#
->>>>371 ubyte >0x20
->>>>>368 ubyte&0xDF >0
+>>>>371 ubyte >0x20
+>>>>>368 ubyte&0xDF >0
>>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
+>>>>>>>373 ubyte&0xDF >0
>>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
+>>>>>>376 ubyte&0xDF >0
>>>>>>>376 string x \b.%-.3s
#
->430 string NTLDR\ nicht\ gefunden\xFF\r\n
->>453 string Datentr\204gerfehler\xFF\r\n
+>430 string NTLDR\ nicht\ gefunden\xFF\r\n
+>>453 string Datentr\204gerfehler\xFF\r\n
>>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german)
->>>>417 ubyte&0xDF >0
+>>>>417 ubyte&0xDF >0
>>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
+>>>>>>422 ubyte&0xDF >0
>>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
+>>>>>425 ubyte&0xDF >0
>>>>>>425 string >\ \b.%-.3s
# offset variant
->>>>379 string \0
->>>>>368 ubyte&0xDF >0
+>>>>379 string \0
+>>>>>368 ubyte&0xDF >0
>>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
+>>>>>>>373 ubyte&0xDF >0
>>>>>>>>373 string x \b%-.3s
#
->430 string NTLDR\ fehlt\xFF\r\n
->>444 string Datentr\204gerfehler\xFF\r\n
+>430 string NTLDR\ fehlt\xFF\r\n
+>>444 string Datentr\204gerfehler\xFF\r\n
>>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german)
->>>>417 ubyte&0xDF >0
+>>>>417 ubyte&0xDF >0
>>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
+>>>>>>422 ubyte&0xDF >0
>>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
+>>>>>425 ubyte&0xDF >0
>>>>>>425 string >\ \b.%-.3s
# variant
->>>>371 ubyte >0x20
->>>>>368 ubyte&0xDF >0
+>>>>371 ubyte >0x20
+>>>>>368 ubyte&0xDF >0
>>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
+>>>>>>>373 ubyte&0xDF >0
>>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
+>>>>>>376 ubyte&0xDF >0
>>>>>>>376 string x \b.%-.3s
#
->430 string NTLDR\ fehlt\xFF\r\n
->>444 string Medienfehler\xFF\r\n
+>430 string NTLDR\ fehlt\xFF\r\n
+>>444 string Medienfehler\xFF\r\n
>>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german)
->>>>371 ubyte >0x20
->>>>>368 ubyte&0xDF >0
+>>>>371 ubyte >0x20
+>>>>>368 ubyte&0xDF >0
>>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
+>>>>>>>373 ubyte&0xDF >0
>>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
+>>>>>>376 ubyte&0xDF >0
>>>>>>>376 string x \b.%-.3s
# variant
->>>>417 ubyte&0xDF >0
+>>>>417 ubyte&0xDF >0
>>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
+>>>>>>422 ubyte&0xDF >0
>>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
+>>>>>425 ubyte&0xDF >0
>>>>>>425 string >\ \b.%-.3s
#
->430 string Datentr\204ger\ entfernen\xFF\r\n
->>454 string Medienfehler\xFF\r\n
+>430 string Datentr\204ger\ entfernen\xFF\r\n
+>>454 string Medienfehler\xFF\r\n
>>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german)
->>>>379 string \0
->>>>>368 ubyte&0xDF >0
+>>>>379 string \0
+>>>>>368 ubyte&0xDF >0
>>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
+>>>>>>>373 ubyte&0xDF >0
>>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
+>>>>>>376 ubyte&0xDF >0
>>>>>>>376 string x \b.%-.3s
# variant
->>>>417 ubyte&0xDF >0
+>>>>417 ubyte&0xDF >0
>>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
+>>>>>>422 ubyte&0xDF >0
>>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
+>>>>>425 ubyte&0xDF >0
>>>>>>425 string >\ \b.%-.3s
#
-#>3 string NTFS\ \ \ \
->389 string Fehler\ beim\ Lesen\
+#>3 string NTFS\ \ \ \040
+>389 string Fehler\ beim\ Lesen\040
>>407 string des\ Datentr\204gers
->>>426 string NTLDR\ fehlt
+>>>426 string NTLDR\ fehlt
>>>>440 string NTLDR\ ist\ komprimiert
>>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german)
-#>3 string NTFS\ \ \ \
+#>3 string NTFS\ \ \ \040
>313 string A\ disk\ read\ error\ occurred.\r
->>345 string A\ kernel\ file\ is\ missing\
->>>370 string from\ the\ disk.\r
->>>>484 string NTLDR\ is\ compressed
->>>>>429 string Insert\ a\ system\ diskette\
+>>345 string A\ kernel\ file\ is\ missing\040
+>>>370 string from\ the\ disk.\r
+>>>>484 string NTLDR\ is\ compressed
+>>>>>429 string Insert\ a\ system\ diskette\040
>>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS
# DOS loader variants different languages,offsets
>472 ubyte&0xDF >0
->>389 string Invalid\ system\ disk\xFF\r\n
->>>411 string Disk\ I/O\ error
->>>>428 string Replace\ the\ disk,\ and\
+>>389 string Invalid\ system\ disk\xFF\r\n
+>>>411 string Disk\ I/O\ error
+>>>>428 string Replace\ the\ disk,\ and\040
>>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader
#IO.SYS
->>>>>>472 ubyte&0xDF >0
+>>>>>>472 ubyte&0xDF >0
>>>>>>>472 string x \b %-.2s
->>>>>>>>474 ubyte&0xDF >0
+>>>>>>>>474 ubyte&0xDF >0
>>>>>>>>>474 string x \b%-.5s
->>>>>>>>>>479 ubyte&0xDF >0
+>>>>>>>>>>479 ubyte&0xDF >0
>>>>>>>>>>>479 string x \b%-.1s
->>>>>>>480 ubyte&0xDF >0
+>>>>>>>480 ubyte&0xDF >0
>>>>>>>>480 string x \b.%-.3s
#MSDOS.SYS
>>>>>>>483 ubyte&0xDF >0 \b+
>>>>>>>>483 string x \b%-.5s
->>>>>>>>>488 ubyte&0xDF >0
+>>>>>>>>>488 ubyte&0xDF >0
>>>>>>>>>>488 string x \b%-.3s
->>>>>>>>491 ubyte&0xDF >0
+>>>>>>>>491 ubyte&0xDF >0
>>>>>>>>>491 string x \b.%-.3s
#
->>390 string Invalid\ system\ disk\xFF\r\n
->>>412 string Disk\ I/O\ error\xFF\r\n
->>>>429 string Replace\ the\ disk,\ and\
+>>390 string Invalid\ system\ disk\xFF\r\n
+>>>412 string Disk\ I/O\ error\xFF\r\n
+>>>>429 string Replace\ the\ disk,\ and\040
>>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader
->>388 string Ungueltiges\ System\ \xFF\r\n
->>>410 string E/A-Fehler\ \ \ \ \xFF\r\n
->>>>427 string Datentraeger\ wechseln\ und\
+>>388 string Ungueltiges\ System\ \xFF\r\n
+>>>410 string E/A-Fehler\ \ \ \ \xFF\r\n
+>>>>427 string Datentraeger\ wechseln\ und\040
>>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german)
#WINBOOT.SYS only not spaces (0xDF)
->>>>>>497 ubyte&0xDF >0
+>>>>>>497 ubyte&0xDF >0
>>>>>>>497 string x %-.5s
->>>>>>>>502 ubyte&0xDF >0
+>>>>>>>>502 ubyte&0xDF >0
>>>>>>>>>502 string x \b%-.1s
->>>>>>>>>>503 ubyte&0xDF >0
+>>>>>>>>>>503 ubyte&0xDF >0
>>>>>>>>>>>503 string x \b%-.1s
->>>>>>>>>>>>504 ubyte&0xDF >0
+>>>>>>>>>>>>504 ubyte&0xDF >0
>>>>>>>>>>>>>504 string x \b%-.1s
->>>>>>505 ubyte&0xDF >0
+>>>>>>505 ubyte&0xDF >0
>>>>>>>505 string x \b.%-.3s
#IO.SYS
>>>>>>472 ubyte&0xDF >0 or
>>>>>>>472 string x \b %-.2s
->>>>>>>>474 ubyte&0xDF >0
+>>>>>>>>474 ubyte&0xDF >0
>>>>>>>>>474 string x \b%-.5s
->>>>>>>>>>479 ubyte&0xDF >0
+>>>>>>>>>>479 ubyte&0xDF >0
>>>>>>>>>>>479 string x \b%-.1s
->>>>>>>480 ubyte&0xDF >0
+>>>>>>>480 ubyte&0xDF >0
>>>>>>>>480 string x \b.%-.3s
#MSDOS.SYS
>>>>>>>483 ubyte&0xDF >0 \b+
>>>>>>>>483 string x \b%-.5s
->>>>>>>>>488 ubyte&0xDF >0
+>>>>>>>>>488 ubyte&0xDF >0
>>>>>>>>>>488 string x \b%-.3s
->>>>>>>>491 ubyte&0xDF >0
+>>>>>>>>491 ubyte&0xDF >0
>>>>>>>>>491 string x \b.%-.3s
#
->>390 string Ungueltiges\ System\ \xFF\r\n
->>>412 string E/A-Fehler\ \ \ \ \xFF\r\n
->>>>429 string Datentraeger\ wechseln\ und\
+>>390 string Ungueltiges\ System\ \xFF\r\n
+>>>412 string E/A-Fehler\ \ \ \ \xFF\r\n
+>>>>429 string Datentraeger\ wechseln\ und\040
>>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German)
#WINBOOT.SYS only not spaces (0xDF)
->>>>>>497 ubyte&0xDF >0
+>>>>>>497 ubyte&0xDF >0
>>>>>>>497 string x %-.7s
->>>>>>>>504 ubyte&0xDF >0
+>>>>>>>>504 ubyte&0xDF >0
>>>>>>>>>504 string x \b%-.1s
->>>>>>505 ubyte&0xDF >0
+>>>>>>505 ubyte&0xDF >0
>>>>>>>505 string x \b.%-.3s
#IO.SYS
>>>>>>472 ubyte&0xDF >0 or
>>>>>>>472 string x \b %-.2s
->>>>>>>>474 ubyte&0xDF >0
+>>>>>>>>474 ubyte&0xDF >0
>>>>>>>>>474 string x \b%-.6s
->>>>>>>480 ubyte&0xDF >0
+>>>>>>>480 ubyte&0xDF >0
>>>>>>>>480 string x \b.%-.3s
#MSDOS.SYS
>>>>>>>483 ubyte&0xDF >0 \b+
>>>>>>>>483 string x \b%-.5s
->>>>>>>>>488 ubyte&0xDF >0
+>>>>>>>>>488 ubyte&0xDF >0
>>>>>>>>>>488 string x \b%-.3s
->>>>>>>>491 ubyte&0xDF >0
+>>>>>>>>491 ubyte&0xDF >0
>>>>>>>>>491 string x \b.%-.3s
#
->>389 string Ungueltiges\ System\ \xFF\r\n
->>>411 string E/A-Fehler\ \ \ \ \xFF\r\n
->>>>428 string Datentraeger\ wechseln\ und\
+>>389 string Ungueltiges\ System\ \xFF\r\n
+>>>411 string E/A-Fehler\ \ \ \ \xFF\r\n
+>>>>428 string Datentraeger\ wechseln\ und\040
>>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
>>>>>>472 string x %-.2s
->>>>>>>474 ubyte&0xDF >0
+>>>>>>>474 ubyte&0xDF >0
>>>>>>>>474 string x \b%-.5s
->>>>>>>>479 ubyte&0xDF >0
+>>>>>>>>479 ubyte&0xDF >0
>>>>>>>>>479 string x \b%-.1s
->>>>>>480 ubyte&0xDF >0
+>>>>>>480 ubyte&0xDF >0
>>>>>>>480 string x \b.%-.3s
>>>>>>483 ubyte&0xDF >0 \b+
>>>>>>>483 string x \b%-.5s
->>>>>>>488 ubyte&0xDF >0
+>>>>>>>488 ubyte&0xDF >0
>>>>>>>>488 string x \b%-.2s
->>>>>>>>490 ubyte&0xDF >0
+>>>>>>>>490 ubyte&0xDF >0
>>>>>>>>>490 string x \b%-.1s
->>>>>>>491 ubyte&0xDF >0
+>>>>>>>491 ubyte&0xDF >0
>>>>>>>>491 string x \b.%-.3s
>479 ubyte&0xDF >0
->>416 string Kein\ System\ oder\
->>>433 string Laufwerksfehler
+>>416 string Kein\ System\ oder\040
+>>>433 string Laufwerksfehler
>>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german)
#IO.SYS
>>>>>479 string x \b %-.2s
->>>>>>481 ubyte&0xDF >0
+>>>>>>481 ubyte&0xDF >0
>>>>>>>481 string x \b%-.6s
->>>>>487 ubyte&0xDF >0
+>>>>>487 ubyte&0xDF >0
>>>>>>487 string x \b.%-.3s
#MSDOS.SYS
>>>>>>490 ubyte&0xDF >0 \b+
>>>>>>>490 string x \b%-.5s
->>>>>>>>495 ubyte&0xDF >0
+>>>>>>>>495 ubyte&0xDF >0
>>>>>>>>>495 string x \b%-.3s
->>>>>>>498 ubyte&0xDF >0
+>>>>>>>498 ubyte&0xDF >0
>>>>>>>>498 string x \b.%-.3s
#
->376 search/41 Non-System\ disk\ or\
->>395 search/41 disk\ error\r
->>>407 search/41 Replace\ and\
+>376 search/41 Non-System\ disk\ or\040
+>>395 search/41 disk\ error\r
+>>>407 search/41 Replace\ and\040
>>>>419 search/41 press\ \b,
>>>>419 search/41 strike\ \b, old
>>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader
#449 Disk\ Boot\ failure\r MS 3.21
#466 Boot\ Failure\r MS 3.30
->>>>>468 search/18 \0
+>>>>>468 search/18 \0
#IO.SYS,IBMBIO.COM
>>>>>>&0 string x \b %-.2s
->>>>>>>&-20 ubyte&0xDF >0
+>>>>>>>&-20 ubyte&0xDF >0
>>>>>>>>&-1 string x \b%-.4s
->>>>>>>>>&-16 ubyte&0xDF >0
+>>>>>>>>>&-16 ubyte&0xDF >0
>>>>>>>>>>&-1 string x \b%-.2s
>>>>>>&8 ubyte&0xDF >0 \b.
>>>>>>>&-1 string x \b%-.3s
@@ -892,125 +893,125 @@
#MSDOS.SYS,IBMDOS.COM
>>>>>>&11 ubyte&0xDF >0 \b+
>>>>>>>&-1 string x \b%-.5s
->>>>>>>>&-6 ubyte&0xDF >0
+>>>>>>>>&-6 ubyte&0xDF >0
>>>>>>>>>&-1 string x \b%-.1s
->>>>>>>>>>&-5 ubyte&0xDF >0
+>>>>>>>>>>&-5 ubyte&0xDF >0
>>>>>>>>>>>&-1 string x \b%-.2s
>>>>>>>&7 ubyte&0xDF >0 \b.
>>>>>>>>&-1 string x \b%-.3s
>441 string Cannot\ load\ from\ harddisk.\n\r
->>469 string Insert\ Systemdisk\
+>>469 string Insert\ Systemdisk\040
>>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader
-#>43 string \224R-LOADER\ \ SYS =label
+#>43 string \224R-LOADER\ \ SYS =label
>54 string SYS
>>324 string VASKK
>>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS)
#
->98 string Press\ a\ key\ to\ retry\0\r
->>120 string Cannot\ find\ file\ \0\r
->>>139 string Disk\ read\ error\0\r
+>98 string Press\ a\ key\ to\ retry\0\r
+>>120 string Cannot\ find\ file\ \0\r
+>>>139 string Disk\ read\ error\0\r
>>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader
#DRBIOS.SYS
->>>>>44 ubyte&0xDF >0
+>>>>>44 ubyte&0xDF >0
>>>>>>44 string x \b %-.6s
->>>>>>>50 ubyte&0xDF >0
+>>>>>>>50 ubyte&0xDF >0
>>>>>>>>50 string x \b%-.2s
->>>>>>52 ubyte&0xDF >0
+>>>>>>52 ubyte&0xDF >0
>>>>>>>52 string x \b.%-.3s
#
->70 string IBMBIO\ \ COM
->>472 string Cannot\ load\ DOS!\
+>70 string IBMBIO\ \ COM
+>>472 string Cannot\ load\ DOS!\040
>>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader
->>471 string Cannot\ load\ DOS\
+>>471 string Cannot\ load\ DOS\040
>>487 string press\ key\ to\ retry \b, Open-DOS Bootloader
#??
->444 string KERNEL\ \ SYS
+>444 string KERNEL\ \ SYS
>>314 string BOOT\ error! \b, FREE-DOS Bootloader
->499 string KERNEL\ \ SYS
+>499 string KERNEL\ \ SYS
>>305 string BOOT\ err!\0 \b, Free-DOS Bootloader
->449 string KERNEL\ \ SYS
+>449 string KERNEL\ \ SYS
>>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader
#
->449 string Loading\ FreeDOS
+>449 string Loading\ FreeDOS
>>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader
->>>497 ubyte&0xDF >0
+>>>497 ubyte&0xDF >0
>>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
+>>>>>503 ubyte&0xDF >0
>>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
+>>>>>>>504 ubyte&0xDF >0
>>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
+>>>>505 ubyte&0xDF >0
>>>>>505 string x \b.%-.3s
#
>331 string Error!.0 \b, FREE-DOS 1.0 bootloader
#
->125 string Loading\ FreeDOS...\r
+>125 string Loading\ FreeDOS...\r
>>311 string BOOT\ error!\r \b, FREE-DOS bootloader
->>>441 ubyte&0xDF >0
+>>>441 ubyte&0xDF >0
>>>>441 string x \b %-.6s
->>>>>447 ubyte&0xDF >0
+>>>>>447 ubyte&0xDF >0
>>>>>>447 string x \b%-.1s
->>>>>>>448 ubyte&0xDF >0
+>>>>>>>448 ubyte&0xDF >0
>>>>>>>>448 string x \b%-.1s
->>>>449 ubyte&0xDF >0
+>>>>449 ubyte&0xDF >0
>>>>>449 string x \b.%-.3s
->124 string FreeDOS\0
+>124 string FreeDOS\0
>>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader
# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
->>>497 ubyte&0xDF >0
+>>>497 ubyte&0xDF >0
>>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
+>>>>>503 ubyte&0xDF >0
>>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
+>>>>>>>504 ubyte&0xDF >0
>>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
+>>>>505 ubyte&0xDF >0
>>>>>505 string x \b.%-.3s
>>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader
->>>497 ubyte&0xDF >0
+>>>497 ubyte&0xDF >0
>>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
+>>>>>503 ubyte&0xDF >0
>>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
+>>>>>>>504 ubyte&0xDF >0
>>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
+>>>>505 ubyte&0xDF >0
>>>>>505 string x \b.%-.3s
>>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader
->>>497 ubyte&0xDF >0
+>>>497 ubyte&0xDF >0
>>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
+>>>>>503 ubyte&0xDF >0
>>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
+>>>>>>>504 ubyte&0xDF >0
>>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
+>>>>505 ubyte&0xDF >0
>>>>>505 string x \b.%-.3s
->336 string Error!\
+>336 string Error!\040
>>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader
->>>497 ubyte&0xDF >0
+>>>497 ubyte&0xDF >0
>>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
+>>>>>503 ubyte&0xDF >0
>>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
+>>>>>>>504 ubyte&0xDF >0
>>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
+>>>>505 ubyte&0xDF >0
>>>>>505 string x \b.%-.3s
# added by Joerg Jenderek
# http://www.visopsys.org/
# http://partitionlogic.org.uk/
# OEM-ID=Visopsys
->478 ulelong 0
->>(1.b+326) string I/O\ Error\ reading\
->>>(1.b+344) string Visopsys\ loader\r
+>478 ulelong 0
+>>(1.b+326) string I/O\ Error\ reading\040
+>>>(1.b+344) string Visopsys\ loader\r
>>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader
# http://alexfru.chat.ru/epm.html#bootprog
->494 ubyte >0x4D
->>495 string >E
->>>495 string <S
+>494 ubyte >0x4D
+>>495 string >E
+>>>495 string <S
#OEM-ID is not reliable
->>>>3 string BootProg
+>>>>3 string BootProg
# It just looks for a program file name at the root directory
# and loads corresponding file with following execution.
# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
->>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader
+>>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader
>>>>>499 use DOS-filename
#If the boot sector fails to read any other sector,
#it prints a very short message ("RE") to the screen and hangs the computer.
@@ -1024,7 +1025,7 @@
# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
# and http://en.wikipedia.org/wiki/File_Allocation_Table#FS_Information_Sector
->0 string RRaA
+>0 string RRaA
>>0x1E4 string rrAa \b, FSInfosector
#>>0x1FC uleshort =0 SHOULD BE ZERO
>>>0x1E8 ulelong <0xffffffff \b, %u free clusters
@@ -1031,19 +1032,19 @@
>>>0x1EC ulelong <0xffffffff \b, last allocated cluster %u
# updated by Joerg Jenderek at Sep 2007
->3 ubyte 0
+>3 ubyte 0
#no active flag
->>446 ubyte 0
+>>446 ubyte 0
# partition 1 not empty
->>>450 ubyte >0
+>>>450 ubyte >0
# partitions 3,4 empty
->>>>482 ubyte 0
->>>>>498 ubyte 0
+>>>>482 ubyte 0
+>>>>>498 ubyte 0
# partition 2 ID=0,5,15
->>>>>>466 ubyte <0x10
+>>>>>>466 ubyte <0x10
>>>>>>>466 ubyte 0x05 \b, extended partition table
>>>>>>>466 ubyte 0x0F \b, extended partition table (LBA)
->>>>>>>466 ubyte 0x0 \b, extended partition table (last)
+>>>>>>>466 ubyte 0x0 \b, extended partition table (last)
# DOS x86 sector separated and moved from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
@@ -1053,35 +1054,35 @@
# Print the DOS filenames from directory entry form with 8 right space padded bytes + 3 bytes for extension
# like IO.SYS. MSDOS.SYS , KERNEL.SYS , DRBIO.SYS
0 name DOS-filename
-# space=0x20 (00100000b) means empty
->0 ubyte&0xDF >0
+# space=0x20 (00100000b) means empty
+>0 ubyte&0xDF >0
>>0 ubyte x \b%c
->>>1 ubyte&0xDF >0
+>>>1 ubyte&0xDF >0
>>>>1 ubyte x \b%c
->>>>>2 ubyte&0xDF >0
+>>>>>2 ubyte&0xDF >0
>>>>>>2 ubyte x \b%c
->>>>>>>3 ubyte&0xDF >0
+>>>>>>>3 ubyte&0xDF >0
>>>>>>>>3 ubyte x \b%c
->>>>>>>>>4 ubyte&0xDF >0
+>>>>>>>>>4 ubyte&0xDF >0
>>>>>>>>>>4 ubyte x \b%c
->>>>>>>>>>>5 ubyte&0xDF >0
+>>>>>>>>>>>5 ubyte&0xDF >0
>>>>>>>>>>>>5 ubyte x \b%c
->>>>>>>>>>>>>6 ubyte&0xDF >0
+>>>>>>>>>>>>>6 ubyte&0xDF >0
>>>>>>>>>>>>>>6 ubyte x \b%c
->>>>>>>>>>>>>>>7 ubyte&0xDF >0
+>>>>>>>>>>>>>>>7 ubyte&0xDF >0
>>>>>>>>>>>>>>>>7 ubyte x \b%c
# DOS filename extension
>>8 ubyte&0xDF >0 \b.
>>>8 ubyte x \b%c
->>>>9 ubyte&0xDF >0
+>>>>9 ubyte&0xDF >0
>>>>>9 ubyte x \b%c
->>>>>>10 ubyte&0xDF >0
+>>>>>>10 ubyte&0xDF >0
>>>>>>>10 ubyte x \b%c
# Print 2 following DOS filenames from directory entry form
# like IO.SYS+MSDOS.SYS or ibmbio.com+ibmdos.com
0 name 2xDOS-filename
# display 1 space
->0 ubyte x \b
+>0 ubyte x \b
>0 use DOS-filename
>11 ubyte x \b+
>11 use DOS-filename
@@ -1100,10 +1101,10 @@
# partition type ID > 0
>4 ubyte >0
# active flag 0
->>0 ubyte 0
+>>0 ubyte 0
>>>0 use partition-entry
-# active flag 0x80, 0x81, ...
->>0 ubyte >0x7F
+# active flag 0x80, 0x81, ...
+>>0 ubyte >0x7F
>>>0 use partition-entry
# Print entry of partition table
0 name partition-entry
@@ -1135,7 +1136,7 @@
# sector
>1 ubyte&0x3F x \b,%u
-# FATX
+# FATX
0 string FATX FATX filesystem data
# romfs filesystems - Juan Cespedes <cespedes at debian.org>
@@ -1156,7 +1157,7 @@
# http://syslinux.zytor.com/iso.php
# tested with versions 1.47,1.48,1.49,1.50,1.62,1.76,2.00,2.10;3.00,3.11,3.31,;3.70,3.71,3.73,3.75,3.80,3.82,3.84,3.86,4.01,4.03 and 4.05
# assembler instructions: cli;jmp 0:7Cyy (yy=0x40,0x5e,0x6c,0x6e,0x77);nop;nop
-0 ulequad&0x909000007cc0eafa 0x909000007c40eafa
+0 ulequad&0x909000007cc0eafa 0x909000007c40eafa
>631 search/689 ISOLINUX\ isolinux Loader
>>&0 string x (version %-4.4s)
# http://syslinux.zytor.com/pxe.php
@@ -1173,43 +1174,43 @@
>11 string x (version %-4.4s)
# syslinux updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
# assembler instructions: jmp yy (yy=0x3c,0x58);nop;"SYSLINUX"
-0 ulelong&0x80909bEB 0x009018EB
+0 ulelong&0x80909bEB 0x009018EB
# OEM-ID not always "SYSLINUX"
->434 search/47 Boot\ failed
-# followed by \r\n\0 or :\
+>434 search/47 Boot\ failed
+# followed by \r\n\0 or :\
>>482 search/132 \0LDLINUX\ SYS Syslinux bootloader (version 2.13 or older)
>>1 ubyte 0x58 Syslinux bootloader (version 3.0-3.9)
->459 search/30 Boot\ error\r\n\0
+>459 search/30 Boot\ error\r\n\0
>>1 ubyte 0x58 Syslinux bootloader (version 3.10 or newer)
# SYSLINUX MBR updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
# assembler instructions: mov di,0600h;mov cx,0100h
-16 search/4 \xbf\x00\x06\xb9\x00\x01
+16 search/4 \xbf\x00\x06\xb9\x00\x01
# to display SYSLINUX MBR (36) before old DOS/MBR boot sector one with partition table (strength=50+21)
!:strength +36
->94 search/249 Missing\ operating\ system
+>94 search/249 Missing\ operating\ system
# followed by \r for versions older 3.35 , .\r for versions newer 3.52 and point for other
# skip Ranish MBR
->>408 search/4 HD1/\0
->>408 default x
+>>408 search/4 HD1/\0
+>>408 default x
>>>250 search/118 \0Operating\ system\ load SYSLINUX MBR
# followed by "ing " or space
->>>>292 search/98 error
+>>>>292 search/98 error
>>>>>&0 string \r (version 3.35 or older)
>>>>>&0 string .\r (version 3.52 or newer)
>>>>>&0 default x (version 3.36-3.51 )
>368 search/106 \0Disk\ error\ on\ boot\r\n SYSLINUX GPT-MBR
->>156 search/10 \0Boot\ partition\ not\ found\r\n
+>>156 search/10 \0Boot\ partition\ not\ found\r\n
>>>270 search/10 \0OS\ not\ bootable\r\n (version 3.86 or older)
->>174 search/10 \0Missing\ OS\r\n
+>>174 search/10 \0Missing\ OS\r\n
>>>189 search/10 \0Multiple\ active\ partitions\r\n (version 4.00 or newer)
# SYSLINUX END
# NetBSD mbr variants (master-boot-code version 1.22) added by Joerg Jenderek at Nov 2012
# assembler instructions: xor ax,ax;mov ax,ss;mov sp,0x7c00;mov ax,
-0 ubequad 0x31c08ed0bc007c8e
+0 ubequad 0x31c08ed0bc007c8e
# mbr_bootsel magic before partition table not reliable with small ipl fragments
-#>444 uleshort 0xb5e1
->0004 uleshort x
+#>444 uleshort 0xb5e1
+>0004 uleshort x
# ERRorTeXT
>>181 search/166 Error\ \0\r\n NetBSD mbr
# NT Drive Serial Number http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DS
@@ -1216,14 +1217,14 @@
>>>0x1B8 ubelong >0 \b,Serial 0x%-.8x
# BOOTSEL definitions contains assembler instructions: int 0x13;pop dx;push dx;push dx
>>>0xbb search/71 \xcd\x13\x5a\x52\x52 \b,bootselector
-# BOOT_EXTENDED definitions contains assembler instructions:
+# BOOT_EXTENDED definitions contains assembler instructions:
# xchg ecx,edx;addl ecx,edx;movw lba_info,si;movb 0x42,ah;pop dx;push dx;int 0x13
>>>0x96 search/1 \x66\x87\xca\x66\x01\xca\x66\x89\x16\x3a\x07\xbe\x32\x07\xb4\x42\x5a\x52\xcd\x13 \b,boot extended
# COM_PORT_VAL definitions contains assembler instructions: outb al,dx;add 5,dl;inb %dx;test 0x40,al
>>>0x130 search/55 \xee\x80\xc2\x05\xec\xa8\x40 \b,serial IO
# not TERSE_ERROR
->>>196 search/106 No\ active\ partition\0
->>>>&0 string Disk\ read\ error\0
+>>>196 search/106 No\ active\ partition\0
+>>>>&0 string Disk\ read\ error\0
>>>>>&0 string No\ operating\ system\0 \b,verbose
# not NO_CHS definitions contains assembler instructions: pop dx;push dx;movb $8,ah;int0x13
>>>0x7d search/7 \x5a\x52\xb4\x08\xcd\x13 \b,CHS
@@ -1230,30 +1231,31 @@
# not NO_LBA_CHECK definitions contains assembler instructions: movw 0x55aa,bx;movb 0x41,ah;pop dx;push dx;int 0x13
>>>0xa4 search/84 \xbb\xaa\x55\xb4\x41\x5a\x52\xcd\x13 \b,LBA-check
# assembler instructions: movw nametab,bx
->>>0x26 search/21 \xBB\x94\x07
+>>>0x26 search/21 \xBB\x94\x07
# not NO_BANNER definitions contains assembler instructions: mov banner,si;call message_crlf
->>>>&-9 ubequad&0xBE00f0E800febb94 0xBE0000E80000bb94
->>>>>181 search/166 Error\ \0
+>>>>&-9 ubequad&0xBE00f0E800febb94 0xBE0000E80000bb94
+>>>>>181 search/166 Error\ \0
# "a: disk" , "Fn: diskn" or "NetBSD MBR boot"
>>>>>>&3 string x \b,"%s"
+>>>446 use partition-table
# Andrea Mazzoleni AdvanceCD mbr loader of http://advancemame.sourceforge.net/boot-readme.html
# added by Joerg Jenderek at Nov 2012 for versions 1.3 - 1.4
# assembler instructions: jmp short 0x58;nop;ASCII
-0 ubequad&0xeb58908000000000 0xeb58900000000000
+0 ubequad&0xeb58908000000000 0xeb58900000000000
# assembler instructions: cli;xor ax,ax;mov ds,ax;mov es,ax;mov ss,
->(1.b+2) ubequad 0xfa31c08ed88ec08e
+>(1.b+2) ubequad 0xfa31c08ed88ec08e
# Error messages at end of code
->>376 string No\ operating\ system\r\n\0
->>>398 string Disk\ error\r\n\0FDD\0HDD\0
+>>376 string No\ operating\ system\r\n\0
+>>>398 string Disk\ error\r\n\0FDD\0HDD\0
>>>>419 string \ EBIOS\r\n\0 AdvanceMAME mbr
-# Neil Turton mbr loader variant of http://www.chiark.greenend.org.uk/~neilt/mbr/
+# Neil Turton mbr loader variant of http://www.chiark.greenend.org.uk/~neilt/mbr/
# added by Joerg Jenderek at Mar 2011 for versions 1.0.0 - 1.1.11
# for 1st version assembler instructions: cld;xor ax,ax;mov DS,ax;MOV ES,AX;mov SI,
# or cld;xor ax,ax;mov SS,ax;XOR SP,SP;mov DS,
-0 ulequad&0xcE1b40D48EC031FC 0x8E0000D08EC031FC
+0 ulequad&0xcE1b40D48EC031FC 0x8E0000D08EC031FC
# pointer to the data starting with Neil Turton signature string
->(0x1BC.s) string NDTmbr
+>(0x1BC.s) string NDTmbr
>>&-14 string 1234F\0 Turton mbr (
# parameters also viewed by install-mbr --list
>>>(0x1BC.s+7) ubyte x \b%u<=
@@ -1267,23 +1269,23 @@
#0x0~1,0x1~2,...,0x3~4,0x4~F,0x7~D default boot
#>>>(0x1BC.s+11) ubyte x \b,cfg_def 0x%x
# for older versions
->>>(0x1BC.s+9) ubyte <2
+>>>(0x1BC.s+9) ubyte <2
#>>>>(0x1BC.s+12) ubyte 18 \b,%hhu/18 seconds
>>>>(0x1BC.s+12) ubyte !18 \b,%u/18 seconds
# floppy A: or B:
>>>>(0x1BC.s+13) ubyte <2 \b,floppy 0x%x
->>>>(0x1BC.s+13) ubyte >1
+>>>>(0x1BC.s+13) ubyte >1
# 1st hard disc
#>>>>>(0x1BC.s+13) ubyte 0x80 \b,drive 0x%x
# not 1st hard disc
>>>>>(0x1BC.s+13) ubyte !0x80 \b,drive 0x%x
# for version >= 2 maximal timeout can be 65534
->>>(0x1BC.s+9) ubyte >1
+>>>(0x1BC.s+9) ubyte >1
#>>>>(0x1BC.s+12) uleshort 18 \b,%u/18 seconds
>>>>(0x1BC.s+12) uleshort !18 \b,%u/18 seconds
# floppy A: or B:
>>>>(0x1BC.s+14) ubyte <2 \b,floppy 0x%x
->>>>(0x1BC.s+14) ubyte >1
+>>>>(0x1BC.s+14) ubyte >1
# 1st hard disc
#>>>>>(0x1BC.s+14) ubyte 0x80 \b,drive 0x%x
# not 1st hard disc
@@ -1295,14 +1297,14 @@
# grub-1.94/kern/i386/pc/startup.S
# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
# usual values are marked with comments to get only informations of strange GRUB loaders
-0x200 uleshort 0x70EA
+0x200 uleshort 0x70EA
# found only version 3.{1,2}
->0x206 ubeshort >0x0300
+>0x206 ubeshort >0x0300
# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
->>0x212 ubyte >0x29
->>>0x213 ubyte >0x29
+>>0x212 ubyte >0x29
+>>>0x213 ubyte >0x29
# not iso9660_stage1_5
-#>>>0 ulelong&0x00BE5652 0x00BE5652
+#>>>0 ulelong&0x00BE5652 0x00BE5652
>>>>0x213 ubyte >0x29 GRand Unified Bootloader
# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
>>>>0x217 ubyte 0xFF stage1_5
@@ -1314,7 +1316,7 @@
#>>>>0x208 ulelong =0xffffff \b, %lu (default)
>>>>0x208 ulelong >0xffffff \b, installed partition %u
# GRUB 0.5.95 unofficial
->>>>0x20C ulelong&0x2E300000 0x2E300000
+>>>>0x20C ulelong&0x2E300000 0x2E300000
# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs
>>>>>0x20C ubyte x \b, identifier 0x%x
#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default)
@@ -1322,17 +1324,17 @@
# GRUB version as string
>>>>>0x20E string >\0 \b, GRUB version %-s
# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
->>>>>>0x215 ulong 0xffffffff
+>>>>>>0x215 ulong 0xffffffff
>>>>>>>0x219 string >\0 \b, configuration file %-s
->>>>>>0x215 ulong !0xffffffff
+>>>>>>0x215 ulong !0xffffffff
>>>>>>>0x215 string >\0 \b, configuration file %-s
# newer GRUB versions
->>>>0x20C ulelong&0x2E300000 !0x2E300000
+>>>>0x20C ulelong&0x2E300000 !0x2E300000
##>>>>>0x20C ulelong =0 \b, saved entry %d (usual)
>>>>>0x20C ulelong >0 \b, saved entry %d
# for 1.94 contains kernel image size
# for 0.93,0.94,0.96,0.97
-# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2
+# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2
>>>>>0x210 ubyte x \b, identifier 0x%x
# The flag for LBA forcing is in most cases 0
#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default)
@@ -1340,9 +1342,9 @@
# GRUB version as string
>>>>>0x212 string >\0 \b, GRUB version %-s
# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
->>>>>0x217 ulong 0xffffffff
+>>>>>0x217 ulong 0xffffffff
>>>>>>0x21b string >\0 \b, configuration file %-s
->>>>>0x217 ulong !0xffffffff
+>>>>>0x217 ulong !0xffffffff
>>>>>>0x217 string >\0 \b, configuration file %-s
# DOS x86 sector updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
@@ -1353,18 +1355,19 @@
# minimal short forward jump found 0x29 for bootloaders or 0x0
# maximal short forward jump is 0x7f
# OEM-ID is empty or contain readable bytes
-0 ulelong&0x804000E9 0x000000E9
+0 ulelong&0x804000E9 0x000000E9
+!:strength +60
# mtools-3.9.8/msdos.h
# usual values are marked with comments to get only informations of strange FAT systems
# valid sectorsize must be a power of 2 from 32 to 32768
->11 uleshort&0xf001f 0
->>11 uleshort <32769
->>>11 uleshort >31
->>>>21 ubyte&0xf0 0xF0
->>>>>0 ubyte 0xEB
+>11 uleshort&0x001f 0
+>>11 uleshort <32769
+>>>11 uleshort >31
+>>>>21 ubyte&0xf0 0xF0
+>>>>>0 ubyte 0xEB DOS/MBR boot sector
>>>>>>1 ubyte x \b, code offset 0x%x+2
->>>>>0 ubyte 0xE9
->>>>>>1 uleshort x \b, code offset 0x%x+2
+>>>>>0 ubyte 0xE9
+>>>>>>1 uleshort x \b, code offset 0x%x+3
>>>>>3 string >\0 \b, OEM-ID "%-.8s"
#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
>>>>>>8 string IHC \b cached by Windows 9M
@@ -1373,10 +1376,11 @@
>>>>>11 uleshort <512 \b, Bytes/sector %u
>>>>>13 ubyte >1 \b, sectors/cluster %u
#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies)
->>>>>82 string FAT32
+# for lazy FAT32 implementation like Transcend digital photo frame PF830
+>>>>>82 string/c fat32
>>>>>>14 uleshort !32 \b, reserved sectors %u
#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32)
->>>>>82 string !FAT32
+>>>>>82 string/c !fat32
>>>>>>14 uleshort >1 \b, reserved sectors %u
#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16)
#>>>>>>14 uleshort 0 \b, reserved sectors %u (usual NTFS)
@@ -1386,7 +1390,7 @@
>>>>>16 ubyte >0
>>>>>17 uleshort >0 \b, root entries %u
#>>>>>17 uleshort =0 \b, root entries %hu=0 (usual Fat32)
->>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
+>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
#>>>>>19 uleshort =0 \b, sectors %hu=0 (usual Fat32)
>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x
#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy)
@@ -1398,25 +1402,30 @@
#>>>>>26 ubyte =2 \b, heads %u (usual floppy)
>>>>>26 ubyte =1 \b, heads %u
# valid only for sector sizes with more then 32 Bytes
->>>>>11 uleshort >32
-# skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
->>>>>>38 ubyte !0x70
+>>>>>11 uleshort >32
+# http://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Extended_BIOS_Parameter_Block
+# skip for values 2,2Ah,70h,73h,DFh
+# and continue for extended boot signature values 0,28h,29h,80h
+>>>>>>38 ubyte&0x56 =0
>>>>>>>28 ulelong >0 \b, hidden sectors %u
#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy)
->>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
+>>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
-# FAT<32 bit specific
->>>>>>>82 string !FAT32
+# FAT<32 bit specific
+>>>>>>>82 string/c !fat32
#>>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
#>>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy)
->>>>>>>>36 ubyte !0x80
+>>>>>>>>36 ubyte !0x80
>>>>>>>>>36 ubyte !0 \b, physical drive 0x%x
+# VGA-copy CRC or
+# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
>>>>>>>>37 ubyte >0 \b, reserved 0x%x
#>>>>>>>>37 ubyte =0 \b, reserved 0x%x
-# value is 0x80 for NTFS
+# extended boot signatur value is 0x80 for NTFS, 0x28 or 0x29 for others
>>>>>>>>38 ubyte !0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>>>38 ubyte&0xFE =0x28
+>>>>>>>>>39 ulelong x \b, serial number 0x%x
>>>>>>>>38 ubyte =0x29
->>>>>>>>>39 ulelong x \b, serial number 0x%x
>>>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
>>>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
>>>>>>>>>43 string =NO\ NAME \b, unlabeled
@@ -1426,11 +1435,35 @@
# if it is small enough FAT is 12 bit, if it is too big enough FAT is 32 bit,
# otherwise FAT is 16 bit.
# http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-fat-widths.html
->>>>>>54 string FAT \b, FAT
->>>>>>>54 string FAT12 \b (12 bit)
->>>>>>>54 string FAT16 \b (16 bit)
+>>>>>82 string/c !fat32
+>>>>>>54 string FAT12 \b, FAT (12 bit)
+>>>>>>54 string FAT16 \b, FAT (16 bit)
+>>>>>>54 default x
+# determinate FAT bit size by media descriptor
+# small floppies implies FAT12
+>>>>>>>21 ubyte <0xF0 \b, FAT (12 bit by descriptor)
+# with media descriptor F0h floppy or maybe superfloppy with FAT16
+>>>>>>>21 ubyte =0xF0
+# superfloppy (many sectors) implies FAT16
+>>>>>>>>32 ulelong >0xFFFF \b, FAT (16 bit by descriptor+sectors)
+# no superfloppy with media descriptor F0h implies FAT12
+>>>>>>>>32 default x \b, FAT (12 bit by descriptor+sectors)
+# with media descriptor F8h floppy or hard disc with FAT12 or FAT16
+>>>>>>>21 ubyte =0xF8
+# 360 KiB with media descriptor F8h, 9 sectors per track ,single sided floppy implies FAT12
+>>>>>>>>19 ubequad 0xd002f80300090001 \b, FAT (12 bit by descriptor+geometry)
+# hard disc with FAT12 or FAT16
+>>>>>>>>19 default x \b, FAT (1Y bit by descriptor)
+# with media descriptor FAh floppy, RAM disc with FAT12 or FAT16 or Tandy hard disc
+>>>>>>>21 ubyte =0xFA
+# 320 KiB with media descriptor FAh, 8 sectors per track ,single sided floppy implies FAT12
+>>>>>>>>19 ubequad 0x8002fa0200080001 \b, FAT (12 bit by descriptor+geometry)
+# RAM disc with FAT12 or FAT16 or Tandy hard disc
+>>>>>>>>19 default x \b, FAT (1Y bit by descriptor)
+# others are floppy
+>>>>>>>21 default x \b, FAT (12 bit by descriptor)
# FAT32 bit specific
->>>>>82 string FAT32 \b, FAT (32 bit)
+>>>>>82 string/c fat32 \b, FAT (32 bit)
>>>>>>36 ulelong x \b, sectors/FAT %u
# http://technet.microsoft.com/en-us/library/cc977221.aspx
>>>>>>40 uleshort >0 \b, extension flags 0x%x
@@ -1443,17 +1476,20 @@
>>>>>>48 uleshort >1 \b, infoSector %u
#>>>>>>48 uleshort =1 \b, infoSector %u (usual)
>>>>>>48 uleshort <1 \b, infoSector %u
->>>>>>50 uleshort >6 \b, Backup boot sector %u
-#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
->>>>>>50 uleshort <6 \b, Backup boot sector %u
+# 0 or 0xFFFF instead of usual 6 means no backup sector
+>>>>>>50 uleshort =0xFFFF \b, no Backup boot sector
+>>>>>>50 uleshort =0 \b, no Backup boot sector
+#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
+>>>>>>50 default x
+>>>>>>>50 uleshort x \b, Backup boot sector %u
# corrected by Joerg Jenderek at Feb 2011 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
>>>>>>52 ulelong >0 \b, reserved1 0x%x
>>>>>>56 ulelong >0 \b, reserved2 0x%x
>>>>>>60 ulelong >0 \b, reserved3 0x%x
-# same structure as FAT1X
+# same structure as FAT1X
#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk)
#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
->>>>>>64 ubyte !0x80
+>>>>>>64 ubyte !0x80
>>>>>>>64 ubyte >0 \b, physical drive 0x%x
# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
>>>>>>65 ubyte >0 \b, reserved 0x%x
@@ -1464,10 +1500,10 @@
>>>>>>>71 string >NO\ NAME \b, label: "%11.11s"
>>>>>>>71 string =NO\ NAME \b, unlabeled
# additional tests for floppy image added by Joerg Jenderek
-# no fixed disk
->>>>>21 ubyte !0xF8
+# no fixed disk
+>>>>>21 ubyte !0xF8
# floppy media with 12 bit FAT
->>>>>>54 string !FAT16
+>>>>>>54 string !FAT16
# test for FAT after bootsector
>>>>>>>(11.s) ulelong&0x00ffffF0 0x00ffffF0 \b, followed by FAT
# floppy image
@@ -1475,11 +1511,11 @@
# NTFS specific added by Joerg Jenderek at Mar 2011 according to http://thestarman.pcministry.com/asm/mbr/NTFSBR.htm
# and http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/bios-parameter-block.html
# 0 FATs
->>>>>16 ubyte =0
+>>>>>16 ubyte =0
# 0 root entries
->>>>>>17 uleshort =0
+>>>>>>17 uleshort =0
# 0 DOS sectors
->>>>>>>19 uleshort =0
+>>>>>>>19 uleshort =0
# 0 sectors/FAT
# dos < 4.0 BootSector value found is 0x80
#38 ubyte =0x80 \b, dos < 4.0 BootSector (0x%x)
@@ -1490,13 +1526,13 @@
>>>>>>>>>48 ulequad >0 \b, $MFT start cluster %lld
>>>>>>>>>56 ulequad >0 \b, $MFTMirror start cluster %lld
# Values 0 to 127 represent MFT record sizes of 0 to 127 clusters.
-# Values 128 to 255 represent MFT record sizes of 2^(256-N) bytes.
->>>>>>>>>64 lelong <256
+# Values 128 to 255 represent MFT record sizes of 2^(256-N) bytes.
+>>>>>>>>>64 lelong <256
>>>>>>>>>>64 lelong <128 \b, clusters/RecordSegment %d
>>>>>>>>>>64 ubyte >127 \b, bytes/RecordSegment 2^(-1*%i)
# Values 0 to 127 represent index block sizes of 0 to 127 clusters.
# Values 128 to 255 represent index block sizes of 2^(256-N) byte
->>>>>>>>>68 ulelong <256
+>>>>>>>>>68 ulelong <256
>>>>>>>>>>68 ulelong <128 \b, clusters/index block %d
#>>>>>>>>>>68 ulelong >127 \b, bytes/index block 2^(256-%d)
>>>>>>>>>>68 ubyte >127 \b, bytes/index block 2^(-1*%i)
@@ -1503,20 +1539,30 @@
>>>>>>>>>72 ulequad x \b, serial number 0%llx
>>>>>>>>>80 ulelong >0 \b, checksum 0x%x
#>>>>>>>>>80 ulelong =0 \b, checksum 0x%x=0 (usual)
->>>>>>>>>0x258 ulelong&0x00009090 =0x00009090
->>>>>>>>>>&-92 indirect x \b; contains
+>>>>>>>>>0x258 ulelong&0x00009090 =0x00009090
+>>>>>>>>>>&-92 indirect x \b; contains
# For 2nd NTFS sector added by Joerg Jenderek at Jan 2013
# http://thestarman.pcministry.com/asm/mbr/NTFSbrHexEd.htm
# unused assembler instructions JMP y2;NOP;NOP
-0x056 ulelong&0xFFFF0FFF 0x909002EB
+0x056 ulelong&0xFFFF0FFF 0x909002EB
# unicode loadername terminated by CTRL-D
->(0.s*2) ulelong&0xFFFFFF00 0x00040000
+>(0.s*2) ulelong&0xFFFFFF00 0x00040000
# loadernames are NTLDR,CMLDR,PELDR,$LDR$ or BOOTMGR
>>0x002 lestring16 x Microsoft Windows XP/VISTA bootloader %-5.5s
->>0x12 string $
+>>0x12 string $
>>>0x0c lestring16 x \b%-2.2s
### DOS,NTFS boot sectors end
+# ntfsclone-image is a special save format for NTFS volumes,
+# created and restored by the ntfsclone program
+0 string \0ntfsclone-image ntfsclone image,
+>0x10 byte x version %d.
+>0x11 byte x \b%d,
+>0x12 lelong x cluster size %d,
+>0x16 lequad x device size %lld,
+>0x1e lequad x %lld total clusters,
+>0x26 lequad x %lld clusters in use
+
9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian),
>8404 string x last mounted on %s,
#>9504 ledate x last checked at %s,
@@ -1633,6 +1679,13 @@
>&-1248 belong 0 TIME optimization
>&-1248 belong 1 SPACE optimization
+0 ulequad 0xc8414d4dc5523031 HAMMER filesystem (little-endian),
+>0x90 lelong+1 x volume %d
+>0x94 lelong x (of %d),
+>0x50 string x name %s,
+>0x98 ulelong x version %u,
+>0xa0 ulelong x flags 0x%x
+
# ext2/ext3 filesystems - Andreas Dilger <adilger at dilger.ca>
# ext4 filesystem - Eric Sandeen <sandeen at sandeen.net>
# volume label and UUID Russell Coker
@@ -1683,7 +1736,7 @@
0x410 leshort 0x137f
!:strength / 2
>0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V1, %d zones
+>0x402 beshort > -1 Minix filesystem, V1, 14 char names, %d zones
>0x1e string minix \b, bootable
0x410 beshort 0x137f
!:strength / 2
@@ -1700,30 +1753,31 @@
>0x402 beshort < 100
>0x402 beshort > -1 Minix filesystem, V1, 30 char names (big endian), %d zones
>0x1e string minix \b, bootable
-0x410 leshort 0x2468
->0x402 beshort < 100
->>0x402 beshort > -1 Minix filesystem, V2, %d zones
->0x1e string minix \b, bootable
-0x410 beshort 0x2468
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V2 (big endian), %d zones
->0x1e string minix \b, bootable
+# Weak Magic: this is $x
+#0x410 leshort 0x2468
+#>0x402 beshort < 100
+#>>0x402 beshort > -1 Minix filesystem, V2, 14 char names
+#>0x1e string minix \b, bootable
+#0x410 beshort 0x2468
+#>0x402 beshort < 100
+#>0x402 beshort > -1 Minix filesystem, V2 (big endian)
+#>0x1e string minix \b, bootable
+#0x410 leshort 0x2478
+#>0x402 beshort < 100
+#>0x402 beshort > -1 Minix filesystem, V2, 30 char names
+#>0x1e string minix \b, bootable
+#0x410 leshort 0x2478
+#>0x402 beshort < 100
+#>0x402 beshort > -1 Minix filesystem, V2, 30 char names
+#>0x1e string minix \b, bootable
+#0x410 beshort 0x2478
+#>0x402 beshort !0 Minix filesystem, V2, 30 char names (big endian)
+#>0x1e string minix \b, bootable
+# Weak Magic! this is MD
+#0x418 leshort 0x4d5a
+#>0x402 beshort <100
+#>>0x402 beshort > -1 Minix filesystem, V3, 60 char names
-0x410 leshort 0x2478
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V2, 30 char names, %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x2478
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V2, 30 char names, %d zones
->0x1e string minix \b, bootable
-0x410 beshort 0x2478
->0x402 beshort !0 Minix filesystem, V2, 30 char names (big endian), %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x4d5a
->0x402 beshort !0 Minix filesystem, V3, %d zones
->0x1e string minix \b, bootable
-
# SGI disk labels - Nathan Scott <nathans at debian.org>
0 belong 0x0BE5A941 SGI disk label (volume header)
@@ -1781,7 +1835,7 @@
# FE 250K 8-inch, 1-sided, single-density
# FD 500K 8-inch, 2-sided, single-density
# FE 1.2 MB 8-inch, 2-sided, double-density
-# F8 ----- Fixed disk
+# F8 ----- Fixed disk
#
# FC xxxK Apricot 70x1x9 boot disk.
#
@@ -1809,7 +1863,7 @@
# all FAT12 (strength=70) floppies with sectorsize 512 added by Joerg Jenderek at Jun 2013
# http://en.wikipedia.org/wiki/File_Allocation_Table#Exceptions
# Too Weak.
-#512 ubelong&0xE0ffff00 0xE0ffff00
+#512 ubelong&0xE0ffff00 0xE0ffff00
# without valid Media descriptor in place of BPB, cases with are done at other places
#>21 ubyte <0xE5 floppy with old FAT filesystem
# but valid Media descriptor at begin of FAT
@@ -1821,76 +1875,77 @@
#>>512 ubyte =0xfb 640k
#>>512 ubyte =0xfc 180k
# look like an an old DOS directory entry
-#>>>0xA0E ubequad 0
-#>>>>0xA00 ubequad !0
+#>>>0xA0E ubequad 0
+#>>>>0xA00 ubequad !0
#!:mime application/x-ima
-#>>512 ubyte =0xfd
+#>>512 ubyte =0xfd
# look for 2nd FAT at different location to distinguish between 360k and 500k
#>>>0x600 ubelong&0xE0ffff00 0xE0ffff00 360k
#>>>0x500 ubelong&0xE0ffff00 0xE0ffff00 500k
-#>>>0xA0E ubequad 0
+#>>>0xA0E ubequad 0
#!:mime application/x-ima
-#>>512 ubyte =0xfe
+#>>512 ubyte =0xfe
#>>>0x400 ubelong&0xE0ffff00 0xE0ffff00 160k
-#>>>>0x60E ubequad 0
-#>>>>>0x600 ubequad !0
+#>>>>0x60E ubequad 0
+#>>>>>0x600 ubequad !0
#!:mime application/x-ima
#>>>0xC00 ubelong&0xE0ffff00 0xE0ffff00 1200k
#>>512 ubyte =0xff 320k
-#>>>0x60E ubequad 0
-#>>>>0x600 ubequad !0
+#>>>0x60E ubequad 0
+#>>>>0x600 ubequad !0
#!:mime application/x-ima
#>>512 ubyte x \b, Media descriptor 0x%x
# without x86 jump instruction
-#>>0 ulelong&0x804000E9 !0x000000E9
-# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV
+#>>0 ulelong&0x804000E9 !0x000000E9
+# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV
#>>>0 ubequad 0xfabce701b8c0078e \b, MS-DOS 1.12 bootloader
# IOSYS.COM+MSDOS.COM
#>>>>0xc4 use 2xDOS-filename
-#>>0 ulelong&0x804000E9 =0x000000E9
+#>>0 ulelong&0x804000E9 =0x000000E9
# only x86 short jump instruction found
#>>>0 ubyte =0xEB
#>>>>1 ubyte x \b, code offset 0x%x+2
# http://thestarman.pcministry.com/DOS/ibm100/Boot.htm
-# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0
-#>>>>(1.b+2) ubequad 0xfa8cc88ed8ba0000 \b, PC-DOS 1.0 bootloader
+# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0
+#>>>>(1.b+2) ubequad 0xfa8cc88ed8ba0000 \b, PC-DOS 1.0 bootloader
# ibmbio.com+ibmdos.com
#>>>>>0x176 use DOS-filename
#>>>>>0x181 ubyte x \b+
#>>>>>0x182 use DOS-filename
# http://thestarman.pcministry.com/DOS/ibm110/Boot.htm
-# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV
-#>>>>(1.b+2) ubequad 0xfa8cc88ed833d28e \b, PC-DOS 1.1 bootloader
+# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV
+#>>>>(1.b+2) ubequad 0xfa8cc88ed833d28e \b, PC-DOS 1.1 bootloader
# ibmbio.com+ibmdos.com
#>>>>>0x18b use DOS-filename
#>>>>>0x196 ubyte x \b+
#>>>>>0x197 use DOS-filename
# http://en.wikipedia.org/wiki/Zenith_Data_Systems
-# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6
+# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6
#>>>>(1.b+2) ubequad 0xbbc0078ed3bcc601 \b, Zenith Data Systems MS-DOS 1.25 bootloader
# IO.SYS+MSDOS.SYS
#>>>>>0x20 use 2xDOS-filename
# http://en.wikipedia.org/wiki/Corona_Data_Systems
-# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;
+# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;
#>>>>(1.b+2) ubequad 0x8cc88ed8fa8ed0bc \b, MS-DOS 1.25 bootloader
# IO.SYS+MSDOS.SYS
#>>>>>0x69 use 2xDOS-filename
-# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;
+# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;
#>>>>(1.b+2) ubequad 0xfa0e17bc007cb860 \b, MS-DOS 2.11 bootloader
# defect IO.SYS+MSDOS.SYS ?
#>>>>>0x162 use 2xDOS-filename
-# CDROM Filesystems
-# Modified for UDF by gerardo.cacciari at gmail.com
-32769 string CD001 #
+0 name cdrom
+>38913 string !NSR0 ISO 9660 CD-ROM filesystem data
!:mime application/x-iso9660-image
->38913 string !NSR0 ISO 9660 CD-ROM filesystem data
>38913 string NSR0 UDF filesystem data
+!:mime application/x-iso9660-image
>>38917 string 1 (version 1.0)
>>38917 string 2 (version 1.5)
>>38917 string 3 (version 2.0)
>>38917 byte >0x33 (unknown version, ID 0x%X)
>>38917 byte <0x31 (unknown version, ID 0x%X)
+# The next line is not necessary because the MBR staff is done looking for boot signature
+>0x1FE leshort 0xAA55 (DOS/MBR boot sector)
# "application id" which appears to be used as a volume label
>32808 string/T >\0 '%s'
>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable)
@@ -1898,8 +1953,31 @@
!:mime application/x-iso9660-image
32777 string CDROM High Sierra CD-ROM filesystem data
+# CDROM Filesystems
+# https://en.wikipedia.org/wiki/ISO_9660
+# Modified for UDF by gerardo.cacciari at gmail.com
+32769 string CD001
+# mime line at that position does not work
+# to display CD-ROM (70=81-11) after MBR (113=40+72+1), partition-table (71=50+21) and before Apple Driver Map (51)
+#!:strength -11
+# to display CD-ROM (114=81+33) before MBR (113=40+72+1), partition-table (71=50+21) and Apple Driver Map (51)
+!:strength +34
+>0 use cdrom
+
# .cso files
-0 string CISO Compressed ISO CD image
+# Reference: http://pismotec.com/ciso/ciso.h
+# NOTE: There are two other formats with the same magic but
+# completely incompatible specifications:
+# - GameCube/Wii CISO: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DiscIO/CISOBlob.h
+# - PSP CISO: https://github.com/jamie/ciso/blob/master/ciso.h
+0 string CISO
+# Other fields are used to determine what type of CISO this is:
+# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size)
+# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size)
+# - None of the above: Compact ISO.
+>4 lelong !0
+>>4 lelong !0x200000
+>>>0x10 lelong !0x800 Compressed ISO CD image
# cramfs filesystem - russell at coker.com.au
0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian
@@ -1991,6 +2069,13 @@
>29 byte 16 \bBlackfin,
>29 byte 17 \bAVR32,
>29 byte 18 \bSTMicroelectronics ST200,
+>29 byte 19 \bSandbox architecture,
+>29 byte 20 \bANDES Technology NDS32,
+>29 byte 21 \bOpenRISC 1000,
+>29 byte 22 \bARM 64-bit,
+>29 byte 23 \bDesignWare ARC,
+>29 byte 24 \bx86_64,
+>29 byte 25 \bXtensa,
>30 byte 0 Invalid Image
>30 byte 1 Standalone Program
>30 byte 2 OS Kernel Image
@@ -2064,7 +2149,7 @@
>>8 ledate x created: %s
# AFS Dump Magic
-# From: Ty Sarna <tsarna at sarna.org>
+# From: Ty Sarna <tsarna at sarna.org>
0 string \x01\xb3\xa1\x13\x22 AFS Dump
>&0 belong x (v%d)
>>&0 byte 0x76
@@ -2080,6 +2165,7 @@
#----------------------------------------------------------
#delta ISO Daniel Novotny (dnovotny at redhat.com)
0 string DISO Delta ISO data
+!:strength +50
>4 belong x version %d
# VMS backup savesets - gerardo.cacciari at gmail.com
@@ -2131,7 +2217,6 @@
# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari at gmail.com
#
1008 string DECFILE11 Files-11 On-Disk Structure
->525 byte x Level %d
>525 byte x (ODS-%d);
>1017 string A RSX-11, VAX/VMS or OpenVMS VAX file system;
>1017 string B
@@ -2159,19 +2244,27 @@
>>0x10024 belong x (blocksize %d,
>>0x10060 string >\0 lockproto %s)
-# BTRFS
-0x10040 string _BHRfS_M BTRFS Filesystem
->0x1012b string >\0 (label "%s",
->0x10090 lelong x sectorsize %d,
->0x10094 lelong x nodesize %d,
->0x10098 lelong x leafsize %d)
+# Russell Coker <russell at coker.com.au>
+0x10040 string _BHRfS_M BTRFS Filesystem
+>0x1012b string >\0 label "%s",
+>0x10090 lelong x sectorsize %d,
+>0x10094 lelong x nodesize %d,
+>0x10098 lelong x leafsize %d,
+>0x10020 belong x UUID=%08x-
+>0x10024 beshort x \b%04x-
+>0x10026 beshort x \b%04x-
+>0x10028 beshort x \b%04x-
+>0x1002a beshort x \b%04x
+>0x1002c belong x \b%08x,
+>0x10078 lequad x %lld/
+>0x10070 lequad x \b%lld bytes used,
+>0x10088 lequad x %lld devices
-
# dvdisaster's .ecc
# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
0 string *dvdisaster* dvdisaster error correction file
-# xfs metadump image
+# xfs metadump image
# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
# but can we do the << ? For now it's always 512 (0x200) anyway.
0 string XFSM
@@ -2243,8 +2336,8 @@
0 string td\000 floppy image data (TeleDisk, compressed)
0 string TD\000 floppy image data (TeleDisk)
-0 string CQ\024 floppy image data (CopyQM,
->16 leshort x %d sectors,
+0 string CQ\024 floppy image data (CopyQM,
+>16 leshort x %d sectors,
>18 leshort x %d heads.)
0 string ACT\020Apricot\020disk\020image\032\004 floppy image data (ApriDisk)
@@ -2266,14 +2359,41 @@
# UBIfs
# Linux kernel sources: fs/ubifs/ubifs-media.h
-0 belong 0x31181006
->0x16 short 0 UBIfs image
->0x08 lequad x \b, sequence number %llu
->0x10 leshort x \b, length %u
->0x04 lelong x \b, CRC 0x%08x
+0 lelong 0x06101831
+>0x16 leshort 0 UBIfs image
+>0x08 lequad x \b, sequence number %llu
+>0x10 leshort x \b, length %u
+>0x04 lelong x \b, CRC 0x%08x
-0 belong 0x55424923
->0x04 short <2
->0x05 string \0\0\0
->0x1c string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
->0x04 short x UBI image, version %u
+0 lelong 0x23494255
+>0x04 leshort <2
+>0x05 string \0\0\0
+>0x1c string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
+>0x04 leshort x UBI image, version %u
+
+# NEC PC-88 2D disk image
+# From Fabio R. Schmidlin <sd-snatcher at users.sourceforge.net>
+0x20 ulelong&0xFFFFFEFF 0x2A0
+>0x10 string \0\0\0\0\0\0\0\0\0\0
+>>0x280 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
+>>>0x1A ubyte&0xEF 0
+>>>>0x1B ubyte&0x8F 0
+>>>>>0x1B ubyte&70 <0x40
+>>>>>>0x1C ulelong >0x21
+>>>>>>>0 regex [[:print:]]* NEC PC-88 disk image, name=%s
+>>>>>>>>0x1B ubyte 0 \b, media=2D
+>>>>>>>>0x1B ubyte 0x10 \b, media=2DD
+>>>>>>>>0x1B ubyte 0x20 \b, media=2HD
+>>>>>>>>0x1B ubyte 0x30 \b, media=1D
+>>>>>>>>0x1B ubyte 0x40 \b, media=1DD
+>>>>>>>>0x1A ubyte 0x10 \b, write-protected
+
+# HDD Raw Copy Tool disk image, file extension: .imgc
+# From Benjamin Vanheuverzwijn <bvanheu at gmail.com>
+0 pstring HDD\ Raw\ Copy\ Tool %s
+>0x100 pstring x %s
+>0x200 pstring x - HD model: %s
+#>0x300 pstring x unknown %s
+>0x400 pstring x serial: %s
+#>0x500 pstring x unknown: %s
+!:ext imgc
Modified: trunk/contrib/file/magic/Magdir/flash
===================================================================
--- trunk/contrib/file/magic/Magdir/flash 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/flash 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: flash,v 1.11 2014/05/02 00:26:49 christos Exp $
+# $File: flash,v 1.14 2017/05/25 20:09:55 christos Exp $
# flash: file(1) magic for Macromedia Flash file format
#
# See
@@ -10,24 +10,46 @@
# en/devnet/swf/pdf/swf-file-format-spec.pdf page 27
#
-0 name swf-details
->0 string F Macromedia Flash data
+0 name swf-details
+
+>0 string F
+>>8 byte&0xfd 0x08 Macromedia Flash data
!:mime application/x-shockwave-flash
->0 string C Macromedia Flash data (compressed)
+>>>3 byte x \b, version %d
+>>8 byte&0xfe 0x10 Macromedia Flash data
!:mime application/x-shockwave-flash
->0 string Z Macromedia Flash data (lzma compressed)
+>>>3 byte x \b, version %d
+>>8 byte 0x18 Macromedia Flash data
!:mime application/x-shockwave-flash
->3 byte x \b, version %d
+>>>3 byte x \b, version %d
+>>8 beshort&0xff87 0x2000 Macromedia Flash data
+!:mime application/x-shockwave-flash
+>>>3 byte x \b, version %d
+>>8 beshort&0xffe0 0x3000 Macromedia Flash data
+!:mime application/x-shockwave-flash
+>>>3 byte x \b, version %d
+>>8 byte&0x7 0
+>>>8 ubyte >0x2f
+>>>>9 ubyte <0x20 Macromedia Flash data
+!:mime application/x-shockwave-flash
+>>>>>3 byte x \b, version %d
-1 string WS
->4 lelong !0
->>3 byte 255 Suspicious
->>>0 use swf-details
+>0 string C
+>>8 byte 0x78 Macromedia Flash data (compressed)
+!:mime application/x-shockwave-flash
+>>>3 byte x \b, version %d
->>3 ubyte <32
->>>3 ubyte !0
->>>>0 use swf-details
+>0 string Z
+>>8 byte 0x5d Macromedia Flash data (lzma compressed)
+!:mime application/x-shockwave-flash
+>>>3 byte x \b, version %d
+
+1 string WS
+>4 ulelong >14
+>>3 ubyte !0
+>>>0 use swf-details
+
# From: Cal Peake <cp at absolutedigital.net>
0 string FLV\x01 Macromedia Flash Video
!:mime video/x-flv
@@ -34,7 +56,7 @@
#
# Yosu Gomez
-0 string AGD2\xbe\xb8\xbb\xcd\x00 Macromedia Freehand 7 Document
-0 string AGD3\xbe\xb8\xbb\xcc\x00 Macromedia Freehand 8 Document
+0 string AGD2\xbe\xb8\xbb\xcd\x00 Macromedia Freehand 7 Document
+0 string AGD3\xbe\xb8\xbb\xcc\x00 Macromedia Freehand 8 Document
# From Dave Wilson
-0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document
+0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document
Modified: trunk/contrib/file/magic/Magdir/fonts
===================================================================
--- trunk/contrib/file/magic/Magdir/fonts 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/fonts 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: fonts,v 1.27 2014/04/30 21:41:02 christos Exp $
+# $File: fonts,v 1.37 2017/06/24 00:39:00 christos Exp $
# fonts: file(1) magic for font data
#
0 search/1 FONT ASCII vfont text
@@ -15,6 +15,56 @@
6 string %!FontType1 PostScript Type 1 font program data
0 string %!PS-Adobe-3.0\ Resource-Font PostScript Type 1 font text
+# Summary: PostScript Type 1 Printer Font Metrics
+# URL: https://en.wikipedia.org/wiki/PostScript_fonts
+# Reference: http://partners.adobe.com/public/developer/en/font/5178.PFM.pdf
+# Modified by: Joerg Jenderek
+# Note: moved from ./msdos magic
+# dfVersion 256=0100h
+0 uleshort 0x0100
+# GRR: line above is too general as it catches also TrueType font,
+# raw G3 data FAX, WhatsApp encrypted and Panorama database
+# dfType 129=0081h
+>66 uleshort 0x0081
+# dfVertRes 300=012Ch not needed as additional test
+#>>70 uleshort 0x012c
+# dfHorizRes 300=012Ch
+#>>>72 uleshort 0x012c
+# dfDriverInfo points to postscript information section
+>>(101.l) string/c Postscript Printer Font Metrics
+# above labeled "PFM data" by ./msdos (version 5.28) or "Adobe Printer Font Metrics" by TrID
+!:mime application/x-font-pfm
+# AppleShare Print Server
+#!:apple ASPS????
+!:ext pfm
+# dfCopyright 60 byte null padded Copyright string. uncomment it to get old looking
+#>>>6 string >\060 - %-.60s
+# dfDriverInfo
+>>>139 ulelong >0
+# often abbreviated and same as filename
+>>>>(139.l) string x %s
+# dfSize
+>>>2 ulelong x \b, %d bytes
+# dfFace 210=D2h 9Eh
+>>>105 ulelong >0
+# Windows font name
+>>>>(105.l) string x \b, %s
+# dfItalic
+>>>80 ubyte 1 italic
+# dfUnderline
+>>>81 ubyte 1 underline
+# dfStrikeOut
+>>>82 ubyte 1 strikeout
+# dfWeight 400=0x0190 300=0x012c 500=0x01f4 600=0x0258 700=0x02bc
+>>>83 uleshort >699 bold
+# dfPitchAndFamily 16 17 48 49 64 65
+>>>90 ubyte 16 serif
+>>>90 ubyte 17 serif proportional
+#>>>90 ubyte 48 other
+>>>90 ubyte 49 proportional
+>>>90 ubyte 64 script
+>>>90 ubyte 65 script proportional
+
# X11 font files in SNF (Server Natural Format) format
# updated by Joerg Jenderek at Feb 2013
# http://computer-programming-forum.com/51-perl/8f22fb96d2e34bab.htm
@@ -22,7 +72,7 @@
#>104 belong 00000004 X11 SNF font data, MSB first
!:mime application/x-font-sfn
# GRR: line below too general as it catches also Xbase index file t3-CHAR.NDX
-0 lelong 00000004
+0 lelong 00000004
>104 lelong 00000004 X11 SNF font data, LSB first
!:mime application/x-font-sfn
@@ -29,11 +79,32 @@
# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan at yggdrasil.com)
0 search/1 STARTFONT\ X11 BDF font text
+# From: Joerg Jenderek
+# URL: http://grub.gibibit.com/New_font_format
+# Reference: util/grub-mkfont.c
+# include/grub/fontformat.h
+# FONT_FORMAT_SECTION_NAMES_FILE
+0 string FILE
+# FONT_FORMAT_PFF2_MAGIC
+>8 string PFF2
+# leng 4 only at the moment
+>>4 ubelong 4
+# FONT_FORMAT_SECTION_NAMES_FONT_NAME
+>>>12 string NAME GRUB2 font
+!:mime application/x-font-pf2
+!:ext pf2
+# length of font_name
+>>>>16 ubelong >0
+# font_name
+>>>>>20 string >\0 "%-s"
+
# X11 fonts, from Daniel Quinlan (quinlan at yggdrasil.com)
# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
-0 string \001fcp X11 Portable Compiled Font data
->12 byte 0x02 \b, LSB first
->12 byte 0x0a \b, MSB first
+0 string \001fcp X11 Portable Compiled Font data,
+>12 lelong ^0x08 bit: LSB,
+>12 lelong &0x08 bit: MSB,
+>12 lelong ^0x04 byte: LSB first
+>12 lelong &0x04 byte: MSB first
0 string D1.0\015 X11 Speedo font data
#------------------------------------------------------------------------------
@@ -58,43 +129,205 @@
4098 string DOSFONT DOSFONT2 encrypted font data
# downloadable fonts for browser (prints type) anthon at mnt.org
-0 string PFR1 PFR1 font
+# https://tools.ietf.org/html/rfc3073
+0 string PFR1 Portable Font Resource font data (new)
>102 string >0 \b: %s
+0 string PFR0 Portable Font Resource font data (old)
+>4 beshort >0 version %d
# True Type fonts
-0 string \000\001\000\000\000 TrueType font data
-!:mime application/x-font-ttf
+# Modified by: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/TrueType
+# Reference: https://developer.apple.com/fonts/TrueType-Reference-Manual/
+#
+# sfnt version "typ1" used by some Apple, but no example found
+0 string typ1
+>0 use sfnt-font
+>0 use sfnt-names
+# sfnt version "true" used by some Apple
+0 string true
+>0 use sfnt-font
+>0 use sfnt-names
+# GRR: below test is too general
+# sfnt version often 0x00010000
+0 string \000\001\000\000
+>0 use sfnt-font
+>0 use sfnt-names
+# validate and display sfnt font data like number of tables
+0 name sfnt-font
+# file 5.30 version assumes 00FFh as maximal number of tables
+#>4 ubeshort <0x0100
+# maximal 27 tables found like in Skia.ttf
+# 46 different table names mentioned on Apple specification
+# skip 1st sequence of DOS 2 backup with path separator (\~92 or /~47) misinterpreted as table number
+>4 ubeshort <47
+# skip bad examples with garbage table names like in a5.show HYPERC MAC
+# tag names consist of up to four characters padded with spaces at end like
+# BASE DSIG OS/2 Zapf acnt glyf cvt vmtx xref ...
+>>12 regex/4l \^[A-Za-z][A-Za-z][A-Za-z/][A-Za-z2\ ]
+#>>>0 ubelong x \b, sfnt version 0x%x
+>>>0 ubelong !0x4f54544f TrueType
+!:mime application/font-sfnt
+#!:mime font/ttf
+!:apple ????tfil
+# .ttf for TrueType font
+# EUDC.tte created by privat character editor %WINDIR%\system32\eudcedit.exe
+!:ext ttf/tte
+# sfnt version 4F54544Fh~OTTO
+>>>0 ubelong =0x4f54544f OpenType
+!:mime application/font-sfnt
+#!:mime font/otf
+!:apple ????OTTO
+!:ext otf
+>>>0 ubelong x Font data
+# DSIG=44454947h table name implies a digitally signed font
+# search range = number of tables * 16 =< maximal number of tables * 16 = 27 * 16 = 432
+>>>12 search/432 DSIG \b, digitally signed
+>>>4 ubeshort x \b, %d tables
+# minimal 9 tables found like in NISC18030.ttf
+#>>>4 ubeshort <10 TMIN
+#>>>4 ubeshort >24 TBIG
+# table directory entries
+>>>12 string x \b, 1st "%4.4s"
+# search and display 1st name in sfnt font which is often copyright text
+# does not work inside font collections
+0 name sfnt-names
+# search for naming table
+>12 search/432/s name
+# biggest offset 0x0100bd28 like Windows10 Fonts\simsunb.ttf
+#>>>>&8 ubelong >0x0100bd27 BIGGEST OFFSET
+>>&8 ubelong >0x00100000
+# offset of name table
+>>>&-4 ubelong x \b, name offset 0x%x
+# GRR: pointer to name table only works if offset ~< FILE_BYTES_MAX = 100000h defined in src\file.h
+>>&8 ubelong <0x00100000
+>>>&-16 ubelong x
+# name table
+>>>>(&8.L) ubequad x
+# invalid format selector
+#>>>>>&-8 ubeshort !0 \b, invalid selector %x
+# minimal 3 name records found like in c:\Program Files (x86)\Tesseract-OCR\tessdata\pdf.ttf
+# maximal 1227 name records found like in Apple Chancery.ttf
+#>>>>>&-6 ubeshort <0x4 mincount
+#>>>>>&-6 ubeshort >130 maxcount
+>>>>>&-6 ubeshort x \b, %d names
+# offset to start of string storage from start of table
+#>>>>>&-4 ubeshort x \b, record offset %d
+# 1st name record
+# string offset from start of storage area
+#>>>>>&8 ubeshort x \b, string offset %d
+# string length
+#>>>>>&6 ubeshort x \b, string length %d
+# minimal name string 7 like in c:\Program Files (x86)\Kodi\addons\webinterface.default\lib\video-js\font\VideoJS.ttf
+# also found 0 like in SWZCONLN.TTF
+#>>>>>&6 ubeshort <8 MIN STRING
+# maximal name string 806 like in c:\Windows\Fonts\palabi.ttf
+#>>>>>&6 ubeshort >805 MAX STRING
+# platform identifier: 0~Apple Unicode, 1~Macintosh, 3~Microsoft
+#>>>>>&-2 ubeshort >3 BAD PLATFORM
+>>>>>&-2 ubeshort 0 \b, Unicode
+>>>>>&-2 ubeshort 1 \b, Macintosh
+>>>>>&-2 ubeshort 3 \b, Microsoft
+# languageID (0~english Macintosh, 0409h~english Microsoft, ...)
+>>>>>&2 ubeshort >0 \b, language 0x%x
+# name identifiers
+# often 0~copyright, 1~font, 2~font subfamily, 5~version, 13~license, 19~sample, ...
+>>>>>&4 ubeshort >0 \b, type %d string
+# platform specific encoding:
+# 0~undefined character set, 1~UGL set with Unicode, 3~Unicode 2.0 BMP only, 4~Unicode 2.0
+#>>>>>&0 ubeshort x \b, %d encoding
+>>>>>&0 ubeshort 0
+# handle only name string offset 0 because do not know how to add 2 relative offsets
+>>>>>>&6 ubeshort 0
+>>>>>>>&(&-14.S-18) ubyte !0
+# GRR: instead 806 only first MAXstring = 96 characters are displayed as defined in src\file.h
+# often copyright string that starts like \251 2006 The Monotype Corporation
+>>>>>>>>&-1 string x \b, %-11.96s
+# test for unicode string
+>>>>>>>&(&-14.S-18) ubyte 0
+>>>>>>>>&0 lestring16 x \b, %-11.96s
+# unicode encoding
+>>>>>&0 ubeshort >0
+>>>>>>&6 ubeshort 0
+>>>>>>>&(&-14.S-17) lestring16 x \b, %-11.96s
+
0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
# TrueType/OpenType font collections (.ttc)
+# URL: https://en.wikipedia.org/wiki/OpenType
# http://www.microsoft.com/typography/otspec/otff.htm
-0 string ttcf TrueType font collection data
->4 belong 0x00010000 \b, 1.0
->>8 belong >0 \b, %d fonts
->4 belong 0x00020000 \b, 2.0
->>8 belong >0 \b, %d fonts
+# Modified by: Joerg Jenderek
+# Note: container for TrueType, OpenType font
+0 string ttcf
+# skip ASCII text
+>4 ubyte 0
+# sfnt version often 0x00010000 of 1st table is TrueType
+>>(12.L) ubelong !0x4f54544f TrueType
+#!:mime font/ttf
+!:apple ????tfil
+!:ext ttc
+# sfnt version 4F54544Fh~OTTO of 1st table is OpenType font
+>>(12.L) ubelong =0x4f54544f OpenType
+#!:mime font/otf
+!:apple ????OTTO
+# no example found for otc
+!:ext ttc/otc
+>>4 ubyte x font collection data
+!:mime application/font-sfnt
+#!:mime font/collection
+# TCC version
+>>4 belong 0x00010000 \b, 1.0
+>>4 belong 0x00020000 \b, 2.0
+>>8 ubelong >0 \b, %d fonts
+# array offset size = fonts * offsetsize = fonts * 4
+>>(8.L*4) ubequad x
# 0x44454947 = 'DSIG'
->>>16 belong 0x44534947 \b, digitally signed
+>>>&4 belong 0x44534947 \b, digitally signed
+# offset to 1st font
+>>12 ubelong x \b, at 0x%x
+# point to 1st font that starts with sfnt version
+>>(12.L) use sfnt-font
# Opentype font data from Avi Bercovich
0 string OTTO OpenType font data
!:mime application/vnd.ms-opentype
-# Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
-0 string SplineFontDB: Spline Font Database
+# Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+0 string SplineFontDB: Spline Font Database
!:mime application/vnd.font-fontforge-sfd
>14 string x version %s
# EOT
-34 string LP Embedded OpenType (EOT)
+0x40 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
+>0x22 string LP Embedded OpenType (EOT)
+# workaround until there's lepstring16
+# >>0x52 lepstring16/h >\0 \b, %s family
+>>0x52 short !0
+>>>0x54 lestring16 x \b, %s family
!:mime application/vnd.ms-fontobject
# Web Open Font Format (.woff)
+0 name woff
+>4 belong 0x00010000 \b, TrueType
+>4 belong 0x4F54544F \b, CFF
+>4 belong 0x74727565 \b, TrueType
+>4 default x
+>>4 belong x \b, flavor %d
+>8 belong x \b, length %d
+#>12 beshort x \b, numTables %d
+#>14 beshort x \b, reserved %d
+#>16 belong x \b, totalSfntSize %d
+
# http://www.w3.org/TR/WOFF/
0 string wOFF Web Open Font Format
->4 belong x \b, flavor %d
->8 belong x \b, length %d
+>0 use woff
>20 beshort x \b, version %d
>22 beshort x \b.%d
+# http://www.w3.org/TR/WOFF2/
+0 string wOF2 Web Open Font Format (Version 2)
+>0 use woff
+#>20 belong x \b, totalCompressedSize %d
+>24 beshort x \b, version %d
+>26 beshort x \b.%d
Modified: trunk/contrib/file/magic/Magdir/fortran
===================================================================
--- trunk/contrib/file/magic/Magdir/fortran 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/fortran 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,9 @@
#------------------------------------------------------------------------------
-# $File: fortran,v 1.8 2014/06/03 19:01:34 christos Exp $
+# $File: fortran,v 1.10 2015/11/05 18:47:16 christos Exp $
# FORTRAN source
-0 regex/100l \^[Cc][\ \t] FORTRAN program
+# Check that the first 100 lines start with C or whitespace first.
+0 regex/100l !\^[^Cc\ \t].*$
+>0 regex/100l \^[Cc][\ \t] FORTRAN program text
!:mime text/x-fortran
!:strength - 5
Modified: trunk/contrib/file/magic/Magdir/frame
===================================================================
--- trunk/contrib/file/magic/Magdir/frame 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/frame 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $
+# $File: frame,v 1.13 2015/08/29 07:10:35 christos Exp $
# frame: file(1) magic for FrameMaker files
#
# This stuff came on a FrameMaker demo tape, most of which is
@@ -41,10 +41,10 @@
>10 string 1.0 (1.0
>13 byte x %c)
# XXX - this book entry should be verified, if you find one, uncomment this
-#0 string \<Book\ FrameMaker Book (ASCII) file
+#0 string \<Book\040 FrameMaker Book (ASCII) file
#!:mime application/x-mif
#>6 string 3.0 (3.0)
#>6 string 2.0 (2.0)
#>6 string 1.0 (1.0)
-0 string \<Maker Intermediate Print File FrameMaker IPL file
+0 string \<Maker\040Intermediate\040Print\040File FrameMaker IPL file
!:mime application/x-mif
Modified: trunk/contrib/file/magic/Magdir/fsav
===================================================================
--- trunk/contrib/file/magic/Magdir/fsav 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/fsav 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: fsav,v 1.13 2013/03/25 17:18:47 christos Exp $
+# $File: fsav,v 1.14 2017/03/17 21:35:28 christos Exp $
# fsav: file(1) magic for datafellows fsav virus definition files
# Anthon van der Neut (anthon at mnt.org)
@@ -29,11 +29,11 @@
#>>>>10 byte 11 \b12-
#>>>>9 ubyte >0 \b%02d)
# ftp://ftp.f-prot.com/pub/sign2.zip
-#0 ubyte 0x62
-#>1 ubyte 0xF5
-#>>2 ubyte 0x1
-#>>>3 ubyte 0x1
-#>>>>4 ubyte 0x0e
+#0 ubyte 0x62
+#>1 ubyte 0xF5
+#>>2 ubyte 0x1
+#>>>3 ubyte 0x1
+#>>>>4 ubyte 0x0e
#>>>>>13 ubyte >0 fsav virus signatures
#>>>>>>11 ubyte x size 0x%02x
#>>>>>>12 ubyte x \b%02x
@@ -44,16 +44,16 @@
# .cvd files start with a 512 bytes colon separated header
# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime
# + gzipped tarball files
-0 string ClamAV-VDB:
+0 string ClamAV-VDB:
>11 string >\0 Clam AntiVirus database %-.23s
->>34 string :
->>>35 string !: \b, version
+>>34 string :
+>>>35 string !: \b, version
>>>>35 string x \b%-.1s
->>>>>36 string !:
+>>>>>36 string !:
>>>>>>36 string x \b%-.1s
->>>>>>>37 string !:
+>>>>>>>37 string !:
>>>>>>>>37 string x \b%-.1s
->>>>>>>>>38 string !:
+>>>>>>>>>38 string !:
>>>>>>>>>>38 string x \b%-.1s
>512 string \037\213 \b, gzipped
>769 string ustar\0 \b, tarred
Modified: trunk/contrib/file/magic/Magdir/games
===================================================================
--- trunk/contrib/file/magic/Magdir/games 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/games 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: games,v 1.14 2014/04/30 21:41:02 christos Exp $
+# $File: games,v 1.15 2017/03/17 21:35:28 christos Exp $
# games: file(1) for games
# Fabio Bonelli <fabiobonelli at libero.it>
@@ -39,7 +39,7 @@
#0 string -1\x0a Quake I demo
#>30 string x version %.4s
-#>61 string x level %s
+#>61 string x level %s
#0 string 5\x0a Quake I save
@@ -240,7 +240,7 @@
# Summary: NetImmerse game engine file
# Extension .nif
# Created by: Abel Cheung <abelcheung at gmail.com>
-0 string NetImmerse\ File\ Format,\ Versio
+0 string NetImmerse\ File\ Format,\ Versio
>&0 string n\ NetImmerse game engine file
>>&0 regex [0-9a-z.]+ \b, version %s
Modified: trunk/contrib/file/magic/Magdir/gcc
===================================================================
--- trunk/contrib/file/magic/Magdir/gcc 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/gcc 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gcc,v 1.4 2009/09/19 16:28:09 christos Exp $
+# $File: gcc,v 1.5 2016/07/01 23:31:13 christos Exp $
# gcc: file(1) magic for GCC special files
#
0 string gpch GCC precompiled header
@@ -12,6 +12,6 @@
# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
>4 byte 67 for C
->4 byte 111 for Objective C
+>4 byte 111 for Objective-C
>4 byte 43 for C++
->4 byte 79 for Objective C++
+>4 byte 79 for Objective-C++
Modified: trunk/contrib/file/magic/Magdir/geo
===================================================================
--- trunk/contrib/file/magic/Magdir/geo 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/geo 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: geo,v 1.3 2013/01/04 00:47:02 christos Exp $
+# $File: geo,v 1.4 2017/03/17 21:35:28 christos Exp $
# Geo- files from Kurt Schwehr <schwehr at ccom.unh.edu>
######################################################################
@@ -57,7 +57,7 @@
4 beshort 0x2002 GeoSwath RDF
0 string Start:- GeoSwatch auf text file
-# Seabeam 2100
+# Seabeam 2100
# mbsystem code mb41
0 string SB2100 SeaBeam 2100 multibeam sonar
0 string SB2100DR SeaBeam 2100 DR multibeam sonar
Modified: trunk/contrib/file/magic/Magdir/gnu
===================================================================
--- trunk/contrib/file/magic/Magdir/gnu 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/gnu 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gnu,v 1.15 2014/02/06 14:21:02 christos Exp $
+# $File: gnu,v 1.18 2017/03/17 21:35:28 christos Exp $
# gnu: file(1) magic for various GNU tools
#
# GNU nlsutils message catalog file format
@@ -34,9 +34,12 @@
# This magic is not particularly good, as the keyrings don't have true
# magic. Nevertheless, it covers many keyrings.
-0 beshort 0x9901 GPG key public ring
-!:mime application/x-gnupg-keyring
+0 ubeshort-0x9901 <2
+>3 byte 4
+>>4 bedate x GPG key public ring, created %s
+!:mime application/x-gnupg-keyring
+
# Symmetric encryption
0 leshort 0x0d8c
>4 leshort 0x0203
@@ -68,7 +71,7 @@
# they will ordinarily reported as "compressed", but at least -z helps
39 string =<gmr:Workbook Gnumeric spreadsheet
-# From: James Youngman <jay at gnu.org>
+# From: James Youngman <jay at gnu.org>
# gnu find magic
0 string \0LOCATE GNU findutils locate database data
>7 string >\0 \b, format %s
@@ -79,5 +82,7 @@
0 long 0x950412DE GNU-format message catalog data
# gettext message catalogue
-0 regex \^msgid\ GNU gettext message catalogue text
+0 search/1024 \nmsgid
+>&0 search/1024 \nmsgstr GNU gettext message catalogue text
+!:strength +100
!:mime text/x-po
Modified: trunk/contrib/file/magic/Magdir/gpt
===================================================================
--- trunk/contrib/file/magic/Magdir/gpt 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/gpt 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gpt,v 1.3 2014/04/30 21:41:02 christos Exp $
+# $File: gpt,v 1.4 2017/03/17 21:35:28 christos Exp $
#
# GPT Partition table patterns.
# Author: Rogier Goossens (goossens.rogier at gmail.com)
@@ -36,7 +36,7 @@
>>>>>>>>>>>>>(454.l*8192) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>0 use gpt-mbr-type
>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
+>>>>>>>>>>>>>>0 ubyte x of 8192 bytes
>>>>>>>>>>>>>(454.l*8192) string !EFI\ PART
>>>>>>>>>>>>>>(454.l*4096) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>>0 use gpt-mbr-type
@@ -66,7 +66,7 @@
>>>>>>>>>>>>>(470.l*8192) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>0 use gpt-mbr-type
>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
+>>>>>>>>>>>>>>0 ubyte x of 8192 bytes
>>>>>>>>>>>>>(470.l*8192) string !EFI\ PART
>>>>>>>>>>>>>>(470.l*4096) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>>0 use gpt-mbr-type
@@ -96,7 +96,7 @@
>>>>>>>>>>>>>(486.l*8192) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>0 use gpt-mbr-type
>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
+>>>>>>>>>>>>>>0 ubyte x of 8192 bytes
>>>>>>>>>>>>>(486.l*8192) string !EFI\ PART
>>>>>>>>>>>>>>(486.l*4096) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>>0 use gpt-mbr-type
@@ -126,7 +126,7 @@
>>>>>>>>>>>>>(502.l*8192) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>0 use gpt-mbr-type
>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
+>>>>>>>>>>>>>>0 ubyte x of 8192 bytes
>>>>>>>>>>>>>(502.l*8192) string !EFI\ PART
>>>>>>>>>>>>>>(502.l*4096) string EFI\ PART GPT partition table
>>>>>>>>>>>>>>>0 use gpt-mbr-type
@@ -166,7 +166,7 @@
##>(8.l*8192) string EFI\ PART
##>>(8.l*8192) use gpt-mbr-type
##>>&-8 use gpt-table
-##>>0 ubyte x of 8192 bytes
+##>>0 ubyte x of 8192 bytes
##>(8.l*8192) string !EFI\ PART
##>>(8.l*4096) string EFI\ PART GPT partition table
##>>>0 use gpt-mbr-type
@@ -212,7 +212,7 @@
>>486 ulelong !1 \b (nonstandard: not at LBA 1)
# GPT with protective MBR entry in partition 4
>498 ubyte 0xee
->>502 ulelong 1
+>>502 ulelong 1
>>>446 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
>>502 ulelong !1 \b (nonstandard: not at LBA 1)
Modified: trunk/contrib/file/magic/Magdir/gringotts
===================================================================
--- trunk/contrib/file/magic/Magdir/gringotts 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/gringotts 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gringotts,v 1.5 2009/09/19 16:28:09 christos Exp $
+# $File: gringotts,v 1.6 2017/03/17 21:35:28 christos Exp $
# gringotts: file(1) magic for Gringotts
# http://devel.pluto.linux.it/projects/Gringotts/
# author: Germano Rizzo <mano at pluto.linux.it>
@@ -9,10 +9,10 @@
#file format 1
>3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
#file format 2
->3 string 2 v.2, MCRYPT S2K,
+>3 string 2 v.2, MCRYPT S2K,
>>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
>>8 byte&0x70 0x10 SERPENT crypt,
->>8 byte&0x70 0x20 TWOFISH crypt,
+>>8 byte&0x70 0x20 TWOFISH crypt,
>>8 byte&0x70 0x30 CAST-256 crypt,
>>8 byte&0x70 0x40 SAFER+ crypt,
>>8 byte&0x70 0x50 LOKI97 crypt,
@@ -27,10 +27,10 @@
>>8 byte&0x03 0x02 lvl.6
>>8 byte&0x03 0x03 lvl.9
#file format 3
->3 string 3 v.3, OpenPGP S2K,
+>3 string 3 v.3, OpenPGP S2K,
>>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
>>8 byte&0x70 0x10 SERPENT crypt,
->>8 byte&0x70 0x20 TWOFISH crypt,
+>>8 byte&0x70 0x20 TWOFISH crypt,
>>8 byte&0x70 0x30 CAST-256 crypt,
>>8 byte&0x70 0x40 SAFER+ crypt,
>>8 byte&0x70 0x50 LOKI97 crypt,
Modified: trunk/contrib/file/magic/Magdir/hitachi-sh
===================================================================
--- trunk/contrib/file/magic/Magdir/hitachi-sh 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/hitachi-sh 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,22 +1,28 @@
#------------------------------------------------------------------------------
-# $File: hitachi-sh,v 1.6 2013/01/29 19:31:33 christos Exp $
+# $File: hitachi-sh,v 1.8 2017/03/17 21:35:28 christos Exp $
# hitach-sh: file(1) magic for Hitachi Super-H
#
# Super-H COFF
#
-# below test line conflicts with 2nd NTFS filesystem sector
-0 beshort 0x0500 Hitachi SH big-endian COFF
+# updated by Joerg Jenderek at Oct 2015
+# https://en.wikipedia.org/wiki/COFF
+# https://de.wikipedia.org/wiki/Common_Object_File_Format
+# http://www.delorie.com/djgpp/doc/coff/filhdr.html
+# below test line conflicts with 2nd NTFS filesystem sector
# 2nd NTFS filesystem sector often starts with 0x05004e00 for unicode string 5 NTLDR
-#0 ubelong&0xFFFFNMPQ 0x0500NMPQ Hitachi SH big-endian COFF
->18 beshort&0x0002 =0x0000 object
->18 beshort&0x0002 =0x0002 executable
->18 beshort&0x0008 =0x0008 \b, stripped
->18 beshort&0x0008 =0x0000 \b, not stripped
-#
-0 leshort 0x0550 Hitachi SH little-endian COFF
->18 leshort&0x0002 =0x0000 object
->18 leshort&0x0002 =0x0002 executable
->18 leshort&0x0008 =0x0008 \b, stripped
->18 leshort&0x0008 =0x0000 \b, not stripped
+# and Portable Gaming Notation Compressed format (*.WID http://pgn.freeservers.com/)
+0 beshort 0x0500
+# test for unused flag bits (0x8000,0x0800,0x0400,0x0200,x0080) in f_flags
+>18 ubeshort&0x8E80 0
+# use big endian variant of subroutine to display name+variables+flags
+# for common object formated files
+>>0 use \^display-coff
+0 leshort 0x0550
+# test for unused flag bits in f_flags
+>18 uleshort&0x8E80 0
+# use little endian variant of subroutine to
+# display name+variables+flags for common object formated files
+>>0 use display-coff
+
Modified: trunk/contrib/file/magic/Magdir/ibm370
===================================================================
--- trunk/contrib/file/magic/Magdir/ibm370 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/ibm370 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: ibm370,v 1.9 2014/04/30 21:41:02 christos Exp $
+# $File: ibm370,v 1.10 2017/03/17 21:35:28 christos Exp $
# ibm370: file(1) magic for IBM 370 and compatibles.
#
# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
@@ -7,11 +7,11 @@
# What the heck *is* "USS/370"?
# AIX 4.1's "/etc/magic" has
#
-# 0 short 0535 370 sysV executable
+# 0 short 0535 370 sysV executable
# >12 long >0 not stripped
# >22 short >0 - version %d
# >30 long >0 - 5.2 format
-# 0 short 0530 370 sysV pure executable
+# 0 short 0530 370 sysV pure executable
# >12 long >0 not stripped
# >22 short >0 - version %d
# >30 long >0 - 5.2 format
@@ -18,11 +18,11 @@
#
# instead of the "USS/370" versions of the same magic numbers.
#
-0 beshort 0537 370 XA sysV executable
+0 beshort 0537 370 XA sysV executable
>12 belong >0 not stripped
>22 beshort >0 - version %d
>30 belong >0 - 5.2 format
-0 beshort 0532 370 XA sysV pure executable
+0 beshort 0532 370 XA sysV pure executable
>12 belong >0 not stripped
>22 beshort >0 - version %d
>30 belong >0 - 5.2 format
Modified: trunk/contrib/file/magic/Magdir/ibm6000
===================================================================
--- trunk/contrib/file/magic/Magdir/ibm6000 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/ibm6000 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: ibm6000,v 1.12 2013/09/16 15:12:42 christos Exp $
+# $File: ibm6000,v 1.13 2017/03/17 21:35:28 christos Exp $
# ibm6000: file(1) magic for RS/6000 and the RT PC.
#
0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
@@ -21,7 +21,7 @@
0 beshort 0x01f7 64-bit XCOFF executable or object module
>20 belong 0 not stripped
# GRR: this test is still too general as it catches also many FATs of DOS filesystems
-4 belong &0x0feeddb0
+4 belong &0x0feeddb0
# real core dump could not be 32-bit and 64-bit together
>7 byte&0x03 !3 AIX core file
>>1 byte &0x01 fulldump
Modified: trunk/contrib/file/magic/Magdir/icc
===================================================================
--- trunk/contrib/file/magic/Magdir/icc 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/icc 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: icc,v 1.1 2013/01/08 01:43:18 christos Exp $
+# $File: icc,v 1.5 2017/08/13 00:21:47 christos Exp $
# icc: file(1) magic for International Color Consortium file formats
#
@@ -11,41 +11,204 @@
# http://www.color.org/specification/ICC1v43_2010-12.pdf
#
# for Specification ICC.1:2010 (Profile version 4.3.0.0).
+# URL: http://fileformats.archiveteam.org/wiki/ICC_profile
+# Reference: http://www.color.org/iccmax/ICC.2-2016-7.pdf
+# Update: Joerg Jenderek
#
# Bytes 36 to 39 contain a generic profile file signature of "acsp";
# bytes 40 to 43 "may be used to identify the primary platform/operating
# system framework for which the profile was created".
#
-# There are other fields that might be worth dumping as well.
+# check and display ICC/ICM color profile
+0 name color-profile
+>36 string acsp
+# skip ASCII like Cognacspirit.txt by month <= 12
+>>26 ubeshort <13
+# platform/operating system. Only 5 mentioned
+
#
-
# This appears to be what's used for Apple ColorSync profiles.
# Instead of adding that, Apple just changed the generic "acsp" entry
# to be for "ColorSync ICC Color Profile" rather than "Kodak Color
# Management System, ICC Profile".
# Yes, it's "APPL", not "AAPL"; see the spec.
-36 string acspAPPL ColorSync ICC Profile
-!:mime application/vnd.iccprofile
+>>>40 string APPL ColorSync
# Microsoft ICM color profile
-36 string acspMSFT Microsoft ICM Color Profile
-!:mime application/vnd.iccprofile
+>>>40 string MSFT Microsoft
# Yes, that's a blank after "SGI".
-36 string acspSGI\ SGI ICC Profile
-!:mime application/vnd.iccprofile
+>>>40 string SGI\ SGI
# XXX - is this what's used for the Sun KCMS or not? The standard file
# uses just "acsp" for that, but Apple's file uses it for "ColorSync",
# and there *is* an identified "primary platform" value of SUNW.
-36 string acspSUNW Sun KCMS ICC Profile
+>>>40 string SUNW Sun KCMS
+
+# 5th platform
+>>>40 string TGNT Taligent
+
+# remaining "l" "e" of "color profile" printed later to avoid error
+>>>40 string x color profi
+#>>>40 string x (%.4s)
!:mime application/vnd.iccprofile
+# for "ICM" extension only versions 2.x and for Kodak "CC" 2.0 is found
+>>>8 ubyte =2
+# do not use empty message text to a avoid error like
+# icc, 82: Warning: Current entry does not yet have a description for adding a EXTENSION type
+# file.exe: could not find any valid magic files!
+>>>>9 ubyte !0 \ble
+!:ext icc/icm
+# minor version
+>>>>9 ubyte =0 \bl
+# Kodak colour management system
+>>>>>4 string =KCMS \be
+!:ext icc/icm/cc
+>>>>>4 string !KCMS \be
+!:ext icc/icm
+>>>8 ubyte !2 \ble
+!:ext icc
+# Profile version major.4bit-minor.sub1.sub2 like 4.3.0.0 (04300000h)
+>>>8 ubyte x %u
+>>>9 ubyte/16 x \b.%u
+# reserved and shall be null but 205.205 in umx1220u.icm
+>>>10 ubyte >0 \b.%u
+>>>>11 ubyte >0 \b.%u
+# preferred colour management module like appl CCMS KCMS Lino UCCM "Win " "FF "
+# skip space like in brmsl08f.icm and null like in brmsl09f.icm, brmsl07f.icm
+>>>4 string >\ \b, type %.2s
+>>>>6 string >\ \b%.1s
+>>>>>7 string >\ \b%.1s
+# colour space "XYZ " "Lab " "RGB " CMYK GRAY ...
+>>>16 string x \b, %.3s
+>>>19 string >\ \b%.1s
+# Profile Connection Space (PCS) field usually "XYZ " or "Lab " but sometimes
+# null or CMYK like in ISOcoated_v2_to_PSOcoated_v3_DeviceLink.icc
+>>>20 string >\0 \b/%.3s
+>>>>23 string >\ \b%.1s
+# eleven device classes
+>>>12 string x \b-%.4s device
+# skip 00001964h in hpf69000.icc or 0h in XRDC50Q.ICM or " ROT" in brmsl05f.icm
+>>>52 string >\040
+# skip "none" model like in "Trinitron Compatible 9300K G2.2.icm"
+>>>>52 ubelong !0x6e6f6e65
+# device manufacturer field like "HP " "IBM " EPSO
+>>>>>48 string x \b, %.2s
+>>>>>50 string >\ \b%.1s
+>>>>>51 string >\ \b%.1s
+# model like "ADI " "A265" and skip 20000404h in IS330.icm for RICOH RUSSIAN-SC
+>>>>>52 string >\ \ \b/%.3s
+>>>>>>55 string >\ \b%.1s
+>>>>>52 string x model
+# creator (often same as manufacture) like HP SONY XROX or null like in A925A.icm
+>>>80 string >\0 by %.2s
+>>>>82 string >\ \b%.1s
+>>>>>83 string >\ \b%.1s
+# profile size
+>>>0 ubelong x \b, %u bytes
+# skip invalid date 0 like in linearSRGB.icc
+>>>24 ubequad !0
+# datetime dd-mm-yyyy hh:mm:ss
+>>>>28 ubeshort x \b, %u
+# month <= 12
+>>>>26 ubeshort x \b-%u
+# year
+>>>>24 ubeshort x \b-%u
+# do not display midnight time like in CNHP8308.ICC
+>>>>30 ubequad&0xFFffFFffFFff0000 !0
+# hour <= 24
+>>>>>30 ubeshort x %u
+# minutes <= 59
+>>>>>32 ubeshort x \b:%.2u
+# seconds <= 59
+>>>>>34 ubeshort x \b:%.2u
+# vendor specific flags like 2 in HPCLJ5.ICM
+>>>44 ubeshort >0 \b, 0x%x vendor flags
+# profile flags bits 0-2 of least 16 used by ICC
+#>>>44 ubelong >0 \b, 0x%x flags
+# icEmbeddedProfileTrue
+>>>44 ubelong &1 \b, embedded
+# icEmbeddedProfileFalse
+#>>>44 ubelong ^1 \b, not embedded
+# icUseWithEmbeddedDataOnly
+>>>44 ubelong &2 \b, dependently
+# icUseAnywhere
+#>>>44 ubelong ^2 \b, independently
+>>>44 ubelong &4 \b, MCS
+#>>>44 ubelong ^4 \b, no MCS
+# vendor specific device attributes 1~srgb.icc
+# E000D00h~CNB7QEDA.ICM C000A00h~CNB5FCAA.ICM 01040401h~CNB25PE3.ICM
+>>>56 ubelong >0 \b, 0x%x vendor attribute
+# ICC device attributes bits 0-7 used
+#>>>60 ubelong x \b, 0x%x attribute
+# http://www.color.org/icc34.h
+>>>60 ubelong &0x01 \b, transparent
+#>>>60 ubelong ^0x01 \b, reflective
+>>>60 ubelong &0x02 \b, matte
+#>>>60 ubelong ^0x02 \b, glossy
+>>>60 ubelong &0x04 \b, negative
+#>>>60 ubelong ^0x04 \b, positive
+>>>60 ubelong &0x08 \b, black&white
+#>>>60 ubelong ^0x08 \b, colour
+>>>60 ubelong &0x10 \b, non-paper
+#>>>60 ubelong ^0x10 \b, paper
+>>>60 ubelong &0x20 \b, non-textured
+#>>>60 ubelong ^0x20 \b, textured
+>>>60 ubelong &0x40 \b, non-isotropic
+#>>>60 ubelong ^0x40 \b, isotropic
+>>>60 ubelong &0x80 \b, self-luminous
+#>>>60 ubelong ^0x80 \b, non-self-luminous
+# rendering intent 0-3 but 7AEA5027h in EE051__1.ICM 6CB1BCh in EE061__1.ICM
+>>>64 ubelong >3 \b, 0x%x rendering intent
+#>>>64 ubelong =0 \b, perceptual
+>>>64 ubelong =1 \b, relative colorimetric
+>>>64 ubelong =2 \b, saturation
+>>>64 ubelong =3 \b, absolute colorimetric
+# PCS illuminant (3*s15Fixed16Numbers) often 0000f6d6 00010000 0000d32d
+>>>71 ubequad !0xd6000100000000d3 \b, PCS
+# usually X~0.9642*65536=63189.8112~63190=F6D5h ; but also found
+# often F6D6 in gt5000r.icm, F6B8 in kodakce.icm, F6CA in RSWOP.icm
+>>>>68 ubelong !0x0000f6d5 X=0x%x
+# usually Y=1.0~00010000h but Y=0 in brmsl07f.icm
+>>>>72 ubelong !0x00010000 Y=0x%x
+# usually Z~0.8249*65536=54060.6464~54061=D32Dh ; but also found
+# D2F7 in hp1200c.icm, often D32C in A925A.icm, D309 in RSWOP.icm , D2F8 in kodak_dc.icm
+>>>>76 ubelong !0x0000d32d Z=0x%x
+# Profile ID. MD5 fingerprinting method as defined in Internet RFC 1321.
+>>>84 ubequad >0 \b, 0x%llx MD5
+# reserved in older versions should be zero but also found CDCDCDCDCDCDCDCD
+#>>100 ubequad x \b 0x%llx reserved
+# tag table
+# 6 <= tags count <= 43
+#>>>128 ubelong >43 \b, %u tags
+>>>128 ubelong x
+# shall contain the profileDescriptionTag "desc" , copyrightTag "cprt"
+# search range = tags count * 12 -8=< maximal tag count * 12 -8= 43 * 12 -8= 508
+>>>>132 search/508 cprt
+# but no copyright tag in linearSRGB.icc
+# beneath /System/Library/Frameworks/WebKit.framework/
+# Versions/A/Frameworks/WebCore.framework/Versions/A/Resources
+>>>>132 default x \b, no copyright tag
+# 1st tag
+#>>>132 string x \b, 1st tag %.4s
+#>>>136 ubelong x 0x%x offset
+#>>>140 ubelong x 0x%x len
+# 2nd tag,...
+# look also for profileDescriptionTag "desc"
+>>>132 search/508 desc
+# look further for TextDescriptionType "desc" signature
+>>>>(&0.L) string =desc
+>>>>>&4 pstring/l x "%s"
+# look alternative for multiLocalizedUnicodeType "mluc" signature like in VideoPAL.icc
+>>>>(&0.L) string =mluc
+>>>>>&(&8.L) ubequad x
+>>>>>>&4 bestring16 x '%s'
# Any other profile.
# XXX - should we use "acsp\0\0\0\0" for "no primary platform" profiles,
# and use "acsp" for everything else and dump the "primary platform"
# string in those cases?
-36 string acsp ICC Profile
-!:mime application/vnd.iccprofile
+36 string acsp
+>0 use color-profile
Modified: trunk/contrib/file/magic/Magdir/iff
===================================================================
--- trunk/contrib/file/magic/Magdir/iff 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/iff 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: iff,v 1.13 2011/09/06 11:00:06 christos Exp $
+# $File: iff,v 1.14 2015/09/07 10:03:21 christos Exp $
# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
#
# Daniel Quinlan (quinlan at yggdrasil.com) -- IFF was designed by Electronic
@@ -62,6 +62,7 @@
# These go at the end of the iff rules
#
+# David Griffith <dave at 661.org>
# I don't see why these might collide with anything else.
#
# Interactive Fiction related formats
@@ -69,3 +70,4 @@
>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)
+!:mime application/x-blorb
Modified: trunk/contrib/file/magic/Magdir/images
===================================================================
--- trunk/contrib/file/magic/Magdir/images 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/images 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: images,v 1.91 2014/04/30 21:41:02 christos Exp $
+# $File: images,v 1.126 2017/06/11 22:25:44 christos Exp $
# images: file(1) magic for image formats (see also "iff", and "c-lang" for
# XPM bitmaps)
#
@@ -12,66 +12,211 @@
# Targa - matches `povray', `ppmtotga' and `xv' outputs
# by Philippe De Muyter <phdm at macqel.be>
+# URL: http://justsolve.archiveteam.org/wiki/TGA
+# Reference: http://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf
+# Update: Joerg Jenderek
# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
+# ,32 or 33 (both not observed)
# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
+# or theoretically 2-128 reserved for use by Truevision or 128-255 may be used for developer applications
# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
# `tgatoppm' recognizes a superset (Index may be anything)
-1 belong&0xfff7ffff 0x01010000 Targa image data - Map
-!:strength + 2
->2 byte&8 8 - RLE
->12 leshort >0 %d x
->14 leshort >0 %d
-1 belong&0xfff7ffff 0x00020000 Targa image data - RGB
-!:strength + 2
->2 byte&8 8 - RLE
->12 leshort >0 %d x
->14 leshort >0 %d
-1 belong&0xfff7ffff 0x00030000 Targa image data - Mono
-!:strength + 2
->2 byte&8 8 - RLE
->12 leshort >0 %d x
->14 leshort >0 %d
+#
+# test of Color Map Type 0~no 1~color map
+# and Image Type 1 2 3 9 10 11 32 33
+# and Color Map Entry Size 0 15 16 24 32
+0 ubequad&0x00FeC400000000C0 0
+# skip more garbage by looking for positive image type
+>2 ubyte >0
+# skip some compiled terminfo by looking for image type less equal 33
+>>2 ubyte <34
+# skip arches.3200 , Finder.Root , Slp.1 by looking for low pixel sizes 15 16 24 32
+>>>16 ubyte <33
+# skip more by looking for pixel size 0Fh 10h 18h 20h
+>>>>16 ubyte&0xC0 0x00
+# Color Map
+>>>>>1 belong&0xfff7ffff 0x01010000
+>>>>>>0 use tga-image
+>>>>>1 belong&0xfff7ffff 0x00020000
+>>>>>>0 use tga-image
+>>>>>1 belong&0xfff7ffff 0x00030000
+>>>>>>0 use tga-image
+>>>>>1 default x
+# skip 260-16.ico by looking for no color map
+>>>>>>1 ubyte 0
+# implies no first map entry
+>>>>>>>3 uleshort 0
+>>>>>>>>0 use tga-image
+# display tga bitmap image information
+0 name tga-image
+>2 ubyte <34 Targa image data
+!:mime image/x-tga
+!:apple ????TPIC
+# normal extension .tga but some Truevision products used others:
+# tpic (Apple),icb (Image Capture Board),vda (Video Display Adapter),vst (NuVista),win (UNSURE about that)
+!:ext tga/tpic/icb/vda/vst
+# image type 1 2 3 9 10 11 32 33
+>2 ubyte&0xF7 1 - Map
+>2 ubyte&0xF7 2 - RGB
+# alpha channel
+>>17 ubyte&0x0F >0 \bA
+>2 ubyte&0xF7 3 - Mono
+# type not found, but by http://www.fileformat.info/format/tga/corion.htm
+# Compressed color-mapped data, using Huffman, Delta, and runlength encoding
+>2 ubyte 32 - Color
+# Compressed color-mapped data, using Huffman, Delta, and RLE. 4-pass quadtree- type process
+>2 ubyte 33 - Color
+# Color Map Type 0~no 1~color map
+>1 ubyte 1 (
+# first color map entry, 0 normal
+>>3 uleshort >0 \b%d-
+# color map length 0 2 1dh 3bh d9h 100h
+>>5 uleshort x \b%d)
+# 8~run length encoding bit
+>2 ubyte&0x08 8 - RLE
+# gimp can create big pictures!
+>12 uleshort >0 %d x
+>12 uleshort =0 65536 x
+# image height. 0 interpreted as 65536
+>14 uleshort >0 %d
+>14 uleshort =0 65536
+# Image Pixel Size 15 16 24 32
+>16 ubyte x x %d
+# X origin of image. 0 normal
+>8 uleshort >0 +%d
+# Y origin of image. 0 normal; positive for top
+>10 uleshort >0 +%d
+# Image descriptor: bits 3-0 give the alpha channel depth, bits 5-4 give direction
+>17 ubyte&0x0F >0 - %d-bit alpha
+# bits 5-4 give direction. normal bottom left
+>17 ubyte &0x20 - top
+#>17 ubyte ^0x20 - bottom
+>17 ubyte &0x10 - right
+#>17 ubyte ^0x10 - left
+# some info say other bits 6-7 should be zero
+# but data storage interleave by http://www.fileformat.info/format/tga/corion.htm
+# 00 - no interleave;01 - even/odd interleave; 10 - four way interleave; 11 - reserved
+#>17 ubyte&0xC0 0x00 - no interleave
+>17 ubyte&0xC0 0x40 - interleave
+>17 ubyte&0xC0 0x80 - four way interleave
+>17 ubyte&0xC0 0xC0 - reserved
+# positive length implies identification field
+>0 ubyte >0
+>>18 string x "%s"
+# last 18 bytes of newer tga file footer signature
+>18 search/4261301/s TRUEVISION-XFILE.\0
+# extension area offset if not 0
+>>&-8 ulelong >0
+# length of the extension area. normal 495 for version 2.0
+>>>(&-4.l) uleshort 0x01EF
+# AuthorName[41]
+>>>>&0 string >\0 - author "%-.40s"
+# Comment[324]=4 * 80 null terminated
+>>>>&41 string >\0 - comment "%-.80s"
+# date
+>>>>&365 ubequad&0xffffFFFFffff0000 !0
+# Day
+>>>>>&-6 uleshort x %d
+# Month
+>>>>>&-8 uleshort x \b-%d
+# Year
+>>>>>&-4 uleshort x \b-%d
+# time
+>>>>&371 ubequad&0xffffFFFFffff0000 !0
+# hour
+>>>>>&-8 uleshort x %d
+# minutes
+>>>>>&-6 uleshort x \b:%.2d
+# second
+>>>>>&-4 uleshort x \b:%.2d
+# JobName[41]
+>>>>&377 string >\0 - job "%-.40s"
+# JobHour Jobminute Jobsecond
+>>>>&418 ubequad&0xffffFFFFffff0000 !0
+>>>>>&-8 uleshort x %d
+>>>>>&-6 uleshort x \b:%.2d
+>>>>>&-4 uleshort x \b:%.2d
+# SoftwareId[41]
+>>>>&424 string >\0 - %-.40s
+# SoftwareVersionNumber
+>>>>&424 ubyte >0
+>>>>>&40 uleshort/100 x %d
+>>>>>&40 uleshort%100 x \b.%d
+# VersionLetter
+>>>>>&42 ubyte >0x20 \b%c
+# KeyColor
+>>>>&468 ulelong >0 - keycolor 0x%8.8x
+# Denominator of Pixel ratio. 0~no pixel aspect
+>>>>&474 uleshort >0
+# Numerator
+>>>>>&-4 uleshort >0 - aspect %d
+>>>>>&-2 uleshort x \b/%d
+# Denominator of Gamma ratio. 0~no Gamma value
+>>>>&478 uleshort >0
+# Numerator
+>>>>>&-4 uleshort >0 - gamma %d
+>>>>>&-2 uleshort x \b/%d
+# ColorOffset
+#>>>>&480 ulelong x - col offset 0x%8.8x
+# StampOffset
+#>>>>&484 ulelong x - stamp offset 0x%8.8x
+# ScanOffset
+#>>>>&488 ulelong x - scan offset 0x%8.8x
+# AttributesType
+#>>>>&492 ubyte x - Attributes 0x%x
+## EndOfTGA
# PBMPLUS images
# The next byte following the magic is always whitespace.
# strength is changed to try these patterns before "x86 boot sector"
-0 search/1 P1
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PBM image text
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
+0 name netpbm
+>3 regex/s =[0-9]{1,50}\ [0-9]{1,50} Netpbm image data
+>>&0 regex =[0-9]{1,50} \b, size = %s x
+>>>&0 regex =[0-9]{1,50} \b %s
+
+0 search/1 P1
+>0 regex/4 P1[\040\t\f\r\n]
+>>0 use netpbm
+>>>0 string x \b, bitmap
!:strength + 45
!:mime image/x-portable-bitmap
-0 search/1 P2
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PGM image text
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
+
+0 search/1 P2
+>0 regex/4 P2[\040\t\f\r\n]
+>>0 use netpbm
+>>>0 string x \b, greymap
!:strength + 45
!:mime image/x-portable-greymap
+
0 search/1 P3
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PPM image text
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
+>0 regex/4 P3[\040\t\f\r\n]
+>>0 use netpbm
+>>>0 string x \b, pixmap
!:strength + 45
!:mime image/x-portable-pixmap
-0 string P4
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PBM "rawbits" image data
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
+
+0 string P4
+>0 regex/4 P4[\040\t\f\r\n]
+>>0 use netpbm
+>>>0 string x \b, rawbits, bitmap
!:strength + 45
!:mime image/x-portable-bitmap
-0 string P5
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PGM "rawbits" image data
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
+
+0 string P5
+>0 regex/4 P5[\040\t\f\r\n]
+>>0 use netpbm
+>>>0 string x \b, rawbits, greymap
!:strength + 45
!:mime image/x-portable-greymap
-0 string P6
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PPM "rawbits" image data
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
+
+0 string P6
+>0 regex/4 P6[\040\t\f\r\n]
+>>0 use netpbm
+>>>0 string x \b, rawbits, pixmap
!:strength + 45
!:mime image/x-portable-pixmap
+
0 string P7 Netpbm PAM image file
!:mime image/x-portable-pixmap
@@ -115,9 +260,156 @@
# never changed. The TIFF specification recommends testing for it.
0 string MM\x00\x2a TIFF image data, big-endian
!:mime image/tiff
+>(4.L) use \^tiff_ifd
0 string II\x2a\x00 TIFF image data, little-endian
!:mime image/tiff
+>(4.l) use tiff_ifd
+0 name tiff_ifd
+>0 leshort x \b, direntries=%d
+>2 use tiff_entry
+
+0 name tiff_entry
+# NewSubFileType
+>0 leshort 0xfe
+>>12 use tiff_entry
+>0 leshort 0x100
+>>4 lelong 1
+>>>12 use tiff_entry
+>>>8 leshort x \b, width=%d
+>0 leshort 0x101
+>>4 lelong 1
+>>>8 leshort x \b, height=%d
+>>>12 use tiff_entry
+>0 leshort 0x102
+>>8 leshort x \b, bps=%d
+>>12 use tiff_entry
+>0 leshort 0x103
+>>4 lelong 1 \b, compression=
+>>>8 leshort 1 \bnone
+>>>8 leshort 2 \bhuffman
+>>>8 leshort 3 \bbi-level group 3
+>>>8 leshort 4 \bbi-level group 4
+>>>8 leshort 5 \bLZW
+>>>8 leshort 6 \bJPEG (old)
+>>>8 leshort 7 \bJPEG
+>>>8 leshort 8 \bdeflate
+>>>8 leshort 9 \bJBIG, ITU-T T.85
+>>>8 leshort 0xa \bJBIG, ITU-T T.43
+>>>8 leshort 0x7ffe \bNeXT RLE 2-bit
+>>>8 leshort 0x8005 \bPackBits (Macintosh RLE)
+>>>8 leshort 0x8029 \bThunderscan RLE
+>>>8 leshort 0x807f \bRasterPadding (CT or MP)
+>>>8 leshort 0x8080 \bRLE (Line Work)
+>>>8 leshort 0x8081 \bRLE (High-Res Cont-Tone)
+>>>8 leshort 0x8082 \bRLE (Binary Line Work)
+>>>8 leshort 0x80b2 \bDeflate (PKZIP)
+>>>8 leshort 0x80b3 \bKodak DCS
+>>>8 leshort 0x8765 \bJBIG
+>>>8 leshort 0x8798 \bJPEG2000
+>>>8 leshort 0x8799 \bNikon NEF Compressed
+>>>8 default x
+>>>>8 leshort x \b(unknown 0x%x)
+>>>12 use tiff_entry
+>0 leshort 0x106 \b, PhotometricIntepretation=
+>>8 clear x
+>>8 leshort 0 \bWhiteIsZero
+>>8 leshort 1 \bBlackIsZero
+>>8 leshort 2 \bRGB
+>>8 leshort 3 \bRGB Palette
+>>8 leshort 4 \bTransparency Mask
+>>8 leshort 5 \bCMYK
+>>8 leshort 6 \bYCbCr
+>>8 leshort 8 \bCIELab
+>>8 default x
+>>>8 leshort x \b(unknown=0x%x)
+>>12 use tiff_entry
+# FillOrder
+>0 leshort 0x10a
+>>4 lelong 1
+>>>12 use tiff_entry
+# DocumentName
+>0 leshort 0x10d
+>>(8.l) string x \b, name=%s
+>>>12 use tiff_entry
+# ImageDescription
+>0 leshort 0x10e
+>>(8.l) string x \b, description=%s
+>>>12 use tiff_entry
+# Make
+>0 leshort 0x10f
+>>(8.l) string x \b, manufacturer=%s
+>>>12 use tiff_entry
+# Model
+>0 leshort 0x110
+>>(8.l) string x \b, model=%s
+>>>12 use tiff_entry
+# StripOffsets
+>0 leshort 0x111
+>>12 use tiff_entry
+# Orientation
+>0 leshort 0x112 \b, orientation=
+>>8 leshort 1 \bupper-left
+>>8 leshort 3 \blower-right
+>>8 leshort 6 \bupper-right
+>>8 leshort 8 \blower-left
+>>8 leshort 9 \bundefined
+>>8 default x
+>>>8 leshort x \b[*%d*]
+>>12 use tiff_entry
+# XResolution
+>0 leshort 0x11a
+>>8 lelong x \b, xresolution=%d
+>>12 use tiff_entry
+# YResolution
+>0 leshort 0x11b
+>>8 lelong x \b, yresolution=%d
+>>12 use tiff_entry
+# ResolutionUnit
+>0 leshort 0x128
+>>8 leshort x \b, resolutionunit=%d
+>>12 use tiff_entry
+# Software
+>0 leshort 0x131
+>>(8.l) string x \b, software=%s
+>>12 use tiff_entry
+# Datetime
+>0 leshort 0x132
+>>(8.l) string x \b, datetime=%s
+>>12 use tiff_entry
+# HostComputer
+>0 leshort 0x13c
+>>(8.l) string x \b, hostcomputer=%s
+>>12 use tiff_entry
+# WhitePoint
+>0 leshort 0x13e
+>>12 use tiff_entry
+# PrimaryChromaticities
+>0 leshort 0x13f
+>>12 use tiff_entry
+# YCbCrCoefficients
+>0 leshort 0x211
+>>12 use tiff_entry
+# YCbCrPositioning
+>0 leshort 0x213
+>>12 use tiff_entry
+# ReferenceBlackWhite
+>0 leshort 0x214
+>>12 use tiff_entry
+# Copyright
+>0 leshort 0x8298
+>>(8.l) string x \b, copyright=%s
+>>12 use tiff_entry
+# ExifOffset
+>0 leshort 0x8769
+>>12 use tiff_entry
+# GPS IFD
+>0 leshort 0x8825 \b, GPS-Data
+>>12 use tiff_entry
+
+#>0 leshort x \b, unknown=0x%x
+#>>12 use tiff_entry
+
0 string MM\x00\x2b Big TIFF image data, big-endian
!:mime image/tiff
0 string II\x2b\x00 Big TIFF image data, little-endian
@@ -127,22 +419,36 @@
# (Greg Roelofs, newt at uchicago.edu)
# (Albert Cahalan, acahalan at cs.uml.edu)
#
-# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
+# 137 P N G \r \n ^Z \n [4-byte length] I H D R [HEAD data] [HEAD crc] ...
#
-0 string \x89PNG\x0d\x0a\x1a\x0a PNG image data
+
+# IHDR parser
+0 name png-ihdr
+>0 belong x \b, %d x
+>4 belong x %d,
+>8 byte x %d-bit
+>9 byte 0 grayscale,
+>9 byte 2 \b/color RGB,
+>9 byte 3 colormap,
+>9 byte 4 gray+alpha,
+>9 byte 6 \b/color RGBA,
+#>10 byte 0 deflate/32K,
+>12 byte 0 non-interlaced
+>12 byte 1 interlaced
+
+# Standard PNG image.
+0 string \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0DIHDR PNG image data
!:mime image/png
->16 belong x \b, %d x
->20 belong x %d,
->24 byte x %d-bit
->25 byte 0 grayscale,
->25 byte 2 \b/color RGB,
->25 byte 3 colormap,
->25 byte 4 gray+alpha,
->25 byte 6 \b/color RGBA,
-#>26 byte 0 deflate/32K,
->28 byte 0 non-interlaced
->28 byte 1 interlaced
+!:strength +10
+>16 use png-ihdr
+# Apple CgBI PNG image.
+0 string \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x04CgBI
+>24 string \x00\x00\x00\x0DIHDR PNG image data (CgBI)
+!:mime image/png
+!:strength +10
+>>32 use png-ihdr
+
# possible GIF replacements; none yet released!
# (Greg Roelofs, newt at uchicago.edu)
#
@@ -151,13 +457,13 @@
!:mime image/x-unknown
#
# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better):
-#
+#
0 string FGF95a FGF image (GIF+deflate beta)
!:mime image/x-unknown
#
# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal
# (best; not yet implemented):
-#
+#
0 string PBF PBF image (deflate compression)
!:mime image/x-unknown
@@ -241,19 +547,19 @@
# http://www.blackfiveservices.co.uk/awbmtools.shtml
# http://biosgfx.narod.ru/v3/
# http://biosgfx.narod.ru/abr-2/
-0 string AWBM
+0 string AWBM
>4 leshort <1981 Award BIOS bitmap
!:mime image/x-award-bmp
# image width is a multiple of 4
->>4 leshort&0x0003 0
+>>4 leshort&0x0003 0
>>>4 leshort x \b, %d
>>>6 leshort x x %d
>>4 leshort&0x0003 >0 \b,
->>>4 leshort&0x0003 =1
+>>>4 leshort&0x0003 =1
>>>>4 leshort x %d+3
->>>4 leshort&0x0003 =2
+>>>4 leshort&0x0003 =2
>>>>4 leshort x %d+2
->>>4 leshort&0x0003 =3
+>>>4 leshort&0x0003 =3
>>>>4 leshort x %d+1
>>>6 leshort x x %d
# at offset 8 starts imagedata followed by "RGB " marker
@@ -393,8 +699,12 @@
0 beshort 0x1010 PEX Binary Archive
# DICOM medical imaging data
+# URL: https://en.wikipedia.org/wiki/DICOM#Data_format
+# Note: "dcm" is the official file name extension
+# XnView mention also "dc3" and "acr" as file name extension
128 string DICM DICOM medical imaging data
!:mime application/dicom
+!:ext dcm/dicom/dic
# XWD - X Window Dump file.
# As described in /usr/X11R6/include/X11/XWDFile.h
@@ -473,11 +783,11 @@
# http://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt
# GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000
# test for bytes 0x0a,version byte (0,2,3,4,5),compression byte flag(0,1), bit depth (>0) of PCX or T5.DBT,T6.DBT
-0 ubelong&0xffF8fe00 0x0a000000
-# for PCX bit depth > 0
->3 ubyte >0
+0 ubelong&0xffF8fe00 0x0a000000
+# for PCX bit depth > 0
+>3 ubyte >0
# test for valid versions
->>1 ubyte <6
+>>1 ubyte <6
>>>1 ubyte !1 PCX
!:mime image/x-pcx
#!:mime image/pcx
@@ -533,13 +843,69 @@
>25 string >\0 dated %.14s
# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
-0 belong 0x00010008 GEM Image data
->12 beshort x %d x
->14 beshort x %d,
->4 beshort x %d planes,
->8 beshort x %d x
->10 beshort x %d pixelsize
+# Format variations from: Bernd Nuernberger <bernd.nuernberger at web.de>
+# Update: Joerg Jenderek
+# See http://fileformats.archiveteam.org/wiki/GEM_Raster
+# For variations, also see:
+# http://www.seasip.info/Gem/ff_img.html (Ventura)
+# http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT)
+# http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT)
+# http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG)
+0 beshort 0x0001
+# header_size
+>2 beshort 0x0008
+>>0 use gem_info
+>2 beshort 0x0009
+>>0 use gem_info
+# no example for NOSIG
+>2 beshort 24
+>>0 use gem_info
+# no example for HYPERPAINT
+>2 beshort 25
+>>0 use gem_info
+16 string XIMG\0
+>0 use gem_info
+# no example
+16 string STTT\0\x10
+>0 use gem_info
+# no example or description
+16 string TIMG\0
+>0 use gem_info
+0 name gem_info
+# version is 2 for some XIMG and 1 for all others
+>0 beshort <0x0003 GEM
+# http://www.snowstone.org.uk/riscos/mimeman/mimemap.txt
+!:mime image/x-gem
+# header_size 24 25 27 59 779 words for colored bitmaps
+>>2 beshort >9
+>>>16 string STTT\0\x10 STTT
+>>>16 string TIMG\0 TIMG
+# HYPERPAINT or NOSIG variant
+>>>16 string \0\x80
+>>>>2 beshort =24 NOSIG
+>>>>2 beshort !24 HYPERPAINT
+# NOSIG or XIMG variant
+>>>16 default x
+>>>>16 string !XIMG\0 NOSIG
+>>16 string =XIMG\0 XIMG Image data
+!:ext img/ximg
+# to avoid Warning: Current entry does not yet have a description for adding a EXTENSION type
+>>16 string !XIMG\0 Image data
+!:ext img
+# header_size is 9 for Ventura files and 8 for other GEM Paint files
+>>2 beshort 9 (Ventura)
+#>>2 beshort 8 (Paint)
+>>12 beshort x %d x
+>>14 beshort x %d,
+# 1 4 8
+>>4 beshort x %d planes,
+# in tenths of a millimetre
+>>8 beshort x %d x
+>>10 beshort x %d pixelsize
+# pattern_size 1-8. 2 for GEM Paint
+>>6 beshort !2 \b, pattern size %d
+
# GEM Metafile (Wolfram Kleff)
0 lelong 0x0018FFFF GEM Metafile data
>4 leshort x version %d
@@ -827,7 +1193,22 @@
!:mime image/x-polar-monitor-bitmap
# From: Rick Richardson <rickrich at gmail.com>
+# updated by: Joerg Jenderek
+# URL: http://techmods.net/nuvi/
0 string GARMIN\ BITMAP\ 01 Garmin Bitmap file
+# extension is also used for
+# Sony SRF raw image (image/x-sony-srf)
+# SRF map
+# Terragen Surface Map (http://www.planetside.co.uk/terragen)
+# FileLocator Pro search criteria file (http://www.mythicsoft.com/filelocatorpro)
+!:ext srf
+#!:mime image/x-garmin-srf
+# version 1.00,2.00,2.10,2.40,2.50
+>0x2f string >0 \b, version %4.4s
+# width (2880,2881,3240)
+>0x55 uleshort >0 \b, %dx
+# height (80,90)
+>>0x53 uleshort x \b%d
# Type: Ulead Photo Explorer5 (.pe5)
# URL: http://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese)
@@ -891,7 +1272,210 @@
# From: "Tano M. Fotang" <mfotang at quanteq.com>
0 string \x46\x4d\x52\x00 ISO/IEC 19794-2 Format Minutiae Record (FMR)
-# WEBP https://developers.google.com/speed/webp/docs/riff_container
-0 string RIFF
->8 string WEBP Web/P image data
->>4 lelong x \b, %d bytes
+# doc: http://www.shikino.co.jp/eng/products/images/FLOWER.jpg.zip
+# example: http://www.shikino.co.jp/eng/products/images/FLOWER.wdp.zip
+90 bequad 0x574D50484F544F00 JPEG-XR Image
+>98 byte&0x08 =0x08 \b, hard tiling
+>99 byte&0x80 =0x80 \b, tiling present
+>99 byte&0x40 =0x40 \b, codestream present
+>99 byte&0x38 x \b, spatial xform=
+>99 byte&0x38 0x00 \bTL
+>99 byte&0x38 0x08 \bBL
+>99 byte&0x38 0x10 \bTR
+>99 byte&0x38 0x18 \bBR
+>99 byte&0x38 0x20 \bBT
+>99 byte&0x38 0x28 \bRB
+>99 byte&0x38 0x30 \bLT
+>99 byte&0x38 0x38 \bLB
+>100 byte&0x80 =0x80 \b, short header
+>>102 beshort+1 x \b, %d
+>>104 beshort+1 x \bx%d
+>100 byte&0x80 =0x00 \b, long header
+>>102 belong+1 x \b, %x
+>>106 belong+1 x \bx%x
+>101 beshort&0xf x \b, bitdepth=
+>>101 beshort&0xf 0x0 \b1-WHITE=1
+>>101 beshort&0xf 0x1 \b8
+>>101 beshort&0xf 0x2 \b16
+>>101 beshort&0xf 0x3 \b16-SIGNED
+>>101 beshort&0xf 0x4 \b16-FLOAT
+>>101 beshort&0xf 0x5 \b(reserved 5)
+>>101 beshort&0xf 0x6 \b32-SIGNED
+>>101 beshort&0xf 0x7 \b32-FLOAT
+>>101 beshort&0xf 0x8 \b5
+>>101 beshort&0xf 0x9 \b10
+>>101 beshort&0xf 0xa \b5-6-5
+>>101 beshort&0xf 0xb \b(reserved %d)
+>>101 beshort&0xf 0xc \b(reserved %d)
+>>101 beshort&0xf 0xd \b(reserved %d)
+>>101 beshort&0xf 0xe \b(reserved %d)
+>>101 beshort&0xf 0xf \b1-BLACK=1
+>101 beshort&0xf0 x \b, colorfmt=
+>>101 beshort&0xf0 0x00 \bYONLY
+>>101 beshort&0xf0 0x10 \bYUV240
+>>101 beshort&0xf0 0x20 \bYWV422
+>>101 beshort&0xf0 0x30 \bYWV444
+>>101 beshort&0xf0 0x40 \bCMYK
+>>101 beshort&0xf0 0x50 \bCMYKDIRECT
+>>101 beshort&0xf0 0x60 \bNCOMPONENT
+>>101 beshort&0xf0 0x70 \bRGB
+>>101 beshort&0xf0 0x80 \bRGBE
+>>101 beshort&0xf0 >0x80 \b(reserved 0x%x)
+
+# From: Johan van der Knijff <johan.vanderknijff at kb.nl>
+#
+# BPG (Better Portable Graphics) format
+# http://bellard.org/bpg/
+# http://fileformats.archiveteam.org/wiki/BPG
+#
+0 string \x42\x50\x47\xFB BPG (Better Portable Graphics)
+!:mime image/bpg
+
+# From: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Apple_Icon_Image_format
+0 string icns Mac OS X icon
+!:mime image/x-icns
+!:apple ????icns
+!:ext icns
+>4 ubelong >0
+# file size
+>>4 ubelong x \b, %d bytes
+# icon type
+>>8 string x \b, "%4.4s" type
+
+# TIM images
+0 lelong 0x00000010 TIM image,
+>4 lelong 0x8 4-Bit,
+>4 lelong 0x9 8-Bit,
+>4 lelong 0x2 15-Bit,
+>4 lelong 0x3 24-Bit,
+>4 lelong &8
+>>(8.l+12) leshort x Pixel at (%d,
+>>(8.l+14) leshort x \b%d)
+>>(8.l+16) leshort x Size=%dx
+>>(8.l+18) leshort x \b%d,
+>>4 lelong 0x8 16 CLUT Entries at
+>>4 lelong 0x9 256 CLUT Entries at
+>>12 leshort x (%d,
+>>14 leshort x \b%d)
+>4 lelong ^8
+>>12 leshort x Pixel at (%d,
+>>14 leshort x \b%d)
+>>16 leshort x Size=%dx
+>>18 leshort x \b%d
+
+# MDEC streams
+0 lelong 0x80010160 MDEC video stream,
+>16 leshort x %dx
+>18 leshort x \b%d
+#>8 lelong x %d frames
+#>4 leshort x secCount=%d;
+#>6 leshort x nSectors=%d;
+#>12 lelong x frameSize=%d;
+
+# BS encoded bitstreams
+2 leshort 0x3800 BS image,
+>6 leshort x Version %d,
+>4 leshort x Quantization %d,
+>0 leshort x (Decompresses to %d words)
+
+# Type: farbfeld image.
+# Url: http://tools.suckless.org/farbfeld/
+# From: Ian D. Scott <ian at iandouglasscott.com>
+#
+0 string farbfeld farbfeld image data,
+>8 ubelong x %dx
+>12 ubelong x \b%d
+
+# Type: Sega PVR image.
+# From: David Korth <gerbilsoft at gerbilsoft.com>
+# References:
+# - http://fabiensanglard.net/Mykaruga/tools/segaPVRFormat.txt
+# - https://github.com/yazgoo/pvrx2png
+# - https://github.com/nickworonekin/puyotools
+
+# Sega PVR header.
+0 name sega-pvr-image-header
+>0x0C leshort x %d x
+>0x0E leshort x %d
+# Image format.
+>0x08 byte 0 \b, ARGB1555
+>0x08 byte 1 \b, RGB565
+>0x08 byte 2 \b, ARGB4444
+>0x08 byte 3 \b, YUV442
+>0x08 byte 4 \b, Bump
+>0x08 byte 5 \b, 4bpp
+>0x08 byte 6 \b, 8bpp
+# Image data type.
+>0x09 byte 0x01 \b, square twiddled
+>0x09 byte 0x02 \b, square twiddled & mipmap
+>0x09 byte 0x03 \b, VQ
+>0x09 byte 0x04 \b, VQ & mipmap
+>0x09 byte 0x05 \b, 8-bit CLUT twiddled
+>0x09 byte 0x06 \b, 4-bit CLUT twiddled
+>0x09 byte 0x07 \b, 8-bit direct twiddled
+>0x09 byte 0x08 \b, 4-bit direct twiddled
+>0x09 byte 0x09 \b, rectangle
+>0x09 byte 0x0B \b, rectangular stride
+>0x09 byte 0x0D \b, rectangular twiddled
+>0x09 byte 0x10 \b, small VQ
+>0x09 byte 0x11 \b, small VQ & mipmap
+>0x09 byte 0x12 \b, square twiddled & mipmap
+
+# Sega PVR (Xbox) image header.
+# Contains an embedded DirectDraw surface instead of PVR data.
+0 name sega-pvr-xbox-dds-header
+>16 lelong x %d x
+>12 lelong x %d,
+>84 string x %.4s
+
+# Sega PVR image.
+0 string PVRT
+>0x10 string DDS\040\174\000\000\000 Sega PVR (Xbox) image:
+>>0x20 use sega-pvr-xbox-dds-header
+>0x10 belong !0x44445320 Sega PVR image:
+>>0 use sega-pvr-image-header
+
+# Sega PVR image with GBIX.
+0 string GBIX
+>0x10 string PVRT
+>>0x10 string DDS\040\174\000\000\000 Sega PVR (Xbox) image:
+>>>0x20 use sega-pvr-xbox-dds-header
+>>0x10 belong !0x44445320 Sega PVR image:
+>>>0x10 use sega-pvr-image-header
+>>0x08 lelong x \b, global index = %u
+
+# Sega GVR header.
+0 name sega-gvr-image-header
+>0x0C beshort x %d x
+>0x0E beshort x %d
+# Image data format.
+>0x0B byte 0 \b, I4
+>0x0B byte 1 \b, I8
+>0x0B byte 2 \b, IA4
+>0x0B byte 3 \b, IA8
+>0x0B byte 4 \b, RGB565
+>0x0B byte 5 \b, RGB5A3
+>0x0B byte 6 \b, ARGB8888
+>0x0B byte 8 \b, CI4
+>0x0B byte 9 \b, CI8
+>0x0B byte 14 \b, DXT1
+
+# Sega GVR image.
+0 string GVRT Sega GVR image:
+>0x10 use sega-gvr-image-header
+
+# Sega GVR image with GBIX.
+0 string GBIX
+>0x10 string GVRT Sega GVR image:
+>>0x10 use sega-gvr-image-header
+>>0x08 belong x \b, global index = %u
+
+# Light Field Picture
+# Documentation: http://optics.miloush.net/lytro/TheFileFormat.aspx
+# Typical file extensions: .lfp .lfr .lfx
+
+0 belong 0x894C4650
+>4 belong 0x0D0A1A0A
+>12 belong 0x00000000 Lytro Light Field Picture
+>8 belong x \b, version %d
Modified: trunk/contrib/file/magic/Magdir/intel
===================================================================
--- trunk/contrib/file/magic/Magdir/intel 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/intel 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: intel,v 1.12 2014/04/30 21:41:02 christos Exp $
+# $File: intel,v 1.15 2017/03/17 21:35:28 christos Exp $
# intel: file(1) magic for x86 Unix
#
# Various flavors of x86 UNIX executable/object (other than Xenix, which
@@ -30,15 +30,27 @@
0 leshort =0522 iAPX 286 executable large model (COFF)
>12 lelong >0 not stripped
#>22 leshort >0 - version %d
+# updated by Joerg Jenderek at Oct 2015
+# https://de.wikipedia.org/wiki/Common_Object_File_Format
+# http://www.delorie.com/djgpp/doc/coff/filhdr.html
+# ./msdos (version 5.25) labeled the next entry as "MS Windows COFF Intel 80386 object file"
+# ./intel (version 5.25) label labeled the next entry as "80386 COFF executable"
# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
-0 leshort =0514 80386 COFF executable
->12 lelong >0 not stripped
->22 leshort >0 - version %d
+0 leshort =0514
+# use subroutine to display name+flags+variables for common object formated files
+>0 use display-coff
+#>12 lelong >0 not stripped
+# no hint found, that at offset 22 is version
+#>22 leshort >0 - version %d
# rom: file(1) magic for BIOS ROM Extensions found in intel machines
# mapped into memory between 0xC0000 and 0xFFFFF
# From Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
+# updated by Joerg Jenderek
+# https://en.wikipedia.org/wiki/Option_ROM
0 beshort 0x55AA BIOS (ia32) ROM Ext.
+!:mime application/octet-stream
+!:ext rom/bin
>5 string USB USB
>7 string LDR UNDI image
>30 string IBM IBM comp. Video
Modified: trunk/contrib/file/magic/Magdir/isz
===================================================================
--- trunk/contrib/file/magic/Magdir/isz 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/isz 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: isz,v 1.3 2014/04/30 21:41:02 christos Exp $
-# ISO Zipped file format
+# $File: isz,v 1.4 2017/03/17 21:35:28 christos Exp $
+# ISO Zipped file format
# http://www.ezbsystems.com/isz/iszspec.txt
0 string IsZ! ISO Zipped file
>4 byte x \b, header size %u
Modified: trunk/contrib/file/magic/Magdir/java
===================================================================
--- trunk/contrib/file/magic/Magdir/java 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/java 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------
-# $File: java,v 1.16 2013/09/24 20:22:03 christos Exp $
+# $File: java,v 1.18 2015/11/29 22:08:14 christos Exp $
# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the
# same magic number, 0xcafebabe, so they are both handled
# in the entry called "cafebabe".
@@ -16,5 +16,12 @@
!:mime application/x-java-jce-keystore
# Java source
-0 regex ^import.*;$ Java source
+0 regex \^import.*;$ Java source
!:mime text/x-java
+
+# Java HPROF dumps
+# https://java.net/downloads/heap-snapshot/hprof-binary-format.html
+0 string JAVA\x20PROFILE\x201.0.
+>0x12 short 0
+>>0x11 ushort-0x31 <2 Java HPROF dump,
+>>0x17 beqdate/1000 x created %s
Modified: trunk/contrib/file/magic/Magdir/jpeg
===================================================================
--- trunk/contrib/file/magic/Magdir/jpeg 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/jpeg 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: jpeg,v 1.19 2013/02/04 15:50:03 christos Exp $
+# $File: jpeg,v 1.31 2017/03/17 21:35:28 christos Exp $
# JPEG images
# SunOS 5.5.1 had
#
@@ -12,7 +12,8 @@
0 beshort 0xffd8 JPEG image data
!:mime image/jpeg
!:apple 8BIMJPEG
-!:strength +2
+!:strength *3
+!:ext jpeg/jpg/jpe/jfif
>6 string JFIF \b, JFIF standard
# The following added by Erik Rossen <rossen at freesurf.ch> 1999-09-06
# in a vain attempt to add image size reporting for JFIF. Note that these
@@ -22,133 +23,77 @@
>>11 byte x \b %d.
>>12 byte x \b%02d
# Next, the resolution or aspect ratio of the image:
-#>>13 byte 0 \b, aspect ratio
-#>>13 byte 1 \b, resolution (DPI)
-#>>13 byte 2 \b, resolution (DPCM)
-#>>4 beshort x \b, segment length %d
+>>13 byte 0 \b, aspect ratio
+>>13 byte 1 \b, resolution (DPI)
+>>13 byte 2 \b, resolution (DPCM)
+>>14 beshort x \b, density %dx
+>>16 beshort x \b%d
+>>4 beshort x \b, segment length %d
# Next, show thumbnail info, if it exists:
>>18 byte !0 \b, thumbnail %dx
>>>19 byte x \b%d
+>6 string Exif \b, Exif standard: [
+>>12 indirect/r x
+>>12 string x \b]
-# EXIF moved down here to avoid reporting a bogus version number,
-# and EXIF version number printing added.
-# - Patrik R=E5dman <patrik+file-magic at iki.fi>
->6 string Exif \b, EXIF standard
-# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
-# All possible combinations of entries have to be enumerated, since no looping
-# is possible. And both endians are possible...
-# The combinations included below are from real-world JPEGs.
-# Little-endian
->>12 string II
-# IFD 0 Entry #5:
->>>70 leshort 0x8769
-# EXIF IFD Entry #1:
->>>>(78.l+14) leshort 0x9000
->>>>>(78.l+23) byte x %c
->>>>>(78.l+24) byte x \b.%c
->>>>>(78.l+25) byte !0x30 \b%c
-# IFD 0 Entry #9:
->>>118 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(126.l+38) leshort 0x9000
->>>>>(126.l+47) byte x %c
->>>>>(126.l+48) byte x \b.%c
->>>>>(126.l+49) byte !0x30 \b%c
-# IFD 0 Entry #10
->>>130 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(138.l+38) leshort 0x9000
->>>>>(138.l+47) byte x %c
->>>>>(138.l+48) byte x \b.%c
->>>>>(138.l+49) byte !0x30 \b%c
-# EXIF IFD Entry #4:
->>>>(138.l+50) leshort 0x9000
->>>>>(138.l+59) byte x %c
->>>>>(138.l+60) byte x \b.%c
->>>>>(138.l+61) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(138.l+62) leshort 0x9000
->>>>>(138.l+71) byte x %c
->>>>>(138.l+72) byte x \b.%c
->>>>>(138.l+73) byte !0x30 \b%c
-# IFD 0 Entry #11
->>>142 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(150.l+38) leshort 0x9000
->>>>>(150.l+47) byte x %c
->>>>>(150.l+48) byte x \b.%c
->>>>>(150.l+49) byte !0x30 \b%c
-# EXIF IFD Entry #4:
->>>>(150.l+50) leshort 0x9000
->>>>>(150.l+59) byte x %c
->>>>>(150.l+60) byte x \b.%c
->>>>>(150.l+61) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(150.l+62) leshort 0x9000
->>>>>(150.l+71) byte x %c
->>>>>(150.l+72) byte x \b.%c
->>>>>(150.l+73) byte !0x30 \b%c
-# Big-endian
->>12 string MM
-# IFD 0 Entry #9:
->>>118 beshort 0x8769
-# EXIF IFD Entry #1:
->>>>(126.L+14) beshort 0x9000
->>>>>(126.L+23) byte x %c
->>>>>(126.L+24) byte x \b.%c
->>>>>(126.L+25) byte !0x30 \b%c
-# EXIF IFD Entry #3:
->>>>(126.L+38) beshort 0x9000
->>>>>(126.L+47) byte x %c
->>>>>(126.L+48) byte x \b.%c
->>>>>(126.L+49) byte !0x30 \b%c
-# IFD 0 Entry #10
->>>130 beshort 0x8769
-# EXIF IFD Entry #3:
->>>>(138.L+38) beshort 0x9000
->>>>>(138.L+47) byte x %c
->>>>>(138.L+48) byte x \b.%c
->>>>>(138.L+49) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(138.L+62) beshort 0x9000
->>>>>(138.L+71) byte x %c
->>>>>(138.L+72) byte x \b.%c
->>>>>(138.L+73) byte !0x30 \b%c
-# IFD 0 Entry #11
->>>142 beshort 0x8769
-# EXIF IFD Entry #4:
->>>>(150.L+50) beshort 0x9000
->>>>>(150.L+59) byte x %c
->>>>>(150.L+60) byte x \b.%c
->>>>>(150.L+61) byte !0x30 \b%c
-# Here things get sticky. We can do ONE MORE marker segment with
-# indirect addressing, and that's all. It would be great if we could
-# do pointer arithemetic like in an assembler language. Christos?
-# And if there was some sort of looping construct to do searches, plus a few
-# named accumulators, it would be even more effective...
-# At least we can show a comment if no other segments got inserted before:
->(4.S+5) byte 0xFE \b, comment:
->>(4.S+6) pstring/HJ x "%s"
-# Or, we can show the encoding type (I've included only the three most common)
-# and image dimensions if we are lucky and the SOFn (image segment) is here:
->(4.S+5) byte 0xC0 \b, baseline
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
->(4.S+5) byte 0xC1 \b, extended sequential
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
->(4.S+5) byte 0xC2 \b, progressive
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
-# I've commented-out quantisation table reporting. I doubt anyone cares yet.
-#>(4.S+5) byte 0xDB \b, quantisation table
-#>>(4.S+6) beshort x \b length=%d
-#>14 beshort x \b, %d x
-#>16 beshort x \b %d
+# Jump to the first segment
+>(4.S+4) use jpeg_segment
+# This uses recursion...
+0 name jpeg_segment
+>0 beshort 0xFFFE
+# Recursion handled by FFE0
+#>>(2.S+2) use jpeg_segment
+>>2 pstring/HJ x \b, comment: "%s"
+
+>0 beshort 0xFFC0
+>>(2.S+2) use jpeg_segment
+>>4 byte x \b, baseline, precision %d
+>>7 beshort x \b, %dx
+>>5 beshort x \b%d
+>>9 byte x \b, frames %d
+
+>0 beshort 0xFFC1
+>>(2.S+2) use jpeg_segment
+>>4 byte x \b, extended sequential, precision %d
+>>7 beshort x \b, %dx
+>>5 beshort x \b%d
+>>9 byte x \b, frames %d
+
+>0 beshort 0xFFC2
+>>(2.S+2) use jpeg_segment
+>>4 byte x \b, progressive, precision %d
+>>7 beshort x \b, %dx
+>>5 beshort x \b%d
+>>9 byte x \b, frames %d
+
+# Define Huffman Tables
+>0 beshort 0xFFC4
+>>(2.S+2) use jpeg_segment
+
+>0 beshort 0xFFE1
+# Recursion handled by FFE0
+#>>(2.S+2) use jpeg_segment
+>>4 string Exif \b, Exif Standard: [
+>>>10 indirect/r x
+>>>10 string x \b]
+
+# Application specific markers
+>0 beshort&0xFFE0 =0xFFE0
+>>(2.S+2) use jpeg_segment
+
+# DB: Define Quantization tables
+# DD: Define Restart interval [XXX: wrong here, it is 4 bytes]
+# D8: Start of image
+# D9: End of image
+# Dn: Restart
+>0 beshort&0xFFD0 =0xFFD0
+>>0 beshort&0xFFE0 !0xFFE0
+>>>(2.S+2) use jpeg_segment
+
+#>0 beshort x unknown 0x%x
+#>>(2.S+2) use jpeg_segment
+
# HSI is Handmade Software's proprietary JPEG encoding scheme
0 string hsi1 JPEG image data, HSI proprietary
@@ -172,3 +117,10 @@
# From: Mathieu Malaterre <mathieu.malaterre at gmail.com>
0 belong 0xff4fff51 JPEG 2000 codestream
45 beshort 0xff52
+
+# JPEG extended range
+0 string \x49\x49\xbc
+>3 byte 1
+>>4 lelong%2 0 JPEG-XR
+!:mime image/jxr
+!:ext jxr
Modified: trunk/contrib/file/magic/Magdir/karma
===================================================================
--- trunk/contrib/file/magic/Magdir/karma 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/karma 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: karma,v 1.7 2014/04/30 21:41:02 christos Exp $
+# $File: karma,v 1.8 2015/08/29 07:10:35 christos Exp $
# karma: file(1) magic for Karma data files
#
# From <rgooch at atnf.csiro.au>
-0 string KarmaRHD Version Karma Data Structure Version
+0 string KarmaRHD\040Version Karma Data Structure Version
>16 belong x %u
Modified: trunk/contrib/file/magic/Magdir/kml
===================================================================
--- trunk/contrib/file/magic/Magdir/kml 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/kml 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: kml,v 1.3 2010/11/25 15:00:12 christos Exp $
+# $File: kml,v 1.4 2017/03/17 21:35:28 christos Exp $
# Type: Google KML, formerly Keyhole Markup Language
# Future development of this format has been handed
# over to the Open Geospatial Consortium.
@@ -7,7 +7,7 @@
# http://www.opengeospatial.org/standards/kml/
# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
0 string/t \<?xml
->20 search/400 \ xmlns=
+>20 search/400 \ xmlns=
>>&0 regex ['"]http://earth.google.com/kml Google KML document
!:mime application/vnd.google-earth.kml+xml
>>>&1 string 2.0' \b, version 2.0
@@ -25,7 +25,7 @@
>>>&1 string/t 2.2 \b, version 2.2
#------------------------------------------------------------------------------
-# Type: Google KML Archive (ZIP based)
+# Type: Google KML Archive (ZIP based)
# http://code.google.com/apis/kml/documentation/kml_tut.html
# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
0 string PK\003\004
Modified: trunk/contrib/file/magic/Magdir/linux
===================================================================
--- trunk/contrib/file/magic/Magdir/linux 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/linux 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: linux,v 1.57 2014/05/20 20:10:17 christos Exp $
+# $File: linux,v 1.64 2017/03/17 21:35:28 christos Exp $
# linux: file(1) magic for Linux files
#
# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan at yggdrasil.com>
@@ -199,7 +199,7 @@
############################################################################
# Linux 8086 executable
0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
->5 string .
+>5 string .
>>4 string >\0 \b, libc version %s
0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable
@@ -213,7 +213,7 @@
>2 byte&0x40 !0 \b, A_PURE
>2 byte&0x80 !0 \b, A_TOVLY
>28 long !0 \b, not stripped
->37 string .
+>37 string .
>>36 string >\0 \b, libc version %s
# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable
@@ -241,7 +241,7 @@
>24 lelong x %d symbols
>28 lelong x %d ocons
-# Linux Logical Volume Manager (LVM)
+# Linux Logical Volume Manager (LVM)
# Emmanuel VARAGNAT <emmanuel.varagnat at guzu.net>
#
# System ID, UUID and volume group name are 128 bytes long
@@ -301,7 +301,7 @@
>>&0x20 lequad x \b, size: %lld
0x618 string LVM2\ 001 LVM2 PV (Linux Logical Volume Manager)
->&(&-12.l-0x21) byte x
+>&(&-12.l-0x21) byte x
# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)
>>&0x0 string >\x2f \b, UUID: %.6s
>>&0x6 string >\x2f \b-%.4s
@@ -340,7 +340,7 @@
# Summary: Xen saved domain file
# Created by: Radek Vokal <rvokal at redhat.com>
0 string LinuxGuestRecord Xen saved domain
->20 search/256 (name
+>20 search/256 (name
>>&1 string x (name %s)
# Type: Xen, the virtual machine monitor
@@ -397,7 +397,7 @@
>>0x1046 ubeshort x \b%04x
# Linux device tree:
-# File format description can be found in the Linux kernel sources at
+# File format description can be found in the Linux kernel sources at
# Documentation/devicetree/booting-without-of.txt
# From Christoph Biedl
0 belong 0xd00dfeed
@@ -413,3 +413,66 @@
>>>>20 belong >16
>>>>>36 belong x \b, DT structure block size=%d
+# glibc locale archive as defined in glibc locale/locarchive.h
+0 lelong 0xde020109 locale archive
+>24 lelong x %d strings
+
+# Linux Software RAID (mdadm)
+# Russell Coker <russell at coker.com.au>
+0 name linuxraid
+>16 belong x UUID=%8x:
+>20 belong x \b%8x:
+>24 belong x \b%8x:
+>28 belong x \b%8x
+>32 string x name=%s
+>72 lelong x level=%d
+>92 lelong x disks=%d
+
+4096 lelong 0xa92b4efc Linux Software RAID
+>4100 lelong x version 1.2 (%d)
+>4096 use linuxraid
+
+0 lelong 0xa92b4efc Linux Software RAID
+>4 lelong x version 1.1 (%d)
+>0 use linuxraid
+
+# Summary: Database file for mlocate
+# Description: A database file as used by mlocate, a fast implementation
+# of locate/updatedb. It uses merging to reuse the existing
+# database and avoid rereading most of the filesystem. It's
+# the default version of locate on Arch Linux (and others).
+# File path: /var/lib/mlocate/mlocate.db by default (but configurable)
+# Site: https://fedorahosted.org/mlocate/
+# Format docs: http://linux.die.net/man/5/mlocate.db
+# Type: mlocate database file
+# URL: https://fedorahosted.org/mlocate/
+# From: Wander Nauta <info at wandernauta.nl>
+0 string \0mlocate mlocate database
+>12 byte x \b, version %d
+>13 byte 1 \b, require visibility
+>16 string x \b, root %s
+
+# Dump files for iproute2 tool. Generated by the "ip r|a save" command. URL:
+# https://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2
+# From: Pavel Emelyanov <xemul at parallels.com>
+0 lelong 0x45311224 iproute2 routes dump
+0 lelong 0x47361222 iproute2 addresses dump
+
+# Image and service files for CRIU tool.
+# URL: http://criu.org
+# From: Pavel Emelyanov <xemul at parallels.com>
+0 lelong 0x54564319 CRIU image file v1.1
+0 lelong 0x55105940 CRIU service file
+0 lelong 0x58313116 CRIU inventory
+
+# Kdump compressed dump files
+# http://sourceforge.net/p/makedumpfile/code/ci/master/tree/IMPLEMENTATION
+
+0 string KDUMP Kdump compressed dump
+>8 long x v%d
+>12 string >\0 \b, system %s
+>77 string >\0 \b, node %s
+>142 string >\0 \b, release %s
+>207 string >\0 \b, version %s
+>272 string >\0 \b, machine %s
+>337 string >\0 \b, domain %s
Modified: trunk/contrib/file/magic/Magdir/lisp
===================================================================
--- trunk/contrib/file/magic/Magdir/lisp 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/lisp 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: lisp,v 1.23 2009/09/19 16:28:10 christos Exp $
+# $File: lisp,v 1.25 2017/03/17 21:35:28 christos Exp $
# lisp: file(1) magic for lisp programs
#
# various lisp types, from Daniel Quinlan (quinlan at yggdrasil.com)
@@ -7,7 +7,7 @@
# updated by Joerg Jenderek
# GRR: This lot is too weak
-#0 string ;;
+#0 string ;;
# windows INF files often begin with semicolon and use CRLF as line end
# lisp files are mainly created on unix system with LF as line end
#>2 search/4096 !\r Lisp/Scheme program text
@@ -26,16 +26,39 @@
0 search/4096 (custom-set-variables\ Lisp/Scheme program text
!:mime text/x-lisp
+# URL: https://en.wikipedia.org/wiki/Emacs_Lisp
+# Reference: http://ftp.gnu.org/old-gnu/emacs/elisp-manual-18-1.03.tar.gz
+# Update: Joerg Jenderek
# Emacs 18 - this is always correct, but not very magical.
-0 string \012( Emacs v18 byte-compiled Lisp data
+0 string \012(
+# look for emacs lisp keywords
+# GRR: split regex because it is too long or get error like
+# lisp, 36: Warning: cannot get string from `^(defun|defvar|defconst|defmacro|setq|fset|put|provide|require|'
+>&0 regex \^(defun|defvar|defconst|defmacro|setq|fset) Emacs v18 byte-compiled Lisp data
!:mime application/x-elc
+# https://searchcode.com/codesearch/view/2173420/
+# not really pure text
+!:apple EMAxTEXT
+!:ext elc
+# remaining regex
+>&0 regex \^(put|provide|require|random) Emacs v18 byte-compiled Lisp data
+!:mime application/x-elc
+!:apple EMAxTEXT
+!:ext elc
+# missed cl.elc dbx.elc simple.elc look like normal lisp starting with ;;;
+
# Emacs 19+ - ver. recognition added by Ian Springer
# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs
# - Chris Chittleborough <cchittleborough at yahoo.com.au>
-0 string ;ELC
->4 byte >18
->4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
-!:mime application/x-elc
+# Update: Joerg Jenderek
+0 string ;ELC
+# version\0\0\0
+>4 byte >18 Emacs/XEmacs v%d byte-compiled Lisp data
+# why less than 32 ? does not make sense to me. GNU Emacs version is 24.5 at April 2015
+#>4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
+!:mime application/x-elc
+!:apple EMAxTEXT
+!:ext elc
# Files produced by CLISP Common Lisp From: Bruno Haible <haible at ilog.fr>
0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27)
@@ -44,7 +67,7 @@
0 long 0x70768BD2 CLISP memory image data
0 long 0xD28B7670 CLISP memory image data, other endian
-#.com and .bin for MIT scheme
+#.com and .bin for MIT scheme
0 string \372\372\372\372 MIT scheme (library?)
# From: David Allouche <david at allouche.net>
Modified: trunk/contrib/file/magic/Magdir/m4
===================================================================
--- trunk/contrib/file/magic/Magdir/m4 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/m4 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,9 @@
#------------------------------------------------------------------------------
-# $File: m4,v 1.1 2011/12/08 12:12:46 rrt Exp $
+# $File: m4,v 1.2 2017/08/14 07:40:38 christos Exp $
# make: file(1) magic for M4 scripts
#
0 regex \^dnl\ M4 macro processor script text
!:mime text/x-m4
+0 regex \^AC_DEFUN\\(\\[ M4 macro processor script text
+!:strength + 15
+!:mime text/x-m4
Modified: trunk/contrib/file/magic/Magdir/mach
===================================================================
--- trunk/contrib/file/magic/Magdir/mach 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/mach 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------
-# $File: mach,v 1.19 2014/04/30 21:41:02 christos Exp $
+# $File: mach,v 1.23 2015/10/15 21:51:22 christos Exp $
# Mach has two magic numbers, 0xcafebabe and 0xfeedface.
# Unfortunately the first, cafebabe, is shared with
# Java ByteCode, so they are both handled in the file "cafebabe".
@@ -106,15 +106,19 @@
>>>4 belong&0x00ffffff 2 subarchitecture=%d
>>>4 belong&0x00ffffff 3 subarchitecture=%d
>>>4 belong&0x00ffffff 4 subarchitecture=%d
->>>4 belong&0x00ffffff 5 \b_v4t
->>>4 belong&0x00ffffff 6 \b_v6
->>>4 belong&0x00ffffff 7 \b_v5tej
->>>4 belong&0x00ffffff 8 \b_xscale
->>>4 belong&0x00ffffff 9 \b_v7
->>>4 belong&0x00ffffff 10 \b_v7f
->>>4 belong&0x00ffffff 11 subarchitecture=%d
->>>4 belong&0x00ffffff 12 \b_v7k
->>>4 belong&0x00ffffff >12 subarchitecture=%d
+>>>4 belong&0x00ffffff 5 \bv4t
+>>>4 belong&0x00ffffff 6 \bv6
+>>>4 belong&0x00ffffff 7 \bv5tej
+>>>4 belong&0x00ffffff 8 \bxscale
+>>>4 belong&0x00ffffff 9 \bv7
+>>>4 belong&0x00ffffff 10 \bv7f
+>>>4 belong&0x00ffffff 11 \bv7s
+>>>4 belong&0x00ffffff 12 \bv7k
+>>>4 belong&0x00ffffff 13 \bv8
+>>>4 belong&0x00ffffff 14 \bv6m
+>>>4 belong&0x00ffffff 15 \bv7m
+>>>4 belong&0x00ffffff 16 \bv7em
+>>>4 belong&0x00ffffff >16 subarchitecture=%d
# 13 m88k
>>0 belong&0x00ffffff 13
>>>4 belong&0x00ffffff 0 mc88000
@@ -158,12 +162,15 @@
>>>4 belong&0x00ffffff 2 subarchitecture=%d
>>>4 belong&0x00ffffff 3
>>>4 belong&0x00ffffff 4 \b_arch1
+>>>4 belong&0x00ffffff 8 \b_haswell
>>>4 belong&0x00ffffff >4 subarchitecture=%d
>>0 belong&0x00ffffff 8 64-bit architecture=%d
>>0 belong&0x00ffffff 9 64-bit architecture=%d
>>0 belong&0x00ffffff 10 64-bit architecture=%d
>>0 belong&0x00ffffff 11 64-bit architecture=%d
->>0 belong&0x00ffffff 12 64-bit architecture=%d
+>>0 belong&0x00ffffff 12 arm64
+>>>4 belong&0x00ffffff 0
+>>>4 belong&0x00ffffff 1 \bv8
>>0 belong&0x00ffffff 13 64-bit architecture=%d
>>0 belong&0x00ffffff 14 64-bit architecture=%d
>>0 belong&0x00ffffff 15 64-bit architecture=%d
@@ -203,12 +210,42 @@
>12 belong 11 kext bundle
>12 belong >11
>>12 belong x filetype=%d
+>24 belong >0 \b, flags:<
+>>24 belong &0x0000001 \bNOUNDEFS
+>>24 belong &0x0000002 \b|INCRLINK
+>>24 belong &0x0000004 \b|DYLDLINK
+>>24 belong &0x0000008 \b|BINDATLOAD
+>>24 belong &0x0000010 \b|PREBOUND
+>>24 belong &0x0000020 \b|SPLIT_SEGS
+>>24 belong &0x0000040 \b|LAZY_INIT
+>>24 belong &0x0000080 \b|TWOLEVEL
+>>24 belong &0x0000100 \b|FORCE_FLAT
+>>24 belong &0x0000200 \b|NOMULTIDEFS
+>>24 belong &0x0000400 \b|NOFIXPREBINDING
+>>24 belong &0x0000800 \b|PREBINDABLE
+>>24 belong &0x0001000 \b|ALLMODSBOUND
+>>24 belong &0x0002000 \b|SUBSECTIONS_VIA_SYMBOLS
+>>24 belong &0x0004000 \b|CANONICAL
+>>24 belong &0x0008000 \b|WEAK_DEFINES
+>>24 belong &0x0010000 \b|BINDS_TO_WEAK
+>>24 belong &0x0020000 \b|ALLOW_STACK_EXECUTION
+>>24 belong &0x0040000 \b|ROOT_SAFE
+>>24 belong &0x0080000 \b|SETUID_SAFE
+>>24 belong &0x0100000 \b|NO_REEXPORTED_DYLIBS
+>>24 belong &0x0200000 \b|PIE
+>>24 belong &0x0400000 \b|DEAD_STRIPPABLE_DYLIB
+>>24 belong &0x0800000 \b|HAS_TLV_DESCRIPTORS
+>>24 belong &0x1000000 \b|NO_HEAP_EXECUTION
+>>24 belong &0x2000000 \b|APP_EXTENSION_SAFE
+>>24 belong x \b>
#
0 lelong&0xfffffffe 0xfeedface Mach-O
!:strength +1
+!:mime application/x-mach-binary
>0 use \^mach-o-be
0 belong&0xfffffffe 0xfeedface Mach-O
!:strength +1
+!:mime application/x-mach-binary
>0 use mach-o-be
Modified: trunk/contrib/file/magic/Magdir/macintosh
===================================================================
--- trunk/contrib/file/magic/Magdir/macintosh 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/macintosh 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: macintosh,v 1.23 2013/11/19 18:47:58 christos Exp $
+# $File: macintosh,v 1.27 2017/03/17 21:35:28 christos Exp $
# macintosh description
#
# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
@@ -109,9 +109,9 @@
# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will
# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,
# and that 74 will be 0. So something like
-#
+#
# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data
-#
+#
# >73 byte&0x01 0x01 \b, inited
# >73 byte&0x02 0x02 \b, changed
# >73 byte&0x04 0x04 \b, busy
@@ -165,7 +165,7 @@
#>65 string ZSYS (Pre-System 7 system file)
#>65 string acf3 (Aldus FreeHand)
#>65 string cdev (control panel)
-#>65 string dfil (Desk Acessory suitcase)
+#>65 string dfil (Desk Accessory suitcase)
#>65 string libr (library)
#>65 string nX^d (WriteNow word processor)
#>65 string nX^w (WriteNow dictionary)
@@ -254,7 +254,7 @@
>0x9C string INDEX data file index
>0x9C string VIEW data view
-# spss magic for SPSS system and portable files,
+# spss magic for SPSS system and portable files,
# from Bruce Foster (bef at nwu.edu).
0 long 0xc1e2c3c9 SPSS Portable File
@@ -273,7 +273,7 @@
# entries depend on the data arithmetic added after v.35
# There's also some Pascal strings in here, ditto...
-# The boot block signature, according to IM:Files, is
+# The boot block signature, according to IM:Files, is
# "for HFS volumes, this field always contains the value 0x4C4B."
# But if this is true for MFS or HFS+ volumes, I don't know.
# Alternatively, the boot block is supposed to be zeroed if it's
@@ -288,20 +288,41 @@
>0x412 beshort x number of blocks: %d,
>0x424 pstring x volume name: %s
+# *.hfs updated by Joerg Jenderek
+# http://en.wikipedia.org/wiki/Hierarchical_File_System
# "BD" gives many false positives
-#0x400 beshort 0x4244 Macintosh HFS data
-#>0 beshort 0x4C4B (bootable)
-#>0x40a beshort &0x8000 (locked)
-#>0x40a beshort ^0x0100 (mounted)
-#>0x40a beshort &0x0200 (spared blocks)
-#>0x40a beshort &0x0800 (unclean)
-#>0x47C beshort 0x482B (Embedded HFS+ Volume)
-#>0x402 beldate-0x7C25B080 x created: %s,
-#>0x406 beldate-0x7C25B080 x last modified: %s,
-#>0x440 beldate-0x7C25B080 >0 last backup: %s,
-#>0x414 belong x block size: %d,
-#>0x412 beshort x number of blocks: %d,
-#>0x424 pstring x volume name: %s
+0x400 beshort 0x4244
+# ftp://ftp.mars.org/pub/hfs/hfsutils-3.2.6.tar.gz/hfsutils-3.2.6/libhfs/apple.h
+# first block of volume bit map (always 3)
+>0x40e ubeshort 0x0003
+# maximal length of volume name is 27
+>>0x424 ubyte <28 Macintosh HFS data
+!:mime application/x-apple-diskimage
+#!:apple hfsdINIT
+#!:apple MACSdisk
+# http://www.macdisk.com/macsigen.php
+#!:apple ddskdevi
+!:apple ????devi
+# https://en.wikipedia.org/wiki/Apple_Disk_Image
+!:ext hfs/dmg
+>>>0 beshort 0x4C4B (bootable)
+#>>>0 beshort 0x0000 (not bootable)
+>>>0x40a beshort &0x8000 (locked)
+>>>0x40a beshort ^0x0100 (mounted)
+>>>0x40a beshort &0x0200 (spared blocks)
+>>>0x40a beshort &0x0800 (unclean)
+>>>0x47C beshort 0x482B (Embedded HFS+ Volume)
+# http://www.epochconverter.com/
+# 0x7C245F00 seconds ~ 2082758400 ~ 01 Jan 2036 00:00:00 ~ 66 years to 1970
+# 0x7C25B080 seconds ~ 2082844800 ~ 02 Jan 2036 00:00:00
+# construct not working
+#>>>0x402 beldate-0x7C25B080 x created: %s,
+#>>>0x406 beldate-0x7C25B080 x last modified: %s,
+#>>>0x440 beldate-0x7C25B080 >0 last backup: %s,
+# found block sizes 200h,1200h,2800h
+>>>0x414 belong x block size: %d,
+>>>0x412 beshort x number of blocks: %d,
+>>>0x424 pstring x volume name: %s
0x400 beshort 0x482B Macintosh HFS Extended
>&0 beshort x version %d data
@@ -322,57 +343,23 @@
>&42 belong x number of blocks: %d,
>&46 belong x free blocks: %d
-# I don't think this is really necessary since it doesn't do much and
-# anything with a valid driver descriptor will also have a valid
-# partition map
-#0 beshort 0x4552 Apple Device Driver data
-#>&24 beshort =1 \b, MacOS
-
-# Is that the partition type a cstring or a pstring? Well, IM says "strings
-# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a
-# cstring. Of course, partitions can contain more than four entries, but
-# what're you gonna do?
-# GRR: This magic is too weak, it is just "PM"
-#0x200 beshort 0x504D Apple Partition data
-#>0x2 beshort x (block size: %d):
-#>0x230 string x first type: %s,
-#>0x210 string x name: %s,
-#>0x254 belong x number of blocks: %d,
-#>0x400 beshort 0x504D
-#>>0x430 string x second type: %s,
-#>>0x410 string x name: %s,
-#>>0x454 belong x number of blocks: %d,
-#>>0x600 beshort 0x504D
-#>>>0x630 string x third type: %s,
-#>>>0x610 string x name: %s,
-#>>>0x654 belong x number of blocks: %d,
-#>>0x800 beshort 0x504D
-#>>>0x830 string x fourth type: %s,
-#>>>0x810 string x name: %s,
-#>>>0x854 belong x number of blocks: %d,
-#>>>0xa00 beshort 0x504D
-#>>>>0xa30 string x fifth type: %s,
-#>>>>0xa10 string x name: %s,
-#>>>>0xa54 belong x number of blocks: %d
-#>>>0xc00 beshort 0x504D
-#>>>>0xc30 string x sixth type: %s,
-#>>>>0xc10 string x name: %s,
-#>>>>0xc54 belong x number of blocks: %d
## AFAIK, only the signature is different
+# same as Apple Partition Map
+# GRR: This magic is too weak, it is just "TS"
#0x200 beshort 0x5453 Apple Old Partition data
#>0x2 beshort x block size: %d,
#>0x230 string x first type: %s,
#>0x210 string x name: %s,
#>0x254 belong x number of blocks: %d,
-#>0x400 beshort 0x504D
+#>0x400 beshort 0x504D
#>>0x430 string x second type: %s,
#>>0x410 string x name: %s,
#>>0x454 belong x number of blocks: %d,
-#>>0x800 beshort 0x504D
+#>>0x800 beshort 0x504D
#>>>0x830 string x third type: %s,
#>>>0x810 string x name: %s,
#>>>0x854 belong x number of blocks: %d,
-#>>>0xa00 beshort 0x504D
+#>>>0xa00 beshort 0x504D
#>>>>0xa30 string x fourth type: %s,
#>>>>0xa10 string x name: %s,
#>>>>0xa54 belong x number of blocks: %d
Modified: trunk/contrib/file/magic/Magdir/mail.news
===================================================================
--- trunk/contrib/file/magic/Magdir/mail.news 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/mail.news 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: mail.news,v 1.22 2013/01/04 14:22:07 christos Exp $
+# $File: mail.news,v 1.23 2015/06/29 14:44:26 christos Exp $
# mail.news: file(1) magic for mail and news
#
# Unfortunately, saved netnews also has From line added in some news software.
@@ -41,6 +41,7 @@
# From: Simon Matter <simon.matter at invoca.ch>
0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB
+0 string \241\002\213\015twoskip\ file\0\0\0\0 Cyrus twoskip DB
# JAM(mbp) Fidonet message area databases
# JHR file
Modified: trunk/contrib/file/magic/Magdir/make
===================================================================
--- trunk/contrib/file/magic/Magdir/make 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/make 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,15 +1,29 @@
#------------------------------------------------------------------------------
-# $File: make,v 1.1 2011/12/08 12:12:46 rrt Exp $
+# $File: make,v 1.3 2016/12/10 14:21:29 christos Exp $
# make: file(1) magic for makefiles
#
-0 regex \^CFLAGS makefile script text
+# URL: https://en.wikipedia.org/wiki/Make_(software)
+0 regex/100l \^CFLAGS makefile script text
!:mime text/x-makefile
-0 regex \^LDFLAGS makefile script text
+0 regex/100l \^VPATH makefile script text
!:mime text/x-makefile
-0 regex \^all: makefile script text
+0 regex/100l \^LDFLAGS makefile script text
!:mime text/x-makefile
-0 regex \^.PRECIOUS makefile script text
+0 regex/100l \^all: makefile script text
!:mime text/x-makefile
-
-0 regex \^SUBDIRS automake makefile script text
+0 regex/100l \^\\.PRECIOUS makefile script text
!:mime text/x-makefile
+# Update: Joerg Jenderek
+# Reference: https://www.freebsd.org/cgi/man.cgi?make(1)
+# exclude grub-core\lib\libgcrypt\mpi\Makefile.am with "#BEGIN_ASM_LIST"
+# by additional escaping point character
+0 regex/100l \^\\.BEGIN BSD makefile script text with "%s"
+!:mime text/x-makefile
+!:ext /mk
+# exclude MS Windows help file CoNtenT with ":include FOOBAR.CNT"
+# and NSIS script with "!include" by additional escaping point character
+0 regex/100l \^\\.include BSD makefile script text with "%s"
+!:mime text/x-makefile
+!:ext /mk
+0 regex/100l \^SUBDIRS automake makefile script text
+!:mime text/x-makefile
Modified: trunk/contrib/file/magic/Magdir/map
===================================================================
--- trunk/contrib/file/magic/Magdir/map 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/map 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: map,v 1.1 2014/06/03 18:22:25 christos Exp $
+# $File: map,v 1.4 2015/08/10 05:18:27 christos Exp $
# map: file(1) magic for Map data
#
@@ -9,9 +9,11 @@
8 string .FIT FIT Map data
>15 byte 0
>>35 belong x \b, unit id %d
+>>39 lelong x \b, serial %u
+# http://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml
# 20 years after unix epoch
->>39 lelong x \b, serial %u
->>43 ledate/631152000 x \b, %s
+# TZ=GMT date -d '1989-12-31 0:00' +%s
+>>43 leldate+631065600 x \b, %s
>>47 leshort x \b, manufacturer %d
>>47 leshort 1 \b (garmin)
@@ -23,3 +25,17 @@
>>53 byte 4 \b (Activity)
>>53 byte 8 \b (Elevations)
>>53 byte 10 \b (Totals)
+
+# TOM TOM GPS watches ttbin files:
+# http://github.com/ryanbinns/ttwatch/tree/master/ttbin
+# From: Daniel Lenski
+0 byte 0x20
+>1 leshort 0x0007
+>>0x76 byte 0x20
+>>>0x77 leshort 0x0075 TomTom activity file, v7
+>>>>8 leldate x (%s,
+>>>>3 byte x device firmware %d.
+>>>>4 byte x \b%d.
+>>>>5 byte x \b%d,
+>>>>6 leshort x product ID %04d)
+
Modified: trunk/contrib/file/magic/Magdir/maple
===================================================================
--- trunk/contrib/file/magic/Magdir/maple 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/maple 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: maple,v 1.7 2013/01/11 16:45:23 christos Exp $
+# $File: maple,v 1.8 2017/03/17 21:35:28 christos Exp $
# maple: file(1) magic for maple files
# "H. Nanosecond" <aldomel at ix.netcom.com>
# Maple V release 4, a multi-purpose math program
@@ -13,7 +13,7 @@
# no magic for these :-(
# they are compiled indexes for maple files
-# .hdb
+# .hdb
0 string \000\004\000\000 Maple help database
# .mhp
@@ -40,7 +40,7 @@
# from byte 4 it is either 'nul E' or 'soh R'
# I think 'nul E' means a file that was saved as a different name
# a sort of revision marking
-# 'soh R' means new
+# 'soh R' means new
>4 string \000\105 An old revision
>4 string \001\122 The latest save
Modified: trunk/contrib/file/magic/Magdir/marc21
===================================================================
--- trunk/contrib/file/magic/Magdir/marc21 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/marc21 2018-06-15 22:27:44 UTC (rev 11008)
@@ -2,7 +2,7 @@
# marc21: file(1) magic for MARC 21 Format
#
# Kevin Ford (kefo at loc.gov)
-#
+#
# MARC21 formats are for the representation and communication
# of bibliographic and related information in machine-readable
# form. For more info, see http://www.loc.gov/marc/
@@ -9,20 +9,22 @@
# leader position 20-21 must be 45
-20 string 45
+# and 22-23 also 00 so far, but we check that later.
+20 string 45
+>0 search/2048 \x1e
# leader starts with 5 digits, followed by codes specific to MARC format
->0 regex/1l (^[0-9]{5})[acdnp][^bhlnqsu-z] MARC21 Bibliographic
+>>0 regex/1l (^[0-9]{5})[acdnp][^bhlnqsu-z] MARC21 Bibliographic
!:mime application/marc
->0 regex/1l (^[0-9]{5})[acdnosx][z] MARC21 Authority
+>>0 regex/1l (^[0-9]{5})[acdnosx][z] MARC21 Authority
!:mime application/marc
->0 regex/1l (^[0-9]{5})[cdn][uvxy] MARC21 Holdings
+>>0 regex/1l (^[0-9]{5})[cdn][uvxy] MARC21 Holdings
!:mime application/marc
-0 regex/1l (^[0-9]{5})[acdn][w] MARC21 Classification
+>>0 regex/1l (^[0-9]{5})[acdn][w] MARC21 Classification
!:mime application/marc
->0 regex/1l (^[0-9]{5})[cdn][q] MARC21 Community
+>>0 regex/1l (^[0-9]{5})[cdn][q] MARC21 Community
!:mime application/marc
# leader position 22-23, should be "00" but is it?
->0 regex/1l (^.{21})([^0]{2}) (non-conforming)
+>>0 regex/1l (^.{21})([^0]{2}) (non-conforming)
!:mime application/marc
Modified: trunk/contrib/file/magic/Magdir/mathematica
===================================================================
--- trunk/contrib/file/magic/Magdir/mathematica 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/mathematica 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: mathematica,v 1.7 2009/09/19 16:28:10 christos Exp $
+# $File: mathematica,v 1.9 2017/03/17 21:35:28 christos Exp $
# mathematica: file(1) magic for mathematica files
# "H. Nanosecond" <aldomel at ix.netcom.com>
# Mathematica a multi-purpose math program
@@ -8,7 +8,9 @@
#mathematica .mb
0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook
+!:ext mb
0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook
+!:ext mb
# .ma
# multiple possibilites:
@@ -15,6 +17,7 @@
0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook
#>41 string >\0 %s
+!:ext mb
#0 string (*^\n\n::[\011palette Mathematica notebook version 2.x
@@ -25,13 +28,21 @@
# generic:
0 string (*^\r\r::[\011 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\r\n\r\n::[\011 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\015 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\r::[\011 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\r\n::[\011 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\n\n::[\011 Mathematica notebook version 2.x
+!:ext mb
0 string (*^\n::[\011 Mathematica notebook version 2.x
+!:ext mb
# Mathematica .mx files
@@ -38,7 +49,7 @@
#0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file
0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file
-#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
+#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
# >71... is optional
>88 string >\0 from %s
@@ -48,7 +59,7 @@
0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think)
# .ml files These are menu resources I think
-# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
+# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
# how to put that into a magic rule?
4 string \ A~ MAthematica .ml file
Modified: trunk/contrib/file/magic/Magdir/metastore
===================================================================
--- trunk/contrib/file/magic/Magdir/metastore 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/metastore 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,8 +1,8 @@
#------------------------------------------------------------------------------
-# $File: metastore,v 1.1 2011/04/06 12:37:44 christos Exp $
+# $File: metastore,v 1.2 2017/03/17 21:35:28 christos Exp $
# metastore: file(1) magic for metastore files
# From: Thomas Wissen
# see http://david.hardeman.nu/software.php#metastore
-0 string MeTaSt00r3 Metastore data file,
+0 string MeTaSt00r3 Metastore data file,
>10 bequad x version %0llx
Modified: trunk/contrib/file/magic/Magdir/mime
===================================================================
--- trunk/contrib/file/magic/Magdir/mime 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/mime 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: mime,v 1.6 2010/11/25 15:00:12 christos Exp $
+# $File: mime,v 1.8 2017/03/17 22:20:22 christos Exp $
# mime: file(1) magic for MIME encoded files
#
-0 string/t Content-Type:\
+0 string/t Content-Type:\040
>14 string >\0 %s
0 string/t Content-Type:
>13 string >\0 %s
Modified: trunk/contrib/file/magic/Magdir/misctools
===================================================================
--- trunk/contrib/file/magic/Magdir/misctools 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/misctools 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,13 +1,22 @@
#-----------------------------------------------------------------------------
-# $File: misctools,v 1.14 2014/03/06 16:08:58 christos Exp $
+# $File: misctools,v 1.17 2017/03/17 21:35:28 christos Exp $
# misctools: file(1) magic for miscellaneous UNIX tools.
#
0 search/1 %%!! X-Post-It-Note text
0 string/c BEGIN:VCALENDAR vCalendar calendar file
!:mime text/calendar
+# updated by Joerg Jenderek at Apr 2015
+# Extension: .vcf
+# http://en.wikipedia.org/wiki/VCard
0 string/c BEGIN:VCARD vCard visiting card
-!:mime text/x-vcard
+# deprecated
+#!:mime text/x-vcard
+!:mime text/vcard
+# VERSION must come right after BEGIN for 3.0 or 4.0 except in 2.1 , where it can be anywhere
+>12 search/14000/c VERSION:
+# VERSION 2.1 , 3.0 or 4.0
+>>&0 string x \b, version %-.3s
# Summary: Libtool library file
# Extension: .la
@@ -20,7 +29,35 @@
0 search/80 .lo\ -\ a\ libtool\ object\ file libtool object file
# From: Daniel Novotny <dnovotny at redhat.com>
-0 string MDMP\x93\xA7 MDMP crash report data
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Core_dump#User-mode_memory_dumps
+# Reference: https://msdn.microsoft.com/en-us/library/ms680378%28VS.85%29.aspx
+#
+# "Windows Minidump" by TrID
+# ./misctools (version 5.25) labeled the entry as "MDMP crash report data"
+0 string MDMP Mini DuMP crash report
+# http://filext.com/file-extension/DMP
+!:mime application/x-dmp
+!:ext dmp/mdmp
+# The high-order word is an internal value that is implementation specific.
+# The low-order word is MINIDUMP_VERSION 0xA793
+>4 ulelong&0x0000FFFF !0xA793 \b, version 0x%4.4x
+# NumberOfStreams 8,9,10,13
+>8 ulelong x \b, %d streams
+# StreamDirectoryRva 0x20
+>12 ulelong !0x20 \b, 0x%8.8x RVA
+# CheckSum 0
+>16 ulelong !0 \b, CheckSum 0x%8.8x
+# Reserved or TimeDateStamp
+>20 ledate x \b, %s
+# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680519%28v=vs.85%29.aspx
+# Flags MINIDUMP_TYPE enumeration type 0 0x121 0x800
+>24 ulelong x \b, 0x%x type
+# >24 ulelong >0 \b; include
+# >>24 ulelong &0x00000001 \b data sections,
+# >>24 ulelong &0x00000020 \b list of unloaded modules,
+# >>24 ulelong &0x00000100 \b process and thread information,
+# >>24 ulelong &0x00000800 \b memory information,
# Summary: abook addressbook file
# Submitted by: Mark Schreiber <mark7 at alumni.cmu.edu>
Modified: trunk/contrib/file/magic/Magdir/modem
===================================================================
--- trunk/contrib/file/magic/Magdir/modem 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/modem 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: modem,v 1.5 2010/09/20 18:55:20 rrt Exp $
+# $File: modem,v 1.8 2017/03/17 21:35:28 christos Exp $
# modem: file(1) magic for modem programs
#
# From: Florian La Roche <florian at knorke.saar.de>
@@ -8,8 +8,48 @@
>29 byte 1 \b, fine resolution
>29 byte 0 \b, normal resolution
-0 short 0x0100 raw G3 data, byte-padded
-0 short 0x1400 raw G3 data
+# Summary: CCITT Group 3 Facsimile in "raw" form (i.e. no header).
+# Modified by: Joerg Jenderek
+# URL: https://de.wikipedia.org/wiki/Fax
+# Reference: http://web.archive.org/web/20020628195336/http://www.netnam.vn/unescocourse/computervision/104.htm
+# GRR: EOL of G3 is too general as it catches also TrueType fonts, Postscript PrinterFontMetric, others
+0 short 0x0100
+# 16 0-bits near beginning like True Type fonts *.ttf, Postscript PrinterFontMetric *.pfm, FTYPE.HYPERCARD, XFER
+>2 search/9 \0\0
+# maximal 7 0-bits for pixel sequences or 11 0-bits for EOL in G3
+>2 default x
+# skip IRCAM file (VAX big-endian) ./audio
+>>0 belong !0x0001a364
+# skip GEM Image data ./images
+>>>2 beshort !0x0008
+# look for first keyword of Panorama database *.pan
+>>>>11 search/262 \x06DESIGN
+# skip Panorama database
+>>>>11 default x
+# old Apple DreamWorld DreamGrafix *.3200 with keyword at end of g3 looking files
+>>>>>27118 search/1864 DreamWorld
+>>>>>27118 default x
+# skip MouseTrap/Mt.Defaults with file size 16 found on Golden Orchard Apple II CD Rom
+>>>>>>8 ubequad !0x2e01010454010203
+# skip PICTUREH.SML found on Golden Orchard Apple II CD Rom
+>>>>>>>8 ubequad !0x5dee74ad1aa56394 raw G3 (Group 3) FAX, byte-padded
+# version 5.25 labeled the entry above "raw G3 data, byte-padded"
+!:mime image/g3fax
+#!:apple ????TIFF
+!:ext g3
+# unusual image starting with black pixel
+#0 short 0x1300 raw G3 (Group 3) FAX
+0 short 0x1400
+# 16 0-bits near beginning like PicturePuzzler found on Golden Orchard Apple CD Rom
+>2 search/9 \0\0
+# maximal 7 0-bits for pixel sequences or 11 0-bits for EOL in G3
+>2 default x raw G3 (Group 3) FAX
+# version 5.25 labeled the above entry as "raw G3 data"
+!:mime image/g3fax
+!:ext g3
+# unusual image with black pixel near beginning
+#0 short 0x1900 raw G3 (Group 3) FAX
+
#
# Magic data for vgetty voice formats
# (Martin Seine & Marc Eberhard)
@@ -33,3 +73,14 @@
0 string PVF2\n portable voice format
>5 string >\0 (ascii %s)
+# From: Bernd Nuernberger <bernd.nuernberger at web.de>
+# Brooktrout G3 fax data incl. 128 byte header
+# Common suffixes: 3??, BRK, BRT, BTR
+0 leshort 0x01bb
+>2 leshort 0x0100 Brooktrout 301 fax image,
+>>9 leshort x %d x
+>>0x2d leshort x %d
+>>6 leshort 200 \b, fine resolution
+>>6 leshort 100 \b, normal resolution
+>>11 byte 1 \b, G3 compression
+>>11 byte 2 \b, G32D compression
Modified: trunk/contrib/file/magic/Magdir/mozilla
===================================================================
--- trunk/contrib/file/magic/Magdir/mozilla 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/mozilla 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,10 @@
#------------------------------------------------------------------------------
-# $File: mozilla,v 1.4 2009/09/19 16:28:11 christos Exp $
-# mozilla: file(1) magic for Mozilla XUL fastload files
+# $File: mozilla,v 1.7 2017/03/17 21:35:28 christos Exp $
+# mozilla: file(1) magic for Mozilla XUL fastload files
# (XUL.mfasl and XPC.mfasl)
# URL: http://www.mozilla.org/
# From: Josh Triplett <josh at freedesktop.org>
0 string XPCOM\nMozFASL\r\n\x1A Mozilla XUL fastload data
+0 string mozLz4a Mozilla lz4 compressed bookmark data
Modified: trunk/contrib/file/magic/Magdir/msdos
===================================================================
--- trunk/contrib/file/magic/Magdir/msdos 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/msdos 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,12 +1,12 @@
#------------------------------------------------------------------------------
-# $File: msdos,v 1.100 2014/06/03 19:17:27 christos Exp $
+# $File: msdos,v 1.120 2017/08/13 00:21:47 christos Exp $
# msdos: file(1) magic for MS-DOS files
#
# .BAT files (Daniel Quinlan, quinlan at yggdrasil.com)
# updated by Joerg Jenderek at Oct 2008,Apr 2011
-0 string/t @
+0 string/t @
>1 string/cW \ echo\ off DOS batch file text
!:mime text/x-msdos-batch
>1 string/cW echo\ off DOS batch file text
@@ -24,7 +24,11 @@
100 search/0xffff say
>100 regex/c =^[\ \t]{0,10}say\ ['"] OS/2 REXX batch file text
-0 leshort 0x14c MS Windows COFF Intel 80386 object file
+# updated by Joerg Jenderek at Oct 2015
+# https://de.wikipedia.org/wiki/Common_Object_File_Format
+# http://www.delorie.com/djgpp/doc/coff/filhdr.html
+# ./intel already labeled COFF type 0x14c=0514 as "80386 COFF executable"
+#0 leshort 0x14c MS Windows COFF Intel 80386 object file
#>4 ledate x stamp %s
0 leshort 0x166 MS Windows COFF MIPS R4000 object file
#>4 ledate x stamp %s
@@ -226,7 +230,7 @@
>>(8.s*16) string go32stub for MS-DOS, DJGPP go32 DOS extender
>>(8.s*16) string emx
>>>&1 string x for DOS, Win or OS/2, emx %s
->>&(&0x42.l-3) byte x
+>>&(&0x42.l-3) byte x
>>>&0x26 string UPX \b, UPX compressed
# and yet another guess: small .text, and after large .data is unusal, could be 32lite
>>&0x2c search/0xa0 .text
@@ -236,8 +240,8 @@
>(8.s*16) string $WdX \b, WDos/X DOS extender
# By now an executable type should have been printed out. The executable
-# may be a self-uncompressing archive, so look for evidence of that and
-# print it out.
+# may be a self-uncompressing archive, so look for evidence of that and
+# print it out.
#
# Some signatures below from Greg Roelofs, newt at uchicago.edu.
#
@@ -279,8 +283,8 @@
# Skip to the end of the EXE. This will usually work fine in the PE case
# because the MZ image is hardcoded into the toolchain and almost certainly
# won't match any of these signatures.
->(4.s*512) long x
->>&(2.s-517) byte x
+>(4.s*512) long x
+>>&(2.s-517) byte x
>>>&0 string PK\3\4 \b, ZIP self-extracting archive
>>>&0 string Rar! \b, RAR self-extracting archive
>>>&0 string =!\x11 \b, AIN 2.x self-extracting archive
@@ -308,80 +312,77 @@
# only version=0x100 found
>3 uleshort x \b, version 0x%x
# length of string containing author,info and special characters
->6 ubyte >0
+>6 ubyte >0
#>>6 pstring x \b, name=%s
>>7 string >\0 \b, author=%-.14s
>>7 search/254 \xff \b, info=
#>>>&0 string x \b%-s
>>>&0 string x \b%-.15s
-# for FreeDOS *.KL files
+# for FreeDOS *.KL files
0 string/b KLF FreeDOS KEYBoard Layout file
# only version=0x100 or 0x101 found
>3 uleshort x \b, version 0x%x
# stringlength
->5 ubyte >0
+>5 ubyte >0
>>8 string x \b, name=%-.2s
-0 string \xffKEYB\ \ \ \0\0\0\0
+0 string \xffKEYB\ \ \ \0\0\0\0
>12 string \0\0\0\0`\004\360 MS-DOS KEYBoard Layout file
-# .COM formats (Daniel Quinlan, quinlan at yggdrasil.com)
-# Uncommenting only the first two lines will cover about 2/3 of COM files,
-# but it isn't feasible to match all COM files since there must be at least
-# two dozen different one-byte "magics".
-# test too generic ?
-0 byte 0xe9 DOS executable (COM)
->0x1FE leshort 0xAA55 \b, boot code
->6 string SFX\ of\ LHarc (%s)
-
-# DOS device driver updated by Joerg Jenderek at May 2011
-# http://maben.homeip.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
-0 ulequad&0x07a0ffffffff 0xffffffff DOS executable (
->40 search/7 UPX! \bUPX compressed
+# DOS device driver updated by Joerg Jenderek at May 2011,Mar 2017
+# https://amaus.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
+0 ulequad&0x07a0ffffffff 0xffffffff
+>0 use msdos-driver
+0 name msdos-driver DOS executable (
+#!:mime application/octet-stream
+!:mime application/x-dosdriver
+# also found FreeDOS print driver SPOOL.DEV and disc compression driver STACLOAD.BIN
+!:ext sys/dev/bin
+>40 search/7 UPX! \bUPX compressed
# DOS device driver attributes
>4 uleshort&0x8000 0x0000 \bblock device driver
# character device
>4 uleshort&0x8000 0x8000 \b
->>4 uleshort&0x0008 0x0008 \bclock
+>>4 uleshort&0x0008 0x0008 \bclock
# fast video output by int 29h
->>4 uleshort&0x0010 0x0010 \bfast
+>>4 uleshort&0x0010 0x0010 \bfast
# standard input/output device
->>4 uleshort&0x0003 >0 \bstandard
+>>4 uleshort&0x0003 >0 \bstandard
>>>4 uleshort&0x0001 0x0001 \binput
>>>4 uleshort&0x0003 0x0003 \b/
->>>4 uleshort&0x0002 0x0002 \boutput
+>>>4 uleshort&0x0002 0x0002 \boutput
>>4 uleshort&0x8000 0x8000 \bcharacter device driver
->0 ubyte x
+>0 ubyte x
# upx compressed device driver has garbage instead of real in name field of header
->>40 search/7 UPX!
->>40 default x
+>>40 search/7 UPX!
+>>40 default x
# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped
->>>12 ubyte >0x27 \b
->>>>10 ubyte >0x20
->>>>>10 ubyte !0x2E
+>>>12 ubyte >0x2E \b
+>>>>10 ubyte >0x20
+>>>>>10 ubyte !0x2E
>>>>>>10 ubyte !0x2A \b%c
->>>>11 ubyte >0x20
+>>>>11 ubyte >0x20
>>>>>11 ubyte !0x2E \b%c
->>>>12 ubyte >0x20
->>>>>12 ubyte !0x39
+>>>>12 ubyte >0x20
+>>>>>12 ubyte !0x39
>>>>>>12 ubyte !0x2E \b%c
->>>13 ubyte >0x20
+>>>13 ubyte >0x20
>>>>13 ubyte !0x2E \b%c
->>>>14 ubyte >0x20
+>>>>14 ubyte >0x20
>>>>>14 ubyte !0x2E \b%c
->>>>15 ubyte >0x20
+>>>>15 ubyte >0x20
>>>>>15 ubyte !0x2E \b%c
->>>>16 ubyte >0x20
->>>>>16 ubyte !0x2E
+>>>>16 ubyte >0x20
+>>>>>16 ubyte !0x2E
>>>>>>16 ubyte <0xCB \b%c
->>>>17 ubyte >0x20
->>>>>17 ubyte !0x2E
+>>>>17 ubyte >0x20
+>>>>>17 ubyte !0x2E
>>>>>>17 ubyte <0x90 \b%c
# some character device drivers like ASPICD.SYS, btcdrom.sys and Cr_atapi.sys contain only spaces or points in name field
->>>4 uleshort&0x8000 0x8000
->>>>12 ubyte <0x2F
+>>>12 ubyte <0x2F
# they have their real name at offset 22
->>>>>22 string >\0 \b%-.5s
->4 uleshort&0x8000 0x0000
+# also block device drivers like DUMBDRV.SYS
+>>>>22 string >\056 %-.6s
+>4 uleshort&0x8000 0x0000
# 32 bit sector addressing ( > 32 MB) for block devices
>>4 uleshort&0x0002 0x0002 \b,32-bit sector-
# support by driver functions 13h, 17h, 18h
@@ -389,54 +390,129 @@
# open, close, removable media support by driver functions 0Dh, 0Eh, 0Fh
>4 uleshort&0x0800 0x0800 \b,close media-
# output until busy support by int 10h for character device driver
->4 uleshort&0x8000 0x8000
+>4 uleshort&0x8000 0x8000
>>4 uleshort&0x2000 0x2000 \b,until busy-
# direct read/write support by driver functions 03h,0Ch
>4 uleshort&0x4000 0x4000 \b,control strings-
->4 uleshort&0x8000 0x8000
+>4 uleshort&0x8000 0x8000
>>4 uleshort&0x6840 >0 \bsupport
->4 uleshort&0x8000 0x0000
+>4 uleshort&0x8000 0x0000
>>4 uleshort&0x4842 >0 \bsupport
>0 ubyte x \b)
-# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
-# Too weak, matches files that only contain 0's
-#0 ulequad&0x000007a0ffffffed 0x0000000000000000 DOS-executable (
-#>4 uleshort&0x8000 0x8000 \bcharacter device driver
-#>>10 string x %-.8s
-#>4 uleshort&0x4000 0x4000 \b,control strings-support)
+# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
+0 ulequad 0x0513c00000000012
+>0 use msdos-driver
+# DOS drivers DC2975.SYS, DUMBDRV.SYS, ECHO.SYS has also none 0xffffffff for pointer field
+0 ulequad 0x32f28000ffff0016
+>0 use msdos-driver
+0 ulequad 0x007f00000000ffff
+>0 use msdos-driver
+0 ulequad 0x001600000000ffff
+>0 use msdos-driver
+# DOS drivers LS120.SYS, MKELS120.SYS use reserved bits of attribute field
+0 ulequad 0x0bf708c2ffffffff
+>0 use msdos-driver
+0 ulequad 0x07bd08c2ffffffff
+>0 use msdos-driver
-# test too generic ?
-0 byte 0x8c DOS executable (COM)
+# updated by Joerg Jenderek
+# GRR: line below too general as it catches also
+# rt.lib DYADISKS.PIC and many more
+# start with assembler instruction MOV
+0 ubyte 0x8c
+# skip "AppleWorks word processor data" like ARTICLE.1 ./apple
+>4 string !O====
+# skip some unknown basic binaries like RocketRnger.SHR
+>>5 string !MAIN
+# skip "GPG symmetrically encrypted data" ./gnu
+# skip "PGP symmetric key encrypted data" ./pgp
+# openpgpdefs.h: fourth byte < 14 indicate cipher algorithm type
+>>>4 ubyte >13 DOS executable (COM, 0x8C-variant)
+# the remaining files should be DOS *.COM executables
+# dosshell.COM 8cc0 2ea35f07 e85211 e88a11 b80058 cd
+# hmload.COM 8cc8 8ec0 bbc02b 89dc 83c30f c1eb04 b4
+# UNDELETE.COM 8cca 2e8916 6503 b430 cd21 8b 2e0200 8b
+# BOOTFIX.COM 8cca 2e8916 9603 b430 cd21 8b 2e0200 8b
+# RAWRITE3.COM 8cca 2e8916 d602 b430 cd21 8b 2e0200 8b
+# SHARE.COM 8cca 2e8916 d602 b430 cd21 8b 2e0200 8b
+# validchr.COM 8cca 2e8916 9603 b430 cd21 8b 2e028b1e
+# devload.COM 8cca 8916ad01 b430 cd21 8b2e0200 892e
+!:mime application/x-dosexec
+!:ext com
+
# updated by Joerg Jenderek at Oct 2008
0 ulelong 0xffff10eb DR-DOS executable (COM)
# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
-0 ubeshort&0xeb8d >0xeb00
+0 ubeshort&0xeb8d >0xeb00
# DR-DOS STACKER.COM SCREATE.SYS missed
->0 byte 0xeb
->>0x1FE leshort 0xAA55 DOS executable (COM), boot code
->>85 string UPX DOS executable (COM), UPX compressed
->>4 string \ $ARX DOS executable (COM), ARX self-extracting archive
->>4 string \ $LHarc DOS executable (COM), LHarc self-extracting archive
->>0x20e string SFX\ by\ LARC DOS executable (COM), LARC self-extracting archive
-# updated by Joerg Jenderek at Oct 2008
-#0 byte 0xb8 COM executable
-0 uleshort&0x80ff 0x00b8
+
+0 name msdos-com
+>0 byte x DOS executable (COM)
+>6 string SFX\ of\ LHarc \b, %s
+>0x1FE leshort 0xAA55 \b, boot code
+>85 string UPX \b, UPX compressed
+>4 string \ $ARX \b, ARX self-extracting archive
+>4 string \ $LHarc \b, LHarc self-extracting archive
+>0x20e string SFX\ by\ LARC \b, LARC self-extracting archive
+
+# JMP 8bit
+0 byte 0xeb
+# allow forward jumps only
+>1 byte >-1
+# that offset must be accessible
+>>(1.b+2) byte x
+>>>0 use msdos-com
+
+# JMP 16bit
+0 byte 0xe9
+# forward jumps
+>1 short >-1
+# that offset must be accessible
+>>(1.s+3) byte x
+>>>0 use msdos-com
+# negative offset, must not lead into PSP
+>1 short <-259
+# that offset must be accessible
+>>(1,s+65539) byte x
+>>>0 use msdos-com
+
+# updated by Joerg Jenderek at Oct 2008,2015
+# following line is too general
+0 ubyte 0xb8
+# skip 2 linux kernels like memtest.bin with "\xb8\xc0\x07\x8e" in ./linux
+>0 string !\xb8\xc0\x07\x8e
# modified by Joerg Jenderek
->1 lelong !0x21cd4cff COM executable for DOS
+# syslinux COM32 or COM32R executable
+>>1 lelong&0xFFFFFFFe 0x21CD4CFe COM executable (32-bit COMBOOT
+# http://www.syslinux.org/wiki/index.php/Comboot_API
+# Since version 5.00 c32 modules switched from the COM32 object format to ELF
+!:mime application/x-c32-comboot-syslinux-exec
+!:ext c32
# http://syslinux.zytor.com/comboot.php
+# older syslinux version ( <4 )
# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
# start with assembler instructions mov eax,21cd4cffh
-0 uleshort&0xc0ff 0xc0b8
->1 lelong 0x21cd4cff COM executable (32-bit COMBOOT)
+>>>1 lelong 0x21CD4CFf \b)
# syslinux:doc/comboot.txt
# A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov
# eax,21cd4cfeh) as a magic number.
-0 string/b \xb8\xfe\x4c\xcd\x21 COM executable (COM32R)
-# start with assembler instructions mov eax,21cd4cfeh
-0 uleshort&0xc0ff 0xc0b8
->1 lelong 0x21cd4cfe COM executable (32-bit COMBOOT, relocatable)
-0 string/b \x81\xfc
->4 string \x77\x02\xcd\x20\xb9
+# syslinux version (4.x)
+# "COM executable (COM32R)" or "Syslinux COM32 module" by TrID
+>>>1 lelong 0x21CD4CFe \b, relocatable)
+# remaining are DOS COM executables starting with assembler instruction MOV
+# like FreeDOS BANNER*.COM FINDDISK.COM GIF2RAW.COM WINCHK.COM
+# MS-DOS SYS.COM RESTART.COM
+# SYSLINUX.COM (version 1.40 - 2.13)
+# GFXBOOT.COM (version 3.75)
+# COPYBS.COM POWEROFF.COM INT18.COM
+>>1 default x COM executable for DOS
+!:mime application/x-dosexec
+#!:mime application/x-ms-dos-executable
+#!:mime application/x-msdos-program
+!:ext com
+
+0 string/b \x81\xfc
+>4 string \x77\x02\xcd\x20\xb9
>>36 string UPX! FREE-DOS executable (COM), UPX compressed
252 string Must\ have\ DOS\ version DR-DOS executable (COM)
# added by Joerg Jenderek at Oct 2008
@@ -453,10 +529,10 @@
#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
5 string \xcd\x21 COM executable for DOS
#DELTMP.COm HASFAT32.cOM
-7 string \xcd\x21
+7 string \xcd\x21
>0 byte !0xb8 COM executable for DOS
#COMP.cOM MORE.COm
-10 string \xcd\x21
+10 string \xcd\x21
>5 string !\xcd\x21 COM executable for DOS
#comecho.com
13 string \xcd\x21 COM executable for DOS
@@ -504,10 +580,23 @@
0 string/b PO^Q` Microsoft Word 6.0 Document
!:mime application/msword
#
-0 string/b \376\067\0\043 Microsoft Office Document
+4 long 0
+>0 belong 0xfe320000 Microsoft Word for Macintosh 1.0
!:mime application/msword
-0 string/b \333\245-\0\0\0 Microsoft Office Document
+!:ext mcw
+>0 belong 0xfe340000 Microsoft Word for Macintosh 3.0
!:mime application/msword
+!:ext mcw
+>0 belong 0xfe37001c Microsoft Word for Macintosh 4.0
+!:mime application/msword
+!:ext mcw
+>0 belong 0xfe370023 Microsoft Word for Macintosh 5.0
+!:mime application/msword
+!:ext mcw
+
+0 string/b \333\245-\0\0\0 Microsoft Word 2.0 Document
+!:mime application/msword
+!:ext doc
512 string/b \354\245\301 Microsoft Word Document
!:mime application/msword
@@ -533,17 +622,158 @@
0 string/b \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet
!:mime application/vnd.ms-excel
#
-0 belong 0x00001a00 Lotus 1-2-3
-!:mime application/x-123
->4 belong 0x00100400 wk3 document data
->4 belong 0x02100400 wk4 document data
->4 belong 0x07800100 fm3 or fmb document data
->4 belong 0x07800000 fm3 or fmb document data
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Lotus_1-2-3
+# Reference: http://www.aboutvb.de/bas/formate/pdf/wk3.pdf
+# Note: newer Lotus versions >2 use longer BOF record
+# record type (BeginningOfFile=0000h) + length (001Ah)
+0 belong 0x00001a00
+# reserved should be 0h but 8c0dh for TUTMAC.WK3, 5h for SAMPADNS.WK3, 1h for a_readme.wk3, 1eh for K&G86.WK3
+#>18 uleshort&0x73E0 0
+# Lotus Multi Byte Character Set (LMBCS=1-31)
+>20 ubyte >0
+>>20 ubyte <32 Lotus 1-2-3
+#!:mime application/x-123
+!:mime application/vnd.lotus-1-2-3
+!:apple ????L123
+# (version 5.26) labeled the entry as "Lotus 1-2-3 wk3 document data"
+>>>4 uleshort 0x1000 WorKsheet, version 3
+!:ext wk3
+# (version 5.26) labeled the entry as "Lotus 1-2-3 wk4 document data"
+>>>4 uleshort 0x1002 WorKsheet, version 4
+# also worksheet template 4 (.wt4)
+!:ext wk4/wt4
+# no example or documentation for wk5
+#>>4 uleshort 0x???? WorKsheet, version 4
+#!:ext wk5
+# only MacrotoScript.123 example
+>>>4 uleshort 0x1003 WorKsheet, version 97
+# also worksheet template Smartmaster (.12M)?
+!:ext 123
+# only Set_Y2K.123 example
+>>>4 uleshort 0x1005 WorKsheet, version 9.8 Millennium
+!:ext 123
+# no example for this version
+>>>4 uleshort 0x8001 FoRMatting data
+!:ext frm
+# (version 5.26) labeled the entry as "Lotus 1-2-3 fm3 or fmb document data"
+# TrID labeles the entry as "Formatting Data for Lotus 1-2-3 worksheet"
+>>>4 uleshort 0x8007 ForMatting data, version 3
+!:ext fm3
+>>>4 default x unknown
+# file revision sub code 0004h for worksheets
+>>>>6 uleshort =0x0004 worksheet
+!:ext wXX
+>>>>6 uleshort !0x0004 formatting data
+!:ext fXX
+# main revision number
+>>>>4 uleshort x \b, revision 0x%x
+>>>6 uleshort =0x0004 \b, cell range
+# active cellcoord range (start row, page,column ; end row, page, column)
+# start values normally 0~1st sheet A1
+>>>>8 ulelong !0
+>>>>>10 ubyte >0 \b%d*
+>>>>>8 uleshort x \b%d,
+>>>>>11 ubyte x \b%d-
+# end page mostly 0
+>>>>14 ubyte >0 \b%d*
+# end raw, column normally not 0
+>>>>12 uleshort x \b%d,
+>>>>15 ubyte x \b%d
+# Lotus Multi Byte Character Set (1~cp850,2~cp851,...,16~japan,...,31~??)
+>>>>20 ubyte >1 \b, character set 0x%x
+# flags
+>>>>21 ubyte x \b, flags 0x%x
+>>>6 uleshort !0x0004
+# record type (FONTNAME=00AEh)
+>>>>30 search/29 \0\xAE
+# variable length m (2) + entries (1) + ?? (1) + LCMBS string (n)
+>>>>>&4 string >\0 \b, 1st font "%s"
#
-0 belong 0x00000200 Lotus 1-2-3
-!:mime application/x-123
->4 belong 0x06040600 wk1 document data
->4 belong 0x06800200 fmt document data
+# Update: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/Lotus_1-2-3
+# Reference: http://www.schnarff.com/file-formats/lotus-1-2-3/WSFF2.TXT
+# Note: Used by both old Lotus 1-2-3 and Lotus Symphony (DOS) til version 2.x
+# record type (BeginningOfFile=0000h) + length (0002h)
+0 belong 0x00000200
+# GRR: line above is too general as it catches also MS Windows CURsor
+# to display MS Windows cursor (strength=70) before Lotus 1-2-3 (strength=70-1)
+!:strength -1
+# skip Windows cursors with image height <256 and keep Lotus with low opcode 0001-0083h
+>7 ubyte 0
+# skip Windows cursors with image width 256 and keep Lotus with positiv opcode
+>>6 ubyte >0 Lotus
+# !:mime application/x-123
+!:mime application/vnd.lotus-1-2-3
+!:apple ????L123
+# revision number (0404h = 123 1A, 0405h = Lotus Symphony , 0406h = 123 2.x wk1 , 8006h = fmt , ...)
+# undocumented; (version 5.26) labeled the configurations as "Lotus 1-2-3"
+>>>4 uleshort 0x0007 1-2-3 CoNFiguration, version 2.x (PGRAPH.CNF)
+!:ext cnf
+>>>4 uleshort 0x0C05 1-2-3 CoNFiguration, version 2.4J
+!:ext cnf
+>>>4 uleshort 0x0801 1-2-3 CoNFiguration, version 1-2.1
+!:ext cnf
+>>>4 uleshort 0x0802 Symphony CoNFiguration
+!:ext cnf
+>>>4 uleshort 0x0804 1-2-3 CoNFiguration, version 2.2
+!:ext cnf
+>>>4 uleshort 0x080A 1-2-3 CoNFiguration, version 2.3-2.4
+!:ext cnf
+>>>4 uleshort 0x1402 1-2-3 CoNFiguration, version 3.x
+!:ext cnf
+>>>4 uleshort 0x1450 1-2-3 CoNFiguration, version 4.x
+!:ext cnf
+# (version 5.26) labeled the entry as "Lotus 123"
+# TrID labeles the entry as "Lotus 123 Worksheet (generic)"
+>>>4 uleshort 0x0404 1-2-3 WorKSheet, version 1
+# extension "wks" also for Microsoft Works document
+!:ext wks
+# (version 5.26) labeled the entry as "Lotus 123"
+# TrID labeles the entry as "Lotus 123 Worksheet (generic)"
+>>>4 uleshort 0x0405 Symphony WoRksheet, version 1.0
+!:ext wrk/wr1
+# (version 5.26) labeled the entry as "Lotus 1-2-3 wk1 document data"
+# TrID labeles the entry as "Lotus 123 Worksheet (V2)"
+>>>4 uleshort 0x0406 1-2-3/Symphony worksheet, version 2
+# Symphony (.wr1)
+!:ext wk1/wr1
+# no example for this japan version
+>>>4 uleshort 0x0600 1-2-3 WorKsheet, version 1.xJ
+!:ext wj1
+# no example or documentation for wk2
+#>>>4 uleshort 0x???? 1-2-3 WorKsheet, version 2
+#!:ext wk2
+# undocumented japan version
+>>>4 uleshort 0x0602 1-2-3 worksheet, version 2.4J
+!:ext wj3
+# (version 5.26) labeled the entry as "Lotus 1-2-3 fmt document data"
+>>>4 uleshort 0x8006 1-2-3 ForMaTting data, version 2.x
+# japan version 2.4J (fj3)
+!:ext fmt/fj3
+# no example for this version
+>>>4 uleshort 0x8007 1-2-3 FoRMatting data, version 2.0
+!:ext frm
+# (version 5.26) labeled the entry as "Lotus 1-2-3"
+>>>4 default x unknown worksheet or configuration
+!:ext cnf
+>>>>4 uleshort x \b, revision 0x%x
+# 2nd record for most worksheets describes cells range
+>>>6 use lotus-cells
+# 3nd record for most japan worksheets describes cells range
+>>>(8.s+10) use lotus-cells
+# check and then display Lotus worksheet cells range
+0 name lotus-cells
+# look for type (RANGE=0006h) + length (0008h) at record begin
+>0 ubelong 0x06000800 \b, cell range
+# cell range (start column, row, end column, row) start values normally 0,0~A1 cell
+>>4 ulong !0
+>>>4 uleshort x \b%d,
+>>>6 uleshort x \b%d-
+# end of cell range
+>>8 uleshort x \b%d,
+>>10 uleshort x \b%d
+# EndOfLotus123
0 string/b WordPro\0 Lotus WordPro
!:mime application/vnd.lotus-wordpro
0 string/b WordPro\r\373 Lotus WordPro
@@ -588,56 +818,95 @@
0 string/b \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for MS Windows
# Windows icons
-0 name ico-dir
-# not entirely accurate, the number of icons is part of the header
->0 byte 1 - 1 icon
->0 ubyte >1 - %d icons
->2 byte 0 \b, 256x
->2 byte !0 \b, %dx
->3 byte 0 \b256
->3 byte !0 \b%d
->4 ubyte !0 \b, %d colors
-
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/CUR_(file_format)
+# Note: similar to Windows CURsor. container for BMP (only DIB part) or PNG
0 belong 0x00000100
>9 byte 0
->>0 byte x MS Windows icon resource
-!:mime image/x-icon
->>4 use ico-dir
+>>0 byte x
+>>0 use cur-ico-dir
>9 ubyte 0xff
->>0 byte x MS Windows icon resource
-!:mime image/x-icon
->>4 use ico-dir
+>>0 byte x
+>>0 use cur-ico-dir
+# displays number of icons and information for icon or cursor
+0 name cur-ico-dir
+# skip some Lotus 1-2-3 worksheets, CYCLE.PIC and keep Windows cursors with
+# 1st data offset = dir header size + n * dir entry size = 6 + n * 10h = ?6h
+>18 ulelong &0x00000006
+# skip remaining worksheets, because valid only for DIB image (40) or PNG image (\x89PNG)
+>>(18.l) ulelong x MS Windows
+>>>0 ubelong 0x00000100 icon resource
+#!:mime image/vnd.microsoft.icon
+!:mime image/x-icon
+!:ext ico
+>>>>4 uleshort x - %d icon
+# plural s
+>>>>4 uleshort >1 \bs
+# 1st icon
+>>>>0x06 use ico-entry
+# 2nd icon
+>>>>4 uleshort >1
+>>>>>0x16 use ico-entry
+>>>0 ubelong 0x00000200 cursor resource
+#!:mime image/x-cur
+!:mime image/x-win-bitmap
+!:ext cur
+>>>>4 uleshort x - %d icon
+>>>>4 uleshort >1 \bs
+# 1st cursor
+>>>>0x06 use cur-entry
+#>>>>0x16 use cur-entry
+# display information of one cursor entry
+0 name cur-entry
+>0 use cur-ico-entry
+>4 uleshort x \b, hotspot @%dx
+>6 uleshort x \b%d
+# display information of one icon entry
+0 name ico-entry
+>0 use cur-ico-entry
+# normally 0 1 but also found 14
+>4 uleshort >1 \b, %d planes
+# normally 0 1 but also found some 3, 4, some 6, 8, 24, many 32, two 256
+>6 uleshort >1 \b, %d bits/pixel
+# display shared information of cursor or icon entry
+0 name cur-ico-entry
+>0 byte =0 \b, 256x
+>0 byte !0 \b, %dx
+>1 byte =0 \b256
+>1 byte !0 \b%d
+# number of colors in palette
+>2 ubyte !0 \b, %d colors
+# reserved 0 FFh
+#>3 ubyte x \b, reserved %x
+#>8 ulelong x \b, image size %d
+# offset of PNG or DIB image
+#>12 ulelong x \b, offset 0x%x
+# PNG header (\x89PNG)
+>(12.l) ubelong =0x89504e47
+>>&-4 indirect x \b with
+# DIB image
+>(12.l) ubelong !0x89504e47
+#>>&-4 use dib-image
# Windows non-animated cursors
-0 name cur-dir
-# not entirely accurate, the number of icons is part of the header
->0 byte 1 - 1 icon
->0 ubyte >1 - %d icons
->2 byte 0 \b, 256x
->2 byte !0 \b, %dx
->3 byte 0 \b256
->3 byte !0 \b%d
->6 uleshort x \b, hotspot @%dx
->8 uleshort x \b%d
-
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/CUR_(file_format)
+# Note: similar to Windows ICOn. container for BMP ( only DIB part)
+# GRR: line below is too general as it catches also Lotus 1-2-3 files
0 belong 0x00000200
>9 byte 0
->>0 byte x MS Windows cursor resource
-!:mime image/x-cur
->>4 use cur-dir
+>>0 use cur-ico-dir
>9 ubyte 0xff
->>0 byte x MS Windows cursor resource
-!:mime image/x-cur
->>4 use cur-dir
+>>0 use cur-ico-dir
# .chr files
-0 string/b PK\010\010BGI Borland font
+0 string/b PK\010\010BGI Borland font
>4 string >\0 %s
# then there is a copyright notice
# .bgi files
-0 string/b pk\010\010BGI Borland device
+0 string/b pk\010\010BGI Borland device
>4 string >\0 %s
# then there is a copyright notice
@@ -654,24 +923,6 @@
0 lelong 0x00000005
>12 lelong 0x00000320 Windows Recycle Bin INFO2 file (Win2k - WinXP)
-
-##### put in Either Magic/font or Magic/news
-# Acroread or something files wrongly identified as G3 .pfm
-# these have the form \000 \001 any? \002 \000 \000
-# or \000 \001 any? \022 \000 \000
-0 belong&0xffff00ff 0x00010012 PFM data
->4 string \000\000
->6 string >\060 - %s
-
-0 belong&0xffff00ff 0x00010002 PFM data
->4 string \000\000
->6 string >\060 - %s
-#0 string \000\001 pfm?
-#>3 string \022\000\000Copyright\ yes
-#>3 string \002\000\000Copyright\ yes
-#>3 string >\0 oops, not a font file. Cancel that.
-#it clashes with ttf files so put it lower down.
-
# From Doug Lee via a FreeBSD pr
9 string GERBILDOC First Choice document
9 string GERBILDB First Choice database
@@ -686,7 +937,7 @@
0 lelong 0x08086b70 TurboC BGI file
0 lelong 0x08084b50 TurboC Font file
-# Debian#712046: The magic below identifies "Delphi compiled form data".
+# Debian#712046: The magic below identifies "Delphi compiled form data".
# An additional source of information is available at:
# http://www.woodmann.com/fravia/dafix_t1.htm
0 string TPF0
@@ -695,7 +946,7 @@
# tests for DBase files moved, updated and merged to database
0 string PMCC Windows 3.x .GRP file
-1 string RDC-meg MegaDots
+1 string RDC-meg MegaDots
>8 byte >0x2F version %c
>9 byte >0x2F \b.%c file
0 lelong 0x4C
@@ -712,16 +963,16 @@
#>0x181 leshort x \b, offset %x
#>0x183 leshort x \b, offsetdata %x
#>0x185 leshort x \b, section length %x
->0x187 search/0xB55 WINDOWS\ VMM\ 4.0\0
->>&0x5e ubyte >0
+>0x187 search/0xB55 WINDOWS\ VMM\ 4.0\0
+>>&0x5e ubyte >0
>>>&-1 string <PIFMGR.DLL \b, icon=%s
#>>>&-1 string PIFMGR.DLL \b, icon=%s
>>>&-1 string >PIFMGR.DLL \b, icon=%s
->>&0xF0 ubyte >0
+>>&0xF0 ubyte >0
>>>&-1 string <Terminal \b, font=%.32s
#>>>&-1 string =Terminal \b, font=%.32s
>>>&-1 string >Terminal \b, font=%.32s
->>&0x110 ubyte >0
+>>&0x110 ubyte >0
>>>&-1 string <Lucida\ Console \b, TrueTypeFont=%.32s
#>>>&-1 string =Lucida\ Console \b, TrueTypeFont=%.32s
>>>&-1 string >Lucida\ Console \b, TrueTypeFont=%.32s
@@ -737,6 +988,7 @@
# DOS EPS Binary File Header
# From: Ed Sznyter <ews at Black.Market.NET>
0 belong 0xC5D0D3C6 DOS EPS Binary File
+!:mime image/x-eps
>4 long >0 Postscript starts at byte %d
>>8 long >0 length %d
>>>12 long >0 Metafile starts at byte %d
@@ -744,15 +996,15 @@
>>>20 long >0 TIFF starts at byte %d
>>>>24 long >0 length %d
-# TNEF magic From "Joomy" <joomy at se-ed.net>
+# TNEF magic From "Joomy" <joomy at se-ed.net>
# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
-0 leshort 0x223e9f78 TNEF
+0 lelong 0x223e9f78 TNEF
!:mime application/vnd.ms-tnef
# Norton Guide (.NG , .HLP) files added by Joerg Jenderek from source NG2HTML.C
# of http://www.davep.org/norton-guides/ng2h-105.tgz
# http://en.wikipedia.org/wiki/Norton_Guides
-0 string NG\0\001
+0 string NG\0\001
# only value 0x100 found at offset 2
>2 ulelong 0x00000100 Norton Guide
# Title[40]
@@ -762,7 +1014,7 @@
>>48 string >\0 \b, %-.66s
>>114 string >\0 %-.66s
-# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
+# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
# of http://www.4dos.info/
# pointer,HelpID[8]=4DHnnnmm
0 ulelong 0x48443408 4DOS help file
@@ -772,7 +1024,7 @@
0 ulequad 0x3a000000024e4c MS Advisor help file
# HtmlHelp files (.chm)
-0 string/b ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data
+0 string/b ITSF\003\000\000\000\x60\000\000\000 MS Windows HtmlHelp Data
# GFA-BASIC (Wolfram Kleff)
2 string/b GFA-BASIC3 GFA-BASIC 3 data
@@ -810,7 +1062,7 @@
# Windows Enhanced Metafile (EMF)
-# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
+# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
# for further information.
0 ulelong 1
>40 string \ EMF Windows Enhanced Metafile (EMF) image data
@@ -856,7 +1108,8 @@
# Type: Microsoft Document Imaging Format (.mdi)
# URL: http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
# From: Daniele Sempione <scrows at oziosi.org>
-0 short 0x5045 Microsoft Document Imaging Format
+# Too weak (EP)
+#0 short 0x5045 Microsoft Document Imaging Format
# MS eBook format (.lit)
0 string/b ITOLITLS Microsoft Reader eBook Data
@@ -869,8 +1122,9 @@
# Windows Imaging (WIM) Image
0 string/b MSWIM\000\000\000 Windows imaging (WIM) image
+0 string/b WLPWM\000\000\000 Windows imaging (WIM) image, wimlib pipable format
-# The second byte of these signatures is a file version; I don't know what,
+# The second byte of these signatures is a file version; I don't know what,
# if anything, produced files with version numbers 0-2.
# From: John Elliott <johne at seasip.demon.co.uk>
0 string \xfc\x03\x00 Mallard BASIC program data (v1.11)
@@ -881,3 +1135,66 @@
0 string MIOPEN Mallard BASIC Jetsam data
0 string Jetsam0 Mallard BASIC Jetsam index data
+# DOS backup 2.0 to 3.2
+
+# backupid.@@@
+
+# plausibility check for date
+0x3 ushort >1979
+>0x5 ubyte-1 <31
+>>0x6 ubyte-1 <12
+# actually 121 nul bytes
+>>>0x7 string \0\0\0\0\0\0\0\0
+>>>>0x1 ubyte x DOS 2.0 backup id file, sequence %d
+!:ext @@@
+>>>>0x0 ubyte 0xff \b, last disk
+
+# backed up file
+
+# skip some AppleWorks word like Tomahawk.Awp, WIN98SE-DE.vhd
+# by looking for trailing nul of maximal file name string
+0x52 ubyte 0
+# test for flag byte: FFh~complete file, 00h~split file
+# FFh -127 = -1 -127 = -128
+# 00h -127 = 0 -127 = -127
+>0 byte-127 <-126
+# plausibility check for file name length
+>>0x53 ubyte-1 <78
+# looking for terminating nul of file name string
+>>>(0x53.b+4) ubyte 0
+# looking if last char of string is valid DOS file name
+>>>>(0x53.b+3) ubyte >0x1F
+# actually 44 nul bytes
+# but sometimes garbage according to Ralf Quint. So can not be used as test
+#>0x54 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
+# first char of full file name is DOS (5Ch) or UNIX (2Fh) path separator
+# only DOS variant found. UNIX variant according to V32SLASH.TXT in archive PD0315.EXE
+>>>>>5 ubyte&0x8C 0x0C
+# ./msdos (version 5.30) labeled the entry as
+# "DOS 2.0 backed up file %s, split file, sequence %d" or
+# "DOS 2.0 backed up file %s, complete file"
+>>>>>>0 ubyte x DOS 2.0-3.2 backed up
+#>>>>>>0 ubyte 0xff complete
+>>>>>>0 ubyte 0
+>>>>>>>1 uleshort x sequence %d of
+# full file name with path but without drive letter and colon stored from 0x05 til 0x52
+>>>>>>0x5 string x file %s
+# backup name is original filename
+#!:ext *
+# magic/Magdir/msdos, 1169: Warning: EXTENSION type ` *' has bad char '*'
+# file: line 1169: Bad magic entry ' *'
+# after header original file content
+>>>>>>128 indirect x \b;
+
+
+# DOS backup 3.3 to 5.x
+
+# CONTROL.nnn files
+0 string \x8bBACKUP\x20
+# actually 128 nul bytes
+>0xa string \0\0\0\0\0\0\0\0
+>>0x9 ubyte x DOS 3.3 backup control file, sequence %d
+>>0x8a ubyte 0xff \b, last disk
+
+# NB: The BACKUP.nnn files consist of the files backed up,
+# concatenated.
Modified: trunk/contrib/file/magic/Magdir/msooxml
===================================================================
--- trunk/contrib/file/magic/Magdir/msooxml 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/msooxml 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: msooxml,v 1.4 2014/01/06 18:16:24 rrt Exp $
+# $File: msooxml,v 1.5 2014/08/05 07:38:45 christos Exp $
# msooxml: file(1) magic for Microsoft Office XML
# From: Ralf Brown <ralf.brown at gmail.com>
@@ -16,7 +16,7 @@
0 string PK\003\004
!:strength +10
# make sure the first file is correct
->0x1E regex \[Content_Types\]\.xml|_rels/\.rels
+>0x1E regex \\[Content_Types\\]\\.xml|_rels/\\.rels
# skip to the second local file header
# since some documents include a 520-byte extra field following the file
# header, we need to scan for the next header
Modified: trunk/contrib/file/magic/Magdir/msvc
===================================================================
--- trunk/contrib/file/magic/Magdir/msvc 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/msvc 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,10 +1,10 @@
#------------------------------------------------------------------------------
-# $File: msvc,v 1.5 2009/09/19 16:28:11 christos Exp $
+# $File: msvc,v 1.9 2017/08/02 08:15:20 christos Exp $
# msvc: file(1) magic for msvc
# "H. Nanosecond" <aldomel at ix.netcom.com>
# Microsoft visual C
-#
+#
# I have version 1.0
# .aps
@@ -27,12 +27,36 @@
#.pch
0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch
-# .pdb
-# too long 0 string Microsoft\ C/C++\ program\ database\
-0 string Microsoft\ C/C++\ MSVC program database
->18 string program\ database\
->33 string >\0 ver %s
+# Summary: Symbol Table / Debug info used by Microsoft compilers
+# URL: https://en.wikipedia.org/wiki/Program_database
+# Reference: https://code.google.com/p/pdbparser/wiki/MSF_Format
+# Update: Joerg Jenderek
+# Note: test only for Windows XP+SP3 x86 , 8.1 x64 arm and 10.1 x86
+# info does only applies partly for older files like msvbvm50.pdb about year 2001
+0 string Microsoft\ C/C++\040
+# "Microsoft Program DataBase" by TrID
+>24 search/14 \r\n\x1A MSVC program database
+!:mime application/x-ms-pdb
+!:ext pdb
+# "MSF 7.00" "program database 2.00" for msvbvm50.pdb
+>>16 regex \([0-9.]+\) ver %s
+#>>>0x38 search/128123456 /LinkInfo \b with linkinfo
+# "MSF 7.00" variant
+>>0x1e leshort 0
+# PageSize 400h 1000h
+>>>0x20 lelong x \b, %d
+# Page Count
+>>>0x28 lelong x \b*%d bytes
+# "program database 2.00" variant
+>>0x1e leshort !0
+# PageSize 400h
+>>>0x2c lelong x \b, %d
+# Page Count for msoo-dll.pdb 4379h
+>>>0x32 leshort x \b*%d bytes
+# Reference: https://github.com/Microsoft/vstest/pull/856/commits/fdc7a9f074ca5a8dfeec83b1be9162bf0cf4000d
+0 string/c bsjb\001\000\001\000\000\000\000\000\f\000\000\000pdb\ v1.0 Microsoft Rosyln C# debugging symbols version 1.0
+
#.sbr
0 string \000\002\000\007\000 MSVC .sbr
>5 string >\0 %s
Modified: trunk/contrib/file/magic/Magdir/msx
===================================================================
--- trunk/contrib/file/magic/Magdir/msx 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/msx 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,13 +1,13 @@
#------------------------------------------------------------------------------
# msx: file(1) magic for the MSX Home Computer
-# v1.1
+# v1.3
# Fabio R. Schmidlin <sd-snatcher at users.sourceforge.net>
############## MSX Music file formats ##############
# Gigamix MGSDRV music file
-0 string MGS MSX Gigamix MGSDRV3 music file,
+0 string/b MGS MSX Gigamix MGSDRV3 music file,
>6 ubeshort 0x0D0A
>>3 byte x \bv%c
>>4 byte x \b.%c
@@ -14,13 +14,13 @@
>>5 byte x \b%c
>>8 string >\0 \b, title: %s
-1 string mgs2\ MSX Gigamix MGSDRV2 music file
+1 string/b mgs2\ MSX Gigamix MGSDRV2 music file
>6 uleshort 0x80
>>0x2E uleshort 0
>>>0x30 string >\0 \b, title: %s
# KSS music file
-0 string KSCC KSS music file v1.03
+0 string/b KSCC KSS music file v1.03
>0xE byte 0
>>0xF byte&0x02 0 \b, soundchips: AY-3-8910, SCC(+)
>>0xF byte&0x02 2 \b, soundchip(s): SN76489
@@ -28,7 +28,7 @@
>>0xF byte&0x01 1 \b, YM2413
>>0xF byte&0x08 8 \b, Y8950
-0 string KSSX KSS music file v1.20
+0 string/b KSSX KSS music file v1.20
>0xE byte&0xEF 0
>>0xF byte&0x40 0x00 \b, 60Hz
>>0xF byte&0x40 0x40 \b, 50Hz
@@ -35,7 +35,7 @@
>>0xF byte&0x02 0 \b, soundchips: AY-3-8910, SCC(+)
>>0xF byte&0x02 0x02 \b, soundchips: SN76489
>>>0xF byte&0x04 0x04 stereo
->>0xF byte&0x01 0x01 \b,
+>>0xF byte&0x01 0x01 \b,
>>>0xF byte&0x18 0x00 \bYM2413
>>>0xF byte&0x18 0x08 \bYM2413, Y8950
>>>0xF byte&0x18 0x18 \bYM2413+Y8950 pseudostereo
@@ -42,11 +42,11 @@
>>0xF byte&0x18 0x10 \b, Majyutsushi DAC
# Moonblaster for Moonsound
-0 string MBMS
+0 string/b MBMS
>4 byte 0x10 MSX Moonblaster for MoonSound music
# Music Player K-kaz
-0 string MPK MSX Music Player K-kaz song
+0 string/b MPK MSX Music Player K-kaz song
>6 ubeshort 0x0D0A
>>3 byte x v%c
>>4 byte x \b.%c
@@ -70,7 +70,7 @@
>>>>>0 string >\32 \b, title: %s
# SCMD music file
-0x8B string SCMD
+0x8B string/b SCMD
>0xCE uleshort 0 MSX SCMD Music file
#>>-2 uleshort 0x6a71 ; The file must end with this value. How to code this here?
>>0x8F string >\0 \b, title: %s
@@ -99,36 +99,8 @@
>>5 uleshort 0
>>>3 uleshort >0x013D MSX Graph Saurus compressed image
-# Maki-chan Graphic format
-0 string MAKI02\ \ Maki-chan image,
->8 byte x system ID: %c
->9 byte x \b%c
->10 byte x \b%c
->11 byte x \b%c,
->13 search/0x200 \x1A
-# >>&3 ubyte 0 , video mode: PC-98 400 lines, 16 analog colors
-# >>&3 ubyte 1 , video mode: MSX SC7, 16 analog colors
-# >>&3 ubyte 2 , video mode: VM-98 400 lines, 8 analog colors
-# >>&3 ubyte 3 , video mode: PC-88 analog, 200 lines, 8 analog colors
-# >>&3 ubyte 4 , video mode: 400 lines, 16 digital colors
-# >>&3 ubyte 5 , video mode: 200 lines, 16 digital colors
-# >>&3 ubyte 6 , video mode: old PC-98 digital 400 lines, 8 colors
-# >>&3 ubyte 7 , video mode: PC-88 400 lines, 8 digital colors
->>&8 uleshort+1 x %dx
->>&10 uleshort+1 x \b%d,
->>&3 ubyte&0x82 0x80 256 colors
->>&3 ubyte&0x82 0x00 16 colors
->>&3 ubyte&0x82 0x01 8 colors
->>&3 ubyte&0x04 4 digital
->>&3 ubyte&0x04 0 analog
->>&3 ubyte&0x01 1 \b, 2:1 dot aspect ratio
-
-# Japanese PIC file
-0 string PIC\x1A
->4 lelong 0 Japanese PIC image file
-
# MSX G9B image file
-0 string G9B
+0 string/b G9B
>1 uleshort 11
>>3 uleshort >10
>>>5 ubyte >0 MSX G9B image, depth=%d
@@ -146,70 +118,152 @@
############## Other MSX file formats ##############
-# MSX ROMs
-0 string AB
+# MSX internal ROMs
+0 ubeshort 0xF3C3
+>2 uleshort <0x4000
+>>8 ubyte 0xC3
+>>>9 uleshort <0x4000
+>>>>0x0B ubeshort 0x00C3
+>>>>>0x0D uleshort <0x4000
+>>>>>>0x0F ubeshort 0x00C3
+>>>>>>>0x11 uleshort <0x4000
+>>>>>>>>0x13 ubeshort 0x00C3
+>>>>>>>>>0x15 uleshort <0x4000
+>>>>>>>>>>0x50 ubyte 0xC3
+>>>>>>>>>>>0x51 uleshort <0x4000
+>>>>>>>>>>>>(9.s) ubyte 0xC3
+>>>>>>>>>>>>>&0 uleshort >0x4000
+>>>>>>>>>>>>>>&0 ubyte 0xC3 MSX BIOS+BASIC
+>>>>>>>>>>>>>>>0x002D ubyte+1 <3 \b. version=MSX%d
+>>>>>>>>>>>>>>>0x002D ubyte 2 \b, version=MSX2+
+>>>>>>>>>>>>>>>0x002D ubyte 3 \b, version=MSX Turbo-R
+>>>>>>>>>>>>>>>0x002D ubyte >3 \b, version=Unknown MSX %d version
+>>>>>>>>>>>>>>>0x0006 ubyte x \b, VDP.DR=0x%2x
+>>>>>>>>>>>>>>>0x0007 ubyte x \b, VDP.DW=0x%2x
+>>>>>>>>>>>>>>>0x002B ubyte&0xF 0 \b, charset=Japanese
+>>>>>>>>>>>>>>>0x002B ubyte&0xF 1 \b, charset=International
+>>>>>>>>>>>>>>>0x002B ubyte&0xF 2 \b, charset=Korean
+>>>>>>>>>>>>>>>0x002B ubyte&0xF >2 \b, charset=Unknown id:%d
+>>>>>>>>>>>>>>>0x002B ubyte&0x70 0x00 \b, date format=Y-M-D
+>>>>>>>>>>>>>>>0x002B ubyte&0x70 0x10 \b, date format=M-D-Y
+>>>>>>>>>>>>>>>0x002B ubyte&0x70 0x20 \b, date format=D-M-Y
+>>>>>>>>>>>>>>>0x002B ubyte&0x80 0x00 \b, vfreq=60Hz
+>>>>>>>>>>>>>>>0x002B ubyte&0x80 0x80 \b, vfreq=50Hz
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 0 \b, keyboard=Japanese
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 1 \b, keyboard=International
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 2 \b, keyboard=French
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 3 \b, keyboard=UK
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 4 \b, keyboard=German
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 5 \b, keyboard=Unknown id:%d
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F 6 \b, keyboard=Spanish
+>>>>>>>>>>>>>>>0x002C ubyte&0x0F >6 \b, keyboard=Unknown id:%d
+>>>>>>>>>>>>>>>0x002C ubyte&0xF0 0x00 \b, basic=Japanese
+>>>>>>>>>>>>>>>0x002C ubyte&0xF0 0x10 \b, basic=International
+>>>>>>>>>>>>>>>0x002C ubyte&0xF0 >0x10 \b, basic=Unknown id:%d
+>>>>>>>>>>>>>>>0x002E ubyte&1 1 \b, built-in MIDI
+
+
+0 string/b CD
+>2 uleshort >0x10
+>>2 uleshort <0x4000
+>>>4 uleshort <0x4000
+>>>>6 uleshort <0x4000
+>>>>>8 ubyte 0xC3
+>>>>>>9 uleshort <0x4000
+>>>>>>>0x10 ubyte 0xC3
+>>>>>>>>0x11 uleshort <0x4000
+>>>>>>>>>0x14 ubyte 0xC3
+>>>>>>>>>>0x15 uleshort <0x4000 MSX2/2+/TR SubROM
+
+0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
+>0x5F0 ubequad 0x8282828244380000
+>>0x150 ubyte 0x38
+>>>0x170 string \20\20\20
+>>>>0x1E32 string ())
+>>>>>0x2130 ubequad 0xA5A5594924231807
+>>>>>0x2138 ubequad 0x4A4A3424488830C0 MSX Kanji Font
+
+
+
+# MSX extension ROMs
+0 string/b AB
>2 uleshort 0x0010 MSX ROM
>>2 uleshort x \b, init=0x%4x
->>4 uleshort >0 \b, stat=0x%4x
->>6 uleshort >0 \b, dev=0x%4x
+>>4 uleshort >0 \b, stahdl=0x%4x
+>>6 uleshort >0 \b, devhdl=0x%4x
>>8 uleshort >0 \b, bas=0x%4x
>2 uleshort 0x4010 MSX ROM
>>2 uleshort x \b, init=0x%04x
->>4 uleshort >0 \b, stat=0x%04x
->>6 uleshort >0 \b, dev=0x%04x
+>>4 uleshort >0 \b, stahdl=0x%04x
+>>6 uleshort >0 \b, devhdl=0x%04x
>>8 uleshort >0 \b, bas=0x%04x
>2 uleshort 0x8010 MSX ROM
>>2 uleshort x \b, init=0x%04x
->>4 uleshort >0 \b, stat=0x%04x
->>6 uleshort >0 \b, dev=0x%04x
+>>4 uleshort >0 \b, stahdl=0x%04x
+>>6 uleshort >0 \b, devhdl=0x%04x
>>8 uleshort >0 \b, bas=0x%04x
+0 string/b AB\0\0
+>6 uleshort 0
+>>4 uleshort >0x400F MSX-BASIC extension ROM
+>>>4 uleshort >0 \b, stahdl=0x%04x
+>>>6 uleshort >0 \b, devhdl=0x%04x
+>>>0x1C string OPLL \b, MSX-Music
+>>>>0x18 string PAC2 \b (external)
+>>>>0x18 string APRL \b (internal)
-0 string AB
+0 string/b AB\0\0\0\0
+>6 uleshort >0x400F MSX device BIOS
+>>6 uleshort >0 \b, devhdl=0x%04x
+
+
+0 string/b AB
#>2 string 5JSuperLAYDOCK MSX Super Laydock ROM
#>3 string @HYDLIDE3MSX MSX Hydlide-3 ROM
#>3 string @3\x80IA862 Golvellius MSX1 ROM
->2 uleshort >10
->>10 string \0\0\0\0\0\0 MSX ROM
->>>0x10 string YZ\0\0\0\0 Konami Game Master 2 MSX ROM
->>>0x10 string CD \b, Konami RC-
->>>>0x12 ubyte x \b%d
->>>>0x13 ubyte/16 x \b%d
->>>>0x13 ubyte&0xF x \b%d
->>>0x10 string EF \b, Konami RC-
->>>>0x12 ubyte x \b%d
->>>>0x13 ubyte/16 x \b%d
->>>>0x13 ubyte&0xF x \b%d
->>>2 uleshort x \b, init=0x%04x
->>>4 uleshort >0 \b, stat=0x%04x
->>>6 uleshort >0 \b, dev=0x%04x
->>>8 uleshort >0 \b, bas=0x%04x
->2 uleshort 0
->>4 uleshort 0
->>>6 uleshort 0
->>>>8 uleshort >0 MSX BASIC program in ROM, bas=0x%04x
+>2 uleshort >15
+>>2 uleshort <0xC000
+>>>8 string \0\0\0\0\0\0\0\0
+>>>>(2.s&0x3FFF) uleshort >0 MSX ROM
+>>>>>0x10 string YZ\0\0\0\0 Konami Game Master 2 MSX ROM
+>>>>>0x10 string CD \b, Konami RC-
+>>>>>>0x12 ubyte x \b%d
+>>>>>>0x13 ubyte/16 x \b%d
+>>>>>>0x13 ubyte&0xF x \b%d
+>>>>>0x10 string EF \b, Konami RC-
+>>>>>>0x12 ubyte x \b%d
+>>>>>>0x13 ubyte/16 x \b%d
+>>>>>>0x13 ubyte&0xF x \b%d
+>>>>>2 uleshort x \b, init=0x%04x
+>>>>>4 uleshort >0 \b, stahdl=0x%04x
+>>>>>6 uleshort >0 \b, devhdl=0x%04x
+>>>>>8 uleshort >0 \b, bas=0x%04x
+>>>2 uleshort 0
+>>>>4 uleshort 0
+>>>>>6 uleshort 0
+>>>>>>8 uleshort >0 MSX BASIC program in ROM, bas=0x%04x
-0x4000 string AB
->0x4002 uleshort >0x4010
->>0x400A string \0\0\0\0\0\0 MSX MegaROM with nonstandard page order
->>0x4002 uleshort x \b, init=0x%04x
->>0x4004 uleshort >0 \b, stat=0x%04x
->>0x4006 uleshort >0 \b, dev=0x%04x
->>0x4008 uleshort >0 \b, bas=0x%04x
+0x4000 string/b AB
+>0x4002 uleshort >0x400F
+>>0x400A string \0\0\0\0\0\0 MSX ROM with nonstandard page order
+>>>0x4002 uleshort x \b, init=0x%04x
+>>>0x4004 uleshort >0 \b, stahdl=0x%04x
+>>>0x4006 uleshort >0 \b, devhdl=0x%04x
+>>>0x4008 uleshort >0 \b, bas=0x%04x
-0x8000 string AB
->0x8002 uleshort >0x4010
->>0x800A string \0\0\0\0\0\0 MSX MegaROM with nonstandard page order
->>0x8002 uleshort x \b, init=0x%04x
->>0x8004 uleshort >0 \b, stat=0x%04x
->>0x8006 uleshort >0 \b, dev=0x%04x
->>0x8008 uleshort >0 \b, bas=0x%04x
+0x8000 string/b AB
+>0x8002 uleshort >0x400F
+>>0x800A string \0\0\0\0\0\0 MSX ROM with nonstandard page order
+>>>0x8002 uleshort x \b, init=0x%04x
+>>>0x8004 uleshort >0 \b, stahdl=0x%04x
+>>>0x8006 uleshort >0 \b, devhdl=0x%04x
+>>>0x8008 uleshort >0 \b, bas=0x%04x
-0x3C000 string AB
+0x3C000 string/b AB
>0x3C008 string \0\0\0\0\0\0\0\0 MSX MegaROM with nonstandard page order
>>0x3C002 uleshort x \b, init=0x%04x
->>0x3C004 uleshort >0 \b, stat=0x%04x
->>0x3C006 uleshort >0 \b, dev=0x%04x
+>>0x3C004 uleshort >0 \b, stahdl=0x%04x
+>>0x3C006 uleshort >0 \b, devhdl=0x%04x
>>0x3C008 uleshort >0 \b, bas=0x%04x
# MSX BIN file
@@ -224,7 +278,7 @@
>>1 uleshort >0x8000 MSX-BASIC program
# MSX .CAS file
-0 string \x1F\xA6\xDE\xBA\xCC\x13\x7D\x74 MSX cassette archive
+0 string/b \x1F\xA6\xDE\xBA\xCC\x13\x7D\x74 MSX cassette archive
# Mega-Assembler file
0 byte 0xFE
@@ -242,7 +296,7 @@
4 uleshort 0x0900
>0xF byte 1
>>0x14 byte 0
->>>0x1E string \ \ \
+>>>0x1E string \040\040\040
>>>>0x23 byte 1
>>>>>0x25 byte 0
>>>>>>0x15 string >\x30
Modified: trunk/contrib/file/magic/Magdir/mup
===================================================================
--- trunk/contrib/file/magic/Magdir/mup 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/mup 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
# ------------------------------------------------------------------------
-# $File: mup,v 1.4 2009/09/19 16:28:11 christos Exp $
+# $File: mup,v 1.5 2017/03/17 21:35:28 christos Exp $
# mup: file(1) magic for Mup (Music Publisher) input file.
#
# From: Abel Cheung <abel (@) oaka.org>
@@ -12,13 +12,13 @@
#
0 search/1 //!Mup Mup music publication program input text
>6 string -Arkkra (Arkkra)
->>13 string -
->>>16 string .
+>>13 string -
+>>>16 string .
>>>>14 string x \b, need V%.4s
->>>15 string .
+>>>15 string .
>>>>14 string x \b, need V%.3s
->6 string -
->>9 string .
+>6 string -
+>>9 string .
>>>7 string x \b, need V%.4s
->>8 string .
+>>8 string .
>>>7 string x \b, need V%.3s
Modified: trunk/contrib/file/magic/Magdir/netbsd
===================================================================
--- trunk/contrib/file/magic/Magdir/netbsd 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/netbsd 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: netbsd,v 1.21 2014/03/29 15:40:34 christos Exp $
+# $File: netbsd,v 1.24 2017/03/17 21:35:28 christos Exp $
# netbsd: file(1) magic for NetBSD objects
#
# All new-style magic numbers are in network byte order.
@@ -10,7 +10,7 @@
#
0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 lelong <4096 shared library
>>20 lelong =4096 dynamically linked executable
>>20 lelong >4096 dynamically linked executable
@@ -32,7 +32,7 @@
>32 lelong !0 (signal %d)
0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 belong <8192 shared library
>>20 belong =8192 dynamically linked executable
>>20 belong >8192 dynamically linked executable
@@ -54,7 +54,7 @@
>32 belong !0 (signal %d)
0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
>>20 belong >4096 dynamically linked executable
@@ -76,7 +76,7 @@
>32 belong !0 (signal %d)
0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 lelong <4096 shared library
>>20 lelong =4096 dynamically linked executable
>>20 lelong >4096 dynamically linked executable
@@ -101,7 +101,7 @@
>12 string >\0 from '%s'
0 belong&0377777777 042400413 a.out NetBSD/SPARC demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 belong <8192 shared library
>>20 belong =8192 dynamically linked executable
>>20 belong >8192 dynamically linked executable
@@ -123,7 +123,7 @@
>32 belong !0 (signal %d)
0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 lelong <4096 shared library
>>20 lelong =4096 dynamically linked executable
>>20 lelong >4096 dynamically linked executable
@@ -145,7 +145,7 @@
>32 lelong !0 (signal %d)
0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 lelong <4096 shared library
>>20 lelong =4096 dynamically linked executable
>>20 lelong >4096 dynamically linked executable
@@ -167,7 +167,7 @@
>32 lelong !0 (signal %d)
0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 lelong <4096 shared library
>>20 lelong =4096 dynamically linked executable
>>20 lelong >4096 dynamically linked executable
@@ -189,7 +189,7 @@
>32 lelong !0 (signal %d)
# NetBSD/alpha does not support (and has never supported) a.out objects,
-# so no rules are provided for them. NetBSD/alpha ELF objects are
+# so no rules are provided for them. NetBSD/alpha ELF objects are
# dealt with in "elf".
0 lelong 0x00070185 ECOFF NetBSD/alpha binary
>10 leshort 0x0001 not stripped
@@ -199,7 +199,7 @@
>32 lelong !0 (signal %d)
0 belong&0377777777 043400413 a.out NetBSD/mips demand paged
->0 byte &0x80
+>0 byte &0x80
>>20 belong <8192 shared library
>>20 belong =8192 dynamically linked executable
>>20 belong >8192 dynamically linked executable
@@ -247,7 +247,7 @@
# Kernel core dump format
0 belong&0x0000ffff 0x00008fca NetBSD kernel core file
>0 belong&0x03ff0000 0x00000000 \b, Unknown
->0 belong&0x03ff0000 0x00001000 \b, sun 68010/68020
+>0 belong&0x03ff0000 0x00010000 \b, sun 68010/68020
>0 belong&0x03ff0000 0x00020000 \b, sun 68020
>0 belong&0x03ff0000 0x00640000 \b, 386 PC
>0 belong&0x03ff0000 0x00860000 \b, i386 BSD
@@ -262,20 +262,24 @@
>0 belong&0x03ff0000 0x008f0000 \b, arm6 BSD
>0 belong&0x03ff0000 0x00900000 \b, m68k BSD (2K pages)
>0 belong&0x03ff0000 0x00910000 \b, sh3 BSD
->0 belong&0x03ff0000 0x00920000 \b, ppc BSD (Big Endian)
->0 belong&0x03ff0000 0x00930000 \b, vax BSD (4K pages)
->0 belong&0x03ff0000 0x00940000 \b, mips1 BSD
->0 belong&0x03ff0000 0x00950000 \b, mips2 BSD
->0 belong&0x03ff0000 0x00960000 \b, parisc BSD
->0 belong&0x03ff0000 0x00970000 \b, sh5/64 BSD
->0 belong&0x03ff0000 0x00980000 \b, SPARC/64 BSD
->0 belong&0x03ff0000 0x00990000 \b, amd64 BSD
->0 belong&0x03ff0000 0x009a0000 \b, hp200 (68010) BSD
->0 belong&0x03ff0000 0x009b0000 \b, hp300 (68020+68881) BSD
->0 belong&0x03ff0000 0x009b0000 \b, hp300 (68020+68881) BSD
->0 belong&0x03ff0000 0x00c80000 \b, hp200
->0 belong&0x03ff0000 0x020b0000 \b, hp300 (68020+68881) HP-UX
->0 belong&0x03ff0000 0x020c0000 \b, hp300 (68020+68881) HP-UX
+>0 belong&0x03ff0000 0x00950000 \b, ppc BSD (Big Endian)
+>0 belong&0x03ff0000 0x00960000 \b, vax BSD (4K pages)
+>0 belong&0x03ff0000 0x00970000 \b, mips1 BSD
+>0 belong&0x03ff0000 0x00980000 \b, mips2 BSD
+>0 belong&0x03ff0000 0x00990000 \b, m88k BSD
+>0 belong&0x03ff0000 0x00920000 \b, parisc BSD
+>0 belong&0x03ff0000 0x009b0000 \b, sh5/64 BSD
+>0 belong&0x03ff0000 0x009c0000 \b, SPARC/64 BSD
+>0 belong&0x03ff0000 0x009d0000 \b, amd64 BSD
+>0 belong&0x03ff0000 0x009e0000 \b, sh5/32 BSD
+>0 belong&0x03ff0000 0x009f0000 \b, ia64 BSD
+>0 belong&0x03ff0000 0x00b70000 \b, aarch64 BSD
+>0 belong&0x03ff0000 0x00b80000 \b, or1k BSD
+>0 belong&0x03ff0000 0x00b90000 \b, Risk-V BSD
+>0 belong&0x03ff0000 0x00c80000 \b, hp200 BSD
+>0 belong&0x03ff0000 0x012c0000 \b, hp300 BSD
+>0 belong&0x03ff0000 0x020b0000 \b, hp800 HP-UX
+>0 belong&0x03ff0000 0x020c0000 \b, hp200/hp300 HP-UX
>0 belong&0xfc000000 0x04000000 \b, CPU
>0 belong&0xfc000000 0x08000000 \b, DATA
>0 belong&0xfc000000 0x10000000 \b, STACK
@@ -282,3 +286,20 @@
>4 leshort x \b, (headersize = %d
>6 leshort x \b, segmentsize = %d
>6 lelong x \b, segments = %d)
+
+# little endian only for now.
+0 name ktrace
+>4 leshort 7
+>>6 leshort <3 NetBSD ktrace file version %d
+>>>12 string x from %s
+>>>56 string x \b, emulation %s
+>>>8 lelong <65536 \b, pid=%d
+
+56 string netbsd
+>0 use ktrace
+56 string linux
+>0 use ktrace
+56 string sunos
+>0 use ktrace
+56 string hpux
+>0 use ktrace
Modified: trunk/contrib/file/magic/Magdir/netscape
===================================================================
--- trunk/contrib/file/magic/Magdir/netscape 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/netscape 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $
+# $File: netscape,v 1.8 2017/03/17 21:35:28 christos Exp $
# netscape: file(1) magic for Netscape files
# "H. Nanosecond" <aldomel at ix.netcom.com>
# version 3 and 4 I think
@@ -15,11 +15,12 @@
# .snm Caches
0 string #\ Netscape\ folder\ cache Netscape folder cache
0 string \000\036\204\220\000 Netscape folder cache
-# .n2p
-# Net 2 Phone
+# .n2p
+# Net 2 Phone
#0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
0 string SX961999 Net2phone
#
#This is files ending in .art, FIXME add more rules
-0 string JG\004\016\0\0\0\0 ART
+0 string JG\004\016\0\0\0\0 AOL ART image
+0 string JG\003\016\0\0\0\0 AOL ART image
Modified: trunk/contrib/file/magic/Magdir/nitpicker
===================================================================
--- trunk/contrib/file/magic/Magdir/nitpicker 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/nitpicker 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: nitpicker,v 1.6 2014/04/30 21:41:02 christos Exp $
+# $File: nitpicker,v 1.7 2017/03/17 21:35:28 christos Exp $
# nitpicker: file(1) magic for Flowfiles.
# From: Christian Jachmann <C.Jachmann at gmx.net> http://www.nitpicker.de
-0 string NPFF NItpicker Flow File
+0 string NPFF NItpicker Flow File
>4 byte x V%d.
>5 byte x %d
>6 bedate x started: %s
Modified: trunk/contrib/file/magic/Magdir/os2
===================================================================
--- trunk/contrib/file/magic/Magdir/os2 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/os2 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,13 +1,14 @@
#------------------------------------------------------------------------------
-# $File: os2,v 1.7 2009/09/19 16:28:11 christos Exp $
+# $File: os2,v 1.10 2017/03/17 21:35:28 christos Exp $
# os2: file(1) magic for OS/2 files
#
# Provided 1998/08/22 by
# David Mediavilla <davidme.news at REMOVEIFNOTSPAMusa.net>
-1 search/1 InternetShortcut MS Windows 95 Internet shortcut text
->24 search/1 >\ (URL=<%s>)
+1 search/100 InternetShortcut MS Windows 95 Internet shortcut text
+>17 search/100 URL= (URL=<
+>>&0 string x \b%s>)
# OS/2 URL objects
# Provided 1998/08/22 by
@@ -24,7 +25,7 @@
#>5 string >\ (Local file) <%s>
# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett at netcom.com)
-# Carl Hauser (chauser.parc at xerox.com) and
+# Carl Hauser (chauser.parc at xerox.com) and
# Marcus Groeber (marcusg at ph-cip.uni-koeln.de)
# list the following header format in inf02a.doc:
#
@@ -34,11 +35,11 @@
# // bit 0: set if INF style file
# // bit 4: set if HLP style file
# // patching this byte allows reading HLP files
-# // using the VIEW command, while help files
+# // using the VIEW command, while help files
# // seem to work with INF settings here as well.
# int16 hdrsize; // total size of header
# int16 unknown2; // unknown purpose
-#
+#
0 string HSP\x01\x9b\x00 OS/2 INF
>107 string >0 (%s)
0 string HSP\x10\x9b\x00 OS/2 HLP
Modified: trunk/contrib/file/magic/Magdir/os9
===================================================================
--- trunk/contrib/file/magic/Magdir/os9 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/os9 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: os9,v 1.7 2011/05/13 22:15:54 christos Exp $
+# $File: os9,v 1.8 2017/03/17 21:35:28 christos Exp $
#
# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved.
#
@@ -15,7 +15,7 @@
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
Modified: trunk/contrib/file/magic/Magdir/pascal
===================================================================
--- trunk/contrib/file/magic/Magdir/pascal 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/pascal 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,10 +1,10 @@
#------------------------------------------------------------------------------
-# $File: pascal,v 1.1 2011/12/08 12:12:46 rrt Exp $
+# $File: pascal,v 1.2 2014/07/14 14:21:33 rrt Exp $
# pascal: file(1) magic for Pascal source
#
0 search/8192 (input, Pascal source text
!:mime text/x-pascal
-0 regex \^program Pascal source text
-!:mime text/x-pascal
-0 regex \^record Pascal source text
-!:mime text/x-pascal
+#0 regex \^program Pascal source text
+#!:mime text/x-pascal
+#0 regex \^record Pascal source text
+#!:mime text/x-pascal
Modified: trunk/contrib/file/magic/Magdir/pbf
===================================================================
--- trunk/contrib/file/magic/Magdir/pbf 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/pbf 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,11 +1,11 @@
#------------------------------------------------------------------------------
-# $File: pbf,v 1.1 2013/12/21 14:27:24 christos Exp $
+# $File: pbf,v 1.2 2017/01/18 16:16:21 christos Exp $
# file(1) magic(5) data for OpenStreetMap
# OpenStreetMap Protocolbuffer Binary Format (.osm.pbf)
# http://wiki.openstreetmap.org/wiki/PBF_Format
# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 belong 0x0000000D
->4 beshort 0x0A09
->>6 string OSMHeader OpenStreetMap Protocolbuffer Binary Format
+0 belong&0xfffffff0 0
+>4 beshort 0x0A09
+>>6 string OSMHeader OpenStreetMap Protocolbuffer Binary Format
Modified: trunk/contrib/file/magic/Magdir/pdf
===================================================================
--- trunk/contrib/file/magic/Magdir/pdf 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/pdf 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: pdf,v 1.7 2013/08/22 07:47:26 christos Exp $
+# $File: pdf,v 1.9 2017/05/24 17:35:20 christos Exp $
# pdf: file(1) magic for Portable Document Format
#
@@ -9,6 +9,11 @@
>5 byte x \b, version %c
>7 byte x \b.%c
+0 string \012%PDF- PDF document
+!:mime application/pdf
+>6 byte x \b, version %c
+>8 byte x \b.%c
+
# From: Nick Schmalenberger <nick at schmalenberger.us>
# Forms Data Format
0 string %FDF- FDF document
@@ -15,3 +20,8 @@
!:mime application/vnd.fdf
>5 byte x \b, version %c
>7 byte x \b.%c
+
+0 search/256 %PDF- PDF document
+!:mime application/pdf
+>&0 byte x \b, version %c
+>&2 byte x \b.%c
Modified: trunk/contrib/file/magic/Magdir/pdp
===================================================================
--- trunk/contrib/file/magic/Magdir/pdp 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/pdp 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: pdp,v 1.10 2014/04/30 21:41:02 christos Exp $
+# $File: pdp,v 1.11 2017/03/17 21:35:28 christos Exp $
# pdp: file(1) magic for PDP-11 executable/object and APL workspace
#
0 lelong 0101555 PDP-11 single precision APL workspace
@@ -14,8 +14,8 @@
# updated by Joerg Jenderek at Mar 2013
# GRR: line below too general as it catches also Windows precompiled setup information *.PNF
-0 leshort 0401
-# skip *.PNF with WinDirPathOffset 58h
+0 leshort 0401
+# skip *.PNF with WinDirPathOffset 58h
>68 ulelong !0x00000058 PDP-11 UNIX/RT ldp
# skip *.PNF with high byte of InfVersionDatumCount zero
#>>15 byte !0 PDP-11 UNIX/RT ldp
Modified: trunk/contrib/file/magic/Magdir/perl
===================================================================
--- trunk/contrib/file/magic/Magdir/perl 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/perl 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,47 +1,57 @@
#------------------------------------------------------------------------------
-# $File: perl,v 1.22 2014/04/28 12:04:35 christos Exp $
+# $File: perl,v 1.26 2017/02/21 18:34:55 christos Exp $
# perl: file(1) magic for Larry Wall's perl language.
#
# The `eval' lines recognizes an outrageously clever hack.
# Keith Waclena <keith at cerberus.uchicago.edu>
# Send additions to <perl5-porters at perl.org>
-0 search/1 eval\ "exec\ /bin/perl Perl script text
+0 search/1024 eval\ "exec\ perl Perl script text
!:mime text/x-perl
-0 search/1 eval\ "exec\ /usr/bin/perl Perl script text
+0 search/1024 eval\ "exec\ /bin/perl Perl script text
!:mime text/x-perl
-0 search/1 eval\ "exec\ /usr/local/bin/perl Perl script text
+0 search/1024 eval\ "exec\ /usr/bin/perl Perl script text
!:mime text/x-perl
-0 search/1 eval\ '(exit\ $?0)'\ &&\ eval\ 'exec Perl script text
+0 search/1024 eval\ "exec\ /usr/local/bin/perl Perl script text
!:mime text/x-perl
-0 search/1 #!/usr/bin/env\ perl Perl script text executable
+0 search/1024 eval\ 'exec\ perl Perl script text
!:mime text/x-perl
-0 search/1 #!\ /usr/bin/env\ perl Perl script text executable
+0 search/1024 eval\ 'exec\ /bin/perl Perl script text
!:mime text/x-perl
-0 search/1 #!
->0 regex \^#!.*/bin/perl$ Perl script text executable
+0 search/1024 eval\ 'exec\ /usr/bin/perl Perl script text
!:mime text/x-perl
+0 search/1024 eval\ 'exec\ /usr/local/bin/perl Perl script text
+!:mime text/x-perl
+0 search/1024 eval\ '(exit\ $?0)'\ &&\ eval\ 'exec Perl script text
+!:mime text/x-perl
+0 string #!/usr/bin/env\ perl Perl script text executable
+!:mime text/x-perl
+0 string #!\ /usr/bin/env\ perl Perl script text executable
+!:mime text/x-perl
+0 string #!
+>0 regex \^#!.*/bin/perl([[:space:]].*)*$ Perl script text executable
+!:mime text/x-perl
# by Dmitry V. Levin and Alexey Tourbin
# check the first line
-0 search/1 package
+0 search/8192 package
>0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *; Perl5 module source text
-!:strength + 10
+!:strength + 40
# not 'p', check other lines
-0 search/1 !p
+0 search/8192 !p
>0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *;
>>0 regex \^1\ *;|\^(use|sub|my)\ .*[(;{=] Perl5 module source text
-!:strength + 10
+!:strength + 75
# Perl POD documents
# From: Tom Hukins <tom at eborcom.com>
-0 search/1/W \=pod\n Perl POD document text
-0 search/1/W \n\=pod\n Perl POD document text
-0 search/1/W \=head1\ Perl POD document text
-0 search/1/W \n\=head1\ Perl POD document text
-0 search/1/W \=head2\ Perl POD document text
-0 search/1/W \n\=head2\ Perl POD document text
-0 search/1/W \=encoding\ Perl POD document text
-0 search/1/W \n\=encoding\ Perl POD document text
+0 search/1024/W \=pod\n Perl POD document text
+0 search/1024/W \n\=pod\n Perl POD document text
+0 search/1024/W \=head1\ Perl POD document text
+0 search/1024/W \n\=head1\ Perl POD document text
+0 search/1024/W \=head2\ Perl POD document text
+0 search/1024/W \n\=head2\ Perl POD document text
+0 search/1024/W \=encoding\ Perl POD document text
+0 search/1024/W \n\=encoding\ Perl POD document text
# Perl Storable data files.
Modified: trunk/contrib/file/magic/Magdir/pgf
===================================================================
--- trunk/contrib/file/magic/Magdir/pgf 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/pgf 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: pgf,v 1.1 2013/04/22 15:19:49 christos Exp $
+# $File: pgf,v 1.2 2017/03/17 21:35:28 christos Exp $
# pgf: file(1) magic for Progressive Graphics File (PGF)
#
# <http://www.libpgf.org/uploads/media/PGF_Details_01.pdf>
@@ -42,7 +42,7 @@
>>20 byte 19 RGB color 12,
>>20 byte 20 RGB color 16,
>>20 byte 255 unknown format,
->>20 default x format
+>>20 default x format
>>>20 byte x \b %d,
>>21 byte x %d bpc
# PGFPostHeader
Modified: trunk/contrib/file/magic/Magdir/pgp
===================================================================
--- trunk/contrib/file/magic/Magdir/pgp 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/pgp 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: pgp,v 1.9 2009/09/19 16:28:11 christos Exp $
+# $File: pgp,v 1.14 2017/03/17 21:35:28 christos Exp $
# pgp: file(1) magic for Pretty Good Privacy
# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
#
@@ -19,9 +19,504 @@
#>15 string SIGNED\040MESSAGE- signed message
#>15 string PGP\040SIGNATURE- signature
-2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- PGP public key block
+2 string ---BEGIN\040PGP\040PUBLIC\040KEY\040BLOCK- PGP public key block
!:mime application/pgp-keys
-0 string -----BEGIN\040PGP\40MESSAGE- PGP message
+>10 search/100 \n\n
+>>&0 use pgp
+0 string -----BEGIN\040PGP\040MESSAGE- PGP message
!:mime application/pgp
-0 string -----BEGIN\040PGP\40SIGNATURE- PGP signature
+>10 search/100 \n\n
+>>&0 use pgp
+0 string -----BEGIN\040PGP\040SIGNATURE- PGP signature
!:mime application/pgp-signature
+>10 search/100 \n\n
+>>&0 use pgp
+
+# Decode the type of the packet based on it's base64 encoding.
+# Idea from Mark Martinec
+# The specification is in RFC 4880, section 4.2 and 4.3:
+# http://tools.ietf.org/html/rfc4880#section-4.2
+
+0 name pgp
+>0 byte 0x67 Reserved (old)
+>0 byte 0x68 Public-Key Encrypted Session Key (old)
+>0 byte 0x69 Signature (old)
+>0 byte 0x6a Symmetric-Key Encrypted Session Key (old)
+>0 byte 0x6b One-Pass Signature (old)
+>0 byte 0x6c Secret-Key (old)
+>0 byte 0x6d Public-Key (old)
+>0 byte 0x6e Secret-Subkey (old)
+>0 byte 0x6f Compressed Data (old)
+>0 byte 0x70 Symmetrically Encrypted Data (old)
+>0 byte 0x71 Marker (old)
+>0 byte 0x72 Literal Data (old)
+>0 byte 0x73 Trust (old)
+>0 byte 0x74 User ID (old)
+>0 byte 0x75 Public-Subkey (old)
+>0 byte 0x76 Unused (old)
+>0 byte 0x77
+>>1 byte&0xc0 0x00 Reserved
+>>1 byte&0xc0 0x40 Public-Key Encrypted Session Key
+>>1 byte&0xc0 0x80 Signature
+>>1 byte&0xc0 0xc0 Symmetric-Key Encrypted Session Key
+>0 byte 0x78
+>>1 byte&0xc0 0x00 One-Pass Signature
+>>1 byte&0xc0 0x40 Secret-Key
+>>1 byte&0xc0 0x80 Public-Key
+>>1 byte&0xc0 0xc0 Secret-Subkey
+>0 byte 0x79
+>>1 byte&0xc0 0x00 Compressed Data
+>>1 byte&0xc0 0x40 Symmetrically Encrypted Data
+>>1 byte&0xc0 0x80 Marker
+>>1 byte&0xc0 0xc0 Literal Data
+>0 byte 0x7a
+>>1 byte&0xc0 0x00 Trust
+>>1 byte&0xc0 0x40 User ID
+>>1 byte&0xc0 0x80 Public-Subkey
+>>1 byte&0xc0 0xc0 Unused [z%x]
+>0 byte 0x30
+>>1 byte&0xc0 0x00 Unused [0%x]
+>>1 byte&0xc0 0x40 User Attribute
+>>1 byte&0xc0 0x80 Sym. Encrypted and Integrity Protected Data
+>>1 byte&0xc0 0xc0 Modification Detection Code
+
+# magic signatures to detect PGP crypto material (from stef)
+# detects and extracts metadata from:
+# - symmetric encrypted packet header
+# - RSA (e=65537) secret (sub-)keys
+
+# 1024b RSA encrypted data
+
+0 string \x84\x8c\x03 PGP RSA encrypted session key -
+>3 lelong x keyid: %X
+>7 lelong x %X
+>11 byte 0x01 RSA (Encrypt or Sign) 1024b
+>11 byte 0x02 RSA Encrypt-Only 1024b
+>12 string \x04\x00
+>12 string \x03\xff
+>12 string \x03\xfe
+>12 string \x03\xfd
+>12 string \x03\xfc
+>12 string \x03\xfb
+>12 string \x03\xfa
+>12 string \x03\xf9
+>142 byte 0xd2 .
+
+# 2048b RSA encrypted data
+
+0 string \x85\x01\x0c\x03 PGP RSA encrypted session key -
+>4 lelong x keyid: %X
+>8 lelong x %X
+>12 byte 0x01 RSA (Encrypt or Sign) 2048b
+>12 byte 0x02 RSA Encrypt-Only 2048b
+>13 string \x08\x00
+>13 string \x07\xff
+>13 string \x07\xfe
+>13 string \x07\xfd
+>13 string \x07\xfc
+>13 string \x07\xfb
+>13 string \x07\xfa
+>13 string \x07\xf9
+>271 byte 0xd2 .
+
+# 3072b RSA encrypted data
+
+0 string \x85\x01\x8c\x03 PGP RSA encrypted session key -
+>4 lelong x keyid: %X
+>8 lelong x %X
+>12 byte 0x01 RSA (Encrypt or Sign) 3072b
+>12 byte 0x02 RSA Encrypt-Only 3072b
+>13 string \x0c\x00
+>13 string \x0b\xff
+>13 string \x0b\xfe
+>13 string \x0b\xfd
+>13 string \x0b\xfc
+>13 string \x0b\xfb
+>13 string \x0b\xfa
+>13 string \x0b\xf9
+>399 byte 0xd2 .
+
+# 3072b RSA encrypted data
+
+0 string \x85\x02\x0c\x03 PGP RSA encrypted session key -
+>4 lelong x keyid: %X
+>8 lelong x %X
+>12 byte 0x01 RSA (Encrypt or Sign) 4096b
+>12 byte 0x02 RSA Encrypt-Only 4096b
+>13 string \x10\x00
+>13 string \x0f\xff
+>13 string \x0f\xfe
+>13 string \x0f\xfd
+>13 string \x0f\xfc
+>13 string \x0f\xfb
+>13 string \x0f\xfa
+>13 string \x0f\xf9
+>527 byte 0xd2 .
+
+# 4096b RSA encrypted data
+
+0 string \x85\x04\x0c\x03 PGP RSA encrypted session key -
+>4 lelong x keyid: %X
+>8 lelong x %X
+>12 byte 0x01 RSA (Encrypt or Sign) 8129b
+>12 byte 0x02 RSA Encrypt-Only 8129b
+>13 string \x20\x00
+>13 string \x1f\xff
+>13 string \x1f\xfe
+>13 string \x1f\xfd
+>13 string \x1f\xfc
+>13 string \x1f\xfb
+>13 string \x1f\xfa
+>13 string \x1f\xf9
+>1039 byte 0xd2 .
+
+# crypto algo mapper
+
+0 name crypto
+>0 byte 0x00 Plaintext or unencrypted data
+>0 byte 0x01 IDEA
+>0 byte 0x02 TripleDES
+>0 byte 0x03 CAST5 (128 bit key)
+>0 byte 0x04 Blowfish (128 bit key, 16 rounds)
+>0 byte 0x07 AES with 128-bit key
+>0 byte 0x08 AES with 192-bit key
+>0 byte 0x09 AES with 256-bit key
+>0 byte 0x0a Twofish with 256-bit key
+
+# hash algo mapper
+
+0 name hash
+>0 byte 0x01 MD5
+>0 byte 0x02 SHA-1
+>0 byte 0x03 RIPE-MD/160
+>0 byte 0x08 SHA256
+>0 byte 0x09 SHA384
+>0 byte 0x0a SHA512
+>0 byte 0x0b SHA224
+
+# display public key algorithms as human readable text
+0 name key_algo
+>0 byte 0x01 RSA (Encrypt or Sign)
+# keep old look of version 5.28 without parentheses
+>0 byte 0x02 RSA Encrypt-Only
+>0 byte 0x03 RSA (Sign-Only)
+>0 byte 16 ElGamal (Encrypt-Only)
+>0 byte 17 DSA
+>0 byte 18 Elliptic Curve
+>0 byte 19 ECDSA
+>0 byte 20 ElGamal (Encrypt or Sign)
+>0 byte 21 Diffie-Hellman
+>0 default x
+>>0 ubyte <22 unknown (pub %d)
+# this should never happen
+>>0 ubyte >21 invalid (%d)
+
+# pgp symmetric encrypted data
+
+0 byte 0x8c PGP symmetric key encrypted data -
+>1 byte 0x0d
+>1 byte 0x0c
+>2 byte 0x04
+>3 use crypto
+>4 byte 0x01 salted -
+>>5 use hash
+>>14 byte 0xd2 .
+>>14 byte 0xc9 .
+>4 byte 0x03 salted & iterated -
+>>5 use hash
+>>15 byte 0xd2 .
+>>15 byte 0xc9 .
+
+# encrypted keymaterial needs s2k & can be checksummed/hashed
+
+0 name chkcrypto
+>0 use crypto
+>1 byte 0x00 Simple S2K
+>1 byte 0x01 Salted S2K
+>1 byte 0x03 Salted&Iterated S2K
+>2 use hash
+
+# all PGP keys start with this prolog
+# containing version, creation date, and purpose
+
+0 name keyprolog
+>0 byte 0x04
+>1 beldate x created on %s -
+>5 byte 0x01 RSA (Encrypt or Sign)
+>5 byte 0x02 RSA Encrypt-Only
+
+# end of secret keys known signature
+# contains e=65537 and the prolog to
+# the encrypted parameters
+
+0 name keyend
+>0 string \x00\x11\x01\x00\x01 e=65537
+>5 use crypto
+>5 byte 0xff checksummed
+>>6 use chkcrypto
+>5 byte 0xfe hashed
+>>6 use chkcrypto
+
+# PGP secret keys contain also the public parts
+# these vary by bitsize of the key
+
+0 name x1024
+>0 use keyprolog
+>6 string \x03\xfe
+>6 string \x03\xff
+>6 string \x04\x00
+>136 use keyend
+
+0 name x2048
+>0 use keyprolog
+>6 string \x80\x00
+>6 string \x07\xfe
+>6 string \x07\xff
+>264 use keyend
+
+0 name x3072
+>0 use keyprolog
+>6 string \x0b\xfe
+>6 string \x0b\xff
+>6 string \x0c\x00
+>392 use keyend
+
+0 name x4096
+>0 use keyprolog
+>6 string \x10\x00
+>6 string \x0f\xfe
+>6 string \x0f\xff
+>520 use keyend
+
+# \x00|\x1f[\xfe\xff]).{1024})'
+0 name x8192
+>0 use keyprolog
+>6 string \x20\x00
+>6 string \x1f\xfe
+>6 string \x1f\xff
+>1032 use keyend
+
+# depending on the size of the pkt
+# we branch into the proper key size
+# signatures defined as x{keysize}
+
+>0 name pgpkey
+>0 string \x01\xd8 1024b
+>>2 use x1024
+>0 string \x01\xeb 1024b
+>>2 use x1024
+>0 string \x01\xfb 1024b
+>>2 use x1024
+>0 string \x01\xfd 1024b
+>>2 use x1024
+>0 string \x01\xf3 1024b
+>>2 use x1024
+>0 string \x01\xee 1024b
+>>2 use x1024
+>0 string \x01\xfe 1024b
+>>2 use x1024
+>0 string \x01\xf4 1024b
+>>2 use x1024
+>0 string \x02\x0d 1024b
+>>2 use x1024
+>0 string \x02\x03 1024b
+>>2 use x1024
+>0 string \x02\x05 1024b
+>>2 use x1024
+>0 string \x02\x15 1024b
+>>2 use x1024
+>0 string \x02\x00 1024b
+>>2 use x1024
+>0 string \x02\x10 1024b
+>>2 use x1024
+>0 string \x02\x04 1024b
+>>2 use x1024
+>0 string \x02\x06 1024b
+>>2 use x1024
+>0 string \x02\x16 1024b
+>>2 use x1024
+>0 string \x03\x98 2048b
+>>2 use x2048
+>0 string \x03\xab 2048b
+>>2 use x2048
+>0 string \x03\xbb 2048b
+>>2 use x2048
+>0 string \x03\xbd 2048b
+>>2 use x2048
+>0 string \x03\xcd 2048b
+>>2 use x2048
+>0 string \x03\xb3 2048b
+>>2 use x2048
+>0 string \x03\xc3 2048b
+>>2 use x2048
+>0 string \x03\xc5 2048b
+>>2 use x2048
+>0 string \x03\xd5 2048b
+>>2 use x2048
+>0 string \x03\xae 2048b
+>>2 use x2048
+>0 string \x03\xbe 2048b
+>>2 use x2048
+>0 string \x03\xc0 2048b
+>>2 use x2048
+>0 string \x03\xd0 2048b
+>>2 use x2048
+>0 string \x03\xb4 2048b
+>>2 use x2048
+>0 string \x03\xc4 2048b
+>>2 use x2048
+>0 string \x03\xc6 2048b
+>>2 use x2048
+>0 string \x03\xd6 2048b
+>>2 use x2048
+>0 string \x05X 3072b
+>>2 use x3072
+>0 string \x05k 3072b
+>>2 use x3072
+>0 string \x05{ 3072b
+>>2 use x3072
+>0 string \x05} 3072b
+>>2 use x3072
+>0 string \x05\x8d 3072b
+>>2 use x3072
+>0 string \x05s 3072b
+>>2 use x3072
+>0 string \x05\x83 3072b
+>>2 use x3072
+>0 string \x05\x85 3072b
+>>2 use x3072
+>0 string \x05\x95 3072b
+>>2 use x3072
+>0 string \x05n 3072b
+>>2 use x3072
+>0 string \x05\x7e 3072b
+>>2 use x3072
+>0 string \x05\x80 3072b
+>>2 use x3072
+>0 string \x05\x90 3072b
+>>2 use x3072
+>0 string \x05t 3072b
+>>2 use x3072
+>0 string \x05\x84 3072b
+>>2 use x3072
+>0 string \x05\x86 3072b
+>>2 use x3072
+>0 string \x05\x96 3072b
+>>2 use x3072
+>0 string \x07[ 4096b
+>>2 use x4096
+>0 string \x07\x18 4096b
+>>2 use x4096
+>0 string \x07+ 4096b
+>>2 use x4096
+>0 string \x07; 4096b
+>>2 use x4096
+>0 string \x07= 4096b
+>>2 use x4096
+>0 string \x07M 4096b
+>>2 use x4096
+>0 string \x073 4096b
+>>2 use x4096
+>0 string \x07C 4096b
+>>2 use x4096
+>0 string \x07E 4096b
+>>2 use x4096
+>0 string \x07U 4096b
+>>2 use x4096
+>0 string \x07. 4096b
+>>2 use x4096
+>0 string \x07> 4096b
+>>2 use x4096
+>0 string \x07@ 4096b
+>>2 use x4096
+>0 string \x07P 4096b
+>>2 use x4096
+>0 string \x074 4096b
+>>2 use x4096
+>0 string \x07D 4096b
+>>2 use x4096
+>0 string \x07F 4096b
+>>2 use x4096
+>0 string \x07V 4096b
+>>2 use x4096
+>0 string \x0e[ 8192b
+>>2 use x8192
+>0 string \x0e\x18 8192b
+>>2 use x8192
+>0 string \x0e+ 8192b
+>>2 use x8192
+>0 string \x0e; 8192b
+>>2 use x8192
+>0 string \x0e= 8192b
+>>2 use x8192
+>0 string \x0eM 8192b
+>>2 use x8192
+>0 string \x0e3 8192b
+>>2 use x8192
+>0 string \x0eC 8192b
+>>2 use x8192
+>0 string \x0eE 8192b
+>>2 use x8192
+>0 string \x0eU 8192b
+>>2 use x8192
+>0 string \x0e. 8192b
+>>2 use x8192
+>0 string \x0e> 8192b
+>>2 use x8192
+>0 string \x0e@ 8192b
+>>2 use x8192
+>0 string \x0eP 8192b
+>>2 use x8192
+>0 string \x0e4 8192b
+>>2 use x8192
+>0 string \x0eD 8192b
+>>2 use x8192
+>0 string \x0eF 8192b
+>>2 use x8192
+>0 string \x0eV 8192b
+>>2 use x8192
+
+# PGP RSA (e=65537) secret (sub-)key header
+
+0 byte 0x95 PGP Secret Key -
+>1 use pgpkey
+0 byte 0x97 PGP Secret Sub-key -
+>1 use pgpkey
+0 byte 0x9d
+# Update: Joerg Jenderek
+# secret subkey packet (tag 7) with same structure as secret key packet (tag 5)
+# skip Fetus.Sys16 CALIBUS.MAIN OrbFix.Sys16.Ex by looking for positive len
+>1 ubeshort >0
+#>1 ubeshort x \b, body length 0x%x
+# next packet type often 88h,89h~(tag 2)~Signature Packet
+#>>(1.S+3) ubyte x \b, next packet type 0x%x
+# skip Dragon.SHR DEMO.INIT by looking for positive version
+>>3 ubyte >0
+# skip BUISSON.13 GUITAR1 by looking for low version number
+>>>3 ubyte <5 PGP Secret Sub-key
+# sub-key are normally part of secret key. So it does not occur as standalone file
+#!:ext bin
+# version 2,3~old 4~new . Comment following line for version 5.28 look
+>>>>3 ubyte x (v%d)
+>>>>3 ubyte x -
+# old versions 2 or 3 but no real example found
+>>>>3 ubyte <4
+# 2 byte for key bits in version 5.28 look
+>>>>>11 ubeshort x %db
+>>>>>4 beldate x created on %s -
+# old versions use 2 additional bytes after time stamp
+#>>>>>8 ubeshort x 0x%x
+# display key algorithm 1~RSA Encrypt|Sign - 21~Diffie-Hellman
+>>>>>10 use key_algo
+>>>>>(11.S/8) ubequad x
+# look after first key
+>>>>>>&5 use keyend
+# new version
+>>>>3 ubyte >3
+>>>>>9 ubeshort x %db
+>>>>>4 beldate x created on %s -
+# display key algorithm
+>>>>>8 use key_algo
+>>>>>(9.S/8) ubequad x
+# look after first key for something like s2k
+>>>>>>&3 use keyend
Modified: trunk/contrib/file/magic/Magdir/printer
===================================================================
--- trunk/contrib/file/magic/Magdir/printer 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/printer 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: printer,v 1.26 2014/04/12 14:51:52 christos Exp $
+# $File: printer,v 1.28 2017/03/17 22:20:22 christos Exp $
# printer: file(1) magic for printer-formatted files
#
@@ -13,7 +13,7 @@
>>>15 string EPS \b, type %s
>>>15 string Query \b, type %s
>>>15 string ExitServer \b, type %s
->>>15 search/1000 %%LanguageLevel:\
+>>>15 search/1000 %%LanguageLevel:\040
>>>>&0 string >\0 \b, Level %s
# Some PCs have the annoying habit of adding a ^D as a document separator
0 string \004%! PostScript document text
@@ -24,7 +24,7 @@
>>>16 string EPS \b, type %s
>>>16 string Query \b, type %s
>>>16 string ExitServer \b, type %s
->>>16 search/1000 %%LanguageLevel:\
+>>>16 search/1000 %%LanguageLevel:\040
>>>>&0 string >\0 \b, Level %s
0 string \033%-12345X%!PS PostScript document
@@ -49,18 +49,18 @@
# HP Printer Job Language
0 string \033%-12345X at PJL HP Printer Job Language data
# HP Printer Job Language
-# The header found on Win95 HP plot files is the "Silliest Thing possible"
+# The header found on Win95 HP plot files is the "Silliest Thing possible"
# (TM)
# Every driver puts the language at some random position, with random case
# (LANGUAGE and Language)
# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
# From: Uwe Bonnes <bon at elektron.ikp.physik.th-darmstadt.de>
-#
+#
0 string \033%-12345X at PJL HP Printer Job Language data
->&0 string >\0 %s
->>&0 string >\0 %s
->>>&0 string >\0 %s
->>>>&0 string >\0 %s
+>&0 string >\0 %s
+>>&0 string >\0 %s
+>>>&0 string >\0 %s
+>>>>&0 string >\0 %s
#>15 string \ ENTER\ LANGUAGE\ =
#>31 string PostScript PostScript
@@ -143,8 +143,8 @@
#------------------------------------------------------------------------------
# HP LaserJet 1000 series downloadable firmware file
-0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware
+0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware
# From: Paolo <oopla at users.sf.net>
-# Epson ESC/Page, ESC/PageColor
+# Epson ESC/Page, ESC/PageColor
0 string \x1b\x01 at EJL Epson ESC/Page language printer data
Modified: trunk/contrib/file/magic/Magdir/project
===================================================================
--- trunk/contrib/file/magic/Magdir/project 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/project 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,8 +1,8 @@
#------------------------------------------------------------------------------
-# $File: project,v 1.4 2009/09/19 16:28:11 christos Exp $
+# $File: project,v 1.5 2017/03/17 21:35:28 christos Exp $
# project: file(1) magic for Project management
-#
+#
# Magic strings for ftnchek project files. Alexander Mai
0 string FTNCHEK_\ P project file for ftnchek
>10 string 1 version 2.7
Modified: trunk/contrib/file/magic/Magdir/psdbms
===================================================================
--- trunk/contrib/file/magic/Magdir/psdbms 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/psdbms 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,8 +1,14 @@
#------------------------------------------------------------------------------
-# $File: psdbms,v 1.6 2009/09/19 16:28:11 christos Exp $
+# $File: psdbms,v 1.8 2017/03/17 21:35:28 christos Exp $
# psdbms: file(1) magic for psdatabase
#
-0 belong&0xff00ffff 0x56000000 ps database
->1 string >\0 version %s
->4 string >\0 from kernel %s
+# Update: Joerg Jenderek
+# GRR: line below too general as it catches also some Panorama database *.pan ,
+# AppleWorks word processor
+0 belong&0xff00ffff 0x56000000
+# assume version starts with digit
+>1 regex/s =^[0-9] ps database
+>>1 string >\0 version %s
+# kernel name
+>>4 string >\0 from kernel %s
Modified: trunk/contrib/file/magic/Magdir/python
===================================================================
--- trunk/contrib/file/magic/Magdir/python 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/python 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: python,v 1.25 2014/05/06 16:08:32 christos Exp $
+# $File: python,v 1.34 2017/08/14 07:40:38 christos Exp $
# python: file(1) magic for python
#
# Outlook puts """ too for urgent messages
@@ -9,7 +9,7 @@
0 string/t """ Python script text executable
# MAGIC as specified in Python/import.c (1.5 to 2.7a0 and 3.1a0, assuming
# that Py_UnicodeFlag is off for Python 2)
-# 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n"
+# two bytes of magic followed by "\r\n" in little endian order
0 belong 0x994e0d0a python 1.5/1.6 byte-compiled
0 belong 0x87c60d0a python 2.0 byte-compiled
0 belong 0x2aeb0d0a python 2.1 byte-compiled
@@ -23,26 +23,49 @@
0 belong 0x4f0c0d0a python 3.1 byte-compiled
0 belong 0x6c0c0d0a python 3.2 byte-compiled
0 belong 0x9e0c0d0a python 3.3 byte-compiled
+0 belong 0xee0c0d0a python 3.4 byte-compiled
+0 belong 0x160d0d0a python 3.5.1- byte-compiled
+0 belong 0x170d0d0a python 3.5.2+ byte-compiled
+0 belong 0x330d0d0a python 3.6 byte-compiled
+0 belong 0x3e0d0d0a python 3.7 byte-compiled
+
0 search/1/w #!\ /usr/bin/python Python script text executable
+!:strength + 15
!:mime text/x-python
0 search/1/w #!\ /usr/local/bin/python Python script text executable
+!:strength + 15
!:mime text/x-python
0 search/1 #!/usr/bin/env\ python Python script text executable
+!:strength + 15
!:mime text/x-python
-0 search/1 #!\ /usr/bin/env\ python Python script text executable
+0 search/10 #!\ /usr/bin/env\ python Python script text executable
+!:strength + 15
!:mime text/x-python
# from module.submodule import func1, func2
-0 regex \^from\\s+(\\w|\\.)+\\s+import.*$ Python script text executable
+0 regex \^from[\040\t\f\r\n]+([A-Za-z0-9_]|\\.)+[\040\t\f\r\n]+import.*$ Python script text executable
+!:strength + 15
!:mime text/x-python
# def __init__ (self, ...):
0 search/4096 def\ __init__
>&0 search/64 self Python script text executable
+!:strength + 15
!:mime text/x-python
+# if __name__ == "__main__":
+0 search/4096 if\ __name__
+>&0 search/64 '__main__' Python script text executable
+>&0 search/64 "__main__" Python script text executable
+!:strength + 15
+!:mime text/x-python
+
+# import module [as abrev]
+0 regex \^import\ [_[:alpha:]]+\ as\ [[:alpha:]][[:space:]]*$ Python script text executable
+!:mime text/x-python
+
# comments
#0 search/4096 '''
#>&0 regex .*'''$ Python script text executable
@@ -56,12 +79,19 @@
# except: or finally:
# block
0 search/4096 try:
->&0 regex \^\\s*except.*: Python script text executable
+>&0 regex \^[[:space:]]*except.*:$ Python script text executable
+!:strength + 15
!:mime text/x-python
>&0 search/4096 finally: Python script text executable
!:mime text/x-python
-# def name(args, args):
-0 regex \^(\ |\\t){0,50}def\ {1,50}[a-zA-Z]{1,100}
->&0 regex \ {0,50}\\(([a-zA-Z]|,|\ ){1,255}\\):$ Python script text executable
+# class name[(base classes,)]: [pass]
+0 regex \^class\ [_[:alpha:]]+(\\(.*\\))?(\ )*:([\ \t]+pass)?$ Python script text executable
+!:strength + 15
!:mime text/x-python
+
+# def name(*args, **kwargs):
+0 regex \^[[:space:]]{0,50}def\ {1,50}[_a-zA-Z]{1,100}
+>&0 regex \\(([[:alpha:]*_,\ ]){0,255}\\):$ Python script text executable
+!:strength + 15
+!:mime text/x-python
Modified: trunk/contrib/file/magic/Magdir/riff
===================================================================
--- trunk/contrib/file/magic/Magdir/riff 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/riff 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: riff,v 1.27 2014/04/30 21:41:02 christos Exp $
+# $File: riff,v 1.32 2017/03/17 21:35:28 christos Exp $
# riff: file(1) magic for RIFF format
# See
#
@@ -45,6 +45,26 @@
>>&(4.l+4) use riff-walk
>0 string fact
>>&(4.l+4) use riff-walk
+>0 string VP8
+>>11 byte 0x9d
+>>>12 byte 0x01
+>>>>13 byte 0x2a \b, VP8 encoding
+>>>>>14 leshort&0x3fff x \b, %d
+>>>>>16 leshort&0x3fff x \bx%d, Scaling:
+>>>>>14 leshort&0xc000 0x0000 \b [none]
+>>>>>14 leshort&0xc000 0x1000 \b [5/4]
+>>>>>14 leshort&0xc000 0x2000 \b [5/3]
+>>>>>14 leshort&0xc000 0x3000 \b [2]
+>>>>>14 leshort&0xc000 0x0000 \bx[none]
+>>>>>14 leshort&0xc000 0x1000 \bx[5/4]
+>>>>>14 leshort&0xc000 0x2000 \bx[5/3]
+>>>>>14 leshort&0xc000 0x3000 \bx[2]
+>>>>>15 byte&0x80 =0x00 \b, YUV color
+>>>>>15 byte&0x80 =0x80 \b, bad color specification
+>>>>>15 byte&0x40 =0x40 \b, no clamping required
+>>>>>15 byte&0x40 =0x00 \b, decoders should clamp
+#>0 string x we got %s
+#>>&(4.l+4) use riff-walk
# AVI section extended by Patrik Radman <patrik+file-magic at iki.fi>
#
@@ -55,7 +75,7 @@
>>18 leshort x \b, %d entries
# RIFF Device Independent Bitmap format
>8 string RDIB \b, device-independent bitmap
->>16 string BM
+>>16 string BM
>>>30 leshort 12 \b, OS/2 1.x format
>>>>34 leshort x \b, %d x
>>>>36 leshort x %d
@@ -206,9 +226,12 @@
>8 string sfbk SoundFont/Bank
# MPEG-1 wrapped in a RIFF, apparently
>8 string CDXA \b, wrapped MPEG-1 (CDXA)
->8 string 4XMV \b, 4X Movie file
+>8 string 4XMV \b, 4X Movie file
# AMV-type AVI file: http://wiki.multimedia.cx/index.php?title=AMV
->8 string AMV\040 \b, AMV
+>8 string AMV\040 \b, AMV
+>8 string WEBP \b, Web/P image
+!:mime image/webp
+>>12 use riff-walk
#
# XXX - some of the below may only appear in little-endian form.
@@ -223,7 +246,7 @@
>>18 beshort x \b, %d entries
# RIFF Device Independent Bitmap format
>8 string RDIB \b, device-independent bitmap
->>16 string BM
+>>16 string BM
>>>30 beshort 12 \b, OS/2 1.x format
>>>>34 beshort x \b, %d x
>>>>36 beshort x %d
@@ -261,7 +284,7 @@
#------------------------------------------------------------------------------
# Sony Wave64
# see http://www.vcs.de/fileadmin/user_upload/MBS/PDF/Whitepaper/Informations_about_Sony_Wave64.pdf
-# 128 bit RIFF-GUID { 66666972-912E-11CF-A5D6-28DB04C10000 } in little-endian
+# 128 bit RIFF-GUID { 66666972-912E-11CF-A5D6-28DB04C10000 } in little-endian
0 string riff\x2E\x91\xCF\x11\xA5\xD6\x28\xDB\x04\xC1\x00\x00 Sony Wave64 RIFF data
# 128 bit + total file size (64 bits) so 24 bytes
# then WAVE-GUID { 65766177-ACF3-11D3-8CD1-00C04F8EDB8A }
@@ -284,4 +307,3 @@
>>&6 leshort =2 \b, stereo
>>&6 leshort >2 \b, %d channels
>>&8 lelong >0 %d Hz
-
Modified: trunk/contrib/file/magic/Magdir/ruby
===================================================================
--- trunk/contrib/file/magic/Magdir/ruby 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/ruby 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,28 +1,51 @@
#------------------------------------------------------------------------------
-# $File: ruby,v 1.5 2010/07/21 16:47:17 christos Exp $
+# $File: ruby,v 1.7 2017/08/14 13:39:18 christos Exp $
# ruby: file(1) magic for Ruby scripting language
# URL: http://www.ruby-lang.org/
# From: Reuben Thomas <rrt at sc3d.org>
# Ruby scripts
-0 search/1/w #!\ /usr/bin/ruby Ruby script text executable
+0 search/1/w #!\ /usr/bin/ruby Ruby script text executable
+!:strength + 15
!:mime text/x-ruby
0 search/1/w #!\ /usr/local/bin/ruby Ruby script text executable
+!:strength + 15
!:mime text/x-ruby
-0 search/1 #!/usr/bin/env\ ruby Ruby script text executable
+0 search/1 #!/usr/bin/env\ ruby Ruby script text executable
+!:strength + 15
!:mime text/x-ruby
-0 search/1 #!\ /usr/bin/env\ ruby Ruby script text executable
+0 search/1 #!\ /usr/bin/env\ ruby Ruby script text executable
+!:strength + 15
!:mime text/x-ruby
# What looks like ruby, but does not have a shebang
# (modules and such)
# From: Lubomir Rintel <lkundrak at v3.sk>
-0 regex \^[\ \t]*require[\ \t]'[A-Za-z_/]+'
->0 regex include\ [A-Z]|def\ [a-z]|\ do$
->>0 regex \^[\ \t]*end([\ \t]*[;#].*)?$ Ruby script text
+0 regex \^[[:space:]]*require[[:space:]]'[A-Za-z_/]+'
+>0 regex def\ [a-z]|\ do$
+>>&0 regex \^[[:space:]]*end([[:space:]]+[;#].*)?$ Ruby script text
+!:strength + 30
!:mime text/x-ruby
-0 regex \^[\ \t]*(class|module)[\ \t][A-Z]
+0 regex \^[[:space:]]*(class|module)[[:space:]][A-Z]
>0 regex (modul|includ)e\ [A-Z]|def\ [a-z]
->>0 regex \^[\ \t]*end([\ \t]*[;#].*)?$ Ruby module source text
+>>&0 regex \^[[:space:]]*end([[:space:]]+[;#].*)?$ Ruby script text
+!:strength + 30
!:mime text/x-ruby
+# Classes with no modules or defs, beats simple ASCII
+0 regex \^[[:space:]]*(class|module)[[:space:]][A-Z]
+>&0 regex \^[[:space:]]*end([[:space:]]+[;#if].*)?$ Ruby script text
+!:strength + 10
+!:mime text/x-ruby
+# Looks for function definition to balance python magic
+# def name (args)
+# end
+0 regex \^[[:space:]]*def\ [a-z]|def\ [[:alpha:]]+::[a-z]
+>&0 regex \^[[:space:]]*end([[:space:]]+[;#].*)?$ Ruby script text
+!:strength + 10
+!:mime text/x-ruby
+
+0 regex \^[[:space:]]*require[[:space:]]'[A-Za-z_/]+' Ruby script text
+!:mime text/x-ruby
+0 regex \^[[:space:]]*include\ ([A-Z]+[a-z]*(::))+ Ruby script text
+!:mime text/x-ruby
Modified: trunk/contrib/file/magic/Magdir/sccs
===================================================================
--- trunk/contrib/file/magic/Magdir/sccs 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sccs 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sccs,v 1.6 2009/09/19 16:28:12 christos Exp $
+# $File: sccs,v 1.7 2017/03/17 21:35:28 christos Exp $
# sccs: file(1) magic for SCCS archives
#
# SCCS archive structure:
@@ -17,6 +17,6 @@
# Maybe we should just switch everybody from SCCS to RCS!
# Further, you can't just say '\001h0', because the five-digit number
# is a checksum that could (presumably) have any leading digit,
-# and we don't have regular expression matching yet.
+# and we don't have regular expression matching yet.
# Hence the following official kludge:
8 string \001s\ SCCS archive data
Modified: trunk/contrib/file/magic/Magdir/scientific
===================================================================
--- trunk/contrib/file/magic/Magdir/scientific 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/scientific 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: scientific,v 1.9 2014/06/03 19:01:34 christos Exp $
-# scientific: file(1) magic for scientific formats
+# $File: scientific,v 1.12 2017/03/17 22:20:22 christos Exp $
+# scientific: file(1) magic for scientific formats
#
# From: Joe Krahn <krahn at niehs.nih.gov>
@@ -90,7 +90,7 @@
# format DD-MMM-YY, e.g., 01-JAN-70, and the IDcode consists of numbers and
# uppercase letters. However, examples have been seen without the date string,
# e.g., the example on the chemime site.
-0 string HEADER\ \ \ \
+0 string HEADER\ \ \ \040
>&0 regex/1l \^.{40}
>>&0 regex/1l [0-9]{2}-[A-Z]{3}-[0-9]{2}\ {3}
>>>&0 regex/1ls [A-Z0-9]{4}.{14}$
@@ -104,3 +104,8 @@
>>5 byte x version %d.0
>4 byte >0x00 version %d
>>5 byte x \b.%d
+
+# Type: LXT (interLaced eXtensible Trace)
+# chrysn <chrysn at fsfe.org>
+0 beshort 0x0138 interLaced eXtensible Trace (LXT) file
+>2 beshort >0 (Version %u)
Modified: trunk/contrib/file/magic/Magdir/sendmail
===================================================================
--- trunk/contrib/file/magic/Magdir/sendmail 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sendmail 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,14 +1,31 @@
#------------------------------------------------------------------------------
-# $File: sendmail,v 1.7 2009/09/19 16:28:12 christos Exp $
+# $File: sendmail,v 1.10 2017/08/13 00:21:47 christos Exp $
# sendmail: file(1) magic for sendmail config files
#
# XXX - byte order?
#
-0 byte 046 Sendmail frozen configuration
->16 string >\0 - version %s
-0 short 0x271c Sendmail frozen configuration
->16 string >\0 - version %s
+# Update: Joerg Jenderek
+# GRR: this test is too general as it catches also
+# READ.ME.FIRST.AWP Sendmail frozen configuration
+# - version ====|====|====|====|====|====|====|====|====|====|====|====|===
+# Email_23_f217153422.ts Sendmail frozen configuration
+# - version \330jK\354
+0 byte 046
+# http://www.sendmail.com/sm/open_source/docs/older_release_notes/
+# freezed configuration file (dbm format?) created from sendmal.cf with -bz
+# by older sendmail. til version 8.6 support for frozen configuration files is removed
+# valid version numbers look like "7.14.4" and should be similar to output of commands
+# "sendmail -d0 -bt < /dev/null |grep -i Version" or "egrep '^DZ' /etc/sendmail.cf"
+>16 regex/s =^[0-78][0-9.]{4} Sendmail frozen configuration
+# normally only /etc/sendmail.fc or /var/adm/sendmail/sendmail.fc
+!:ext fc
+>>16 string >\0 - version %s
+0 short 0x271c
+# look for valid version number
+>16 regex/s =^[0-78][0-9.]{4} Sendmail frozen configuration
+!:ext fc
+>>16 string >\0 - version %s
#------------------------------------------------------------------------------
# sendmail: file(1) magic for sendmail m4(1) files
Modified: trunk/contrib/file/magic/Magdir/sequent
===================================================================
--- trunk/contrib/file/magic/Magdir/sequent 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sequent 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sequent,v 1.11 2014/06/02 19:27:54 christos Exp $
+# $File: sequent,v 1.13 2017/03/17 21:35:28 christos Exp $
# sequent: file(1) magic for Sequent machines
#
# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
@@ -30,15 +30,12 @@
0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0)
>16 lelong >0 not stripped
>124 lelong >0 version %d
-0 leshort 0x42eb SYMMETRY i386 standalone executable
->16 lelong >0 not stripped
->124 lelong >0 version %d
# http://en.wikipedia.org/wiki/Sequent_Computer_Systems
# below test line conflicts with MS-DOS 2.11 floppies and Acronis loader
#0 leshort 0x42eb SYMMETRY i386 standalone executable
-0 leshort 0x42eb
+0 leshort 0x42eb
# skip unlike negative version
->124 lelong >-1
+>124 lelong >-1
# assuming version 28867614 is very low probable
>>124 lelong !28867614 SYMMETRY i386 standalone executable
>>>16 lelong >0 not stripped
Modified: trunk/contrib/file/magic/Magdir/sereal
===================================================================
--- trunk/contrib/file/magic/Magdir/sereal 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sereal 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,5 +1,6 @@
+
#------------------------------------------------------------------------------
-# $File: sereal,v 1.1 2014/05/14 23:04:59 christos Exp $
+# $File: sereal,v 1.3 2015/02/05 19:14:45 christos Exp $
# sereal: file(1) magic the Sereal binary serialization format
#
# From: Ævar Arnfjörð Bjarmason <avarab at gmail.com>
@@ -15,10 +16,20 @@
#
# See https://github.com/Sereal/Sereal/commit/35372ae01d in the
# Sereal.git repository for test Sereal data.
-0 string \=srl Sereal data
+0 name sereal
+>4 byte&0x0F x (version %d,
+>4 byte&0xF0 0x00 uncompressed)
+>4 byte&0xF0 0x10 compressed with non-incremental Snappy)
+>4 byte&0xF0 0x20 compressed with incremental Snappy)
+>4 byte&0xF0 >0x20 unknown subformat, flag: %d>>4)
+
+0 string/b \=srl Sereal data packet
!:mime application/sereal
->4 byte&0x0F x (version %d,
->4 byte&0xF0 0x00 uncompressed)
->4 byte&0xF0 0x10 compressed with non-incremental Snappy)
->4 byte&0xF0 0x20 compressed with incremental Snappy)
->4 byte&0xF0 >0x20 unknown subformat, flag: %d>>4)
+>&0 use sereal
+0 string/b \=\xF3rl Sereal data packet
+!:mime application/sereal
+>&0 use sereal
+0 string/b \=\xC3\xB3rl Sereal data packet, UTF-8 encoded
+!:mime application/sereal
+>&0 use sereal
+
Modified: trunk/contrib/file/magic/Magdir/sgi
===================================================================
--- trunk/contrib/file/magic/Magdir/sgi 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sgi 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sgi,v 1.21 2014/04/30 21:41:02 christos Exp $
+# $File: sgi,v 1.22 2015/08/29 07:10:35 christos Exp $
# sgi: file(1) magic for Silicon Graphics operating systems and applications
#
# Executable images are handled either in aout (for old-style a.out
@@ -55,8 +55,8 @@
0 string WNGZWZSS Wingz spreadsheet
0 string WNGZWZHP Wingz help file
#
-0 string #Inventor V IRIS Inventor 1.0 file
-0 string #Inventor V2 Open Inventor 2.0 file
+0 string #Inventor\040V IRIS Inventor 1.0 file
+0 string #Inventor\040V2 Open Inventor 2.0 file
# GLF is OpenGL stream encoding
0 string glfHeadMagic(); GLF_TEXT
4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
Modified: trunk/contrib/file/magic/Magdir/sgml
===================================================================
--- trunk/contrib/file/magic/Magdir/sgml 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sgml 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,17 +1,20 @@
+
#------------------------------------------------------------------------------
-# $File: sgml,v 1.30 2013/12/21 14:27:24 christos Exp $
+# $File: sgml,v 1.37 2017/07/23 08:23:33 christos Exp $
# Type: SVG Vectorial Graphics
# From: Noel Torres <tecnico at ejerciciosresueltos.com>
-0 string \<?xml\ version="
->15 string >\0
+0 string \<?xml\ version=
+>14 regex ['"\ \t]*[0-9.]+['"\ \t]*
>>19 search/4096 \<svg SVG Scalable Vector Graphics image
!:mime image/svg+xml
>>19 search/4096 \<gnc-v2 GnuCash file
!:mime application/x-gnucash
+0 string \<svg SVG Scalable Vector Graphics image
+!:mime image/svg
# Sitemap file
-0 string/t \<?xml\ version="
->15 string >\0
+0 string/t \<?xml\ version=
+>14 regex ['"\ \t]*[0-9.]+['"\ \t]*
>>19 search/4096 \<urlset XML Sitemap document text
!:mime application/xml-sitemap
@@ -18,22 +21,22 @@
# OpenStreetMap XML (.osm)
# http://wiki.openstreetmap.org/wiki/OSM_XML
# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 string \<?xml\ version="
->15 string >\0
+0 string \<?xml\ version=
+>14 regex ['"\ \t]*[0-9.]+['"\ \t]*
>>19 search/4096 \<osm OpenStreetMap XML data
# xhtml
0 string/t \<?xml\ version="
->15 string >\0
->>19 search/4096/cWbt \<!doctype\ html XHTML document text
+>19 search/4096/cWbt \<!doctype\ html XHTML document text
+>>15 string >\0 (version %.3s)
!:mime text/html
0 string/t \<?xml\ version='
->15 string >\0
->>19 search/4096/cWbt \<!doctype\ html XHTML document text
+>19 search/4096/cWbt \<!doctype\ html XHTML document text
+>>15 string >\0 (version %.3s)
!:mime text/html
0 string/t \<?xml\ version="
->15 string >\0
->>19 search/4096/cWbt \<html broken XHTML document text
+>19 search/4096/cWbt \<html broken XHTML document text
+>>15 string >\0 (version %.3s)
!:mime text/html
#------------------------------------------------------------------------------
@@ -44,24 +47,50 @@
0 search/4096/cWt \<!doctype\ html HTML document text
!:mime text/html
!:strength + 5
-0 search/4096/cwt \<head HTML document text
+
+# SVG document
+# https://www.w3.org/TR/SVG/single-page.html
+0 search/4096/cWbt \<!doctype\ svg SVG XML document
+!:mime image/svg+xml
+!:strength + 5
+
+0 search/4096/cwt \<head\> HTML document text
!:mime text/html
!:strength + 5
-0 search/4096/cwt \<title HTML document text
+0 search/4096/cWt \<head\ HTML document text
!:mime text/html
!:strength + 5
-0 search/4096/cwt \<html HTML document text
+0 search/4096/cwt \<title\> HTML document text
!:mime text/html
!:strength + 5
-0 search/4096/cwt \<script HTML document text
+0 search/4096/cWt \<title\ HTML document text
!:mime text/html
!:strength + 5
-0 search/4096/cwt \<style HTML document text
+0 search/4096/cwt \<html\> HTML document text
!:mime text/html
!:strength + 5
-0 search/4096/cwt \<table HTML document text
+0 search/4096/cWt \<html\ HTML document text
!:mime text/html
!:strength + 5
+0 search/4096/cwt \<script\> HTML document text
+!:mime text/html
+!:strength + 5
+0 search/4096/cWt \<script\ HTML document text
+!:mime text/html
+!:strength + 5
+0 search/4096/cwt \<style\> HTML document text
+!:mime text/html
+!:strength + 5
+0 search/4096/cWt \<style\ HTML document text
+!:mime text/html
+!:strength + 5
+0 search/4096/cwt \<table\> HTML document text
+!:mime text/html
+!:strength + 5
+0 search/4096/cWt \<table\ HTML document text
+!:mime text/html
+!:strength + 5
+
0 search/4096/cwt \<a\ href= HTML document text
!:mime text/html
!:strength + 5
@@ -69,28 +98,25 @@
# Extensible markup language (XML), a subset of SGML
# from Marc Prud'hommeaux (marc at apocalypse.org)
0 search/1/cwt \<?xml XML document text
-!:mime application/xml
+!:mime text/xml
!:strength + 5
0 string/t \<?xml\ version\ " XML
-!:mime application/xml
+!:mime text/xml
!:strength + 5
0 string/t \<?xml\ version=" XML
-!:mime application/xml
+!:mime text/xml
!:strength + 5
>15 string/t >\0 %.3s document text
>>23 search/1 \<xsl:stylesheet (XSL stylesheet)
>>24 search/1 \<xsl:stylesheet (XSL stylesheet)
0 string \<?xml\ version=' XML
-!:mime application/xml
+!:mime text/xml
!:strength + 5
>15 string/t >\0 %.3s document text
>>23 search/1 \<xsl:stylesheet (XSL stylesheet)
>>24 search/1 \<xsl:stylesheet (XSL stylesheet)
-0 search/1/wbt \<?xml XML document text
-!:mime application/xml
-!:strength - 10
0 search/1/wt \<?XML broken XML document text
-!:mime application/xml
+!:mime text/xml
!:strength - 10
Modified: trunk/contrib/file/magic/Magdir/sharc
===================================================================
--- trunk/contrib/file/magic/Magdir/sharc 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sharc 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------
-# $File: sharc,v 1.7 2014/04/30 21:41:02 christos Exp $
+# $File: sharc,v 1.8 2017/03/17 21:35:28 christos Exp $
# file(1) magic for sharc files
#
-# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
+# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
# FutureGroove Music (dsp at futuregroove.de)
#------------------------------------------------------------------------
Modified: trunk/contrib/file/magic/Magdir/sinclair
===================================================================
--- trunk/contrib/file/magic/Magdir/sinclair 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sinclair 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sinclair,v 1.5 2009/09/19 16:28:12 christos Exp $
+# $File: sinclair,v 1.6 2015/11/14 13:38:35 christos Exp $
# sinclair: file(1) sinclair QL
# additions to /etc/magic by Thomas M. Ott (ThMO)
@@ -13,20 +13,13 @@
>4 string >\0 label:%.10s
# Sinclair QL OS dump (ThMO)
-# (NOTE: if `file' would be able to use indirect references in a endian format
-# differing from the natural host format, this could be written more
-# reliably and faster...)
-#
-# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more
-# than the first 8K of a file... #-(
-#
-#0 belong =0x30000
-#>49124 belong <47104
-#>>49128 belong <47104
-#>>>49132 belong <47104
-#>>>>49136 belong <47104 QL OS dump data,
-#>>>>>49148 string >\0 type %.3s,
-#>>>>>49142 string >\0 version %.4s
+0 belong =0x30000
+>49124 belong <47104
+>>49128 belong <47104
+>>>49132 belong <47104
+>>>>49136 belong <47104 QL OS dump data,
+>>>>>49148 string >\0 type %.3s,
+>>>>>49142 string >\0 version %.4s
# Sinclair QL firmware executables (ThMO)
0 string NqNqNq`\004 QL firmware executable (BCPL)
Modified: trunk/contrib/file/magic/Magdir/sketch
===================================================================
--- trunk/contrib/file/magic/Magdir/sketch 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sketch 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sketch,v 1.4 2009/09/19 16:28:12 christos Exp $
-# Sketch Drawings: http://sketch.sourceforge.net/
+# $File: sketch,v 1.5 2017/03/17 21:35:28 christos Exp $
+# Sketch Drawings: http://sketch.sourceforge.net/
# From: Edwin Mons <e at ik.nu>
0 search/1 ##Sketch Sketch document text
Modified: trunk/contrib/file/magic/Magdir/sql
===================================================================
--- trunk/contrib/file/magic/Magdir/sql 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sql 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sql,v 1.15 2014/04/30 21:41:02 christos Exp $
+# $File: sql,v 1.21 2017/03/17 21:35:28 christos Exp $
# sql: file(1) magic for SQL files
#
# From: "Marty Leisner" <mleisner at eng.mc.xerox.com>
@@ -10,28 +10,70 @@
#
0 beshort 0xfe01 MySQL table definition file
>2 byte x Version %d
+>3 byte 0 \b, type UNKNOWN
+>3 byte 1 \b, type DIAM_ISAM
+>3 byte 2 \b, type HASH
+>3 byte 3 \b, type MISAM
+>3 byte 4 \b, type PISAM
+>3 byte 5 \b, type RMS_ISAM
+>3 byte 6 \b, type HEAP
+>3 byte 7 \b, type ISAM
+>3 byte 8 \b, type MRG_ISAM
+>3 byte 9 \b, type MYISAM
+>3 byte 10 \b, type MRG_MYISAM
+>3 byte 11 \b, type BERKELEY_DB
+>3 byte 12 \b, type INNODB
+>3 byte 13 \b, type GEMINI
+>3 byte 14 \b, type NDBCLUSTER
+>3 byte 15 \b, type EXAMPLE_DB
+>3 byte 16 \b, type CSV_DB
+>3 byte 17 \b, type FEDERATED_DB
+>3 byte 18 \b, type BLACKHOLE_DB
+>3 byte 19 \b, type PARTITION_DB
+>3 byte 20 \b, type BINLOG
+>3 byte 21 \b, type SOLID
+>3 byte 22 \b, type PBXT
+>3 byte 23 \b, type TABLE_FUNCTION
+>3 byte 24 \b, type MEMCACHE
+>3 byte 25 \b, type FALCON
+>3 byte 26 \b, type MARIA
+>3 byte 27 \b, type PERFORMANCE_SCHEMA
+>3 byte 127 \b, type DEFAULT
+>0x0033 ulong x \b, MySQL version %d
+0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file
+>3 byte x Version %d
+0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file
+>3 byte x Version %d
0 belong&0xffffff00 0xfefe0700 MySQL MyISAM index file
>3 byte x Version %d
+>14 beshort x \b, %d key parts
+>16 beshort x \b, %d unique key parts
+>18 byte x \b, %d keys
+>28 bequad x \b, %lld records
+>36 bequad x \b, %lld deleted records
0 belong&0xffffff00 0xfefe0800 MySQL MyISAM compressed data file
>3 byte x Version %d
0 belong&0xffffff00 0xfefe0900 MySQL Maria index file
>3 byte x Version %d
-0 belong&0xffffff00 0xfefe0A00 MySQL Maria compressed data file
+0 belong&0xffffff00 0xfefe0a00 MySQL Maria compressed data file
>3 byte x Version %d
-0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file
->3 byte x Version %d
-0 string \376bin MySQL replication log
-0 belong&0xffffff00 0xfefe0b00
->4 string MARIALOG MySQL Maria transaction log file
->>3 byte x Version %d
0 belong&0xffffff00 0xfefe0c00
>4 string MACF MySQL Maria control file
>>3 byte x Version %d
+0 string \376bin MySQL replication log,
+>9 long x server id %d
+>8 byte 1
+>>13 long 69 \b, MySQL V3.2.3
+>>>19 string x \b, server version %s
+>>13 long 75 \b, MySQL V4.0.2-V4.1
+>>>25 string x \b, server version %s
+>8 byte 15 MySQL V5+,
+>>25 string x server version %s
+>4 string MARIALOG MySQL Maria transaction log file
+>>3 byte x Version %d
#------------------------------------------------------------------------------
-# iRiver H Series database file
+# iRiver H Series database file
# From Ken Guest <ken at linux.ie>
# As observed from iRivNavi.iDB and unencoded firmware
#
@@ -54,21 +96,32 @@
# at offset 68 that is preferred over "user version" for indicating the
# associated application.
#
-0 string SQLite\ format\ 3
->60 belong =0x5f4d544e Monotone source repository - SQLite3 database
->68 belong =0x0f055112 Fossil checkout - SQLite3 database
->68 belong =0x0f055113 Fossil global configuration - SQLite3 database
->68 belong =0x0f055111 Fossil repository - SQLite3 database
->68 belong =0x42654462 Bentley Systems BeSQLite Database - SQLite3 database
->68 belong =0x42654c6e Bentley Systems Localization File - SQLite3 database
->68 belong =0x47504b47 OGC GeoPackage file - SQLite3 database
->68 default x SQLite 3.x database
+0 string SQLite\ format\ 3 SQLite 3.x database
+!:mime application/x-sqlite3
+# seldom found extension sqlite3 like in SyncData.sqlite3
+# db
+# Avira Antivir use extension "dbe" like in avevtdb.dbe, avguard_tchk.dbe
+# Unfortunately extension sqlite also used for other databases starting with string
+# "TTCONTAINER" like in tracks.sqlite contentconsumer.sqlite contentproducerrepository.sqlite
+# and with string "ZV-zlib" in like extra.sqlite
+!:ext sqlite/sqlite3/db/dbe
+>60 belong =0x5f4d544e (Monotone source repository)
+>68 belong =0x0f055112 (Fossil checkout)
+>68 belong =0x0f055113 (Fossil global configuration)
+>68 belong =0x0f055111 (Fossil repository)
+>68 belong =0x42654462 (Bentley Systems BeSQLite Database)
+>68 belong =0x42654c6e (Bentley Systems Localization File)
+>68 belong =0x47504b47 (OGC GeoPackage file)
+>68 default x
>>68 belong !0 \b, application id %u
>>60 belong !0 \b, user version %d
+>96 belong x \b, last written using SQLite version %d
+
# SQLite Write-Ahead Log from SQLite version >= 3.7.0
# http://www.sqlite.org/fileformat.html#walformat
0 belong&0xfffffffe 0x377f0682 SQLite Write-Ahead Log,
+!:ext sqlite-wal/db-wal
>4 belong x version %d
# SQLite Rollback Journal
@@ -76,8 +129,13 @@
0 string \xd9\xd5\x05\xf9\x20\xa1\x63\xd7 SQLite Rollback Journal
# Panasonic channel list database svl.bin or svl.db added by Joerg Jenderek
-# http://www.ullrich.es/job/service-menue/panasonic/panasonic-sendersortierung-sat-am-pc/
-# pceditor_V2003.jar
-0 string PSDB\0 Panasonic channel list database
->126 string SQLite\ format\ 3
->>&-15 indirect x \b; contains
+# https://github.com/PredatH0r/ChanSort
+0 string PSDB\0 Panasonic channel list DataBase
+!:ext db/bin
+#!:mime application/x-db-svl-panasonic
+>126 string SQLite\ format\ 3
+#!:mime application/x-panasonic-sqlite3
+>>&-15 indirect x \b; contains
+
+# H2 Database from http://www.h2database.com/
+0 string --\ H2\ 0.5/B\ --\ \n H2 Database file
Modified: trunk/contrib/file/magic/Magdir/ssh
===================================================================
--- trunk/contrib/file/magic/Magdir/ssh 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/ssh 2018-06-15 22:27:44 UTC (rev 11008)
@@ -3,6 +3,7 @@
0 string SSH\ PRIVATE\ KEY OpenSSH RSA1 private key,
>28 string >\0 version %s
+0 string -----BEGIN\ OPENSSH\ PRIVATE\ KEY----- OpenSSH private key
0 string ssh-dss\ OpenSSH DSA public key
0 string ssh-rsa\ OpenSSH RSA public key
@@ -9,3 +10,4 @@
0 string ecdsa-sha2-nistp256 OpenSSH ECDSA public key
0 string ecdsa-sha2-nistp384 OpenSSH ECDSA public key
0 string ecdsa-sha2-nistp521 OpenSSH ECDSA public key
+0 string ssh-ed25519 OpenSSH ED25519 public key
Modified: trunk/contrib/file/magic/Magdir/ssl
===================================================================
--- trunk/contrib/file/magic/Magdir/ssl 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/ssl 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,8 +1,20 @@
+
+#------------------------------------------------------------------------------
+# $File: ssl,v 1.4 2017/01/22 21:14:25 christos Exp $
+# ssl: file(1) magic for SSL file formats
+
# Type: OpenSSL certificates/key files
# From: Nicolas Collignon <tsointsoin at gmail.com>
-0 string -----BEGIN\ CERTIFICATE----- PEM certificate
-0 string -----BEGIN\ CERTIFICATE\ REQ PEM certificate request
-0 string -----BEGIN\ RSA\ PRIVATE PEM RSA private key
-0 string -----BEGIN\ DSA\ PRIVATE PEM DSA private key
-0 string -----BEGIN\ EC\ PRIVATE PEM EC private key
+0 string -----BEGIN\040CERTIFICATE----- PEM certificate
+0 string -----BEGIN\040CERTIFICATE\040REQ PEM certificate request
+0 string -----BEGIN\040RSA\040PRIVATE PEM RSA private key
+0 string -----BEGIN\040DSA\040PRIVATE PEM DSA private key
+0 string -----BEGIN\040EC\040PRIVATE PEM EC private key
+0 string -----BEGIN\040ECDSA\040PRIVATE PEM ECDSA private key
+
+# From Luc Gommans
+# OpenSSL enc file (recognized by a magic string preceding the password's salt)
+0 string Salted__ openssl enc'd data with salted password
+# Using the -a or -base64 option, OpenSSL will base64-encode the data.
+0 string U2FsdGVkX19 openssl enc'd data with salted password, base64 encoded
Modified: trunk/contrib/file/magic/Magdir/sysex
===================================================================
--- trunk/contrib/file/magic/Magdir/sysex 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/sysex 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------
-# $File: sysex,v 1.8 2014/06/03 19:17:27 christos Exp $
+# $File: sysex,v 1.9 2017/03/17 21:35:28 christos Exp $
# sysex: file(1) magic for MIDI sysex files
#
# GRR: original 1 byte test at offset was too general as it catches also many FATs of DOS filesystems
@@ -256,7 +256,7 @@
>1 belong&0xffffff00 0x00011d00 Nemesys
>1 belong&0xffffff00 0x00011e00 DBX
>1 belong&0xffffff00 0x00011f00 Syndyne
->1 belong&0xffffff00 0x00012000 Bitheadz
+>1 belong&0xffffff00 0x00012000 Bitheadz
>1 belong&0xffffff00 0x00012100 Cakewalk
>1 belong&0xffffff00 0x00012200 Staccato
>1 belong&0xffffff00 0x00012300 National Semicon.
Modified: trunk/contrib/file/magic/Magdir/terminfo
===================================================================
--- trunk/contrib/file/magic/Magdir/terminfo 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/terminfo 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,10 +1,51 @@
#------------------------------------------------------------------------------
-# $File: terminfo,v 1.6 2009/09/19 16:28:12 christos Exp $
+# $File: terminfo,v 1.9 2017/04/28 16:28:58 christos Exp $
# terminfo: file(1) magic for terminfo
#
-# XXX - byte order for screen images?
+# URL: http://invisible-island.net/ncurses/man/term.5.html
+# URL: http://invisible-island.net/ncurses/man/scr_dump.5.html
#
-0 string \032\001 Compiled terminfo entry
-0 short 0433 Curses screen image
-0 short 0434 Curses screen image
+# Workaround for Targa image type by Joerg Jenderek
+# GRR: line below too general as it catches also
+# Targa image type 1 with 26 long identification field
+# and HELP.DSK
+0 string \032\001
+# 5th character of terminal name list, but not Targa image pixel size (15 16 24 32)
+>16 ubyte >32
+# namelist, if more than 1 separated by "|" like "st|stterm| simpleterm 0.4.1"
+>>12 regex \^[a-zA-Z0-9][a-zA-Z0-9.][^|]* Compiled terminfo entry "%-s"
+!:mime application/x-terminfo
+# no extension
+#!:ext
+#
+# While the compiled terminfo uses little-endian format irregardless of
+# platform, SystemV screen dumps do not. They came later, and that detail was
+# overlooked.
+#
+# AIX and HPUX use the SVr4 big-endian format
+# Solaris uses the SVr3 formats (sparc and x86 differ endian-ness)
+0 beshort 0433 SVr2 curses screen image, big-endian
+0 beshort 0434 SVr3 curses screen image, big-endian
+0 beshort 0435 SVr4 curses screen image, big-endian
+#
+0 leshort 0433 SVr2 curses screen image, little-endian
+0 leshort 0434 SVr3 curses screen image, little-endian
+0 leshort 0435 SVr4 curses screen image, little-endian
+#
+# Rather than SVr4, Solaris "xcurses" writes this header:
+0 regex \^MAX=[0-9]+,[0-9]+$
+>1 regex \^BEG=[0-9]+,[0-9]+$
+>2 regex \^SCROLL=[0-9]+,[0-9]+$
+>3 regex \^VMIN=[0-9]+$
+>4 regex \^VTIME=[0-9]+$
+>5 regex \^FLAGS=0x[[:xdigit:]]+$
+>6 regex \^FG=[0-9],[0-9]+$
+>7 regex \^BG=[0-9]+,[0-9]+, Solaris xcurses screen image
+#
+# ncurses5 (and before) did not use a magic number, making screen dumps "data".
+# ncurses6 (2015) uses this format, ignoring byte-order
+0 string \210\210\210\210ncurses ncurses6 screen image
+#
+# PDCurses added this in 2005
+0 string PDC\001 PDCurses screen image
Added: trunk/contrib/file/magic/Magdir/vacuum-cleaner
===================================================================
--- trunk/contrib/file/magic/Magdir/vacuum-cleaner (rev 0)
+++ trunk/contrib/file/magic/Magdir/vacuum-cleaner 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,54 @@
+
+#------------------------------------------------------------------------------
+# $File: vacuum-cleaner,v 1.1 2015/11/14 13:38:35 christos Exp $
+# vacuum cleaner magic by Thomas M. Ott (ThMO)
+#
+# navigation map for LG robot vacuum cleaner models VR62xx, VR64xx, VR63xx
+# file: MAPDATAyyyymmddhhmmss_xxxxxx_cc.blk
+# -> yyyymmdd: year, month, day of cleaning
+# -> hhmmss: hour, minute, second of cleaning
+# -> xxxxxx: 6 digits
+# -> cc: cleaning runs counter
+# size: 136044 bytes
+#
+# struct maphdr {
+# int32_t map_cnt; /* 0: single map */
+# int32_t min_ceil; /* 4: 100 mm == 10 cm == min. ceil */
+# int32_t max_ceil; /* 8: 10000 mm == 100 m == max. ceil */
+# int32_t max_climb; /* 12: 50 mm = 5 cm == max. height to climb */
+# int32_t unknown; /* 16: 50000 ??? */
+# int32_t cell_bytes; /* 20: # of bytes for cells per block */
+# int32_t block_max; /* 24: 1000 == max. # of blocks */
+# int32_t route_max; /* 28: 1000 == max. # of routes */
+# int32_t used_blocks; /* 32: 5/45/33/... == # of block entries used! */
+# int32_t cell_dim; /* 36: 10 == cell dimension */
+# int32_t clock_tick; /* 40: 100 == clock ticks */
+# #if 0
+# struct { /* 44: 1000 blocks for 10x10 cells */
+# int32_t yoffset;
+# int32_t xoffset;
+# int32_t posxy;
+# int32_t timecode;
+# } blocks[ 1000];
+# char cells[ 1000* 100]; /* 16044: 1000 10x10 cells */
+# int16_t routes[ 1000* 10]; /* 116044: 1000 10-routes */
+# #endif
+# };
+
+0 lelong =1
+>4 lelong =100
+>>8 lelong =10000
+>>>12 lelong =50
+>>>>16 lelong =50000
+>>>>>20 lelong =100
+>>>>>>24 lelong =1000
+>>>>>>>28 lelong =1000
+>>>>>>>>36 lelong =10
+>>>>>>>>>40 lelong =100
+>>>>>>>>>>32 lelong x LG robot VR6[234]xx %dm^2 navigation
+>>>>>>>>>>136040 lelong =-1 reuse map data
+>>>>>>>>>>136040 lelong =0 map data
+>>>>>>>>>>136040 lelong >0 spurious map data
+>>>>>>>>>>136040 lelong <-1 spurious map data
+
+
Modified: trunk/contrib/file/magic/Magdir/varied.script
===================================================================
--- trunk/contrib/file/magic/Magdir/varied.script 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/varied.script 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,38 +1,30 @@
#------------------------------------------------------------------------------
-# $File: varied.script,v 1.10 2014/03/01 22:32:39 christos Exp $
+# $File: varied.script,v 1.11 2015/03/27 17:59:39 christos Exp $
# varied.script: file(1) magic for various interpreter scripts
0 string/t #!\ / a
>3 string >\0 %s script text executable
-!:strength / 2
0 string/b #!\ / a
>3 string >\0 %s script executable (binary data)
-!:strength / 2
0 string/t #!\t/ a
>3 string >\0 %s script text executable
-!:strength / 2
0 string/b #!\t/ a
>3 string >\0 %s script executable (binary data)
-!:strength / 2
0 string/t #!/ a
>2 string >\0 %s script text executable
-!:strength / 2
0 string/b #!/ a
>2 string >\0 %s script executable (binary data)
-!:strength / 2
0 string/t #!\ script text executable
>3 string >\0 for %s
-!:strength / 3
0 string/b #!\ script executable
>3 string >\0 for %s (binary data)
-!:strength / 3
# using env
0 string/t #!/usr/bin/env a
Modified: trunk/contrib/file/magic/Magdir/vms
===================================================================
--- trunk/contrib/file/magic/Magdir/vms 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/vms 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: vms,v 1.7 2013/03/09 22:36:00 christos Exp $
+# $File: vms,v 1.10 2017/03/17 21:35:28 christos Exp $
# vms: file(1) magic for VMS executables (experimental)
#
# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt at uchicago.edu)
@@ -25,6 +25,6 @@
# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................
#
# GRR this test is still too general as it catches example adressen.dbt
-0 belong 0x03000000
+0 belong 0x03000000
>8 ubelong 0xec020000 VMS Alpha executable
>>75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
Modified: trunk/contrib/file/magic/Magdir/vmware
===================================================================
--- trunk/contrib/file/magic/Magdir/vmware 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/vmware 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: vmware,v 1.7 2009/09/19 16:28:13 christos Exp $
+# $File: vmware,v 1.8 2017/03/17 21:35:28 christos Exp $
# VMware specific files (deducted from version 1.1 and log file entries)
# Anthon van der Neut (anthon at mnt.org)
-0 belong 0x4d52564e VMware nvram
+0 belong 0x4d52564e VMware nvram
Modified: trunk/contrib/file/magic/Magdir/vorbis
===================================================================
--- trunk/contrib/file/magic/Magdir/vorbis 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/vorbis 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: vorbis,v 1.18 2014/04/30 21:41:02 christos Exp $
+# $File: vorbis,v 1.23 2017/03/17 21:35:28 christos Exp $
# vorbis: file(1) magic for Ogg/Vorbis files
#
# From Felix von Leitner <leitner at fefe.de>
@@ -23,7 +23,6 @@
# --- Ogg Framing ---
#0 search/1000 OggS Ogg data
0 string OggS Ogg data
-!:mime application/ogg
>4 byte !0 UNKNOWN REVISION %u
##>4 byte 0 revision 0
>4 byte 0
@@ -31,9 +30,12 @@
# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
>>28 string \x7fFLAC \b, FLAC audio
# non-Vorbis content: Theora
+!:mime audio/ogg
>>28 string \x80theora \b, Theora video
+!:mime video/ogg
# non-Vorbis content: Kate
->>28 string \x80kate\0\0\0\0 \b, Kate
+>>28 string \x80kate\0\0\0\0 \b, Kate (Karaoke and Text)
+!:mime application/ogg
>>>37 ubyte x v%u
>>>38 ubyte x \b.%u,
>>>40 byte 0 utf8 encoding,
@@ -44,12 +46,15 @@
>>>76 string \0 no category set
# non-Vorbis content: Skeleton
>>28 string fishead\0 \b, Skeleton
->>>36 short x v%u
->>>40 short x \b.%u
+!:mime video/ogg
+>>>36 leshort x v%u
+>>>40 leshort x \b.%u
# non-Vorbis content: Speex
>>28 string Speex\ \ \ \b, Speex audio
+!:mime audio/ogg
# non-Vorbis content: OGM
>>28 string \x01video\0\0\0 \b, OGM video
+!:mime video/ogg
>>>37 string/c div3 (DivX 3)
>>>37 string/c divx (DivX 4)
>>>37 string/c dx50 (DivX 5)
@@ -56,6 +61,7 @@
>>>37 string/c xvid (XviD)
# --- First vorbis packet - general header ---
>>28 string \x01vorbis \b, Vorbis audio,
+!:mime audio/ogg
>>>35 lelong !0 UNKNOWN VERSION %u,
##>>>35 lelong 0 version 0,
>>>35 lelong 0
@@ -89,7 +95,7 @@
# in a different place, so we must use an indirect offset.
>>>(84.b+85) string \x03vorbis
>>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
->>>>>(84.b+120) string >00000000
+>>>>>(84.b+120) string >00000000
# Map to beta version numbers:
>>>>>>(84.b+120) string <20000508 (<beta1, prepublic)
>>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2)
@@ -111,8 +117,30 @@
>>>>>>(84.b+120) string >20011231 (pre-1.0 CVS)
# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
>>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I
->>>>>(84.b+117) string >00000000
+>>>>>(84.b+117) string >00000000
>>>>>>(84.b+117) string <20020717 (pre-1.0 CVS)
>>>>>>(84.b+117) string 20020717 (1.0)
>>>>>>(84.b+117) string 20030909 (1.0.1)
>>>>>>(84.b+117) string 20040629 (1.1.0 RC1)
+
+# non-Vorbis content: Opus https://tools.ietf.org/html/draft-ietf-codec-oggopus-06#section-5
+>>28 string OpusHead \b, Opus audio,
+!:mime audio/ogg
+>>>36 ubyte >0x0F UNKNOWN VERSION %u,
+>>>36 ubyte &0x0F version 0.%d
+>>>>46 ubyte >1
+>>>>>46 ubyte !255 unknown channel mapping family %u,
+>>>>>37 ubyte x %u channels
+>>>>46 ubyte 0
+>>>>>37 ubyte 1 mono
+>>>>>37 ubyte 2 stereo
+>>>>46 ubyte 1
+>>>>>37 ubyte 1 mono
+>>>>>37 ubyte 2 stereo
+>>>>>37 ubyte 3 linear surround
+>>>>>37 ubyte 4 quadraphonic
+>>>>>37 ubyte 5 5.0 surround
+>>>>>37 ubyte 6 5.1 surround
+>>>>>37 ubyte 7 6.1 surround
+>>>>>37 ubyte 8 7.1 surround
+>>>>40 lelong !0 \b, %u Hz
Added: trunk/contrib/file/magic/Magdir/webassembly
===================================================================
--- trunk/contrib/file/magic/Magdir/webassembly (rev 0)
+++ trunk/contrib/file/magic/Magdir/webassembly 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,15 @@
+#------------------------------------------------------------------------------
+# $File: webassembly,v 1.2 2017/05/02 14:05:29 christos Exp $
+# webassembly: file(1) magic for WebAssembly modules
+#
+# WebAssembly is a virtual architecture developed by a W3C Community
+# Group at http://webassembly.org/. The file extension is .wasm, and
+# the MIME type is application/wasm.
+#
+# http://webassembly.org/docs/binary-encoding/ is the main
+# document describing the binary format.
+# From: Pip Cet <pipcet at gmail.com> and Joel Martin
+
+0 string \0asm WebAssembly (wasm) binary module
+>4 lelong =1 version %#x (MVP)
+>4 lelong >1 version %#x
Modified: trunk/contrib/file/magic/Magdir/windows
===================================================================
--- trunk/contrib/file/magic/Magdir/windows 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/windows 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: windows,v 1.8 2014/04/30 21:41:02 christos Exp $
+# $File: windows,v 1.16 2017/03/17 22:20:22 christos Exp $
# windows: file(1) magic for Microsoft Windows
#
# This file is mainly reserved for files where programs
@@ -29,7 +29,7 @@
# Created by: Andreas Schuster (http://computer.forensikblog.de/)
# Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html
# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)
-0 string PAGE
+0 string PAGE
>4 string DUMP MS Windows 32bit crash dump
>>0x05c byte 0 \b, no PAE
>>0x05c byte 1 \b, PAE
@@ -64,18 +64,156 @@
# Summary: Old format help files
-# Extension: .hlp
+# URL: https://en.wikipedia.org/wiki/WinHelp
+# Reference: http://www.oocities.org/mwinterhoff/helpfile.htm
+# Update: Joerg Jenderek
# Created by: Dirk Jagdmann <doj at cubic.org>
-0 lelong 0x00035f3f MS Windows 3.x help file
+#
+# check and then display version and date inside MS Windows HeLP file fragment
+0 name help-ver-date
+# look for Magic of SYSTEMHEADER
+>0 leshort 0x036C
+# version Major 1 for right file fragment
+>>4 leshort 1 Windows
+# print non empty string above to avoid error message
+# Warning: Current entry does not yet have a description for adding a MIME type
+!:mime application/winhelp
+!:ext hlp
+# version Minor of help file format is hint for windows version
+>>>2 leshort 0x0F 3.x
+>>>2 leshort 0x15 3.0
+>>>2 leshort 0x21 3.1
+>>>2 leshort 0x27 x.y
+>>>2 leshort 0x33 95
+>>>2 default x y.z
+>>>>2 leshort x 0x%x
+# to complete message string like "MS Windows 3.x help file"
+>>>2 leshort x help
+# GenDate often older than file creation date
+>>>6 ldate x \b, %s
+#
+# Magic for HeLP files
+0 lelong 0x00035f3f
+# ./windows (version 5.25) labeled the entry as "MS Windows 3.x help file"
+# file header magic 0x293B at DirectoryStart+9
+>(4.l+9) uleshort 0x293B MS
+# look for @VERSION bmf.. like IBMAVW.ANN
+>>0xD4 string =\x62\x6D\x66\x01\x00 Windows help annotation
+!:mime application/x-winhelp
+!:ext ann
+>>0xD4 string !\x62\x6D\x66\x01\x00
+# "GID Help index" by TrID
+>>>(4.l+0x65) string =|Pete Windows help Global Index
+!:mime application/x-winhelp
+!:ext gid
+# HeLP Bookmark or
+# "Windows HELP File" by TrID
+>>>(4.l+0x65) string !|Pete
+# maybe there exist a cleaner way to detect HeLP fragments
+# brute search for Magic 0x036C with matching Major maximal 7 iterations
+# discapp.hlp
+>>>>16 search/0x49AF/s \x6c\x03
+>>>>>&0 use help-ver-date
+>>>>>&4 leshort !1
+# putty.hlp
+>>>>>>&0 search/0x69AF/s \x6c\x03
+>>>>>>>&0 use help-ver-date
+>>>>>>>&4 leshort !1
+>>>>>>>>&0 search/0x49AF/s \x6c\x03
+>>>>>>>>>&0 use help-ver-date
+>>>>>>>>>&4 leshort !1
+>>>>>>>>>>&0 search/0x49AF/s \x6c\x03
+>>>>>>>>>>>&0 use help-ver-date
+>>>>>>>>>>>&4 leshort !1
+>>>>>>>>>>>>&0 search/0x49AF/s \x6c\x03
+>>>>>>>>>>>>>&0 use help-ver-date
+>>>>>>>>>>>>>&4 leshort !1
+>>>>>>>>>>>>>>&0 search/0x49AF/s \x6c\x03
+>>>>>>>>>>>>>>>&0 use help-ver-date
+>>>>>>>>>>>>>>>&4 leshort !1
+>>>>>>>>>>>>>>>>&0 search/0x49AF/s \x6c\x03
+# GCC.HLP is detected after 7 iterations
+>>>>>>>>>>>>>>>>>&0 use help-ver-date
+# this only happens if bigger hlp file is detected after used search iterations
+>>>>>>>>>>>>>>>>>&4 leshort !1 Windows y.z help
+!:mime application/winhelp
+!:ext hlp
+# repeat search again or following default line does not work
+>>>>16 search/0x49AF/s \x6c\x03
+# remaining files should be HeLP Bookmark WinHlp32.BMK (XP 32-bit) or WinHlp32 (Windows 8.1 64-bit)
+>>>>16 default x Windows help Bookmark
+!:mime application/x-winhelp
+!:ext /bmk
+## FirstFreeBlock normally FFFFFFFFh 10h for *ANN
+##>>8 lelong x \b, FirstFreeBlock 0x%8.8x
+# EntireFileSize
+>>12 lelong x \b, %d bytes
+## ReservedSpace normally 042Fh AFh for *.ANN
+#>>(4.l) lelong x \b, ReservedSpace 0x%8.8x
+## UsedSpace normally 0426h A6h for *.ANN
+#>>(4.l+4) lelong x \b, UsedSpace 0x%8.8x
+## FileFlags normally 04...
+#>>(4.l+5) lelong x \b, FileFlags 0x%8.8x
+## file header magic 0x293B
+#>>(4.l+9) uleshort x \b, file header magic 0x%4.4x
+## file header Flags 0x0402
+#>>(4.l+11) uleshort x \b, file header Flags 0x%4.4x
+## file header PageSize 0400h 80h for *.ANN
+#>>(4.l+13) uleshort x \b, PageSize 0x%4.4x
+## Structure[16] z4
+#>>(4.l+15) string >\0 \b, Structure_"%-.16s"
+## MustBeZero 0
+#>>(4.l+31) uleshort x \b, MustBeZero 0x%4.4x
+## PageSplits
+#>>(4.l+33) uleshort x \b, PageSplits 0x%4.4x
+## RootPage
+#>>(4.l+35) uleshort x \b, RootPage 0x%4.4x
+## MustBeNegOne 0xffff
+#>>(4.l+37) uleshort x \b, MustBeNegOne 0x%4.4x
+## TotalPages 1
+#>>(4.l+39) uleshort x \b, TotalPages 0x%4.4x
+## NLevels 0x0001
+#>>(4.l+41) uleshort x \b, NLevels 0x%4.4x
+## TotalBtreeEntries
+#>>(4.l+43) ulelong x \b, TotalBtreeEntries 0x%8.8x
+## pages of the B+ tree
+#>>(4.l+47) ubequad x \b, PageStart 0x%16.16llx
+# start with colon or semicolon for comment line like Back2Life.cnt
+0 regex \^(:|;)
+# look for first keyword Base
+>0 search/45 :Base
+>>&0 use cnt-name
+# only solution to search again from beginning , because relative offsets changes when use is called
+>0 search/45 :Base
+>0 default x
+# look for other keyword Title like in putty.cnt
+>>0 search/45 :Title
+>>>&0 use cnt-name
+#
+# display mime type and name of Windows help Content source
+0 name cnt-name
+# skip space at beginning
+>0 string \040
+# name without extension and greater character or name with hlp extension
+>>1 regex/c \^([^\xd>]*|.*\.hlp) MS Windows help file Content, based "%s"
+!:mime text/plain
+!:apple ????TEXT
+!:ext cnt
+#
+# Windows creates an full text search from hlp file, if the user clicks the "Find" tab and enables keyword indexing
+0 string tfMR MS Windows help Full Text Search index
+!:mime application/x-winhelp-fts
+!:ext fts
+>16 string >\0 for "%s"
# Summary: Hyper terminal
# Extension: .ht
# Created by: unknown
-0 string HyperTerminal\
+0 string HyperTerminal\040
>15 string 1.0\ --\ HyperTerminal\ data\ file MS Windows HyperTerminal profile
-# http://ithreats.files.wordpress.com/2009/05/\
+# http://ithreats.files.wordpress.com/2009/05/\040
# lnk_the_windows_shortcut_file_format.pdf
# Summary: Windows shortcut
# Extension: .lnk
@@ -89,7 +227,7 @@
>20 lelong&16 16 \b, Has Working directory
>20 lelong&32 32 \b, Has command line arguments
>20 lelong&64 64 \b, Icon
->>56 lelong \b number=%d
+>>56 lelong x \b number=%d
>24 lelong&1 1 \b, Read-Only
>24 lelong&2 2 \b, Hidden
>24 lelong&4 4 \b, System
@@ -155,17 +293,18 @@
# Extension: .reg
# Submitted by: Abel Cheung <abelcheung at gmail.com>
0 string REGEDIT4\r\n\r\n Windows Registry text (Win95 or above)
-0 string Windows\ Registry\ Editor\
+0 string Windows\ Registry\ Editor\040
>&0 string Version\ 5.00\r\n\r\n Windows Registry text (Win2K or above)
# Windows *.INF *.INI files updated by Joerg Jenderek at Apr 2013
-# emtpy ,comment , section , unicode line
-0 regex/s \\`(\r\n|;|[[]|\xFF\xFE)
+# empty ,comment , section
+# PR/383: remove unicode BOM because it is not portable across regex impls
+0 regex/s \\`(\\r\\n|;|[[])
# left bracket in section line
->&0 search/8192 [
+>&0 search/8192 [
# http://en.wikipedia.org/wiki/Autorun.inf
# http://msdn.microsoft.com/en-us/library/windows/desktop/cc144200.aspx
->>&0 regex/c \^(autorun)]\r\n
+>>&0 regex/c \^(autorun)]\r\n
>>>&0 ubyte =0x5b INItialization configuration
!:mime application/x-wine-extension-ini
# From: Pal Tamas <folti at balabit.hu>
@@ -204,31 +343,31 @@
# http://en.wikipedia.org/wiki/NTLDR Windows Boot Loader information
>>&0 regex/c \^(boot\x20loader)] Windows boot.ini
!:mime application/x-wine-extension-ini
->>>&0 ubyte x
+>>>&0 ubyte x
# http://en.wikipedia.org/wiki/CONFIG.SYS
>>&0 regex/c \^(menu)]\r\n MS-DOS CONFIG.SYS
# http://support.microsoft.com/kb/118579/
>>&0 regex/c \^(Paths)]\r\n MS-DOS MSDOS.SYS
# VERS string unicoded case-independent
->>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0056004500520053
+>>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0056004500520053
# ION] string unicoded case-independent
->>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x0049004f004e005d Windows setup INFormation
+>>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x0049004f004e005d Windows setup INFormation
!:mime application/x-setupscript
# STRI string unicoded case-independent
->>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0053005400520049
+>>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0053005400520049
# NGS] string unicoded case-independent
->>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x004e00470053005D Windows setup INFormation
+>>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x004e00470053005D Windows setup INFormation
!:mime application/x-setupscript
# unknown keyword after opening bracket
->>&0 default x
->>>&0 search/8192 [
+>>&0 default x
+>>>&0 search/8192 [
# version Strings FileIdentification
->>>>&0 string/c version Windows setup INFormation
+>>>>&0 string/c version Windows setup INFormation
!:mime application/x-setupscript
# VERS string unicoded case-independent
->>>>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0056004500520053
+>>>>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0056004500520053
# ION] string unicoded case-independent
->>>>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x0049004f004e005d Windows setup INFormation
+>>>>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x0049004f004e005d Windows setup INFormation
!:mime application/x-setupscript
# http://en.wikipedia.org/wiki/Initialization_file Windows Initialization File or other
#>>>>&0 default x Generic INItialization configuration
@@ -237,20 +376,21 @@
# Windows Precompiled INF files *.PNF added by Joerg Jenderek at Mar 2013 of _PNF_HEADER inf.h
# http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/setup/setupapi/inf.h__.htm
# GRR: line below too general as it catches also PDP-11 UNIX/RT ldp
-0 leshort&0xFeFe 0x0000
+0 leshort&0xFeFe 0x0000
+!:strength -5
# test for unused null bits in PNF_FLAGs
->4 ulelong&0xFCffFe00 0x00000000
+>4 ulelong&0xFCffFe00 0x00000000
# only found 58h for Offset of WinDirPath immediately after _PNF_HEADER structure
->>68 ulelong >0x57
+>>68 ulelong >0x57
# test for zero high byte of InfValueBlockSize, followed by WinDirPath like
# C:\WINDOWS (ASCII 0x433a5c.. , unicode 0x43003a005c..) or X:\MININT
>>>(68.l-1) ubelong&0xffE0C519 =0x00400018 Windows Precompiled iNF
!:mime application/x-pnf
# currently only found Major Version=1 and Minor Version=1
-#>>>>0 uleshort =0x0101
+#>>>>0 uleshort =0x0101
#>>>>>1 ubyte x \b, version %u
#>>>>>0 ubyte x \b.%u
->>>>0 uleshort !0x0101
+>>>>0 uleshort !0x0101
>>>>>1 ubyte x \b, version %u
>>>>>0 ubyte x \b.%u
# 1 ,2 (windows 98 SE)
@@ -276,10 +416,10 @@
#>>>>16 ulelong x \b, InfVersionDataSize 0x%x
# only found positive values lower 0x00ffFFff for InfVersionDataOffset
>>>>20 ulelong x \b, at 0x%x
->>>>4 ulelong&0x00000001 =0x00000001
-# case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature
+>>>>4 ulelong&0x00000001 =0x00000001
+# case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature
>>>>>(20.l) lestring16 x "%s"
->>>>4 ulelong&0x00000001 !0x00000001
+>>>>4 ulelong&0x00000001 !0x00000001
>>>>>(20.l) string x "%s"
# FILETIME is number of 100-nanosecond intervals since 1 January 1601
#>>>>24 ulequad x \b, InfVersionLastWriteTime %16.16llx
@@ -295,23 +435,23 @@
#>>>>64 ulelong x \b, InfValueBlockSize 0x%x
# WinDirPathOffset
#>>>>68 ulelong x \b, at 0x%x
->>>>68 ulelong >0x57
->>>>>4 ulelong&0x00000001 =0x00000001
->>>>>>(68.l) ubequad =0x43003a005c005700
+>>>>68 ulelong >0x57
+>>>>>4 ulelong&0x00000001 =0x00000001
+>>>>>>(68.l) ubequad =0x43003a005c005700
# normally unicoded C:\Windows
#>>>>>>>(68.l) lestring16 x \b, WinDirPath "%s"
->>>>>>(68.l) ubequad !0x43003a005c005700
+>>>>>>(68.l) ubequad !0x43003a005c005700
>>>>>>>(68.l) lestring16 x \b, WinDirPath "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
+>>>>>4 ulelong&0x00000001 !0x00000001
# normally ASCII C:\WINDOWS
#>>>>>>(68.l) string =C:\\WINDOWS \b, WinDirPath "%s"
>>>>>>(68.l) string !C:\\WINDOWS \b, WinDirPath "%s"
-# found OsLoaderPathOffset values often 0 , once 70h corelist.PNF, once 68h ASCII machine.PNF
+# found OsLoaderPathOffset values often 0 , once 70h corelist.PNF, once 68h ASCII machine.PNF
#>>>>72 ulelong >0 \b, at 0x%x
>>>>72 ulelong >0 \b,
->>>>>4 ulelong&0x00000001 =0x00000001
+>>>>>4 ulelong&0x00000001 =0x00000001
>>>>>>(72.l) lestring16 x OsLoaderPath "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
+>>>>>4 ulelong&0x00000001 !0x00000001
# seldom C:\ instead empty
>>>>>>(72.l) string x OsLoaderPath "%s"
# 1fdh
@@ -322,15 +462,114 @@
# InfSourcePathOffset often 0
#>>>>80 ulelong >0 \b, at 0x%x
>>>>80 ulelong >0 \b,
->>>>>4 ulelong&0x00000001 =0x00000001
+>>>>>4 ulelong&0x00000001 =0x00000001
>>>>>>(80.l) lestring16 x SourcePath "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
+>>>>>4 ulelong&0x00000001 !0x00000001
>>>>>>(80.l) string >\0 SourcePath "%s"
# OriginalInfNameOffset often 0
#>>>>84 ulelong >0 \b, at 0x%x
>>>>84 ulelong >0 \b,
->>>>>4 ulelong&0x00000001 =0x00000001
+>>>>>4 ulelong&0x00000001 =0x00000001
>>>>>>(84.l) lestring16 x InfName "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
+>>>>>4 ulelong&0x00000001 !0x00000001
>>>>>>(84.l) string >\0 InfName "%s"
+# Summary: backup file created with utility like NTBACKUP.EXE shipped with Windows NT/2K/XP/2003
+# Extension: .bkf
+# Created by: Joerg Jenderek
+# URL: http://en.wikipedia.org/wiki/NTBackup
+# Reference: http://laytongraphics.com/mtf/MTF_100a.PDF
+# Descriptor BloCK name of Microsoft Tape Format
+0 string TAPE
+# Format Logical Address is zero
+>20 ulequad 0
+# Reserved for MBC is zero
+>>28 uleshort 0
+# Control Block ID is zero
+>>>36 ulelong 0
+# BIT4-BIT15, BIT18-BIT31 of block attributes are unused
+>>>>4 ulelong&0xFFfcFFe0 0 Windows NTbackup archive
+#!:mime application/x-ntbackup
+!:ext bkf
+# OS ID
+>>>>>10 ubyte 1 \b NetWare
+>>>>>10 ubyte 13 \b NetWare SMS
+>>>>>10 ubyte 14 \b NT
+>>>>>10 ubyte 24 \b 3
+>>>>>10 ubyte 25 \b OS/2
+>>>>>10 ubyte 26 \b 95
+>>>>>10 ubyte 27 \b Macintosh
+>>>>>10 ubyte 28 \b UNIX
+# OS Version (2)
+#>>>>>11 ubyte x OS V=%x
+# MTF_CONTINUATION Media Sequence Number > 1
+#>>>>>4 ulelong&0x00000001 !0 \b, continued
+# MTF_COMPRESSION
+>>>>>4 ulelong&0x00000004 !0 \b, compressed
+# MTF_EOS_AT_EOM End Of Medium was hit during end of set processing
+>>>>>4 ulelong&0x00000008 !0 \b, End Of Medium hit
+>>>>>4 ulelong&0x00020000 0
+# MTF_SET_MAP_EXISTS A Media Based Catalog Set Map may exist on tape
+>>>>>>4 ulelong&0x00010000 !0 \b, with catalog
+# MTF_FDD_ALLOWED However File/Directory Detail can only exist if a Set Map is also present
+>>>>>4 ulelong&0x00020000 !0 \b, with file catalog
+# Offset To First Event 238h,240h,28Ch
+#>>>>>8 uleshort x \b, event offset %4.4x
+# Displayable Size (20e0230h 20e024ch 20e0224h)
+#>>>>>8 ulequad x dis. size %16.16llx
+# Media Family ID (455288C4h 4570BD1Ah 45708F2Fh 4570BBF5h)
+#>>>>>52 ulelong x family ID %8.8x
+# TAPE Attributes (3)
+#>>>>>56 ulelong x TAPE %8.8x
+# Media Sequence Number
+>>>>>60 uleshort >1 \b, sequence %u
+# Password Encryption Algorithm (3)
+>>>>>62 uleshort >0 \b, 0x%x encrypted
+# Soft Filemark Block Size * 512 (2)
+#>>>>>64 uleshort =2 \b, soft size %u*512
+>>>>>64 uleshort !2 \b, soft size %u*512
+# Media Based Catalog Type (1,2)
+#>>>>>66 uleshort x \b, catalog type %4.4x
+# size of Media Name (66,68,6Eh)
+>>>>>68 uleshort >0
+# offset of Media Name (5Eh)
+>>>>>>70 uleshort >0
+# 0~, 1~ANSI, 2~UNICODE
+>>>>>>>48 ubyte 1
+# size terminated ansi coded string normally followed by "MTF Media Label"
+>>>>>>>>(70.s) string >\0 \b, name: %s
+>>>>>>>48 ubyte 2
+# Not null, but size terminated unicoded string
+>>>>>>>>(70.s) lestring16 x \b, name: %s
+# size of Media Label (104h)
+>>>>>72 uleshort >0
+# offset of Media Label (C4h,C6h,CCh)
+>>>>>74 uleshort >0
+>>>>>>48 ubyte 1
+#Tag|Version|Vendor|Vendor ID|Creation Time Stamp|Cartridge Label|Side|Media ID|Media Domain ID|Vendor Specific fields
+>>>>>>>(74.s) string >\0 \b, label: %s
+>>>>>>48 ubyte 2
+>>>>>>>(74.s) lestring16 x \b, label: %s
+# size of password name (0,1Ch)
+#>>>>>76 uleshort >0 \b, password size %4.4x
+# Software Vendor ID (CBEh)
+>>>>>86 uleshort x \b, software (0x%x)
+# size of Software Name (6Eh)
+>>>>>80 uleshort >0
+# offset of Software Name (1C8h,1CAh,1D0h)
+>>>>>>82 uleshort >0
+# 1~ANSI, 2~UNICODE
+>>>>>>>48 ubyte 1
+>>>>>>>>(82.s) string >\0 \b: %s
+>>>>>>>48 ubyte 2
+# size terminated unicoded coded string normally followed by "SPAD"
+>>>>>>>>(82.s) lestring16 x \b: %s
+# Format Logical Block Size (512,1024)
+#>>>>>84 uleshort =1024 \b, block size %u
+>>>>>84 uleshort !1024 \b, block size %u
+# Media Date of MTF_DATE_TIME type with 5 bytes
+#>>>>>>88 ubequad x DATE %16.16llx
+# MTF Major Version (1)
+#>>>>>>93 ubyte x \b, MFT version %x
+#
+
Modified: trunk/contrib/file/magic/Magdir/wordprocessors
===================================================================
--- trunk/contrib/file/magic/Magdir/wordprocessors 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/wordprocessors 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: wordprocessors,v 1.18 2013/06/03 19:07:29 christos Exp $
+# $File: wordprocessors,v 1.19 2015/10/16 15:11:07 christos Exp $
# wordprocessors: file(1) magic fo word processors.
#
####### PWP file format used on Smith Corona Personal Word Processors:
@@ -12,97 +12,187 @@
>25 byte 0x54 \b, legal
>26 byte 0x46 \b, A4
-#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable file
->15 byte 0 Optimized for Intel
->15 byte 1 Optimized for Non-Intel
-1 string WPC (Corel/WP)
->8 short 257 WordPerfect macro
->8 short 258 WordPerfect help file
->8 short 259 WordPerfect keyboard file
->8 short 266 WordPerfect document
->8 short 267 WordPerfect dictionary
->8 short 268 WordPerfect thesaurus
->8 short 269 WordPerfect block
->8 short 270 WordPerfect rectangular block
->8 short 271 WordPerfect column block
->8 short 272 WordPerfect printer data
->8 short 275 WordPerfect printer data
->8 short 276 WordPerfect driver resource data
->8 short 279 WordPerfect hyphenation code
->8 short 280 WordPerfect hyphenation data
->8 short 281 WordPerfect macro resource data
->8 short 283 WordPerfect hyphenation lex
->8 short 285 WordPerfect wordlist
->8 short 286 WordPerfect equation resource data
->8 short 289 WordPerfect spell rules
->8 short 290 WordPerfect dictionary rules
->8 short 295 WordPerfect spell rules (Microlytics)
->8 short 299 WordPerfect settings file
->8 short 301 WordPerfect 4.2 document
->8 short 325 WordPerfect dialog file
->8 short 332 WordPerfect button bar
->8 short 513 Shell macro
->8 short 522 Shell definition
->8 short 769 Notebook macro
->8 short 770 Notebook help file
->8 short 771 Notebook keyboard file
->8 short 778 Notebook definition
->8 short 1026 Calculator help file
->8 short 1538 Calendar help file
->8 short 1546 Calendar data file
->8 short 1793 Editor macro
->8 short 1794 Editor help file
->8 short 1795 Editor keyboard file
->8 short 1817 Editor macro resource file
->8 short 2049 Macro editor macro
->8 short 2050 Macro editor help file
->8 short 2051 Macro editor keyboard file
->8 short 2305 PlanPerfect macro
->8 short 2306 PlanPerfect help file
->8 short 2307 PlanPerfect keyboard file
->8 short 2314 PlanPerfect worksheet
->8 short 2319 PlanPerfect printer definition
->8 short 2322 PlanPerfect graphic definition
->8 short 2323 PlanPerfect data
->8 short 2324 PlanPerfect temporary printer
->8 short 2329 PlanPerfect macro resource data
->8 byte 11 Mail
->8 short 2818 help file
->8 short 2821 distribution list
->8 short 2826 out box
->8 short 2827 in box
->8 short 2836 users archived mailbox
->8 short 2837 archived message database
->8 short 2838 archived attachments
->8 short 3083 Printer temporary file
->8 short 3330 Scheduler help file
->8 short 3338 Scheduler in file
->8 short 3339 Scheduler out file
->8 short 3594 GroupWise settings file
->8 short 3601 GroupWise directory services
->8 short 3627 GroupWise settings file
->8 short 4362 Terminal resource data
->8 short 4363 Terminal resource data
->8 short 4395 Terminal resource data
->8 short 4619 GUI loadable text
->8 short 4620 graphics resource data
->8 short 4621 printer settings file
->8 short 4622 port definition file
->8 short 4623 print queue parameters
->8 short 4624 compressed file
->8 short 5130 Network service msg file
->8 short 5131 Network service msg file
->8 short 5132 Async gateway login msg
->8 short 5134 GroupWise message file
->8 short 7956 GroupWise admin domain database
->8 short 7957 GroupWise admin host database
->8 short 7959 GroupWise admin remote host database
->8 short 7960 GroupWise admin ADS deferment data file
->8 short 8458 IntelliTAG (SGML) compiled DTD
->8 long 18219264 WordPerfect graphic image (1.0)
->8 long 18219520 WordPerfect graphic image (2.0)
-#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
+# Corel/WordPerfect
+0 string \xffWPC
+# WordPerfect
+>8 byte 1
+>>9 byte 1 WordPerfect macro
+>>9 byte 2 WordPerfect help file
+>>9 byte 3 WordPerfect keyboard file
+>>9 byte 10 WordPerfect document
+>>9 byte 11 WordPerfect dictionary
+>>9 byte 12 WordPerfect thesaurus
+>>9 byte 13 WordPerfect block
+>>9 byte 14 WordPerfect rectangular block
+>>9 byte 15 WordPerfect column block
+>>9 byte 16 WordPerfect printer data
+>>9 byte 19 WordPerfect printer data
+>>9 byte 20 WordPerfect driver resource data
+>>9 byte 22 WordPerfect graphic image
+>>9 byte 23 WordPerfect hyphenation code
+>>9 byte 24 WordPerfect hyphenation data
+>>9 byte 25 WordPerfect macro resource data
+>>9 byte 27 WordPerfect hyphenation lex
+>>9 byte 29 WordPerfect wordlist
+>>9 byte 30 WordPerfect equation resource data
+>>9 byte 33 WordPerfect spell rules
+>>9 byte 34 WordPerfect dictionary rules
+>>9 byte 39 WordPerfect spell rules (Microlytics)
+>>9 byte 43 WordPerfect settings file
+>>9 byte 44 WordPerfect 3.5 document
+>>9 byte 45 WordPerfect 4.2 document
+>>9 byte 69 WordPerfect dialog file
+>>9 byte 76 WordPerfect button bar
+>>9 default x
+>>>9 byte x Corel WordPerfect: Unknown filetype %d
+# Corel Shell
+>8 byte 2
+>>9 byte 1 Corel shell macro
+>>9 byte 10 Corel shell definition
+>>9 default x
+>>>9 byte x Corel Shell: Unknown filetype %d
+# Corel Notebook
+>8 byte 3
+>>9 byte 1 Corel Notebook macro
+>>9 byte 2 Corel Notebook help file
+>>9 byte 3 Corel Notebook keyboard file
+>>9 byte 10 Corel Notebook definition
+>>9 default x
+>>>9 byte x Corel Notebook: Unknown filetype %d
+# Corel Calculator
+>8 byte 4
+>>9 byte 2 Corel Calculator help file
+>>9 default x
+>>>9 byte x Corel Calculator: Unknown filetype %d
+# Corel File Manager
+>8 byte 5
+>>9 default x
+>>>9 byte x Corel File Manager: Unknown filetype %d
+# Corel Calendar
+>8 byte 6
+>>9 byte 2 Corel Calendar help file
+>>9 byte 10 Corel Calendar data file
+>>9 default x
+>>>9 byte x Corel Calendar: Unknown filetype %d
+# Corel Program Editor/Ed Editor
+>8 byte 7
+>>9 byte 1 Corel Editor macro
+>>9 byte 2 Corel Editor help file
+>>9 byte 3 Corel Editor keyboard file
+>>9 byte 25 Corel Editor macro resource file
+>>9 default x
+>>>9 byte x Corel Program Editor/Ed Editor: Unknown filetype %d
+# Corel Macro Editor
+>8 byte 8
+>>9 byte 1 Corel Macro editor macro
+>>9 byte 2 Corel Macro editor help file
+>>9 byte 3 Corel Macro editor keyboard file
+>>9 default x
+>>>9 byte x Corel Macro Editor: Unknown filetype %d
+# Corel Plan Perfect
+>8 byte 9
+>>9 default x
+>>>9 byte x Corel Plan Perfect: Unknown filetype %d
+# Corel DataPerfect
+>8 byte 10
+# CHECK: Don't these belong into product 9?
+>>9 byte 1 Corel PlanPerfect macro
+>>9 byte 2 Corel PlanPerfect help file
+>>9 byte 3 Corel PlanPerfect keyboard file
+>>9 byte 10 Corel PlanPerfect worksheet
+>>9 byte 15 Corel PlanPerfect printer definition
+>>9 byte 18 Corel PlanPerfect graphic definition
+>>9 byte 19 Corel PlanPerfect data
+>>9 byte 20 Corel PlanPerfect temporary printer
+>>9 byte 25 Corel PlanPerfect macro resource data
+>>9 default x
+>>>9 byte x Corel DataPerfect: Unknown filetype %d
+# Corel Mail
+>8 byte 11
+>>9 byte 2 Corel Mail help file
+>>9 byte 5 Corel Mail distribution list
+>>9 byte 10 Corel Mail out box
+>>9 byte 11 Corel Mail in box
+>>9 byte 20 Corel Mail users archived mailbox
+>>9 byte 21 Corel Mail archived message database
+>>9 byte 22 Corel Mail archived attachments
+>>9 default x
+>>>9 byte x Corel Mail: Unknown filetype %d
+# Corel Printer
+>8 byte 12
+>>9 byte 11 Corel Printer temporary file
+>>9 default x
+>>>9 byte x Corel Printer: Unknown filetype %d
+# Corel Scheduler
+>8 byte 13
+>>9 byte 2 Corel Scheduler help file
+>>9 byte 10 Corel Scheduler in file
+>>9 byte 11 Corel Scheduler out file
+>>9 default x
+>>>9 byte x Corel Scheduler: Unknown filetype %d
+# Corel WordPerfect Office
+>8 byte 14
+>>9 byte 10 Corel GroupWise settings file
+>>9 byte 17 Corel GroupWise directory services
+>>9 byte 43 Corel GroupWise settings file
+>>9 default x
+>>>9 byte x Corel WordPerfect Office: Unknown filetype %d
+# Corel DrawPerfect
+>8 byte 15
+>>9 default x
+>>>9 byte x Corel DrawPerfect: Unknown filetype %d
+# Corel LetterPerfect
+>8 byte 16
+>>9 default x
+>>>9 byte x Corel LetterPerfect: Unknown filetype %d
+# Corel Terminal
+>8 byte 17
+>>9 byte 10 Corel Terminal resource data
+>>9 byte 11 Corel Terminal resource data
+>>9 byte 43 Corel Terminal resource data
+>>9 default x
+>>>9 byte x Corel Terminal: Unknown filetype %d
+# Corel loadable file
+>8 byte 18
+>>9 byte 10 Corel loadable file
+>>9 byte 11 Corel GUI loadable text
+>>9 byte 12 Corel graphics resource data
+>>9 byte 13 Corel printer settings file
+>>9 byte 14 Corel port definition file
+>>9 byte 15 Corel print queue parameters
+>>9 byte 16 Corel compressed file
+>>9 default x
+>>>9 byte x Corel loadable file: Unknown filetype %d
+>>15 byte 0 \b, optimized for Intel
+>>15 byte 1 \b, optimized for Non-Intel
+# Network service
+>8 byte 20
+>>9 byte 10 Corel Network service msg file
+>>9 byte 11 Corel Network service msg file
+>>9 byte 12 Corel Async gateway login msg
+>>9 byte 14 Corel GroupWise message file
+>>9 default x
+>>>9 byte x Corel Network service: Unknown filetype %d
+# GroupWise
+>8 byte 31
+>>9 byte 20 GroupWise admin domain database
+>>9 byte 21 GroupWise admin host database
+>>9 byte 23 GroupWise admin remote host database
+>>9 byte 24 GroupWise admin ADS deferment data file
+>>9 default x
+>>>9 byte x GroupWise: Unknown filetype %d
+# IntelliTAG
+>8 byte 33
+>>9 byte 10 IntelliTAG (SGML) compiled DTD
+>>9 default x
+>>>9 byte x IntelliTAG: Unknown filetype %d
+# everything else
+>8 default x
+>>8 byte x Unknown Corel/Wordperfect product %d,
+>>>9 byte x file type %d
+>10 byte 0 \b, v5.
+>10 byte !0 \b, v%d.
+>11 byte x \b%d
# Hangul (Korean) Word Processor File
0 string HWP\ Document\ File Hangul (Korean) Word Processor File 3.0
Added: trunk/contrib/file/magic/Magdir/x68000
===================================================================
--- trunk/contrib/file/magic/Magdir/x68000 (rev 0)
+++ trunk/contrib/file/magic/Magdir/x68000 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,25 @@
+#------------------------------------------------------------------------------
+# x68000: file(1) magic for the Sharp Home Computer
+# v1.0
+# Fabio R. Schmidlin <sd-snatcher at users.sourceforge.net>
+
+# Yanagisawa PIC picture
+0 string PIC
+>3 search/0x200 \x1A
+>>&0 search/0x200 \x0
+>>>&0 ubyte 0 Yanagisawa PIC image file,
+>>>>&0 ubyte&15 0 model: X68000,
+>>>>&0 ubyte&15 1 model: PC-88VA,
+>>>>&0 ubyte&15 2 model: FM-TOWNS,
+>>>>&0 ubyte&15 3 model: MAC,
+>>>>&0 ubyte&15 15 model: Generic,
+>>>>&3 ubeshort x %dx
+>>>>&5 ubeshort x \b%d,
+>>>>&1 ubeshort 4 colors: 16
+>>>>&1 ubeshort 8 colors: 256
+>>>>&1 ubeshort 12 colors: 4096
+>>>>&1 ubeshort 15 colors: 32768
+>>>>&1 ubeshort 16 colors: 65536
+>>>>&1 ubeshort >16 colors: %d-bit
+
+
Modified: trunk/contrib/file/magic/Magdir/xenix
===================================================================
--- trunk/contrib/file/magic/Magdir/xenix 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/xenix 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: xenix,v 1.9 2009/09/19 16:28:13 christos Exp $
+# $File: xenix,v 1.11 2017/03/17 21:35:28 christos Exp $
# xenix: file(1) magic for Microsoft Xenix
#
# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
@@ -12,7 +12,26 @@
# XXX - "x.out" collides with PDP-11 archives
#
0 string core core file (Xenix)
-0 byte 0x80 8086 relocatable (Microsoft)
+# URL: http://www.polarhome.com/service/man/?qf=86rel&tf=2&of=Xenix
+# Reference: http://www.azillionmonkeys.com/qed/Omfg.pdf
+# Update: Joerg Jenderek
+# recordtype~TranslatorHEADerRecord
+0 byte 0x80
+# GRR: line above is too general as it catches also Extensible storage engine DataBase
+# skip examples like GENA.SND Switch.Snd by looking for record length maximal 1024-3
+>1 uleshort <1022
+# skip examples like GAME.PICTURE Strange.Pic by looking for positiv record length
+>>1 uleshort >0
+# skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positiv string length
+>>>3 ubyte >0
+# skip examples like OMBRE.6 with "UUUUUU" by looking for filename like "hello.c"
+>>>>4 regex [a-zA-Z_/]{1,8}[.] 8086 relocatable (Microsoft)
+#!:mime application/octet-stream
+!:mime application/x-object
+!:ext o/a
+>>>>>3 pstring x \b, "%s"
+# checksum
+#>>>>>(3.b+4) ubyte x \b, checksum 0x%2.2x
0 leshort 0xff65 x.out
>2 string __.SYMDEF randomized
>0 byte x archive
@@ -35,8 +54,8 @@
>0x1c byte &0x9 286
>0x1c byte &0xa 386
>0x1f byte <0x040 small model
->0x1f byte =0x048 large model
->0x1f byte =0x049 huge model
+>0x1f byte =0x048 large model
+>0x1f byte =0x049 huge model
>0x1e leshort &0x1 executable
>0x1e leshort ^0x1 object file
>0x1e leshort &0x40 Large Text
Modified: trunk/contrib/file/magic/Magdir/xilinx
===================================================================
--- trunk/contrib/file/magic/Magdir/xilinx 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/xilinx 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,12 +1,12 @@
#------------------------------------------------------------------------------
-# $File: xilinx,v 1.7 2014/04/30 21:41:02 christos Exp $
+# $File: xilinx,v 1.8 2017/03/17 21:35:28 christos Exp $
# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.
# Xilinx-Magic at RevRagnarok.com
# Got the info from FPGA-FAQ 0026
#
-# Rewritten to use pstring/H instead of hardcoded lengths by O. Freyermuth,
-# fixes at least reading of bitfiles from Spartan 2, 3, 6.
+# Rewritten to use pstring/H instead of hardcoded lengths by O. Freyermuth,
+# fixes at least reading of bitfiles from Spartan 2, 3, 6.
# http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm
#
# First there is the sync header and its length
@@ -20,7 +20,7 @@
>>>>&0 pstring/H x - from %s
# And then 'b'
>>>>>&1 string b
-# Then the model / part number:
+# Then the model / part number:
>>>>>>&0 pstring/H x - for %s
# Then 'c'
>>>>>>>&1 string c
@@ -36,5 +36,5 @@
>>>>>>>>>>>>&0 belong x - data length 0x%x
# Raw bitstream files
-0 long 0xffffffff
+0 long 0xffffffff
>&0 belong 0xaa995566 Xilinx RAW bitstream (.BIN)
Modified: trunk/contrib/file/magic/Magdir/xwindows
===================================================================
--- trunk/contrib/file/magic/Magdir/xwindows 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Magdir/xwindows 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: xwindows,v 1.9 2014/04/30 21:41:02 christos Exp $
+# $File: xwindows,v 1.10 2017/03/17 21:35:28 christos Exp $
# xwindows: file(1) magic for various X/Window system file formats.
-# Compiled X Keymap
+# Compiled X Keymap
# XKM (compiled X keymap) files (including version and byte ordering)
1 string mkx Compiled XKB Keymap: lsb,
>0 byte >0 version %d
Added: trunk/contrib/file/magic/Magdir/yara
===================================================================
--- trunk/contrib/file/magic/Magdir/yara (rev 0)
+++ trunk/contrib/file/magic/Magdir/yara 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,17 @@
+
+
+#------------------------------------------------------------------------------
+# $File: yara,v 1.2 2017/05/25 20:07:23 christos Exp $
+# yara: file(1) magic for http://virustotal.github.io/yara/
+#
+
+0 string YARA
+>4 lelong >2047
+>8 byte <20 YARA 3.x compiled rule set
+# version
+>>8 clear x
+>>8 byte 6 created with version 3.3.0
+>>8 byte 8 created with version 3.4.0
+>>8 byte 11 created with version 3.5.0
+>>8 default x
+>>>8 byte x development version 0x%02x
Modified: trunk/contrib/file/magic/Makefile.am
===================================================================
--- trunk/contrib/file/magic/Makefile.am 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Makefile.am 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,5 +1,5 @@
#
-# $File: Makefile.am,v 1.98 2014/06/03 18:22:34 christos Exp $
+# $File: Makefile.am,v 1.126 2017/08/10 11:01:38 christos Exp $
#
MAGIC_FRAGMENT_BASE = Magdir
MAGIC_DIR = $(top_srcdir)/magic
@@ -13,6 +13,7 @@
$(MAGIC_FRAGMENT_DIR)/acorn \
$(MAGIC_FRAGMENT_DIR)/adi \
$(MAGIC_FRAGMENT_DIR)/adventure \
+$(MAGIC_FRAGMENT_DIR)/algol68 \
$(MAGIC_FRAGMENT_DIR)/allegro \
$(MAGIC_FRAGMENT_DIR)/alliant \
$(MAGIC_FRAGMENT_DIR)/amanda \
@@ -20,9 +21,12 @@
$(MAGIC_FRAGMENT_DIR)/android \
$(MAGIC_FRAGMENT_DIR)/animation \
$(MAGIC_FRAGMENT_DIR)/aout \
+$(MAGIC_FRAGMENT_DIR)/apache \
$(MAGIC_FRAGMENT_DIR)/apl \
$(MAGIC_FRAGMENT_DIR)/apple \
+$(MAGIC_FRAGMENT_DIR)/application \
$(MAGIC_FRAGMENT_DIR)/applix \
+$(MAGIC_FRAGMENT_DIR)/apt \
$(MAGIC_FRAGMENT_DIR)/archive \
$(MAGIC_FRAGMENT_DIR)/assembler \
$(MAGIC_FRAGMENT_DIR)/asterix \
@@ -29,7 +33,10 @@
$(MAGIC_FRAGMENT_DIR)/att3b \
$(MAGIC_FRAGMENT_DIR)/audio \
$(MAGIC_FRAGMENT_DIR)/basis \
+$(MAGIC_FRAGMENT_DIR)/ber \
$(MAGIC_FRAGMENT_DIR)/bflt \
+$(MAGIC_FRAGMENT_DIR)/bhl \
+$(MAGIC_FRAGMENT_DIR)/bioinformatics \
$(MAGIC_FRAGMENT_DIR)/blackberry \
$(MAGIC_FRAGMENT_DIR)/blcr \
$(MAGIC_FRAGMENT_DIR)/blender \
@@ -42,6 +49,7 @@
$(MAGIC_FRAGMENT_DIR)/c64 \
$(MAGIC_FRAGMENT_DIR)/cad \
$(MAGIC_FRAGMENT_DIR)/cafebabe \
+$(MAGIC_FRAGMENT_DIR)/cbor \
$(MAGIC_FRAGMENT_DIR)/cddb \
$(MAGIC_FRAGMENT_DIR)/chord \
$(MAGIC_FRAGMENT_DIR)/cisco \
@@ -49,11 +57,13 @@
$(MAGIC_FRAGMENT_DIR)/clarion \
$(MAGIC_FRAGMENT_DIR)/claris \
$(MAGIC_FRAGMENT_DIR)/clipper \
+$(MAGIC_FRAGMENT_DIR)/coff \
$(MAGIC_FRAGMENT_DIR)/commands \
$(MAGIC_FRAGMENT_DIR)/communications \
$(MAGIC_FRAGMENT_DIR)/compress \
$(MAGIC_FRAGMENT_DIR)/console \
$(MAGIC_FRAGMENT_DIR)/convex \
+$(MAGIC_FRAGMENT_DIR)/coverage \
$(MAGIC_FRAGMENT_DIR)/cracklib \
$(MAGIC_FRAGMENT_DIR)/ctags \
$(MAGIC_FRAGMENT_DIR)/ctf \
@@ -61,6 +71,7 @@
$(MAGIC_FRAGMENT_DIR)/cups \
$(MAGIC_FRAGMENT_DIR)/dact \
$(MAGIC_FRAGMENT_DIR)/database \
+$(MAGIC_FRAGMENT_DIR)/der \
$(MAGIC_FRAGMENT_DIR)/diamond \
$(MAGIC_FRAGMENT_DIR)/diff \
$(MAGIC_FRAGMENT_DIR)/digital \
@@ -77,7 +88,9 @@
$(MAGIC_FRAGMENT_DIR)/esri \
$(MAGIC_FRAGMENT_DIR)/fcs \
$(MAGIC_FRAGMENT_DIR)/filesystems \
+$(MAGIC_FRAGMENT_DIR)/finger \
$(MAGIC_FRAGMENT_DIR)/flash \
+$(MAGIC_FRAGMENT_DIR)/flif \
$(MAGIC_FRAGMENT_DIR)/fonts \
$(MAGIC_FRAGMENT_DIR)/fortran \
$(MAGIC_FRAGMENT_DIR)/frame \
@@ -86,6 +99,7 @@
$(MAGIC_FRAGMENT_DIR)/fusecompress \
$(MAGIC_FRAGMENT_DIR)/games \
$(MAGIC_FRAGMENT_DIR)/gcc \
+$(MAGIC_FRAGMENT_DIR)/gconv \
$(MAGIC_FRAGMENT_DIR)/geo \
$(MAGIC_FRAGMENT_DIR)/geos \
$(MAGIC_FRAGMENT_DIR)/gimp \
@@ -93,6 +107,7 @@
$(MAGIC_FRAGMENT_DIR)/gnu \
$(MAGIC_FRAGMENT_DIR)/gnumeric \
$(MAGIC_FRAGMENT_DIR)/gpt \
+$(MAGIC_FRAGMENT_DIR)/gpu \
$(MAGIC_FRAGMENT_DIR)/grace \
$(MAGIC_FRAGMENT_DIR)/graphviz \
$(MAGIC_FRAGMENT_DIR)/gringotts \
@@ -117,6 +132,7 @@
$(MAGIC_FRAGMENT_DIR)/karma \
$(MAGIC_FRAGMENT_DIR)/kde \
$(MAGIC_FRAGMENT_DIR)/keepass \
+$(MAGIC_FRAGMENT_DIR)/kerberos \
$(MAGIC_FRAGMENT_DIR)/kml \
$(MAGIC_FRAGMENT_DIR)/lecter \
$(MAGIC_FRAGMENT_DIR)/lex \
@@ -142,6 +158,8 @@
$(MAGIC_FRAGMENT_DIR)/mcrypt \
$(MAGIC_FRAGMENT_DIR)/mercurial \
$(MAGIC_FRAGMENT_DIR)/metastore \
+$(MAGIC_FRAGMENT_DIR)/meteorological \
+$(MAGIC_FRAGMENT_DIR)/microfocus \
$(MAGIC_FRAGMENT_DIR)/mime \
$(MAGIC_FRAGMENT_DIR)/mips \
$(MAGIC_FRAGMENT_DIR)/mirage \
@@ -158,6 +176,7 @@
$(MAGIC_FRAGMENT_DIR)/msvc \
$(MAGIC_FRAGMENT_DIR)/mup \
$(MAGIC_FRAGMENT_DIR)/music \
+$(MAGIC_FRAGMENT_DIR)/nasa \
$(MAGIC_FRAGMENT_DIR)/natinst \
$(MAGIC_FRAGMENT_DIR)/ncr \
$(MAGIC_FRAGMENT_DIR)/neko \
@@ -181,6 +200,8 @@
$(MAGIC_FRAGMENT_DIR)/pascal \
$(MAGIC_FRAGMENT_DIR)/pbf \
$(MAGIC_FRAGMENT_DIR)/pbm \
+$(MAGIC_FRAGMENT_DIR)/pc88 \
+$(MAGIC_FRAGMENT_DIR)/pc98 \
$(MAGIC_FRAGMENT_DIR)/pdf \
$(MAGIC_FRAGMENT_DIR)/pdp \
$(MAGIC_FRAGMENT_DIR)/perl \
@@ -189,16 +210,18 @@
$(MAGIC_FRAGMENT_DIR)/pkgadd \
$(MAGIC_FRAGMENT_DIR)/plan9 \
$(MAGIC_FRAGMENT_DIR)/plus5 \
+$(MAGIC_FRAGMENT_DIR)/polyml \
$(MAGIC_FRAGMENT_DIR)/printer \
$(MAGIC_FRAGMENT_DIR)/project \
$(MAGIC_FRAGMENT_DIR)/psdbms \
+$(MAGIC_FRAGMENT_DIR)/psl \
$(MAGIC_FRAGMENT_DIR)/pulsar \
$(MAGIC_FRAGMENT_DIR)/pwsafe \
$(MAGIC_FRAGMENT_DIR)/pyramid \
$(MAGIC_FRAGMENT_DIR)/python \
+$(MAGIC_FRAGMENT_DIR)/qt \
$(MAGIC_FRAGMENT_DIR)/revision \
$(MAGIC_FRAGMENT_DIR)/riff \
-$(MAGIC_FRAGMENT_DIR)/rinex \
$(MAGIC_FRAGMENT_DIR)/rpm \
$(MAGIC_FRAGMENT_DIR)/rtf \
$(MAGIC_FRAGMENT_DIR)/ruby \
@@ -243,6 +266,7 @@
$(MAGIC_FRAGMENT_DIR)/uterus \
$(MAGIC_FRAGMENT_DIR)/uuencode \
$(MAGIC_FRAGMENT_DIR)/varied.out \
+$(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \
$(MAGIC_FRAGMENT_DIR)/varied.script \
$(MAGIC_FRAGMENT_DIR)/vax \
$(MAGIC_FRAGMENT_DIR)/vicar \
@@ -255,15 +279,18 @@
$(MAGIC_FRAGMENT_DIR)/vxl \
$(MAGIC_FRAGMENT_DIR)/warc \
$(MAGIC_FRAGMENT_DIR)/weak \
+$(MAGIC_FRAGMENT_DIR)/webassembly \
$(MAGIC_FRAGMENT_DIR)/windows \
$(MAGIC_FRAGMENT_DIR)/wireless \
$(MAGIC_FRAGMENT_DIR)/wordprocessors \
$(MAGIC_FRAGMENT_DIR)/wsdl \
+$(MAGIC_FRAGMENT_DIR)/x68000 \
$(MAGIC_FRAGMENT_DIR)/xdelta \
$(MAGIC_FRAGMENT_DIR)/xenix \
$(MAGIC_FRAGMENT_DIR)/xilinx \
$(MAGIC_FRAGMENT_DIR)/xo65 \
$(MAGIC_FRAGMENT_DIR)/xwindows \
+$(MAGIC_FRAGMENT_DIR)/yara \
$(MAGIC_FRAGMENT_DIR)/zfs \
$(MAGIC_FRAGMENT_DIR)/zilog \
$(MAGIC_FRAGMENT_DIR)/zyxel
@@ -287,7 +314,7 @@
@(if expr "${FILE_COMPILE}" : '.*/.*' > /dev/null; then \
echo "Using ${FILE_COMPILE} to generate ${MAGIC}" > /dev/null; \
else \
- v=$$(file --version | sed -e s/file-// -e q); \
+ v=$$(${FILE_COMPILE} --version | sed -e s/file-// -e q); \
if [ "$$v" != "${PACKAGE_VERSION}" ]; then \
echo "Cannot use the installed version of file ($$v) to"; \
echo "cross-compile file ${PACKAGE_VERSION}"; \
Modified: trunk/contrib/file/magic/Makefile.in
===================================================================
--- trunk/contrib/file/magic/Makefile.in 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic/Makefile.in 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -15,7 +15,17 @@
@SET_MAKE@
VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@@ -78,7 +88,6 @@
build_triplet = @build@
host_triplet = @host@
subdir = magic
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -86,6 +95,7 @@
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@@ -139,6 +149,7 @@
am__installdirs = "$(DESTDIR)$(pkgdatadir)"
DATA = $(pkgdata_DATA)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgdatadir = @pkgdatadir@
ACLOCAL = @ACLOCAL@
@@ -262,7 +273,7 @@
top_srcdir = @top_srcdir@
#
-# $File: Makefile.am,v 1.98 2014/06/03 18:22:34 christos Exp $
+# $File: Makefile.am,v 1.126 2017/08/10 11:01:38 christos Exp $
#
MAGIC_FRAGMENT_BASE = Magdir
MAGIC_DIR = $(top_srcdir)/magic
@@ -274,6 +285,7 @@
$(MAGIC_FRAGMENT_DIR)/acorn \
$(MAGIC_FRAGMENT_DIR)/adi \
$(MAGIC_FRAGMENT_DIR)/adventure \
+$(MAGIC_FRAGMENT_DIR)/algol68 \
$(MAGIC_FRAGMENT_DIR)/allegro \
$(MAGIC_FRAGMENT_DIR)/alliant \
$(MAGIC_FRAGMENT_DIR)/amanda \
@@ -281,9 +293,12 @@
$(MAGIC_FRAGMENT_DIR)/android \
$(MAGIC_FRAGMENT_DIR)/animation \
$(MAGIC_FRAGMENT_DIR)/aout \
+$(MAGIC_FRAGMENT_DIR)/apache \
$(MAGIC_FRAGMENT_DIR)/apl \
$(MAGIC_FRAGMENT_DIR)/apple \
+$(MAGIC_FRAGMENT_DIR)/application \
$(MAGIC_FRAGMENT_DIR)/applix \
+$(MAGIC_FRAGMENT_DIR)/apt \
$(MAGIC_FRAGMENT_DIR)/archive \
$(MAGIC_FRAGMENT_DIR)/assembler \
$(MAGIC_FRAGMENT_DIR)/asterix \
@@ -290,7 +305,10 @@
$(MAGIC_FRAGMENT_DIR)/att3b \
$(MAGIC_FRAGMENT_DIR)/audio \
$(MAGIC_FRAGMENT_DIR)/basis \
+$(MAGIC_FRAGMENT_DIR)/ber \
$(MAGIC_FRAGMENT_DIR)/bflt \
+$(MAGIC_FRAGMENT_DIR)/bhl \
+$(MAGIC_FRAGMENT_DIR)/bioinformatics \
$(MAGIC_FRAGMENT_DIR)/blackberry \
$(MAGIC_FRAGMENT_DIR)/blcr \
$(MAGIC_FRAGMENT_DIR)/blender \
@@ -303,6 +321,7 @@
$(MAGIC_FRAGMENT_DIR)/c64 \
$(MAGIC_FRAGMENT_DIR)/cad \
$(MAGIC_FRAGMENT_DIR)/cafebabe \
+$(MAGIC_FRAGMENT_DIR)/cbor \
$(MAGIC_FRAGMENT_DIR)/cddb \
$(MAGIC_FRAGMENT_DIR)/chord \
$(MAGIC_FRAGMENT_DIR)/cisco \
@@ -310,11 +329,13 @@
$(MAGIC_FRAGMENT_DIR)/clarion \
$(MAGIC_FRAGMENT_DIR)/claris \
$(MAGIC_FRAGMENT_DIR)/clipper \
+$(MAGIC_FRAGMENT_DIR)/coff \
$(MAGIC_FRAGMENT_DIR)/commands \
$(MAGIC_FRAGMENT_DIR)/communications \
$(MAGIC_FRAGMENT_DIR)/compress \
$(MAGIC_FRAGMENT_DIR)/console \
$(MAGIC_FRAGMENT_DIR)/convex \
+$(MAGIC_FRAGMENT_DIR)/coverage \
$(MAGIC_FRAGMENT_DIR)/cracklib \
$(MAGIC_FRAGMENT_DIR)/ctags \
$(MAGIC_FRAGMENT_DIR)/ctf \
@@ -322,6 +343,7 @@
$(MAGIC_FRAGMENT_DIR)/cups \
$(MAGIC_FRAGMENT_DIR)/dact \
$(MAGIC_FRAGMENT_DIR)/database \
+$(MAGIC_FRAGMENT_DIR)/der \
$(MAGIC_FRAGMENT_DIR)/diamond \
$(MAGIC_FRAGMENT_DIR)/diff \
$(MAGIC_FRAGMENT_DIR)/digital \
@@ -338,7 +360,9 @@
$(MAGIC_FRAGMENT_DIR)/esri \
$(MAGIC_FRAGMENT_DIR)/fcs \
$(MAGIC_FRAGMENT_DIR)/filesystems \
+$(MAGIC_FRAGMENT_DIR)/finger \
$(MAGIC_FRAGMENT_DIR)/flash \
+$(MAGIC_FRAGMENT_DIR)/flif \
$(MAGIC_FRAGMENT_DIR)/fonts \
$(MAGIC_FRAGMENT_DIR)/fortran \
$(MAGIC_FRAGMENT_DIR)/frame \
@@ -347,6 +371,7 @@
$(MAGIC_FRAGMENT_DIR)/fusecompress \
$(MAGIC_FRAGMENT_DIR)/games \
$(MAGIC_FRAGMENT_DIR)/gcc \
+$(MAGIC_FRAGMENT_DIR)/gconv \
$(MAGIC_FRAGMENT_DIR)/geo \
$(MAGIC_FRAGMENT_DIR)/geos \
$(MAGIC_FRAGMENT_DIR)/gimp \
@@ -354,6 +379,7 @@
$(MAGIC_FRAGMENT_DIR)/gnu \
$(MAGIC_FRAGMENT_DIR)/gnumeric \
$(MAGIC_FRAGMENT_DIR)/gpt \
+$(MAGIC_FRAGMENT_DIR)/gpu \
$(MAGIC_FRAGMENT_DIR)/grace \
$(MAGIC_FRAGMENT_DIR)/graphviz \
$(MAGIC_FRAGMENT_DIR)/gringotts \
@@ -378,6 +404,7 @@
$(MAGIC_FRAGMENT_DIR)/karma \
$(MAGIC_FRAGMENT_DIR)/kde \
$(MAGIC_FRAGMENT_DIR)/keepass \
+$(MAGIC_FRAGMENT_DIR)/kerberos \
$(MAGIC_FRAGMENT_DIR)/kml \
$(MAGIC_FRAGMENT_DIR)/lecter \
$(MAGIC_FRAGMENT_DIR)/lex \
@@ -403,6 +430,8 @@
$(MAGIC_FRAGMENT_DIR)/mcrypt \
$(MAGIC_FRAGMENT_DIR)/mercurial \
$(MAGIC_FRAGMENT_DIR)/metastore \
+$(MAGIC_FRAGMENT_DIR)/meteorological \
+$(MAGIC_FRAGMENT_DIR)/microfocus \
$(MAGIC_FRAGMENT_DIR)/mime \
$(MAGIC_FRAGMENT_DIR)/mips \
$(MAGIC_FRAGMENT_DIR)/mirage \
@@ -419,6 +448,7 @@
$(MAGIC_FRAGMENT_DIR)/msvc \
$(MAGIC_FRAGMENT_DIR)/mup \
$(MAGIC_FRAGMENT_DIR)/music \
+$(MAGIC_FRAGMENT_DIR)/nasa \
$(MAGIC_FRAGMENT_DIR)/natinst \
$(MAGIC_FRAGMENT_DIR)/ncr \
$(MAGIC_FRAGMENT_DIR)/neko \
@@ -442,6 +472,8 @@
$(MAGIC_FRAGMENT_DIR)/pascal \
$(MAGIC_FRAGMENT_DIR)/pbf \
$(MAGIC_FRAGMENT_DIR)/pbm \
+$(MAGIC_FRAGMENT_DIR)/pc88 \
+$(MAGIC_FRAGMENT_DIR)/pc98 \
$(MAGIC_FRAGMENT_DIR)/pdf \
$(MAGIC_FRAGMENT_DIR)/pdp \
$(MAGIC_FRAGMENT_DIR)/perl \
@@ -450,16 +482,18 @@
$(MAGIC_FRAGMENT_DIR)/pkgadd \
$(MAGIC_FRAGMENT_DIR)/plan9 \
$(MAGIC_FRAGMENT_DIR)/plus5 \
+$(MAGIC_FRAGMENT_DIR)/polyml \
$(MAGIC_FRAGMENT_DIR)/printer \
$(MAGIC_FRAGMENT_DIR)/project \
$(MAGIC_FRAGMENT_DIR)/psdbms \
+$(MAGIC_FRAGMENT_DIR)/psl \
$(MAGIC_FRAGMENT_DIR)/pulsar \
$(MAGIC_FRAGMENT_DIR)/pwsafe \
$(MAGIC_FRAGMENT_DIR)/pyramid \
$(MAGIC_FRAGMENT_DIR)/python \
+$(MAGIC_FRAGMENT_DIR)/qt \
$(MAGIC_FRAGMENT_DIR)/revision \
$(MAGIC_FRAGMENT_DIR)/riff \
-$(MAGIC_FRAGMENT_DIR)/rinex \
$(MAGIC_FRAGMENT_DIR)/rpm \
$(MAGIC_FRAGMENT_DIR)/rtf \
$(MAGIC_FRAGMENT_DIR)/ruby \
@@ -504,6 +538,7 @@
$(MAGIC_FRAGMENT_DIR)/uterus \
$(MAGIC_FRAGMENT_DIR)/uuencode \
$(MAGIC_FRAGMENT_DIR)/varied.out \
+$(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \
$(MAGIC_FRAGMENT_DIR)/varied.script \
$(MAGIC_FRAGMENT_DIR)/vax \
$(MAGIC_FRAGMENT_DIR)/vicar \
@@ -516,15 +551,18 @@
$(MAGIC_FRAGMENT_DIR)/vxl \
$(MAGIC_FRAGMENT_DIR)/warc \
$(MAGIC_FRAGMENT_DIR)/weak \
+$(MAGIC_FRAGMENT_DIR)/webassembly \
$(MAGIC_FRAGMENT_DIR)/windows \
$(MAGIC_FRAGMENT_DIR)/wireless \
$(MAGIC_FRAGMENT_DIR)/wordprocessors \
$(MAGIC_FRAGMENT_DIR)/wsdl \
+$(MAGIC_FRAGMENT_DIR)/x68000 \
$(MAGIC_FRAGMENT_DIR)/xdelta \
$(MAGIC_FRAGMENT_DIR)/xenix \
$(MAGIC_FRAGMENT_DIR)/xilinx \
$(MAGIC_FRAGMENT_DIR)/xo65 \
$(MAGIC_FRAGMENT_DIR)/xwindows \
+$(MAGIC_FRAGMENT_DIR)/yara \
$(MAGIC_FRAGMENT_DIR)/zfs \
$(MAGIC_FRAGMENT_DIR)/zilog \
$(MAGIC_FRAGMENT_DIR)/zyxel
@@ -553,7 +591,6 @@
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign magic/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign magic/Makefile
-.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@@ -753,7 +790,9 @@
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags-am uninstall uninstall-am uninstall-pkgdataDATA
+.PRECIOUS: Makefile
+
${MAGIC}: $(EXTRA_DIST) $(FILE_COMPILE_DEP)
@rm -fr magic
@mkdir magic && cp -p $(EXTRA_DIST) magic
@@ -760,7 +799,7 @@
@(if expr "${FILE_COMPILE}" : '.*/.*' > /dev/null; then \
echo "Using ${FILE_COMPILE} to generate ${MAGIC}" > /dev/null; \
else \
- v=$$(file --version | sed -e s/file-// -e q); \
+ v=$$(${FILE_COMPILE} --version | sed -e s/file-// -e q); \
if [ "$$v" != "${PACKAGE_VERSION}" ]; then \
echo "Cannot use the installed version of file ($$v) to"; \
echo "cross-compile file ${PACKAGE_VERSION}"; \
Deleted: trunk/contrib/file/magic.c
===================================================================
--- trunk/contrib/file/magic.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,524 +0,0 @@
-/*
- * Copyright (c) Christos Zoulas 2003.
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef WIN32
-#include <windows.h>
-#include <shlwapi.h>
-#endif
-
-#include "file.h"
-
-#ifndef lint
-FILE_RCSID("@(#)$File: magic.c,v 1.84 2014/05/14 23:15:42 christos Exp $")
-#endif /* lint */
-
-#include "magic.h"
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#ifdef QUICK
-#include <sys/mman.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h> /* for PIPE_BUF */
-#endif
-
-#if defined(HAVE_UTIMES)
-# include <sys/time.h>
-#elif defined(HAVE_UTIME)
-# if defined(HAVE_SYS_UTIME_H)
-# include <sys/utime.h>
-# elif defined(HAVE_UTIME_H)
-# include <utime.h>
-# endif
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h> /* for read() */
-#endif
-
-#ifndef PIPE_BUF
-/* Get the PIPE_BUF from pathconf */
-#ifdef _PC_PIPE_BUF
-#define PIPE_BUF pathconf(".", _PC_PIPE_BUF)
-#else
-#define PIPE_BUF 512
-#endif
-#endif
-
-private void close_and_restore(const struct magic_set *, const char *, int,
- const struct stat *);
-private int unreadable_info(struct magic_set *, mode_t, const char *);
-private const char* get_default_magic(void);
-#ifndef COMPILE_ONLY
-private const char *file_or_fd(struct magic_set *, const char *, int);
-#endif
-
-#ifndef STDIN_FILENO
-#define STDIN_FILENO 0
-#endif
-
-private const char *
-get_default_magic(void)
-{
- static const char hmagic[] = "/.magic/magic.mgc";
- static char *default_magic;
- char *home, *hmagicpath;
-
-#ifndef WIN32
- struct stat st;
-
- if (default_magic) {
- free(default_magic);
- default_magic = NULL;
- }
- if ((home = getenv("HOME")) == NULL)
- return MAGIC;
-
- if (asprintf(&hmagicpath, "%s/.magic.mgc", home) < 0)
- return MAGIC;
- if (stat(hmagicpath, &st) == -1) {
- free(hmagicpath);
- if (asprintf(&hmagicpath, "%s/.magic", home) < 0)
- return MAGIC;
- if (stat(hmagicpath, &st) == -1)
- goto out;
- if (S_ISDIR(st.st_mode)) {
- free(hmagicpath);
- if (asprintf(&hmagicpath, "%s/%s", home, hmagic) < 0)
- return MAGIC;
- if (access(hmagicpath, R_OK) == -1)
- goto out;
- }
- }
-
- if (asprintf(&default_magic, "%s:%s", hmagicpath, MAGIC) < 0)
- goto out;
- free(hmagicpath);
- return default_magic;
-out:
- default_magic = NULL;
- free(hmagicpath);
- return MAGIC;
-#else
- char *hmagicp;
- char *tmppath = NULL;
- hmagicpath = NULL;
-
-#define APPENDPATH() \
- do { \
- if (tmppath && access(tmppath, R_OK) != -1) { \
- if (hmagicpath == NULL) \
- hmagicpath = tmppath; \
- else { \
- if (asprintf(&hmagicp, "%s%c%s", hmagicpath, \
- PATHSEP, tmppath) >= 0) { \
- free(hmagicpath); \
- hmagicpath = hmagicp; \
- } \
- free(tmppath); \
- } \
- tmppath = NULL; \
- } \
- } while (/*CONSTCOND*/0)
-
- if (default_magic) {
- free(default_magic);
- default_magic = NULL;
- }
-
- /* First, try to get user-specific magic file */
- if ((home = getenv("LOCALAPPDATA")) == NULL) {
- if ((home = getenv("USERPROFILE")) != NULL)
- if (asprintf(&tmppath,
- "%s/Local Settings/Application Data%s", home,
- hmagic) < 0)
- tmppath = NULL;
- } else {
- if (asprintf(&tmppath, "%s%s", home, hmagic) < 0)
- tmppath = NULL;
- }
-
- APPENDPATH();
-
- /* Second, try to get a magic file from Common Files */
- if ((home = getenv("COMMONPROGRAMFILES")) != NULL) {
- if (asprintf(&tmppath, "%s%s", home, hmagic) >= 0)
- APPENDPATH();
- }
-
- /* Third, try to get magic file relative to dll location */
- LPTSTR dllpath = malloc(sizeof(*dllpath) * (MAX_PATH + 1));
- dllpath[MAX_PATH] = 0; /* just in case long path gets truncated and not null terminated */
- if (GetModuleFileNameA(NULL, dllpath, MAX_PATH)){
- PathRemoveFileSpecA(dllpath);
- if (strlen(dllpath) > 3 &&
- stricmp(&dllpath[strlen(dllpath) - 3], "bin") == 0) {
- if (asprintf(&tmppath,
- "%s/../share/misc/magic.mgc", dllpath) >= 0)
- APPENDPATH();
- } else {
- if (asprintf(&tmppath,
- "%s/share/misc/magic.mgc", dllpath) >= 0)
- APPENDPATH();
- else if (asprintf(&tmppath,
- "%s/magic.mgc", dllpath) >= 0)
- APPENDPATH();
- }
- }
-
- /* Don't put MAGIC constant - it likely points to a file within MSys
- tree */
- default_magic = hmagicpath;
- return default_magic;
-#endif
-}
-
-public const char *
-magic_getpath(const char *magicfile, int action)
-{
- if (magicfile != NULL)
- return magicfile;
-
- magicfile = getenv("MAGIC");
- if (magicfile != NULL)
- return magicfile;
-
- return action == FILE_LOAD ? get_default_magic() : MAGIC;
-}
-
-public struct magic_set *
-magic_open(int flags)
-{
- return file_ms_alloc(flags);
-}
-
-private int
-unreadable_info(struct magic_set *ms, mode_t md, const char *file)
-{
- if (file) {
- /* We cannot open it, but we were able to stat it. */
- if (access(file, W_OK) == 0)
- if (file_printf(ms, "writable, ") == -1)
- return -1;
- if (access(file, X_OK) == 0)
- if (file_printf(ms, "executable, ") == -1)
- return -1;
- }
- if (S_ISREG(md))
- if (file_printf(ms, "regular file, ") == -1)
- return -1;
- if (file_printf(ms, "no read permission") == -1)
- return -1;
- return 0;
-}
-
-public void
-magic_close(struct magic_set *ms)
-{
- if (ms == NULL)
- return;
- file_ms_free(ms);
-}
-
-/*
- * load a magic file
- */
-public int
-magic_load(struct magic_set *ms, const char *magicfile)
-{
- if (ms == NULL)
- return -1;
- return file_apprentice(ms, magicfile, FILE_LOAD);
-}
-
-public int
-magic_compile(struct magic_set *ms, const char *magicfile)
-{
- if (ms == NULL)
- return -1;
- return file_apprentice(ms, magicfile, FILE_COMPILE);
-}
-
-public int
-magic_check(struct magic_set *ms, const char *magicfile)
-{
- if (ms == NULL)
- return -1;
- return file_apprentice(ms, magicfile, FILE_CHECK);
-}
-
-public int
-magic_list(struct magic_set *ms, const char *magicfile)
-{
- if (ms == NULL)
- return -1;
- return file_apprentice(ms, magicfile, FILE_LIST);
-}
-
-private void
-close_and_restore(const struct magic_set *ms, const char *name, int fd,
- const struct stat *sb)
-{
- if (fd == STDIN_FILENO || name == NULL)
- return;
- (void) close(fd);
-
- if ((ms->flags & MAGIC_PRESERVE_ATIME) != 0) {
- /*
- * Try to restore access, modification times if read it.
- * This is really *bad* because it will modify the status
- * time of the file... And of course this will affect
- * backup programs
- */
-#ifdef HAVE_UTIMES
- struct timeval utsbuf[2];
- (void)memset(utsbuf, 0, sizeof(utsbuf));
- utsbuf[0].tv_sec = sb->st_atime;
- utsbuf[1].tv_sec = sb->st_mtime;
-
- (void) utimes(name, utsbuf); /* don't care if loses */
-#elif defined(HAVE_UTIME_H) || defined(HAVE_SYS_UTIME_H)
- struct utimbuf utbuf;
-
- (void)memset(&utbuf, 0, sizeof(utbuf));
- utbuf.actime = sb->st_atime;
- utbuf.modtime = sb->st_mtime;
- (void) utime(name, &utbuf); /* don't care if loses */
-#endif
- }
-}
-
-#ifndef COMPILE_ONLY
-
-/*
- * find type of descriptor
- */
-public const char *
-magic_descriptor(struct magic_set *ms, int fd)
-{
- if (ms == NULL)
- return NULL;
- return file_or_fd(ms, NULL, fd);
-}
-
-/*
- * find type of named file
- */
-public const char *
-magic_file(struct magic_set *ms, const char *inname)
-{
- if (ms == NULL)
- return NULL;
- return file_or_fd(ms, inname, STDIN_FILENO);
-}
-
-private const char *
-file_or_fd(struct magic_set *ms, const char *inname, int fd)
-{
- int rv = -1;
- unsigned char *buf;
- struct stat sb;
- ssize_t nbytes = 0; /* number of bytes read from a datafile */
- int ispipe = 0;
- off_t pos = (off_t)-1;
-
- if (file_reset(ms) == -1)
- goto out;
-
- /*
- * one extra for terminating '\0', and
- * some overlapping space for matches near EOF
- */
-#define SLOP (1 + sizeof(union VALUETYPE))
- if ((buf = CAST(unsigned char *, malloc(HOWMANY + SLOP))) == NULL)
- return NULL;
-
- switch (file_fsmagic(ms, inname, &sb)) {
- case -1: /* error */
- goto done;
- case 0: /* nothing found */
- break;
- default: /* matched it and printed type */
- rv = 0;
- goto done;
- }
-
-#ifdef WIN32
- /* Place stdin in binary mode, so EOF (Ctrl+Z) doesn't stop early. */
- if (fd == STDIN_FILENO)
- _setmode(STDIN_FILENO, O_BINARY);
-#endif
-
- if (inname == NULL) {
- if (fstat(fd, &sb) == 0 && S_ISFIFO(sb.st_mode))
- ispipe = 1;
- else
- pos = lseek(fd, (off_t)0, SEEK_CUR);
- } else {
- int flags = O_RDONLY|O_BINARY;
- int okstat = stat(inname, &sb) == 0;
-
- if (okstat && S_ISFIFO(sb.st_mode)) {
-#ifdef O_NONBLOCK
- flags |= O_NONBLOCK;
-#endif
- ispipe = 1;
- }
-
- errno = 0;
- if ((fd = open(inname, flags)) < 0) {
-#ifdef WIN32
- /*
- * Can't stat, can't open. It may have been opened in
- * fsmagic, so if the user doesn't have read permission,
- * allow it to say so; otherwise an error was probably
- * displayed in fsmagic.
- */
- if (!okstat && errno == EACCES) {
- sb.st_mode = S_IFBLK;
- okstat = 1;
- }
-#endif
- if (okstat &&
- unreadable_info(ms, sb.st_mode, inname) == -1)
- goto done;
- rv = 0;
- goto done;
- }
-#ifdef O_NONBLOCK
- if ((flags = fcntl(fd, F_GETFL)) != -1) {
- flags &= ~O_NONBLOCK;
- (void)fcntl(fd, F_SETFL, flags);
- }
-#endif
- }
-
- /*
- * try looking at the first HOWMANY bytes
- */
- if (ispipe) {
- ssize_t r = 0;
-
- while ((r = sread(fd, (void *)&buf[nbytes],
- (size_t)(HOWMANY - nbytes), 1)) > 0) {
- nbytes += r;
- if (r < PIPE_BUF) break;
- }
-
- if (nbytes == 0) {
- /* We can not read it, but we were able to stat it. */
- if (unreadable_info(ms, sb.st_mode, inname) == -1)
- goto done;
- rv = 0;
- goto done;
- }
-
- } else {
- /* Windows refuses to read from a big console buffer. */
- size_t howmany =
-#if defined(WIN32) && HOWMANY > 8 * 1024
- _isatty(fd) ? 8 * 1024 :
-#endif
- HOWMANY;
- if ((nbytes = read(fd, (char *)buf, howmany)) == -1) {
- if (inname == NULL && fd != STDIN_FILENO)
- file_error(ms, errno, "cannot read fd %d", fd);
- else
- file_error(ms, errno, "cannot read `%s'",
- inname == NULL ? "/dev/stdin" : inname);
- goto done;
- }
- }
-
- (void)memset(buf + nbytes, 0, SLOP); /* NUL terminate */
- if (file_buffer(ms, fd, inname, buf, (size_t)nbytes) == -1)
- goto done;
- rv = 0;
-done:
- free(buf);
- if (pos != (off_t)-1)
- (void)lseek(fd, pos, SEEK_SET);
- close_and_restore(ms, inname, fd, &sb);
-out:
- return rv == 0 ? file_getbuffer(ms) : NULL;
-}
-
-
-public const char *
-magic_buffer(struct magic_set *ms, const void *buf, size_t nb)
-{
- if (ms == NULL)
- return NULL;
- if (file_reset(ms) == -1)
- return NULL;
- /*
- * The main work is done here!
- * We have the file name and/or the data buffer to be identified.
- */
- if (file_buffer(ms, -1, NULL, buf, nb) == -1) {
- return NULL;
- }
- return file_getbuffer(ms);
-}
-#endif
-
-public const char *
-magic_error(struct magic_set *ms)
-{
- if (ms == NULL)
- return "Magic database is not open";
- return (ms->event_flags & EVENT_HAD_ERR) ? ms->o.buf : NULL;
-}
-
-public int
-magic_errno(struct magic_set *ms)
-{
- if (ms == NULL)
- return EINVAL;
- return (ms->event_flags & EVENT_HAD_ERR) ? ms->error : 0;
-}
-
-public int
-magic_setflags(struct magic_set *ms, int flags)
-{
- if (ms == NULL)
- return -1;
-#if !defined(HAVE_UTIME) && !defined(HAVE_UTIMES)
- if (flags & MAGIC_PRESERVE_ATIME)
- return -1;
-#endif
- ms->flags = flags;
- return 0;
-}
-
-public int
-magic_version(void)
-{
- return MAGIC_VERSION;
-}
Deleted: trunk/contrib/file/magic.h
===================================================================
--- trunk/contrib/file/magic.h 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) Christos Zoulas 2003.
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef _MAGIC_H
-#define _MAGIC_H
-
-#include <sys/types.h>
-
-#define MAGIC_NONE 0x000000 /* No flags */
-#define MAGIC_DEBUG 0x000001 /* Turn on debugging */
-#define MAGIC_SYMLINK 0x000002 /* Follow symlinks */
-#define MAGIC_COMPRESS 0x000004 /* Check inside compressed files */
-#define MAGIC_DEVICES 0x000008 /* Look at the contents of devices */
-#define MAGIC_MIME_TYPE 0x000010 /* Return the MIME type */
-#define MAGIC_CONTINUE 0x000020 /* Return all matches */
-#define MAGIC_CHECK 0x000040 /* Print warnings to stderr */
-#define MAGIC_PRESERVE_ATIME 0x000080 /* Restore access time on exit */
-#define MAGIC_RAW 0x000100 /* Don't translate unprintable chars */
-#define MAGIC_ERROR 0x000200 /* Handle ENOENT etc as real errors */
-#define MAGIC_MIME_ENCODING 0x000400 /* Return the MIME encoding */
-#define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING)
-#define MAGIC_APPLE 0x000800 /* Return the Apple creator and type */
-
-#define MAGIC_NO_CHECK_COMPRESS 0x001000 /* Don't check for compressed files */
-#define MAGIC_NO_CHECK_TAR 0x002000 /* Don't check for tar files */
-#define MAGIC_NO_CHECK_SOFT 0x004000 /* Don't check magic entries */
-#define MAGIC_NO_CHECK_APPTYPE 0x008000 /* Don't check application type */
-#define MAGIC_NO_CHECK_ELF 0x010000 /* Don't check for elf details */
-#define MAGIC_NO_CHECK_TEXT 0x020000 /* Don't check for text files */
-#define MAGIC_NO_CHECK_CDF 0x040000 /* Don't check for cdf files */
-#define MAGIC_NO_CHECK_TOKENS 0x100000 /* Don't check tokens */
-#define MAGIC_NO_CHECK_ENCODING 0x200000 /* Don't check text encodings */
-
-/* No built-in tests; only consult the magic file */
-#define MAGIC_NO_CHECK_BUILTIN ( \
- MAGIC_NO_CHECK_COMPRESS | \
- MAGIC_NO_CHECK_TAR | \
-/* MAGIC_NO_CHECK_SOFT | */ \
- MAGIC_NO_CHECK_APPTYPE | \
- MAGIC_NO_CHECK_ELF | \
- MAGIC_NO_CHECK_TEXT | \
- MAGIC_NO_CHECK_CDF | \
- MAGIC_NO_CHECK_TOKENS | \
- MAGIC_NO_CHECK_ENCODING | \
- 0 \
-)
-
-/* Defined for backwards compatibility (renamed) */
-#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT
-
-/* Defined for backwards compatibility; do nothing */
-#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */
-#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */
-
-#define MAGIC_VERSION 518 /* This implementation */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct magic_set *magic_t;
-magic_t magic_open(int);
-void magic_close(magic_t);
-
-const char *magic_getpath(const char *, int);
-const char *magic_file(magic_t, const char *);
-const char *magic_descriptor(magic_t, int);
-const char *magic_buffer(magic_t, const void *, size_t);
-
-const char *magic_error(magic_t);
-int magic_setflags(magic_t, int);
-
-int magic_version(void);
-int magic_load(magic_t, const char *);
-int magic_compile(magic_t, const char *);
-int magic_check(magic_t, const char *);
-int magic_list(magic_t, const char *);
-int magic_errno(magic_t);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _MAGIC_H */
Deleted: trunk/contrib/file/magic.h.in
===================================================================
--- trunk/contrib/file/magic.h.in 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic.h.in 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) Christos Zoulas 2003.
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef _MAGIC_H
-#define _MAGIC_H
-
-#include <sys/types.h>
-
-#define MAGIC_NONE 0x000000 /* No flags */
-#define MAGIC_DEBUG 0x000001 /* Turn on debugging */
-#define MAGIC_SYMLINK 0x000002 /* Follow symlinks */
-#define MAGIC_COMPRESS 0x000004 /* Check inside compressed files */
-#define MAGIC_DEVICES 0x000008 /* Look at the contents of devices */
-#define MAGIC_MIME_TYPE 0x000010 /* Return the MIME type */
-#define MAGIC_CONTINUE 0x000020 /* Return all matches */
-#define MAGIC_CHECK 0x000040 /* Print warnings to stderr */
-#define MAGIC_PRESERVE_ATIME 0x000080 /* Restore access time on exit */
-#define MAGIC_RAW 0x000100 /* Don't translate unprintable chars */
-#define MAGIC_ERROR 0x000200 /* Handle ENOENT etc as real errors */
-#define MAGIC_MIME_ENCODING 0x000400 /* Return the MIME encoding */
-#define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING)
-#define MAGIC_APPLE 0x000800 /* Return the Apple creator and type */
-
-#define MAGIC_NO_CHECK_COMPRESS 0x001000 /* Don't check for compressed files */
-#define MAGIC_NO_CHECK_TAR 0x002000 /* Don't check for tar files */
-#define MAGIC_NO_CHECK_SOFT 0x004000 /* Don't check magic entries */
-#define MAGIC_NO_CHECK_APPTYPE 0x008000 /* Don't check application type */
-#define MAGIC_NO_CHECK_ELF 0x010000 /* Don't check for elf details */
-#define MAGIC_NO_CHECK_TEXT 0x020000 /* Don't check for text files */
-#define MAGIC_NO_CHECK_CDF 0x040000 /* Don't check for cdf files */
-#define MAGIC_NO_CHECK_TOKENS 0x100000 /* Don't check tokens */
-#define MAGIC_NO_CHECK_ENCODING 0x200000 /* Don't check text encodings */
-
-/* No built-in tests; only consult the magic file */
-#define MAGIC_NO_CHECK_BUILTIN ( \
- MAGIC_NO_CHECK_COMPRESS | \
- MAGIC_NO_CHECK_TAR | \
-/* MAGIC_NO_CHECK_SOFT | */ \
- MAGIC_NO_CHECK_APPTYPE | \
- MAGIC_NO_CHECK_ELF | \
- MAGIC_NO_CHECK_TEXT | \
- MAGIC_NO_CHECK_CDF | \
- MAGIC_NO_CHECK_TOKENS | \
- MAGIC_NO_CHECK_ENCODING | \
- 0 \
-)
-
-/* Defined for backwards compatibility (renamed) */
-#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT
-
-/* Defined for backwards compatibility; do nothing */
-#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */
-#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */
-
-#define MAGIC_VERSION X.YY /* This implementation */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct magic_set *magic_t;
-magic_t magic_open(int);
-void magic_close(magic_t);
-
-const char *magic_getpath(const char *, int);
-const char *magic_file(magic_t, const char *);
-const char *magic_descriptor(magic_t, int);
-const char *magic_buffer(magic_t, const void *, size_t);
-
-const char *magic_error(magic_t);
-int magic_setflags(magic_t, int);
-
-int magic_version(void);
-int magic_load(magic_t, const char *);
-int magic_compile(magic_t, const char *);
-int magic_check(magic_t, const char *);
-int magic_list(magic_t, const char *);
-int magic_errno(magic_t);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* _MAGIC_H */
Deleted: trunk/contrib/file/magic.man
===================================================================
--- trunk/contrib/file/magic.man 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic.man 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,713 +0,0 @@
-.\" $File: magic.man,v 1.84 2014/06/03 19:01:34 christos Exp $
-.Dd June 3, 2014
-.Dt MAGIC __FSECTION__
-.Os
-.\" install as magic.4 on USG, magic.5 on V7, Berkeley and Linux systems.
-.Sh NAME
-.Nm magic
-.Nd file command's magic pattern file
-.Sh DESCRIPTION
-This manual page documents the format of the magic file as
-used by the
-.Xr file __CSECTION__
-command, version __VERSION__.
-The
-.Xr file __CSECTION__
-command identifies the type of a file using,
-among other tests,
-a test for whether the file contains certain
-.Dq "magic patterns" .
-The file
-.Pa __MAGIC__
-specifies what patterns are to be tested for, what message or
-MIME type to print if a particular pattern is found,
-and additional information to extract from the file.
-.Pp
-Each line of the file specifies a test to be performed.
-A test compares the data starting at a particular offset
-in the file with a byte value, a string or a numeric value.
-If the test succeeds, a message is printed.
-The line consists of the following fields:
-.Bl -tag -width ".Dv message"
-.It Dv offset
-A number specifying the offset, in bytes, into the file of the data
-which is to be tested.
-.It Dv type
-The type of the data to be tested.
-The possible values are:
-.Bl -tag -width ".Dv lestring16"
-.It Dv byte
-A one-byte value.
-.It Dv short
-A two-byte value in this machine's native byte order.
-.It Dv long
-A four-byte value in this machine's native byte order.
-.It Dv quad
-An eight-byte value in this machine's native byte order.
-.It Dv float
-A 32-bit single precision IEEE floating point number in this machine's native byte order.
-.It Dv double
-A 64-bit double precision IEEE floating point number in this machine's native byte order.
-.It Dv string
-A string of bytes.
-The string type specification can be optionally followed
-by /[WwcCtbT]*.
-The
-.Dq W
-flag compacts whitespace in the target, which must
-contain at least one whitespace character.
-If the magic has
-.Dv n
-consecutive blanks, the target needs at least
-.Dv n
-consecutive blanks to match.
-The
-.Dq w
-flag treats every blank in the magic as an optional blank.
-The
-.Dq c
-flag specifies case insensitive matching: lower case
-characters in the magic match both lower and upper case characters in the
-target, whereas upper case characters in the magic only match upper case
-characters in the target.
-The
-.Dq C
-flag specifies case insensitive matching: upper case
-characters in the magic match both lower and upper case characters in the
-target, whereas lower case characters in the magic only match upper case
-characters in the target.
-To do a complete case insensitive match, specify both
-.Dq c
-and
-.Dq C .
-The
-.Dq t
-flag forces the test to be done for text files, while the
-.Dq b
-flag forces the test to be done for binary files.
-The
-.Dq T
-flag causes the string to be trimmed, i.e. leading and trailing whitespace
-is deleted before the string is printed.
-.It Dv pstring
-A Pascal-style string where the first byte/short/int is interpreted as the
-unsigned length.
-The length defaults to byte and can be specified as a modifier.
-The following modifiers are supported:
-.Bl -tag -compact -width B
-.It B
-A byte length (default).
-.It H
-A 2 byte big endian length.
-.It h
-A 2 byte big little length.
-.It L
-A 4 byte big endian length.
-.It l
-A 4 byte big little length.
-.It J
-The length includes itself in its count.
-.El
-The string is not NUL terminated.
-.Dq J
-is used rather than the more
-valuable
-.Dq I
-because this type of length is a feature of the JPEG
-format.
-.It Dv date
-A four-byte value interpreted as a UNIX date.
-.It Dv qdate
-A eight-byte value interpreted as a UNIX date.
-.It Dv ldate
-A four-byte value interpreted as a UNIX-style date, but interpreted as
-local time rather than UTC.
-.It Dv qldate
-An eight-byte value interpreted as a UNIX-style date, but interpreted as
-local time rather than UTC.
-.It Dv qwdate
-An eight-byte value interpreted as a Windows-style date.
-.It Dv beid3
-A 32-bit ID3 length in big-endian byte order.
-.It Dv beshort
-A two-byte value in big-endian byte order.
-.It Dv belong
-A four-byte value in big-endian byte order.
-.It Dv bequad
-An eight-byte value in big-endian byte order.
-.It Dv befloat
-A 32-bit single precision IEEE floating point number in big-endian byte order.
-.It Dv bedouble
-A 64-bit double precision IEEE floating point number in big-endian byte order.
-.It Dv bedate
-A four-byte value in big-endian byte order,
-interpreted as a Unix date.
-.It Dv beqdate
-An eight-byte value in big-endian byte order,
-interpreted as a Unix date.
-.It Dv beldate
-A four-byte value in big-endian byte order,
-interpreted as a UNIX-style date, but interpreted as local time rather
-than UTC.
-.It Dv beqldate
-An eight-byte value in big-endian byte order,
-interpreted as a UNIX-style date, but interpreted as local time rather
-than UTC.
-.It Dv beqwdate
-An eight-byte value in big-endian byte order,
-interpreted as a Windows-style date.
-.It Dv bestring16
-A two-byte unicode (UCS16) string in big-endian byte order.
-.It Dv leid3
-A 32-bit ID3 length in little-endian byte order.
-.It Dv leshort
-A two-byte value in little-endian byte order.
-.It Dv lelong
-A four-byte value in little-endian byte order.
-.It Dv lequad
-An eight-byte value in little-endian byte order.
-.It Dv lefloat
-A 32-bit single precision IEEE floating point number in little-endian byte order.
-.It Dv ledouble
-A 64-bit double precision IEEE floating point number in little-endian byte order.
-.It Dv ledate
-A four-byte value in little-endian byte order,
-interpreted as a UNIX date.
-.It Dv leqdate
-An eight-byte value in little-endian byte order,
-interpreted as a UNIX date.
-.It Dv leldate
-A four-byte value in little-endian byte order,
-interpreted as a UNIX-style date, but interpreted as local time rather
-than UTC.
-.It Dv leqldate
-An eight-byte value in little-endian byte order,
-interpreted as a UNIX-style date, but interpreted as local time rather
-than UTC.
-.It Dv leqwdate
-An eight-byte value in little-endian byte order,
-interpreted as a Windows-style date.
-.It Dv lestring16
-A two-byte unicode (UCS16) string in little-endian byte order.
-.It Dv melong
-A four-byte value in middle-endian (PDP-11) byte order.
-.It Dv medate
-A four-byte value in middle-endian (PDP-11) byte order,
-interpreted as a UNIX date.
-.It Dv meldate
-A four-byte value in middle-endian (PDP-11) byte order,
-interpreted as a UNIX-style date, but interpreted as local time rather
-than UTC.
-.It Dv indirect
-Starting at the given offset, consult the magic database again.
-.It Dv name
-Define a
-.Dq named
-magic instance that can be called from another
-.Dv use
-magic entry, like a subroutine call.
-Named instance direct magic offsets are relative to the offset of the
-previous matched entry, but indirect offsets are relative to the beginning
-of the file as usual.
-Named magic entries always match.
-.It Dv use
-Recursively call the named magic starting from the current offset.
-If the name of the referenced begins with a
-.Dv ^
-then the endianness of the magic is switched; if the magic mentioned
-.Dv leshort
-for example,
-it is treated as
-.Dv beshort
-and vice versa.
-This is useful to avoid duplicating the rules for different endianness.
-.It Dv regex
-A regular expression match in extended POSIX regular expression syntax
-(like egrep).
-Regular expressions can take exponential time to process, and their
-performance is hard to predict, so their use is discouraged.
-When used in production environments, their performance
-should be carefully checked.
-The size of the string to search should also be limited by specifying
-.Dv /<length> ,
-to avoid performance issues scanning long files.
-The type specification can also be optionally followed by
-.Dv /[c][s][l] .
-The
-.Dq c
-flag makes the match case insensitive, while the
-.Dq s
-flag update the offset to the start offset of the match, rather than the end.
-The
-.Dq l
-modifier, changes the limit of length to mean number of lines instead of a
-byte count.
-Lines are delimited by the platforms native line delimiter.
-When a line count is specified, an implicit byte count also computed assuming
-each line is 80 characters long.
-If neither a byte or line count is specified, the search is limited automatically
-to 8KiB.
-.Dv ^
-and
-.Dv $
-match the beginning and end of individual lines, respectively,
-not beginning and end of file.
-.It Dv search
-A literal string search starting at the given offset.
-The same modifier flags can be used as for string patterns.
-The search expression must contain the range in the form
-.Dv /number,
-that is the number of positions at which the match will be
-attempted, starting from the start offset.
-This is suitable for
-searching larger binary expressions with variable offsets, using
-.Dv \e
-escapes for special characters.
-The order of modifier and number is not relevant.
-.It Dv default
-This is intended to be used with the test
-.Em x
-(which is always true) and it has no type.
-It matches when no other test at that continuation level has matched before.
-Clearing that matched tests for a continuation level, can be done using the
-.Dv clear
-test.
-.It Dv clear
-This test is always true and clears the match flag for that continuation level.
-It is intended to be used with the
-.Dv default
-test.
-.El
-.Pp
-For compatibility with the Single
-.Ux
-Standard, the type specifiers
-.Dv dC
-and
-.Dv d1
-are equivalent to
-.Dv byte ,
-the type specifiers
-.Dv uC
-and
-.Dv u1
-are equivalent to
-.Dv ubyte ,
-the type specifiers
-.Dv dS
-and
-.Dv d2
-are equivalent to
-.Dv short ,
-the type specifiers
-.Dv uS
-and
-.Dv u2
-are equivalent to
-.Dv ushort ,
-the type specifiers
-.Dv dI ,
-.Dv dL ,
-and
-.Dv d4
-are equivalent to
-.Dv long ,
-the type specifiers
-.Dv uI ,
-.Dv uL ,
-and
-.Dv u4
-are equivalent to
-.Dv ulong ,
-the type specifier
-.Dv d8
-is equivalent to
-.Dv quad ,
-the type specifier
-.Dv u8
-is equivalent to
-.Dv uquad ,
-and the type specifier
-.Dv s
-is equivalent to
-.Dv string .
-In addition, the type specifier
-.Dv dQ
-is equivalent to
-.Dv quad
-and the type specifier
-.Dv uQ
-is equivalent to
-.Dv uquad .
-.Pp
-Each top-level magic pattern (see below for an explanation of levels)
-is classified as text or binary according to the types used.
-Types
-.Dq regex
-and
-.Dq search
-are classified as text tests, unless non-printable characters are used
-in the pattern.
-All other tests are classified as binary.
-A top-level
-pattern is considered to be a test text when all its patterns are text
-patterns; otherwise, it is considered to be a binary pattern.
-When
-matching a file, binary patterns are tried first; if no match is
-found, and the file looks like text, then its encoding is determined
-and the text patterns are tried.
-.Pp
-The numeric types may optionally be followed by
-.Dv \*[Am]
-and a numeric value,
-to specify that the value is to be AND'ed with the
-numeric value before any comparisons are done.
-Prepending a
-.Dv u
-to the type indicates that ordered comparisons should be unsigned.
-.It Dv test
-The value to be compared with the value from the file.
-If the type is
-numeric, this value
-is specified in C form; if it is a string, it is specified as a C string
-with the usual escapes permitted (e.g. \en for new-line).
-.Pp
-Numeric values
-may be preceded by a character indicating the operation to be performed.
-It may be
-.Dv = ,
-to specify that the value from the file must equal the specified value,
-.Dv \*[Lt] ,
-to specify that the value from the file must be less than the specified
-value,
-.Dv \*[Gt] ,
-to specify that the value from the file must be greater than the specified
-value,
-.Dv \*[Am] ,
-to specify that the value from the file must have set all of the bits
-that are set in the specified value,
-.Dv ^ ,
-to specify that the value from the file must have clear any of the bits
-that are set in the specified value, or
-.Dv ~ ,
-the value specified after is negated before tested.
-.Dv x ,
-to specify that any value will match.
-If the character is omitted, it is assumed to be
-.Dv = .
-Operators
-.Dv \*[Am] ,
-.Dv ^ ,
-and
-.Dv ~
-don't work with floats and doubles.
-The operator
-.Dv !\&
-specifies that the line matches if the test does
-.Em not
-succeed.
-.Pp
-Numeric values are specified in C form; e.g.
-.Dv 13
-is decimal,
-.Dv 013
-is octal, and
-.Dv 0x13
-is hexadecimal.
-.Pp
-Numeric operations are not performed on date types, instead the numeric
-value is interpreted as an offset.
-.Pp
-For string values, the string from the
-file must match the specified string.
-The operators
-.Dv = ,
-.Dv \*[Lt]
-and
-.Dv \*[Gt]
-(but not
-.Dv \*[Am] )
-can be applied to strings.
-The length used for matching is that of the string argument
-in the magic file.
-This means that a line can match any non-empty string (usually used to
-then print the string), with
-.Em \*[Gt]\e0
-(because all non-empty strings are greater than the empty string).
-.Pp
-Dates are treated as numerical values in the respective internal
-representation.
-.Pp
-The special test
-.Em x
-always evaluates to true.
-.It Dv message
-The message to be printed if the comparison succeeds.
-If the string contains a
-.Xr printf 3
-format specification, the value from the file (with any specified masking
-performed) is printed using the message as the format string.
-If the string begins with
-.Dq \eb ,
-the message printed is the remainder of the string with no whitespace
-added before it: multiple matches are normally separated by a single
-space.
-.El
-.Pp
-An APPLE 4+4 character APPLE creator and type can be specified as:
-.Bd -literal -offset indent
-!:apple CREATYPE
-.Ed
-.Pp
-A MIME type is given on a separate line, which must be the next
-non-blank or comment line after the magic line that identifies the
-file type, and has the following format:
-.Bd -literal -offset indent
-!:mime MIMETYPE
-.Ed
-.Pp
-i.e. the literal string
-.Dq !:mime
-followed by the MIME type.
-.Pp
-An optional strength can be supplied on a separate line which refers to
-the current magic description using the following format:
-.Bd -literal -offset indent
-!:strength OP VALUE
-.Ed
-.Pp
-The operand
-.Dv OP
-can be:
-.Dv + ,
-.Dv - ,
-.Dv * ,
-or
-.Dv /
-and
-.Dv VALUE
-is a constant between 0 and 255.
-This constant is applied using the specified operand
-to the currently computed default magic strength.
-.Pp
-Some file formats contain additional information which is to be printed
-along with the file type or need additional tests to determine the true
-file type.
-These additional tests are introduced by one or more
-.Em \*[Gt]
-characters preceding the offset.
-The number of
-.Em \*[Gt]
-on the line indicates the level of the test; a line with no
-.Em \*[Gt]
-at the beginning is considered to be at level 0.
-Tests are arranged in a tree-like hierarchy:
-if the test on a line at level
-.Em n
-succeeds, all following tests at level
-.Em n+1
-are performed, and the messages printed if the tests succeed, until a line
-with level
-.Em n
-(or less) appears.
-For more complex files, one can use empty messages to get just the
-"if/then" effect, in the following way:
-.Bd -literal -offset indent
-0 string MZ
-\*[Gt]0x18 leshort \*[Lt]0x40 MS-DOS executable
-\*[Gt]0x18 leshort \*[Gt]0x3f extended PC executable (e.g., MS Windows)
-.Ed
-.Pp
-Offsets do not need to be constant, but can also be read from the file
-being examined.
-If the first character following the last
-.Em \*[Gt]
-is a
-.Em \&(
-then the string after the parenthesis is interpreted as an indirect offset.
-That means that the number after the parenthesis is used as an offset in
-the file.
-The value at that offset is read, and is used again as an offset
-in the file.
-Indirect offsets are of the form:
-.Em (( x [.[bislBISL]][+\-][ y ]) .
-The value of
-.Em x
-is used as an offset in the file.
-A byte, id3 length, short or long is read at that offset depending on the
-.Em [bislBISLm]
-type specifier.
-The capitalized types interpret the number as a big endian
-value, whereas the small letter versions interpret the number as a little
-endian value;
-the
-.Em m
-type interprets the number as a middle endian (PDP-11) value.
-To that number the value of
-.Em y
-is added and the result is used as an offset in the file.
-The default type if one is not specified is long.
-.Pp
-That way variable length structures can be examined:
-.Bd -literal -offset indent
-# MS Windows executables are also valid MS-DOS executables
-0 string MZ
-\*[Gt]0x18 leshort \*[Lt]0x40 MZ executable (MS-DOS)
-# skip the whole block below if it is not an extended executable
-\*[Gt]0x18 leshort \*[Gt]0x3f
-\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows)
-\*[Gt]\*[Gt](0x3c.l) string LX\e0\e0 LX executable (OS/2)
-.Ed
-.Pp
-This strategy of examining has a drawback: You must make sure that
-you eventually print something, or users may get empty output (like, when
-there is neither PE\e0\e0 nor LE\e0\e0 in the above example)
-.Pp
-If this indirect offset cannot be used directly, simple calculations are
-possible: appending
-.Em [+-*/%\*[Am]|^]number
-inside parentheses allows one to modify
-the value read from the file before it is used as an offset:
-.Bd -literal -offset indent
-# MS Windows executables are also valid MS-DOS executables
-0 string MZ
-# sometimes, the value at 0x18 is less that 0x40 but there's still an
-# extended executable, simply appended to the file
-\*[Gt]0x18 leshort \*[Lt]0x40
-\*[Gt]\*[Gt](4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP)
-\*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS)
-.Ed
-.Pp
-Sometimes you do not know the exact offset as this depends on the length or
-position (when indirection was used before) of preceding fields.
-You can specify an offset relative to the end of the last up-level
-field using
-.Sq \*[Am]
-as a prefix to the offset:
-.Bd -literal -offset indent
-0 string MZ
-\*[Gt]0x18 leshort \*[Gt]0x3f
-\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows)
-# immediately following the PE signature is the CPU type
-\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x14c for Intel 80386
-\*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x184 for DEC Alpha
-.Ed
-.Pp
-Indirect and relative offsets can be combined:
-.Bd -literal -offset indent
-0 string MZ
-\*[Gt]0x18 leshort \*[Lt]0x40
-\*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS)
-# if it's not COFF, go back 512 bytes and add the offset taken
-# from byte 2/3, which is yet another way of finding the start
-# of the extended executable
-\*[Gt]\*[Gt]\*[Gt]\*[Am](2.s-514) string LE LE executable (MS Windows VxD driver)
-.Ed
-.Pp
-Or the other way around:
-.Bd -literal -offset indent
-0 string MZ
-\*[Gt]0x18 leshort \*[Gt]0x3f
-\*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows)
-# at offset 0x80 (-4, since relative offsets start at the end
-# of the up-level match) inside the LE header, we find the absolute
-# offset to the code area, where we look for a specific signature
-\*[Gt]\*[Gt]\*[Gt](\*[Am]0x7c.l+0x26) string UPX \eb, UPX compressed
-.Ed
-.Pp
-Or even both!
-.Bd -literal -offset indent
-0 string MZ
-\*[Gt]0x18 leshort \*[Gt]0x3f
-\*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows)
-# at offset 0x58 inside the LE header, we find the relative offset
-# to a data area where we look for a specific signature
-\*[Gt]\*[Gt]\*[Gt]\*[Am](\*[Am]0x54.l-3) string UNACE \eb, ACE self-extracting archive
-.Ed
-.Pp
-If you have to deal with offset/length pairs in your file, even the
-second value in a parenthesized expression can be taken from the file itself,
-using another set of parentheses.
-Note that this additional indirect offset is always relative to the
-start of the main indirect offset.
-.Bd -literal -offset indent
-0 string MZ
-\*[Gt]0x18 leshort \*[Gt]0x3f
-\*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows)
-# search for the PE section called ".idata"...
-\*[Gt]\*[Gt]\*[Gt]\*[Am]0xf4 search/0x140 .idata
-# ...and go to the end of it, calculated from start+length;
-# these are located 14 and 10 bytes after the section name
-\*[Gt]\*[Gt]\*[Gt]\*[Gt](\*[Am]0xe.l+(-4)) string PK\e3\e4 \eb, ZIP self-extracting archive
-.Ed
-.Pp
-If you have a list of known avalues at a particular continuation level,
-and you want to provide a switch-like default case:
-.Bd -literal -offset indent
-# clear that continuation level match
-\*[Gt]18 clear
-\*[Gt]18 lelong 1 one
-\*[Gt]18 lelong 2 two
-\*[Gt]18 default x
-# print default match
-\*[Gt]\*[Gt]18 lelong x unmatched 0x%x
-.Ed
-.Sh SEE ALSO
-.Xr file __CSECTION__
-\- the command that reads this file.
-.Sh BUGS
-The formats
-.Dv long ,
-.Dv belong ,
-.Dv lelong ,
-.Dv melong ,
-.Dv short ,
-.Dv beshort ,
-and
-.Dv leshort
-do not depend on the length of the C data types
-.Dv short
-and
-.Dv long
-on the platform, even though the Single
-.Ux
-Specification implies that they do. However, as OS X Mountain Lion has
-passed the Single
-.Ux
-Specification validation suite, and supplies a version of
-.Xr file __CSECTION__
-in which they do not depend on the sizes of the C data types and that is
-built for a 64-bit environment in which
-.Dv long
-is 8 bytes rather than 4 bytes, presumably the validation suite does not
-test whether, for example
-.Dv long
-refers to an item with the same size as the C data type
-.Dv long .
-There should probably be
-.Dv type
-names
-.Dv int8 ,
-.Dv uint8 ,
-.Dv int16 ,
-.Dv uint16 ,
-.Dv int32 ,
-.Dv uint32 ,
-.Dv int64 ,
-and
-.Dv uint64 ,
-and specified-byte-order variants of them,
-to make it clearer that those types have specified widths.
-.\"
-.\" From: guy at sun.uucp (Guy Harris)
-.\" Newsgroups: net.bugs.usg
-.\" Subject: /etc/magic's format isn't well documented
-.\" Message-ID: <2752 at sun.uucp>
-.\" Date: 3 Sep 85 08:19:07 GMT
-.\" Organization: Sun Microsystems, Inc.
-.\" Lines: 136
-.\"
-.\" Here's a manual page for the format accepted by the "file" made by adding
-.\" the changes I posted to the S5R2 version.
-.\"
-.\" Modified for Ian Darwin's version of the file command.
Deleted: trunk/contrib/file/magic.mime
===================================================================
--- trunk/contrib/file/magic.mime 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic.mime 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,20660 +0,0 @@
-
-#------------------------------------------------------------------------------
-# $File: acorn,v 1.5 2009/09/19 16:28:07 christos Exp $
-# acorn: file(1) magic for files found on Acorn systems
-#
-
-# RISC OS Chunk File Format
-# From RISC OS Programmer's Reference Manual, Appendix D
-# We guess the file type from the type of the first chunk.
-0 lelong 0xc3cbc6c5 RISC OS Chunk data
->12 string OBJ_ \b, AOF object
->12 string LIB_ \b, ALF library
-
-# RISC OS AIF, contains "SWI OS_Exit" at offset 16.
-16 lelong 0xef000011 RISC OS AIF executable
-
-# RISC OS Draw files
-# From RISC OS Programmer's Reference Manual, Appendix E
-0 string Draw RISC OS Draw file data
-
-# RISC OS new format font files
-# From RISC OS Programmer's Reference Manual, Appendix E
-0 string FONT\0 RISC OS outline font data,
->5 byte x version %d
-0 string FONT\1 RISC OS 1bpp font data,
->5 byte x version %d
-0 string FONT\4 RISC OS 4bpp font data
->5 byte x version %d
-
-# RISC OS Music files
-# From RISC OS Programmer's Reference Manual, Appendix E
-0 string Maestro\r RISC OS music file
->8 byte x version %d
-
->8 byte x type %d
-
-# Digital Symphony data files
-# From: Bernard Jungen (bern8817 at euphonynet.be)
-0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS),
->8 byte x version %d,
->9 pstring x named "%s",
->(9.b+19) byte =0 8-bit logarithmic
->(9.b+19) byte =1 LZW-compressed linear
->(9.b+19) byte =2 8-bit linear signed
->(9.b+19) byte =3 16-bit linear signed
->(9.b+19) byte =4 SigmaDelta-compressed linear
->(9.b+19) byte =5 SigmaDelta-compressed logarithmic
->(9.b+19) byte >5 unknown format
-
-0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS),
->8 byte x version %d,
->9 byte =1 1 voice,
->9 byte !1 %d voices,
->10 leshort =1 1 track,
->10 leshort !1 %d tracks,
->12 leshort =1 1 pattern
->12 leshort !1 %d patterns
-
-0 string \x02\x01\x13\x13\x10\x14\x12\x0e
->9 byte =0 Digital Symphony sequence (RISC OS),
->>8 byte x version %d,
->>10 byte =1 1 line,
->>10 byte !1 %d lines,
->>11 leshort =1 1 position
->>11 leshort !1 %d positions
->9 byte =1 Digital Symphony pattern data (RISC OS),
->>8 byte x version %d,
->>10 leshort =1 1 pattern
->>10 leshort !1 %d patterns
-
-#------------------------------------------------------------------------------
-# $File: adi,v 1.4 2009/09/19 16:28:07 christos Exp $
-# adi: file(1) magic for ADi's objects
-# From Gregory McGarry <g.mcgarry at ieee.org>
-#
-0 leshort 0x521c COFF DSP21k
->18 lelong &02 executable,
->18 lelong ^02
->>18 lelong &01 static object,
->>18 lelong ^01 relocatable object,
->18 lelong &010 stripped
->18 lelong ^010 not stripped
-
-#------------------------------------------------------------------------------
-# $File: adventure,v 1.14 2012/06/21 01:32:26 christos Exp $
-# adventure: file(1) magic for Adventure game files
-#
-# from Allen Garvin <earendil at faeryland.tamu-commerce.edu>
-# Edited by Dave Chapeskie <dchapes at ddm.on.ca> Jun 28, 1998
-# Edited by Chris Chittleborough <cchittleborough at yahoo.com.au>, March 2002
-#
-# ALAN
-# I assume there are other, lower versions, but these are the only ones I
-# saw in the archive.
-0 beshort 0x0206 ALAN game data
->2 byte <10 version 2.6%d
-
-
-# Infocom (see z-machine)
-#------------------------------------------------------------------------------
-# Z-machine: file(1) magic for Z-machine binaries.
-# Updated by Adam Buchbinder <adam.buchbinder at gmail.com>
-#
-#http://www.gnelson.demon.co.uk/zspec/sect11.html
-#http://www.jczorkmid.net/~jpenney/ZSpec11-latest.txt
-#http://en.wikipedia.org/wiki/Z-machine
-# The first byte is the Z-machine revision; it is always between 1 and 8. We
-# had false matches (for instance, inbig5.ocp from the Omega TeX extension as
-# well as an occasional MP3 file), so we sanity-check the version number.
-#
-# It might be possible to sanity-check the release number as well, as it seems
-# (at least in classic Infocom games) to always be a relatively small number,
-# always under 150 or so, but as this isn't rigorous, we'll wait on that until
-# it becomes clear that it's needed.
-#
-0 ubyte >0
->0 ubyte <9
->>16 belong&0xfe00f0f0 0x3030
->>>0 ubyte < 10
->>>>2 ubeshort < 10
->>>>>18 regex [0-9][0-9][0-9][0-9][0-9][0-9]
->>>>>>0 ubyte < 10 Infocom (Z-machine %d,
->>>>>>>2 ubeshort < 10 Release %d /
->>>>>>>>18 string >\0 Serial %.6s)
-!:strength + 40
-
-#------------------------------------------------------------------------------
-# Glulx: file(1) magic for Glulx binaries.
-#
-# I haven't checked for false matches yet.
-#
-0 string Glul Glulx game data
->4 beshort x (Version %d
->>6 byte x \b.%d
->>8 byte x \b.%d)
->36 string Info Compiled by Inform
-
-
-
-# For Quetzal and blorb magic see iff
-
-
-# TADS (Text Adventure Development System) version 2
-# All files are machine-independent (games compile to byte-code) and are tagged
-# with a version string of the form "V2.<digit>.<digit>\0".
-# Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
-0 string TADS2\ bin TADS
->9 belong !0x0A0D1A00 game data, CORRUPTED
->9 belong 0x0A0D1A00
->>13 string >\0 %s game data
-# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
-0 string TADS2\ rsc TADS
->9 belong !0x0A0D1A00 resource data, CORRUPTED
->9 belong 0x0A0D1A00
->>13 string >\0 %s resource data
-# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
-# 2-byte length N, the N-char name of the game file *without* a NUL (darn!),
-# "TADS2 save\n\r\032\0" and the interpreter version.
-0 string TADS2\ save/g TADS
->12 belong !0x0A0D1A00 saved game data, CORRUPTED
->12 belong 0x0A0D1A00
->>(16.s+32) string >\0 %s saved game data
-# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
-# version.
-0 string TADS2\ save TADS
->10 belong !0x0A0D1A00 saved game data, CORRUPTED
->10 belong 0x0A0D1A00
->>14 string >\0 %s saved game data
-
-# TADS (Text Adventure Development System) version 3
-# Game files start with "T3-image\015\012\032"
-0 string T3-image\015\012\032
->11 leshort x TADS 3 game data (format version %d)
-# Saved game files start with "T3-state-v####\015\012\032"
-# where #### is a format version number
-0 string T3-state-v
->14 string \015\012\032 TADS 3 saved game data (format version
->>10 byte x %c
->>11 byte x \b%c
->>12 byte x \b%c
->>13 byte x \b%c)
-
-# Danny Milosavljevic <danny.milo at gmx.net>
-# this are adrift (adventure game standard) game files, extension .taf
-# depending on version magic continues with 0x93453E6139FA (V 4.0)
-# 0x9445376139FA (V 3.90)
-# 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 Adrift game file
-#!:mime application/x-adrift
-
-#------------------------------------------------------------------------------
-# $File: allegro,v 1.4 2009/09/19 16:28:07 christos Exp $
-# allegro: file(1) magic for Allegro datafiles
-# Toby Deshane <hac at shoelace.digivill.net>
-#
-0 belong 0x736C6821 Allegro datafile (packed)
-0 belong 0x736C682E Allegro datafile (not packed/autodetect)
-0 belong 0x736C682B Allegro datafile (appended exe data)
-
-#------------------------------------------------------------------------------
-# $File: alliant,v 1.7 2009/09/19 16:28:07 christos Exp $
-# alliant: file(1) magic for Alliant FX series a.out files
-#
-# If the FX series is the one that had a processor with a 68K-derived
-# instruction set, the "short" should probably become "beshort" and the
-# "long" should probably become "belong".
-# If it's the i860-based one, they should probably become either the
-# big-endian or little-endian versions, depending on the mode they ran
-# the 860 in....
-#
-0 short 0420 0420 Alliant virtual executable
->2 short &0x0020 common library
->16 long >0 not stripped
-0 short 0421 0421 Alliant compact executable
->2 short &0x0020 common library
->16 long >0 not stripped
-
-#------------------------------------------------------------------------------
-# $File: amanda,v 1.5 2009/09/19 16:28:07 christos Exp $
-# amanda: file(1) magic for amanda file format
-#
-0 string AMANDA:\ AMANDA
->8 string TAPESTART\ DATE tape header file,
->>23 string X
->>>25 string >\ Unused %s
->>23 string >\ DATE %s
->8 string FILE\ dump file,
->>13 string >\ DATE %s
-
-#------------------------------------------------------------------------------
-# $File: amigaos,v 1.15 2012/06/21 01:13:59 christos Exp $
-# amigaos: file(1) magic for AmigaOS binary formats:
-
-#
-# From ignatios at cs.uni-bonn.de (Ignatios Souvatzis)
-#
-0 belong 0x000003fa AmigaOS shared library
-0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary
-0 belong 0x000003e7 AmigaOS object/library data
-#
-0 beshort 0xe310 Amiga Workbench
->2 beshort 1
->>48 byte 1 disk icon
->>48 byte 2 drawer icon
->>48 byte 3 tool icon
->>48 byte 4 project icon
->>48 byte 5 garbage icon
->>48 byte 6 device icon
->>48 byte 7 kickstart icon
->>48 byte 8 workbench application icon
->2 beshort >1 icon, vers. %d
-#
-# various sound formats from the Amiga
-# G=F6tz Waschk <waschk at informatik.uni-rostock.de>
-#
-0 string FC14 Future Composer 1.4 Module sound file
-0 string SMOD Future Composer 1.3 Module sound file
-0 string AON4artofnoise Art Of Noise Module sound file
-1 string MUGICIAN/SOFTEYES Mugician Module sound file
-58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file
-0 string Synth4.0 Synthesis Module sound file
-0 string ARP. The Holy Noise Module sound file
-0 string BeEp\0 JamCracker Module sound file
-0 string COSO\0 Hippel-COSO Module sound file
-# Too simple (short, pure ASCII, deep), MPi
-#26 string V.3 Brian Postma's Soundmon Module sound file v3
-#26 string BPSM Brian Postma's Soundmon Module sound file v3
-#26 string V.2 Brian Postma's Soundmon Module sound file v2
-
-# The following are from: "Stefan A. Haubenthal" <polluks at web.de>
-0 beshort 0x0f00 AmigaOS bitmap font
-0 beshort 0x0f03 AmigaOS outline font
-0 belong 0x80001001 AmigaOS outline tag
-0 string ##\ version catalog translation
-0 string EMOD\0 Amiga E module
-8 string ECXM\0 ECX module
-0 string/c @database AmigaGuide file
-
-# Amiga disk types
-#
-0 string RDSK Rigid Disk Block
->160 string x on %.24s
-0 string DOS\0 Amiga DOS disk
-0 string DOS\1 Amiga FFS disk
-0 string DOS\2 Amiga Inter DOS disk
-0 string DOS\3 Amiga Inter FFS disk
-0 string DOS\4 Amiga Fastdir DOS disk
-0 string DOS\5 Amiga Fastdir FFS disk
-0 string KICK Kickstart disk
-
-# From: Alex Beregszaszi <alex at fsn.hu>
-0 string LZX LZX compressed archive (Amiga)
-
-# From: Przemek Kramarczyk <pkramarczyk at gmail.com>
-0 string .KEY AmigaDOS script
-0 string .key AmigaDOS script
-
-#------------------------------------------------------------
-# $File: android,v 1.4 2014/06/03 19:01:34 christos Exp $
-# Various android related magic entries
-#------------------------------------------------------------
-
-# Dalvik .dex format. http://retrodev.com/android/dexformat.html
-# From <mkf at google.com> "Mike Fleming"
-# Fixed to avoid regexec 17 errors on some dex files
-# From <diff at lookout.com> "Tim Strazzere"
-0 string dex\n
->0 regex dex\n[0-9]{2}\0 Dalvik dex file
->4 string >000 version %s
-0 string dey\n
->0 regex dey\n[0-9]{2}\0 Dalvik dex file (optimized for host)
->4 string >000 version %s
-
-# http://android.stackexchange.com/questions/23357/\
-# is-there-a-way-to-look-inside-and-modify-an-adb-backup-created-file/\
-# 23608#23608
-0 string ANDROID\040BACKUP\n Android Backup
->15 string 1\n \b, version 1
->17 string 0\n \b, uncompressed
->17 string 1\n \b, compressed
->19 string none\n \b, unencrypted
->19 string AES-256\n \b, encrypted AES-256
-
-# Android bootimg format
-# From https://android.googlesource.com/\
-# platform/system/core/+/master/mkbootimg/bootimg.h
-0 string ANDROID! Android bootimg
->8 lelong >0 \b, kernel
->>12 lelong >0 \b (0x%x)
->16 lelong >0 \b, ramdisk
->>20 lelong >0 \b (0x%x)
->24 lelong >0 \b, second stage
->>28 lelong >0 \b (0x%x)
->36 lelong >0 \b, page size: %d
->38 string >0 \b, name: %s
->64 string >0 \b, cmdline (%s)
-# Dalvik .dex format. http://retrodev.com/android/dexformat.html
-# From <mkf at google.com> "Mike Fleming"
-# Fixed to avoid regexec 17 errors on some dex files
-# From <diff at lookout.com> "Tim Strazzere"
-0 string dex\n
->0 regex dex\n[0-9]{2}\0 Dalvik dex file
->4 string >000 version %s
-0 string dey\n
->0 regex dey\n[0-9]{2}\0 Dalvik dex file (optimized for host)
->4 string >000 version %s
-
-# http://android.stackexchange.com/questions/23357/\
-# is-there-a-way-to-look-inside-and-modify-an-adb-backup-created-file/\
-# 23608#23608
-0 string ANDROID\040BACKUP\n Android Backup
->15 string 1\n \b, version 1
->17 string 0\n \b, uncompressed
->17 string 1\n \b, compressed
->19 string none\n \b, unencrypted
->19 string AES-256\n \b, encrypted AES-256
-
-# Android bootimg format
-# From https://android.googlesource.com/\
-# platform/system/core/+/master/mkbootimg/bootimg.h
-0 string ANDROID! Android bootimg
->8 lelong >0 \b, kernel
->>12 lelong >0 \b (0x%x)
->16 lelong >0 \b, ramdisk
->>20 lelong >0 \b (0x%x)
->24 lelong >0 \b, second stage
->>28 lelong >0 \b (0x%x)
->36 lelong >0 \b, page size: %d
->38 string >0 \b, name: %s
->64 string >0 \b, cmdline (%s)
-
-# Android Backup archive
-# From: Ariel Shkedi
-# File extension: .ab
-# No mime-type defined
-# URL: https://github.com/android/platform_frameworks_base/blob/\
-# 0bacfd2ba68d21a68a3df345b830bc2a1e515b5a/services/java/com/\
-# android/server/BackupManagerService.java#L2367
-# After the header comes a tar file
-# If compressed, the entire tar file is compressed with JAVA deflate
-#
-# Include the version number hardcoded with the magic string to avoid
-# false positives
-0 string/b ANDROID\ BACKUP\n1\n Android Backup
->17 string 0\n \b, Not-Compressed
->17 string 1\n \b, Compressed
-# any string as long as it's not the word none (which is matched below)
->>19 regex/1l \^([^n\n]|n[^o]|no[^n]|non[^e]|none.+).* \b, Encrypted (%s)
->>19 string none\n \b, Not-Encrypted
-# Commented out because they don't seem useful to print
-# (but they are part of the header - the tar file comes after them):
-#>>>&1 regex/1l .* \b, Password salt: %s
-#>>>>&1 regex/1l .* \b, Master salt: %s
-#>>>>>&1 regex/1l .* \b, PBKDF2 rounds: %s
-#>>>>>>&1 regex/1l .* \b, IV: %s
-#>>>>>>>&1 regex/1l .* \b, Key: %s
-
-#------------------------------------------------------------------------------
-# $File: animation,v 1.53 2014/04/30 21:41:02 christos Exp $
-# animation: file(1) magic for animation/movie formats
-#
-# animation formats
-# MPEG, FLI, DL originally from vax at ccwf.cc.utexas.edu (VaX#n8)
-# FLC, SGI, Apple originally from Daniel Quinlan (quinlan at yggdrasil.com)
-
-# SGI and Apple formats
-0 string MOVI Silicon Graphics movie file
-!:mime video/x-sgi-movie
-4 string moov Apple QuickTime
-!:mime video/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)
-!:mime video/quicktime
-#4 string wide Apple QuickTime movie (unoptimized)
-#!:mime video/quicktime
-#4 string skip Apple QuickTime movie (modified)
-#!:mime video/quicktime
-#4 string free Apple QuickTime movie (modified)
-#!:mime video/quicktime
-4 string idsc Apple QuickTime image (fast start)
-!:mime image/x-quicktime
-#4 string idat Apple QuickTime image (unoptimized)
-#!:mime image/x-quicktime
-4 string pckg Apple QuickTime compressed archive
-!:mime application/x-quicktime-player
-4 string/W jP JPEG 2000 image
-!:mime image/jp2
-4 string ftyp ISO Media
->8 string isom \b, MPEG v4 system, version 1
-!:mime video/mp4
->8 string iso2 \b, MPEG v4 system, part 12 revision
->8 string mp41 \b, MPEG v4 system, version 1
-!:mime video/mp4
->8 string mp42 \b, MPEG v4 system, version 2
-!:mime video/mp4
->8 string mp7t \b, MPEG v4 system, MPEG v7 XML
->8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML
->8 string/W jp2 \b, JPEG 2000
-!:mime image/jp2
->8 string 3ge \b, MPEG v4 system, 3GPP
-!:mime video/3gpp
->8 string 3gg \b, MPEG v4 system, 3GPP
-!:mime video/3gpp
->8 string 3gp \b, MPEG v4 system, 3GPP
-!:mime video/3gpp
->8 string 3gs \b, MPEG v4 system, 3GPP
-!:mime video/3gpp
->8 string 3g2 \b, MPEG v4 system, 3GPP2
-!:mime video/3gpp2
->>11 byte 4 \b v4 (H.263/AMR GSM 6.10)
->>11 byte 5 \b v5 (H.263/AMR GSM 6.10)
->>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10)
->8 string mmp4 \b, MPEG v4 system, 3GPP Mobile
-!:mime video/mp4
->8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC
-!:mime video/3gpp
->8 string/W M4A \b, MPEG v4 system, iTunes AAC-LC
-!:mime audio/mp4
->8 string/W M4V \b, MPEG v4 system, iTunes AVC-LC
-!:mime video/mp4
->8 string/W M4P \b, MPEG v4 system, iTunes AES encrypted
->8 string/W M4B \b, MPEG v4 system, iTunes bookmarked
->8 string/W qt \b, Apple QuickTime movie
-!:mime video/quicktime
-
-# MPEG sequences
-# Scans for all common MPEG header start codes
-0 belong 0x00000001
->4 byte&0x1F 0x07 JVT NAL sequence, H.264 video
->>5 byte 66 \b, baseline
->>5 byte 77 \b, main
->>5 byte 88 \b, extended
->>7 byte x \b @ L %u
-0 belong&0xFFFFFF00 0x00000100
->3 byte 0xBA MPEG sequence
-!:mime video/mpeg
->>4 byte &0x40 \b, v2, program multiplex
->>4 byte ^0x40 \b, v1, system multiplex
->3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header)
->3 byte&0x1F 0x07 MPEG sequence, H.264 video
->>4 byte 66 \b, baseline
->>4 byte 77 \b, main
->>4 byte 88 \b, extended
->>6 byte x \b @ L %u
-# GRR too general as it catches also FoxPro Memo example NG.FPT
->3 byte 0xB0 MPEG sequence, v4
-# TODO: maybe this extra line exclude FoxPro Memo example NG.FPT starting with 000001b0 00000100 00000000
-#>>4 byte !0 MPEG sequence, v4
-!:mime video/mpeg4-generic
->>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&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 MPEG sequence, v4
-!:mime video/mpeg4-generic
->>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&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 MPEG sequence
-!:mime video/mpeg
->>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 at HL
->>>17 byte&0xF0 96 \b at H-14
->>>17 byte&0xF0 128 \b at ML
->>>17 byte&0xF0 160 \b at 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 at HL
->>>>>145 byte&0xF0 96 \b at H-14
->>>>>145 byte&0xF0 128 \b at ML
->>>>>145 byte&0xF0 160 \b at 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 at HL
->>>81 byte&0xF0 96 \b at H-14
->>>81 byte&0xF0 128 \b at ML
->>>81 byte&0xF0 160 \b at 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 ADTS Audio (*.mpx/mxa/aac)
-# from dreesen at math.fu-berlin.de
-# modified to fully support MPEG ADTS
-
-# MP3, M1A
-# modified by Joerg Jenderek
-# GRR the original test are too common for many DOS files
-# so don't accept as MP3 until we've tested the rate
-0 beshort&0xFFFE 0xFFFA
-# rates
->2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps
-!:mime audio/mpeg
->2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps
-!:mime audio/mpeg
-# 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
-!:mime audio/mpeg
-# rates
->2 byte&0xF0 0x10 \b, 32 kbps
->2 byte&0xF0 0x20 \b, 48 kbps
->2 byte&0xF0 0x30 \b, 56 kbps
->2 byte&0xF0 0x40 \b, 64 kbps
->2 byte&0xF0 0x50 \b, 80 kbps
->2 byte&0xF0 0x60 \b, 96 kbps
->2 byte&0xF0 0x70 \b, 112 kbps
->2 byte&0xF0 0x80 \b, 128 kbps
->2 byte&0xF0 0x90 \b, 160 kbps
->2 byte&0xF0 0xA0 \b, 192 kbps
->2 byte&0xF0 0xB0 \b, 224 kbps
->2 byte&0xF0 0xC0 \b, 256 kbps
->2 byte&0xF0 0xD0 \b, 320 kbps
->2 byte&0xF0 0xE0 \b, 384 kbps
-# 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
-# updated by Joerg Jenderek
-# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448
-# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)
-# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries
-#0 beshort&0xFFFE 0xFFFE
-#>2 ubyte&0xF0 >0x0F
-#>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1
-## rate
-#>>>2 byte&0xF0 0x10 \b, 32 kbps
-#>>>2 byte&0xF0 0x20 \b, 64 kbps
-#>>>2 byte&0xF0 0x30 \b, 96 kbps
-#>>>2 byte&0xF0 0x40 \b, 128 kbps
-#>>>2 byte&0xF0 0x50 \b, 160 kbps
-#>>>2 byte&0xF0 0x60 \b, 192 kbps
-#>>>2 byte&0xF0 0x70 \b, 224 kbps
-#>>>2 byte&0xF0 0x80 \b, 256 kbps
-#>>>2 byte&0xF0 0x90 \b, 288 kbps
-#>>>2 byte&0xF0 0xA0 \b, 320 kbps
-#>>>2 byte&0xF0 0xB0 \b, 352 kbps
-#>>>2 byte&0xF0 0xC0 \b, 384 kbps
-#>>>2 byte&0xF0 0xD0 \b, 416 kbps
-#>>>2 byte&0xF0 0xE0 \b, 448 kbps
-## 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
-!:mime audio/mpeg
-# rate
->2 byte&0xF0 0x10 \b, 8 kbps
->2 byte&0xF0 0x20 \b, 16 kbps
->2 byte&0xF0 0x30 \b, 24 kbps
->2 byte&0xF0 0x40 \b, 32 kbps
->2 byte&0xF0 0x50 \b, 40 kbps
->2 byte&0xF0 0x60 \b, 48 kbps
->2 byte&0xF0 0x70 \b, 56 kbps
->2 byte&0xF0 0x80 \b, 64 kbps
->2 byte&0xF0 0x90 \b, 80 kbps
->2 byte&0xF0 0xA0 \b, 96 kbps
->2 byte&0xF0 0xB0 \b, 112 kbps
->2 byte&0xF0 0xC0 \b, 128 kbps
->2 byte&0xF0 0xD0 \b, 144 kbps
->2 byte&0xF0 0xE0 \b, 160 kbps
-# 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
-!:mime audio/mpeg
-# rate
->2 byte&0xF0 0x10 \b, 8 kbps
->2 byte&0xF0 0x20 \b, 16 kbps
->2 byte&0xF0 0x30 \b, 24 kbps
->2 byte&0xF0 0x40 \b, 32 kbps
->2 byte&0xF0 0x50 \b, 40 kbps
->2 byte&0xF0 0x60 \b, 48 kbps
->2 byte&0xF0 0x70 \b, 56 kbps
->2 byte&0xF0 0x80 \b, 64 kbps
->2 byte&0xF0 0x90 \b, 80 kbps
->2 byte&0xF0 0xA0 \b, 96 kbps
->2 byte&0xF0 0xB0 \b, 112 kbps
->2 byte&0xF0 0xC0 \b, 128 kbps
->2 byte&0xF0 0xD0 \b, 144 kbps
->2 byte&0xF0 0xE0 \b, 160 kbps
-# 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
-!:mime audio/mpeg
-# rate
->2 byte&0xF0 0x10 \b, 32 kbps
->2 byte&0xF0 0x20 \b, 48 kbps
->2 byte&0xF0 0x30 \b, 56 kbps
->2 byte&0xF0 0x40 \b, 64 kbps
->2 byte&0xF0 0x50 \b, 80 kbps
->2 byte&0xF0 0x60 \b, 96 kbps
->2 byte&0xF0 0x70 \b, 112 kbps
->2 byte&0xF0 0x80 \b, 128 kbps
->2 byte&0xF0 0x90 \b, 144 kbps
->2 byte&0xF0 0xA0 \b, 160 kbps
->2 byte&0xF0 0xB0 \b, 176 kbps
->2 byte&0xF0 0xC0 \b, 192 kbps
->2 byte&0xF0 0xD0 \b, 224 kbps
->2 byte&0xF0 0xE0 \b, 256 kbps
-# 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
-!:mime audio/mpeg
-# rate
->2 byte&0xF0 0x10 \b, 8 kbps
->2 byte&0xF0 0x20 \b, 16 kbps
->2 byte&0xF0 0x30 \b, 24 kbps
->2 byte&0xF0 0x40 \b, 32 kbps
->2 byte&0xF0 0x50 \b, 40 kbps
->2 byte&0xF0 0x60 \b, 48 kbps
->2 byte&0xF0 0x70 \b, 56 kbps
->2 byte&0xF0 0x80 \b, 64 kbps
->2 byte&0xF0 0x90 \b, 80 kbps
->2 byte&0xF0 0xA0 \b, 96 kbps
->2 byte&0xF0 0xB0 \b, 112 kbps
->2 byte&0xF0 0xC0 \b, 128 kbps
->2 byte&0xF0 0xD0 \b, 144 kbps
->2 byte&0xF0 0xE0 \b, 160 kbps
-# 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
-!:mime audio/x-hx-aac-adif
->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
-!:mime audio/x-hx-aac-adts
->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
->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
-!:mime audio/x-mp4a-latm
-#>1 beshort&0x1FFF x \b, %hu 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
-# This magic isn't strong enough (matches plausible ISO-8859-1 text)
-#0 beshort 0x4DE1 MPEG-4 LO-EP audio stream
-#!:mime audio/x-mp4a-latm
-
-# Summary: FLI animation format
-# Created by: Daniel Quinlan <quinlan at yggdrasil.com>
-# Modified by (1): Abel Cheung <abelcheung at gmail.com> (avoid over-generic detection)
-4 leshort 0xAF11
-# standard FLI always has 320x200 resolution and 8 bit color
->8 leshort 320
->>10 leshort 200
->>>12 leshort 8 FLI animation, 320x200x8
-!:mime video/x-fli
->>>>6 leshort x \b, %d frames
-# frame speed is multiple of 1/70s
->>>>16 leshort x \b, %d/70s per frame
-
-# Summary: FLC animation format
-# Created by: Daniel Quinlan <quinlan at yggdrasil.com>
-# Modified by (1): Abel Cheung <abelcheung at gmail.com> (avoid over-generic detection)
-4 leshort 0xAF12
-# standard FLC always use 8 bit color
->12 leshort 8 FLC animation
-!:mime video/x-flc
->>8 leshort x \b, %d
->>10 leshort x \bx%dx8
->>6 uleshort x \b, %d frames
->>16 uleshort x \b, %dms per frame
-
-# DL animation format
-# XXX - collision with most `mips' magic
-#
-# I couldn't find a real magic number for these, however, this
-# -appears- to work. Note that it might catch other files, too, so be
-# careful!
-#
-# Note that title and author appear in the two 20-byte chunks
-# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
-# 255 (hex FF)! The DL format is really bad.
-#
-#0 byte 1 DL version 1, medium format (160x100, 4 images/screen)
-#!:mime video/x-unknown
-#>42 byte x - %d screens,
-#>43 byte x %d commands
-#0 byte 2 DL version 2
-#!:mime video/x-unknown
-#>1 byte 1 - large format (320x200,1 image/screen),
-#>1 byte 2 - medium format (160x100,4 images/screen),
-#>1 byte >2 - unknown format,
-#>42 byte x %d screens,
-#>43 byte x %d commands
-# Based on empirical evidence, DL version 3 have several nulls following the
-# \003. Most of them start with non-null values at hex offset 0x34 or so.
-#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3
-
-# iso 13818 transport stream
-#
-# from Oskar Schirmer <schirmer at scara.com> Feb 3, 2001 (ISO 13818.1)
-# syncbyte 8 bit 0x47
-# error_ind 1 bit -
-# payload_start 1 bit 1
-# priority 1 bit -
-# PID 13 bit 0x0000
-# scrambling 2 bit -
-# adaptfld_ctrl 2 bit 1 or 3
-# conti_count 4 bit -
-0 belong&0xFF5FFF10 0x47400010
->188 byte 0x47 MPEG transport stream data
-
-# DIF digital video file format <mpruett at sgi.com>
-0 belong&0xffffff00 0x1f070000 DIF
->4 byte &0x01 (DVCPRO) movie file
->4 byte ^0x01 (DV) movie file
->3 byte &0x80 (PAL)
->3 byte ^0x80 (NTSC)
-
-# Microsoft Advanced Streaming Format (ASF) <mpruett at sgi.com>
-0 belong 0x3026b275 Microsoft ASF
-!:mime video/x-ms-asf
-
-# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
-0 string \x8aMNG MNG video data,
-!:mime video/x-mng
->4 belong !0x0d0a1a0a CORRUPTED,
->4 belong 0x0d0a1a0a
->>16 belong x %d x
->>20 belong x %d
-
-# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
-0 string \x8bJNG JNG video data,
-!:mime video/x-jng
->4 belong !0x0d0a1a0a CORRUPTED,
->4 belong 0x0d0a1a0a
->>16 belong x %d x
->>20 belong x %d
-
-# Vivo video (Wolfram Kleff)
-3 string \x0D\x0AVersion:Vivo Vivo video data
-
-# VRML (Virtual Reality Modelling Language)
-0 string/w #VRML\ V1.0\ ascii VRML 1 file
-!:mime model/vrml
-0 string/w #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file
-!:mime model/vrml
-
-# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd]
-# From Michel Briand <michelbriand at free.fr>
-0 string/t \<?xml\ version="
-!:strength +1
->20 search/1000/cw \<!DOCTYPE\ X3D X3D (Extensible 3D) model xml text
-!:mime model/x3d
-
-#---------------------------------------------------------------------------
-# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
-# From Mark Sheppard <msheppard at climax.co.uk>, 2002-10-03
-#
-0 string HVQM4 %s
->6 string >\0 v%s
->0 byte x GameCube movie,
->0x34 ubeshort x %d x
->0x36 ubeshort x %d,
->0x26 ubeshort x %dus,
->0x42 ubeshort 0 no audio
->0x42 ubeshort >0 %dHz audio
-
-# From: "Stefan A. Haubenthal" <polluks at web.de>
-0 string DVDVIDEO-VTS Video title set,
->0x21 byte x v%x
-0 string DVDVIDEO-VMG Video manager,
->0x21 byte x v%x
-
-# From: Behan Webster <behanw at websterwood.com>
-# NuppelVideo used by Mythtv (*.nuv)
-# Note: there are two identical stanzas here differing only in the
-# initial string matched. It used to be done with a regex, but we're
-# trying to get rid of those.
-0 string NuppelVideo MythTV NuppelVideo
->12 string x v%s
->20 lelong x (%d
->24 lelong x \bx%d),
->36 string P \bprogressive,
->36 string I \binterlaced,
->40 ledouble x \baspect:%.2f,
->48 ledouble x \bfps:%.2f
-0 string MythTV MythTV NuppelVideo
->12 string x v%s
->20 lelong x (%d
->24 lelong x \bx%d),
->36 string P \bprogressive,
->36 string I \binterlaced,
->40 ledouble x \baspect:%.2f,
->48 ledouble x \bfps:%.2f
-
-# MPEG file
-# MPEG sequences
-# FIXME: This section is from the old magic.mime file and needs
-# integrating with the rest
-#0 belong 0x000001BA
-#>4 byte &0x40
-#!:mime video/mp2p
-#>4 byte ^0x40
-#!:mime video/mpeg
-#0 belong 0x000001BB
-#!:mime video/mpeg
-#0 belong 0x000001B0
-#!:mime video/mp4v-es
-#0 belong 0x000001B5
-#!:mime video/mp4v-es
-#0 belong 0x000001B3
-#!:mime video/mpv
-#0 belong&0xFF5FFF10 0x47400010
-#!:mime video/mp2t
-#0 belong 0x00000001
-#>4 byte&0x1F 0x07
-#!:mime video/h264
-
-# Type: Bink Video
-# Extension: .bik
-# URL: http://wiki.multimedia.cx/index.php?title=Bink_Container
-# From: <hoehle at users.sourceforge.net> 2008-07-18
-0 string BIK Bink Video
->3 regex =[a-z] rev.%s
-#>4 ulelong x size %d
->20 ulelong x \b, %d
->24 ulelong x \bx%d
->8 ulelong x \b, %d frames
->32 ulelong x at rate %d/
->28 ulelong >1 \b%d
->40 ulelong =0 \b, no audio
->40 ulelong !0 \b, %d audio track
->>40 ulelong !1 \bs
-# follow properties of the first audio track only
->>48 uleshort x %dHz
->>51 byte&0x20 0 mono
->>51 byte&0x20 !0 stereo
-#>>51 byte&0x10 0 FFT
-#>>51 byte&0x10 !0 DCT
-
-# Type: NUT Container
-# URL: http://wiki.multimedia.cx/index.php?title=NUT
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-0 string nut/multimedia\ container\0 NUT multimedia container
-
-# Type: Nullsoft Video (NSV)
-# URL: http://wiki.multimedia.cx/index.php?title=Nullsoft_Video
-# From: Mike Melanson <mike at multimedia.cx>
-0 string NSVf Nullsoft Video
-
-# Type: REDCode Video
-# URL: http://www.red.com/ ; http://wiki.multimedia.cx/index.php?title=REDCode
-# From: Mike Melanson <mike at multimedia.cx>
-4 string RED1 REDCode Video
-
-# Type: MTV Multimedia File
-# URL: http://wiki.multimedia.cx/index.php?title=MTV
-# From: Mike Melanson <mike at multimedia.cx>
-0 string AMVS MTV Multimedia File
-
-# Type: ARMovie
-# URL: http://wiki.multimedia.cx/index.php?title=ARMovie
-# From: Mike Melanson <mike at multimedia.cx>
-0 string ARMovie\012 ARMovie
-
-# Type: Interplay MVE Movie
-# URL: http://wiki.multimedia.cx/index.php?title=Interplay_MVE
-# From: Mike Melanson <mike at multimedia.cx>
-0 string Interplay\040MVE\040File\032 Interplay MVE Movie
-
-# Type: Windows Television DVR File
-# URL: http://wiki.multimedia.cx/index.php?title=WTV
-# From: Mike Melanson <mike at mutlimedia.cx>
-# This takes the form of a Windows-style GUID
-0 bequad 0xB7D800203749DA11
->8 bequad 0xA64E0007E95EAD8D Windows Television DVR Media
-
-# Type: Sega FILM/CPK Multimedia
-# URL: http://wiki.multimedia.cx/index.php?title=Sega_FILM
-# From: Mike Melanson <mike at multimedia.cx>
-0 string FILM Sega FILM/CPK Multimedia,
->32 belong x %d x
->28 belong x %d
-
-# Type: Nintendo THP Multimedia
-# URL: http://wiki.multimedia.cx/index.php?title=THP
-# From: Mike Melanson <mike at multimedia.cx>
-0 string THP\0 Nintendo THP Multimedia
-
-# Type: BBC Dirac Video
-# URL: http://wiki.multimedia.cx/index.php?title=Dirac
-# From: Mike Melanson <mike at multimedia.cx>
-0 string BBCD BBC Dirac Video
-
-# Type: RAD Game Tools Smacker Multimedia
-# URL: http://wiki.multimedia.cx/index.php?title=Smacker
-# From: Mike Melanson <mike at multimedia.cx>
-0 string SMK RAD Game Tools Smacker Multimedia
->3 byte x version %c,
->4 lelong x %d x
->8 lelong x %d,
->12 lelong x %d frames
-
-#------------------------------------------------------------------------------
-# $File: aout,v 1.1 2013/01/09 22:37:23 christos Exp $
-# aout: file(1) magic for a.out executable/object/etc entries that
-# handle executables on multiple platforms.
-#
-
-#
-# Little-endian 32-bit-int a.out, merged from bsdi (for BSD/OS, from
-# BSDI), netbsd, and vax (for UNIX/32V and BSD)
-#
-# XXX - is there anything we can look at to distinguish BSD/OS 386 from
-# NetBSD 386 from various VAX binaries? The BSD/OS shared library flag
-# works only for binaries using shared libraries. Grabbing the entry
-# point from the a.out header, using it to find the first code executed
-# in the program, and looking at that might help.
-#
-0 lelong 0407 a.out little-endian 32-bit executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses BSD/OS shared libs)
-
-0 lelong 0410 a.out little-endian 32-bit pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses BSD/OS shared libs)
-
-0 lelong 0413 a.out little-endian 32-bit demand paged pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses BSD/OS shared libs)
-
-#
-# Big-endian 32-bit-int a.out, merged from sun (for old 68010 SunOS a.out),
-# mips (for old 68020(!) SGI a.out), and netbsd (for old big-endian a.out).
-#
-# XXX - is there anything we can look at to distinguish old SunOS 68010
-# from old 68020 IRIX from old NetBSD? Again, I guess we could look at
-# the first instruction or instructions in the program.
-#
-0 belong 0407 a.out big-endian 32-bit executable
->16 belong >0 not stripped
-
-0 belong 0410 a.out big-endian 32-bit pure executable
->16 belong >0 not stripped
-
-0 belong 0413 a.out big-endian 32-bit demand paged executable
->16 belong >0 not stripped
-
-
-#------------------------------------------------------------------------------
-# $File: apl,v 1.6 2009/09/19 16:28:07 christos Exp $
-# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL
-# workspaces)
-#
-0 long 0100554 APL workspace (Ken's original?)
-
-#------------------------------------------------------------------------------
-# $File: apple,v 1.29 2014/04/30 21:41:02 christos Exp $
-# apple: file(1) magic for Apple file formats
-#
-0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text
-0 string \x0aGL Binary II (apple ][) data
-0 string \x76\xff Squeezed (apple ][) data
-0 string NuFile NuFile archive (apple ][) data
-0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data
-0 belong 0x00051600 AppleSingle encoded Macintosh file
-0 belong 0x00051607 AppleDouble encoded Macintosh file
-
-# Type: Apple Emulator 2IMG format
-# From: Radek Vokal <rvokal at redhat.com>
-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 at helllabs.org>
-0 string package0 Newton package, NOS 1.x,
->12 belong &0x80000000 AutoRemove,
->12 belong &0x40000000 CopyProtect,
->12 belong &0x10000000 NoCompression,
->12 belong &0x04000000 Relocation,
->12 belong &0x02000000 UseFasterCompression,
->16 belong x version %d
-
-0 string package1 Newton package, NOS 2.x,
->12 belong &0x80000000 AutoRemove,
->12 belong &0x40000000 CopyProtect,
->12 belong &0x10000000 NoCompression,
->12 belong &0x04000000 Relocation,
->12 belong &0x02000000 UseFasterCompression,
->16 belong x version %d
-
-0 string package4 Newton package,
->8 byte 8 NOS 1.x,
->8 byte 9 NOS 2.x,
->12 belong &0x80000000 AutoRemove,
->12 belong &0x40000000 CopyProtect,
->12 belong &0x10000000 NoCompression,
-
-# The following entries for the Apple II are for files that have
-# been transferred as raw binary data from an Apple, without having
-# been encapsulated by any of the above archivers.
-#
-# In general, Apple II formats are hard to identify because Apple DOS
-# and especially Apple ProDOS have strong typing in the file system and
-# therefore programmers never felt much need to include type information
-# in the files themselves.
-#
-# Eric Fischer <enf at pobox.com>
-
-# AppleWorks word processor:
-#
-# This matches the standard tab stops for an AppleWorks file, but if
-# a file has a tab stop set in the first four columns this will fail.
-#
-# The "O" is really the magic number, but that's so common that it's
-# necessary to check the tab stops that follow it to avoid false positives.
-
-4 string O==== AppleWorks word processor data
->85 byte&0x01 >0 \b, zoomed
->90 byte&0x01 >0 \b, paginated
->92 byte&0x01 >0 \b, with mail merge
-#>91 byte x \b, left margin %d
-
-# AppleWorks database:
-#
-# This isn't really a magic number, but it's the closest thing to one
-# that I could find. The 1 and 2 really mean "order in which you defined
-# categories" and "left to right, top to bottom," respectively; the D and R
-# mean that the cursor should move either down or right when you press Return.
-
-#30 string \x01D AppleWorks database data
-#30 string \x02D AppleWorks database data
-#30 string \x01R AppleWorks database data
-#30 string \x02R AppleWorks database data
-
-# AppleWorks spreadsheet:
-#
-# Likewise, this isn't really meant as a magic number. The R or C means
-# row- or column-order recalculation; the A or M means automatic or manual
-# recalculation.
-
-#131 string RA AppleWorks spreadsheet data
-#131 string RM AppleWorks spreadsheet data
-#131 string CA AppleWorks spreadsheet data
-#131 string CM AppleWorks spreadsheet data
-
-# Applesoft BASIC:
-#
-# This is incredibly sloppy, but will be true if the program was
-# written at its usual memory location of 2048 and its first line
-# number is less than 256. Yuck.
-# update by Joerg Jenderek at Feb 2013
-
-# GRR: this test is still too general as it catches also Gujin BOOT144.SYS (0xfa080000)
-#0 belong&0xff00ff 0x80000 Applesoft BASIC program data
-0 belong&0x00ff00ff 0x00080000
-# assuming that line number must be positive
->2 leshort >0 Applesoft BASIC program data, first line number %d
-#>2 leshort x \b, first line number %d
-
-# ORCA/EZ assembler:
-#
-# This will not identify ORCA/M source files, since those have
-# some sort of date code instead of the two zero bytes at 6 and 7
-# XXX Conflicts with ELF
-#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data
-#>5 byte x \b, build number %d
-
-# Broderbund Fantavision
-#
-# I don't know what these values really mean, but they seem to recur.
-# Will they cause too many conflicts?
-
-# Probably :-)
-#2 belong&0xFF00FF 0x040008 Fantavision movie data
-
-# Some attempts at images.
-#
-# These are actually just bit-for-bit dumps of the frame buffer, so
-# there's really no reasonably way to distinguish them except for their
-# address (if preserved) -- 8192 or 16384 -- and their length -- 8192
-# or, occasionally, 8184.
-#
-# Nevertheless this will manage to catch a lot of images that happen
-# to have a solid-colored line at the bottom of the screen.
-
-# GRR: Magic too weak
-#8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background
-#8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background
-#8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background
-#8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background
-#8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background
-
-# Beagle Bros. Apple Mechanic fonts
-
-0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font
-
-# Apple Universal Disk Image Format (UDIF) - dmg files.
-# From Johan Gade.
-# These entries are disabled for now until we fix the following issues.
-#
-# Note there might be some problems with the "VAX COFF executable"
-# entry. Note this entry should be placed before the mac filesystem section,
-# particularly the "Apple Partition data" entry.
-#
-# The intended meaning of these tests is, that the file is only of the
-# specified type if both of the lines are correct - i.e. if the first
-# line matches and the second doesn't then it is not of that type.
-#
-#0 long 0x7801730d
-#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO)
-#
-# Note that this entry is recognized correctly by the "Apple Partition
-# data" entry - however since this entry is more specific - this
-# information seems to be more useful.
-#0 long 0x45520200
-#>0x410 string disk\ image UDIF read/write image (UDRW)
-
-# From: Toby Peterson <toby at apple.com>
-0 string bplist00 Apple binary property list
-
-# Apple binary property list (bplist)
-# Assumes version bytes are hex.
-# Provides content hints for version 0 files. Assumes that the root
-# object is the first object (true for CoreFoundation implementation).
-# From: David Remahl <dremahl at apple.com>
-0 string bplist
->6 byte x \bCoreFoundation binary property list data, version 0x%c
->>7 byte x \b%c
->6 string 00 \b
->>8 byte&0xF0 0x00 \b
->>>8 byte&0x0F 0x00 \b, root type: null
->>>8 byte&0x0F 0x08 \b, root type: false boolean
->>>8 byte&0x0F 0x09 \b, root type: true boolean
->>8 byte&0xF0 0x10 \b, root type: integer
->>8 byte&0xF0 0x20 \b, root type: real
->>8 byte&0xF0 0x30 \b, root type: date
->>8 byte&0xF0 0x40 \b, root type: data
->>8 byte&0xF0 0x50 \b, root type: ascii string
->>8 byte&0xF0 0x60 \b, root type: unicode string
->>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT)
->>8 byte&0xF0 0xa0 \b, root type: array
->>8 byte&0xF0 0xd0 \b, root type: dictionary
-
-# Apple/NeXT typedstream data
-# Serialization format used by NeXT and Apple for various
-# purposes in YellowStep/Cocoa, including some nib files.
-# From: David Remahl <dremahl at apple.com>
-2 string typedstream NeXT/Apple typedstream data, big endian
->0 byte x \b, version %d
->0 byte <5 \b
->>13 byte 0x81 \b
->>>14 ubeshort x \b, system %d
-2 string streamtyped NeXT/Apple typedstream data, little endian
->0 byte x \b, version %d
->0 byte <5 \b
->>13 byte 0x81 \b
->>>14 uleshort x \b, system %d
-
-#------------------------------------------------------------------------------
-# CAF: Apple CoreAudio File Format
-#
-# Container format for high-end audio purposes.
-# From: David Remahl <dremahl at apple.com>
-#
-0 string caff CoreAudio Format audio file
->4 beshort <10 version %d
->6 beshort x
-
-
-#------------------------------------------------------------------------------
-# Keychain database files
-0 string kych Mac OS X Keychain File
-
-#------------------------------------------------------------------------------
-# Code Signing related file types
-0 belong 0xfade0c00 Mac OS X Code Requirement
->8 belong 1 (opExpr)
->4 belong x - %d bytes
-
-0 belong 0xfade0c01 Mac OS X Code Requirement Set
->8 belong >1 containing %d items
->4 belong x - %d bytes
-
-0 belong 0xfade0c02 Mac OS X Code Directory
->8 belong x version %x
->12 belong >0 flags 0x%x
->4 belong x - %d bytes
-
-0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable)
->4 belong x - %d bytes
-
-0 belong 0xfade0cc1 Mac OS X Detached Code Signature
->8 belong >1 (%d elements)
->4 belong x - %d bytes
-
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-# .vdi
-4 string innotek\ VirtualBox\ Disk\ Image %s
-
-# Apple disk partition stuff, strengthen the magic using byte 4
-0 beshort 0x4552
->4 byte 0 Apple Driver Map
->>2 beshort x \b, blocksize %d
->>4 belong x \b, blockcount %d
->>10 beshort x \b, devtype %d
->>12 beshort x \b, devid %d
->>20 beshort x \b, descriptors %d
-# Assume 8 partitions each at a multiple of the sector size.
-# We could glean this from the partition descriptors, but they are empty!?!?
->>(2.S*1) indirect \b, contains[@0x%x]:
->>(2.S*2) indirect \b, contains[@0x%x]:
->>(2.S*3) indirect \b, contains[@0x%x]:
->>(2.S*4) indirect \b, contains[@0x%x]:
->>(2.S*5) indirect \b, contains[@0x%x]:
->>(2.S*6) indirect \b, contains[@0x%x]:
->>(2.S*7) indirect \b, contains[@0x%x]:
->>(2.S*8) indirect \b, contains[@0x%x]:
-
-# Yes, the 3rd and 4th bytes are reserved, but we use them to make the
-# magic stronger.
-0 belong 0x504d0000 Apple Partition Map
->4 belong x \b, map block count %d
->8 belong x \b, start block %d
->12 belong x \b, block count %d
->16 string >0 \b, name %s
->48 string >0 \b, type %s
->124 string >0 \b, processor %s
->140 string >0 \b, boot arguments %s
->92 belong & 1 \b, valid
->92 belong & 2 \b, allocated
->92 belong & 4 \b, in use
->92 belong & 8 \b, has boot info
->92 belong & 16 \b, readable
->92 belong & 32 \b, writable
->92 belong & 64 \b, pic boot code
->92 belong & 128 \b, chain compatible driver
->92 belong & 256 \b, real driver
->92 belong & 512 \b, chain driver
->92 belong & 1024 \b, mount at startup
->92 belong & 2048 \b, is the startup partition
-
-#http://wiki.mozilla.org/DS_Store_File_Format`
-#http://en.wikipedia.org/wiki/.DS_Store
-0 string \0\0\0\1Bud1\0 Apple Desktop Services Store
-
-#------------------------------------------------------------------------------
-# $File: applix,v 1.5 2009/09/19 16:28:08 christos Exp $
-# applix: file(1) magic for Applixware
-# From: Peter Soos <sp at osb.hu>
-#
-0 string *BEGIN Applixware
->7 string WORDS Words Document
->7 string GRAPHICS Graphic
->7 string RASTER Bitmap
->7 string SPREADSHEETS Spreadsheet
->7 string MACRO Macro
->7 string BUILDER Builder Object
-#------------------------------------------------------------------------------
-# $File: archive,v 1.87 2014/06/03 19:15:58 christos Exp $
-# archive: file(1) magic for archive formats (see also "msdos" for self-
-# extracting compressed archives)
-#
-# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
-# pre-POSIX "tar" archives are handled in the C code.
-
-# POSIX tar archives
-257 string ustar\0 POSIX tar archive
-!:mime application/x-tar # encoding: posix
-257 string ustar\040\040\0 GNU tar archive
-!:mime application/x-tar # encoding: gnu
-
-# Incremental snapshot gnu-tar format from:
-# http://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html
-0 string GNU\ tar- GNU tar incremental snapshot data
->&0 regex [0-9]\.[0-9]+-[0-9]+ version %s
-
-# cpio archives
-#
-# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
-# The idea is to indicate archives produced on machines with the same
-# byte order as the machine running "file" with "cpio archive", and
-# to indicate archives produced on machines with the opposite byte order
-# from the machine running "file" with "byte-swapped cpio archive".
-#
-# The SVR4 "cpio(4)" hints that there are additional formats, but they
-# are defined as "short"s; I think all the new formats are
-# character-header formats and thus are strings, not numbers.
-0 short 070707 cpio archive
-!:mime application/x-cpio
-0 short 0143561 byte-swapped cpio archive
-!:mime application/x-cpio # encoding: swapped
-0 string 070707 ASCII cpio archive (pre-SVR4 or odc)
-0 string 070701 ASCII cpio archive (SVR4 with no CRC)
-0 string 070702 ASCII cpio archive (SVR4 with CRC)
-
-#
-# Various archive formats used by various versions of the "ar"
-# command.
-#
-
-#
-# Original UNIX archive formats.
-# They were written with binary values in host byte order, and
-# the magic number was a host "int", which might have been 16 bits
-# or 32 bits. We don't say "PDP-11" or "VAX", as there might have
-# been ports to little-endian 16-bit-int or 32-bit-int platforms
-# (x86?) using some of those formats; if none existed, feel free
-# to use "PDP-11" for little-endian 16-bit and "VAX" for little-endian
-# 32-bit. There might have been big-endian ports of that sort as
-# well.
-#
-0 leshort 0177555 very old 16-bit-int little-endian archive
-0 beshort 0177555 very old 16-bit-int big-endian archive
-0 lelong 0177555 very old 32-bit-int little-endian archive
-0 belong 0177555 very old 32-bit-int big-endian archive
-
-0 leshort 0177545 old 16-bit-int little-endian archive
->2 string __.SYMDEF random library
-0 beshort 0177545 old 16-bit-int big-endian archive
->2 string __.SYMDEF random library
-0 lelong 0177545 old 32-bit-int little-endian archive
->4 string __.SYMDEF random library
-0 belong 0177545 old 32-bit-int big-endian archive
->4 string __.SYMDEF random library
-
-#
-# From "pdp" (but why a 4-byte quantity?)
-#
-0 lelong 0x39bed PDP-11 old archive
-0 lelong 0x39bee PDP-11 4.0 archive
-
-#
-# XXX - what flavor of APL used this, and was it a variant of
-# some ar archive format? It's similar to, but not the same
-# as, the APL workspace magic numbers in pdp.
-#
-0 long 0100554 apl workspace
-
-#
-# System V Release 1 portable(?) archive format.
-#
-0 string =<ar> System V Release 1 ar archive
-!:mime application/x-archive
-
-#
-# Debian package; it's in the portable archive format, and needs to go
-# before the entry for regular portable archives, as it's recognized as
-# a portable archive whose first member has a name beginning with
-# "debian".
-#
-0 string =!<arch>\ndebian
->8 string debian-split part of multipart Debian package
-!:mime application/vnd.debian.binary-package
->8 string debian-binary Debian binary package
-!:mime application/vnd.debian.binary-package
->8 string !debian
->68 string >\0 (format %s)
-# These next two lines do not work, because a bzip2 Debian archive
-# still uses gzip for the control.tar (first in the archive). Only
-# data.tar varies, and the location of its filename varies too.
-# file/libmagic does not current have support for ascii-string based
-# (offsets) as of 2005-09-15.
-#>81 string bz2 \b, uses bzip2 compression
-#>84 string gz \b, uses gzip compression
-#>136 ledate x created: %s
-
-#
-# MIPS archive; they're in the portable archive format, and need to go
-# before the entry for regular portable archives, as it's recognized as
-# a portable archive whose first member has a name beginning with
-# "__________E".
-#
-0 string =!<arch>\n__________E MIPS archive
-!:mime application/x-archive
->20 string U with MIPS Ucode members
->21 string L with MIPSEL members
->21 string B with MIPSEB members
->19 string L and an EL hash table
->19 string B and an EB hash table
->22 string X -- out of date
-
-0 search/1 -h- Software Tools format archive text
-
-#
-# BSD/SVR2-and-later portable archive formats.
-#
-0 string =!<arch> current ar archive
-!:mime application/x-archive
->8 string __.SYMDEF random library
->68 string __.SYMDEF\ SORTED random library
-
-#
-# "Thin" archive, as can be produced by GNU ar.
-#
-0 string =!<thin>\n thin archive with
->68 belong 0 no symbol entries
->68 belong 1 %d symbol entry
->68 belong >1 %d symbol entries
-
-# ARC archiver, from Daniel Quinlan (quinlan at yggdrasil.com)
-#
-# The first byte is the magic (0x1a), byte 2 is the compression type for
-# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
-# filename of the first file (null terminated). Since some types collide
-# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
-# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo.
-0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000031a ARC archive data, packed
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched
-!:mime application/x-arc
-# [JW] stuff taken from idarc, obviously ARC successors:
-0 lelong&0x8080ffff 0x00000a1a PAK archive data
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000141a ARC+ archive data
-!:mime application/x-arc
-0 lelong&0x8080ffff 0x0000481a HYP archive data
-!:mime application/x-arc
-
-# Acorn archive formats (Disaster prone simpleton, m91dps at ecs.ox.ac.uk)
-# I can't create either SPARK or ArcFS archives so I have not tested this stuff
-# [GRR: the original entries collide with ARC, above; replaced with combined
-# version (not tested)]
-#0 byte 0x1a RISC OS archive (spark format)
-0 string \032archive RISC OS archive (ArcFS format)
-0 string Archive\000 RISC OS archive (ArcFS format)
-
-# All these were taken from idarc, many could not be verified. Unfortunately,
-# there were many low-quality sigs, i.e. easy to trigger false positives.
-# Please notify me of any real-world fishy/ambiguous signatures and I'll try
-# to get my hands on the actual archiver and see if I find something better. [JW]
-# probably many can be enhanced by finding some 0-byte or control char near the start
-
-# idarc calls this Crush/Uncompressed... *shrug*
-0 string CRUSH Crush archive data
-# Squeeze It (.sqz)
-0 string HLSQZ Squeeze It archive data
-# SQWEZ
-0 string SQWEZ SQWEZ archive data
-# HPack (.hpk)
-0 string HPAK HPack archive data
-# HAP
-0 string \x91\x33HF HAP archive data
-# MD/MDCD
-0 string MDmd MDCD archive data
-# LIM
-0 string LIM\x1a LIM archive data
-# SAR
-3 string LH5 SAR archive data
-# BSArc/BS2
-0 string \212\3SB\020\0 BSArc/BS2 archive data
-# Bethesda Softworks Archive (Oblivion)
-0 string BSA\0 BSArc archive data
->4 lelong x version %d
-# MAR
-2 string =-ah MAR archive data
-# ACB
-#0 belong&0x00f800ff 0x00800000 ACB archive data
-# CPZ
-# TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data
-# JRC
-0 string JRchive JRC archive data
-# Quantum
-0 string DS\0 Quantum archive data
-# ReSOF
-0 string PK\3\6 ReSOF archive data
-# QuArk
-0 string 7\4 QuArk archive data
-# YAC
-14 string YC YAC archive data
-# X1
-0 string X1 X1 archive data
-0 string XhDr X1 archive data
-# CDC Codec (.dqt)
-0 belong&0xffffe000 0x76ff2000 CDC Codec archive data
-# AMGC
-0 string \xad6" AMGC archive data
-# NuLIB
-0 string N\xc3\xb5F\xc3\xa9lx\xc3\xa5 NuLIB archive data
-# PakLeo
-0 string LEOLZW PAKLeo archive data
-# ChArc
-0 string SChF ChArc archive data
-# PSA
-0 string PSA PSA archive data
-# CrossePAC
-0 string DSIGDCC CrossePAC archive data
-# Freeze
-0 string \x1f\x9f\x4a\x10\x0a Freeze archive data
-# KBoom
-0 string \xc2\xa8MP\xc2\xa8 KBoom archive data
-# NSQ, must go after CDC Codec
-0 string \x76\xff NSQ archive data
-# DPA
-0 string Dirk\ Paehl DPA archive data
-# BA
-# TODO: idarc says "bytes 0-2 == bytes 3-5"
-# TTComp
-0 string \0\6 TTComp archive data
-# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
-0 string ESP ESP archive data
-# ZPack
-0 string \1ZPK\1 ZPack archive data
-# Sky
-0 string \xbc\x40 Sky archive data
-# UFA
-0 string UFA UFA archive data
-# Dry
-0 string =-H2O DRY archive data
-# FoxSQZ
-0 string FOXSQZ FoxSQZ archive data
-# AR7
-0 string ,AR7 AR7 archive data
-# PPMZ
-0 string PPMZ PPMZ archive data
-# MS Compress
-4 string \x88\xf0\x27 MS Compress archive data
-# updated by Joerg Jenderek
->9 string \0
->>0 string KWAJ
->>>7 string \321\003 MS Compress archive data
->>>>14 ulong >0 \b, original size: %d bytes
->>>>18 ubyte >0x65
->>>>>18 string x \b, was %.8s
->>>>>(10.b-4) string x \b.%.3s
-# MP3 (archiver, not lossy audio compression)
-0 string MP3\x1a MP3-Archiver archive data
-# ZET
-0 string OZ\xc3\x9d ZET archive data
-# TSComp
-0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data
-# ARQ
-0 string gW\4\1 ARQ archive data
-# Squash
-3 string OctSqu Squash archive data
-# Terse
-0 string \5\1\1\0 Terse archive data
-# PUCrunch
-0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data
-# UHarc
-0 string UHA UHarc archive data
-# ABComp
-0 string \2AB ABComp archive data
-0 string \3AB2 ABComp archive data
-# CMP
-0 string CO\0 CMP archive data
-# Splint
-0 string \x93\xb9\x06 Splint archive data
-# InstallShield
-0 string \x13\x5d\x65\x8c InstallShield Z archive Data
-# Gather
-1 string GTH Gather archive data
-# BOA
-0 string BOA BOA archive data
-# RAX
-0 string ULEB\xa RAX archive data
-# Xtreme
-0 string ULEB\0 Xtreme archive data
-# Pack Magic
-0 string @\xc3\xa2\1\0 Pack Magic archive data
-# BTS
-0 belong&0xfeffffff 0x1a034465 BTS archive data
-# ELI 5750
-0 string Ora\ ELI 5750 archive data
-# QFC
-0 string \x1aFC\x1a QFC archive data
-0 string \x1aQF\x1a QFC archive data
-# PRO-PACK
-0 string RNC PRO-PACK archive data
-# 777
-0 string 777 777 archive data
-# LZS221
-0 string sTaC LZS221 archive data
-# HPA
-0 string HPA HPA archive data
-# Arhangel
-0 string LG Arhangel archive data
-# EXP1, uses bzip2
-0 string 0123456789012345BZh EXP1 archive data
-# IMP
-0 string IMP\xa IMP archive data
-# NRV
-0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data
-# Squish
-0 string \x73\xb2\x90\xf4 Squish archive data
-# Par
-0 string PHILIPP Par archive data
-0 string PAR Par archive data
-# HIT
-0 string UB HIT archive data
-# SBX
-0 belong&0xfffff000 0x53423000 SBX archive data
-# NaShrink
-0 string NSK NaShrink archive data
-# SAPCAR
-0 string #\ CAR\ archive\ header SAPCAR archive data
-0 string CAR\ 2.00RG SAPCAR archive data
-# Disintegrator
-0 string DST Disintegrator archive data
-# ASD
-0 string ASD ASD archive data
-# InstallShield CAB
-0 string ISc( InstallShield CAB
-# TOP4
-0 string T4\x1a TOP4 archive data
-# BatComp left out: sig looks like COM executable
-# so TODO: get real 4dos batcomp file and find sig
-# BlakHole
-0 string BH\5\7 BlakHole archive data
-# BIX
-0 string BIX0 BIX archive data
-# ChiefLZA
-0 string ChfLZ ChiefLZA archive data
-# Blink
-0 string Blink Blink archive data
-# Logitech Compress
-0 string \xda\xfa Logitech Compress archive data
-# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)
-1 string (C)\ STEPANYUK ARS-Sfx archive data
-# AKT/AKT32
-0 string AKT32 AKT32 archive data
-0 string AKT AKT archive data
-# NPack
-0 string MSTSM NPack archive data
-# PFT
-0 string \0\x50\0\x14 PFT archive data
-# SemOne
-0 string SEM SemOne archive data
-# PPMD
-0 string \x8f\xaf\xac\x84 PPMD archive data
-# FIZ
-0 string FIZ FIZ archive data
-# MSXiE
-0 belong&0xfffff0f0 0x4d530000 MSXiE archive data
-# DeepFreezer
-0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data
-# DC
-0 string =<DC- DC archive data
-# TPac
-0 string \4TPAC\3 TPac archive data
-# Ai
-0 string Ai\1\1\0 Ai archive data
-0 string Ai\1\0\0 Ai archive data
-# Ai32
-0 string Ai\2\0 Ai32 archive data
-0 string Ai\2\1 Ai32 archive data
-# SBC
-0 string SBC SBC archive data
-# Ybs
-0 string YBS Ybs archive data
-# DitPack
-0 string \x9e\0\0 DitPack archive data
-# DMS
-0 string DMS! DMS archive data
-# EPC
-0 string \x8f\xaf\xac\x8c EPC archive data
-# VSARC
-0 string VS\x1a VSARC archive data
-# PDZ
-0 string PDZ PDZ archive data
-# ReDuq
-0 string rdqx ReDuq archive data
-# GCA
-0 string GCAX GCA archive data
-# PPMN
-0 string pN PPMN archive data
-# WinImage
-3 string WINIMAGE WinImage archive data
-# Compressia
-0 string CMP0CMP Compressia archive data
-# UHBC
-0 string UHB UHBC archive data
-# WinHKI
-0 string \x61\x5C\x04\x05 WinHKI archive data
-# WWPack data file
-0 string WWP WWPack archive data
-# BSN (BSA, PTS-DOS)
-0 string \xffBSG BSN archive data
-1 string \xffBSG BSN archive data
-3 string \xffBSG BSN archive data
-1 string \0\xae\2 BSN archive data
-1 string \0\xae\3 BSN archive data
-1 string \0\xae\7 BSN archive data
-# AIN
-0 string \x33\x18 AIN archive data
-0 string \x33\x17 AIN archive data
-# XPA32
-0 string xpa\0\1 XPA32 archive data
-# SZip (TODO: doesn't catch all versions)
-0 string SZ\x0a\4 SZip archive data
-# XPack DiskImage
-0 string jm XPack DiskImage archive data
-# XPack Data
-0 string xpa XPack archive data
-# XPack Single Data
-0 string \xc3\x8d\ jm XPack single archive data
-
-# TODO: missing due to unknown magic/magic at end of file:
-#DWC
-#ARG
-#ZAR
-#PC/3270
-#InstallIt
-#RKive
-#RK
-#XPack Diskimage
-
-# These were inspired by idarc, but actually verified
-# Dzip archiver (.dz)
-0 string DZ Dzip archive data
->2 byte x \b, version %i
->3 byte x \b.%i
-# ZZip archiver (.zz)
-0 string ZZ\ \0\0 ZZip archive data
-0 string ZZ0 ZZip archive data
-# PAQ archiver (.paq)
-0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data
-0 string PAQ PAQ archive data
->3 byte&0xf0 0x30
->>3 byte x (v%c)
-# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)
-0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data
-0 string JARCS JAR (ARJ Software, Inc.) archive data
-
-# ARJ archiver (jason at jarthur.Claremont.EDU)
-0 leshort 0xea60 ARJ archive data
-!:mime application/x-arj
->5 byte x \b, v%d,
->8 byte &0x04 multi-volume,
->8 byte &0x10 slash-switched,
->8 byte &0x20 backup,
->34 string x original name: %s,
->7 byte 0 os: MS-DOS
->7 byte 1 os: PRIMOS
->7 byte 2 os: Unix
->7 byte 3 os: Amiga
->7 byte 4 os: Macintosh
->7 byte 5 os: OS/2
->7 byte 6 os: Apple ][ GS
->7 byte 7 os: Atari ST
->7 byte 8 os: NeXT
->7 byte 9 os: VAX/VMS
->3 byte >0 %d]
-# [JW] idarc says this is also possible
-2 leshort 0xea60 ARJ archive data
-
-# HA archiver (Greg Roelofs, newt at uchicago.edu)
-# This is a really bad format. A file containing HAWAII will match this...
-#0 string HA HA archive data,
-#>2 leshort =1 1 file,
-#>2 leshort >1 %hu files,
-#>4 byte&0x0f =0 first is type CPY
-#>4 byte&0x0f =1 first is type ASC
-#>4 byte&0x0f =2 first is type HSC
-#>4 byte&0x0f =0x0e first is type DIR
-#>4 byte&0x0f =0x0f first is type SPECIAL
-# suggestion: at least identify small archives (<1024 files)
-0 belong&0xffff00fc 0x48410000 HA archive data
->2 leshort =1 1 file,
->2 leshort >1 %u files,
->4 byte&0x0f =0 first is type CPY
->4 byte&0x0f =1 first is type ASC
->4 byte&0x0f =2 first is type HSC
->4 byte&0x0f =0x0e first is type DIR
->4 byte&0x0f =0x0f first is type SPECIAL
-
-# HPACK archiver (Peter Gutmann, pgut1 at cs.aukuni.ac.nz)
-0 string HPAK HPACK archive data
-
-# JAM Archive volume format, by Dmitry.Kohmanyuk at UA.net
-0 string \351,\001JAM\ JAM archive,
->7 string >\0 version %.4s
->0x26 byte =0x27 -
->>0x2b string >\0 label %.11s,
->>0x27 lelong x serial %08x,
->>0x36 string >\0 fstype %.8s
-
-# LHARC/LHA archiver (Greg Roelofs, newt at uchicago.edu)
-2 string -lh0- LHarc 1.x/ARX archive data [lh0]
-!:mime application/x-lharc
-2 string -lh1- LHarc 1.x/ARX archive data [lh1]
-!:mime application/x-lharc
-2 string -lz4- LHarc 1.x archive data [lz4]
-!:mime application/x-lharc
-2 string -lz5- LHarc 1.x archive data [lz5]
-!:mime application/x-lharc
-# [never seen any but the last; -lh4- reported in comp.compression:]
-2 string -lzs- LHa/LZS archive data [lzs]
-!:mime application/x-lha
-2 string -lh\40- LHa 2.x? archive data [lh ]
-!:mime application/x-lha
-2 string -lhd- LHa 2.x? archive data [lhd]
-!:mime application/x-lha
-2 string -lh2- LHa 2.x? archive data [lh2]
-!:mime application/x-lha
-2 string -lh3- LHa 2.x? archive data [lh3]
-!:mime application/x-lha
-2 string -lh4- LHa (2.x) archive data [lh4]
-!:mime application/x-lha
-2 string -lh5- LHa (2.x) archive data [lh5]
-!:mime application/x-lha
-2 string -lh6- LHa (2.x) archive data [lh6]
-!:mime application/x-lha
-2 string -lh7- LHa (2.x)/LHark archive data [lh7]
-!:mime application/x-lha
->20 byte x - header level %d
-# taken from idarc [JW]
-2 string -lZ PUT archive data
-2 string -lz LZS archive data
-2 string -sw1- Swag archive data
-
-# RAR archiver (Greg Roelofs, newt at uchicago.edu)
-0 string Rar! RAR archive data,
-!:mime application/x-rar
->44 byte x v%0x,
->10 byte >0 flags:
->>10 byte &0x01 Archive volume,
->>10 byte &0x02 Commented,
->>10 byte &0x04 Locked,
->>10 byte &0x08 Solid,
->>10 byte &0x20 Authenticated,
->35 byte 0 os: MS-DOS
->35 byte 1 os: OS/2
->35 byte 2 os: Win32
->35 byte 3 os: Unix
-# some old version? idarc says:
-0 string RE\x7e\x5e RAR archive data
-
-# SQUISH archiver (Greg Roelofs, newt at uchicago.edu)
-0 string SQSH squished archive data (Acorn RISCOS)
-
-# UC2 archiver (Greg Roelofs, newt at uchicago.edu)
-# [JW] see exe section for self-extracting version
-0 string UC2\x1a UC2 archive data
-
-# PKZIP multi-volume archive
-0 string PK\x07\x08PK\x03\x04 Zip multi-volume archive data, at least PKZIP v2.50 to extract
-!:mime application/zip
-
-# Zip archives (Greg Roelofs, c/o zip-bugs at wkuvx1.wku.edu)
-0 string PK\005\006 Zip archive data (empty)
-0 string PK\003\004
-
-# Specialised zip formats which start with a member named 'mimetype'
-# (stored uncompressed, with no 'extra field') containing the file's MIME type.
-# Check for have 8-byte name, 0-byte extra field, name "mimetype", and
-# contents starting with "application/":
->26 string \x8\0\0\0mimetypeapplication/
-
-# KOffice / OpenOffice & StarOffice / OpenDocument formats
-# From: Abel Cheung <abel at oaka.org>
-
-# KOffice (1.2 or above) formats
-# (mimetype contains "application/vnd.kde.<SUBTYPE>")
->>50 string vnd.kde. KOffice (>=1.2)
->>>58 string karbon Karbon document
->>>58 string kchart KChart document
->>>58 string kformula KFormula document
->>>58 string kivio Kivio document
->>>58 string kontour Kontour document
->>>58 string kpresenter KPresenter document
->>>58 string kspread KSpread document
->>>58 string kword KWord document
-
-# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)
-# (mimetype contains "application/vnd.sun.xml.<SUBTYPE>")
->>50 string vnd.sun.xml. OpenOffice.org 1.x
->>>62 string writer Writer
->>>>68 byte !0x2e document
->>>>68 string .template template
->>>>68 string .global global document
->>>62 string calc Calc
->>>>66 byte !0x2e spreadsheet
->>>>66 string .template template
->>>62 string draw Draw
->>>>66 byte !0x2e document
->>>>66 string .template template
->>>62 string impress Impress
->>>>69 byte !0x2e presentation
->>>>69 string .template template
->>>62 string math Math document
->>>62 string base Database file
-
-# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)
-# http://lists.oasis-open.org/archives/office/200505/msg00006.html
-# (mimetype contains "application/vnd.oasis.opendocument.<SUBTYPE>")
->>50 string vnd.oasis.opendocument. OpenDocument
->>>73 string text
->>>>77 byte !0x2d Text
-!:mime application/vnd.oasis.opendocument.text
->>>>77 string -template Text Template
-!:mime application/vnd.oasis.opendocument.text-template
->>>>77 string -web HTML Document Template
-!:mime application/vnd.oasis.opendocument.text-web
->>>>77 string -master Master Document
-!:mime application/vnd.oasis.opendocument.text-master
->>>73 string graphics
->>>>81 byte !0x2d Drawing
-!:mime application/vnd.oasis.opendocument.graphics
->>>>81 string -template Template
-!:mime application/vnd.oasis.opendocument.graphics-template
->>>73 string presentation
->>>>85 byte !0x2d Presentation
-!:mime application/vnd.oasis.opendocument.presentation
->>>>85 string -template Template
-!:mime application/vnd.oasis.opendocument.presentation-template
->>>73 string spreadsheet
->>>>84 byte !0x2d Spreadsheet
-!:mime application/vnd.oasis.opendocument.spreadsheet
->>>>84 string -template Template
-!:mime application/vnd.oasis.opendocument.spreadsheet-template
->>>73 string chart
->>>>78 byte !0x2d Chart
-!:mime application/vnd.oasis.opendocument.chart
->>>>78 string -template Template
-!:mime application/vnd.oasis.opendocument.chart-template
->>>73 string formula
->>>>80 byte !0x2d Formula
-!:mime application/vnd.oasis.opendocument.formula
->>>>80 string -template Template
-!:mime application/vnd.oasis.opendocument.formula-template
->>>73 string database Database
-!:mime application/vnd.oasis.opendocument.database
->>>73 string image
->>>>78 byte !0x2d Image
-!:mime application/vnd.oasis.opendocument.image
->>>>78 string -template Template
-!:mime application/vnd.oasis.opendocument.image-template
-
-# EPUB (OEBPS) books using OCF (OEBPS Container Format)
-# http://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4.
-# From: Ralf Brown <ralf.brown at gmail.com>
->>50 string epub+zip EPUB document
-!:mime application/epub+zip
-
-# Catch other ZIP-with-mimetype formats
-# In a ZIP file, the bytes immediately after a member's contents are
-# always "PK". The 2 regex rules here print the "mimetype" member's
-# contents up to the first 'P'. Luckily, most MIME types don't contain
-# any capital 'P's. This is a kludge.
-# (mimetype contains "application/<OTHER>")
->>50 string !epub+zip
->>>50 string !vnd.oasis.opendocument.
->>>>50 string !vnd.sun.xml.
->>>>>50 string !vnd.kde.
->>>>>>38 regex [!-OQ-~]+ Zip data (MIME type "%s"?)
-!:mime application/zip
-# (mimetype contents other than "application/*")
->26 string \x8\0\0\0mimetype
->>38 string !application/
->>>38 regex [!-OQ-~]+ Zip data (MIME type "%s"?)
-!:mime application/zip
-
-# Java Jar files
->(26.s+30) leshort 0xcafe Java archive data (JAR)
-!:mime application/java-archive
-
-# Generic zip archives (Greg Roelofs, c/o zip-bugs at wkuvx1.wku.edu)
-# Next line excludes specialized formats:
->(26.s+30) leshort !0xcafe
->>26 string !\x8\0\0\0mimetype Zip archive data
-!:mime application/zip
->>>4 byte 0x09 \b, at least v0.9 to extract
->>>4 byte 0x0a \b, at least v1.0 to extract
->>>4 byte 0x0b \b, at least v1.1 to extract
->>>4 byte 0x14 \b, at least v2.0 to extract
->>>4 byte 0x2d \b, at least v3.0 to extract
->>>0x161 string WINZIP \b, WinZIP self-extracting
-
-# StarView Metafile
-# From Pierre Ducroquet <pinaraf at pinaraf.info>
-0 string VCLMTF StarView MetaFile
->6 beshort x \b, version %d
->8 belong x \b, size %d
-
-# Zoo archiver
-20 lelong 0xfdc4a7dc Zoo archive data
-!:mime application/x-zoo
->4 byte >48 \b, v%c.
->>6 byte >47 \b%c
->>>7 byte >47 \b%c
->32 byte >0 \b, modify: v%d
->>33 byte x \b.%d+
->42 lelong 0xfdc4a7dc \b,
->>70 byte >0 extract: v%d
->>>71 byte x \b.%d+
-
-# Shell archives
-10 string #\ This\ is\ a\ shell\ archive shell archive text
-!:mime application/octet-stream
-
-#
-# LBR. NB: May conflict with the questionable
-# "binary Computer Graphics Metafile" format.
-#
-0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data
-#
-# PMA (CP/M derivative of LHA)
-#
-2 string -pm0- PMarc archive data [pm0]
-2 string -pm1- PMarc archive data [pm1]
-2 string -pm2- PMarc archive data [pm2]
-2 string -pms- PMarc SFX archive (CP/M, DOS)
-5 string -pc1- PopCom compressed executable (CP/M)
-
-# From Rafael Laboissiere <rafael at laboissiere.net>
-# The Project Revision Control System (see
-# http://prcs.sourceforge.net) generates a packaged project
-# file which is recognized by the following entry:
-0 leshort 0xeb81 PRCS packaged project
-
-# Microsoft cabinets
-# by David Necas (Yeti) <yeti at physics.muni.cz>
-#0 string MSCF\0\0\0\0 Microsoft cabinet file data,
-#>25 byte x v%d
-#>24 byte x \b.%d
-# MPi: All CABs have version 1.3, so this is pointless.
-# Better magic in debian-additions.
-
-# GTKtalog catalogs
-# by David Necas (Yeti) <yeti at physics.muni.cz>
-4 string gtktalog\ GTKtalog catalog data,
->13 string 3 version 3
->>14 beshort 0x677a (gzipped)
->>14 beshort !0x677a (not gzipped)
->13 string >3 version %s
-
-############################################################################
-# Parity archive reconstruction file, the 'par' file format now used on Usenet.
-0 string PAR\0 PARity archive data
->48 leshort =0 - Index file
->48 leshort >0 - file number %d
-
-# Felix von Leitner <felix-file at fefe.de>
-0 string d8:announce BitTorrent file
-!:mime application/x-bittorrent
-
-# Atari MSA archive - Teemu Hukkanen <tjhukkan at iki.fi>
-0 beshort 0x0e0f Atari MSA archive data
->2 beshort x \b, %d sectors per track
->4 beshort 0 \b, 1 sided
->4 beshort 1 \b, 2 sided
->6 beshort x \b, starting track: %d
->8 beshort x \b, ending track: %d
-
-# Alternate ZIP string (amc at arwen.cs.berkeley.edu)
-0 string PK00PK\003\004 Zip archive data
-
-# ACE archive (from http://www.wotsit.org/download.asp?f=ace)
-# by Stefan `Sec` Zehl <sec at 42.org>
-7 string **ACE** ACE archive data
->15 byte >0 version %d
->16 byte =0x00 \b, from MS-DOS
->16 byte =0x01 \b, from OS/2
->16 byte =0x02 \b, from Win/32
->16 byte =0x03 \b, from Unix
->16 byte =0x04 \b, from MacOS
->16 byte =0x05 \b, from WinNT
->16 byte =0x06 \b, from Primos
->16 byte =0x07 \b, from AppleGS
->16 byte =0x08 \b, from Atari
->16 byte =0x09 \b, from Vax/VMS
->16 byte =0x0A \b, from Amiga
->16 byte =0x0B \b, from Next
->14 byte x \b, version %d to extract
->5 leshort &0x0080 \b, multiple volumes,
->>17 byte x \b (part %d),
->5 leshort &0x0002 \b, contains comment
->5 leshort &0x0200 \b, sfx
->5 leshort &0x0400 \b, small dictionary
->5 leshort &0x0800 \b, multi-volume
->5 leshort &0x1000 \b, contains AV-String
->>30 string \x16*UNREGISTERED\x20VERSION* (unregistered)
->5 leshort &0x2000 \b, with recovery record
->5 leshort &0x4000 \b, locked
->5 leshort &0x8000 \b, solid
-# Date in MS-DOS format (whatever that is)
-#>18 lelong x Created on
-
-# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
-# <doj at cubic.org>
-0x1A string sfArk sfArk compressed Soundfont
->0x15 string 2
->>0x1 string >\0 Version %s
->>0x2A string >\0 : %s
-
-# DR-DOS 7.03 Packed File *.??_
-0 string Packed\ File\ Personal NetWare Packed File
->12 string x \b, was "%.12s"
-
-# EET archive
-# From: Tilman Sauerbeck <tilman at code-monkey.de>
-0 belong 0x1ee7ff00 EET archive
-!:mime application/x-eet
-
-# rzip archives
-0 string RZIP rzip compressed data
->4 byte x - version %d
->5 byte x \b.%d
->6 belong x (%d bytes)
-
-# From: "Robert Dale" <robdale at gmail.com>
-0 belong 123 dar archive,
->4 belong x label "%.8x
->>8 belong x %.8x
->>>12 beshort x %.4x"
->14 byte 0x54 end slice
->14 beshort 0x4e4e multi-part
->14 beshort 0x4e53 multi-part, with -S
-
-# Symbian installation files
-# http://www.thouky.co.uk/software/psifs/sis.html
-# http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf
-8 lelong 0x10000419 Symbian installation file
-!:mime application/vnd.symbian.install
->4 lelong 0x1000006D (EPOC release 3/4/5)
->4 lelong 0x10003A12 (EPOC release 6)
-0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x)
-!:mime x-epoc/x-sisx-app
-
-# From "Nelson A. de Oliveira" <naoliv at gmail.com>
-0 string MPQ\032 MoPaQ (MPQ) archive
-
-# From: Dirk Jagdmann <doj at cubic.org>
-# xar archive format: http://code.google.com/p/xar/
-0 string xar! xar archive
->6 beshort x - version %d
-
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-# .kgb
-0 string KGB_arch KGB Archiver file
->10 string x with compression level %.1s
-
-# xar (eXtensible ARchiver) archive
-# From: "David Remahl" <dremahl at apple.com>
-0 string xar! xar archive
-#>4 beshort x header size %d
->6 beshort x version %d,
-#>8 quad x compressed TOC: %d,
-#>16 quad x uncompressed TOC: %d,
->24 belong 0 no checksum
->24 belong 1 SHA-1 checksum
->24 belong 2 MD5 checksum
-
-# Type: Parity Archive
-# From: Daniel van Eeden <daniel_e at dds.nl>
-0 string PAR2 Parity Archive Volume Set
-
-# Bacula volume format. (Volumes always start with a block header.)
-# URL: http://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-12 string BB02 Bacula volume
->20 bedate x \b, started %s
-
-# ePub is XHTML + XML inside a ZIP archive. The first member of the
-# archive must be an uncompressed file called 'mimetype' with contents
-# 'application/epub+zip'
-
-
-# From: "Michael Gorny" <mgorny at gentoo.org>
-# ZPAQ: http://mattmahoney.net/dc/zpaq.html
-0 string zPQ ZPAQ stream
->3 byte x \b, level %d
-
-# BBeB ebook, unencrypted (LRF format)
-# URL: http://www.sven.de/librie/Librie/LrfFormat
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-0 string L\0R\0F\0\0\0 BBeB ebook data, unencrypted
->8 beshort x \b, version %d
->36 byte 1 \b, front-to-back
->36 byte 16 \b, back-to-front
->42 beshort x \b, (%dx,
->44 beshort x %d)
-
-# Symantec GHOST image by Joerg Jenderek at May 2014
-# http://us.norton.com/ghost/
-# http://www.garykessler.net/library/file_sigs.html
-0 ubelong&0xFFFFf7f0 0xFEEF0100 Norton GHost image
-# *.GHO
->2 ubyte&0x08 0x00 \b, first file
-# *.GHS or *.[0-9] with cns program option
->2 ubyte&0x08 0x08 \b, split file
-# part of split index interesting for *.ghs
->>4 ubyte x id=0x%x
-# compression tag minus one equals numeric compression command line switch z[1-9]
->3 ubyte 0 \b, no compression
->3 ubyte 2 \b, fast compression (Z1)
->3 ubyte 3 \b, medium compression (Z2)
->3 ubyte >3
->>3 ubyte <11 \b, compression (Z%d-1)
->2 ubyte&0x08 0x00
-# ~ 30 byte password field only for *.gho
->>12 ubequad !0 \b, password protected
->>44 ubyte !1
-# 1~Image All, sector-by-sector only for *.gho
->>>10 ubyte 1 \b, sector copy
-# 1~Image Boot track only for *.gho
->>>43 ubyte 1 \b, boot track
-# 1~Image Disc only for *.gho implies Image Boot track and sector copy
->>44 ubyte 1 \b, disc sector copy
-# optional image description only *.gho
->>0xff string >\0 "%-.254s"
-# look for DOS sector end sequence
->0xE08 search/7776 \x55\xAA
->>&-512 indirect x \b; contains
-
-# Symantec GHOST image by Joerg Jenderek at May 2014
-# http://us.norton.com/ghost/
-# http://www.garykessler.net/library/file_sigs.html
-0 ubelong&0xFFFFf7f0 0xFEEF0100 Norton GHost image
-# *.GHO
->2 ubyte&0x08 0x00 \b, first file
-# *.GHS or *.[0-9] with cns program option
->2 ubyte&0x08 0x08 \b, split file
-# part of split index interesting for *.ghs
->>4 ubyte x id=0x%x
-# compression tag minus one equals numeric compression command line switch z[1-9]
->3 ubyte 0 \b, no compression
->3 ubyte 2 \b, fast compression (Z1)
->3 ubyte 3 \b, medium compression (Z2)
->3 ubyte >3
->>3 ubyte <11 \b, compression (Z%d-1)
->2 ubyte&0x08 0x00
-# ~ 30 byte password field only for *.gho
->>12 ubequad !0 \b, password protected
->>44 ubyte !1
-# 1~Image All, sector-by-sector only for *.gho
->>>10 ubyte 1 \b, sector copy
-# 1~Image Boot track only for *.gho
->>>43 ubyte 1 \b, boot track
-# 1~Image Disc only for *.gho implies Image Boot track and sector copy
->>44 ubyte 1 \b, disc sector copy
-# optional image description only *.gho
->>0xff string >\0 "%-.254s"
-# look for DOS sector end sequence
->0xE08 search/7776 \x55\xAA
->>&-512 indirect x \b; contains
-#------------------------------------------------------------------------------
-# $File: assembler,v 1.6 2013/12/11 14:14:20 christos Exp $
-# make: file(1) magic for assembler source
-#
-0 regex \^[\040\t]{0,50}\\.asciiz assembler source text
-!:mime text/x-asm
-0 regex \^[\040\t]{0,50}\\.byte assembler source text
-!:mime text/x-asm
-0 regex \^[\040\t]{0,50}\\.even assembler source text
-!:mime text/x-asm
-0 regex \^[\040\t]{0,50}\\.globl assembler source text
-!:mime text/x-asm
-0 regex \^[\040\t]{0,50}\\.text assembler source text
-!:mime text/x-asm
-0 regex \^[\040\t]{0,50}\\.file assembler source text
-!:mime text/x-asm
-0 regex \^[\040\t]{0,50}\\.type assembler source text
-!:mime text/x-asm
-
-#------------------------------------------------------------------------------
-# $File: asterix,v 1.5 2009/09/19 16:28:08 christos Exp $
-# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
-# strings as "long" - we assume they're just strings:
-# From: guy at netapp.com (Guy Harris)
-#
-0 string *STA Aster*x
->7 string WORD Words Document
->7 string GRAP Graphic
->7 string SPRE Spreadsheet
->7 string MACR Macro
-0 string 2278 Aster*x Version 2
->29 byte 0x36 Words Document
->29 byte 0x35 Graphic
->29 byte 0x32 Spreadsheet
->29 byte 0x38 Macro
-
-
-#------------------------------------------------------------------------------
-# $File: att3b,v 1.9 2014/04/30 21:41:02 christos Exp $
-# att3b: file(1) magic for AT&T 3B machines
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-# 3B20
-#
-# The 3B20 conflicts with SCCS.
-#0 beshort 0550 3b20 COFF executable
-#>12 belong >0 not stripped
-#>22 beshort >0 - version %d
-#0 beshort 0551 3b20 COFF executable (TV)
-#>12 belong >0 not stripped
-#>22 beshort >0 - version %d
-#
-# WE32K
-#
-0 beshort 0560 WE32000 COFF
->18 beshort ^00000020 object
->18 beshort &00000020 executable
->12 belong >0 not stripped
->18 beshort ^00010000 N/A on 3b2/300 w/paging
->18 beshort &00020000 32100 required
->18 beshort &00040000 and MAU hardware required
->20 beshort 0407 (impure)
->20 beshort 0410 (pure)
->20 beshort 0413 (demand paged)
->20 beshort 0443 (target shared library)
->22 beshort >0 - version %d
-0 beshort 0561 WE32000 COFF executable (TV)
->12 belong >0 not stripped
-#>18 beshort &00020000 - 32100 required
-#>18 beshort &00040000 and MAU hardware required
-#>22 beshort >0 - version %d
-#
-# core file for 3b2
-0 string \000\004\036\212\200 3b2 core file
->364 string >\0 of '%s'
-
-#------------------------------------------------------------------------------
-# $File: audio,v 1.71 2014/05/14 23:30:28 christos Exp $
-# audio: file(1) magic for sound formats (see also "iff")
-#
-# Jan Nicolai Langfeldt (janl at ifi.uio.no), Dan Quinlan (quinlan at yggdrasil.com),
-# and others
-#
-
-# Sun/NeXT audio data
-0 string .snd Sun/NeXT audio data:
->12 belong 1 8-bit ISDN mu-law,
-!:mime audio/basic
->12 belong 2 8-bit linear PCM [REF-PCM],
-!:mime audio/basic
->12 belong 3 16-bit linear PCM,
-!:mime audio/basic
->12 belong 4 24-bit linear PCM,
-!:mime audio/basic
->12 belong 5 32-bit linear PCM,
-!:mime audio/basic
->12 belong 6 32-bit IEEE floating point,
-!:mime audio/basic
->12 belong 7 64-bit IEEE floating point,
-!:mime audio/basic
->12 belong 8 Fragmented sample data,
->12 belong 10 DSP program,
->12 belong 11 8-bit fixed point,
->12 belong 12 16-bit fixed point,
->12 belong 13 24-bit fixed point,
->12 belong 14 32-bit fixed point,
->12 belong 18 16-bit linear with emphasis,
->12 belong 19 16-bit linear compressed,
->12 belong 20 16-bit linear with emphasis and compression,
->12 belong 21 Music kit DSP commands,
->12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
-!:mime audio/x-adpcm
->12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
->12 belong 27 8-bit A-law (CCITT G.711),
->20 belong 1 mono,
->20 belong 2 stereo,
->20 belong 4 quad,
->16 belong >0 %d Hz
-
-# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
-# that uses little-endian encoding and has a different magic number
-0 lelong 0x0064732E DEC audio data:
->12 lelong 1 8-bit ISDN mu-law,
-!:mime audio/x-dec-basic
->12 lelong 2 8-bit linear PCM [REF-PCM],
-!:mime audio/x-dec-basic
->12 lelong 3 16-bit linear PCM,
-!:mime audio/x-dec-basic
->12 lelong 4 24-bit linear PCM,
-!:mime audio/x-dec-basic
->12 lelong 5 32-bit linear PCM,
-!:mime audio/x-dec-basic
->12 lelong 6 32-bit IEEE floating point,
-!:mime audio/x-dec-basic
->12 lelong 7 64-bit IEEE floating point,
-!:mime audio/x-dec-basic
->12 belong 8 Fragmented sample data,
->12 belong 10 DSP program,
->12 belong 11 8-bit fixed point,
->12 belong 12 16-bit fixed point,
->12 belong 13 24-bit fixed point,
->12 belong 14 32-bit fixed point,
->12 belong 18 16-bit linear with emphasis,
->12 belong 19 16-bit linear compressed,
->12 belong 20 16-bit linear with emphasis and compression,
->12 belong 21 Music kit DSP commands,
->12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
-!:mime audio/x-dec-basic
->12 belong 24 compressed (8-bit CCITT G.722 ADPCM)
->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM),
->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM),
->12 belong 27 8-bit A-law (CCITT G.711),
->20 lelong 1 mono,
->20 lelong 2 stereo,
->20 lelong 4 quad,
->16 lelong >0 %d Hz
-
-# Creative Labs AUDIO stuff
-0 string MThd Standard MIDI data
-!:mime audio/midi
->8 beshort x (format %d)
->10 beshort x using %d track
->10 beshort >1 \bs
->12 beshort&0x7fff x at 1/%d
->12 beshort&0x8000 >0 SMPTE
-
-0 string CTMF Creative Music (CMF) data
-!:mime audio/x-unknown
-0 string SBI SoundBlaster instrument data
-!:mime audio/x-unknown
-0 string Creative\ Voice\ File Creative Labs voice data
-!:mime audio/x-unknown
-# is this next line right? it came this way...
->19 byte 0x1A
->23 byte >0 - version %d
->22 byte >0 \b.%d
-
-# first entry is also the string "NTRK"
-0 belong 0x4e54524b MultiTrack sound data
->4 belong x - version %d
-
-# Extended MOD format (*.emd) (Greg Roelofs, newt at uchicago.edu); NOT TESTED
-# [based on posting 940824 by "Dirk/Elastik", husberg at lehtori.cc.tut.fi]
-0 string EMOD Extended MOD sound data,
->4 byte&0xf0 x version %d
->4 byte&0x0f x \b.%d,
->45 byte x %d instruments
->83 byte 0 (module)
->83 byte 1 (song)
-
-# Real Audio (Magic .ra\0375)
-0 belong 0x2e7261fd RealAudio sound file
-!:mime audio/x-pn-realaudio
-0 string .RMF\0\0\0 RealMedia file
-!:mime application/vnd.rn-realmedia
-#video/x-pn-realvideo
-#video/vnd.rn-realvideo
-#application/vnd.rn-realmedia
-# sigh, there are many mimes for that but the above are the most common.
-
-# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert at dialin.ind.net]
-# Oct 31, 1995
-# fixed by <doj at cubic.org> 2003-06-24
-# Too short...
-#0 string MTM MultiTracker Module sound file
-#0 string if Composer 669 Module sound data
-#0 string JN Composer 669 Module sound data (extended format)
-0 string MAS_U ULT(imate) Module sound data
-
-#0 string FAR Module sound data
-#>4 string >\15 Title: "%s"
-
-0x2c string SCRM ScreamTracker III Module sound data
->0 string >\0 Title: "%s"
-
-# Gravis UltraSound patches
-# From <ache at nagual.ru>
-
-0 string GF1PATCH110\0ID#000002\0 GUS patch
-0 string GF1PATCH100\0ID#000002\0 Old GUS patch
-
-# mime types according to http://www.geocities.com/nevilo/mod.htm:
-# audio/it .it
-# audio/x-zipped-it .itz
-# audio/xm fasttracker modules
-# audio/x-s3m screamtracker modules
-# audio/s3m screamtracker modules
-# audio/x-zipped-mod mdz
-# audio/mod mod
-# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)
-
-#
-# Taken from loader code from mikmod version 2.14
-# by Steve McIntyre (stevem at chiark.greenend.org.uk)
-# <doj at cubic.org> added title printing on 2003-06-24
-0 string MAS_UTrack_V00
->14 string >/0 ultratracker V1.%.1s module sound data
-!:mime audio/x-mod
-#audio/x-tracker-module
-
-0 string UN05 MikMod UNI format module sound data
-
-0 string Extended\ Module: Fasttracker II module sound data
-!:mime audio/x-mod
-#audio/x-tracker-module
->17 string >\0 Title: "%s"
-
-21 string/c =!SCREAM! Screamtracker 2 module sound data
-!:mime audio/x-mod
-#audio/x-screamtracker-module
-21 string BMOD2STM Screamtracker 2 module sound data
-!:mime audio/x-mod
-#audio/x-screamtracker-module
-1080 string M.K. 4-channel Protracker module sound data
-!:mime audio/x-mod
-#audio/x-protracker-module
->0 string >\0 Title: "%s"
-1080 string M!K! 4-channel Protracker module sound data
-!:mime audio/x-mod
-#audio/x-protracker-module
->0 string >\0 Title: "%s"
-1080 string FLT4 4-channel Startracker module sound data
-!:mime audio/x-mod
-#audio/x-startracker-module
->0 string >\0 Title: "%s"
-1080 string FLT8 8-channel Startracker module sound data
-!:mime audio/x-mod
-#audio/x-startracker-module
->0 string >\0 Title: "%s"
-1080 string 4CHN 4-channel Fasttracker module sound data
-!:mime audio/x-mod
-#audio/x-fasttracker-module
->0 string >\0 Title: "%s"
-1080 string 6CHN 6-channel Fasttracker module sound data
-!:mime audio/x-mod
-#audio/x-fasttracker-module
->0 string >\0 Title: "%s"
-1080 string 8CHN 8-channel Fasttracker module sound data
-!:mime audio/x-mod
-#audio/x-fasttracker-module
->0 string >\0 Title: "%s"
-1080 string CD81 8-channel Octalyser module sound data
-!:mime audio/x-mod
-#audio/x-octalysertracker-module
->0 string >\0 Title: "%s"
-1080 string OKTA 8-channel Octalyzer module sound data
-!:mime audio/x-mod
-#audio/x-octalysertracker-module
->0 string >\0 Title: "%s"
-# Not good enough.
-#1082 string CH
-#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data
-1080 string 16CN 16-channel Taketracker module sound data
-!:mime audio/x-mod
-#audio/x-taketracker-module
->0 string >\0 Title: "%s"
-1080 string 32CN 32-channel Taketracker module sound data
-!:mime audio/x-mod
-#audio/x-taketracker-module
->0 string >\0 Title: "%s"
-
-# TOC sound files -Trevor Johnson <trevor at jpj.net>
-#
-0 string TOC TOC sound file
-
-# sidfiles <pooka at iki.fi>
-# added name,author,(c) and new RSID type by <doj at cubic.org> 2003-06-24
-0 string SIDPLAY\ INFOFILE Sidplay info file
-
-0 string PSID PlaySID v2.2+ (AMIGA) sidtune
->4 beshort >0 w/ header v%d,
->14 beshort =1 single song,
->14 beshort >1 %d songs,
->16 beshort >0 default song: %d
->0x16 string >\0 name: "%s"
->0x36 string >\0 author: "%s"
->0x56 string >\0 copyright: "%s"
-
-0 string RSID RSID sidtune PlaySID compatible
->4 beshort >0 w/ header v%d,
->14 beshort =1 single song,
->14 beshort >1 %d songs,
->16 beshort >0 default song: %d
->0x16 string >\0 name: "%s"
->0x36 string >\0 author: "%s"
->0x56 string >\0 copyright: "%s"
-
-# IRCAM sound files - Michael Pruett <michael at 68k.org>
-# http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/IRCAM/IRCAM.html
-0 belong 0x64a30100 IRCAM file (VAX little-endian)
-0 belong 0x0001a364 IRCAM file (VAX big-endian)
-0 belong 0x64a30200 IRCAM file (Sun big-endian)
-0 belong 0x0002a364 IRCAM file (Sun little-endian)
-0 belong 0x64a30300 IRCAM file (MIPS little-endian)
-0 belong 0x0003a364 IRCAM file (MIPS big-endian)
-0 belong 0x64a30400 IRCAM file (NeXT big-endian)
-0 belong 0x64a30400 IRCAM file (NeXT big-endian)
-0 belong 0x0004a364 IRCAM file (NeXT little-endian)
-
-# NIST SPHERE <mpruett at sgi.com>
-0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file
-
-# Sample Vision <mpruett at sgi.com>
-0 string SOUND\ SAMPLE\ DATA\ Sample Vision file
-
-# Audio Visual Research <tonigonenstein at users.sourceforge.net>
-0 string 2BIT Audio Visual Research file,
->12 beshort =0 mono,
->12 beshort =-1 stereo,
->14 beshort x %d bits
->16 beshort =0 unsigned,
->16 beshort =-1 signed,
->22 belong&0x00ffffff x %d Hz,
->18 beshort =0 no loop,
->18 beshort =-1 loop,
->21 ubyte <128 note %d,
->22 byte =0 replay 5.485 KHz
->22 byte =1 replay 8.084 KHz
->22 byte =2 replay 10.971 KHz
->22 byte =3 replay 16.168 KHz
->22 byte =4 replay 21.942 KHz
->22 byte =5 replay 32.336 KHz
->22 byte =6 replay 43.885 KHz
->22 byte =7 replay 47.261 KHz
-
-# SGI SoundTrack <mpruett at sgi.com>
-0 string _SGI_SoundTrack SGI SoundTrack project file
-# ID3 version 2 tags <waschk at informatik.uni-rostock.de>
-0 string ID3 Audio file with ID3 version 2
->3 byte x \b.%d
->4 byte x \b.%d
->>5 byte &0x80 \b, unsynchronized frames
->>5 byte &0x40 \b, extended header
->>5 byte &0x20 \b, experimental
->>5 byte &0x10 \b, footer present
->(6.I) indirect x \b, contains:
-
-# NSF (NES sound file) magic
-0 string NESM\x1a NES Sound File
->14 string >\0 ("%s" by
->46 string >\0 %s, copyright
->78 string >\0 %s),
->5 byte x version %d,
->6 byte x %d tracks,
->122 byte&0x2 =1 dual PAL/NTSC
->122 byte&0x1 =1 PAL
->122 byte&0x1 =0 NTSC
-
-# Type: SNES SPC700 sound files
-# From: Josh Triplett <josh at freedesktop.org>
-0 string SNES-SPC700\ Sound\ File\ Data\ v SNES SPC700 sound file
->&0 string 0.30 \b, version %s
->>0x23 byte 0x1B \b, without ID666 tag
->>0x23 byte 0x1A \b, with ID666 tag
->>>0x2E string >\0 \b, song "%.32s"
->>>0x4E string >\0 \b, game "%.32s"
-
-# Impulse tracker module (audio/x-it)
-0 string IMPM Impulse Tracker module sound data -
-!:mime audio/x-mod
->4 string >\0 "%s"
->40 leshort !0 compatible w/ITv%x
->42 leshort !0 created w/ITv%x
-
-# Imago Orpheus module (audio/x-imf)
-60 string IM10 Imago Orpheus module sound data -
->0 string >\0 "%s"
-
-# From <collver1 at attbi.com>
-# These are the /etc/magic entries to decode modules, instruments, and
-# samples in Impulse Tracker's native format.
-
-0 string IMPS Impulse Tracker Sample
->18 byte &2 16 bit
->18 byte ^2 8 bit
->18 byte &4 stereo
->18 byte ^4 mono
-0 string IMPI Impulse Tracker Instrument
->28 leshort !0 ITv%x
->30 byte !0 %d samples
-
-# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files
-# From <collver1 at attbi.com>
-0 string LM8953 Yamaha TX Wave
->22 byte 0x49 looped
->22 byte 0xC9 non-looped
->23 byte 1 33kHz
->23 byte 2 50kHz
->23 byte 3 16kHz
-
-# scream tracker: file(1) magic for Scream Tracker sample files
-#
-# From <collver1 at attbi.com>
-76 string SCRS Scream Tracker Sample
->0 byte 1 sample
->0 byte 2 adlib melody
->0 byte >2 adlib drum
->31 byte &2 stereo
->31 byte ^2 mono
->31 byte &4 16bit little endian
->31 byte ^4 8bit
->30 byte 0 unpacked
->30 byte 1 packed
-
-# audio
-# From: Cory Dikkers <cdikkers at swbell.net>
-0 string MMD0 MED music file, version 0
-0 string MMD1 OctaMED Pro music file, version 1
-0 string MMD3 OctaMED Soundstudio music file, version 3
-0 string OctaMEDCmpr OctaMED Soundstudio compressed file
-0 string MED MED_Song
-0 string SymM Symphonie SymMOD music file
-#
-0 string THX AHX version
->3 byte =0 1 module data
->3 byte =1 2 module data
-#
-0 string OKTASONG Oktalyzer module data
-#
-0 string DIGI\ Booster\ module\0 %s
->20 byte >0 %c
->>21 byte >0 \b%c
->>>22 byte >0 \b%c
->>>>23 byte >0 \b%c
->610 string >\0 \b, "%s"
-#
-0 string DBM0 DIGI Booster Pro Module
->4 byte >0 V%X.
->>5 byte x \b%02X
->16 string >\0 \b, "%s"
-#
-0 string FTMN FaceTheMusic module
->16 string >\0d \b, "%s"
-
-# From: <doj at cubic.org> 2003-06-24
-0 string AMShdr\32 Velvet Studio AMS Module v2.2
-0 string Extreme Extreme Tracker AMS Module v1.3
-0 string DDMF Xtracker DMF Module
->4 byte x v%i
->0xD string >\0 Title: "%s"
->0x2B string >\0 Composer: "%s"
-0 string DSM\32 Dynamic Studio Module DSM
-0 string SONG DigiTrekker DTM Module
-0 string DMDL DigiTrakker MDL Module
-0 string PSM\32 Protracker Studio PSM Module
-44 string PTMF Poly Tracker PTM Module
->0 string >\32 Title: "%s"
-0 string MT20 MadTracker 2.0 Module MT2
-0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
-0 string RTMM RTM Module
-0x426 string MaDoKaN96 XMS Adlib Module
->0 string >\0 Composer: "%s"
-0 string AMF AMF Module
->4 string >\0 Title: "%s"
-0 string MODINFO1 Open Cubic Player Module Inforation MDZ
-0 string Extended\40Instrument: Fast Tracker II Instrument
-
-# From: Takeshi Hamasaki <hma at syd.odn.ne.jp>
-# NOA Nancy Codec file
-0 string \210NOA\015\012\032 NOA Nancy Codec Movie file
-# Yamaha SMAF format
-0 string MMMD Yamaha SMAF file
-# Sharp Jisaku Melody format for PDC
-0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody
->20 string Ver01.00 Ver. 1.00
->>32 byte x , %d tracks
-
-# Free lossless audio codec <http://flac.sourceforge.net>
-# From: Przemyslaw Augustyniak <silvathraec at rpg.pl>
-0 string fLaC FLAC audio bitstream data
-!:mime audio/x-flac
->4 byte&0x7f >0 \b, unknown version
->4 byte&0x7f 0 \b
-# some common bits/sample values
->>20 beshort&0x1f0 0x030 \b, 4 bit
->>20 beshort&0x1f0 0x050 \b, 6 bit
->>20 beshort&0x1f0 0x070 \b, 8 bit
->>20 beshort&0x1f0 0x0b0 \b, 12 bit
->>20 beshort&0x1f0 0x0f0 \b, 16 bit
->>20 beshort&0x1f0 0x170 \b, 24 bit
->>20 byte&0xe 0x0 \b, mono
->>20 byte&0xe 0x2 \b, stereo
->>20 byte&0xe 0x4 \b, 3 channels
->>20 byte&0xe 0x6 \b, 4 channels
->>20 byte&0xe 0x8 \b, 5 channels
->>20 byte&0xe 0xa \b, 6 channels
->>20 byte&0xe 0xc \b, 7 channels
->>20 byte&0xe 0xe \b, 8 channels
-# some common sample rates
->>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz
->>17 belong&0xfffff0 0x0bb800 \b, 48 kHz
->>17 belong&0xfffff0 0x07d000 \b, 32 kHz
->>17 belong&0xfffff0 0x056220 \b, 22.05 kHz
->>17 belong&0xfffff0 0x05dc00 \b, 24 kHz
->>17 belong&0xfffff0 0x03e800 \b, 16 kHz
->>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz
->>17 belong&0xfffff0 0x02ee00 \b, 12 kHz
->>17 belong&0xfffff0 0x01f400 \b, 8 kHz
->>17 belong&0xfffff0 0x177000 \b, 96 kHz
->>17 belong&0xfffff0 0x0fa000 \b, 64 kHz
->>21 byte&0xf >0 \b, >4G samples
->>21 byte&0xf 0 \b
->>>22 belong >0 \b, %u samples
->>>22 belong 0 \b, length unknown
-
-# (ISDN) VBOX voice message file (Wolfram Kleff)
-0 string VBOX VBOX voice message data
-
-# ReBorn Song Files (.rbs)
-# David J. Singer <doc at deadvirgins.org.uk>
-8 string RB40 RBS Song file
->29 string ReBorn created by ReBorn
->37 string Propellerhead created by ReBirth
-
-# Synthesizer Generator and Kimwitu share their file format
-0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data
-# Kimwitu++ uses a slightly different magic
-0 string A#S#C#S#S#L#HUB Kimwitu++ data
-
-# From "Simon Hosie
-0 string TFMX-SONG TFMX module sound data
-
-# Monkey's Audio compressed audio format (.ape)
-# From danny.milo at gmx.net (Danny Milosavljevic)
-# New version from Abel Cheung <abel (@) oaka.org>
-0 string MAC\040 Monkey's Audio compressed format
-!:mime audio/x-ape
->4 uleshort >0x0F8B version %d
->>(0x08.l) uleshort =1000 with fast compression
->>(0x08.l) uleshort =2000 with normal compression
->>(0x08.l) uleshort =3000 with high compression
->>(0x08.l) uleshort =4000 with extra high compression
->>(0x08.l) uleshort =5000 with insane compression
->>(0x08.l+18) uleshort =1 \b, mono
->>(0x08.l+18) uleshort =2 \b, stereo
->>(0x08.l+20) ulelong x \b, sample rate %d
->4 uleshort <0x0F8C version %d
->>6 uleshort =1000 with fast compression
->>6 uleshort =2000 with normal compression
->>6 uleshort =3000 with high compression
->>6 uleshort =4000 with extra high compression
->>6 uleshort =5000 with insane compression
->>10 uleshort =1 \b, mono
->>10 uleshort =2 \b, stereo
->>12 ulelong x \b, sample rate %d
-
-# adlib sound files
-# From Gurkan Sengun <gurkan at linuks.mine.nu>, http://www.linuks.mine.nu
-0 string RAWADATA RdosPlay RAW
-
-1068 string RoR AMUSIC Adlib Tracker
-
-0 string JCH EdLib
-
-0 string mpu401tr MPU-401 Trakker
-
-0 string SAdT Surprise! Adlib Tracker
->4 byte x Version %d
-
-0 string XAD! eXotic ADlib
-
-0 string ofTAZ! eXtra Simple Music
-
-# Spectrum 128 tunes (.ay files).
-# From: Emanuel Haupt <ehaupt at critical.ch>
-0 string ZXAYEMUL Spectrum 128 tune
-
-0 string \0BONK BONK,
-#>5 byte x version %d
->14 byte x %d channel(s),
->15 byte =1 lossless,
->15 byte =0 lossy,
->16 byte x mid-side
-
-384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones)
-
-# format VQF (proprietary codec for sound)
-# some infos on the header file available at :
-# http://www.twinvq.org/english/technology_format.html
-0 string TWIN97012000 VQF data
->27 short 0 \b, Mono
->27 short 1 \b, Stereo
->31 short >0 \b, %d kbit/s
->35 short >0 \b, %d kHz
-
-# Nelson A. de Oliveira (naoliv at gmail.com)
-# .eqf
-0 string Winamp\ EQ\ library\ file %s
-# it will match only versions like v<digit>.<digit>
-# Since I saw only eqf files with version v1.1 I think that it's OK
->23 string x \b%.4s
-# .preset
-0 string [Equalizer\ preset] XMMS equalizer preset
-# .m3u
-0 search/1 #EXTM3U M3U playlist text
-# .pls
-0 search/1 [playlist] PLS playlist text
-# licq.conf
-1 string [licq] LICQ configuration file
-
-# Atari ST audio files by Dirk Jagdmann <doj at cubic.org>
-0 string ICE! SNDH Atari ST music
-0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music
-
-# musepak support From: "Jiri Pejchal" <jiri.pejchal at gmail.com>
-0 string MP+ Musepack audio
-!:mime audio/x-musepack
->3 byte 255 \b, SV pre8
->3 byte&0xF 0x6 \b, SV 6
->3 byte&0xF 0x8 \b, SV 8
->3 byte&0xF 0x7 \b, SV 7
->>3 byte&0xF0 0x0 \b.0
->>3 byte&0xF0 0x10 \b.1
->>3 byte&0xF0 240 \b.15
->>10 byte&0xF0 0x0 \b, no profile
->>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental'
->>10 byte&0xF0 0x50 \b, quality 0
->>10 byte&0xF0 0x60 \b, quality 1
->>10 byte&0xF0 0x70 \b, quality 2 (Telephone)
->>10 byte&0xF0 0x80 \b, quality 3 (Thumb)
->>10 byte&0xF0 0x90 \b, quality 4 (Radio)
->>10 byte&0xF0 0xA0 \b, quality 5 (Standard)
->>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme)
->>10 byte&0xF0 0xC0 \b, quality 7 (Insane)
->>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead)
->>10 byte&0xF0 0xE0 \b, quality 9
->>10 byte&0xF0 0xF0 \b, quality 10
->>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05
->>27 byte 102 \b, Beta 1.02
->>27 byte 104 \b, Beta 1.04
->>27 byte 105 \b, Alpha 1.05
->>27 byte 106 \b, Beta 1.06
->>27 byte 110 \b, Release 1.1
->>27 byte 111 \b, Alpha 1.11
->>27 byte 112 \b, Beta 1.12
->>27 byte 113 \b, Alpha 1.13
->>27 byte 114 \b, Beta 1.14
->>27 byte 115 \b, Alpha 1.15
-
-# IMY
-# from http://filext.com/detaillist.php?extdetail=IMY
-# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm
-# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html
-# http://www.wx800.com/msg/download/irda/iMelody.pdf
-0 string BEGIN:IMELODY iMelody Ringtone Format
-
-# From: "Mateus Caruccio" <mateus at caruccio.com>
-# guitar pro v3,4,5 from http://filext.com/file-extension/gp3
-0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature
-
-# From: "Leslie P. Polzer" <leslie.polzer at gmx.net>
-60 string SONG SoundFX Module sound file
-
-# Type: Adaptive Multi-Rate Codec
-# URL: http://filext.com/detaillist.php?extdetail=AMR
-# From: Russell Coker <russell at coker.com.au>
-0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony)
-
-# Type: SuperCollider 3 Synth Definition File Format
-# From: Mario Lang <mlang at debian.org>
-0 string SCgf SuperCollider3 Synth Definition file,
->4 belong x version %d
-
-# Type: True Audio Lossless Audio
-# URL: http://wiki.multimedia.cx/index.php?title=True_Audio
-# From: Mike Melanson <mike at multimedia.cx>
-0 string TTA1 True Audio Lossless Audio
-
-# Type: WavPack Lossless Audio
-# URL: http://wiki.multimedia.cx/index.php?title=WavPack
-# From: Mike Melanson <mike at multimedia.cx>
-0 string wvpk WavPack Lossless Audio
-
-# From Fabio R. Schmidlin <frs at pop.com.br>
-# VGM music file
-0 string Vgm\
->9 ubyte >0 VGM Video Game Music dump v
->>9 ubyte/16 >0 \b%d
->>9 ubyte&0x0F x \b%d
->>8 ubyte/16 x \b.%d
->>8 ubyte&0x0F >0 \b%d
-#Get soundchips
->>8 ubyte x \b, soundchip(s)=
->>0x0C ulelong >0 SN76489,
->>0x10 ulelong >0 YM2413,
->>0x2C ulelong >0 YM2612,
->>0x30 ulelong >0 YM2151,
->>0x38 ulelong >0 Sega PCM,
->>0x34 ulelong >0xC
->>>0x40 ulelong >0 RF5C68,
->>0x34 ulelong >0x10
->>>0x44 ulelong >0 YM2203,
->>0x34 ulelong >0x14
->>>0x48 ulelong >0 YM2608,
->>0x34 ulelong >0x18
->>>0x4C lelong >0 YM2610,
->>>0x4C lelong <0 YM2610B,
->>0x34 ulelong >0x1C
->>>0x50 ulelong >0 YM3812,
->>0x34 ulelong >0x20
->>>0x54 ulelong >0 YM3526,
->>0x34 ulelong >0x24
->>>0x58 ulelong >0 Y8950,
->>0x34 ulelong >0x28
->>>0x5C ulelong >0 YMF262,
->>0x34 ulelong >0x2C
->>>0x60 ulelong >0 YMF278B,
->>0x34 ulelong >0x30
->>>0x64 ulelong >0 YMF271,
->>0x34 ulelong >0x34
->>>0x68 ulelong >0 YMZ280B,
->>0x34 ulelong >0x38
->>>0x6C ulelong >0 RF5C164,
->>0x34 ulelong >0x3C
->>>0x70 ulelong >0 PWM,
->>0x34 ulelong >0x40
->>>0x74 ulelong >0
->>>>0x78 ubyte 0x00 AY-3-8910,
->>>>0x78 ubyte 0x01 AY-3-8912,
->>>>0x78 ubyte 0x02 AY-3-8913,
->>>>0x78 ubyte 0x03 AY-3-8930,
->>>>0x78 ubyte 0x10 YM2149,
->>>>0x78 ubyte 0x11 YM3439,
-
-# GVOX Encore file format
-# Since this is a proprietary file format and there is no publicly available
-# format specification, this is just based on induction
-#
-0 string SCOW
->4 byte 0xc4 GVOX Encore music, version 5.0 or above
->4 byte 0xc2 GVOX Encore music, version < 5.0
-
-0 string ZBOT
->4 byte 0xc5 GVOX Encore music, version < 5.0
-
-
-#----------------------------------------------------------------
-# $File: basis,v 1.4 2009/09/19 16:28:08 christos Exp $
-# basis: file(1) magic for BBx/Pro5-files
-# Oliver Dammer <dammer at olida.de> 2005/11/07
-# http://www.basis.com business-basic-files.
-#
-0 string \074\074bbx\076\076 BBx
->7 string \000 indexed file
->7 string \001 serial file
->7 string \002 keyed file
->>13 short 0 (sort)
->7 string \004 program
->>18 byte x (LEVEL %d)
->>>23 string >\000 psaved
->7 string \006 mkeyed file
->>13 short 0 (sort)
->>8 string \000 (mkey)
-
-#------------------------------------------------------------------------------
-# $File: bflt,v 1.5 2014/04/30 21:41:02 christos Exp $
-# bFLT: file(1) magic for BFLT uclinux binary files
-#
-# From Philippe De Muyter <phdm at macqel.be>
-#
-0 string bFLT BFLT executable
->4 belong x - version %d
->4 belong 4
->>36 belong&0x1 0x1 ram
->>36 belong&0x2 0x2 gotpic
->>36 belong&0x4 0x4 gzip
->>36 belong&0x8 0x8 gzdata
-
-#------------------------------------------------------------------------------
-# $File: blackberry,v 1.1 2014/01/31 01:51:32 christos Exp $
-# blackberry: file(1) magic for BlackBerry file formats
-#
-5 belong 0
->8 belong 010010010 BlackBerry RIM ETP file
->>22 string x \b for %s
-# Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files
-# http://ftg.lbl.gov/checkpoint
-0 string C\0\0\0R\0\0\0 BLCR
->16 lelong 1 x86
->16 lelong 3 alpha
->16 lelong 5 x86-64
->16 lelong 7 ARM
->8 lelong x context data (little endian, version %d)
-# Uncomment the following only of your "file" program supports "search"
-#>0 search/1024 VMA\06 for kernel
-#>>&1 byte x %d.
-#>>&2 byte x %d.
-#>>&3 byte x %d
-0 string \0\0\0C\0\0\0R BLCR
->16 belong 2 SPARC
->16 belong 4 ppc
->16 belong 6 ppc64
->16 belong 7 ARMEB
->16 belong 8 SPARC64
->8 belong x context data (big endian, version %d)
-# Uncomment the following only of your "file" program supports "search"
-#>0 search/1024 VMA\06 for kernel
-#>>&1 byte x %d.
-#>>&2 byte x \b%d.
-#>>&3 byte x \b%d
-
-#------------------------------------------------------------------------------
-# $File: blender,v 1.5 2009/09/19 16:28:08 christos Exp $
-# blender: file(1) magic for Blender 3D related files
-#
-# Native format rule v1.2. For questions use the developers list
-# http://lists.blender.org/mailman/listinfo/bf-committers
-# GLOB chunk was moved near start and provides subversion info since 2.42
-
-0 string =BLENDER Blender3D,
->7 string =_ saved as 32-bits
->>8 string =v little endian
->>>9 byte x with version %c.
->>>10 byte x \b%c
->>>11 byte x \b%c
->>>0x40 string =GLOB \b.
->>>>0x58 leshort x \b%.4d
->>8 string =V big endian
->>>9 byte x with version %c.
->>>10 byte x \b%c
->>>11 byte x \b%c
->>>0x40 string =GLOB \b.
->>>>0x58 beshort x \b%.4d
->7 string =- saved as 64-bits
->>8 string =v little endian
->>9 byte x with version %c.
->>10 byte x \b%c
->>11 byte x \b%c
->>0x44 string =GLOB \b.
->>>0x60 leshort x \b%.4d
->>8 string =V big endian
->>>9 byte x with version %c.
->>>10 byte x \b%c
->>>11 byte x \b%c
->>>0x44 string =GLOB \b.
->>>>0x60 beshort x \b%.4d
-
-# Scripts that run in the embeded Python interpreter
-0 string #!BPY Blender3D BPython script
-
-#------------------------------------------------------------------------------
-# $File: blit,v 1.8 2009/09/19 16:28:08 christos Exp $
-# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine
-#
-# Note that this 0407 conflicts with several other a.out formats...
-#
-# XXX - should this be redone with "be" and "le", so that it works on
-# little-endian machines as well? If so, what's the deal with
-# "VAX-order" and "VAX-order2"?
-#
-#0 long 0407 68K Blit (standalone) executable
-#0 short 0407 VAX-order2 68K Blit (standalone) executable
-0 short 03401 VAX-order 68K Blit (standalone) executable
-0 long 0406 68k Blit mpx/mux executable
-0 short 0406 VAX-order2 68k Blit mpx/mux executable
-0 short 03001 VAX-order 68k Blit mpx/mux executable
-# Need more values for WE32 DMD executables.
-# Note that 0520 is the same as COFF
-#0 short 0520 tty630 layers executable
-
-#------------------------------------------------------------------------------
-# $File: bout,v 1.5 2009/09/19 16:28:08 christos Exp $
-# i80960 b.out objects and archives
-#
-0 long 0x10d i960 b.out relocatable object
->16 long >0 not stripped
-#
-# b.out archive (hp-rt on i960)
-0 string =!<bout> b.out archive
->8 string __.SYMDEF random library
-
-#------------------------------------------------------------------------------
-# $File: bsdi,v 1.7 2014/03/29 15:40:34 christos Exp $
-# bsdi: file(1) magic for BSD/OS (from BSDI) objects
-# Some object/executable formats use the same magic numbers as are used
-# in other OSes; those are handled by entries in aout.
-#
-
-0 lelong 0314 386 compact demand paged pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-# same as in SunOS 4.x, except for static shared libraries
-0 belong&077777777 0600413 SPARC demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
->36 belong 0xb4100001 (uses shared libs)
-
-0 belong&077777777 0600410 SPARC pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
->36 belong 0xb4100001 (uses shared libs)
-
-0 belong&077777777 0600407 SPARC
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
->36 belong 0xb4100001 (uses shared libs)
-# Chiasmus is a encryption standard developed by the German Federal
-# Office for Information Security (Bundesamt fuer Sicherheit in der
-# Informationstechnik).
-
-# Extension: .xia
-0 string XIA1 Chiasmus encrypted data
-
-# Extension: .xis
-0 string XIS Chiasmus key
-
-#------------------------------------------------------------------------------
-# $File: btsnoop,v 1.5 2009/09/19 16:28:08 christos Exp $
-# BTSnoop: file(1) magic for BTSnoop files
-#
-# From <marcel at holtmann.org>
-0 string btsnoop\0 BTSnoop
->8 belong x version %d,
->12 belong 1001 Unencapsulated HCI
->12 belong 1002 HCI UART (H4)
->12 belong 1003 HCI BCSP
->12 belong 1004 HCI Serial (H5)
->>12 belong x type %d
-#------------------------------------------------------------------------------
-# $File: c-lang,v 1.19 2014/06/03 19:17:27 christos Exp $
-# c-lang: file(1) magic for C and related languages programs
-#
-
-# BCPL
-0 search/8192 "libhdr" BCPL source text
-!:mime text/x-bcpl
-0 search/8192 "LIBHDR" BCPL source text
-!:mime text/x-bcpl
-
-# C
-0 regex \^#include C source text
-!:mime text/x-c
-0 regex \^char[\ \t\n]+ C source text
-!:mime text/x-c
-0 regex \^double[\ \t\n]+ C source text
-!:mime text/x-c
-0 regex \^extern[\ \t\n]+ C source text
-!:mime text/x-c
-0 regex \^float[\ \t\n]+ C source text
-!:mime text/x-c
-0 regex \^struct[\ \t\n]+ C source text
-!:mime text/x-c
-0 regex \^union[\ \t\n]+ C source text
-!:mime text/x-c
-0 search/8192 main( C source text
-!:mime text/x-c
-
-# C++
-# The strength of these rules is increased so they beat the C rules above
-0 regex \^template[\ \t\n]+ C++ source text
-!:strength + 5
-!:mime text/x-c++
-0 regex \^virtual[\ \t\n]+ C++ source text
-!:strength + 5
-!:mime text/x-c++
-0 regex \^class[\ \t\n]+ C++ source text
-!:strength + 5
-!:mime text/x-c++
-0 regex \^public: C++ source text
-!:strength + 5
-!:mime text/x-c++
-0 regex \^private: C++ source text
-!:strength + 5
-!:mime text/x-c++
-
-# From: Mikhail Teterin <mi at aldan.algebra.com>
-0 string cscope cscope reference data
->7 string x version %.2s
-# We skip the path here, because it is often long (so file will
-# truncate it) and mostly redundant.
-# The inverted index functionality was added some time between
-# versions 11 and 15, so look for -q if version is above 14:
->7 string >14
->>10 search/100 \ -q\ with inverted index
->10 search/100 \ -c\ text (non-compressed)
-
-#------------------------------------------------------------------------------
-# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $
-# c64: file(1) magic for various commodore 64 related files
-#
-# From: Dirk Jagdmann <doj at cubic.org>
-
-0x16500 belong 0x12014100 D64 Image
-0x16500 belong 0x12014180 D71 Image
-0x61800 belong 0x28034400 D81 Image
-0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image
-0 belong 0x43154164 X64 Image
-
-0 string GCR-1541 GCR Image
->8 byte x version: %i
->9 byte x tracks: %i
-
-9 string PSUR ARC archive (c64)
-2 string -LH1- LHA archive (c64)
-
-0 string C64File PC64 Emulator file
->8 string >\0 "%s"
-0 string C64Image PC64 Freezer Image
-
-0 beshort 0x38CD C64 PCLink Image
-0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot
-
-0 belong 0xFF424CFF WRAptor packer (c64)
-
-0 string C64S\x20tape\x20file T64 tape Image
->32 leshort x Version:0x%x
->36 leshort !0 Entries:%i
->40 string x Name:%.24s
-
-0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
->32 leshort x Version:0x%x
->36 leshort !0 Entries:%i
->40 string x Name:%.24s
-
-0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
->32 leshort x Version:0x%x
->36 leshort !0 Entries:%i
->40 string x Name:%.24s
-
-#------------------------------------------------------------------------------
-# $File: cad,v 1.13 2014/03/23 18:05:38 christos Exp $
-# autocad: file(1) magic for cad files
-#
-
-# Microstation DGN/CIT Files (www.bentley.com)
-# Last updated July 29, 2005 by Lester Hightower
-# DGN is the default file extension of Microstation/Intergraph CAD files.
-# CIT is the proprietary raster format (similar to TIFF) used to attach
-# raster underlays to Microstation DGN (vector) drawings.
-#
-# http://www.wotsit.org/search.asp
-# http://filext.com/detaillist.php?extdetail=DGN
-# http://filext.com/detaillist.php?extdetail=CIT
-#
-# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2
-# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928
-# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682
-# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F
-0 string \010\011\376 Microstation
->3 string \002
->>30 string \026\105 DGNFile
->>30 string \034\105 DGNFile
->>30 string \073\107 DGNFile
->>30 string \073\110 DGNFile
->>30 string \106\107 DGNFile
->>30 string \110\103 DGNFile
->>30 string \120\104 DGNFile
->>30 string \172\104 DGNFile
->>30 string \172\105 DGNFile
->>30 string \172\106 DGNFile
->>30 string \234\106 DGNFile
->>30 string \273\105 DGNFile
->>30 string \306\106 DGNFile
->>30 string \310\104 DGNFile
->>30 string \341\104 DGNFile
->>30 string \372\103 DGNFile
->>30 string \372\104 DGNFile
->>30 string \372\106 DGNFile
->>30 string \376\103 DGNFile
->4 string \030\000\000 CITFile
->4 string \030\000\003 CITFile
-
-# AutoCAD
-# Merge of the different contributions and updates from http://en.wikipedia.org/wiki/Dwg
-# and http://www.iana.org/assignments/media-types/image/vnd.dwg
-0 string MC0.0 DWG AutoDesk AutoCAD Release 1.0
-!:mime image/vnd.dwg
-0 string AC1.2 DWG AutoDesk AutoCAD Release 1.2
-!:mime image/vnd.dwg
-0 string AC1.3 DWG AutoDesk AutoCAD Release 1.3
-!:mime image/vnd.dwg
-0 string AC1.40 DWG AutoDesk AutoCAD Release 1.40
-!:mime image/vnd.dwg
-0 string AC1.50 DWG AutoDesk AutoCAD Release 2.05
-!:mime image/vnd.dwg
-0 string AC2.10 DWG AutoDesk AutoCAD Release 2.10
-!:mime image/vnd.dwg
-0 string AC2.21 DWG AutoDesk AutoCAD Release 2.21
-!:mime image/vnd.dwg
-0 string AC2.22 DWG AutoDesk AutoCAD Release 2.22
-!:mime image/vnd.dwg
-0 string AC1001 DWG AutoDesk AutoCAD Release 2.22
-!:mime image/vnd.dwg
-0 string AC1002 DWG AutoDesk AutoCAD Release 2.50
-!:mime image/vnd.dwg
-0 string AC1003 DWG AutoDesk AutoCAD Release 2.60
-!:mime image/vnd.dwg
-0 string AC1004 DWG AutoDesk AutoCAD Release 9
-!:mime image/vnd.dwg
-0 string AC1006 DWG AutoDesk AutoCAD Release 10
-!:mime image/vnd.dwg
-0 string AC1009 DWG AutoDesk AutoCAD Release 11/12
-!:mime image/vnd.dwg
-# AutoCAD DWG versions R13/R14 (www.autodesk.com)
-# Written December 01, 2003 by Lester Hightower
-# Based on the DWG File Format Specifications at http://www.opendwg.org/
-# AutoCad, from Nahuel Greco
-# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)
-0 string AC1012 DWG AutoDesk AutoCAD Release 13
-!:mime image/vnd.dwg
-0 string AC1014 DWG AutoDesk AutoCAD Release 14
-!:mime image/vnd.dwg
-0 string AC1015 DWG AutoDesk AutoCAD 2000/2002
-!:mime image/vnd.dwg
-
-# A new version of AutoCAD DWG
-# Sergey Zaykov (mail_of_sergey at mail.ru, sergey_zaikov at rambler.ru,
-# ICQ 358572321)
-# From various sources like:
-# http://autodesk.blogs.com/between_the_lines/autocad-release-history.html
-0 string AC1018 DWG AutoDesk AutoCAD 2004/2005/2006
-!:mime image/vnd.dwg
-0 string AC1021 DWG AutoDesk AutoCAD 2007/2008/2009
-!:mime image/vnd.dwg
-0 string AC1024 DWG AutoDesk AutoCAD 2010/2011/2012
-!:mime image/vnd.dwg
-0 string AC1027 DWG AutoDesk AutoCAD 2013/2014
-!:mime image/vnd.dwg
-
-# KOMPAS 2D drawing from ASCON
-# This is KOMPAS 2D drawing or fragment of drawing but is not detailed nor
-# gathered nor specification
-# ASCON http://ascon.net/main/ in English,
-# http://ascon.ru/ main site in Russian
-# Extension is CDW for drawing and FRW for fragment of drawing
-# Sergey Zaykov (mail_of_sergey at mail.ru, sergey_zaikov at rambler.ru,
-# ICQ 358572321, http://vkontakte.ru/id16076543)
-# From:
-# http://sd.ascon.ru/otrs/customer.pl?Action=CustomerFAQ&CategoryID=4&ItemID=292
-# (in russian) and my experiments
-0 string KF
->2 belong 0x4E00000C Kompas drawing 12.0 SP1
->2 belong 0x4D00000C Kompas drawing 12.0
->2 belong 0x3200000B Kompas drawing 11.0 SP1
->2 belong 0x3100000B Kompas drawing 11.0
->2 belong 0x2310000A Kompas drawing 10.0 SP1
->2 belong 0x2110000A Kompas drawing 10.0
->2 belong 0x08000009 Kompas drawing 9.0 SP1
->2 belong 0x05000009 Kompas drawing 9.0
->2 belong 0x33010008 Kompas drawing 8+
->2 belong 0x1A000008 Kompas drawing 8.0
->2 belong 0x2C010107 Kompas drawing 7+
->2 belong 0x05000007 Kompas drawing 7.0
->2 belong 0x32000006 Kompas drawing 6+
->2 belong 0x09000006 Kompas drawing 6.0
->2 belong 0x5C009005 Kompas drawing 5.11R03
->2 belong 0x54009005 Kompas drawing 5.11R02
->2 belong 0x51009005 Kompas drawing 5.11R01
->2 belong 0x22009005 Kompas drawing 5.10R03
->2 belong 0x22009005 Kompas drawing 5.10R02 mar
->2 belong 0x21009005 Kompas drawing 5.10R02 febr
->2 belong 0x19009005 Kompas drawing 5.10R01
->2 belong 0xF4008005 Kompas drawing 5.9R01.003
->2 belong 0x1C008005 Kompas drawing 5.9R01.002
->2 belong 0x11008005 Kompas drawing 5.8R01.003
-
-# CAD: file(1) magic for computer aided design files
-# Phillip Griffith <phillip dot griffith at gmail dot com>
-# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.
-#
-0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library
-0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD
-0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD
-0 beshort 0x0809 Bentley/Intergraph MicroStation
->0x02 byte 0xfe
->>0x04 beshort 0x1800 CIT raster CAD
-
-# 3DS (3d Studio files) Conflicts with diff output 0x3d '='
-#16 beshort 0x3d3d image/x-3ds
-
-# MegaCAD 2D/3D drawing (.prt)
-# http://megacad.de/
-# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 string MegaCad23\0 MegaCAD 2D/3D drawing
-
-#------------------------------------------------------------------------------
-# $File: cafebabe,v 1.16 2014/04/30 21:41:02 christos Exp $
-# Cafe Babes unite!
-#
-# Since Java bytecode and Mach-O universal binaries have the same magic number,
-# the test must be performed in the same "magic" sequence to get both right.
-# The long at offset 4 in a Mach-O universal binary tells the number of
-# architectures; the short at offset 4 in a Java bytecode file is the JVM minor
-# version and the short at offset 6 is the JVM major version. Since there are only
-# only 18 labeled Mach-O architectures at current, and the first released
-# Java class format was version 43.0, we can safely choose any number
-# between 18 and 39 to test the number of architectures against
-# (and use as a hack). Let's not use 18, because the Mach-O people
-# might add another one or two as time goes by...
-#
-### JAVA START ###
-0 belong 0xcafebabe
->4 belong >30 compiled Java class data,
-!:mime application/x-java-applet
->>6 beshort x version %d.
->>4 beshort x \b%d
-# Which is which?
-#>>4 belong 0x032d (Java 1.0)
-#>>4 belong 0x032d (Java 1.1)
->>4 belong 0x002e (Java 1.2)
->>4 belong 0x002f (Java 1.3)
->>4 belong 0x0030 (Java 1.4)
->>4 belong 0x0031 (Java 1.5)
->>4 belong 0x0032 (Java 1.6)
-
-0 belong 0xcafed00d JAR compressed with pack200,
->5 byte x version %d.
->4 byte x \b%d
-!:mime application/x-java-pack200
-
-
-0 belong 0xcafed00d JAR compressed with pack200,
->5 byte x version %d.
->4 byte x \b%d
-!:mime application/x-java-pack200
-
-### JAVA END ###
-### MACH-O START ###
-
-0 name mach-o \b [
->0 use mach-o-cpu \b
->&(8.L) indirect \b:
->0 belong x \b]
-
-0 belong 0xcafebabe
->4 belong 1 Mach-O universal binary with 1 architecture:
->>8 use mach-o \b
->4 belong >1
->>4 belong <20 Mach-O universal binary with %d architectures:
->>>8 use mach-o \b
->>>28 use mach-o \b
->>4 belong >2
->>>48 use mach-o \b
->>4 belong >3
->>>68 use mach-o \b
-
-### MACH-O END ###
-
-#------------------------------------------------------------------------------
-# $File: cddb,v 1.4 2009/09/19 16:28:08 christos Exp $
-# CDDB: file(1) magic for CDDB(tm) format CD text data files
-#
-# From <steve at gracenote.com>
-#
-# This is the /etc/magic entry to decode datafiles as used by
-# CDDB-enabled CD player applications.
-#
-
-0 search/1/w #\040xmcd CDDB(tm) format CD text data
-
-#------------------------------------------------------------------------------
-# $File: chord,v 1.5 2010/09/20 19:19:16 rrt Exp $
-# chord: file(1) magic for Chord music sheet typesetting utility input files
-#
-# From Philippe De Muyter <phdm at macqel.be>
-# File format is actually free, but many distributed files begin with `{title'
-#
-0 string {title Chord text file
-
-# Type: PowerTab file format
-# URL: http://www.power-tab.net/
-# From: Jelmer Vernooij <jelmer at samba.org>
-0 string ptab\003\000 Power-Tab v3 Tablature File
-0 string ptab\004\000 Power-Tab v4 Tablature File
-
-#------------------------------------------------------------------------------
-# $File: cisco,v 1.4 2009/09/19 16:28:08 christos Exp $
-# cisco: file(1) magic for cisco Systems routers
-#
-# Most cisco file-formats are covered by the generic elf code
-#
-# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
-0 belong&0xffffff00 0x85011400 cisco IOS microcode
->7 string >\0 for '%s'
-0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode
->7 string >\0 for '%s'
-
-#------------------------------------------------------------------------------
-# $File: citrus,v 1.4 2009/09/19 16:28:08 christos Exp $
-# citrus locale declaration
-#
-
-0 string RuneCT Citrus locale declaration for LC_CTYPE
-
-
-#------------------------------------------------------------------------------
-# $File: clarion,v 1.5 2014/04/30 21:41:02 christos Exp $
-# clarion: file(1) magic for # Clarion Personal/Professional Developer
-# (v2 and above)
-# From: Julien Blache <jb at jblache.org>
-
-# Database files
-# signature
-0 leshort 0x3343 Clarion Developer (v2 and above) data file
-# attributes
->2 leshort &0x0001 \b, locked
->2 leshort &0x0004 \b, encrypted
->2 leshort &0x0008 \b, memo file exists
->2 leshort &0x0010 \b, compressed
->2 leshort &0x0040 \b, read only
-# number of records
->5 lelong x \b, %d records
-
-# Memo files
-0 leshort 0x334d Clarion Developer (v2 and above) memo data
-
-# Key/Index files
-# No magic? :(
-
-# Help files
-0 leshort 0x49e0 Clarion Developer (v2 and above) help data
-
-#------------------------------------------------------------------------------
-# $File: claris,v 1.7 2014/06/03 19:17:27 christos Exp $
-# claris: file(1) magic for claris
-# "H. Nanosecond" <aldomel at ix.netcom.com>
-# Claris Works a word processor, etc.
-# Version 3.0
-
-# .pct claris works clip art files
-#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
-#*
-#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000
-#null to byte 1000 octal
-514 string \377\377\377\377\000
->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 Claris clip art
-514 string \377\377\377\377\001
->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 Claris clip art
-
-# Claris works files
-# .cwk
-0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document
-# .plt
-0 string \020\341\000\000\010\010 Claris Works palette files .plt
-
-# .msp a dictionary file I am not sure about this I have only one .msp file
-0 string \002\271\262\000\040\002\000\164 Claris works dictionary
-
-# .usp are user dictionary bits
-# I am not sure about a magic header:
-#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151
-# soh S p f 8 U D sp ^ S cr nl p o d i
-#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043
-# a t r i s t sp ^ S cr nl d i v sp #
-
-# .mth Thesaurus
-# starts with \0 but no magic header
-
-# .chy Hyphenation file
-# I am not sure: 000 210 034 000 000
-
-# other claris files
-#./windows/claris/useng.ndx: data
-#./windows/claris/xtndtran.l32: data
-#./windows/claris/xtndtran.lst: data
-#./windows/claris/clworks.lbl: data
-#./windows/claris/clworks.prf: data
-#./windows/claris/userd.spl: data
-
-#------------------------------------------------------------------------------
-# $File: clipper,v 1.7 2014/04/30 21:41:02 christos Exp $
-# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
-#
-# XXX - what byte order does the Clipper use?
-#
-# XXX - what's the "!" stuff:
-#
-# >18 short !074000,000000 C1 R1
-# >18 short !074000,004000 C2 R1
-# >18 short !074000,010000 C3 R1
-# >18 short !074000,074000 TEST
-#
-# I shall assume it's ANDing the field with the first value and
-# comparing it with the second, and rewrite it as:
-#
-# >18 short&074000 000000 C1 R1
-# >18 short&074000 004000 C2 R1
-# >18 short&074000 010000 C3 R1
-# >18 short&074000 074000 TEST
-#
-# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
-# sort, nor does SunOS 4.x, so either it's something Intergraph added
-# in CLIX, or something AT&T added in SVR3.2 or later, or something
-# somebody else thought was a good idea; it's not documented in the
-# man page for this version of "magic", nor does it appear to be
-# implemented (at least not after I blew off the bogus code to turn
-# old-style "&"s into new-style "&"s, which just didn't work at all).
-#
-0 short 0575 CLIPPER COFF executable (VAX #)
->20 short 0407 (impure)
->20 short 0410 (5.2 compatible)
->20 short 0411 (pure)
->20 short 0413 (demand paged)
->20 short 0443 (target shared library)
->12 long >0 not stripped
->22 short >0 - version %d
-0 short 0577 CLIPPER COFF executable
->18 short&074000 000000 C1 R1
->18 short&074000 004000 C2 R1
->18 short&074000 010000 C3 R1
->18 short&074000 074000 TEST
->20 short 0407 (impure)
->20 short 0410 (pure)
->20 short 0411 (separate I&D)
->20 short 0413 (paged)
->20 short 0443 (target shared library)
->12 long >0 not stripped
->22 short >0 - version %d
->48 long&01 01 alignment trap enabled
->52 byte 1 -Ctnc
->52 byte 2 -Ctsw
->52 byte 3 -Ctpw
->52 byte 4 -Ctcb
->53 byte 1 -Cdnc
->53 byte 2 -Cdsw
->53 byte 3 -Cdpw
->53 byte 4 -Cdcb
->54 byte 1 -Csnc
->54 byte 2 -Cssw
->54 byte 3 -Cspw
->54 byte 4 -Cscb
-4 string pipe CLIPPER instruction trace
-4 string prof CLIPPER instruction profile
-
-#------------------------------------------------------------------------------
-# $File: commands,v 1.50 2014/05/30 16:48:44 christos Exp $
-# commands: file(1) magic for various shells and interpreters
-#
-#0 string/w : shell archive or script for antique kernel text
-0 string/wt #!\ /bin/sh POSIX shell script text executable
-!:mime text/x-shellscript
-0 string/wb #!\ /bin/sh POSIX shell script executable (binary data)
-!:mime text/x-shellscript
-
-0 string/wt #!\ /bin/csh C shell script text executable
-!:mime text/x-shellscript
-
-# korn shell magic, sent by George Wu, gwu at clyde.att.com
-0 string/wt #!\ /bin/ksh Korn shell script text executable
-!:mime text/x-shellscript
-0 string/wb #!\ /bin/ksh Korn shell script executable (binary data)
-!:mime text/x-shellscript
-
-0 string/wt #!\ /bin/tcsh Tenex C shell script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/tcsh Tenex C shell script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/tcsh Tenex C shell script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/tcsh Tenex C shell script text executable
-!:mime text/x-shellscript
-
-#
-# zsh/ash/ae/nawk/gawk magic from cameron at cs.unsw.oz.au (Cameron Simpson)
-0 string/wt #!\ /bin/zsh Paul Falstad's zsh script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/zsh Paul Falstad's zsh script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/ash Neil Brown's ash script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/ae Neil Brown's ae script text executable
-!:mime text/x-shellscript
-0 string/wt #!\ /bin/nawk new awk script text executable
-!:mime text/x-nawk
-0 string/wt #!\ /usr/bin/nawk new awk script text executable
-!:mime text/x-nawk
-0 string/wt #!\ /usr/local/bin/nawk new awk script text executable
-!:mime text/x-nawk
-0 string/wt #!\ /bin/gawk GNU awk script text executable
-!:mime text/x-gawk
-0 string/wt #!\ /usr/bin/gawk GNU awk script text executable
-!:mime text/x-gawk
-0 string/wt #!\ /usr/local/bin/gawk GNU awk script text executable
-!:mime text/x-gawk
-#
-0 string/wt #!\ /bin/awk awk script text executable
-!:mime text/x-awk
-0 string/wt #!\ /usr/bin/awk awk script text executable
-!:mime text/x-awk
-0 regex/4096 =^\\s{0,100}BEGIN\\s{0,100}[{] awk script text
-
-# AT&T Bell Labs' Plan 9 shell
-0 string/wt #!\ /bin/rc Plan 9 rc shell script text executable
-
-# bash shell magic, from Peter Tobias (tobias at server.et-inf.fho-emden.de)
-0 string/wt #!\ /bin/bash Bourne-Again shell script text executable
-!:mime text/x-shellscript
-0 string/wb #!\ /bin/bash Bourne-Again shell script executable (binary data)
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/bash Bourne-Again shell script text executable
-!:mime text/x-shellscript
-0 string/wb #!\ /usr/bin/bash Bourne-Again shell script executable (binary data)
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bash Bourne-Again shell script text executable
-!:mime text/x-shellscript
-0 string/wb #!\ /usr/local/bash Bourne-Again shell script executable (binary data)
-!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/bash Bourne-Again shell script text executable
-!:mime text/x-shellscript
-0 string/wb #!\ /usr/local/bin/bash Bourne-Again shell script executable (binary data)
-!:mime text/x-shellscript
-
-# PHP scripts
-# Ulf Harnhammar <ulfh at update.uu.se>
-0 search/1/c =<?php PHP script text
-!:strength + 10
-!:mime text/x-php
-0 search/1 =<?\n PHP script text
-!:mime text/x-php
-0 search/1 =<?\r PHP script text
-!:mime text/x-php
-0 search/1/w #!\ /usr/local/bin/php PHP script text executable
-!:strength + 10
-!:mime text/x-php
-0 search/1/w #!\ /usr/bin/php PHP script text executable
-!:strength + 10
-!:mime text/x-php
-# Smarty compiled template, http://www.smarty.net/
-# Elan Ruusamae <glen at delfi.ee>
-0 string =<?php\ /*\ Smarty\ version Smarty compiled template
->24 regex [0-9.]+ \b, version %s
-!:mime text/x-php
-
-0 string Zend\x00 PHP script Zend Optimizer data
-
-0 string/t $! DCL command file
-
-# Type: Pdmenu
-# URL: http://packages.debian.org/pdmenu
-# From: Edward Betts <edward at debian.org>
-0 string #!/usr/bin/pdmenu Pdmenu configuration file text
-
-#----------------------------------------------------------------------------
-# $File: communications,v 1.5 2009/09/19 16:28:08 christos Exp $
-# communication
-
-# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.
-# It is used for conformance testing of communication protocols.
-# Added by W. Borgert <debacle at debian.org>.
-0 string $Suite TTCN Abstract Test Suite
->&1 string $SuiteId
->>&1 string >\n %s
->&2 string $SuiteId
->>&1 string >\n %s
->&3 string $SuiteId
->>&1 string >\n %s
-
-# MSC (message sequence charts) are a formal description technique,
-# described in ITU-T Z.120, mainly used for communication protocols.
-# Added by W. Borgert <debacle at debian.org>.
-0 string mscdocument Message Sequence Chart (document)
-0 string msc Message Sequence Chart (chart)
-0 string submsc Message Sequence Chart (subchart)
-#------------------------------------------------------------------------------
-# $File: compress,v 1.58 2014/05/07 19:36:59 christos Exp $
-# compress: file(1) magic for pure-compression formats (no archives)
-#
-# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
-#
-# Formats for various forms of compressed data
-# Formats for "compress" proper have been moved into "compress.c",
-# because it tries to uncompress it to figure out what's inside.
-
-# standard unix compress
-0 string \037\235 compress'd data
-!:mime application/x-compress
-!:apple LZIVZIVU
->2 byte&0x80 >0 block compressed
->2 byte&0x1f x %d bits
-
-# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
-# Edited by Chris Chittleborough <cchittleborough at yahoo.com.au>, March 2002
-# * Original filename is only at offset 10 if "extra field" absent
-# * Produce shorter output - notably, only report compression methods
-# other than 8 ("deflate", the only method defined in RFC 1952).
-0 string \037\213 gzip compressed data
-!:mime application/x-gzip
-!:strength * 2
->2 byte <8 \b, reserved method
->2 byte >8 \b, unknown method
->3 byte &0x01 \b, ASCII
->3 byte &0x02 \b, has CRC
->3 byte &0x04 \b, extra field
->3 byte&0xC =0x08
->>10 string x \b, was "%s"
->3 byte &0x10 \b, has comment
->3 byte &0x20 \b, encrypted
->4 ledate >0 \b, last modified: %s
->8 byte 2 \b, max compression
->8 byte 4 \b, max speed
->9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT)
->9 byte =0x01 \b, from Amiga
->9 byte =0x02 \b, from VMS
->9 byte =0x03 \b, from Unix
->9 byte =0x04 \b, from VM/CMS
->9 byte =0x05 \b, from Atari
->9 byte =0x06 \b, from HPFS filesystem (OS/2, NT)
->9 byte =0x07 \b, from MacOS
->9 byte =0x08 \b, from Z-System
->9 byte =0x09 \b, from CP/M
->9 byte =0x0A \b, from TOPS/20
->9 byte =0x0B \b, from NTFS filesystem (NT)
->9 byte =0x0C \b, from QDOS
->9 byte =0x0D \b, from Acorn RISCOS
-
-# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
-0 string \037\036 packed data
-!:mime application/octet-stream
->2 belong >1 \b, %d characters originally
->2 belong =1 \b, %d character originally
-#
-# This magic number is byte-order-independent.
-0 short 0x1f1f old packed data
-!:mime application/octet-stream
-
-# XXX - why *two* entries for "compacted data", one of which is
-# byte-order independent, and one of which is byte-order dependent?
-#
-0 short 0x1fff compacted data
-!:mime application/octet-stream
-# This string is valid for SunOS (BE) and a matching "short" is listed
-# in the Ultrix (LE) magic file.
-0 string \377\037 compacted data
-!:mime application/octet-stream
-0 short 0145405 huf output
-!:mime application/octet-stream
-
-# bzip2
-0 string BZh bzip2 compressed data
-!:mime application/x-bzip2
->3 byte >47 \b, block size = %c00k
-
-# lzip
-0 string LZIP lzip compressed data
-!:mime application/x-lzip
->4 byte x \b, version: %d
-
-# squeeze and crunch
-# Michael Haardt <michael at cantor.informatik.rwth-aachen.de>
-0 beshort 0x76FF squeezed data,
->4 string x original name %s
-0 beshort 0x76FE crunched data,
->2 string x original name %s
-0 beshort 0x76FD LZH compressed data,
->2 string x original name %s
-
-# Freeze
-0 string \037\237 frozen file 2.1
-0 string \037\236 frozen file 1.0 (or gzip 0.5)
-
-# SCO compress -H (LZH)
-0 string \037\240 SCO compress -H (LZH) data
-
-# European GSM 06.10 is a provisional standard for full-rate speech
-# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
-# excitation/long term prediction) coding at 13 kbit/s.
-#
-# There's only a magic nibble (4 bits); that nibble repeats every 33
-# bytes. This isn't suited for use, but maybe we can use it someday.
-#
-# This will cause very short GSM files to be declared as data and
-# mismatches to be declared as data too!
-#0 byte&0xF0 0xd0 data
-#>33 byte&0xF0 0xd0
-#>66 byte&0xF0 0xd0
-#>99 byte&0xF0 0xd0
-#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio
-
-# bzip a block-sorting file compressor
-# by Julian Seward <sewardj at cs.man.ac.uk> and others
-#
-#0 string BZ bzip compressed data
-#>2 byte x \b, version: %c
-#>3 string =1 \b, compression block size 100k
-#>3 string =2 \b, compression block size 200k
-#>3 string =3 \b, compression block size 300k
-#>3 string =4 \b, compression block size 400k
-#>3 string =5 \b, compression block size 500k
-#>3 string =6 \b, compression block size 600k
-#>3 string =7 \b, compression block size 700k
-#>3 string =8 \b, compression block size 800k
-#>3 string =9 \b, compression block size 900k
-
-# lzop from <markus.oberhumer at jk.uni-linz.ac.at>
-0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data
->9 beshort <0x0940
->>9 byte&0xf0 =0x00 - version 0.
->>9 beshort&0x0fff x \b%03x,
->>13 byte 1 LZO1X-1,
->>13 byte 2 LZO1X-1(15),
->>13 byte 3 LZO1X-999,
-## >>22 bedate >0 last modified: %s,
->>14 byte =0x00 os: MS-DOS
->>14 byte =0x01 os: Amiga
->>14 byte =0x02 os: VMS
->>14 byte =0x03 os: Unix
->>14 byte =0x05 os: Atari
->>14 byte =0x06 os: OS/2
->>14 byte =0x07 os: MacOS
->>14 byte =0x0A os: Tops/20
->>14 byte =0x0B os: WinNT
->>14 byte =0x0E os: Win32
->9 beshort >0x0939
->>9 byte&0xf0 =0x00 - version 0.
->>9 byte&0xf0 =0x10 - version 1.
->>9 byte&0xf0 =0x20 - version 2.
->>9 beshort&0x0fff x \b%03x,
->>15 byte 1 LZO1X-1,
->>15 byte 2 LZO1X-1(15),
->>15 byte 3 LZO1X-999,
-## >>25 bedate >0 last modified: %s,
->>17 byte =0x00 os: MS-DOS
->>17 byte =0x01 os: Amiga
->>17 byte =0x02 os: VMS
->>17 byte =0x03 os: Unix
->>17 byte =0x05 os: Atari
->>17 byte =0x06 os: OS/2
->>17 byte =0x07 os: MacOS
->>17 byte =0x0A os: Tops/20
->>17 byte =0x0B os: WinNT
->>17 byte =0x0E os: Win32
-
-# 4.3BSD-Quasijarus Strong Compression
-# http://minnie.tuhs.org/Quasijarus/compress.html
-0 string \037\241 Quasijarus strong compressed data
-
-# From: Cory Dikkers <cdikkers at swbell.net>
-0 string XPKF Amiga xpkf.library compressed data
-0 string PP11 Power Packer 1.1 compressed data
-0 string PP20 Power Packer 2.0 compressed data,
->4 belong 0x09090909 fast compression
->4 belong 0x090A0A0A mediocre compression
->4 belong 0x090A0B0B good compression
->4 belong 0x090A0C0C very good compression
->4 belong 0x090A0C0D best compression
-
-# 7-zip archiver, from Thomas Klausner (wiz at danbala.tuwien.ac.at)
-# http://www.7-zip.org or DOC/7zFormat.txt
-#
-0 string 7z\274\257\047\034 7-zip archive data,
->6 byte x version %d
->7 byte x \b.%d
-!:mime application/x-7z-compressed
-
-# Type: LZMA
-0 lelong&0xffffff =0x5d
->12 leshort 0xff LZMA compressed data,
-!:mime application/x-lzma
->>5 lequad =0xffffffffffffffff streamed
->>5 lequad !0xffffffffffffffff non-streamed, size %lld
->12 leshort 0 LZMA compressed data,
->>5 lequad =0xffffffffffffffff streamed
->>5 lequad !0xffffffffffffffff non-streamed, size %lld
-
-# http://tukaani.org/xz/xz-file-format.txt
-0 ustring \xFD7zXZ\x00 XZ compressed data
-!:mime application/x-xz
-
-# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt
-0 string LRZI LRZIP compressed data
->4 byte x - version %d
->5 byte x \b.%d
-!:mime application/x-lrzip
-
-# http://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html
-0 lelong 0x184d2204 LZ4 compressed data (v1.4+)
-!:mime application/x-lz4
-# Added by osm0sis at xda-developers.com
-0 lelong 0x184c2103 LZ4 compressed data (v1.0-v1.3)
-!:mime application/x-lz4
-0 lelong 0x184c2102 LZ4 compressed data (v0.1-v0.9)
-!:mime application/x-lz4
-
-# AFX compressed files (Wolfram Kleff)
-2 string -afx- AFX compressed file data
-
-# Supplementary magic data for the file(1) command to support
-# rzip(1). The format is described in magic(5).
-#
-# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with
-# this file.
-#
-0 string RZIP rzip compressed data
->4 byte x - version %d
->5 byte x \b.%d
->6 belong x (%d bytes)
-
-0 string ArC\x01 FreeArc archive <http://freearc.org>
-
-# Type: DACT compressed files
-0 long 0x444354C3 DACT compressed data
->4 byte >-1 (version %i.
->5 byte >-1 %i.
->6 byte >-1 %i)
->7 long >0 , original size: %i bytes
->15 long >30 , block size: %i bytes
-
-# Valve Pack (VPK) files
-0 lelong 0x55aa1234 Valve Pak file
->0x4 lelong x \b, version %u
->0x8 lelong x \b, %u entries
-
-# Snappy framing format
-# http://code.google.com/p/snappy/source/browse/trunk/framing_format.txt
-0 string \377\006\0\0sNaPpY snappy framed data
-!:mime application/x-snappy-framed
-
-#------------------------------------------------------------------------------
-# $File: console,v 1.19 2013/02/06 14:18:52 christos Exp $
-# Console game magic
-# Toby Deshane <hac at shoelace.digivill.net>
-# ines: file(1) magic for Marat's iNES Nintendo Entertainment System
-# ROM dump format
-
-0 string NES\032 iNES ROM dump,
->4 byte x %dx16k PRG
->5 byte x \b, %dx8k CHR
->6 byte&0x01 =0x1 \b, [Vert.]
->6 byte&0x01 =0x0 \b, [Horiz.]
->6 byte&0x02 =0x2 \b, [SRAM]
->6 byte&0x04 =0x4 \b, [Trainer]
->6 byte&0x04 =0x8 \b, [4-Scr]
-
-#------------------------------------------------------------------------------
-# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
-#
-0x104 belong 0xCEED6666 Gameboy ROM:
->0x134 string >\0 "%.16s"
->0x146 byte 0x03 \b,[SGB]
->0x147 byte 0x00 \b, [ROM ONLY]
->0x147 byte 0x01 \b, [ROM+MBC1]
->0x147 byte 0x02 \b, [ROM+MBC1+RAM]
->0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT]
->0x147 byte 0x05 \b, [ROM+MBC2]
->0x147 byte 0x06 \b, [ROM+MBC2+BATTERY]
->0x147 byte 0x08 \b, [ROM+RAM]
->0x147 byte 0x09 \b, [ROM+RAM+BATTERY]
->0x147 byte 0x0B \b, [ROM+MMM01]
->0x147 byte 0x0C \b, [ROM+MMM01+SRAM]
->0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT]
->0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT]
->0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT]
->0x147 byte 0x11 \b, [ROM+MBC3]
->0x147 byte 0x12 \b, [ROM+MBC3+RAM]
->0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT]
->0x147 byte 0x19 \b, [ROM+MBC5]
->0x147 byte 0x1A \b, [ROM+MBC5+RAM]
->0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT]
->0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE]
->0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM]
->0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT]
->0x147 byte 0x1F \b, [Pocket Camera]
->0x147 byte 0xFD \b, [Bandai TAMA5]
->0x147 byte 0xFE \b, [Hudson HuC-3]
->0x147 byte 0xFF \b, [Hudson HuC-1]
-
->0x148 byte 0 \b, ROM: 256Kbit
->0x148 byte 1 \b, ROM: 512Kbit
->0x148 byte 2 \b, ROM: 1Mbit
->0x148 byte 3 \b, ROM: 2Mbit
->0x148 byte 4 \b, ROM: 4Mbit
->0x148 byte 5 \b, ROM: 8Mbit
->0x148 byte 6 \b, ROM: 16Mbit
->0x148 byte 0x52 \b, ROM: 9Mbit
->0x148 byte 0x53 \b, ROM: 10Mbit
->0x148 byte 0x54 \b, ROM: 12Mbit
-
->0x149 byte 1 \b, RAM: 16Kbit
->0x149 byte 2 \b, RAM: 64Kbit
->0x149 byte 3 \b, RAM: 128Kbit
->0x149 byte 4 \b, RAM: 1Mbit
-
-#>0x14e long x \b, CRC: %x
-
-#------------------------------------------------------------------------------
-# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format
-#
-0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump
->0x120 string >\0 Name: "%.16s"
->0x110 string >\0 %.16s
->0x1B0 string RA with SRAM
-
-#------------------------------------------------------------------------------
-# genesis: file(1) magic for the Super MegaDrive ROM dump format
-#
-0x280 string EAGN Super MagicDrive ROM dump
->0 byte x %dx16k blocks
->2 byte 0 \b, last in series or standalone
->2 byte >0 \b, split ROM
->8 byte 0xAA
->9 byte 0xBB
-
-#------------------------------------------------------------------------------
-# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format
-#
-0x280 string EAMG Super MagicDrive ROM dump
->0 byte x %dx16k blocks
->2 byte x \b, last in series or standalone
->8 byte 0xAA
->9 byte 0xBB
-
-#------------------------------------------------------------------------------
-# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps
-#
-# Does not detect all images. Very preliminary guesswork. Need more data
-# on format.
-#
-# FIXME: need a little more info...;P
-#
-#0 byte 0xF3
-#>1 byte 0xED Sega Master System/Game Gear ROM dump
-#>1 byte 0x31 Sega Master System/Game Gear ROM dump
-#>1 byte 0xDB Sega Master System/Game Gear ROM dump
-#>1 byte 0xAF Sega Master System/Game Gear ROM dump
-#>1 byte 0xC3 Sega Master System/Game Gear ROM dump
-
-#------------------------------------------------------------------------------
-# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format
-#
-0 belong 0x21068028 Sega Dreamcast VMU game image
-0 string LCDi Dream Animator file
-
-#------------------------------------------------------------------------------
-# v64: file(1) uncertain magic for the V64 format N64 ROM dumps
-#
-0 belong 0x37804012 V64 Nintendo 64 ROM dump
-
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-# Nintendo .nds
-192 string \044\377\256Qi\232 Nintendo DS Game ROM Image
-# Nintendo .gba
-0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image
-
-#------------------------------------------------------------------------------
-# msx: file(1) magic for MSX game cartridge dumps
-# Too simple - MPi
-#0 beshort 0x4142 MSX game cartridge dump
-
-#------------------------------------------------------------------------------
-# Sony Playstation executables (Adam Sjoegren <asjo at diku.dk>) :
-0 string PS-X\ EXE Sony Playstation executable
-# Area:
->113 string x (%s)
-
-#------------------------------------------------------------------------------
-# Microsoft Xbox executables .xbe (Esa Hyytia <ehyytia at cc.hut.fi>)
-0 string XBEH XBE, Microsoft Xbox executable
-# probabilistic checks whether signed or not
->0x0004 ulelong =0x0
->>&2 ulelong =0x0
->>>&2 ulelong =0x0 \b, not signed
->0x0004 ulelong >0
->>&2 ulelong >0
->>>&2 ulelong >0 \b, signed
-# expect base address of 0x10000
->0x0104 ulelong =0x10000
->>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions
->>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007
->>>(0x0118-0x0FF60) ulelong >0 (regions:
->>>>(0x0118-0x0FF60) ulelong &0x00000001 NA
->>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan
->>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World
->>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer
->>>(0x0118-0x0FF60) ulelong >0 \b)
-
-# --------------------------------
-# 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 at web.de>
-
-# Double-check that the image type matches too, 0x8008 conflicts with
-# 8 character OMF-86 object file headers.
-0 beshort 0x8008
->6 string BS93 Lynx homebrew cartridge
->>2 beshort x \b, RAM start $%04x
->6 string LYNX Lynx cartridge
->>2 beshort x \b, RAM start $%04x
-
-# Opera file system that is used on the 3DO console
-# From: Serge van den Boom <svdb at stack.nl>
-0 string \x01ZZZZZ\x01 3DO "Opera" file system
-
-# From Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
-0 string GBS Nintendo Gameboy Music/Audio Data
-12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module
-
-# Playstations Patch Files from: From: Thomas Klausner <tk at giga.or.at>
-0 string PPF30 Playstation Patch File version 3.0
->5 byte 0 \b, PPF 1.0 patch
->5 byte 1 \b, PPF 2.0 patch
->5 byte 2 \b, PPF 3.0 patch
->>56 byte 0 \b, Imagetype BIN (any)
->>56 byte 1 \b, Imagetype GI (PrimoDVD)
->>57 byte 0 \b, Blockcheck disabled
->>57 byte 1 \b, Blockcheck enabled
->>58 byte 0 \b, Undo data not available
->>58 byte 1 \b, Undo data available
->6 string x \b, description: %s
-
-0 string PPF20 Playstation Patch File version 2.0
->5 byte 0 \b, PPF 1.0 patch
->5 byte 1 \b, PPF 2.0 patch
->>56 lelong >0 \b, size of file to patch %d
->6 string x \b, description: %s
-
-0 string PPF10 Playstation Patch File version 1.0
->5 byte 0 \b, Simple Encoding
->6 string x \b, description: %s
-
-# From: Daniel Dawson <ddawson at icehouse.net>
-# SNES9x .smv "movie" file format.
-0 string SMV\x1A SNES9x input recording
->0x4 lelong x \b, version %d
-# version 4 is latest so far
->0x4 lelong <5
->>0x8 ledate x \b, recorded at %s
->>0xc lelong >0 \b, rerecorded %d times
->>0x10 lelong x \b, %d frames long
->>0x14 byte >0 \b, data for controller(s):
->>>0x14 byte &0x1 #1
->>>0x14 byte &0x2 #2
->>>0x14 byte &0x4 #3
->>>0x14 byte &0x8 #4
->>>0x14 byte &0x10 #5
->>0x15 byte ^0x1 \b, begins from snapshot
->>0x15 byte &0x1 \b, begins from reset
->>0x15 byte ^0x2 \b, NTSC standard
->>0x15 byte &0x2 \b, PAL standard
->>0x17 byte &0x1 \b, settings:
-# WIP1Timing not used as of version 4
->>>0x4 lelong <4
->>>>0x17 byte &0x2 WIP1Timing
->>>0x17 byte &0x4 Left+Right
->>>0x17 byte &0x8 VolumeEnvX
->>>0x17 byte &0x10 FakeMute
->>>0x17 byte &0x20 SyncSound
-# New flag as of version 4
->>>0x4 lelong >3
->>>>0x17 byte &0x80 NoCPUShutdown
->>0x4 lelong <4
->>>0x18 lelong >0x23
->>>>0x20 leshort !0
->>>>>0x20 lestring16 x \b, metadata: "%s"
->>0x4 lelong >3
->>>0x24 byte >0 \b, port 1:
->>>>0x24 byte 1 joypad
->>>>0x24 byte 2 mouse
->>>>0x24 byte 3 SuperScope
->>>>0x24 byte 4 Justifier
->>>>0x24 byte 5 multitap
->>>0x24 byte >0 \b, port 2:
->>>>0x25 byte 1 joypad
->>>>0x25 byte 2 mouse
->>>>0x25 byte 3 SuperScope
->>>>0x25 byte 4 Justifier
->>>>0x25 byte 5 multitap
->>>0x18 lelong >0x43
->>>>0x40 leshort !0
->>>>>0x40 lestring16 x \b, metadata: "%s"
->>0x17 byte &0x40 \b, ROM:
->>>(0x18.l-26) lelong x CRC32 0x%08x
->>>(0x18.l-23) string x "%s"
-
-# Type: scummVM savegame files
-# From: Sven Hartge <debian at ds9.argh.org>
-0 string SCVM ScummVM savegame
->12 string >\0 "%s"
-
-#------------------------------------------------------------------------------
-# $File: convex,v 1.8 2012/10/03 23:44:43 christos Exp $
-# convex: file(1) magic for Convex boxes
-#
-# Convexes are big-endian.
-#
-# /*\
-# * Below are the magic numbers and tests added for Convex.
-# * Added at beginning, because they are expected to be used most.
-# \*/
-0 belong 0507 Convex old-style object
->16 belong >0 not stripped
-0 belong 0513 Convex old-style demand paged executable
->16 belong >0 not stripped
-0 belong 0515 Convex old-style pre-paged executable
->16 belong >0 not stripped
-0 belong 0517 Convex old-style pre-paged, non-swapped executable
->16 belong >0 not stripped
-0 belong 0x011257 Core file
-#
-# The following are a series of dump format magic numbers. Each one
-# corresponds to a drastically different dump format. The first on is
-# the original dump format on a 4.1 BSD or earlier file system. The
-# second marks the change between the 4.1 file system and the 4.2 file
-# system. The Third marks the changing of the block size from 1K
-# to 2K to be compatible with an IDC file system. The fourth indicates
-# a dump that is dependent on Convex Storage Manager, because data in
-# secondary storage is not physically contained within the dump.
-# The restore program uses these number to determine how the data is
-# to be extracted.
-#
-24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible)
-24 belong =60014 dump format, Convex Storage Manager by-reference dump
-#
-# what follows is a bunch of bit-mask checks on the flags field of the opthdr.
-# If there is no `=' sign, assume just checking for whether the bit is set?
-#
-0 belong 0601 Convex SOFF
->88 belong&0x000f0000 =0x00000000 c1
->88 belong &0x00010000 c2
->88 belong &0x00020000 c2mp
->88 belong &0x00040000 parallel
->88 belong &0x00080000 intrinsic
->88 belong &0x00000001 demand paged
->88 belong &0x00000002 pre-paged
->88 belong &0x00000004 non-swapped
->88 belong &0x00000008 POSIX
-#
->84 belong &0x80000000 executable
->84 belong &0x40000000 object
->84 belong&0x20000000 =0 not stripped
->84 belong&0x18000000 =0x00000000 native fpmode
->84 belong&0x18000000 =0x10000000 ieee fpmode
->84 belong&0x18000000 =0x18000000 undefined fpmode
-#
-0 belong 0605 Convex SOFF core
-#
-0 belong 0607 Convex SOFF checkpoint
->88 belong&0x000f0000 =0x00000000 c1
->88 belong &0x00010000 c2
->88 belong &0x00020000 c2mp
->88 belong &0x00040000 parallel
->88 belong &0x00080000 intrinsic
->88 belong &0x00000008 POSIX
-#
->84 belong&0x18000000 =0x00000000 native fpmode
->84 belong&0x18000000 =0x10000000 ieee fpmode
->84 belong&0x18000000 =0x18000000 undefined fpmode
-
-#------------------------------------------------------------------------------
-# $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $
-# cracklib: file (1) magic for cracklib v2.7
-
-0 lelong 0x70775631 Cracklib password index, little endian
->4 long >0 (%i words)
->4 long 0 ("64-bit")
->>8 long >-1 (%i words)
-0 belong 0x70775631 Cracklib password index, big endian
->4 belong >-1 (%i words)
-# really bellong 0x0000000070775631
-0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit")
->12 belong >0 (%i words)
-
-# ----------------------------------------------------------------------------
-# $File: ctags,v 1.6 2009/09/19 16:28:08 christos Exp $
-# ctags: file (1) magic for Exuberant Ctags files
-# From: Alexander Mai <mai at migdal.ikp.physik.tu-darmstadt.de>
-0 search/1 =!_TAG Exuberant Ctags tag file text
-
-#--------------------------------------------------------------
-# ctf: file(1) magic for CTF (Common Trace Format) trace files
-#
-# Specs. available here: <http://www.efficios.com/ctf>
-#--------------------------------------------------------------
-
-# CTF trace data
-0 lelong 0xc1fc1fc1 Common Trace Format (CTF) trace data (LE)
-0 belong 0xc1fc1fc1 Common Trace Format (CTF) trace data (BE)
-
-# CTF metadata (packetized)
-0 lelong 0x75d11d57 Common Trace Format (CTF) packetized metadata (LE)
->35 byte x \b, v%d
->36 byte x \b.%d
-0 belong 0x75d11d57 Common Trace Format (CTF) packetized metadata (BE)
->35 byte x \b, v%d
->36 byte x \b.%d
-
-# CTF metadata (plain text)
-0 string /*\x20CTF\x20 Common Trace Format (CTF) plain text metadata
-!:strength + 5 # this is to make sure we beat C
->&0 regex [0-9]+\.[0-9]+ \b, v%s
-
-#------------------------------------------------------------------------------
-# $File: cubemap,v 1.1 2012/06/06 13:03:20 christos Exp $
-# file(1) magic(5) data for cubemaps Martin Erik Werner <martinerikwerner at gmail.com>
-#
-0 string ACMP Map file for the AssaultCube FPS game
-0 string CUBE Map file for cube and cube2 engine games
-0 string MAPZ) Map file for the Blood Frontier/Red Eclipse FPS games
-
-#------------------------------------------------------------------------------
-# $File: cups,v 1.3 2014/05/28 19:50:41 christos Exp $
-# Cups: file(1) magic for the cups raster file format
-# From: Laurent Martelli <martellilaurent at gmail.com>
-# http://www.cups.org/documentation.php/spec-raster.html
-#
-
-0 name cups-le
->280 lelong x \b, %d
->284 lelong x \bx%d dpi
->376 lelong x \b, %dx
->380 lelong x \b%d pixels
->388 lelong x %d bits/color
->392 lelong x %d bits/pixel
->400 lelong 0 ColorOrder=Chunky
->400 lelong 1 ColorOrder=Banded
->400 lelong 2 ColorOrder=Planar
->404 lelong 0 ColorSpace=gray
->404 lelong 1 ColorSpace=RGB
->404 lelong 2 ColorSpace=RGBA
->404 lelong 3 ColorSpace=black
->404 lelong 4 ColorSpace=CMY
->404 lelong 5 ColorSpace=YMC
->404 lelong 6 ColorSpace=CMYK
->404 lelong 7 ColorSpace=YMCK
->404 lelong 8 ColorSpace=KCMY
->404 lelong 9 ColorSpace=KCMYcm
->404 lelong 10 ColorSpace=GMCK
->404 lelong 11 ColorSpace=GMCS
->404 lelong 12 ColorSpace=WHITE
->404 lelong 13 ColorSpace=GOLD
->404 lelong 14 ColorSpace=SILVER
->404 lelong 15 ColorSpace=CIE XYZ
->404 lelong 16 ColorSpace=CIE Lab
->404 lelong 17 ColorSpace=RGBW
->404 lelong 18 ColorSpace=sGray
->404 lelong 19 ColorSpace=sRGB
->404 lelong 20 ColorSpace=AdobeRGB
-
-# Cups Raster image format, Big Endian
-0 string RaS
->3 string t Cups Raster version 1, Big Endian
->3 string 2 Cups Raster version 2, Big Endian
->3 string 3 Cups Raster version 3, Big Endian
-!:mime application/vnd.cups-raster
->0 use ^cups-le
-
-
-# Cups Raster image format, Little Endian
-1 string SaR
->0 string t Cups Raster version 1, Little Endian
->0 string 2 Cups Raster version 2, Little Endian
->0 string 3 Cups Raster version 3, Little Endian
-!:mime application/vnd.cups-raster
->0 use cups-le
-
-#------------------------------------------------------------------------------
-# $File: dact,v 1.4 2009/09/19 16:28:08 christos Exp $
-# dact: file(1) magic for DACT compressed files
-#
-0 long 0x444354C3 DACT compressed data
->4 byte >-1 (version %i.
->5 byte >-1 $BS%i.
->6 byte >-1 $BS%i)
->7 long >0 $BS, original size: %i bytes
->15 long >30 $BS, block size: %i bytes
-
-#------------------------------------------------------------------------------
-# $File: database,v 1.41 2014/06/03 19:17:27 christos Exp $
-# database: file(1) magic for various databases
-#
-# extracted from header/code files by Graeme Wilford (eep2gw at ee.surrey.ac.uk)
-#
-#
-# GDBM magic numbers
-# Will be maintained as part of the GDBM distribution in the future.
-# <downsj at teeny.org>
-0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian
-!:mime application/x-gdbm
-0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian
-!:mime application/x-gdbm
-0 string GDBM GNU dbm 2.x database
-!:mime application/x-gdbm
-#
-# Berkeley DB
-#
-# Ian Darwin's file /etc/magic files: big/little-endian version.
-#
-# Hash 1.85/1.86 databases store metadata in network byte order.
-# Btree 1.85/1.86 databases store the metadata in host byte order.
-# Hash and Btree 2.X and later databases store the metadata in host byte order.
-
-0 long 0x00061561 Berkeley DB
-!:mime application/x-dbm
->8 belong 4321
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, native byte-order)
->8 belong 1234
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, little-endian)
-
-0 belong 0x00061561 Berkeley DB
->8 belong 4321
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, big-endian)
->8 belong 1234
->>4 belong >2 1.86
->>4 belong <3 1.85
->>4 belong >0 (Hash, version %d, native byte-order)
-
-0 long 0x00053162 Berkeley DB 1.85/1.86
->4 long >0 (Btree, version %d, native byte-order)
-0 belong 0x00053162 Berkeley DB 1.85/1.86
->4 belong >0 (Btree, version %d, big-endian)
-0 lelong 0x00053162 Berkeley DB 1.85/1.86
->4 lelong >0 (Btree, version %d, little-endian)
-
-12 long 0x00061561 Berkeley DB
->16 long >0 (Hash, version %d, native byte-order)
-12 belong 0x00061561 Berkeley DB
->16 belong >0 (Hash, version %d, big-endian)
-12 lelong 0x00061561 Berkeley DB
->16 lelong >0 (Hash, version %d, little-endian)
-
-12 long 0x00053162 Berkeley DB
->16 long >0 (Btree, version %d, native byte-order)
-12 belong 0x00053162 Berkeley DB
->16 belong >0 (Btree, version %d, big-endian)
-12 lelong 0x00053162 Berkeley DB
->16 lelong >0 (Btree, version %d, little-endian)
-
-12 long 0x00042253 Berkeley DB
->16 long >0 (Queue, version %d, native byte-order)
-12 belong 0x00042253 Berkeley DB
->16 belong >0 (Queue, version %d, big-endian)
-12 lelong 0x00042253 Berkeley DB
->16 lelong >0 (Queue, version %d, little-endian)
-
-# From Max Bowsher.
-12 long 0x00040988 Berkeley DB
->16 long >0 (Log, version %d, native byte-order)
-12 belong 0x00040988 Berkeley DB
->16 belong >0 (Log, version %d, big-endian)
-12 lelong 0x00040988 Berkeley DB
->16 lelong >0 (Log, version %d, little-endian)
-
-#
-#
-# Round Robin Database Tool by Tobias Oetiker <oetiker at ee.ethz.ch>
-0 string/b RRD\0 RRDTool DB
->4 string/b x version %s
-
->>10 short !0 16bit aligned
->>>10 bedouble 8.642135e+130 big-endian
->>>>18 short x 32bit long (m68k)
-
->>10 short 0
->>>12 long !0 32bit aligned
->>>>12 bedouble 8.642135e+130 big-endian
->>>>>20 long 0 64bit long
->>>>>20 long !0 32bit long
->>>>12 ledouble 8.642135e+130 little-endian
->>>>>24 long 0 64bit long
->>>>>24 long !0 32bit long (i386)
->>>>12 string \x43\x2b\x1f\x5b\x2f\x25\xc0\xc7 middle-endian
->>>>>24 short !0 32bit long (arm)
-
->>8 quad 0 64bit aligned
->>>16 bedouble 8.642135e+130 big-endian
->>>>24 long 0 64bit long (s390x)
->>>>24 long !0 32bit long (hppa/mips/ppc/s390/SPARC)
->>>16 ledouble 8.642135e+130 little-endian
->>>>28 long 0 64bit long (alpha/amd64/ia64)
->>>>28 long !0 32bit long (armel/mipsel)
-
-#----------------------------------------------------------------------
-# ROOT: file(1) magic for ROOT databases
-#
-0 string root\0 ROOT file
->4 belong x Version %d
->33 belong x (Compression: %d)
-
-# XXX: Weak magic.
-# Alex Ott <ott at jet.msk.su>
-## Paradox file formats
-#2 leshort 0x0800 Paradox
-#>0x39 byte 3 v. 3.0
-#>0x39 byte 4 v. 3.5
-#>0x39 byte 9 v. 4.x
-#>0x39 byte 10 v. 5.x
-#>0x39 byte 11 v. 5.x
-#>0x39 byte 12 v. 7.x
-#>>0x04 byte 0 indexed .DB data file
-#>>0x04 byte 1 primary index .PX file
-#>>0x04 byte 2 non-indexed .DB data file
-#>>0x04 byte 3 non-incrementing secondary index .Xnn file
-#>>0x04 byte 4 secondary index .Ynn file
-#>>0x04 byte 5 incrementing secondary index .Xnn file
-#>>0x04 byte 6 non-incrementing secondary index .XGn file
-#>>0x04 byte 7 secondary index .YGn file
-#>>>0x04 byte 8 incrementing secondary index .XGn file
-
-## XBase database files
-# updated by Joerg Jenderek at Feb 2013
-# http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
-# http://www.clicketyclick.dk/databases/xbase/format/dbf.html
-# http://home.f1.htw-berlin.de/scheibl/db/intern/dBase.htm
-# inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
-0 ubelong&0x0000FFFF <0x00000C20
-# skip Infocom game Z-machine
->2 ubyte >0
-# skip Androids *.xml
->>3 ubyte >0
->>>3 ubyte <32
-# 1 < version VV
->>>>0 ubyte >1
-# skip HELP.CA3 by test for reserved byte ( NULL )
->>>>>27 ubyte 0
-# reserved bytes not always 0 ; also found 0x3901 (T4.DBF) ,0x7101 (T5.DBF,T6.DBF)
-#>>>>>30 ubeshort x 30NULL?%x
-# possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
->>>>>>24 ubelong&0xffFFFFff >0x01302000
-# .DBF or .MDX
->>>>>>24 ubelong&0xffFFFFff <0x01302001
-# for Xbase Database file (*.DBF) reserved (NULL) for multi-user
->>>>>>>24 ubelong&0xffFFFFff =0
-# test for 2 reserved NULL bytes,transaction and encryption byte flag
->>>>>>>>12 ubelong&0xFFFFfEfE 0
-# test for MDX flag
->>>>>>>>>28 ubyte x
->>>>>>>>>28 ubyte&0xf8 0
-# header size >= 32
->>>>>>>>>>8 uleshort >31
-# skip PIC15736.PCX by test for language driver name or field name
->>>>>>>>>>>32 ubyte >0
-#!:mime application/x-dbf; charset=unknown-8bit ??
-#!:mime application/x-dbase
->>>>>>>>>>>>0 use xbase-type
-# database file
->>>>>>>>>>>>0 ubyte x \b DBF
->>>>>>>>>>>>4 lelong 0 \b, no records
->>>>>>>>>>>>4 lelong >0 \b, %d record
-# plural s appended
->>>>>>>>>>>>>4 lelong >1 \bs
-# http://www.clicketyclick.dk/databases/xbase/format/dbf_check.html#CHECK_DBF
-# 1 <= record size <= 4000 (dBase 3,4) or 32 * KB (=0x8000)
->>>>>>>>>>>>10 uleshort x * %d
-# file size = records * record size + header size
->>>>>>>>>>>>1 ubyte x \b, update-date
->>>>>>>>>>>>1 use xbase-date
-# http://msdn.microsoft.com/de-de/library/cc483186(v=vs.71).aspx
-#>>>>>>>>>>>>29 ubyte =0 \b, codepage ID=0x%x
-# 2~cp850 , 3~cp1252 , 0x1b~?? ; what code page is 0x1b ?
->>>>>>>>>>>>29 ubyte >0 \b, codepage ID=0x%x
-#>>>>>>>>>>>>28 ubyte&0x01 0 \b, no index file
->>>>>>>>>>>>28 ubyte&0x01 1 \b, with index file .MDX
->>>>>>>>>>>>28 ubyte&0x02 2 \b, with memo .FPT
->>>>>>>>>>>>28 ubyte&0x04 4 \b, DataBaseContainer
-# 1st record offset + 1 = header size
->>>>>>>>>>>>8 uleshort >0
->>>>>>>>>>>>(8.s+1) ubyte >0
->>>>>>>>>>>>>8 uleshort >0 \b, at offset %d
->>>>>>>>>>>>>(8.s+1) ubyte >0
->>>>>>>>>>>>>>&-1 string >\0 1st record "%s"
-# for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserverd (NULL)
->>>>>>>24 ubelong&0x0133f7ff >0
-# test for reserved NULL byte
->>>>>>>>47 ubyte x
-# test for valid TAG key format (0x10 or 0)
->>>>>>>>>559 ubyte&0xeF 0
-# test MM <= 12
->>>>>>>>>45 ubeshort <0x0C20
->>>>>>>>>>45 ubyte >0
->>>>>>>>>>>46 ubyte <32
->>>>>>>>>>>>46 ubyte >0
-#!:mime application/x-mdx
->>>>>>>>>>>>>0 use xbase-type
->>>>>>>>>>>>>0 ubyte x \b MDX
->>>>>>>>>>>>>1 ubyte x \b, creation-date
->>>>>>>>>>>>>1 use xbase-date
->>>>>>>>>>>>>44 ubyte x \b, update-date
->>>>>>>>>>>>>44 use xbase-date
-# No.of tags in use (1,2,5,12)
->>>>>>>>>>>>>28 uleshort x \b, %d
-# No. of entries in tag (0x30)
->>>>>>>>>>>>>25 ubyte x \b/%d tags
-# Length of tag
->>>>>>>>>>>>>26 ubyte x * %d
-# 1st tag name_
->>>>>>>>>>>>>548 string x \b, 1st tag "%.11s"
-# 2nd tag name
-#>>>>>>>>>>>>(26.b+548) string x \b, 2nd tag "%.11s"
-#
-# Print the xBase names of different version variants
-0 name xbase-type
->0 ubyte <2
-# 1 < version
->0 ubyte >1
->>0 ubyte 0x02 FoxBase
-# FoxBase+/dBaseIII+, no memo
->>0 ubyte 0x03 FoxBase+/dBase III
-!:mime application/x-dbf
-# dBASE IV no memo file
->>0 ubyte 0x04 dBase IV
-!:mime application/x-dbf
-# dBASE V no memo file
->>0 ubyte 0x05 dBase V
-!:mime application/x-dbf
->>0 ubyte 0x30 Visual FoxPro
-!:mime application/x-dbf
->>0 ubyte 0x31 Visual FoxPro, autoincrement
-!:mime application/x-dbf
-# Visual FoxPro, with field type Varchar or Varbinary
->>0 ubyte 0x32 Visual FoxPro, with field type Varchar
-!:mime application/x-dbf
-# dBASE IV SQL, no memo;dbv memo var size (Flagship)
->>0 ubyte 0x43 dBase IV, with SQL table
-!:mime application/x-dbf
-# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0x62 dBase IV, with SQL table
-#!:mime application/x-dbf
-# dBASE IV, with memo!!
->>0 ubyte 0x7b dBase IV, with memo
-!:mime application/x-dbf
-# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0x82 dBase IV, with SQL system
-#!:mime application/x-dbf
-# FoxBase+/dBaseIII+ with memo .DBT!
->>0 ubyte 0x83 FoxBase+/dBase III, with memo .DBT
-!:mime application/x-dbf
-# VISUAL OBJECTS (first 1.0 versions) for the Dbase III files (NTX clipper driver); memo file
->>0 ubyte 0x87 VISUAL OBJECTS, with memo file
-!:mime application/x-dbf
-# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0x8A FoxBase+/dBase III, with memo .DBT
-#!:mime application/x-dbf
-# dBASE IV with memo!
->>0 ubyte 0x8B dBase IV, with memo .DBT
-!:mime application/x-dbf
-# dBase IV with SQL Table,no memo?
->>0 ubyte 0x8E dBase IV, with SQL table
-!:mime application/x-dbf
-# .dbv and .dbt memo (Flagship)?
->>0 ubyte 0xB3 Flagship
-# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0xCA dBase IV with memo .DBT
-#!:mime application/x-dbf
-# dBASE IV with SQL table, with memo .DBT
->>0 ubyte 0xCB dBase IV with SQL table, with memo .DBT
-!:mime application/x-dbf
-# HiPer-Six format;Clipper SIX, with SMT memo file
->>0 ubyte 0xE5 Clipper SIX with memo
-!:mime application/x-dbf
-# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0xF4 dBase IV, with SQL table, with memo
-#!:mime application/x-dbf
->>0 ubyte 0xF5 FoxPro with memo
-!:mime application/x-dbf
-# http://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0xFA FoxPro 2.x, with memo
-#!:mime application/x-dbf
-# unknown version (should not happen)
->>0 default x xBase
-!:mime application/x-dbf
->>>0 ubyte x (0x%x)
-# flags in version byte
-# DBT flag (with dBASE III memo .DBT)!!
-# >>0 ubyte&0x80 >0 DBT_FLAG=%x
-# memo flag ??
-# >>0 ubyte&0x08 >0 MEMO_FLAG=%x
-# SQL flag ??
-# >>0 ubyte&0x70 >0 SQL_FLAG=%x
-# test and print the date of xBase .DBF .MDX
-0 name xbase-date
-# inspect YYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
->0 ubelong x
->1 ubyte <13
->>1 ubyte >0
->>>2 ubyte >0
->>>>2 ubyte <32
->>>>>0 ubyte x
-# YY is interpreted as 20YY or 19YY
->>>>>>0 ubyte <100 \b %.2d
-# YY is interpreted 1900+YY; TODO: display yy or 20yy instead 1YY
->>>>>>0 ubyte >99 \b %d
->>>>>1 ubyte x \b-%d
->>>>>2 ubyte x \b-%d
-
-# dBase memo files .DBT or .FPT
-# http://msdn.microsoft.com/en-us/library/8599s21w(v=vs.80).aspx
-16 ubyte <4
->16 ubyte !2
->>16 ubyte !1
-# next free block index is positive
->>>0 ulelong >0
-# skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size
->>>>17 ubelong&0xFFfdFE00 0x00000000
-# skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h
->>>>>20 ubelong&0xFF01209B 0x00000000
-# dBASE III
->>>>>>16 ubyte 3
-# dBASE III DBT
->>>>>>>0 use xbase-memo-print
-# dBASE IV DBT , FoxPro FPT or many PNG , ZIP , DBF garbage
->>>>>>16 ubyte 0
-# dBASE IV DBT with DBF name or DBF garbage
->>>>>>>8 ubelong >0x40000000
-# skip DBF and catch dBASE IV DBT with DBF name and with non big index of next free block
->>>>>>>>0 ulelong <0x01010002
->>>>>>>>>0 use xbase-memo-print
->>>>>>>8 ubelong 0
-# skip MM*DD*.bin by test for for reserved NULL byte
->>>>>>>>508 ubelong 0
-# real memo files should contain text here
->>>>>>>>>520 ubelong >0x20202019
->>>>>>>>>>520 ubelong <0xFEFEFEFF
->>>>>>>>>>>0 use xbase-memo-print
-# garbage PCX , ZIP , JAR , XPI
->>>>>>>8 default x
-
-# Print the information of dBase DBT or FoxPro FPT memo files
-0 name xbase-memo-print
->0 ubyte x
-# test version
-# memo file
->>16 ubyte 3 dBase III DBT
->>16 ubyte 0
->>>512 ubelong <0x00000003 FoxPro FPT
-# Size of blocks for FoxPro
->>>>6 ubeshort x \b, blocks size %u
-# Number of next available block for appending data for FoxPro
->>>>0 ubelong =0 \b, next free block index %u
->>>>0 ubelong !0 \b, next free block index %u
->>>512 default x dBase IV DBT
-# DBF file name without extension
->>>>8 string >\0 \b of %-.8s.DBF
-# size of blocks ; not reliable 0x2020204C
-#>>>>4 ulelong =0 \b, blocks size %u
->>>>4 ulelong !0 \b, blocks size %u
-# Block length found 0 , 512
-#>>>>20 uleshort =0 \b, block length %u
->>>>20 uleshort !0 \b, block length %u
-# Number of next available block for appending data
->>>>0 ulelong =0 \b, next free block index %u
->>>>0 ulelong !0 \b, next free block index %u
->>512 ubelong x
->>>512 ubelong =0xFFFF0800
->>>>520 string >\0 \b, 1st used item "%s"
-# FoxPro
->>>512 ubelong <3
-# FoxPro memo
->>>>512 ubelong =1
->>>>520 string >\0 \b, 1st used item "%s"
->>>512 default x
-# may be deleted memo field
->>>>512 string >\0 \b, 1st item "%s"
-
-# TODO:
-# DBASE index file *.NDX
-# DBASE Compound Index file *.CDX
-# dBASE IV Printer Driver *.PRF
-## End of XBase database stuff
-
-# MS Access database
-4 string Standard\ Jet\ DB Microsoft Access Database
-!:mime application/x-msaccess
-4 string Standard\ ACE\ DB Microsoft Access Database
-!:mime application/x-msaccess
-
-# TDB database from Samba et al - Martin Pool <mbp at samba.org>
-0 string TDB\ file TDB database
->32 lelong 0x2601196D version 6, little-endian
->>36 lelong x hash size %d bytes
-
-# 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
-
-# ICE authority file data (Wolfram Kleff)
-2 string ICE ICE authority data
-
-# X11 Xauthority file (Wolfram Kleff)
-10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data
-
-# From: Maxime Henrion <mux at FreeBSD.org>
-# PostgreSQL's custom dump format, Maxime Henrion <mux at FreeBSD.org>
-0 string PGDMP PostgreSQL custom database dump
->5 byte x - v%d
->6 byte x \b.%d
->5 beshort <0x101 \b-0
->5 beshort >0x100
->>7 byte x \b-%d
-
-# Type: Advanced Data Format (ADF) database
-# URL: http://www.grc.nasa.gov/WWW/cgns/adf/
-# From: Nicolas Chauvat <nicolas.chauvat at logilab.fr>
-0 string @(#)ADF\ Database CGNS Advanced Data Format
-
-# Tokyo Cabinet magic data
-# http://tokyocabinet.sourceforge.net/index.html
-0 string ToKyO\ CaBiNeT\n Tokyo Cabinet
->14 string x \b (%s)
->32 byte 0 \b, Hash
-!:mime application/x-tokyocabinet-hash
->32 byte 1 \b, B+ tree
-!:mime application/x-tokyocabinet-btree
->32 byte 2 \b, Fixed-length
-!:mime application/x-tokyocabinet-fixed
->32 byte 3 \b, Table
-!:mime application/x-tokyocabinet-table
->33 byte &1 \b, [open]
->33 byte &2 \b, [fatal]
->34 byte x \b, apow=%d
->35 byte x \b, fpow=%d
->36 byte &0x01 \b, [large]
->36 byte &0x02 \b, [deflate]
->36 byte &0x04 \b, [bzip]
->36 byte &0x08 \b, [tcbs]
->36 byte &0x10 \b, [excodec]
->40 lequad x \b, bnum=%lld
->48 lequad x \b, rnum=%lld
->56 lequad x \b, fsiz=%lld
-
-# Type: QDBM Quick Database Manager
-# From: Benoit Sibaud <bsibaud at april.org>
-0 string \\[depot\\]\n\f Quick Database Manager, little endian
-0 string \\[DEPOT\\]\n\f Quick Database Manager, big endian
-
-# Type: TokyoCabinet database
-# URL: http://tokyocabinet.sourceforge.net/
-# From: Benoit Sibaud <bsibaud at april.org>
-0 string ToKyO\ CaBiNeT\n TokyoCabinet database
->14 string x (version %s)
-
-# From: Stephane Blondon http://www.yaal.fr
-# Database file for Zope (done by FileStorage)
-0 string FS21 Zope Object Database File Storage (data)
-# Cache file for the database of Zope (done by ClientStorage)
-0 string ZEC3 Zope Object Database Client Cache File (data)
-
-# IDA (Interactive Disassembler) database
-0 string IDA1 IDA (Interactive Disassembler) database
-
-#------------------------------------------------------------------------------
-# $File: diamond,v 1.7 2009/09/19 16:28:08 christos Exp $
-# diamond: file(1) magic for Diamond system
-#
-# ... diamond is a multi-media mail and electronic conferencing system....
-#
-# XXX - I think it was either renamed Slate, or replaced by Slate....
-#
-# The full deal is too long...
-#0 string <list>\n<protocol\ bbn-multimedia-format> Diamond Multimedia Document
-0 string =<list>\n<protocol\ bbn-m Diamond Multimedia Document
-
-#------------------------------------------------------------------------------
-# $File: diff,v 1.14 2012/09/16 23:08:54 christos Exp $
-# diff: file(1) magic for diff(1) output
-#
-0 search/1 diff\ diff output text
-!:mime text/x-diff
-0 search/1 ***\ diff output text
-!:mime text/x-diff
-0 search/1 Only\ in\ diff output text
-!:mime text/x-diff
-0 search/1 Common\ subdirectories:\ diff output text
-!:mime text/x-diff
-
-0 search/1 Index: RCS/CVS diff output text
-!:mime text/x-diff
-
-# bsdiff: file(1) magic for bsdiff(1) output
-0 string/b BSDIFF40 bsdiff(1) patch file
-
-
-# unified diff
-0 search/4096 ---\
->&0 search/1024 \n
->>&0 search/1 +++\
->>>&0 search/1024 \n
->>>>&0 search/1 @@ unified diff output text
-!:mime text/x-diff
-!:strength + 90
-
-# librsync -- the library for network deltas
-#
-# Copyright (C) 2001 by Martin Pool. You may do whatever you want with
-# this file.
-#
-0 belong 0x72730236 rdiff network-delta data
-
-0 belong 0x72730136 rdiff network-delta signature data
->4 belong x (block length=%d,
->8 belong x signature strength=%d)
-
-#------------------------------------------------------------------------------
-# $File: digital,v 1.11 2013/01/11 16:45:23 christos Exp $
-# Digital UNIX - Info
-#
-0 string =!<arch>\n________64E Alpha archive
->22 string X -- out of date
-#
-
-0 leshort 0603
->24 leshort 0410 COFF format alpha pure
->24 leshort 0413 COFF format alpha demand paged
->>22 leshort&030000 !020000 executable
->>22 leshort&020000 !0 dynamically linked
->>16 lelong !0 not stripped
->>16 lelong 0 stripped
->>27 byte x - version %d
->>26 byte x \b.%d
->>28 byte x \b-%d
->24 leshort 0407 COFF format alpha object
->>22 leshort&030000 020000 shared library
->>27 byte x - version %d
->>26 byte x \b.%d
->>28 byte x \b-%d
-
-# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike at opac.bl.uk>
-#
-# The actual magic number is just "Core", followed by a 2-byte version
-# number; however, treating any file that begins with "Core" as a Digital
-# UNIX core dump file may produce too many false hits, so we include one
-# byte of the version number as well; DU 5.0 appears only to be up to
-# version 2.
-#
-0 string Core\001 Alpha COFF format core dump (Digital UNIX)
->24 string >\0 \b, from '%s'
-0 string Core\002 Alpha COFF format core dump (Digital UNIX)
->24 string >\0 \b, from '%s'
-#
-# The next is incomplete, we could tell more about this format,
-# but its not worth it.
-0 leshort 0x188 Alpha compressed COFF
-0 leshort 0x18f Alpha u-code object
-#
-#
-# Some other interesting Digital formats,
-0 string \377\377\177 ddis/ddif
-0 string \377\377\174 ddis/dots archive
-0 string \377\377\176 ddis/dtif table data
-0 string \033c\033 LN03 output
-0 long 04553207 X image
-#
-0 string =!<PDF>!\n profiling data file
-#
-# Locale data tables (MIPS and Alpha).
-#
-0 short 0x0501 locale data table
->6 short 0x24 for MIPS
->6 short 0x40 for Alpha
-
-#------------------------------------------------------------------------------
-# $File: dolby,v 1.7 2014/01/08 22:37:23 christos Exp $
-# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka at gmx.at>
-# from http://www.atsc.org/standards/a_52a.pdf
-# corrections, additions, etc. are always welcome!
-#
-# syncword
-0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream,
-# Proposed audio/ac3 RFC/4184
-!:mime audio/vnd.dolby.dd-raw
-# fscod
->4 byte&0xc0 = 0x00 48 kHz,
->4 byte&0xc0 = 0x40 44.1 kHz,
->4 byte&0xc0 = 0x80 32 kHz,
-# is this one used for 96 kHz?
->4 byte&0xc0 = 0xc0 reserved frequency,
-#
->5 byte&0x07 = 0x00 \b, complete main (CM)
->5 byte&0x07 = 0x01 \b, music and effects (ME)
->5 byte&0x07 = 0x02 \b, visually impaired (VI)
->5 byte&0x07 = 0x03 \b, hearing impaired (HI)
->5 byte&0x07 = 0x04 \b, dialogue (D)
->5 byte&0x07 = 0x05 \b, commentary (C)
->5 byte&0x07 = 0x06 \b, emergency (E)
->5 beshort&0x07e0 0x0720 \b, voiceover (VO)
->5 beshort&0x07e0 >0x0720 \b, karaoke
-# acmod
->6 byte&0xe0 = 0x00 1+1 front,
->>6 byte&0x10 = 0x10 LFE on,
->6 byte&0xe0 = 0x20 1 front/0 rear,
->>6 byte&0x10 = 0x10 LFE on,
->6 byte&0xe0 = 0x40 2 front/0 rear,
-# dsurmod (for stereo only)
->>6 byte&0x18 = 0x00 Dolby Surround not indicated
->>6 byte&0x18 = 0x08 not Dolby Surround encoded
->>6 byte&0x18 = 0x10 Dolby Surround encoded
->>6 byte&0x18 = 0x18 reserved Dolby Surround mode
->>6 byte&0x04 = 0x04 LFE on,
->6 byte&0xe0 = 0x60 3 front/0 rear,
->>6 byte&0x04 = 0x04 LFE on,
->6 byte&0xe0 = 0x80 2 front/1 rear,
->>6 byte&0x04 = 0x04 LFE on,
->6 byte&0xe0 = 0xa0 3 front/1 rear,
->>6 byte&0x01 = 0x01 LFE on,
->6 byte&0xe0 = 0xc0 2 front/2 rear,
->>6 byte&0x04 = 0x04 LFE on,
->6 byte&0xe0 = 0xe0 3 front/2 rear,
->>6 byte&0x01 = 0x01 LFE on,
-#
->4 byte&0x3e = 0x00 \b, 32 kbit/s
->4 byte&0x3e = 0x02 \b, 40 kbit/s
->4 byte&0x3e = 0x04 \b, 48 kbit/s
->4 byte&0x3e = 0x06 \b, 56 kbit/s
->4 byte&0x3e = 0x08 \b, 64 kbit/s
->4 byte&0x3e = 0x0a \b, 80 kbit/s
->4 byte&0x3e = 0x0c \b, 96 kbit/s
->4 byte&0x3e = 0x0e \b, 112 kbit/s
->4 byte&0x3e = 0x10 \b, 128 kbit/s
->4 byte&0x3e = 0x12 \b, 160 kbit/s
->4 byte&0x3e = 0x14 \b, 192 kbit/s
->4 byte&0x3e = 0x16 \b, 224 kbit/s
->4 byte&0x3e = 0x18 \b, 256 kbit/s
->4 byte&0x3e = 0x1a \b, 320 kbit/s
->4 byte&0x3e = 0x1c \b, 384 kbit/s
->4 byte&0x3e = 0x1e \b, 448 kbit/s
->4 byte&0x3e = 0x20 \b, 512 kbit/s
->4 byte&0x3e = 0x22 \b, 576 kbit/s
->4 byte&0x3e = 0x24 \b, 640 kbit/s
-
-#------------------------------------------------------------------------------
-# $File: dump,v 1.13 2014/04/30 21:41:02 christos Exp $
-# dump: file(1) magic for dump file format--for new and old dump filesystems
-#
-# We specify both byte orders in order to recognize byte-swapped dumps.
-#
-0 name new-dump-be
->4 bedate x Previous dump %s,
->8 bedate x This dump %s,
->12 belong >0 Volume %d,
->692 belong 0 Level zero, type:
->692 belong >0 Level %d, type:
->0 belong 1 tape header,
->0 belong 2 beginning of file record,
->0 belong 3 map of inodes on tape,
->0 belong 4 continuation of file record,
->0 belong 5 end of volume,
->0 belong 6 map of inodes deleted,
->0 belong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 belong >0 Flags %x
-
-0 name old-dump-be
-#>4 bedate x Previous dump %s,
-#>8 bedate x This dump %s,
->12 belong >0 Volume %d,
->692 belong 0 Level zero, type:
->692 belong >0 Level %d, type:
->0 belong 1 tape header,
->0 belong 2 beginning of file record,
->0 belong 3 map of inodes on tape,
->0 belong 4 continuation of file record,
->0 belong 5 end of volume,
->0 belong 6 map of inodes deleted,
->0 belong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 belong >0 Flags %x
-
-0 name ufs2-dump-be
->896 beqdate x Previous dump %s,
->904 beqdate x This dump %s,
->12 belong >0 Volume %d,
->692 belong 0 Level zero, type:
->692 belong >0 Level %d, type:
->0 belong 1 tape header,
->0 belong 2 beginning of file record,
->0 belong 3 map of inodes on tape,
->0 belong 4 continuation of file record,
->0 belong 5 end of volume,
->0 belong 6 map of inodes deleted,
->0 belong 7 end of medium (for floppy),
->676 string >\0 Label %s,
->696 string >\0 Filesystem %s,
->760 string >\0 Device %s,
->824 string >\0 Host %s,
->888 belong >0 Flags %x
-
-24 belong 60012 new-fs dump file (big endian),
->0 use new-dump-be
-
-24 belong 60011 old-fs dump file (big endian),
->0 use old-dump-be
-
-24 lelong 60012 new-fs dump file (little endian),
->0 use \^new-dump-be
-
-24 lelong 60011 old-fs dump file (little endian),
->0 use \^old-dump-be
-
-
-24 belong 0x19540119 new-fs dump file (ufs2, big endian),
->0 use ufs2-dump-be
-
-24 lelong 0x19540119 new-fs dump file (ufs2, little endian),
->0 use \^ufs2-dump-be
-
-18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness),
->2 medate x Previous dump %s,
->6 medate x This dump %s,
->10 leshort >0 Volume %d,
->0 leshort 1 tape header.
->0 leshort 2 beginning of file record.
->0 leshort 3 map of inodes on tape.
->0 leshort 4 continuation of file record.
->0 leshort 5 end of volume.
->0 leshort 6 map of inodes deleted.
->0 leshort 7 end of medium (for floppy).
-
-#------------------------------------------------------------------------------
-# $File: dyadic,v 1.6 2014/06/01 19:14:42 christos Exp $
-# Dyadic: file(1) magic for Dyalog APL.
-#
-# updated by Joerg Jenderek at Oct 2013
-# http://en.wikipedia.org/wiki/Dyalog_APL
-# http://www.dyalog.com/
-# .DXV Dyalog APL External Variable
-# .DIN Dyalog APL Input Table
-# .DOT Dyalog APL Output Table
-# .DFT Dyalog APL Format File
-0 ubeshort&0xFF60 0xaa00
-# skip biblio.dbt
->1 byte !4
-# real Dyalog APL have non zero version numbers like 7.3 or 13.4
->>2 ubeshort >0x0000 Dyalog APL
->>>1 byte 0x00 aplcore
-#>>>1 byte 0x00 incomplete workspace
-# *.DCF Dyalog APL Component File
->>>1 byte 0x01 component file 32-bit non-journaled non-checksummed
-#>>>1 byte 0x01 component file
->>>1 byte 0x02 external variable exclusive
-#>>>1 byte 0x02 external variable
-# *.DWS Dyalog APL Workspace
->>>1 byte 0x03 workspace
->>>>7 byte&0x28 0x00 32-bit
->>>>7 byte&0x28 0x20 64-bit
->>>>7 byte&0x0c 0x00 classic
->>>>7 byte&0x0c 0x04 unicode
->>>>7 byte&0x88 0x00 big-endian
->>>>7 byte&0x88 0x80 little-endian
->>>1 byte 0x06 external variable shared
-# *.DSE Dyalog APL Session , *.DLF Dyalog APL Session Log File
->>>1 byte 0x07 session
->>>1 byte 0x08 mapped file 32-bit
->>>1 byte 0x09 component file 64-bit non-journaled non-checksummed
->>>1 byte 0x0a mapped file 64-bit
->>>1 byte 0x0b component file 32-bit level 1 journaled non-checksummed
->>>1 byte 0x0c component file 64-bit level 1 journaled non-checksummed
->>>1 byte 0x0d component file 32-bit level 1 journaled checksummed
->>>1 byte 0x0e component file 64-bit level 1 journaled checksummed
->>>1 byte 0x0f component file 32-bit level 2 journaled checksummed
->>>1 byte 0x10 component file 64-bit level 2 journaled checksummed
->>>1 byte 0x11 component file 32-bit level 3 journaled checksummed
->>>1 byte 0x12 component file 64-bit level 3 journaled checksummed
->>>1 byte 0x13 component file 32-bit non-journaled checksummed
->>>1 byte 0x14 component file 64-bit non-journaled checksummed
->>>1 byte 0x80 DDB
->>>2 byte x version %d
->>>3 byte x \b.%d
-#>>>2 byte x type %d
-#>>>3 byte x subtype %d
-
-# *.DXF Dyalog APL Transfer File
-0 short 0x6060 Dyalog APL transfer
-
-#------------------------------------------------------------------------------
-# $File: ebml,v 1.1 2010/07/02 00:07:03 christos Exp $
-# ebml: file(1) magic for various Extensible Binary Meta Language
-# http://www.matroska.org/technical/specs/index.html#track
-0 belong 0x1a45dfa3 EBML file
->4 search/b/100 \102\202
->>&1 string x \b, creator %.8s
-
-#------------------------------------------------------------------------------
-# $File: editors,v 1.8 2009/09/19 16:28:09 christos Exp $
-# T602 editor documents
-# by David Necas <yeti at physics.muni.cz>
-0 string @CT\ T602 document data,
->4 string 0 Kamenicky
->4 string 1 CP 852
->4 string 2 KOI8-CS
->4 string >2 unknown encoding
-
-# Vi IMproved Encrypted file
-# by David Necas <yeti at physics.muni.cz>
-0 string VimCrypt~ Vim encrypted file data
-# Vi IMproved Swap file
-# by Sven Wegener <swegener at gentoo.org>
-0 string b0VIM\ Vim swap file
->&0 string >\0 \b, version %s
-
-#------------------------------------------------------------------------------
-# $File: efi,v 1.5 2014/04/30 21:41:02 christos Exp $
-# efi: file(1) magic for Universal EFI binaries
-
-0 lelong 0x0ef1fab9
->4 lelong 1 Universal EFI binary with 1 architecture
->>&0 lelong 7 \b, i386
->>&0 lelong 0x01000007 \b, x86_64
->4 lelong 2 Universal EFI binary with 2 architectures
->>&0 lelong 7 \b, i386
->>&0 lelong 0x01000007 \b, x86_64
->>&20 lelong 7 \b, i386
->>&20 lelong 0x01000007 \b, x86_64
->4 lelong >2 Universal EFI binary with %d architectures
-
-#------------------------------------------------------------------------------
-# $File: elf,v 1.67 2014/06/12 13:52:48 christos Exp $
-# elf: file(1) magic for ELF executables
-#
-# We have to check the byte order flag to see what byte order all the
-# other stuff in the header is in.
-#
-# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
-#
-# Created by: unknown
-# Modified by (1): Daniel Quinlan <quinlan at yggdrasil.com>
-# Modified by (2): Peter Tobias <tobias at server.et-inf.fho-emden.de> (core support)
-# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk at ds9.au.s.shuttle.de> (fix of core support)
-# Modified by (4): <gerardo.cacciari at gmail.com> (VMS Itanium)
-# Modified by (5): Matthias Urlichs <smurf at debian.org> (Listing of many architectures)
-
-0 name elf-le
->16 leshort 0 no file type,
-!:mime application/octet-stream
->16 leshort 1 relocatable,
-!:mime application/x-object
->16 leshort 2 executable,
-!:mime application/x-executable
->16 leshort 3 shared object,
-!:mime application/x-sharedlib
->16 leshort 4 core file
-!:mime application/x-coredump
-# Core file detection is not reliable.
-#>>>(0x38+0xcc) string >\0 of '%s'
-#>>>(0x38+0x10) lelong >0 (signal %d),
->16 leshort &0xff00 processor-specific,
->18 clear x
->18 leshort 0 no machine,
->18 leshort 1 AT&T WE32100,
->18 leshort 2 SPARC,
->18 leshort 3 Intel 80386,
->18 leshort 4 Motorola m68k,
->>4 byte 1
->>>36 lelong &0x01000000 68000,
->>>36 lelong &0x00810000 CPU32,
->>>36 lelong 0 68020,
->18 leshort 5 Motorola m88k,
->18 leshort 6 Intel 80486,
->18 leshort 7 Intel 80860,
-# The official e_machine number for MIPS is now #8, regardless of endianness.
-# The second number (#10) will be deprecated later. For now, we still
-# say something if #10 is encountered, but only gory details for #8.
->18 leshort 8 MIPS,
->>4 byte 1
->>>36 lelong &0x20 N32
->18 leshort 10 MIPS,
->>4 byte 1
->>>36 lelong &0x20 N32
->18 leshort 8
-# only for 32-bit
->>4 byte 1
->>>36 lelong&0xf0000000 0x00000000 MIPS-I
->>>36 lelong&0xf0000000 0x10000000 MIPS-II
->>>36 lelong&0xf0000000 0x20000000 MIPS-III
->>>36 lelong&0xf0000000 0x30000000 MIPS-IV
->>>36 lelong&0xf0000000 0x40000000 MIPS-V
->>>36 lelong&0xf0000000 0x50000000 MIPS32
->>>36 lelong&0xf0000000 0x60000000 MIPS64
->>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2
->>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2
-# only for 64-bit
->>4 byte 2
->>>48 lelong&0xf0000000 0x00000000 MIPS-I
->>>48 lelong&0xf0000000 0x10000000 MIPS-II
->>>48 lelong&0xf0000000 0x20000000 MIPS-III
->>>48 lelong&0xf0000000 0x30000000 MIPS-IV
->>>48 lelong&0xf0000000 0x40000000 MIPS-V
->>>48 lelong&0xf0000000 0x50000000 MIPS32
->>>48 lelong&0xf0000000 0x60000000 MIPS64
->>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2
->>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2
->18 leshort 9 Amdahl,
->18 leshort 10 MIPS (deprecated),
->18 leshort 11 RS6000,
->18 leshort 15 PA-RISC,
-# only for 32-bit
->>4 byte 1
->>>38 leshort 0x0214 2.0
->>>36 leshort &0x0008 (LP64)
-# only for 64-bit
->>4 byte 2
->>>50 leshort 0x0214 2.0
->>>48 leshort &0x0008 (LP64)
->18 leshort 16 nCUBE,
->18 leshort 17 Fujitsu VPP500,
->18 leshort 18 SPARC32PLUS,
-# only for 32-bit
->>4 byte 1
->>>36 lelong&0xffff00 0x000100 V8+ Required,
->>>36 lelong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required,
->>>36 lelong&0xffff00 0x000400 HaL R1 Extensions Required,
->>>36 lelong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required,
->18 leshort 19 Intel 80960,
->18 leshort 20 PowerPC or cisco 4500,
->18 leshort 21 64-bit PowerPC or cisco 7500,
->18 leshort 22 IBM S/390,
->18 leshort 23 Cell SPU,
->18 leshort 24 cisco SVIP,
->18 leshort 25 cisco 7200,
->18 leshort 36 NEC V800 or cisco 12000,
->18 leshort 37 Fujitsu FR20,
->18 leshort 38 TRW RH-32,
->18 leshort 39 Motorola RCE,
->18 leshort 40 ARM,
->>4 byte 1
->>>36 lelong&0xff000000 0x04000000 EABI4
->>>36 lelong&0xff000000 0x05000000 EABI5
->>>36 lelong &0x00800000 BE8
->>>36 lelong &0x00400000 LE8
->18 leshort 41 Alpha,
->18 leshort 42 Renesas SH,
->18 leshort 43 SPARC V9,
->>4 byte 2
->>>48 lelong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required,
->>>48 lelong&0xffff00 0x000400 HaL R1 Extensions Required,
->>>48 lelong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required,
->>>48 lelong&0x3 0 total store ordering,
->>>48 lelong&0x3 1 partial store ordering,
->>>48 lelong&0x3 2 relaxed memory ordering,
->18 leshort 44 Siemens Tricore Embedded Processor,
->18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc.,
->18 leshort 46 Renesas H8/300,
->18 leshort 47 Renesas H8/300H,
->18 leshort 48 Renesas H8S,
->18 leshort 49 Renesas H8/500,
->18 leshort 50 IA-64,
->18 leshort 51 Stanford MIPS-X,
->18 leshort 52 Motorola Coldfire,
->18 leshort 53 Motorola M68HC12,
->18 leshort 54 Fujitsu MMA,
->18 leshort 55 Siemens PCP,
->18 leshort 56 Sony nCPU,
->18 leshort 57 Denso NDR1,
->18 leshort 58 Start*Core,
->18 leshort 59 Toyota ME16,
->18 leshort 60 ST100,
->18 leshort 61 Tinyj emb.,
->18 leshort 62 x86-64,
->18 leshort 63 Sony DSP,
->18 leshort 64 DEC PDP-10,
->18 leshort 65 DEC PDP-11,
->18 leshort 66 FX66,
->18 leshort 67 ST9+ 8/16 bit,
->18 leshort 68 ST7 8 bit,
->18 leshort 69 MC68HC16,
->18 leshort 70 MC68HC11,
->18 leshort 71 MC68HC08,
->18 leshort 72 MC68HC05,
->18 leshort 73 SGI SVx or Cray NV1,
->18 leshort 74 ST19 8 bit,
->18 leshort 75 Digital VAX,
->18 leshort 76 Axis cris,
->18 leshort 77 Infineon 32-bit embedded,
->18 leshort 78 Element 14 64-bit DSP,
->18 leshort 79 LSI Logic 16-bit DSP,
->18 leshort 80 MMIX,
->18 leshort 81 Harvard machine-independent,
->18 leshort 82 SiTera Prism,
->18 leshort 83 Atmel AVR 8-bit,
->18 leshort 84 Fujitsu FR30,
->18 leshort 85 Mitsubishi D10V,
->18 leshort 86 Mitsubishi D30V,
->18 leshort 87 NEC v850,
->18 leshort 88 Renesas M32R,
->18 leshort 89 Matsushita MN10300,
->18 leshort 90 Matsushita MN10200,
->18 leshort 91 picoJava,
->18 leshort 92 OpenRISC,
->18 leshort 93 ARC Cores Tangent-A5,
->18 leshort 94 Tensilica Xtensa,
->18 leshort 95 Alphamosaic VideoCore,
->18 leshort 96 Thompson Multimedia,
->18 leshort 97 NatSemi 32k,
->18 leshort 98 Tenor Network TPC,
->18 leshort 99 Trebia SNP 1000,
->18 leshort 100 STMicroelectronics ST200,
->18 leshort 101 Ubicom IP2022,
->18 leshort 102 MAX Processor,
->18 leshort 103 NatSemi CompactRISC,
->18 leshort 104 Fujitsu F2MC16,
->18 leshort 105 TI msp430,
->18 leshort 106 Analog Devices Blackfin,
->18 leshort 107 S1C33 Family of Seiko Epson,
->18 leshort 108 Sharp embedded,
->18 leshort 109 Arca RISC,
->18 leshort 110 PKU-Unity Ltd.,
->18 leshort 111 eXcess: 16/32/64-bit,
->18 leshort 112 Icera Deep Execution Processor,
->18 leshort 113 Altera Nios II,
->18 leshort 114 NatSemi CRX,
->18 leshort 115 Motorola XGATE,
->18 leshort 116 Infineon C16x/XC16x,
->18 leshort 117 Renesas M16C series,
->18 leshort 118 Microchip dsPIC30F,
->18 leshort 119 Freescale RISC core,
->18 leshort 120 Renesas M32C series,
->18 leshort 131 Altium TSK3000 core,
->18 leshort 132 Freescale RS08,
->18 leshort 134 Cyan Technology eCOG2,
->18 leshort 135 Sunplus S+core7 RISC,
->18 leshort 136 New Japan Radio (NJR) 24-bit DSP,
->18 leshort 137 Broadcom VideoCore III,
->18 leshort 138 LatticeMico32,
->18 leshort 139 Seiko Epson C17 family,
->18 leshort 140 TI TMS320C6000 DSP family,
->18 leshort 141 TI TMS320C2000 DSP family,
->18 leshort 142 TI TMS320C55x DSP family,
->18 leshort 160 STMicroelectronics 64bit VLIW DSP,
->18 leshort 161 Cypress M8C,
->18 leshort 162 Renesas R32C series,
->18 leshort 163 NXP TriMedia family,
->18 leshort 164 QUALCOMM DSP6,
->18 leshort 165 Intel 8051 and variants,
->18 leshort 166 STMicroelectronics STxP7x family,
->18 leshort 167 Andes embedded RISC,
->18 leshort 168 Cyan eCOG1X family,
->18 leshort 169 Dallas MAXQ30,
->18 leshort 170 New Japan Radio (NJR) 16-bit DSP,
->18 leshort 171 M2000 Reconfigurable RISC,
->18 leshort 172 Cray NV2 vector architecture,
->18 leshort 173 Renesas RX family,
->18 leshort 174 META,
->18 leshort 175 MCST Elbrus,
->18 leshort 176 Cyan Technology eCOG16 family,
->18 leshort 177 NatSemi CompactRISC,
->18 leshort 178 Freescale Extended Time Processing Unit,
->18 leshort 179 Infineon SLE9X,
->18 leshort 180 Intel L1OM,
->18 leshort 181 Intel K1OM,
->18 leshort 183 ARM aarch64,
->18 leshort 185 Atmel 32-bit family,
->18 leshort 186 STMicroeletronics STM8 8-bit,
->18 leshort 187 Tilera TILE64,
->18 leshort 188 Tilera TILEPro,
->18 leshort 189 Xilinx MicroBlaze 32-bit RISC,
->18 leshort 190 NVIDIA CUDA architecture,
->18 leshort 191 Tilera TILE-Gx,
->18 leshort 197 Renesas RL78 family,
->18 leshort 199 Renesas 78K0R,
->18 leshort 200 Freescale 56800EX,
->18 leshort 201 Beyond BA1,
->18 leshort 202 Beyond BA2,
->18 leshort 203 XMOS xCORE,
->18 leshort 204 Microchip 8-bit PIC(r),
->18 leshort 210 KM211 KM32,
->18 leshort 211 KM211 KMX32,
->18 leshort 212 KM211 KMX16,
->18 leshort 213 KM211 KMX8,
->18 leshort 214 KM211 KVARC,
->18 leshort 215 Paneve CDP,
->18 leshort 216 Cognitive Smart Memory,
->18 leshort 217 iCelero CoolEngine,
->18 leshort 218 Nanoradio Optimized RISC,
->18 leshort 0x1057 AVR (unofficial),
->18 leshort 0x1059 MSP430 (unofficial),
->18 leshort 0x1223 Adapteva Epiphany (unofficial),
->18 leshort 0x2530 Morpho MT (unofficial),
->18 leshort 0x3330 FR30 (unofficial),
->18 leshort 0x3426 OpenRISC (obsolete),
->18 leshort 0x4688 Infineon C166 (unofficial),
->18 leshort 0x5441 Cygnus FRV (unofficial),
->18 leshort 0x5aa5 DLX (unofficial),
->18 leshort 0x7650 Cygnus D10V (unofficial),
->18 leshort 0x7676 Cygnus D30V (unofficial),
->18 leshort 0x8217 Ubicom IP2xxx (unofficial),
->18 leshort 0x8472 OpenRISC (obsolete),
->18 leshort 0x9025 Cygnus PowerPC (unofficial),
->18 leshort 0x9026 Alpha (unofficial),
->18 leshort 0x9041 Cygnus M32R (unofficial),
->18 leshort 0x9080 Cygnus V850 (unofficial),
->18 leshort 0xa390 IBM S/390 (obsolete),
->18 leshort 0xabc7 Old Xtensa (unofficial),
->18 leshort 0xad45 xstormy16 (unofficial),
->18 leshort 0xbaab Old MicroBlaze (unofficial),,
->18 leshort 0xbeef Cygnus MN10300 (unofficial),
->18 leshort 0xdead Cygnus MN10200 (unofficial),
->18 leshort 0xf00d Toshiba MeP (unofficial),
->18 leshort 0xfeb0 Renesas M32C (unofficial),
->18 leshort 0xfeba Vitesse IQ2000 (unofficial),
->18 leshort 0xfebb NIOS (unofficial),
->18 leshort 0xfeed Moxie (unofficial),
->18 default x
->>18 leshort x *unknown arch 0x%x*
->20 lelong 0 invalid version
->20 lelong 1 version 1
-
-0 string \177ELF ELF
-!:strength *2
->4 byte 0 invalid class
->4 byte 1 32-bit
->4 byte 2 64-bit
->5 byte 0 invalid byte order
->5 byte 1 LSB
->>0 use elf-le
->5 byte 2 MSB
->>0 use \^elf-le
-# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed
-# like proper ELF, but extracting the string had bad results.
->4 byte <0x80
->>8 string >\0 (%s)
->8 string \0
->>7 byte 0 (SYSV)
->>7 byte 1 (HP-UX)
->>7 byte 2 (NetBSD)
->>7 byte 3 (GNU/Linux)
->>7 byte 4 (GNU/Hurd)
->>7 byte 5 (86Open)
->>7 byte 6 (Solaris)
->>7 byte 7 (Monterey)
->>7 byte 8 (IRIX)
->>7 byte 9 (FreeBSD)
->>7 byte 10 (Tru64)
->>7 byte 11 (Novell Modesto)
->>7 byte 12 (OpenBSD)
->8 string \2
->>7 byte 13 (OpenVMS)
->>7 byte 97 (ARM)
->>7 byte 255 (embedded)
-
-#------------------------------------------------------------------------------
-# $File: encore,v 1.7 2014/04/30 21:41:02 christos Exp $
-# encore: file(1) magic for Encore machines
-#
-# XXX - needs to have the byte order specified (NS32K was little-endian,
-# dunno whether they run the 88K in little-endian mode or not).
-#
-0 short 0x154 Encore
->20 short 0x107 executable
->20 short 0x108 pure executable
->20 short 0x10b demand-paged executable
->20 short 0x10f unsupported executable
->12 long >0 not stripped
->22 short >0 - version %d
->22 short 0 -
-#>4 date x stamp %s
-0 short 0x155 Encore unsupported executable
->12 long >0 not stripped
->22 short >0 - version %d
->22 short 0 -
-#>4 date x stamp %s
-
-#------------------------------------------------------------------------------
-# $File: epoc,v 1.9 2013/12/21 14:28:15 christos Exp $
-# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]
-# Stefan Praszalowicz <hpicollo at worldnet.fr> and Peter Breitenlohner <peb at mppmu.mpg.de>
-# Useful information for improving this file can be found at:
-# http://software.frodo.looijaard.name/psiconv/formats/Index.html
-#------------------------------------------------------------------------------
-0 lelong 0x10000037 Psion Series 5
->4 lelong 0x10000039 font file
->4 lelong 0x1000003A printer driver
->4 lelong 0x1000003B clipboard
->4 lelong 0x10000042 multi-bitmap image
-!:mime image/x-epoc-mbm
->4 lelong 0x1000006A application information file
->4 lelong 0x1000006D
->>8 lelong 0x1000007D Sketch image
-!:mime image/x-epoc-sketch
->>8 lelong 0x1000007E voice note
->>8 lelong 0x1000007F Word file
-!:mime application/x-epoc-word
->>8 lelong 0x10000085 OPL program (TextEd)
-!:mime application/x-epoc-opl
->>8 lelong 0x10000087 Comms settings
->>8 lelong 0x10000088 Sheet file
-!:mime application/x-epoc-sheet
->>8 lelong 0x100001C4 EasyFax initialisation file
->4 lelong 0x10000073 OPO module
-!:mime application/x-epoc-opo
->4 lelong 0x10000074 OPL application
-!:mime application/x-epoc-app
->4 lelong 0x1000008A exported multi-bitmap image
->4 lelong 0x1000016D
->>8 lelong 0x10000087 Comms names
-
-0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image
-
-0 lelong 0x10000050 Psion Series 5
->4 lelong 0x1000006D database
->>8 lelong 0x10000084 Agenda file
-!:mime application/x-epoc-agenda
->>8 lelong 0x10000086 Data file
-!:mime application/x-epoc-data
->>8 lelong 0x10000CEA Jotter file
-!:mime application/x-epoc-jotter
->4 lelong 0x100000E4 ini file
-
-0 lelong 0x10000079 Psion Series 5 binary:
->4 lelong 0x00000000 DLL
->4 lelong 0x10000049 comms hardware library
->4 lelong 0x1000004A comms protocol library
->4 lelong 0x1000005D OPX
->4 lelong 0x1000006C application
->4 lelong 0x1000008D DLL
->4 lelong 0x100000AC logical device driver
->4 lelong 0x100000AD physical device driver
->4 lelong 0x100000E5 file transfer protocol
->4 lelong 0x100000E5 file transfer protocol
->4 lelong 0x10000140 printer definition
->4 lelong 0x10000141 printer definition
-
-0 lelong 0x1000007A Psion Series 5 executable
-
-#------------------------------------------------------------------------------
-# $File: erlang,v 1.6 2010/09/20 19:19:17 rrt Exp $
-# erlang: file(1) magic for Erlang JAM and BEAM files
-# URL: http://www.erlang.org/faq/x779.html#AEN812
-
-# OTP R3-R4
-0 string \0177BEAM! Old Erlang BEAM file
->6 short >0 - version %d
-
-# OTP R5 and onwards
-0 string FOR1
->8 string BEAM Erlang BEAM file
-
-# 4.2 version may have a copyright notice!
-4 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2
-79 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2
-
-4 string 1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995 Erlang JAM file - version 4.3
-
-0 bequad 0x0000000000ABCDEF Erlang DETS file
-
-#------------------------------------------------------------------------------
-# $File: esri,v 1.4 2009/09/19 16:28:09 christos Exp $
-# 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
-
-#------------------------------------------------------------------------------
-# $File: fcs,v 1.4 2009/09/19 16:28:09 christos Exp $
-# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files
-# From Roger Leigh <roger at whinlatter.uklinux.net>
-0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0
-0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0
-0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0
-
-#------------------------------------------------------------------------------
-# $File: filesystems,v 1.95 2014/06/03 19:17:27 christos Exp $
-# filesystems: file(1) magic for different filesystems
-#
-0 name partid
->0 ubyte 0x00 Unused
->0 ubyte 0x01 12-bit FAT
->0 ubyte 0x02 XENIX /
->0 ubyte 0x03 XENIX /usr
->0 ubyte 0x04 16-bit FAT, less than 32M
->0 ubyte 0x05 extended partition
->0 ubyte 0x06 16-bit FAT, more than 32M
->0 ubyte 0x07 OS/2 HPFS, NTFS, QNX2, Adv. UNIX
->0 ubyte 0x08 AIX or os, or etc.
->0 ubyte 0x09 AIX boot partition or Coherent
->0 ubyte 0x0a O/2 boot manager or Coherent swap
->0 ubyte 0x0b 32-bit FAT
->0 ubyte 0x0c 32-bit FAT, LBA-mapped
->0 ubyte 0x0d 7XXX, LBA-mapped
->0 ubyte 0x0e 16-bit FAT, LBA-mapped
->0 ubyte 0x0f extended partition, LBA-mapped
->0 ubyte 0x10 OPUS
->0 ubyte 0x11 OS/2 DOS 12-bit FAT
->0 ubyte 0x12 Compaq diagnostics
->0 ubyte 0x14 OS/2 DOS 16-bit FAT <32M
->0 ubyte 0x16 OS/2 DOS 16-bit FAT >=32M
->0 ubyte 0x17 OS/2 hidden IFS
->0 ubyte 0x18 AST Windows swapfile
->0 ubyte 0x19 Willowtech Photon coS
->0 ubyte 0x1b hidden win95 fat 32
->0 ubyte 0x1c hidden win95 fat 32 lba
->0 ubyte 0x1d hidden win95 fat 16 lba
->0 ubyte 0x20 Willowsoft OFS1
->0 ubyte 0x21 reserved
->0 ubyte 0x23 reserved
->0 ubyte 0x24 NEC DOS
->0 ubyte 0x26 reserved
->0 ubyte 0x31 reserved
->0 ubyte 0x32 Alien Internet Services NOS
->0 ubyte 0x33 reserved
->0 ubyte 0x34 reserved
->0 ubyte 0x35 JFS on OS2
->0 ubyte 0x36 reserved
->0 ubyte 0x38 Theos
->0 ubyte 0x39 Plan 9, or Theos spanned
->0 ubyte 0x3a Theos ver 4 4gb partition
->0 ubyte 0x3b Theos ve 4 extended partition
->0 ubyte 0x3c PartitionMagic recovery
->0 ubyte 0x3d Hidden Netware
->0 ubyte 0x40 VENIX 286 or LynxOS
->0 ubyte 0x41 PReP
->0 ubyte 0x42 linux swap sharing DRDOS disk
->0 ubyte 0x43 linux sharing DRDOS disk
->0 ubyte 0x44 GoBack change utility
->0 ubyte 0x45 Boot US Boot manager
->0 ubyte 0x46 EUMEL/Elan or Ergos 3
->0 ubyte 0x47 EUMEL/Elan or Ergos 3
->0 ubyte 0x48 EUMEL/Elan or Ergos 3
->0 ubyte 0x4a ALFX/THIN filesystem for DOS
->0 ubyte 0x4c Oberon partition
->0 ubyte 0x4d QNX4.x
->0 ubyte 0x4e QNX4.x 2nd part
->0 ubyte 0x4f QNX4.x 3rd part
->0 ubyte 0x50 DM (disk manager)
->0 ubyte 0x51 DM6 Aux1 (or Novell)
->0 ubyte 0x52 CP/M or Microport SysV/AT
->0 ubyte 0x53 DM6 Aux3
->0 ubyte 0x54 DM6 DDO
->0 ubyte 0x55 EZ-Drive (disk manager)
->0 ubyte 0x56 Golden Bow (disk manager)
->0 ubyte 0x57 Drive PRO
->0 ubyte 0x5c Priam Edisk (disk manager)
->0 ubyte 0x61 SpeedStor
->0 ubyte 0x63 GNU HURD or Mach or Sys V/386
->0 ubyte 0x64 Novell Netware 2.xx or Speedstore
->0 ubyte 0x65 Novell Netware 3.xx
->0 ubyte 0x66 Novell 386 Netware
->0 ubyte 0x67 Novell
->0 ubyte 0x68 Novell
->0 ubyte 0x69 Novell
->0 ubyte 0x70 DiskSecure Multi-Boot
->0 ubyte 0x71 reserved
->0 ubyte 0x73 reserved
->0 ubyte 0x74 reserved
->0 ubyte 0x75 PC/IX
->0 ubyte 0x76 reserved
->0 ubyte 0x77 M2FS/M2CS partition
->0 ubyte 0x78 XOSL boot loader filesystem
->0 ubyte 0x80 MINIX until 1.4a
->0 ubyte 0x81 MINIX since 1.4b
->0 ubyte 0x82 Linux swap or Solaris
->0 ubyte 0x83 Linux native
->0 ubyte 0x84 OS/2 hidden C: drive
->0 ubyte 0x85 Linux extended partition
->0 ubyte 0x86 NT FAT volume set
->0 ubyte 0x87 NTFS volume set or HPFS mirrored
->0 ubyte 0x8a Linux Kernel AiR-BOOT partition
->0 ubyte 0x8b Legacy Fault tolerant FAT32
->0 ubyte 0x8c Legacy Fault tolerant FAT32 ext
->0 ubyte 0x8d Hidden free FDISK FAT12
->0 ubyte 0x8e Linux Logical Volume Manager
->0 ubyte 0x90 Hidden free FDISK FAT16
->0 ubyte 0x91 Hidden free FDISK DOS EXT
->0 ubyte 0x92 Hidden free FDISK FAT16 Big
->0 ubyte 0x93 Amoeba filesystem
->0 ubyte 0x94 Amoeba bad block table
->0 ubyte 0x95 MIT EXOPC native partitions
->0 ubyte 0x97 Hidden free FDISK FAT32
->0 ubyte 0x98 Datalight ROM-DOS Super-Boot
->0 ubyte 0x99 Mylex EISA SCSI
->0 ubyte 0x9a Hidden free FDISK FAT16 LBA
->0 ubyte 0x9b Hidden free FDISK EXT LBA
->0 ubyte 0x9f BSDI?
->0 ubyte 0xa0 IBM Thinkpad hibernation
->0 ubyte 0xa1 HP Volume expansion (SpeedStor)
->0 ubyte 0xa3 HP Volume expansion (SpeedStor)
->0 ubyte 0xa4 HP Volume expansion (SpeedStor)
->0 ubyte 0xa5 386BSD partition type
->0 ubyte 0xa6 OpenBSD partition type
->0 ubyte 0xa7 NeXTSTEP 486
->0 ubyte 0xa8 Apple UFS
->0 ubyte 0xa9 NetBSD partition type
->0 ubyte 0xaa Olivetty Fat12 1.44MB Service part
->0 ubyte 0xab Apple Boot
->0 ubyte 0xae SHAG OS filesystem
->0 ubyte 0xaf Apple HFS
->0 ubyte 0xb0 BootStar Dummy
->0 ubyte 0xb1 reserved
->0 ubyte 0xb3 reserved
->0 ubyte 0xb4 reserved
->0 ubyte 0xb6 reserved
->0 ubyte 0xb7 BSDI BSD/386 filesystem
->0 ubyte 0xb8 BSDI BSD/386 swap
->0 ubyte 0xbb Boot Wizard Hidden
->0 ubyte 0xbe Solaris 8 partition type
->0 ubyte 0xbf Solaris partition type
->0 ubyte 0xc0 CTOS
->0 ubyte 0xc1 DRDOS/sec (FAT-12)
->0 ubyte 0xc2 Hidden Linux
->0 ubyte 0xc3 Hidden Linux swap
->0 ubyte 0xc4 DRDOS/sec (FAT-16, < 32M)
->0 ubyte 0xc5 DRDOS/sec (EXT)
->0 ubyte 0xc6 DRDOS/sec (FAT-16, >= 32M)
->0 ubyte 0xc7 Syrinx (Cyrnix?) or HPFS disabled
->0 ubyte 0xc8 Reserved for DR-DOS 8.0+
->0 ubyte 0xc9 Reserved for DR-DOS 8.0+
->0 ubyte 0xca Reserved for DR-DOS 8.0+
->0 ubyte 0xcb DR-DOS 7.04+ Secured FAT32 CHS
->0 ubyte 0xcc DR-DOS 7.04+ Secured FAT32 LBA
->0 ubyte 0xcd CTOS Memdump
->0 ubyte 0xce DR-DOS 7.04+ FAT16X LBA
->0 ubyte 0xcf DR-DOS 7.04+ EXT LBA
->0 ubyte 0xd0 REAL/32 secure big partition
->0 ubyte 0xd1 Old Multiuser DOS FAT12
->0 ubyte 0xd4 Old Multiuser DOS FAT16 Small
->0 ubyte 0xd5 Old Multiuser DOS Extended
->0 ubyte 0xd6 Old Multiuser DOS FAT16 Big
->0 ubyte 0xd8 CP/M 86
->0 ubyte 0xdb CP/M or Concurrent CP/M
->0 ubyte 0xdd Hidden CTOS Memdump
->0 ubyte 0xde Dell PowerEdge Server utilities
->0 ubyte 0xdf DG/UX virtual disk manager
->0 ubyte 0xe0 STMicroelectronics ST AVFS
->0 ubyte 0xe1 DOS access or SpeedStor 12-bit
->0 ubyte 0xe3 DOS R/O or Storage Dimensions
->0 ubyte 0xe4 SpeedStor 16-bit FAT < 1024 cyl.
->0 ubyte 0xe5 reserved
->0 ubyte 0xe6 reserved
->0 ubyte 0xeb BeOS
->0 ubyte 0xee GPT Protective MBR
->0 ubyte 0xef EFI system partition
->0 ubyte 0xf0 Linux PA-RISC boot loader
->0 ubyte 0xf1 SpeedStor or Storage Dimensions
->0 ubyte 0xf2 DOS 3.3+ Secondary
->0 ubyte 0xf3 reserved
->0 ubyte 0xf4 SpeedStor large partition
->0 ubyte 0xf5 Prologue multi-volumen partition
->0 ubyte 0xf6 reserved
->0 ubyte 0xf9 pCache: ext2/ext3 persistent cache
->0 ubyte 0xfa Bochs x86 emulator
->0 ubyte 0xfb VMware File System
->0 ubyte 0xfc VMware Swap
->0 ubyte 0xfd Linux RAID partition persistent sb
->0 ubyte 0xfe LANstep or IBM PS/2 IML
->0 ubyte 0xff Xenix Bad Block Table
-
-0 string \366\366\366\366 PC formatted floppy with no filesystem
-# Sun disk labels
-# From /usr/include/sun/dklabel.h:
-0774 beshort 0xdabe
-# modified by Joerg Jenderek, because original test
-# succeeds for Cabinet archive dao360.dl_ with negative blocks
->0770 long >0 Sun disk label
->>0 string x '%s
->>>31 string >\0 \b%s
->>>>63 string >\0 \b%s
->>>>>95 string >\0 \b%s
->>0 string x \b'
->>0734 short >0 %d rpm,
->>0736 short >0 %d phys cys,
->>0740 short >0 %d alts/cyl,
->>0746 short >0 %d interleave,
->>0750 short >0 %d data cyls,
->>0752 short >0 %d alt cyls,
->>0754 short >0 %d heads/partition,
->>0756 short >0 %d sectors/track,
->>0764 long >0 start cyl %d,
->>0770 long x %d blocks
-# Is there a boot block written 1 sector in?
->512 belong&077777777 0600407 \b, boot block present
-
-# Joerg Jenderek: Smart Boot Manager backup file is 25 (MSDOS) or 41 (LINUX) byte header + first sectors of disk
-# (http://btmgr.sourceforge.net/docs/user-guide-3.html)
-0 string SBMBAKUP_ Smart Boot Manager backup file
->9 string x \b, version %-5.5s
->>14 string =_
->>>15 string x %-.1s
->>>>16 string =_ \b.
->>>>>17 string x \b%-.1s
->>>>>>18 string =_ \b.
->>>>>>>19 string x \b%-.1s
->>>22 ubyte 0
->>>>21 ubyte x \b, from drive 0x%x
->>>22 ubyte >0
->>>>21 string x \b, from drive %s
->>>535 search/17 \x55\xAA
->>>>&-512 indirect x \b; contains
-
-# updated by Joerg Jenderek at Nov 2012
-# DOS Emulator image is 128 byte, null right padded header + harddisc image
-0 string DOSEMU\0
->0x27E leshort 0xAA55
-#offset is 128
->>19 ubyte 128
->>>(19.b-1) ubyte 0x0 DOS Emulator image
->>>>7 ulelong >0 \b, %u heads
->>>>11 ulelong >0 \b, %d sectors/track
->>>>15 ulelong >0 \b, %d cylinders
->>>>128 indirect x \b; contains
-
-# added by Joerg Jenderek at Nov 2012
-# http://www.thenakedpc.com/articles/v04/08/0408-05.html
-# Symantec (Peter Norton) Image.dat file consists of variable header, bootrecord, part of FAT and root directory data
-0 string PNCIHISK\0 Norton Utilities disc image data
-# real x86 boot sector with jump instruction
->509 search/1026 \x55\xAA\xeb
->>&-1 indirect x \b; contains
-# http://file-extension.net/seeker/file_extension_dat
-0 string PNCIUNDO Norton Disk Doctor UnDo file
-#
-
-# DOS/MBR boot sector updated by Joerg Jenderek at Sep 2007,May 2011,2013
-# for any allowed sector sizes
-30 search/481 \x55\xAA
-# to display DOS/MBR boot sector (40) before old one (strength=50+21),Syslinux bootloader (71),SYSLINUX MBR (37+36),NetBSD mbr (110),AdvanceMAME mbr (111)
-# DOS BPB information (70) and after DOS floppy (120) like in previous file version
-!:strength +72
-# for sector sizes < 512 Bytes
->11 uleshort <512
->>(11.s-2) uleshort 0xAA55 DOS/MBR boot sector
-# for sector sizes with 512 or more Bytes
->0x1FE leshort 0xAA55 DOS/MBR boot sector
-# keep old DOS/MBR boot sector as dummy for mbr and bootloader displaying
-# only for sector sizes with 512 or more Bytes
-0x1FE leshort 0xAA55
-#
-# to display information (50) before DOS BPB (strength=70) and after DOS floppy (120) like in old file version
-!:strength +21
->2 string OSBS \b, OS/BS MBR
-# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/
-# and http://en.wikipedia.org/wiki/Master_Boot_Record
-# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by
-# characteristic assembler instructions: xor ax,ax;mov ss,ax;mov sp,7c00
->0 search/2 \x33\xc0\x8e\xd0\xbc\x00\x7c MS-MBR
-# Microsoft Windows 95A and early ( http://thestarman.pcministry.com/asm/mbr/STDMBR.htm )
-# assembler instructions: mov si,sp;push ax;pop es;push ax;pop ds;sti;cld
->>8 ubequad 0x8bf45007501ffbfc
-# http://thestarman.pcministry.com/asm/mbr/200MBR.htm
->>>0x16 ubyte 0xF3 \b,DOS 2
->>>>219 regex Author\ -\ Author:
-# found "David Litton" , "A Pehrsson "
->>>>>&0 string x "%s"
->>>0x16 ubyte 0xF2
-# NEC MS-DOS 3.30 Rev. 3 . See http://thestarman.pcministry.com/asm/mbr/DOS33MBR.htm
-# assembler instructions: mov di,077c;cmp word ptrl[di],a55a;jnz
->>>>0x22 ubequad 0xbf7c07813d5aa575 \b,NEC 3.3
-# version MS-DOS 3.30 til MS-Windows 95A (WinVer=4.00.1111)
->>>>0x22 default x \b,D0S version 3.3-7.0
-# error messages are printed by assembler instructions: mov si,06nn;...;int 10 (0xBEnn06;...)
-# where nn is string offset varying for different languages
-# "Invalid partition table" nn=0x8b for english version
->>>>>(0x49.b) string Invalid\ partition\ table english
->>>>>(0x49.b) string Ung\201ltige\ Partitionstabelle german
->>>>>(0x49.b) string Table\ de\ partition\ invalide french
->>>>>(0x49.b) string Tabela\ de\ parti\207ao\ inv\240lida portuguese
->>>>>(0x49.b) string Tabla\ de\ partici\242n\ no\ v\240lida spanish
->>>>>(0x49.b) string Tavola\ delle\ partizioni\ non\ valida italian
->>>>>0x49 ubyte >0 at offset 0x%x
->>>>>>(0x49.b) string >\0 "%s"
-# "Error loading operating system" nn=0xa3 for english version
-# "Fehler beim Laden des Betriebssystems" nn=0xa7 for german version
-# "Erreur en chargeant syst\212me d'exploitation" nn=0xa7 for french version
-# "Erro na inicializa\207ao do sistema operacional" nn=0xa7 for portuguese Brazilian version
-# "Error al cargar sistema operativo" nn=0xa8 for spanish version
-# "Errore durante il caricamento del sistema operativo" nn=0xae for italian version
->>>>>0x74 ubyte >0 at offset 0x%x
->>>>>>(0x74.b) string >\0 "%s"
-# "Missing operating system" nn=0xc2 for english version
-# "Betriebssystem fehlt" nn=0xcd for german version
-# "Syst\212me d'exploitation absent" nn=0xd2 for french version
-# "Sistema operacional nao encontrado" nn=0xd4 for portuguese Brazilian version
-# "Falta sistema operativo" nn=0xca for spanish version
-# "Sistema operativo mancante" nn=0xe2 for italian version
->>>>>0x79 ubyte >0 at offset 0x%x
->>>>>>(0x79.b) string >\0 "%s"
-# Microsoft Windows 95B to XP (http://thestarman.pcministry.com/asm/mbr/95BMEMBR.htm)
-# assembler instructions: push ax;pop es;push ax;pop ds;cld;mov si,7c1b
->>8 ubequad 0x5007501ffcbe1b7c
-# assembler instructions: rep;movsb;retf;mov si,07be;mov cl,04
->>>24 ubequad 0xf3a4cbbebe07b104 9M
-# "Invalid partition table" nn=0x10F for english version
-# "Ung\201ltige Partitionstabelle" nn=0x10F for german version
-# "Table de partition erron\202e" nn=0x10F for french version
-# "\216\257\245\340\240\346\250\256\255\255\240\357 \341\250\341\342\245\254\240 \255\245 \255\240\251\244\245\255\240" nn=0x10F for russian version
->>>>(0x3C.b+0x0FF) string Invalid\ partition\ table english
->>>>(0x3C.b+0x0FF) string Ung\201ltige\ Partitionstabelle german
->>>>(0x3C.b+0x0FF) string Table\ de\ partition\ erron\202e french
->>>>(0x3C.b+0x0FF) string \215\245\257\340\240\242\250\253\354\255\240\357\ \342\240\241\253\250\346\240 russian
->>>>0x3C ubyte x at offset 0x%x+0xFF
->>>>(0x3C.b+0x0FF) string >\0 "%s"
-# "Error loading operating system" nn=0x127 for english version
-# "Fehler beim Laden des Betriebssystems" nn=0x12b for german version
-# "Erreur lors du chargement du syst\212me d'exploitation" nn=0x12a for french version
-# "\216\350\250\241\252\240 \257\340\250 \247\240\243\340\343\247\252\245 \256\257\245\340\240\346\250\256\255\255\256\251 \341\250\341\342\245\254\353" nn=0x12d for russian version
->>>>0xBD ubyte x at offset 0x1%x
->>>>(0xBD.b+0x100) string >\0 "%s"
-# "Missing operating system" nn=0x146 for english version
-# "Betriebssystem fehlt" nn=0x151 for german version
-# "Syst\212me d'exploitation manquant" nn=0x15e for french version
-# "\216\257\245\340\240\346\250\256\255\255\240\357 \341\250\341\342\245\254\240 \255\245 \255\240\251\244\245\255\240" nn=0x156 for russian version
->>>>0xA9 ubyte x at offset 0x1%x
->>>>(0xA9.b+0x100) string >\0 "%s"
-# http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm
-# assembler instructions: rep;movsb;retf;mov BP,07be;mov cl,04
->>>24 ubequad 0xf3a4cbbdbe07b104 XP
-# where xxyyzz are lower bits from offsets of error messages varying for different languages
->>>>0x1B4 ubelong&0x00FFFFFF 0x002c4463 english
->>>>0x1B4 ubelong&0x00FFFFFF 0x002c486e german
-# "Invalid partition table" xx=0x12C for english version
-# "Ung\201ltige Partitionstabelle" xx=0x12C for german version
->>>>0x1b5 ubyte >0 at offset 0x1%x
->>>>(0x1b5.b+0x100) string >\0 "%s"
-# "Error loading operating system" yy=0x144 for english version
-# "Fehler beim Laden des Betriebssystems" yy=0x148 for german version
->>>>0x1b6 ubyte >0 at offset 0x1%x
->>>>(0x1b6.b+0x100) string >\0 "%s"
-# "Missing operating system" zz=0x163 for english version
-# "Betriebssystem nicht vorhanden" zz=0x16e for german version
->>>>0x1b7 ubyte >0 at offset 0x1%x
->>>>(0x1b7.b+0x100) string >\0 "%s"
-# Microsoft Windows Vista or 7
-# assembler instructions: ..;mov ds,ax;mov si,7c00;mov di,..00
->>8 ubequad 0xc08ed8be007cbf00
-# Microsoft Windows Vista (http://thestarman.pcministry.com/asm/mbr/VistaMBR.htm)
-# assembler instructions: jnz 0729;cmp ebx,"TCPA"
->>>0xEC ubequad 0x753b6681fb544350 Vista
-# where xxyyzz are lower bits from offsets of error messages varying for different languages
->>>>0x1B4 ubelong&0x00FFFFFF 0x00627a99 english
-#>>>>0x1B4 ubelong&0x00FFFFFF ? german
-# "Invalid partition table" xx=0x162 for english version
-# "Ung\201ltige Partitionstabelle" xx=0x1?? for german version
->>>>0x1b5 ubyte >0 at offset 0x1%x
->>>>(0x1b5.b+0x100) string >\0 "%s"
-# "Error loading operating system" yy=0x17a for english version
-# "Fehler beim Laden des Betriebssystems" yy= 0x1?? for german version
->>>>0x1b6 ubyte >0 at offset 0x1%x
->>>>(0x1b6.b+0x100) string >\0 "%s"
-# "Missing operating system" zz=0x199 for english version
-# "Betriebssystem nicht vorhanden" zz=0x1?? for german version
->>>>0x1b7 ubyte >0 at offset 0x1%x
->>>>(0x1b7.b+0x100) string >\0 "%s"
-# Microsoft Windows 7 (http://thestarman.pcministry.com/asm/mbr/W7MBR.htm)
-# assembler instructions: cmp ebx,"TCPA";cmp
->>>0xEC ubequad 0x6681fb5443504175 Windows 7
-# where xxyyzz are lower bits from offsets of error messages varying for different languages
->>>>0x1B4 ubelong&0x00FFFFFF 0x00637b9a english
-#>>>>0x1B4 ubelong&0x00FFFFFF ? german
-# "Invalid partition table" xx=0x163 for english version
-# "Ung\201ltige Partitionstabelle" xx=0x1?? for german version
->>>>0x1b5 ubyte >0 at offset 0x1%x
->>>>(0x1b5.b+0x100) string >\0 "%s"
-# "Error loading operating system" yy=0x17b for english version
-# "Fehler beim Laden des Betriebssystems" yy=0x1?? for german version
->>>>0x1b6 ubyte >0 at offset 0x1%x
->>>>(0x1b6.b+0x100) string >\0 "%s"
-# "Missing operating system" zz=0x19a for english version
-# "Betriebssystem nicht vorhanden" zz=0x1?? for german version
->>>>0x1b7 ubyte >0 at offset 0x1%x
->>>>(0x1b7.b+0x100) string >\0 "%s"
-# http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DiskSigs
-# http://en.wikipedia.org/wiki/MBR_disk_signature#ID
->>0x1b8 ulelong >0 \b, disk signature 0x%-.4x
-# driveID/timestamp for Win 95B,98,98SE and ME. See http://thestarman.pcministry.com/asm/mbr/mystery.htm
->>0xDA uleshort 0
->>>0xDC ulelong >0 \b, created
-# physical drive number (0x80-0xFF) when the Windows wrote that byte to the drive
->>>>0xDC ubyte x with driveID 0x%x
-# hours, minutes and seconds
->>>>0xDf ubyte x at %x
->>>>0xDe ubyte x \b:%x
->>>>0xDd ubyte x \b:%x
-# special case for Microsoft MS-DOS 3.21 spanish
-# assembler instructions: cli;mov $0x30,%ax;mov %ax,%ss;mov
->0 ubequad 0xfab830008ed0bc00
-# assembler instructions: $0x1f00,%sp;mov $0x80cb,%di;add %cl,(%bx,%si);in (%dx),%ax;mov
->>8 ubequad 0x1fbfcb800008ed8 MS-MBR,D0S version 3.21 spanish
-# Microsoft MBR IPL end
-
-# dr-dos with some upper-, lowercase variants
->0x9D string Invalid\ partition\ table$
->>181 string No\ Operating\ System$
->>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03
->0x9D string Invalid\ partition\ table$
->>181 string No\ operating\ system$
->>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03
->342 string Invalid\ partition\ table$
->>366 string No\ operating\ system$
->>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03
->295 string NEWLDR\0
->>302 string Bad\ PT\ $
->>>310 string No\ OS\ $
->>>>317 string OS\ load\ err$
->>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r
->>>>>>358 string Press\ any\ key\ to\ continue.\n\r$
->>>>>>>387 string Copyright\ (c)\ 1984,1998
->>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR)
-#
-# tests for different MS-DOS Master Boot Records (MBR) moved and merged
-#
-#>0x145 string Default:\ F \b, FREE-DOS MBR
-#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR
->0x145 search/7 Default:\ F \b, FREE-DOS MBR
-#>>313 string F0\ .\ .\ .
-#>>>322 string disk\ 1
-#>>>>382 string FAT3
->64 string no\ active\ partition\ found
->>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR
-# Ranish Partition Manager http://www.ranish.com/part/
->387 search/4 \0\ Error!\r
->>378 search/7 Virus!
->>>397 search/4 Booting\
->>>>408 search/4 HD1/\0 \b, Ranish MBR (
->>>>>416 string Writing\ changes... \b2.37
->>>>>>438 ubyte x \b,0x%x dots
->>>>>>440 ubyte >0 \b,virus check
->>>>>>441 ubyte >0 \b,partition %c
-#2.38,2.42,2.44
->>>>>416 string !Writing\ changes... \b
->>>>>>418 ubyte 1 \bvirus check,
->>>>>>419 ubyte x \b0x%x seconds
->>>>>>420 ubyte&0x0F >0 \b,partition
->>>>>>>420 ubyte&0x0F <5 \b %x
->>>>>>>420 ubyte&0x0F 0Xf \b ask
->>>>>420 ubyte x \b)
-#
-# SYSLINUX MBR moved
-# http://www.acronis.de/
->362 string MBR\ Error\ \0\r
->>376 string ress\ any\ key\ to\
->>>392 string boot\ from\ floppy...\0 \b, Acronis MBR
-# added by Joerg Jenderek
-# http://www.visopsys.org/
-# http://partitionlogic.org.uk/
->309 string No\ bootable\ partition\ found\r
->>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR
->349 string No\ bootable\ partition\ found\r
->>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR
-# bootloader, bootmanager
->0x40 string SBML
-# label with 11 characters of FAT 12 bit filesystem
->>43 string SMART\ BTMGR
->>>430 string SBMK\ Bad!\r \b, Smart Boot Manager
-# OEM-ID not always "SBM"
-#>>>>3 strings SBM
->>>>6 string >\0 \b, version %s
->382 string XOSLLOADXCF \b, eXtended Operating System Loader
->6 string LILO \b, LInux i386 boot LOader
->>120 string LILO \b, version 22.3.4 SuSe
->>172 string LILO \b, version 22.5.8 Debian
-# updated by Joerg Jenderek at Oct 2008
-# variables according to grub-0.97/stage1/stage1.S or
-# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
-# usual values are marked with comments to get only informations of strange GRUB loaders
->342 search/60 \0Geom\0
-#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0
->>0x41 ubyte <2
->>>0x3E ubyte >2 \b; GRand Unified Bootloader
-# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
->>>>0x3E ubyte x \b, stage1 version 0x%x
-#If it is 0xFF, use a drive passed by BIOS
->>>>0x40 ubyte <0xFF \b, boot drive 0x%x
-# in most case 0,1,0x2e for GRUB 0.5.95
->>>>0x41 ubyte >0 \b, LBA flag 0x%x
->>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x
-#>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual)
->>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x
-#>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default)
->>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x
->>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x
-#>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual)
->>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x
->>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0
->>>>>394 string stage1 \b, GRUB version 0.5.95
->>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0
->>>>>376 string GRUB\ \0 \b, GRUB version 0.93 or 1.94
->>>>383 string Geom\0Hard\ Disk\0Read\0\ Error\0
->>>>>377 string GRUB\ \0 \b, GRUB version 0.94
->>>>385 string Geom\0Hard\ Disk\0Read\0\ Error\0
->>>>>379 string GRUB\ \0 \b, GRUB version 0.95 or 0.96
->>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0
->>>>>385 string GRUB\ \0 \b, GRUB version 0.97
-# unknown version
->>>343 string Geom\0Read\0\ Error\0
->>>>321 string Loading\ stage1.5 \b, GRUB version x.y
->>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0
->>>>374 string GRUB\ \0 \b, GRUB version n.m
-# SYSLINUX bootloader moved
->395 string chksum\0\ ERROR!\0 \b, Gujin bootloader
-# http://www.bcdwb.de/bcdw/index_e.htm
->3 string BCDL
->>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z)
-# mbr partition table entries updated by Joerg Jenderek at Sep 2013
-# skip Norton Utilities disc image data
->3 string !IHISK
-# skip Linux style boot sector starting with assember instructions mov 0x7c0,ax;
->>0 belong !0xb8c0078e
-# not Linux kernel
->>>514 string !HdrS
-# not BeOS
->>>>422 string !Be\ Boot\ Loader
-# jump over BPB instruction implies DOS bootsector or AdvanceMAME mbr
->>>>>0 ubelong&0xFD000000 =0xE9000000
-# AdvanceMAME mbr
->>>>>>(1.b+2) ubequad 0xfa31c08ed88ec08e
->>>>>>>446 use partition-table
-# mbr, Norton Utilities disc image data, or 2nd,etc. sector of x86 bootloader
->>>>>0 ubelong&0xFD000000 !0xE9000000
-# skip FSInfosector
->>>>>>0 string !RRaA
-# skip 3rd sector of MS x86 bootloader with assember instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,
-# http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm
->>>>>>>0 ubequad !0xfa660fb64610668b
-# skip 13rd sector of MS x86 bootloader
->>>>>>>>0 ubequad !0x660fb64610668b4e
-# skip sector starting with DOS new line
->>>>>>>>>0 string !\r\n
-# allowed active flag 0,80h-FFh
->>>>>>>>>>446 ubyte 0
->>>>>>>>>>>446 use partition-table
->>>>>>>>>>446 ubyte >0x7F
->>>>>>>>>>>446 use partition-table
-# TODO: test for extended bootrecord (ebr) moved and merged with mbr partition table entries
-# mbr partition table entries end
-# http://www.acronis.de/
-#FAT label=ACRONIS\ SZ
-#OEM-ID=BOOTWIZ0
->442 string Non-system\ disk,\
->>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader
-# updated by Joerg Jenderek at Nov 2012, Sep 2013
-# DOS names like F11.SYS or BOOTWIZ.SYS are 8 right space padded bytes+3 bytes
-# display 1 space
->>>447 ubyte x \b
->>>477 use DOS-filename
-#
->185 string FDBOOT\ Version\
->>204 string \rNo\ Systemdisk.\
->>>220 string Booting\ from\ harddisk.\n\r
->>>245 string Cannot\ load\ from\ harddisk.\n\r
->>>>273 string Insert\ Systemdisk\
->>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader
->>>>>>200 string >\0 \b, version %-3s
->242 string Bootsector\ from\ C.H.\ Hochst\204
-# http://freecode.com/projects/dosfstools dosfstools-n.m/src/mkdosfs.c
-# updated by Joerg Jenderek at Nov 2012. Use search directive with offset instead of string
-# skip name "C.H. Hochstaetter" partly because it is sometimes written without umlaut
->242 search/127 Bootsector\ from\ C.H.\ Hochst
->>278 search/127 No\ Systemdisk.\ Booting\ from\ harddisk
-# followed by variants with point,CR-NL or NL-CR
->>>208 search/261 Cannot\ load\ from\ harddisk.
-# followed by variants CR-NL or NL-CR
->>>>236 search/235 Insert\ Systemdisk\ and\ press\ any\ key.
-# followed by variants with point,CR-NL or NL-CR
->>>>>180 search/96 Disk\ formatted\ with\ WinImage\ \b, WinImage harddisk Bootloader
-# followed by string like "6.50 (c) 1993-2004 Gilles Vollant"
->>>>>>&0 string x \b, version %-4.4s
->(1.b+2) ubyte 0xe
->>(1.b+3) ubyte 0x1f
->>>(1.b+4) ubyte 0xbe
-# message offset found at (1.b+5) is 0x77 for FAT32 or 0x5b for others
->>>>(1.b+5) ubyte&0xd3 0x53
->>>>>(1.b+6) ubyte 0x7c
-# assembler instructions: lodsb;and al,al;jz 0xb;push si;mov ah,
->>>>>>(1.b+7) ubyte 0xac
->>>>>>>(1.b+8) ubyte 0x22
->>>>>>>>(1.b+9) ubyte 0xc0
->>>>>>>>>(1.b+10) ubyte 0x74
->>>>>>>>>>(1.b+11) ubyte 0x0b
->>>>>>>>>>>(1.b+12) ubyte 0x56
->>>>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display
-# FAT1X version
->>>>>>>>>>>>>(1.b+5) ubyte 0x5b
->>>>>>>>>>>>>>0x5b string >\0 "%-s"
-# FAT32 version
->>>>>>>>>>>>>(1.b+5) ubyte 0x77
->>>>>>>>>>>>>>0x77 string >\0 "%-s"
->214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display
-#>>244 string from\ dosemu-freedos-*-bin.tgz\r
-#>>>170 string Sorry,\ could\ not\ load\ an\
-#>>>>195 string operating\ system.\r\n
-#
->103 string This\ is\ not\ a\ bootable\ disk.\
->>132 string Please\ insert\ a\ bootable\
->>>157 string floppy\ and\r\n
->>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display
-#
->66 string Solaris\ Boot\ Sector
->>99 string Incomplete\ MDBoot\ load.
->>>89 string Version \b, Sun Solaris Bootloader
->>>>97 byte x version %c
-#
->408 string OS/2\ !!\ SYS01475\r\0
->>429 string OS/2\ !!\ SYS02025\r\0
->>>450 string OS/2\ !!\ SYS02027\r\0
->>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader
-#
->409 string OS/2\ !!\ SYS01475\r\0
->>430 string OS/2\ !!\ SYS02025\r\0
->>>451 string OS/2\ !!\ SYS02027\r\0
->>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader
->112 string This\ disk\ is\ not\ bootable\r
->>142 string If\ you\ wish\ to\ make\ it\ bootable
->>>176 string run\ the\ DOS\ program\ SYS\
->>>200 string after\ the\r
->>>>216 string system\ has\ been\ loaded\r\n
->>>>>242 string Please\ insert\ a\ DOS\ diskette\
->>>>>271 string into\r\n\ the\ drive\ and\
->>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display
-# XP
->430 string NTLDR\ is\ missing\xFF\r\n
->>449 string Disk\ error\xFF\r\n
->>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader
-# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
->>>>417 ubyte&0xDF >0
->>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
->>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
->>>>>>425 string >\ \b.%-.3s
-#
->>>>371 ubyte >0x20
->>>>>368 ubyte&0xDF >0
->>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
->>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
->>>>>>>376 string x \b.%-.3s
-#
->430 string NTLDR\ nicht\ gefunden\xFF\r\n
->>453 string Datentr\204gerfehler\xFF\r\n
->>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german)
->>>>417 ubyte&0xDF >0
->>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
->>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
->>>>>>425 string >\ \b.%-.3s
-# offset variant
->>>>379 string \0
->>>>>368 ubyte&0xDF >0
->>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
->>>>>>>>373 string x \b%-.3s
-#
->430 string NTLDR\ fehlt\xFF\r\n
->>444 string Datentr\204gerfehler\xFF\r\n
->>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german)
->>>>417 ubyte&0xDF >0
->>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
->>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
->>>>>>425 string >\ \b.%-.3s
-# variant
->>>>371 ubyte >0x20
->>>>>368 ubyte&0xDF >0
->>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
->>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
->>>>>>>376 string x \b.%-.3s
-#
->430 string NTLDR\ fehlt\xFF\r\n
->>444 string Medienfehler\xFF\r\n
->>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german)
->>>>371 ubyte >0x20
->>>>>368 ubyte&0xDF >0
->>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
->>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
->>>>>>>376 string x \b.%-.3s
-# variant
->>>>417 ubyte&0xDF >0
->>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
->>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
->>>>>>425 string >\ \b.%-.3s
-#
->430 string Datentr\204ger\ entfernen\xFF\r\n
->>454 string Medienfehler\xFF\r\n
->>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german)
->>>>379 string \0
->>>>>368 ubyte&0xDF >0
->>>>>>368 string x %-.5s
->>>>>>>373 ubyte&0xDF >0
->>>>>>>>373 string x \b%-.3s
->>>>>>376 ubyte&0xDF >0
->>>>>>>376 string x \b.%-.3s
-# variant
->>>>417 ubyte&0xDF >0
->>>>>417 string x %-.5s
->>>>>>422 ubyte&0xDF >0
->>>>>>>422 string x \b%-.3s
->>>>>425 ubyte&0xDF >0
->>>>>>425 string >\ \b.%-.3s
-#
-
-#>3 string NTFS\ \ \ \
->389 string Fehler\ beim\ Lesen\
->>407 string des\ Datentr\204gers
->>>426 string NTLDR\ fehlt
->>>>440 string NTLDR\ ist\ komprimiert
->>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german)
-#>3 string NTFS\ \ \ \
->313 string A\ disk\ read\ error\ occurred.\r
->>345 string A\ kernel\ file\ is\ missing\
->>>370 string from\ the\ disk.\r
->>>>484 string NTLDR\ is\ compressed
->>>>>429 string Insert\ a\ system\ diskette\
->>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS
-# DOS loader variants different languages,offsets
->472 ubyte&0xDF >0
->>389 string Invalid\ system\ disk\xFF\r\n
->>>411 string Disk\ I/O\ error
->>>>428 string Replace\ the\ disk,\ and\
->>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader
-#IO.SYS
->>>>>>472 ubyte&0xDF >0
->>>>>>>472 string x \b %-.2s
->>>>>>>>474 ubyte&0xDF >0
->>>>>>>>>474 string x \b%-.5s
->>>>>>>>>>479 ubyte&0xDF >0
->>>>>>>>>>>479 string x \b%-.1s
->>>>>>>480 ubyte&0xDF >0
->>>>>>>>480 string x \b.%-.3s
-#MSDOS.SYS
->>>>>>>483 ubyte&0xDF >0 \b+
->>>>>>>>483 string x \b%-.5s
->>>>>>>>>488 ubyte&0xDF >0
->>>>>>>>>>488 string x \b%-.3s
->>>>>>>>491 ubyte&0xDF >0
->>>>>>>>>491 string x \b.%-.3s
-#
->>390 string Invalid\ system\ disk\xFF\r\n
->>>412 string Disk\ I/O\ error\xFF\r\n
->>>>429 string Replace\ the\ disk,\ and\
->>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader
->>388 string Ungueltiges\ System\ \xFF\r\n
->>>410 string E/A-Fehler\ \ \ \ \xFF\r\n
->>>>427 string Datentraeger\ wechseln\ und\
->>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german)
-#WINBOOT.SYS only not spaces (0xDF)
->>>>>>497 ubyte&0xDF >0
->>>>>>>497 string x %-.5s
->>>>>>>>502 ubyte&0xDF >0
->>>>>>>>>502 string x \b%-.1s
->>>>>>>>>>503 ubyte&0xDF >0
->>>>>>>>>>>503 string x \b%-.1s
->>>>>>>>>>>>504 ubyte&0xDF >0
->>>>>>>>>>>>>504 string x \b%-.1s
->>>>>>505 ubyte&0xDF >0
->>>>>>>505 string x \b.%-.3s
-#IO.SYS
->>>>>>472 ubyte&0xDF >0 or
->>>>>>>472 string x \b %-.2s
->>>>>>>>474 ubyte&0xDF >0
->>>>>>>>>474 string x \b%-.5s
->>>>>>>>>>479 ubyte&0xDF >0
->>>>>>>>>>>479 string x \b%-.1s
->>>>>>>480 ubyte&0xDF >0
->>>>>>>>480 string x \b.%-.3s
-#MSDOS.SYS
->>>>>>>483 ubyte&0xDF >0 \b+
->>>>>>>>483 string x \b%-.5s
->>>>>>>>>488 ubyte&0xDF >0
->>>>>>>>>>488 string x \b%-.3s
->>>>>>>>491 ubyte&0xDF >0
->>>>>>>>>491 string x \b.%-.3s
-#
->>390 string Ungueltiges\ System\ \xFF\r\n
->>>412 string E/A-Fehler\ \ \ \ \xFF\r\n
->>>>429 string Datentraeger\ wechseln\ und\
->>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German)
-#WINBOOT.SYS only not spaces (0xDF)
->>>>>>497 ubyte&0xDF >0
->>>>>>>497 string x %-.7s
->>>>>>>>504 ubyte&0xDF >0
->>>>>>>>>504 string x \b%-.1s
->>>>>>505 ubyte&0xDF >0
->>>>>>>505 string x \b.%-.3s
-#IO.SYS
->>>>>>472 ubyte&0xDF >0 or
->>>>>>>472 string x \b %-.2s
->>>>>>>>474 ubyte&0xDF >0
->>>>>>>>>474 string x \b%-.6s
->>>>>>>480 ubyte&0xDF >0
->>>>>>>>480 string x \b.%-.3s
-#MSDOS.SYS
->>>>>>>483 ubyte&0xDF >0 \b+
->>>>>>>>483 string x \b%-.5s
->>>>>>>>>488 ubyte&0xDF >0
->>>>>>>>>>488 string x \b%-.3s
->>>>>>>>491 ubyte&0xDF >0
->>>>>>>>>491 string x \b.%-.3s
-#
->>389 string Ungueltiges\ System\ \xFF\r\n
->>>411 string E/A-Fehler\ \ \ \ \xFF\r\n
->>>>428 string Datentraeger\ wechseln\ und\
->>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
-# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
->>>>>>472 string x %-.2s
->>>>>>>474 ubyte&0xDF >0
->>>>>>>>474 string x \b%-.5s
->>>>>>>>479 ubyte&0xDF >0
->>>>>>>>>479 string x \b%-.1s
->>>>>>480 ubyte&0xDF >0
->>>>>>>480 string x \b.%-.3s
->>>>>>483 ubyte&0xDF >0 \b+
->>>>>>>483 string x \b%-.5s
->>>>>>>488 ubyte&0xDF >0
->>>>>>>>488 string x \b%-.2s
->>>>>>>>490 ubyte&0xDF >0
->>>>>>>>>490 string x \b%-.1s
->>>>>>>491 ubyte&0xDF >0
->>>>>>>>491 string x \b.%-.3s
->479 ubyte&0xDF >0
->>416 string Kein\ System\ oder\
->>>433 string Laufwerksfehler
->>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german)
-#IO.SYS
->>>>>479 string x \b %-.2s
->>>>>>481 ubyte&0xDF >0
->>>>>>>481 string x \b%-.6s
->>>>>487 ubyte&0xDF >0
->>>>>>487 string x \b.%-.3s
-#MSDOS.SYS
->>>>>>490 ubyte&0xDF >0 \b+
->>>>>>>490 string x \b%-.5s
->>>>>>>>495 ubyte&0xDF >0
->>>>>>>>>495 string x \b%-.3s
->>>>>>>498 ubyte&0xDF >0
->>>>>>>>498 string x \b.%-.3s
-#
->376 search/41 Non-System\ disk\ or\
->>395 search/41 disk\ error\r
->>>407 search/41 Replace\ and\
->>>>419 search/41 press\ \b,
->>>>419 search/41 strike\ \b, old
->>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader
-#449 Disk\ Boot\ failure\r MS 3.21
-#466 Boot\ Failure\r MS 3.30
->>>>>468 search/18 \0
-#IO.SYS,IBMBIO.COM
->>>>>>&0 string x \b %-.2s
->>>>>>>&-20 ubyte&0xDF >0
->>>>>>>>&-1 string x \b%-.4s
->>>>>>>>>&-16 ubyte&0xDF >0
->>>>>>>>>>&-1 string x \b%-.2s
->>>>>>&8 ubyte&0xDF >0 \b.
->>>>>>>&-1 string x \b%-.3s
-#MSDOS.SYS,IBMDOS.COM
->>>>>>&11 ubyte&0xDF >0 \b+
->>>>>>>&-1 string x \b%-.5s
->>>>>>>>&-6 ubyte&0xDF >0
->>>>>>>>>&-1 string x \b%-.1s
->>>>>>>>>>&-5 ubyte&0xDF >0
->>>>>>>>>>>&-1 string x \b%-.2s
->>>>>>>&7 ubyte&0xDF >0 \b.
->>>>>>>>&-1 string x \b%-.3s
->441 string Cannot\ load\ from\ harddisk.\n\r
->>469 string Insert\ Systemdisk\
->>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader
-#>43 string \224R-LOADER\ \ SYS =label
->54 string SYS
->>324 string VASKK
->>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS)
-#
->98 string Press\ a\ key\ to\ retry\0\r
->>120 string Cannot\ find\ file\ \0\r
->>>139 string Disk\ read\ error\0\r
->>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader
-#DRBIOS.SYS
->>>>>44 ubyte&0xDF >0
->>>>>>44 string x \b %-.6s
->>>>>>>50 ubyte&0xDF >0
->>>>>>>>50 string x \b%-.2s
->>>>>>52 ubyte&0xDF >0
->>>>>>>52 string x \b.%-.3s
-#
->70 string IBMBIO\ \ COM
->>472 string Cannot\ load\ DOS!\
->>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader
->>471 string Cannot\ load\ DOS\
->>487 string press\ key\ to\ retry \b, Open-DOS Bootloader
-#??
->444 string KERNEL\ \ SYS
->>314 string BOOT\ error! \b, FREE-DOS Bootloader
->499 string KERNEL\ \ SYS
->>305 string BOOT\ err!\0 \b, Free-DOS Bootloader
->449 string KERNEL\ \ SYS
->>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader
-#
->449 string Loading\ FreeDOS
->>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader
->>>497 ubyte&0xDF >0
->>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
->>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
->>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
->>>>>505 string x \b.%-.3s
-#
->331 string Error!.0 \b, FREE-DOS 1.0 bootloader
-#
->125 string Loading\ FreeDOS...\r
->>311 string BOOT\ error!\r \b, FREE-DOS bootloader
->>>441 ubyte&0xDF >0
->>>>441 string x \b %-.6s
->>>>>447 ubyte&0xDF >0
->>>>>>447 string x \b%-.1s
->>>>>>>448 ubyte&0xDF >0
->>>>>>>>448 string x \b%-.1s
->>>>449 ubyte&0xDF >0
->>>>>449 string x \b.%-.3s
->124 string FreeDOS\0
->>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader
-# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
->>>497 ubyte&0xDF >0
->>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
->>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
->>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
->>>>>505 string x \b.%-.3s
->>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader
->>>497 ubyte&0xDF >0
->>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
->>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
->>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
->>>>>505 string x \b.%-.3s
->>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader
->>>497 ubyte&0xDF >0
->>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
->>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
->>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
->>>>>505 string x \b.%-.3s
->336 string Error!\
->>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader
->>>497 ubyte&0xDF >0
->>>>497 string x \b %-.6s
->>>>>503 ubyte&0xDF >0
->>>>>>503 string x \b%-.1s
->>>>>>>504 ubyte&0xDF >0
->>>>>>>>504 string x \b%-.1s
->>>>505 ubyte&0xDF >0
->>>>>505 string x \b.%-.3s
-# added by Joerg Jenderek
-# http://www.visopsys.org/
-# http://partitionlogic.org.uk/
-# OEM-ID=Visopsys
->478 ulelong 0
->>(1.b+326) string I/O\ Error\ reading\
->>>(1.b+344) string Visopsys\ loader\r
->>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader
-# http://alexfru.chat.ru/epm.html#bootprog
->494 ubyte >0x4D
->>495 string >E
->>>495 string <S
-#OEM-ID is not reliable
->>>>3 string BootProg
-# It just looks for a program file name at the root directory
-# and loads corresponding file with following execution.
-# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
->>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader
->>>>>499 use DOS-filename
-#If the boot sector fails to read any other sector,
-#it prints a very short message ("RE") to the screen and hangs the computer.
-#If the boot sector fails to find needed program in the root directory,
-#it also hangs with another message ("NF").
->>>>>492 string RENF \b, FAT (12 bit)
->>>>>495 string RENF \b, FAT (16 bit)
-#If the boot sector fails to read any other sector,
-#it prints a very short message ("RE") to the screen and hangs the computer.
-# x86 bootloader end
-
-# added by Joerg Jenderek at Feb 2013 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
-# and http://en.wikipedia.org/wiki/File_Allocation_Table#FS_Information_Sector
->0 string RRaA
->>0x1E4 string rrAa \b, FSInfosector
-#>>0x1FC uleshort =0 SHOULD BE ZERO
->>>0x1E8 ulelong <0xffffffff \b, %u free clusters
->>>0x1EC ulelong <0xffffffff \b, last allocated cluster %u
-
-# updated by Joerg Jenderek at Sep 2007
->3 ubyte 0
-#no active flag
->>446 ubyte 0
-# partition 1 not empty
->>>450 ubyte >0
-# partitions 3,4 empty
->>>>482 ubyte 0
->>>>>498 ubyte 0
-# partition 2 ID=0,5,15
->>>>>>466 ubyte <0x10
->>>>>>>466 ubyte 0x05 \b, extended partition table
->>>>>>>466 ubyte 0x0F \b, extended partition table (LBA)
->>>>>>>466 ubyte 0x0 \b, extended partition table (last)
-
-# DOS x86 sector separated and moved from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
-
->0x200 lelong 0x82564557 \b, BSD disklabel
-
-# by Joerg Jenderek at Apr 2013
-# Print the DOS filenames from directory entry form with 8 right space padded bytes + 3 bytes for extension
-# like IO.SYS. MSDOS.SYS , KERNEL.SYS , DRBIO.SYS
-0 name DOS-filename
-# space=0x20 (00100000b) means empty
->0 ubyte&0xDF >0
->>0 ubyte x \b%c
->>>1 ubyte&0xDF >0
->>>>1 ubyte x \b%c
->>>>>2 ubyte&0xDF >0
->>>>>>2 ubyte x \b%c
->>>>>>>3 ubyte&0xDF >0
->>>>>>>>3 ubyte x \b%c
->>>>>>>>>4 ubyte&0xDF >0
->>>>>>>>>>4 ubyte x \b%c
->>>>>>>>>>>5 ubyte&0xDF >0
->>>>>>>>>>>>5 ubyte x \b%c
->>>>>>>>>>>>>6 ubyte&0xDF >0
->>>>>>>>>>>>>>6 ubyte x \b%c
->>>>>>>>>>>>>>>7 ubyte&0xDF >0
->>>>>>>>>>>>>>>>7 ubyte x \b%c
-# DOS filename extension
->>8 ubyte&0xDF >0 \b.
->>>8 ubyte x \b%c
->>>>9 ubyte&0xDF >0
->>>>>9 ubyte x \b%c
->>>>>>10 ubyte&0xDF >0
->>>>>>>10 ubyte x \b%c
-# Print 2 following DOS filenames from directory entry form
-# like IO.SYS+MSDOS.SYS or ibmbio.com+ibmdos.com
-0 name 2xDOS-filename
-# display 1 space
->0 ubyte x \b
->0 use DOS-filename
->11 ubyte x \b+
->11 use DOS-filename
-
-# http://en.wikipedia.org/wiki/Master_boot_record#PTE
-# display standard partition table
-0 name partition-table
-#>0 ubyte x PARTITION-TABLE
-# test and display 1st til 4th partition table entry
->0 use partition-entry-test
->16 use partition-entry-test
->32 use partition-entry-test
->48 use partition-entry-test
-# test for entry of partition table
-0 name partition-entry-test
-# partition type ID > 0
->4 ubyte >0
-# active flag 0
->>0 ubyte 0
->>>0 use partition-entry
-# active flag 0x80, 0x81, ...
->>0 ubyte >0x7F
->>>0 use partition-entry
-# Print entry of partition table
-0 name partition-entry
-# partition type ID > 0
->4 ubyte >0 \b; partition
->>64 leshort 0xAA55 1
->>48 leshort 0xAA55 2
->>32 leshort 0xAA55 3
->>16 leshort 0xAA55 4
->>4 ubyte x : ID=0x%x
->>0 ubyte&0x80 0x80 \b, active
->>0 ubyte >0x80 0x%x
->>1 ubyte x \b, start-CHS (
->>1 use partition-chs
->>5 ubyte x \b), end-CHS (
->>5 use partition-chs
->>8 ulelong x \b), startsector %u
->>12 ulelong x \b, %u sectors
-# Print cylinder,head,sector (CHS) of partition entry
-0 name partition-chs
-# cylinder
->1 ubyte x \b0x
->1 ubyte&0xC0 0x40 \b1
->1 ubyte&0xC0 0x80 \b2
->1 ubyte&0xC0 0xC0 \b3
->2 ubyte x \b%x
-# head
->0 ubyte x \b,%u
-# sector
->1 ubyte&0x3F x \b,%u
-
-# FATX
-0 string FATX FATX filesystem data
-
-# romfs filesystems - Juan Cespedes <cespedes at debian.org>
-0 string -rom1fs- romfs filesystem, version 1
->8 belong x %d bytes,
->16 string x named %s.
-
-# netboot image - Juan Cespedes <cespedes at debian.org>
-0 lelong 0x1b031336L Netboot image,
->4 lelong&0xFFFFFF00 0
->>4 lelong&0x100 0x000 mode 2
->>4 lelong&0x100 0x100 mode 3
->4 lelong&0xFFFFFF00 !0 unknown mode
-
-0x18b string OS/2 OS/2 Boot Manager
-
-# updated by Joerg Jenderek at Oct 2008 and Sep 2012
-# http://syslinux.zytor.com/iso.php
-# tested with versions 1.47,1.48,1.49,1.50,1.62,1.76,2.00,2.10;3.00,3.11,3.31,;3.70,3.71,3.73,3.75,3.80,3.82,3.84,3.86,4.01,4.03 and 4.05
-# assembler instructions: cli;jmp 0:7Cyy (yy=0x40,0x5e,0x6c,0x6e,0x77);nop;nop
-0 ulequad&0x909000007cc0eafa 0x909000007c40eafa
->631 search/689 ISOLINUX\ isolinux Loader
->>&0 string x (version %-4.4s)
-# http://syslinux.zytor.com/pxe.php
-# assembler instructions: jmp 7C05
-0 ulelong 0x007c05ea pxelinux loader (version 2.13 or older)
-# assembler instructions: pushfd;pushad
-0 ulelong 0x60669c66 pxelinux loader
-# assembler instructions: jmp 05
-0 ulelong 0xc00005ea pxelinux loader (version 3.70 or newer)
-# http://syslinux.zytor.com/wiki/index.php/SYSLINUX
-0 string LDLINUX\ SYS\ SYSLINUX loader
->12 string x (older version %-4.4s)
-0 string \r\nSYSLINUX\ SYSLINUX loader
->11 string x (version %-4.4s)
-# syslinux updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
-# assembler instructions: jmp yy (yy=0x3c,0x58);nop;"SYSLINUX"
-0 ulelong&0x80909bEB 0x009018EB
-# OEM-ID not always "SYSLINUX"
->434 search/47 Boot\ failed
-# followed by \r\n\0 or :\
->>482 search/132 \0LDLINUX\ SYS Syslinux bootloader (version 2.13 or older)
->>1 ubyte 0x58 Syslinux bootloader (version 3.0-3.9)
->459 search/30 Boot\ error\r\n\0
->>1 ubyte 0x58 Syslinux bootloader (version 3.10 or newer)
-# SYSLINUX MBR updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
-# assembler instructions: mov di,0600h;mov cx,0100h
-16 search/4 \xbf\x00\x06\xb9\x00\x01
-# to display SYSLINUX MBR (36) before old DOS/MBR boot sector one with partition table (strength=50+21)
-!:strength +36
->94 search/249 Missing\ operating\ system
-# followed by \r for versions older 3.35 , .\r for versions newer 3.52 and point for other
-# skip Ranish MBR
->>408 search/4 HD1/\0
->>408 default x
->>>250 search/118 \0Operating\ system\ load SYSLINUX MBR
-# followed by "ing " or space
->>>>292 search/98 error
->>>>>&0 string \r (version 3.35 or older)
->>>>>&0 string .\r (version 3.52 or newer)
->>>>>&0 default x (version 3.36-3.51 )
->368 search/106 \0Disk\ error\ on\ boot\r\n SYSLINUX GPT-MBR
->>156 search/10 \0Boot\ partition\ not\ found\r\n
->>>270 search/10 \0OS\ not\ bootable\r\n (version 3.86 or older)
->>174 search/10 \0Missing\ OS\r\n
->>>189 search/10 \0Multiple\ active\ partitions\r\n (version 4.00 or newer)
-# SYSLINUX END
-
-# NetBSD mbr variants (master-boot-code version 1.22) added by Joerg Jenderek at Nov 2012
-# assembler instructions: xor ax,ax;mov ax,ss;mov sp,0x7c00;mov ax,
-0 ubequad 0x31c08ed0bc007c8e
-# mbr_bootsel magic before partition table not reliable with small ipl fragments
-#>444 uleshort 0xb5e1
->0004 uleshort x
-# ERRorTeXT
->>181 search/166 Error\ \0\r\n NetBSD mbr
-# NT Drive Serial Number http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DS
->>>0x1B8 ubelong >0 \b,Serial 0x%-.8x
-# BOOTSEL definitions contains assembler instructions: int 0x13;pop dx;push dx;push dx
->>>0xbb search/71 \xcd\x13\x5a\x52\x52 \b,bootselector
-# BOOT_EXTENDED definitions contains assembler instructions:
-# xchg ecx,edx;addl ecx,edx;movw lba_info,si;movb 0x42,ah;pop dx;push dx;int 0x13
->>>0x96 search/1 \x66\x87\xca\x66\x01\xca\x66\x89\x16\x3a\x07\xbe\x32\x07\xb4\x42\x5a\x52\xcd\x13 \b,boot extended
-# COM_PORT_VAL definitions contains assembler instructions: outb al,dx;add 5,dl;inb %dx;test 0x40,al
->>>0x130 search/55 \xee\x80\xc2\x05\xec\xa8\x40 \b,serial IO
-# not TERSE_ERROR
->>>196 search/106 No\ active\ partition\0
->>>>&0 string Disk\ read\ error\0
->>>>>&0 string No\ operating\ system\0 \b,verbose
-# not NO_CHS definitions contains assembler instructions: pop dx;push dx;movb $8,ah;int0x13
->>>0x7d search/7 \x5a\x52\xb4\x08\xcd\x13 \b,CHS
-# not NO_LBA_CHECK definitions contains assembler instructions: movw 0x55aa,bx;movb 0x41,ah;pop dx;push dx;int 0x13
->>>0xa4 search/84 \xbb\xaa\x55\xb4\x41\x5a\x52\xcd\x13 \b,LBA-check
-# assembler instructions: movw nametab,bx
->>>0x26 search/21 \xBB\x94\x07
-# not NO_BANNER definitions contains assembler instructions: mov banner,si;call message_crlf
->>>>&-9 ubequad&0xBE00f0E800febb94 0xBE0000E80000bb94
->>>>>181 search/166 Error\ \0
-# "a: disk" , "Fn: diskn" or "NetBSD MBR boot"
->>>>>>&3 string x \b,"%s"
-# Andrea Mazzoleni AdvanceCD mbr loader of http://advancemame.sourceforge.net/boot-readme.html
-# added by Joerg Jenderek at Nov 2012 for versions 1.3 - 1.4
-# assembler instructions: jmp short 0x58;nop;ASCII
-0 ubequad&0xeb58908000000000 0xeb58900000000000
-# assembler instructions: cli;xor ax,ax;mov ds,ax;mov es,ax;mov ss,
->(1.b+2) ubequad 0xfa31c08ed88ec08e
-# Error messages at end of code
->>376 string No\ operating\ system\r\n\0
->>>398 string Disk\ error\r\n\0FDD\0HDD\0
->>>>419 string \ EBIOS\r\n\0 AdvanceMAME mbr
-
-# Neil Turton mbr loader variant of http://www.chiark.greenend.org.uk/~neilt/mbr/
-# added by Joerg Jenderek at Mar 2011 for versions 1.0.0 - 1.1.11
-# for 1st version assembler instructions: cld;xor ax,ax;mov DS,ax;MOV ES,AX;mov SI,
-# or cld;xor ax,ax;mov SS,ax;XOR SP,SP;mov DS,
-0 ulequad&0xcE1b40D48EC031FC 0x8E0000D08EC031FC
-# pointer to the data starting with Neil Turton signature string
->(0x1BC.s) string NDTmbr
->>&-14 string 1234F\0 Turton mbr (
-# parameters also viewed by install-mbr --list
->>>(0x1BC.s+7) ubyte x \b%u<=
->>>(0x1BC.s+9) ubyte x \bVersion<=%u
-#>>>(0x1BC.s+8) ubyte x asm_flag_%x
->>>(0x1BC.s+8) ubyte&1 1 \b,Y2K-Fix
-# variant used by testdisk of http://www.cgsecurity.org/wiki/Menu_MBRCode
->>>(0x1BC.s+8) ubyte&2 2 \b,TestDisk
-#0x1~1,..,0x8~4,0x10~F,0x80~A enabled
-#>>>(0x1BC.s+10) ubyte x \b,flags 0x%x
-#0x0~1,0x1~2,...,0x3~4,0x4~F,0x7~D default boot
-#>>>(0x1BC.s+11) ubyte x \b,cfg_def 0x%x
-# for older versions
->>>(0x1BC.s+9) ubyte <2
-#>>>>(0x1BC.s+12) ubyte 18 \b,%hhu/18 seconds
->>>>(0x1BC.s+12) ubyte !18 \b,%u/18 seconds
-# floppy A: or B:
->>>>(0x1BC.s+13) ubyte <2 \b,floppy 0x%x
->>>>(0x1BC.s+13) ubyte >1
-# 1st hard disc
-#>>>>>(0x1BC.s+13) ubyte 0x80 \b,drive 0x%x
-# not 1st hard disc
->>>>>(0x1BC.s+13) ubyte !0x80 \b,drive 0x%x
-# for version >= 2 maximal timeout can be 65534
->>>(0x1BC.s+9) ubyte >1
-#>>>>(0x1BC.s+12) uleshort 18 \b,%u/18 seconds
->>>>(0x1BC.s+12) uleshort !18 \b,%u/18 seconds
-# floppy A: or B:
->>>>(0x1BC.s+14) ubyte <2 \b,floppy 0x%x
->>>>(0x1BC.s+14) ubyte >1
-# 1st hard disc
-#>>>>>(0x1BC.s+14) ubyte 0x80 \b,drive 0x%x
-# not 1st hard disc
->>>>>(0x1BC.s+14) ubyte !0x80 \b,drive 0x%x
->>>0 ubyte x \b)
-
-# added by Joerg Jenderek
-# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
-# grub-1.94/kern/i386/pc/startup.S
-# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data
-# usual values are marked with comments to get only informations of strange GRUB loaders
-0x200 uleshort 0x70EA
-# found only version 3.{1,2}
->0x206 ubeshort >0x0300
-# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
->>0x212 ubyte >0x29
->>>0x213 ubyte >0x29
-# not iso9660_stage1_5
-#>>>0 ulelong&0x00BE5652 0x00BE5652
->>>>0x213 ubyte >0x29 GRand Unified Bootloader
-# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
->>>>0x217 ubyte 0xFF stage1_5
->>>>0x217 ubyte <0xFF stage2
->>>>0x206 ubyte x \b version %u
->>>>0x207 ubyte x \b.%u
-# module_size for 1.94
->>>>0x208 ulelong <0xffffff \b, installed partition %u
-#>>>>0x208 ulelong =0xffffff \b, %lu (default)
->>>>0x208 ulelong >0xffffff \b, installed partition %u
-# GRUB 0.5.95 unofficial
->>>>0x20C ulelong&0x2E300000 0x2E300000
-# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs
->>>>>0x20C ubyte x \b, identifier 0x%x
-#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default)
->>>>>0x20D ubyte >0 \b, LBA flag 0x%x
-# GRUB version as string
->>>>>0x20E string >\0 \b, GRUB version %-s
-# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
->>>>>>0x215 ulong 0xffffffff
->>>>>>>0x219 string >\0 \b, configuration file %-s
->>>>>>0x215 ulong !0xffffffff
->>>>>>>0x215 string >\0 \b, configuration file %-s
-# newer GRUB versions
->>>>0x20C ulelong&0x2E300000 !0x2E300000
-##>>>>>0x20C ulelong =0 \b, saved entry %d (usual)
->>>>>0x20C ulelong >0 \b, saved entry %d
-# for 1.94 contains kernel image size
-# for 0.93,0.94,0.96,0.97
-# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2
->>>>>0x210 ubyte x \b, identifier 0x%x
-# The flag for LBA forcing is in most cases 0
-#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default)
->>>>>0x211 ubyte >0 \b, LBA flag 0x%x
-# GRUB version as string
->>>>>0x212 string >\0 \b, GRUB version %-s
-# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
->>>>>0x217 ulong 0xffffffff
->>>>>>0x21b string >\0 \b, configuration file %-s
->>>>>0x217 ulong !0xffffffff
->>>>>>0x217 string >\0 \b, configuration file %-s
-
-# DOS x86 sector updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
-# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90
-# over BIOS parameter block (BPB)
-# http://thestarman.pcministry.com/asm/2bytejumps.htm#FWD
-# older drives may use Near JuMP instruction E9 xx xx
-# minimal short forward jump found 0x29 for bootloaders or 0x0
-# maximal short forward jump is 0x7f
-# OEM-ID is empty or contain readable bytes
-0 ulelong&0x804000E9 0x000000E9
-# mtools-3.9.8/msdos.h
-# usual values are marked with comments to get only informations of strange FAT systems
-# valid sectorsize must be a power of 2 from 32 to 32768
->11 uleshort&0xf001f 0
->>11 uleshort <32769
->>>11 uleshort >31
->>>>21 ubyte&0xf0 0xF0
->>>>>0 ubyte 0xEB
->>>>>>1 ubyte x \b, code offset 0x%x+2
->>>>>0 ubyte 0xE9
->>>>>>1 uleshort x \b, code offset 0x%x+2
->>>>>3 string >\0 \b, OEM-ID "%-.8s"
-#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
->>>>>>8 string IHC \b cached by Windows 9M
->>>>>11 uleshort >512 \b, Bytes/sector %u
-#>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual)
->>>>>11 uleshort <512 \b, Bytes/sector %u
->>>>>13 ubyte >1 \b, sectors/cluster %u
-#>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies)
->>>>>82 string FAT32
->>>>>>14 uleshort !32 \b, reserved sectors %u
-#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32)
->>>>>82 string !FAT32
->>>>>>14 uleshort >1 \b, reserved sectors %u
-#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16)
-#>>>>>>14 uleshort 0 \b, reserved sectors %u (usual NTFS)
->>>>>16 ubyte >2 \b, FATs %u
-#>>>>>16 ubyte =2 \b, FATs %u (usual)
->>>>>16 ubyte =1 \b, FAT %u
->>>>>16 ubyte >0
->>>>>17 uleshort >0 \b, root entries %u
-#>>>>>17 uleshort =0 \b, root entries %hu=0 (usual Fat32)
->>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
-#>>>>>19 uleshort =0 \b, sectors %hu=0 (usual Fat32)
->>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x
-#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy)
->>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x
->>>>>22 uleshort >0 \b, sectors/FAT %u
-#>>>>>22 uleshort =0 \b, sectors/FAT %hu=0 (usual Fat32)
->>>>>24 uleshort x \b, sectors/track %u
->>>>>26 ubyte >2 \b, heads %u
-#>>>>>26 ubyte =2 \b, heads %u (usual floppy)
->>>>>26 ubyte =1 \b, heads %u
-# valid only for sector sizes with more then 32 Bytes
->>>>>11 uleshort >32
-# skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk
->>>>>>38 ubyte !0x70
->>>>>>>28 ulelong >0 \b, hidden sectors %u
-#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy)
->>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB)
-#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
-# FAT<32 bit specific
->>>>>>>82 string !FAT32
-#>>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
-#>>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy)
->>>>>>>>36 ubyte !0x80
->>>>>>>>>36 ubyte !0 \b, physical drive 0x%x
->>>>>>>>37 ubyte >0 \b, reserved 0x%x
-#>>>>>>>>37 ubyte =0 \b, reserved 0x%x
-# value is 0x80 for NTFS
->>>>>>>>38 ubyte !0x29 \b, dos < 4.0 BootSector (0x%x)
->>>>>>>>38 ubyte =0x29
->>>>>>>>>39 ulelong x \b, serial number 0x%x
->>>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
->>>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
->>>>>>>>>43 string =NO\ NAME \b, unlabeled
-# there exist some old floppies without word FAT at offset 54
-# a word like "FATnm " is only a hint for a FAT size on nm-bits
-# Normally the number of clusters is calculated by the values of BPP.
-# if it is small enough FAT is 12 bit, if it is too big enough FAT is 32 bit,
-# otherwise FAT is 16 bit.
-# http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-fat-widths.html
->>>>>>54 string FAT \b, FAT
->>>>>>>54 string FAT12 \b (12 bit)
->>>>>>>54 string FAT16 \b (16 bit)
-# FAT32 bit specific
->>>>>82 string FAT32 \b, FAT (32 bit)
->>>>>>36 ulelong x \b, sectors/FAT %u
-# http://technet.microsoft.com/en-us/library/cc977221.aspx
->>>>>>40 uleshort >0 \b, extension flags 0x%x
-#>>>>>>40 uleshort =0 \b, extension flags %hu
->>>>>>42 uleshort >0 \b, fsVersion %u
-#>>>>>>42 uleshort =0 \b, fsVersion %u (usual)
->>>>>>44 ulelong >2 \b, rootdir cluster %u
-#>>>>>>44 ulelong =2 \b, rootdir cluster %u
-#>>>>>>44 ulelong =1 \b, rootdir cluster %u
->>>>>>48 uleshort >1 \b, infoSector %u
-#>>>>>>48 uleshort =1 \b, infoSector %u (usual)
->>>>>>48 uleshort <1 \b, infoSector %u
->>>>>>50 uleshort >6 \b, Backup boot sector %u
-#>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual)
->>>>>>50 uleshort <6 \b, Backup boot sector %u
-# corrected by Joerg Jenderek at Feb 2011 according to http://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
->>>>>>52 ulelong >0 \b, reserved1 0x%x
->>>>>>56 ulelong >0 \b, reserved2 0x%x
->>>>>>60 ulelong >0 \b, reserved3 0x%x
-# same structure as FAT1X
-#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk)
-#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
->>>>>>64 ubyte !0x80
->>>>>>>64 ubyte >0 \b, physical drive 0x%x
-# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
->>>>>>65 ubyte >0 \b, reserved 0x%x
->>>>>>66 ubyte !0x29 \b, dos < 4.0 BootSector (0x%x)
->>>>>>66 ubyte =0x29
->>>>>>>67 ulelong x \b, serial number 0x%x
->>>>>>>71 string <NO\ NAME \b, label: "%11.11s"
->>>>>>>71 string >NO\ NAME \b, label: "%11.11s"
->>>>>>>71 string =NO\ NAME \b, unlabeled
-# additional tests for floppy image added by Joerg Jenderek
-# no fixed disk
->>>>>21 ubyte !0xF8
-# floppy media with 12 bit FAT
->>>>>>54 string !FAT16
-# test for FAT after bootsector
->>>>>>>(11.s) ulelong&0x00ffffF0 0x00ffffF0 \b, followed by FAT
-# floppy image
-!:mime application/x-ima
-# NTFS specific added by Joerg Jenderek at Mar 2011 according to http://thestarman.pcministry.com/asm/mbr/NTFSBR.htm
-# and http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/bios-parameter-block.html
-# 0 FATs
->>>>>16 ubyte =0
-# 0 root entries
->>>>>>17 uleshort =0
-# 0 DOS sectors
->>>>>>>19 uleshort =0
-# 0 sectors/FAT
-# dos < 4.0 BootSector value found is 0x80
-#38 ubyte =0x80 \b, dos < 4.0 BootSector (0x%x)
->>>>>>>>22 uleshort =0 \b; NTFS
->>>>>>>>>24 uleshort >0 \b, sectors/track %u
->>>>>>>>>36 ulelong !0x800080 \b, physical drive 0x%x
->>>>>>>>>40 ulequad >0 \b, sectors %lld
->>>>>>>>>48 ulequad >0 \b, $MFT start cluster %lld
->>>>>>>>>56 ulequad >0 \b, $MFTMirror start cluster %lld
-# Values 0 to 127 represent MFT record sizes of 0 to 127 clusters.
-# Values 128 to 255 represent MFT record sizes of 2^(256-N) bytes.
->>>>>>>>>64 lelong <256
->>>>>>>>>>64 lelong <128 \b, clusters/RecordSegment %d
->>>>>>>>>>64 ubyte >127 \b, bytes/RecordSegment 2^(-1*%i)
-# Values 0 to 127 represent index block sizes of 0 to 127 clusters.
-# Values 128 to 255 represent index block sizes of 2^(256-N) byte
->>>>>>>>>68 ulelong <256
->>>>>>>>>>68 ulelong <128 \b, clusters/index block %d
-#>>>>>>>>>>68 ulelong >127 \b, bytes/index block 2^(256-%d)
->>>>>>>>>>68 ubyte >127 \b, bytes/index block 2^(-1*%i)
->>>>>>>>>72 ulequad x \b, serial number 0%llx
->>>>>>>>>80 ulelong >0 \b, checksum 0x%x
-#>>>>>>>>>80 ulelong =0 \b, checksum 0x%x=0 (usual)
->>>>>>>>>0x258 ulelong&0x00009090 =0x00009090
->>>>>>>>>>&-92 indirect x \b; contains
-# For 2nd NTFS sector added by Joerg Jenderek at Jan 2013
-# http://thestarman.pcministry.com/asm/mbr/NTFSbrHexEd.htm
-# unused assembler instructions JMP y2;NOP;NOP
-0x056 ulelong&0xFFFF0FFF 0x909002EB
-# unicode loadername terminated by CTRL-D
->(0.s*2) ulelong&0xFFFFFF00 0x00040000
-# loadernames are NTLDR,CMLDR,PELDR,$LDR$ or BOOTMGR
->>0x002 lestring16 x Microsoft Windows XP/VISTA bootloader %-5.5s
->>0x12 string $
->>>0x0c lestring16 x \b%-2.2s
-### DOS,NTFS boot sectors end
-
-9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian),
->8404 string x last mounted on %s,
-#>9504 ledate x last checked at %s,
->8224 ledate x last written at %s,
->8401 byte x clean flag %d,
->8228 lelong x number of blocks %d,
->8232 lelong x number of data blocks %d,
->8236 lelong x number of cylinder groups %d,
->8240 lelong x block size %d,
->8244 lelong x fragment size %d,
->8252 lelong x minimum percentage of free blocks %d,
->8256 lelong x rotational delay %dms,
->8260 lelong x disk rotational speed %drps,
->8320 lelong 0 TIME optimization
->8320 lelong 1 SPACE optimization
-
-42332 lelong 0x19540119 Unix Fast File system [v2] (little-endian)
->&-1164 string x last mounted on %s,
->&-696 string >\0 volume name %s,
->&-304 leqldate x last written at %s,
->&-1167 byte x clean flag %d,
->&-1168 byte x readonly flag %d,
->&-296 lequad x number of blocks %lld,
->&-288 lequad x number of data blocks %lld,
->&-1332 lelong x number of cylinder groups %d,
->&-1328 lelong x block size %d,
->&-1324 lelong x fragment size %d,
->&-180 lelong x average file size %d,
->&-176 lelong x average number of files in dir %d,
->&-272 lequad x pending blocks to free %lld,
->&-264 lelong x pending inodes to free %d,
->&-664 lequad x system-wide uuid %0llx,
->&-1316 lelong x minimum percentage of free blocks %d,
->&-1248 lelong 0 TIME optimization
->&-1248 lelong 1 SPACE optimization
-
-66908 lelong 0x19540119 Unix Fast File system [v2] (little-endian)
->&-1164 string x last mounted on %s,
->&-696 string >\0 volume name %s,
->&-304 leqldate x last written at %s,
->&-1167 byte x clean flag %d,
->&-1168 byte x readonly flag %d,
->&-296 lequad x number of blocks %lld,
->&-288 lequad x number of data blocks %lld,
->&-1332 lelong x number of cylinder groups %d,
->&-1328 lelong x block size %d,
->&-1324 lelong x fragment size %d,
->&-180 lelong x average file size %d,
->&-176 lelong x average number of files in dir %d,
->&-272 lequad x pending blocks to free %lld,
->&-264 lelong x pending inodes to free %d,
->&-664 lequad x system-wide uuid %0llx,
->&-1316 lelong x minimum percentage of free blocks %d,
->&-1248 lelong 0 TIME optimization
->&-1248 lelong 1 SPACE optimization
-
-9564 belong 0x00011954 Unix Fast File system [v1] (big-endian),
->7168 belong 0x4c41424c Apple UFS Volume
->>7186 string x named %s,
->>7176 belong x volume label version %d,
->>7180 bedate x created on %s,
->8404 string x last mounted on %s,
-#>9504 bedate x last checked at %s,
->8224 bedate x last written at %s,
->8401 byte x clean flag %d,
->8228 belong x number of blocks %d,
->8232 belong x number of data blocks %d,
->8236 belong x number of cylinder groups %d,
->8240 belong x block size %d,
->8244 belong x fragment size %d,
->8252 belong x minimum percentage of free blocks %d,
->8256 belong x rotational delay %dms,
->8260 belong x disk rotational speed %drps,
->8320 belong 0 TIME optimization
->8320 belong 1 SPACE optimization
-
-42332 belong 0x19540119 Unix Fast File system [v2] (big-endian)
->&-1164 string x last mounted on %s,
->&-696 string >\0 volume name %s,
->&-304 beqldate x last written at %s,
->&-1167 byte x clean flag %d,
->&-1168 byte x readonly flag %d,
->&-296 bequad x number of blocks %lld,
->&-288 bequad x number of data blocks %lld,
->&-1332 belong x number of cylinder groups %d,
->&-1328 belong x block size %d,
->&-1324 belong x fragment size %d,
->&-180 belong x average file size %d,
->&-176 belong x average number of files in dir %d,
->&-272 bequad x pending blocks to free %lld,
->&-264 belong x pending inodes to free %d,
->&-664 bequad x system-wide uuid %0llx,
->&-1316 belong x minimum percentage of free blocks %d,
->&-1248 belong 0 TIME optimization
->&-1248 belong 1 SPACE optimization
-
-66908 belong 0x19540119 Unix Fast File system [v2] (big-endian)
->&-1164 string x last mounted on %s,
->&-696 string >\0 volume name %s,
->&-304 beqldate x last written at %s,
->&-1167 byte x clean flag %d,
->&-1168 byte x readonly flag %d,
->&-296 bequad x number of blocks %lld,
->&-288 bequad x number of data blocks %lld,
->&-1332 belong x number of cylinder groups %d,
->&-1328 belong x block size %d,
->&-1324 belong x fragment size %d,
->&-180 belong x average file size %d,
->&-176 belong x average number of files in dir %d,
->&-272 bequad x pending blocks to free %lld,
->&-264 belong x pending inodes to free %d,
->&-664 bequad x system-wide uuid %0llx,
->&-1316 belong x minimum percentage of free blocks %d,
->&-1248 belong 0 TIME optimization
->&-1248 belong 1 SPACE optimization
-
-# ext2/ext3 filesystems - Andreas Dilger <adilger at dilger.ca>
-# ext4 filesystem - Eric Sandeen <sandeen at sandeen.net>
-# volume label and UUID Russell Coker
-# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
-0x438 leshort 0xEF53 Linux
->0x44c lelong x rev %d
->0x43e leshort x \b.%d
-# No journal? ext2
->0x45c lelong ^0x0000004 ext2 filesystem data
->>0x43a leshort ^0x0000001 (mounted or unclean)
-# Has a journal? ext3 or ext4
->0x45c lelong &0x0000004
-# and small INCOMPAT?
->>0x460 lelong <0x0000040
-# and small RO_COMPAT?
->>>0x464 lelong <0x0000008 ext3 filesystem data
-# else large RO_COMPAT?
->>>0x464 lelong >0x0000007 ext4 filesystem data
-# else large INCOMPAT?
->>0x460 lelong >0x000003f ext4 filesystem data
->0x468 belong x \b, UUID=%08x
->0x46c beshort x \b-%04x
->0x46e beshort x \b-%04x
->0x470 beshort x \b-%04x
->0x472 belong x \b-%08x
->0x476 beshort x \b%04x
->0x478 string >0 \b, volume name "%s"
-# General flags for any ext* fs
->0x460 lelong &0x0000004 (needs journal recovery)
->0x43a leshort &0x0000002 (errors)
-# INCOMPAT flags
->0x460 lelong &0x0000001 (compressed)
-#>0x460 lelong &0x0000002 (filetype)
-#>0x460 lelong &0x0000010 (meta bg)
->0x460 lelong &0x0000040 (extents)
->0x460 lelong &0x0000080 (64bit)
-#>0x460 lelong &0x0000100 (mmp)
-#>0x460 lelong &0x0000200 (flex bg)
-# RO_INCOMPAT flags
-#>0x464 lelong &0x0000001 (sparse super)
->0x464 lelong &0x0000002 (large files)
->0x464 lelong &0x0000008 (huge files)
-#>0x464 lelong &0x0000010 (gdt checksum)
-#>0x464 lelong &0x0000020 (many subdirs)
-#>0x463 lelong &0x0000040 (extra isize)
-
-# Minix filesystems - Juan Cespedes <cespedes at debian.org>
-0x410 leshort 0x137f
-!:strength / 2
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V1, %d zones
->0x1e string minix \b, bootable
-0x410 beshort 0x137f
-!:strength / 2
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V1 (big endian), %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x138f
-!:strength / 2
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V1, 30 char names, %d zones
->0x1e string minix \b, bootable
-0x410 beshort 0x138f
-!:strength / 2
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V1, 30 char names (big endian), %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x2468
->0x402 beshort < 100
->>0x402 beshort > -1 Minix filesystem, V2, %d zones
->0x1e string minix \b, bootable
-0x410 beshort 0x2468
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V2 (big endian), %d zones
->0x1e string minix \b, bootable
-
-0x410 leshort 0x2478
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V2, 30 char names, %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x2478
->0x402 beshort < 100
->0x402 beshort > -1 Minix filesystem, V2, 30 char names, %d zones
->0x1e string minix \b, bootable
-0x410 beshort 0x2478
->0x402 beshort !0 Minix filesystem, V2, 30 char names (big endian), %d zones
->0x1e string minix \b, bootable
-0x410 leshort 0x4d5a
->0x402 beshort !0 Minix filesystem, V3, %d zones
->0x1e string minix \b, bootable
-
-# SGI disk labels - Nathan Scott <nathans at debian.org>
-0 belong 0x0BE5A941 SGI disk label (volume header)
-
-# SGI XFS filesystem - Nathan Scott <nathans at debian.org>
-0 belong 0x58465342 SGI XFS filesystem data
->0x4 belong x (blksz %d,
->0x68 beshort x inosz %d,
->0x64 beshort ^0x2004 v1 dirs)
->0x64 beshort &0x2004 v2 dirs)
-
-############################################################################
-# Minix-ST kernel floppy
-0x800 belong 0x46fc2700 Atari-ST Minix kernel image
-# http://en.wikipedia.org/wiki/BIOS_parameter_block
-# floppies with valid BPB and any instruction at beginning
->19 string \240\005\371\005\0\011\0\2\0 \b, 720k floppy
->19 string \320\002\370\005\0\011\0\1\0 \b, 360k floppy
-
-############################################################################
-# Hmmm, is this a better way of detecting _standard_ floppy images ?
-19 string \320\002\360\003\0\011\0\1\0 DOS floppy 360k
->0x1FE leshort 0xAA55 \b, DOS/MBR hard disk boot sector
-19 string \240\005\371\003\0\011\0\2\0 DOS floppy 720k
->0x1FE leshort 0xAA55 \b, DOS/MBR hard disk boot sector
-19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k
->0x1FE leshort 0xAA55 \b, DOS/MBR hard disk boot sector
-
-19 string \240\005\371\005\0\011\0\2\0 DOS floppy 720k, IBM
->0x1FE leshort 0xAA55 \b, DOS/MBR hard disk boot sector
-19 string \100\013\371\005\0\011\0\2\0 DOS floppy 1440k, mkdosfs
->0x1FE leshort 0xAA55 \b, DOS/MBR hard disk boot sector
-
-19 string \320\002\370\005\0\011\0\1\0 Atari-ST floppy 360k
-19 string \240\005\371\005\0\011\0\2\0 Atari-ST floppy 720k
-# | | | | |
-# | | | | heads
-# | | | sectors/track
-# | | sectors/FAT
-# | media descriptor
-# BPB: sectors
-
-# Valid media descriptor bytes for MS-DOS:
-#
-# Byte Capacity Media Size and Type
-# -------------------------------------------------
-#
-# F0 2.88 MB 3.5-inch, 2-sided, 36-sector
-# F0 1.44 MB 3.5-inch, 2-sided, 18-sector
-# F9 720K 3.5-inch, 2-sided, 9-sector
-# F9 1.2 MB 5.25-inch, 2-sided, 15-sector
-# FD 360K 5.25-inch, 2-sided, 9-sector
-# FF 320K 5.25-inch, 2-sided, 8-sector
-# FC 180K 5.25-inch, 1-sided, 9-sector
-# FE 160K 5.25-inch, 1-sided, 8-sector
-# FE 250K 8-inch, 1-sided, single-density
-# FD 500K 8-inch, 2-sided, single-density
-# FE 1.2 MB 8-inch, 2-sided, double-density
-# F8 ----- Fixed disk
-#
-# FC xxxK Apricot 70x1x9 boot disk.
-#
-# Originally a bitmap:
-# xxxxxxx0 Not two sided
-# xxxxxxx1 Double sided
-# xxxxxx0x Not 8 SPT
-# xxxxxx1x 8 SPT
-# xxxxx0xx Not Removable drive
-# xxxxx1xx Removable drive
-# 11111xxx Must be one.
-#
-# But now it's rather random:
-# 111111xx Low density disk
-# 00 SS, Not 8 SPT
-# 01 DS, Not 8 SPT
-# 10 SS, 8 SPT
-# 11 DS, 8 SPT
-#
-# 11111001 Double density 3 1/2 floppy disk, high density 5 1/4
-# 11110000 High density 3 1/2 floppy disk
-# 11111000 Hard disk any format
-#
-
-# all FAT12 (strength=70) floppies with sectorsize 512 added by Joerg Jenderek at Jun 2013
-# http://en.wikipedia.org/wiki/File_Allocation_Table#Exceptions
-# Too Weak.
-#512 ubelong&0xE0ffff00 0xE0ffff00
-# without valid Media descriptor in place of BPB, cases with are done at other places
-#>21 ubyte <0xE5 floppy with old FAT filesystem
-# but valid Media descriptor at begin of FAT
-#>>512 ubyte =0xed 720k
-#>>512 ubyte =0xf0 1440k
-#>>512 ubyte =0xf8 720k
-#>>512 ubyte =0xf9 1220k
-#>>512 ubyte =0xfa 320k
-#>>512 ubyte =0xfb 640k
-#>>512 ubyte =0xfc 180k
-# look like an an old DOS directory entry
-#>>>0xA0E ubequad 0
-#>>>>0xA00 ubequad !0
-#!:mime application/x-ima
-#>>512 ubyte =0xfd
-# look for 2nd FAT at different location to distinguish between 360k and 500k
-#>>>0x600 ubelong&0xE0ffff00 0xE0ffff00 360k
-#>>>0x500 ubelong&0xE0ffff00 0xE0ffff00 500k
-#>>>0xA0E ubequad 0
-#!:mime application/x-ima
-#>>512 ubyte =0xfe
-#>>>0x400 ubelong&0xE0ffff00 0xE0ffff00 160k
-#>>>>0x60E ubequad 0
-#>>>>>0x600 ubequad !0
-#!:mime application/x-ima
-#>>>0xC00 ubelong&0xE0ffff00 0xE0ffff00 1200k
-#>>512 ubyte =0xff 320k
-#>>>0x60E ubequad 0
-#>>>>0x600 ubequad !0
-#!:mime application/x-ima
-#>>512 ubyte x \b, Media descriptor 0x%x
-# without x86 jump instruction
-#>>0 ulelong&0x804000E9 !0x000000E9
-# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV
-#>>>0 ubequad 0xfabce701b8c0078e \b, MS-DOS 1.12 bootloader
-# IOSYS.COM+MSDOS.COM
-#>>>>0xc4 use 2xDOS-filename
-#>>0 ulelong&0x804000E9 =0x000000E9
-# only x86 short jump instruction found
-#>>>0 ubyte =0xEB
-#>>>>1 ubyte x \b, code offset 0x%x+2
-# http://thestarman.pcministry.com/DOS/ibm100/Boot.htm
-# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0
-#>>>>(1.b+2) ubequad 0xfa8cc88ed8ba0000 \b, PC-DOS 1.0 bootloader
-# ibmbio.com+ibmdos.com
-#>>>>>0x176 use DOS-filename
-#>>>>>0x181 ubyte x \b+
-#>>>>>0x182 use DOS-filename
-# http://thestarman.pcministry.com/DOS/ibm110/Boot.htm
-# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV
-#>>>>(1.b+2) ubequad 0xfa8cc88ed833d28e \b, PC-DOS 1.1 bootloader
-# ibmbio.com+ibmdos.com
-#>>>>>0x18b use DOS-filename
-#>>>>>0x196 ubyte x \b+
-#>>>>>0x197 use DOS-filename
-# http://en.wikipedia.org/wiki/Zenith_Data_Systems
-# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6
-#>>>>(1.b+2) ubequad 0xbbc0078ed3bcc601 \b, Zenith Data Systems MS-DOS 1.25 bootloader
-# IO.SYS+MSDOS.SYS
-#>>>>>0x20 use 2xDOS-filename
-# http://en.wikipedia.org/wiki/Corona_Data_Systems
-# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;
-#>>>>(1.b+2) ubequad 0x8cc88ed8fa8ed0bc \b, MS-DOS 1.25 bootloader
-# IO.SYS+MSDOS.SYS
-#>>>>>0x69 use 2xDOS-filename
-# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;
-#>>>>(1.b+2) ubequad 0xfa0e17bc007cb860 \b, MS-DOS 2.11 bootloader
-# defect IO.SYS+MSDOS.SYS ?
-#>>>>>0x162 use 2xDOS-filename
-
-# CDROM Filesystems
-# Modified for UDF by gerardo.cacciari at gmail.com
-32769 string CD001 #
-!:mime application/x-iso9660-image
->38913 string !NSR0 ISO 9660 CD-ROM filesystem data
->38913 string NSR0 UDF filesystem data
->>38917 string 1 (version 1.0)
->>38917 string 2 (version 1.5)
->>38917 string 3 (version 2.0)
->>38917 byte >0x33 (unknown version, ID 0x%X)
->>38917 byte <0x31 (unknown version, ID 0x%X)
-# "application id" which appears to be used as a volume label
->32808 string/T >\0 '%s'
->34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable)
-37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
-!:mime application/x-iso9660-image
-32777 string CDROM High Sierra CD-ROM filesystem data
-
-# .cso files
-0 string CISO Compressed ISO CD image
-
-# cramfs filesystem - russell at coker.com.au
-0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian
->4 lelong x size %u
->8 lelong &1 version #2
->8 lelong &2 sorted_dirs
->8 lelong &4 hole_support
->32 lelong x CRC 0x%x,
->36 lelong x edition %u,
->40 lelong x %u blocks,
->44 lelong x %u files
-
-0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian
->4 belong x size %u
->8 belong &1 version #2
->8 belong &2 sorted_dirs
->8 belong &4 hole_support
->32 belong x CRC 0x%x,
->36 belong x edition %u,
->40 belong x %u blocks,
->44 belong x %u files
-
-# reiserfs - russell at coker.com.au
-0x10034 string ReIsErFs ReiserFS V3.5
-0x10034 string ReIsEr2Fs ReiserFS V3.6
-0x10034 string ReIsEr3Fs ReiserFS V3.6.19
->0x1002c leshort x block size %d
->0x10032 leshort &2 (mounted or unclean)
->0x10000 lelong x num blocks %d
->0x10040 lelong 1 tea hash
->0x10040 lelong 2 yura hash
->0x10040 lelong 3 r5 hash
-
-# JFFS - russell at coker.com.au
-0 lelong 0x34383931 Linux Journalled Flash File system, little endian
-0 belong 0x34383931 Linux Journalled Flash File system, big endian
-
-# EST flat binary format (which isn't, but anyway)
-# From: Mark Brown <broonie at sirena.org.uk>
-0 string ESTFBINR EST flat binary
-
-# Aculab VoIP firmware
-# From: Mark Brown <broonie at sirena.org.uk>
-0 string VoIP\ Startup\ and Aculab VoIP firmware
->35 string x format %s
-
-# From: Mark Brown <broonie at sirena.org.uk> [old]
-# From: Behan Webster <behanw at websterwood.com>
-0 belong 0x27051956 u-boot legacy uImage,
->32 string x %s,
->28 byte 0 Invalid os/
->28 byte 1 OpenBSD/
->28 byte 2 NetBSD/
->28 byte 3 FreeBSD/
->28 byte 4 4.4BSD/
->28 byte 5 Linux/
->28 byte 6 SVR4/
->28 byte 7 Esix/
->28 byte 8 Solaris/
->28 byte 9 Irix/
->28 byte 10 SCO/
->28 byte 11 Dell/
->28 byte 12 NCR/
->28 byte 13 LynxOS/
->28 byte 14 VxWorks/
->28 byte 15 pSOS/
->28 byte 16 QNX/
->28 byte 17 Firmware/
->28 byte 18 RTEMS/
->28 byte 19 ARTOS/
->28 byte 20 Unity OS/
->28 byte 21 INTEGRITY/
->29 byte 0 \bInvalid CPU,
->29 byte 1 \bAlpha,
->29 byte 2 \bARM,
->29 byte 3 \bIntel x86,
->29 byte 4 \bIA64,
->29 byte 5 \bMIPS,
->29 byte 6 \bMIPS 64-bit,
->29 byte 7 \bPowerPC,
->29 byte 8 \bIBM S390,
->29 byte 9 \bSuperH,
->29 byte 10 \bSparc,
->29 byte 11 \bSparc 64-bit,
->29 byte 12 \bM68K,
->29 byte 13 \bNios-32,
->29 byte 14 \bMicroBlaze,
->29 byte 15 \bNios-II,
->29 byte 16 \bBlackfin,
->29 byte 17 \bAVR32,
->29 byte 18 \bSTMicroelectronics ST200,
->30 byte 0 Invalid Image
->30 byte 1 Standalone Program
->30 byte 2 OS Kernel Image
->30 byte 3 RAMDisk Image
->30 byte 4 Multi-File Image
->30 byte 5 Firmware Image
->30 byte 6 Script File
->30 byte 7 Filesystem Image (any type)
->30 byte 8 Binary Flat Device Tree BLOB
->31 byte 0 (Not compressed),
->31 byte 1 (gzip),
->31 byte 2 (bzip2),
->31 byte 3 (lzma),
->12 belong x %d bytes,
->8 bedate x %s,
->16 belong x Load Address: 0x%08X,
->20 belong x Entry Point: 0x%08X,
->4 belong x Header CRC: 0x%08X,
->24 belong x Data CRC: 0x%08X
-
-# JFFS2 file system
-0 leshort 0x1984 Linux old jffs2 filesystem data little endian
-0 leshort 0x1985 Linux jffs2 filesystem data little endian
-
-# Squashfs
-0 string sqsh Squashfs filesystem, big endian,
->28 beshort x version %d.
->30 beshort x \b%d,
->28 beshort <3
->>8 belong x %d bytes,
->28 beshort >2
->>28 beshort <4
->>>63 bequad x %lld bytes,
->>28 beshort >3
->>>40 bequad x %lld bytes,
-#>>67 belong x %d bytes,
->4 belong x %d inodes,
->28 beshort <2
->>32 beshort x blocksize: %d bytes,
->28 beshort >1
->>28 beshort <4
->>>51 belong x blocksize: %d bytes,
->>28 beshort >3
->>>12 belong x blocksize: %d bytes,
->28 beshort <4
->>39 bedate x created: %s
->28 beshort >3
->>8 bedate x created: %s
-0 string hsqs Squashfs filesystem, little endian,
->28 leshort x version %d.
->30 leshort x \b%d,
->28 leshort <3
->>8 lelong x %d bytes,
->28 leshort >2
->>28 leshort <4
->>>63 lequad x %lld bytes,
->>28 leshort >3
->>>40 lequad x %lld bytes,
-#>>63 lelong x %d bytes,
->4 lelong x %d inodes,
->28 leshort <2
->>32 leshort x blocksize: %d bytes,
->28 leshort >1
->>28 leshort <4
->>>51 lelong x blocksize: %d bytes,
->>28 leshort >3
->>>12 lelong x blocksize: %d bytes,
->28 leshort <4
->>39 ledate x created: %s
->28 leshort >3
->>8 ledate x created: %s
-
-# AFS Dump Magic
-# From: Ty Sarna <tsarna at sarna.org>
-0 string \x01\xb3\xa1\x13\x22 AFS Dump
->&0 belong x (v%d)
->>&0 byte 0x76
->>>&0 belong x Vol %d,
->>>>&0 byte 0x6e
->>>>>&0 string x %s
->>>>>>&1 byte 0x74
->>>>>>>&0 beshort 2
->>>>>>>>&4 bedate x on: %s
->>>>>>>>&0 bedate =0 full dump
->>>>>>>>&0 bedate !0 incremental since: %s
-
-#----------------------------------------------------------
-#delta ISO Daniel Novotny (dnovotny at redhat.com)
-0 string DISO Delta ISO data
->4 belong x version %d
-
-# VMS backup savesets - gerardo.cacciari at gmail.com
-#
-4 string \x01\x00\x01\x00\x01\x00
->(0.s+16) string \x01\x01
->>&(&0.b+8) byte 0x42 OpenVMS backup saveset data
->>>40 lelong x (block size %d,
->>>49 string >\0 original name '%s',
->>>2 short 1024 VAX generated)
->>>2 short 2048 AXP generated)
->>>2 short 4096 I64 generated)
-
-# Summary: Oracle Clustered Filesystem
-# Created by: Aaron Botsis <redhat at digitalmafia.org>
-8 string OracleCFS Oracle Clustered Filesystem,
->4 long x rev %d
->0 long x \b.%d,
->560 string x label: %.64s,
->136 string x mountpoint: %.128s
-
-# Summary: Oracle ASM tagged volume
-# Created by: Aaron Botsis <redhat at digitalmafia.org>
-32 string ORCLDISK Oracle ASM Volume,
->40 string x Disk Name: %0.12s
-32 string ORCLCLRD Oracle ASM Volume (cleared),
->40 string x Disk Name: %0.12s
-
-# Oracle Clustered Filesystem - Aaron Botsis <redhat at digitalmafia.org>
-8 string OracleCFS Oracle Clustered Filesystem,
->4 long x rev %d
->0 long x \b.%d,
->560 string x label: %.64s,
->136 string x mountpoint: %.128s
-
-# Oracle ASM tagged volume - Aaron Botsis <redhat at digitalmafia.org>
-32 string ORCLDISK Oracle ASM Volume,
->40 string x Disk Name: %0.12s
-32 string ORCLCLRD Oracle ASM Volume (cleared),
->40 string x Disk Name: %0.12s
-
-# Compaq/HP RILOE floppy image
-# From: Dirk Jagdmann <doj at cubic.org>
-0 string CPQRFBLO Compaq/HP RILOE floppy image
-
-#------------------------------------------------------------------------------
-# Files-11 On-Disk Structure (File system for various RSX-11 and VMS flavours).
-# These bits come from LBN 1 (home block) of ODS-1, ODS-2 and ODS-5 volumes,
-# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari at gmail.com
-#
-1008 string DECFILE11 Files-11 On-Disk Structure
->525 byte x Level %d
->525 byte x (ODS-%d);
->1017 string A RSX-11, VAX/VMS or OpenVMS VAX file system;
->1017 string B
->>525 byte 2 VAX/VMS or OpenVMS file system;
->>525 byte 5 OpenVMS Alpha or Itanium file system;
->984 string x volume label is '%-12.12s'
-
-# From: Thomas Klausner <wiz at NetBSD.org>
-# http://filext.com/file-extension/DAA
-# describes the daa file format. The magic would be:
-0 string DAA\x0\x0\x0\x0\x0 PowerISO Direct-Access-Archive
-
-# From Albert Cahalan <acahalan at gmail.com>
-# really le32 operation,destination,payloadsize (but quite predictable)
-# 01 00 00 00 00 00 00 c0 00 02 00 00
-0 string \1\0\0\0\0\0\0\300\0\2\0\0 Marvell Libertas firmware
-
-# From Eric Sandeen
-# GFS2
-0x10000 belong 0x01161970
->0x10018 belong 0x0000051d GFS1 Filesystem
->>0x10024 belong x (blocksize %d,
->>0x10060 string >\0 lockproto %s)
->0x10018 belong 0x00000709 GFS2 Filesystem
->>0x10024 belong x (blocksize %d,
->>0x10060 string >\0 lockproto %s)
-
-# BTRFS
-0x10040 string _BHRfS_M BTRFS Filesystem
->0x1012b string >\0 (label "%s",
->0x10090 lelong x sectorsize %d,
->0x10094 lelong x nodesize %d,
->0x10098 lelong x leafsize %d)
-
-
-# dvdisaster's .ecc
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-0 string *dvdisaster* dvdisaster error correction file
-
-# xfs metadump image
-# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
-# but can we do the << ? For now it's always 512 (0x200) anyway.
-0 string XFSM
->0x200 string XFSB XFS filesystem metadump image
-
-# Type: CROM filesystem
-# From: Werner Fink <werner at suse.de>
-0 string CROMFS CROMFS
->6 string >\0 \b version %2.2s,
->8 ulequad >0 \b block data at %lld,
->16 ulequad >0 \b fblock table at %lld,
->24 ulequad >0 \b inode table at %lld,
->32 ulequad >0 \b root at %lld,
->40 ulelong >0 \b fblock size = %d,
->44 ulelong >0 \b block size = %d,
->48 ulequad >0 \b bytes = %lld
-
-# Type: xfs metadump image
-# From: Daniel Novotny <dnovotny at redhat.com>
-# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
-# but can we do the << ? For now it's always 512 (0x200) anyway.
-0 string XFSM
->0x200 string XFSB XFS filesystem metadump image
-
-# Type: delta ISO
-# From: Daniel Novotny <dnovotny at redhat.com>
-0 string DISO Delta ISO data,
->4 belong x version %d
-
-# JFS2 (Journaling File System) image. (Old JFS1 has superblock at 0x1000.)
-# See linux/fs/jfs/jfs_superblock.h for layout; see jfs_filsys.h for flags.
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-0x8000 string JFS1
-# Because it's text-only magic, check a binary value (version) to be sure.
-# Should always be 2, but mkfs.jfs writes it as 1. Needs to be 2 or 1 to be
-# mountable.
->&0 lelong <3 JFS2 filesystem image
-# Label is followed by a UUID; we have to limit string length to avoid
-# appending the UUID in the case of a 16-byte label.
->>&144 regex [\x20-\x7E]{1,16} (label "%s")
->>&0 lequad x \b, %lld blocks
->>&8 lelong x \b, blocksize %d
->>&32 lelong&0x00000006 >0 (dirty)
->>&36 lelong >0 (compressed)
-
-# LFS
-0 lelong 0x070162 LFS filesystem image
->4 lelong 1 version 1,
->>8 lelong x \b blocks %u,
->>12 lelong x \b blocks per segment %u,
->4 lelong 2 version 2,
->>8 lelong x \b fragments %u,
->>12 lelong x \b bytes per segment %u,
->16 lelong x \b disk blocks %u,
->20 lelong x \b block size %u,
->24 lelong x \b fragment size %u,
->28 lelong x \b fragments per block %u,
->32 lelong x \b start for free list %u,
->36 lelong x \b number of free blocks %d,
->40 lelong x \b number of files %u,
->44 lelong x \b blocks available for writing %d,
->48 lelong x \b inodes in cache %d,
->52 lelong x \b inode file disk address 0x%x,
->56 lelong x \b inode file inode number %u,
->60 lelong x \b address of last segment written 0x%x,
->64 lelong x \b address of next segment to write 0x%x,
->68 lelong x \b address of current segment written 0x%x
-
-0 string td\000 floppy image data (TeleDisk, compressed)
-0 string TD\000 floppy image data (TeleDisk)
-
-0 string CQ\024 floppy image data (CopyQM,
->16 leshort x %d sectors,
->18 leshort x %d heads.)
-
-0 string ACT\020Apricot\020disk\020image\032\004 floppy image data (ApriDisk)
-
-0 beshort 0xAA58 floppy image data (IBM SaveDskF, old)
-0 beshort 0xAA59 floppy image data (IBM SaveDskF)
-0 beshort 0xAA5A floppy image data (IBM SaveDskF, compressed)
-
-0 string \074CPM_Disk\076 disk image data (YAZE)
-
-# ReFS
-# Richard W.M. Jones <rjones at redhat.com>
-0 string \0\0\0ReFS\0 ReFS filesystem image
-
-# EFW encase image file format:
-# Gregoire Passault
-# http://www.forensicswiki.org/wiki/Encase_image_file_format
-0 string EVF\x09\x0d\x0a\xff\x00 EWF/Expert Witness/EnCase image file format
-
-# UBIfs
-# Linux kernel sources: fs/ubifs/ubifs-media.h
-0 belong 0x31181006
->0x16 short 0 UBIfs image
->0x08 lequad x \b, sequence number %llu
->0x10 leshort x \b, length %u
->0x04 lelong x \b, CRC 0x%08x
-
-0 belong 0x55424923
->0x04 short <2
->0x05 string \0\0\0
->0x1c string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
->0x04 short x UBI image, version %u
-
-#------------------------------------------------------------------------------
-# $File: flash,v 1.11 2014/05/02 00:26:49 christos Exp $
-# flash: file(1) magic for Macromedia Flash file format
-#
-# See
-#
-# http://www.macromedia.com/software/flash/open/
-# http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/\
-# en/devnet/swf/pdf/swf-file-format-spec.pdf page 27
-#
-
-0 name swf-details
->0 string F Macromedia Flash data
-!:mime application/x-shockwave-flash
->0 string C Macromedia Flash data (compressed)
-!:mime application/x-shockwave-flash
->0 string Z Macromedia Flash data (lzma compressed)
-!:mime application/x-shockwave-flash
->3 byte x \b, version %d
-
-1 string WS
->4 lelong !0
->>3 byte 255 Suspicious
->>>0 use swf-details
-
->>3 ubyte <32
->>>3 ubyte !0
->>>>0 use swf-details
-
-# From: Cal Peake <cp at absolutedigital.net>
-0 string FLV\x01 Macromedia Flash Video
-!:mime video/x-flv
-
-#
-# Yosu Gomez
-0 string AGD2\xbe\xb8\xbb\xcd\x00 Macromedia Freehand 7 Document
-0 string AGD3\xbe\xb8\xbb\xcc\x00 Macromedia Freehand 8 Document
-# From Dave Wilson
-0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document
-
-#------------------------------------------------------------------------------
-# $File: fonts,v 1.27 2014/04/30 21:41:02 christos Exp $
-# fonts: file(1) magic for font data
-#
-0 search/1 FONT ASCII vfont text
-0 short 0436 Berkeley vfont data
-0 short 017001 byte-swapped Berkeley vfont data
-
-# PostScript fonts (must precede "printer" entries), quinlan at yggdrasil.com
-0 string %!PS-AdobeFont-1. PostScript Type 1 font text
->20 string >\0 (%s)
-6 string %!PS-AdobeFont-1. PostScript Type 1 font program data
-0 string %!FontType1 PostScript Type 1 font program data
-6 string %!FontType1 PostScript Type 1 font program data
-0 string %!PS-Adobe-3.0\ Resource-Font PostScript Type 1 font text
-
-# X11 font files in SNF (Server Natural Format) format
-# updated by Joerg Jenderek at Feb 2013
-# http://computer-programming-forum.com/51-perl/8f22fb96d2e34bab.htm
-0 belong 00000004 X11 SNF font data, MSB first
-#>104 belong 00000004 X11 SNF font data, MSB first
-!:mime application/x-font-sfn
-# GRR: line below too general as it catches also Xbase index file t3-CHAR.NDX
-0 lelong 00000004
->104 lelong 00000004 X11 SNF font data, LSB first
-!:mime application/x-font-sfn
-
-# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan at yggdrasil.com)
-0 search/1 STARTFONT\ X11 BDF font text
-
-# X11 fonts, from Daniel Quinlan (quinlan at yggdrasil.com)
-# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
-0 string \001fcp X11 Portable Compiled Font data
->12 byte 0x02 \b, LSB first
->12 byte 0x0a \b, MSB first
-0 string D1.0\015 X11 Speedo font data
-
-#------------------------------------------------------------------------------
-# FIGlet fonts and controlfiles
-# From figmagic supplied with Figlet version 2.2
-# "David E. O'Brien" <obrien at FreeBSD.ORG>
-0 string flf FIGlet font
->3 string >2a version %-2.2s
-0 string flc FIGlet controlfile
->3 string >2a version %-2.2s
-
-# libGrx graphics lib fonts, from Albert Cahalan (acahalan at cs.uml.edu)
-# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++
-0 belong 0x14025919 libGrx font data,
->8 leshort x %dx
->10 leshort x \b%d
->40 string x %s
-# Misc. DOS VGA fonts, from Albert Cahalan (acahalan at cs.uml.edu)
-0 belong 0xff464f4e DOS code page font data collection
-7 belong 0x00454741 DOS code page font data
-7 belong 0x00564944 DOS code page font data (from Linux?)
-4098 string DOSFONT DOSFONT2 encrypted font data
-
-# downloadable fonts for browser (prints type) anthon at mnt.org
-0 string PFR1 PFR1 font
->102 string >0 \b: %s
-
-# True Type fonts
-0 string \000\001\000\000\000 TrueType font data
-!:mime application/x-font-ttf
-
-0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
-0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font
-
-# TrueType/OpenType font collections (.ttc)
-# http://www.microsoft.com/typography/otspec/otff.htm
-0 string ttcf TrueType font collection data
->4 belong 0x00010000 \b, 1.0
->>8 belong >0 \b, %d fonts
->4 belong 0x00020000 \b, 2.0
->>8 belong >0 \b, %d fonts
-# 0x44454947 = 'DSIG'
->>>16 belong 0x44534947 \b, digitally signed
-
-# Opentype font data from Avi Bercovich
-0 string OTTO OpenType font data
-!:mime application/vnd.ms-opentype
-
-# Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
-0 string SplineFontDB: Spline Font Database
-!:mime application/vnd.font-fontforge-sfd
->14 string x version %s
-
-# EOT
-34 string LP Embedded OpenType (EOT)
-!:mime application/vnd.ms-fontobject
-
-# Web Open Font Format (.woff)
-# http://www.w3.org/TR/WOFF/
-0 string wOFF Web Open Font Format
->4 belong x \b, flavor %d
->8 belong x \b, length %d
->20 beshort x \b, version %d
->22 beshort x \b.%d
-
-#------------------------------------------------------------------------------
-# $File: fortran,v 1.8 2014/06/03 19:01:34 christos Exp $
-# FORTRAN source
-0 regex/100l \^[Cc][\ \t] FORTRAN program
-!:mime text/x-fortran
-!:strength - 5
-
-#------------------------------------------------------------------------------
-# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $
-# frame: file(1) magic for FrameMaker files
-#
-# This stuff came on a FrameMaker demo tape, most of which is
-# copyright, but this file is "published" as witness the following:
-#
-# Note that this is the Framemaker Maker Interchange Format, not the
-# Normal format which would be application/vnd.framemaker.
-#
-0 string \<MakerFile FrameMaker document
-!:mime application/x-mif
->11 string 5.5 (5.5
->11 string 5.0 (5.0
->11 string 4.0 (4.0
->11 string 3.0 (3.0
->11 string 2.0 (2.0
->11 string 1.0 (1.0
->14 byte x %c)
-0 string \<MIFFile FrameMaker MIF (ASCII) file
-!:mime application/x-mif
->9 string 4.0 (4.0)
->9 string 3.0 (3.0)
->9 string 2.0 (2.0)
->9 string 1.0 (1.x)
-0 search/1 \<MakerDictionary FrameMaker Dictionary text
-!:mime application/x-mif
->17 string 3.0 (3.0)
->17 string 2.0 (2.0)
->17 string 1.0 (1.x)
-0 string \<MakerScreenFont FrameMaker Font file
-!:mime application/x-mif
->17 string 1.01 (%s)
-0 string \<MML FrameMaker MML file
-!:mime application/x-mif
-0 string \<BookFile FrameMaker Book file
-!:mime application/x-mif
->10 string 3.0 (3.0
->10 string 2.0 (2.0
->10 string 1.0 (1.0
->13 byte x %c)
-# XXX - this book entry should be verified, if you find one, uncomment this
-#0 string \<Book\ FrameMaker Book (ASCII) file
-#!:mime application/x-mif
-#>6 string 3.0 (3.0)
-#>6 string 2.0 (2.0)
-#>6 string 1.0 (1.0)
-0 string \<Maker Intermediate Print File FrameMaker IPL file
-!:mime application/x-mif
-
-#------------------------------------------------------------------------------
-# $File: freebsd,v 1.7 2009/09/19 16:28:09 christos Exp $
-# freebsd: file(1) magic for FreeBSD objects
-#
-# All new-style FreeBSD magic numbers are in host byte order (i.e.,
-# little-endian on x86).
-#
-# XXX - this comes from the file "freebsd" in a recent FreeBSD version of
-# "file"; it, and the NetBSD stuff in "netbsd", appear to use different
-# schemes for distinguishing between executable images, shared libraries,
-# and object files.
-#
-# FreeBSD says:
-#
-# Regardless of whether it's pure, demand-paged, or none of the
-# above:
-#
-# if the entry point is < 4096, then it's a shared library if
-# the "has run-time loader information" bit is set, and is
-# position-independent if the "is position-independent" bit
-# is set;
-#
-# if the entry point is >= 4096 (or >4095, same thing), then it's
-# an executable, and is dynamically-linked if the "has run-time
-# loader information" bit is set.
-#
-# On x86, NetBSD says:
-#
-# If it's neither pure nor demand-paged:
-#
-# if it has the "has run-time loader information" bit set, it's
-# a dynamically-linked executable;
-#
-# if it doesn't have that bit set, then:
-#
-# if it has the "is position-independent" bit set, it's
-# position-independent;
-#
-# if the entry point is non-zero, it's an executable, otherwise
-# it's an object file.
-#
-# If it's pure:
-#
-# if it has the "has run-time loader information" bit set, it's
-# a dynamically-linked executable, otherwise it's just an
-# executable.
-#
-# If it's demand-paged:
-#
-# if it has the "has run-time loader information" bit set,
-# then:
-#
-# if the entry point is < 4096, it's a shared library;
-#
-# if the entry point is = 4096 or > 4096 (i.e., >= 4096),
-# it's a dynamically-linked executable);
-#
-# if it doesn't have the "has run-time loader information" bit
-# set, then it's just an executable.
-#
-# (On non-x86, NetBSD does much the same thing, except that it uses
-# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
-# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
-# had 8K pages; dunno about MIPS.)
-#
-# I suspect the two will differ only in perverse and uninteresting cases
-# ("shared" libraries that aren't demand-paged and whose pages probably
-# won't actually be shared, executables with entry points <4096).
-#
-# I leave it to those more familiar with FreeBSD and NetBSD to figure out
-# what the right answer is (although using ">4095", FreeBSD-style, is
-# probably better than separately checking for "=4096" and ">4096",
-# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged
-# executables using the NetBSD technique.)
-#
-0 lelong&0377777777 041400407 FreeBSD/i386
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-0 lelong&0377777777 041400410 FreeBSD/i386 pure
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-0 lelong&0377777777 041400413 FreeBSD/i386 demand paged
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged
->20 lelong <4096
->>3 byte&0xC0 &0x80 shared library
->>3 byte&0xC0 0x40 PIC object
->>3 byte&0xC0 0x00 object
->20 lelong >4095
->>3 byte&0x80 0x80 dynamically linked executable
->>3 byte&0x80 0x00 executable
->16 lelong >0 not stripped
-
-# XXX gross hack to identify core files
-# cores start with a struct tss; we take advantage of the following:
-# byte 7: highest byte of the kernel stack pointer, always 0xfe
-# 8/9: kernel (ring 0) ss value, always 0x0010
-# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
-# 28: low order byte of the current PTD entry, always 0 since the
-# PTD is page-aligned
-#
-7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file
->1039 string >\0 from '%s'
-
-# /var/run/ld.so.hints
-# What are you laughing about?
-0 lelong 011421044151 ld.so hints file (Little Endian
->4 lelong >0 \b, version %d)
->4 belong <1 \b)
-0 belong 011421044151 ld.so hints file (Big Endian
->4 belong >0 \b, version %d)
->4 belong <1 \b)
-
-#
-# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities
-#
-0 string SCRSHOT_ scrshot(1) screenshot,
->8 byte x version %d,
->9 byte 2 %d bytes in header,
->>10 byte x %d chars wide by
->>11 byte x %d chars high
-
-#------------------------------------------------------------------------------
-# $File: fsav,v 1.13 2013/03/25 17:18:47 christos Exp $
-# fsav: file(1) magic for datafellows fsav virus definition files
-# Anthon van der Neut (anthon at mnt.org)
-
-# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def}
-0 beshort 0x1575 fsav macro virus signatures
->8 leshort >0 (%d-
->11 byte >0 \b%02d-
->10 byte >0 \b%02d)
-# ftp://ftp.f-prot.com/pub/sign.zip
-#10 ubyte <12
-#>9 ubyte <32
-#>>8 ubyte 0x0a
-#>>>12 ubyte 0x07
-#>>>>11 uleshort >0 fsav DOS/Windows virus signatures (%d-
-#>>>>10 byte 0 \b01-
-#>>>>10 byte 1 \b02-
-#>>>>10 byte 2 \b03-
-#>>>>10 byte 3 \b04-
-#>>>>10 byte 4 \b05-
-#>>>>10 byte 5 \b06-
-#>>>>10 byte 6 \b07-
-#>>>>10 byte 7 \b08-
-#>>>>10 byte 8 \b09-
-#>>>>10 byte 9 \b10-
-#>>>>10 byte 10 \b11-
-#>>>>10 byte 11 \b12-
-#>>>>9 ubyte >0 \b%02d)
-# ftp://ftp.f-prot.com/pub/sign2.zip
-#0 ubyte 0x62
-#>1 ubyte 0xF5
-#>>2 ubyte 0x1
-#>>>3 ubyte 0x1
-#>>>>4 ubyte 0x0e
-#>>>>>13 ubyte >0 fsav virus signatures
-#>>>>>>11 ubyte x size 0x%02x
-#>>>>>>12 ubyte x \b%02x
-#>>>>>>13 ubyte x \b%02x bytes
-
-# Joerg Jenderek: joerg dot jenderek at web dot de
-# http://www.clamav.net/doc/latest/html/node45.html
-# .cvd files start with a 512 bytes colon separated header
-# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime
-# + gzipped tarball files
-0 string ClamAV-VDB:
->11 string >\0 Clam AntiVirus database %-.23s
->>34 string :
->>>35 string !: \b, version
->>>>35 string x \b%-.1s
->>>>>36 string !:
->>>>>>36 string x \b%-.1s
->>>>>>>37 string !:
->>>>>>>>37 string x \b%-.1s
->>>>>>>>>38 string !:
->>>>>>>>>>38 string x \b%-.1s
->512 string \037\213 \b, gzipped
->769 string ustar\0 \b, tarred
-
-# Type: Grisoft AVG AntiVirus
-# From: David Newgas <david at newgas.net>
-0 string AVG7_ANTIVIRUS_VAULT_FILE AVG 7 Antivirus vault file data
-
-0 string X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR
->33 string -STANDARD-ANTIVIRUS-TEST-FILE!$H+H* EICAR virus test files
-
-#------------------------------------------------------------------------------
-# $File: fusecompress,v 1.2 2011/08/08 09:05:55 christos Exp $
-# fusecompress: file(1) magic for fusecompress
-0 string \037\135\211 FuseCompress(ed) data
->3 byte 0x00 (none format)
->3 byte 0x01 (bz2 format)
->3 byte 0x02 (gz format)
->3 byte 0x03 (lzo format)
->3 byte 0x04 (xor format)
->3 byte >0x04 (unknown format)
->4 long x uncompressed size: %d
-
-#------------------------------------------------------------------------------
-# $File: games,v 1.14 2014/04/30 21:41:02 christos Exp $
-# games: file(1) for games
-
-# Fabio Bonelli <fabiobonelli at libero.it>
-# Quake II - III data files
-0 string IDP2 Quake II 3D Model file,
->20 long x %u skin(s),
->8 long x (%u x
->12 long x %u),
->40 long x %u frame(s),
->16 long x Frame size %u bytes,
->24 long x %u vertices/frame,
->28 long x %u texture coordinates,
->32 long x %u triangles/frame
-
-0 string IBSP Quake
->4 long 0x26 II Map file (BSP)
->4 long 0x2E III Map file (BSP)
-
-0 string IDS2 Quake II SP2 sprite file
-
-#---------------------------------------------------------------------------
-# Doom and Quake
-# submitted by Nicolas Patrois
-
-0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo
-# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01
-
-24 string LxD\ 203 Linuxdoom save
->0 string x , name=%s
->44 string x , world=%s
-
-# Quake
-
-0 string PACK Quake I or II world or extension
->8 lelong >0 \b, %d entries
-
-#0 string -1\x0a Quake I demo
-#>30 string x version %.4s
-#>61 string x level %s
-
-#0 string 5\x0a Quake I save
-
-# The levels
-
-# Quake 1
-
-0 string 5\x0aIntroduction Quake I save: start Introduction
-0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex
-0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned
-0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis
-0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto
-0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret)
-0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep
-0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon
-0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon
-0 string 5\x0athe_Installation Quake I save: e2m1 The installation
-0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel
-0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!)
-0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret)
-0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress
-0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse
-0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette
-0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central
-0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin
-0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror
-0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight
-0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret)
-0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels
-0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment
-0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system
-0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair
-0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine
-0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate
-0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium
-0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret)
-0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze
-0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony
-0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit
-
-# Quake DeathMatch levels
-
-0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths
-0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis
-0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base
-0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place
-0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern
-0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone
-
-# Scourge of Armagon
-
-0 string 5\x0aCommand_HQ Quake I save: start Command HQ
-0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station
-0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility
-0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret)
-0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine
-0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility
-0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms
-0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret)
-0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral
-0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs
-0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt
-0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep
-0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment
-0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium
-0 string 5\x0aLimbo Quake I save: hip3m3 Limbo
-0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret)
-0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet
-0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair
-
-# Malice
-
-0 string 5\x0aThe_Academy Quake I save: start The academy
-0 string 5\x0aThe_Lab Quake I save: d1 The lab
-0 string 5\x0aArea_33 Quake I save: d1b Area 33
-0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions
-0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret)
-0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
-0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice
-0 string 5\x0aArea44 Quake I save: d1c Area 44
-0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers
-0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life
-0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood
-0 string 5\x0aThe_Flood Quake I save: d5 The flood
-0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant
-0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant
-0 string 5\x0aThe_Foundry Quake I save: d7b The foundry
-0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base
-0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base
-0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories
-0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive
-0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ
-0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown!
-
-# Malice DeathMatch levels
-
-0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct
-0 string 5\x0aSub_Station Quake I save: ddm2 Sub station
-0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights!
-0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa
-0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse
-0 string 5\x0aDOMINO Quake I save: ddm6 Domino
-0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder
-
-
-0 string MComprHD MAME CHD compressed hard disk image,
->12 belong x version %u
-
-# doom - submitted by Jon Dowland
-
-0 string =IWAD doom main IWAD data
->4 lelong x containing %d lumps
-0 string =PWAD doom patch PWAD data
->4 lelong x containing %d lumps
-
-# Build engine group files (Duke Nukem, Shadow Warrior, ...)
-# Extension: .grp
-# Created by: "Ganael Laplanche" <ganael.laplanche at martymac.org>
-0 string KenSilverman Build engine group file
->12 lelong x containing %d files
-
-# Summary: Warcraft 3 save
-# Extension: .w3g
-# Created by: "Nelson A. de Oliveira" <naoliv at gmail.com>
-0 string Warcraft\ III\ recorded\ game %s
-
-
-# Summary: Warcraft 3 map
-# Extension: .w3m
-# Created by: "Nelson A. de Oliveira" <naoliv at gmail.com>
-0 string HM3W Warcraft III map file
-
-
-# Summary: SGF Smart Game Format
-# Extension: .sgf
-# Reference: http://www.red-bean.com/sgf/
-# Created by: Eduardo Sabbatella <eduardo_sabbatella at yahoo.com.ar>
-# Modified by (1): Abel Cheung (regex, more game format)
-# FIXME: Some games don't have GM (game type)
-0 regex \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format
->2 search/0x200/b GM[
->>&0 string 1] (Go)
->>&0 string 2] (Othello)
->>&0 string 3] (chess)
->>&0 string 4] (Gomoku+Renju)
->>&0 string 5] (Nine Men's Morris)
->>&0 string 6] (Backgammon)
->>&0 string 7] (Chinese chess)
->>&0 string 8] (Shogi)
->>&0 string 9] (Lines of Action)
->>&0 string 10] (Ataxx)
->>&0 string 11] (Hex)
->>&0 string 12] (Jungle)
->>&0 string 13] (Neutron)
->>&0 string 14] (Philosopher's Football)
->>&0 string 15] (Quadrature)
->>&0 string 16] (Trax)
->>&0 string 17] (Tantrix)
->>&0 string 18] (Amazons)
->>&0 string 19] (Octi)
->>&0 string 20] (Gess)
->>&0 string 21] (Twixt)
->>&0 string 22] (Zertz)
->>&0 string 23] (Plateau)
->>&0 string 24] (Yinsh)
->>&0 string 25] (Punct)
->>&0 string 26] (Gobblet)
->>&0 string 27] (hive)
->>&0 string 28] (Exxit)
->>&0 string 29] (Hnefatal)
->>&0 string 30] (Kuba)
->>&0 string 31] (Tripples)
->>&0 string 32] (Chase)
->>&0 string 33] (Tumbling Down)
->>&0 string 34] (Sahara)
->>&0 string 35] (Byte)
->>&0 string 36] (Focus)
->>&0 string 37] (Dvonn)
->>&0 string 38] (Tamsk)
->>&0 string 39] (Gipf)
->>&0 string 40] (Kropki)
-
-##############################################
-# NetImmerse/Gamebryo game engine entries
-
-# Summary: Gamebryo game engine file
-# Extension: .nif, .kf
-# Created by: Abel Cheung <abelcheung at gmail.com>
-0 string Gamebryo\ File\ Format,\ Version\ Gamebryo game engine file
->&0 regex [0-9a-z.]+ \b, version %s
-
-# Summary: Gamebryo game engine file
-# Extension: .kfm
-# Created by: Abel Cheung <abelcheung at gmail.com>
-0 string ;Gamebryo\ KFM\ File\ Version\ Gamebryo game engine animation File
->&0 regex [0-9a-z.]+ \b, version %s
-
-# Summary: NetImmerse game engine file
-# Extension .nif
-# Created by: Abel Cheung <abelcheung at gmail.com>
-0 string NetImmerse\ File\ Format,\ Versio
->&0 string n\ NetImmerse game engine file
->>&0 regex [0-9a-z.]+ \b, version %s
-
-# Type: SGF Smart Game Format
-# URL: http://www.red-bean.com/sgf/
-# From: Eduardo Sabbatella <eduardo_sabbatella at yahoo.com.ar>
-2 regex/c \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format
->2 regex/c GM\\[1\\] - Go Game
->2 regex/c GM\\[6\\] - BackGammon Game
->2 regex/c GM\\[11\\] - Hex Game
->2 regex/c GM\\[18\\] - Amazons Game
->2 regex/c GM\\[19\\] - Octi Game
->2 regex/c GM\\[20\\] - Gess Game
->2 regex/c GM\\[21\\] - twix Game
-
-# Epic Games/Unreal Engine Package
-#
-0 lelong 0x9E2A83C1 Unreal Engine Package,
->4 leshort x version: %i
->12 lelong !0 \b, names: %i
->28 lelong !0 \b, imports: %i
->20 lelong !0 \b, exports: %i
-
-#------------------------------------------------------------------------------
-# $File: gcc,v 1.4 2009/09/19 16:28:09 christos Exp $
-# gcc: file(1) magic for GCC special files
-#
-0 string gpch GCC precompiled header
-
-# The version field is annoying. It's 3 characters, not zero-terminated.
->5 byte x (version %c
->6 byte x \b%c
->7 byte x \b%c)
-
-# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
->4 byte 67 for C
->4 byte 111 for Objective C
->4 byte 43 for C++
->4 byte 79 for Objective C++
-
-#------------------------------------------------------------------------------
-# $File: geo,v 1.3 2013/01/04 00:47:02 christos Exp $
-# Geo- files from Kurt Schwehr <schwehr at ccom.unh.edu>
-
-######################################################################
-#
-# Acoustic Doppler Current Profilers (ADCP)
-#
-######################################################################
-
-0 beshort 0x7f7f RDI Acoustic Doppler Current Profiler (ADCP)
-
-######################################################################
-#
-# Metadata
-#
-######################################################################
-
-0 string Identification_Information FGDC ASCII metadata
-
-######################################################################
-#
-# Seimsic / Subbottom
-#
-######################################################################
-
-# Knudsen subbottom chirp profiler - Binary File Format: B9
-# KEB D409-03167 V1.75 Huffman
-0 string KEB\ Knudsen seismic KEL binary (KEB) -
->4 regex [-A-Z0-9]* Software: %s
->>&1 regex V[0-9]*\.[0-9]* version %s
-
-######################################################################
-#
-# LIDAR - Laser altimetry or bathy
-#
-######################################################################
-
-
-# Caris LIDAR format for LADS comes as two parts... ascii location file and binary waveform data
-0 string HCA LADS Caris Ascii Format (CAF) bathymetric lidar
->4 regex [0-9]*\.[0-9]* version %s
-
-0 string HCB LADS Caris Binary Format (CBF) bathymetric lidar waveform data
->3 byte x version %d .
->4 byte x %d
-
-
-######################################################################
-#
-# MULTIBEAM SONARS http://www.ldeo.columbia.edu/res/pi/MB-System/formatdoc/
-#
-######################################################################
-
-# GeoAcoustics - GeoSwath Plus
-4 beshort 0x2002 GeoSwath RDF
-0 string Start:- GeoSwatch auf text file
-
-# Seabeam 2100
-# mbsystem code mb41
-0 string SB2100 SeaBeam 2100 multibeam sonar
-0 string SB2100DR SeaBeam 2100 DR multibeam sonar
-0 string SB2100PR SeaBeam 2100 PR multibeam sonar
-
-# This corresponds to MB-System format 94, L-3/ELAC/SeaBeam XSE vendor
-# format. It is the format of our upgraded SeaBeam 2112 on R/V KNORR.
-0 string $HSF XSE multibeam
-
-# mb121 http://www.saic.com/maritime/gsf/
-8 string GSF-v SAIC generic sensor format (GSF) sonar data,
->&0 regex [0-9]*\.[0-9]* version %s
-
-# MGD77 - http://www.ngdc.noaa.gov/mgg/dat/geodas/docs/mgd77.htm
-# mb161
-9 string MGD77 MGD77 Header, Marine Geophysical Data Exchange Format
-
-# MBSystem processing caches the mbinfo output
-1 string Swath\ Data\ File: mbsystem info cache
-
-# Caris John Hughes Clark format
-0 string HDCS Caris multibeam sonar related data
-1 string Start/Stop\ parameter\ header: Caris ASCII project summary
-
-######################################################################
-#
-# Visualization and 3D modeling
-#
-######################################################################
-
-# IVS - IVS3d.com Tagged Data Represetation
-0 string %%\ TDR\ 2.0 IVS Fledermaus TDR file
-
-# http://www.ecma-international.org/publications/standards/Ecma-363.htm
-# 3D in PDFs
-0 string U3D ECMA-363, Universal 3D
-
-######################################################################
-#
-# Support files
-#
-######################################################################
-
-# https://midas.psi.ch/elog/
-0 string $@MID@$ elog journal entry
-
-# Geospatial Designs http://www.geospatialdesigns.com/surfer6_format.htm
-0 string DSBB Surfer 6 binary grid file
->4 leshort x \b, %d
->6 leshort x \bx%d
->8 ledouble x \b, minx=%g
->16 ledouble x \b, maxx=%g
->24 ledouble x \b, miny=%g
->32 ledouble x \b, maxy=%g
->40 ledouble x \b, minz=%g
->48 ledouble x \b, maxz=%g
-
-
-#------------------------------------------------------------------------------
-# $File: geos,v 1.4 2009/09/19 16:28:09 christos Exp $
-# GEOS files (Vidar Madsen, vidar at gimp.org)
-# semi-commonly used in embedded and handheld systems.
-0 belong 0xc745c153 GEOS
->40 byte 1 executable
->40 byte 2 VMFile
->40 byte 3 binary
->40 byte 4 directory label
->40 byte <1 unknown
->40 byte >4 unknown
->4 string >\0 \b, name "%s"
-#>44 short x \b, version %d
-#>46 short x \b.%d
-#>48 short x \b, rev %d
-#>50 short x \b.%d
-#>52 short x \b, proto %d
-#>54 short x \br%d
-#>168 string >\0 \b, copyright "%s"
-
-#------------------------------------------------------------------------------
-# $File: gimp,v 1.9 2014/04/30 21:41:02 christos Exp $
-# GIMP Gradient: file(1) magic for the GIMP's gradient data files (.ggr)
-# by Federico Mena <federico at nuclecu.unam.mx>
-
-0 string/t GIMP\ Gradient GIMP gradient data
-
-# GIMP palette (.gpl)
-# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 string/t GIMP\ Palette GIMP palette data
-
-#------------------------------------------------------------------------------
-# XCF: file(1) magic for the XCF image format used in the GIMP (.xcf) developed
-# by Spencer Kimball and Peter Mattis
-# ('Bucky' LaDieu, nega at vt.edu)
-
-0 string gimp\ xcf GIMP XCF image data,
-!:mime image/x-xcf
->9 string file version 0,
->9 string v version
->>10 string >\0 %s,
->14 belong x %u x
->18 belong x %u,
->22 belong 0 RGB Color
->22 belong 1 Greyscale
->22 belong 2 Indexed Color
->22 belong >2 Unknown Image Type.
-
-#------------------------------------------------------------------------------
-# XCF: file(1) magic for the patterns used in the GIMP (.pat), developed
-# by Spencer Kimball and Peter Mattis
-# ('Bucky' LaDieu, nega at vt.edu)
-
-20 string GPAT GIMP pattern data,
->24 string x %s
-
-#------------------------------------------------------------------------------
-# XCF: file(1) magic for the brushes used in the GIMP (.gbr), developed
-# by Spencer Kimball and Peter Mattis
-# ('Bucky' LaDieu, nega at vt.edu)
-
-20 string GIMP GIMP brush data
-
-# GIMP Curves File
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-0 string #\040GIMP\040Curves\040File GIMP curve file
-
-#------------------------------------------------------------------------------
-# $File: gnome,v 1.5 2014/04/30 21:41:02 christos Exp $
-# GNOME related files
-
-# Contributed by Josh Triplett
-# FIXME: Could be simplified if pstring supported two-byte counts
-0 string GnomeKeyring\n\r\0\n GNOME keyring
->&0 ubyte 0 \b, major version 0
->>&0 ubyte 0 \b, minor version 0
->>>&0 ubyte 0 \b, crypto type 0 (AES)
->>>&0 ubyte >0 \b, crypto type %u (unknown)
->>>&1 ubyte 0 \b, hash type 0 (MD5)
->>>&1 ubyte >0 \b, hash type %u (unknown)
->>>&2 ubelong 0xFFFFFFFF \b, name NULL
->>>&2 ubelong !0xFFFFFFFF
->>>>&-4 ubelong >255 \b, name too long for file's pstring type
->>>>&-4 ubelong <256
->>>>>&-1 pstring x \b, name "%s"
->>>>>>&0 ubeqdate x \b, last modified %s
->>>>>>&8 ubeqdate x \b, created %s
->>>>>>&16 ubelong &1
->>>>>>>&0 ubelong x \b, locked if idle for %u seconds
->>>>>>&16 ubelong ^1 \b, not locked if idle
->>>>>>&24 ubelong x \b, hash iterations %u
->>>>>>&28 ubequad x \b, salt %llu
->>>>>>&52 ubelong x \b, %u item(s)
-
-# From: Alex Beregszaszi <alex at fsn.hu>
-4 string gtktalog GNOME Catalogue (gtktalog)
->13 string >\0 version %s
-
-# Summary: GStreamer binary registry
-# Extension: .bin
-# Submitted by: Josh Triplett <josh at joshtriplett.org>
-0 belong 0xc0def00d GStreamer binary registry
->4 string x \b, version %s
-
-# GVariant Database file
-# By Elan Ruusamae <glen at delfi.ee>
-# https://github.com/GNOME/gvdb/blob/master/gvdb-format.h
-# It's always "GVariant", it's byte swapped on incompatible archs
-# See https://github.com/GNOME/gvdb/blob/master/gvdb-builder.c
-# file_builder_serialise()
-# http://developer.gnome.org/glib/2.34/glib-GVariant.html#GVariant
-0 string GVariant GVariant Database file,
-# version is never filled. probably future extension
->8 lelong x version %d
-# not sure are these usable, so commented out
-#>>16 lelong x start %d,
-#>>>20 lelong x end %d
-
-# G-IR database made by gobject-introspect toolset,
-# http://live.gnome.org/GObjectIntrospection
-0 string GOBJ\nMETADATA\r\n\032 G-IR binary database
->16 byte x \b, v%d
->17 byte x \b.%d
->20 leshort x \b, %d entries
->22 leshort x \b/%d local
-
-#------------------------------------------------------------------------------
-# $File: gnu,v 1.15 2014/02/06 14:21:02 christos Exp $
-# gnu: file(1) magic for various GNU tools
-#
-# GNU nlsutils message catalog file format
-#
-# GNU message catalog (.mo and .gmo files)
-
-0 string \336\22\4\225 GNU message catalog (little endian),
->6 leshort x revision %d.
->4 leshort >0 \b%d,
->>8 lelong x %d messages,
->>36 lelong x %d sysdep messages
->4 leshort =0 \b%d,
->>8 lelong x %d messages
-
-0 string \225\4\22\336 GNU message catalog (big endian),
->4 beshort x revision %d.
->6 beshort >0 \b%d,
->>8 belong x %d messages,
->>36 belong x %d sysdep messages
->6 beshort =0 \b%d,
->>8 belong x %d messages
-
-
-# GnuPG
-# The format is very similar to pgp
-0 string \001gpg GPG key trust database
->4 byte x version %d
-# Note: magic.mime had 0x8501 for the next line instead of 0x8502
-0 beshort 0x8502 GPG encrypted data
-!:mime text/PGP # encoding: data
-
-# This magic is not particularly good, as the keyrings don't have true
-# magic. Nevertheless, it covers many keyrings.
-0 beshort 0x9901 GPG key public ring
-!:mime application/x-gnupg-keyring
-
-# Symmetric encryption
-0 leshort 0x0d8c
->4 leshort 0x0203
->>2 leshort 0x0204 GPG symmetrically encrypted data (3DES cipher)
->>2 leshort 0x0304 GPG symmetrically encrypted data (CAST5 cipher)
->>2 leshort 0x0404 GPG symmetrically encrypted data (BLOWFISH cipher)
->>2 leshort 0x0704 GPG symmetrically encrypted data (AES cipher)
->>2 leshort 0x0804 GPG symmetrically encrypted data (AES192 cipher)
->>2 leshort 0x0904 GPG symmetrically encrypted data (AES256 cipher)
->>2 leshort 0x0a04 GPG symmetrically encrypted data (TWOFISH cipher)
->>2 leshort 0x0b04 GPG symmetrically encrypted data (CAMELLIA128 cipher)
->>2 leshort 0x0c04 GPG symmetrically encrypted data (CAMELLIA192 cipher)
->>2 leshort 0x0d04 GPG symmetrically encrypted data (CAMELLIA256 cipher)
-
-
-# GnuPG Keybox file
-# <http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=kbx/keybox-blob.c;hb=HEAD>
-# From: Philipp Hahn <hahn at univention.de>
-0 belong 32
->4 byte 1
->>8 string KBXf GPG keybox database
->>>5 byte 1 version %d
->>>16 bedate x \b, created-at %s
->>>20 bedate x \b, last-maintained %s
-
-
-# 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 Gnumeric spreadsheet
-
-# From: James Youngman <jay at gnu.org>
-# gnu find magic
-0 string \0LOCATE GNU findutils locate database data
->7 string >\0 \b, format %s
->7 string 02 \b (frcode)
-
-# Files produced by GNU gettext
-0 long 0xDE120495 GNU-format message catalog data
-0 long 0x950412DE GNU-format message catalog data
-
-# gettext message catalogue
-0 regex \^msgid\ GNU gettext message catalogue text
-!:mime text/x-po
-
-#------------------------------------------------------------------------------
-# $File: gnumeric,v 1.4 2009/09/19 16:28:09 christos Exp $
-# gnumeric: file(1) magic for 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 Gnumeric spreadsheet
-!:mime application/x-gnumeric
-
-#------------------------------------------------------------------------------
-# $File: gpt,v 1.3 2014/04/30 21:41:02 christos Exp $
-#
-# GPT Partition table patterns.
-# Author: Rogier Goossens (goossens.rogier at gmail.com)
-# Note that a GPT-formatted disk must contain an MBR as well.
-#
-
-# The initial segment (up to >>>>>>>>422) was copied from the X86
-# partition table code (aka MBR).
-# This is kept separate, so that MBR partitions are not reported as well.
-# (use -k if you do want them as well)
-
-# First, detect the MBR partiton table
-# If more than one GPT protective MBR partition exists, don't print anything
-# (the other MBR detection code will then just print the MBR partition table)
-0x1FE leshort 0xAA55
->3 string !MS
->>3 string !SYSLINUX
->>>3 string !MTOOL
->>>>3 string !NEWLDR
->>>>>5 string !DOS
-# not FAT (32 bit)
->>>>>>82 string !FAT32
-#not Linux kernel
->>>>>>>514 string !HdrS
-#not BeOS
->>>>>>>>422 string !Be\ Boot\ Loader
-# GPT with protective MBR entry in partition 1 (only)
->>>>>>>>>450 ubyte 0xee
->>>>>>>>>>466 ubyte !0xee
->>>>>>>>>>>482 ubyte !0xee
->>>>>>>>>>>>498 ubyte !0xee
-#>>>>>>>>>>>>>446 use gpt-mbr-partition
->>>>>>>>>>>>>(454.l*8192) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
->>>>>>>>>>>>>(454.l*8192) string !EFI\ PART
->>>>>>>>>>>>>>(454.l*4096) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>0 ubyte x of 4096 bytes
->>>>>>>>>>>>>>(454.l*4096) string !EFI\ PART
->>>>>>>>>>>>>>>(454.l*2048) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>0 ubyte x of 2048 bytes
->>>>>>>>>>>>>>>(454.l*2048) string !EFI\ PART
->>>>>>>>>>>>>>>>(454.l*1024) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>0 ubyte x of 1024 bytes
->>>>>>>>>>>>>>>>(454.l*1024) string !EFI\ PART
->>>>>>>>>>>>>>>>>(454.l*512) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>>0 ubyte x of 512 bytes
-# GPT with protective MBR entry in partition 2 (only)
->>>>>>>>>450 ubyte !0xee
->>>>>>>>>>466 ubyte 0xee
->>>>>>>>>>>482 ubyte !0xee
->>>>>>>>>>>>498 ubyte !0xee
-#>>>>>>>>>>>>>462 use gpt-mbr-partition
->>>>>>>>>>>>>(470.l*8192) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
->>>>>>>>>>>>>(470.l*8192) string !EFI\ PART
->>>>>>>>>>>>>>(470.l*4096) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>0 ubyte x of 4096 bytes
->>>>>>>>>>>>>>(470.l*4096) string !EFI\ PART
->>>>>>>>>>>>>>>(470.l*2048) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>0 ubyte x of 2048 bytes
->>>>>>>>>>>>>>>(470.l*2048) string !EFI\ PART
->>>>>>>>>>>>>>>>(470.l*1024) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>0 ubyte x of 1024 bytes
->>>>>>>>>>>>>>>>(470.l*1024) string !EFI\ PART
->>>>>>>>>>>>>>>>>(470.l*512) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>>0 ubyte x of 512 bytes
-# GPT with protective MBR entry in partition 3 (only)
->>>>>>>>>450 ubyte !0xee
->>>>>>>>>>466 ubyte !0xee
->>>>>>>>>>>482 ubyte 0xee
->>>>>>>>>>>>498 ubyte !0xee
-#>>>>>>>>>>>>>478 use gpt-mbr-partition
->>>>>>>>>>>>>(486.l*8192) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
->>>>>>>>>>>>>(486.l*8192) string !EFI\ PART
->>>>>>>>>>>>>>(486.l*4096) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>0 ubyte x of 4096 bytes
->>>>>>>>>>>>>>(486.l*4096) string !EFI\ PART
->>>>>>>>>>>>>>>(486.l*2048) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>0 ubyte x of 2048 bytes
->>>>>>>>>>>>>>>(486.l*2048) string !EFI\ PART
->>>>>>>>>>>>>>>>(486.l*1024) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>0 ubyte x of 1024 bytes
->>>>>>>>>>>>>>>>(486.l*1024) string !EFI\ PART
->>>>>>>>>>>>>>>>>(486.l*512) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>>0 ubyte x of 512 bytes
-# GPT with protective MBR entry in partition 4 (only)
->>>>>>>>>450 ubyte !0xee
->>>>>>>>>>466 ubyte !0xee
->>>>>>>>>>>482 ubyte !0xee
->>>>>>>>>>>>498 ubyte 0xee
-#>>>>>>>>>>>>>494 use gpt-mbr-partition
->>>>>>>>>>>>>(502.l*8192) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>0 ubyte x of 8192 bytes
->>>>>>>>>>>>>(502.l*8192) string !EFI\ PART
->>>>>>>>>>>>>>(502.l*4096) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>0 ubyte x of 4096 bytes
->>>>>>>>>>>>>>(502.l*4096) string !EFI\ PART
->>>>>>>>>>>>>>>(502.l*2048) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>0 ubyte x of 2048 bytes
->>>>>>>>>>>>>>>(502.l*2048) string !EFI\ PART
->>>>>>>>>>>>>>>>(502.l*1024) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>0 ubyte x of 1024 bytes
->>>>>>>>>>>>>>>>(502.l*1024) string !EFI\ PART
->>>>>>>>>>>>>>>>>(502.l*512) string EFI\ PART GPT partition table
->>>>>>>>>>>>>>>>>>0 use gpt-mbr-type
->>>>>>>>>>>>>>>>>>&-8 use gpt-table
->>>>>>>>>>>>>>>>>>0 ubyte x of 512 bytes
-
-# The following code does GPT detection and processing, including
-# sector size detection.
-# It has to be duplicated above because the top-level pattern
-# (i.e. not called using 'use') must print *something* for file
-# to count it as a match. Text only printed in named patterns is
-# not counted, and causes file to continue, and try and match
-# other patterns.
-#
-# Unfortunately, when assuming sector sizes >=16k, if the sector size
-# happens to be 512 instead, we may find confusing data after the GPT
-# table... If the GPT table has less than 128 entries, this may even
-# happen for assumed sector sizes as small as 4k
-# This could be solved by checking for the presence of the backup GPT
-# header as well, but that makes the logic extremely complex
-##0 name gpt-mbr-partition
-##>(8.l*8192) string EFI\ PART
-##>>(8.l*8192) use gpt-mbr-type
-##>>&-8 use gpt-table
-##>>0 ubyte x of 8192 bytes
-##>(8.l*8192) string !EFI\ PART
-##>>(8.l*4096) string EFI\ PART GPT partition table
-##>>>0 use gpt-mbr-type
-##>>>&-8 use gpt-table
-##>>>0 ubyte x of 4096 bytes
-##>>(8.l*4096) string !EFI\ PART
-##>>>(8.l*2048) string EFI\ PART GPT partition table
-##>>>>0 use gpt-mbr-type
-##>>>>&-8 use gpt-table
-##>>>>0 ubyte x of 2048 bytes
-##>>>(8.l*2048) string !EFI\ PART
-##>>>>(8.l*1024) string EFI\ PART GPT partition table
-##>>>>>0 use gpt-mbr-type
-##>>>>>&-8 use gpt-table
-##>>>>>0 ubyte x of 1024 bytes
-##>>>>(8.l*1024) string !EFI\ PART
-##>>>>>(8.l*512) string EFI\ PART GPT partition table
-##>>>>>>0 use gpt-mbr-type
-##>>>>>>&-8 use gpt-table
-##>>>>>>0 ubyte x of 512 bytes
-
-# Print details of MBR type for a GPT-disk
-# Calling code ensures that there is only one 0xee partition.
-0 name gpt-mbr-type
-# GPT with protective MBR entry in partition 1
->450 ubyte 0xee
->>454 ulelong 1
->>>462 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
->>454 ulelong !1 \b (nonstandard: not at LBA 1)
-# GPT with protective MBR entry in partition 2
->466 ubyte 0xee
->>470 ulelong 1
->>>478 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
->>>>446 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
->>>478 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
->>470 ulelong !1 \b (nonstandard: not at LBA 1)
-# GPT with protective MBR entry in partition 3
->482 ubyte 0xee
->>486 ulelong 1
->>>494 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
->>>>446 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
->>>494 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
->>486 ulelong !1 \b (nonstandard: not at LBA 1)
-# GPT with protective MBR entry in partition 4
->498 ubyte 0xee
->>502 ulelong 1
->>>446 string !\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \b (with hybrid MBR)
->>502 ulelong !1 \b (nonstandard: not at LBA 1)
-
-# Print the information from a GPT partition table structure
-0 name gpt-table
->10 uleshort x \b, version %u
->8 uleshort x \b.%u
->56 ulelong x \b, GUID: %08x
->60 uleshort x \b-%04x
->62 uleshort x \b-%04x
->64 ubeshort x \b-%04x
->66 ubeshort x \b-%04x
->68 ubelong x \b%08x
-#>80 uleshort x \b, %d partition entries
->32 ulequad+1 x \b, disk size: %lld sectors
-
-# In case a GPT data-structure is at LBA 0, report it as well
-# This covers systems which are not GPT-aware, and which show
-# and allow access to the protective partition. This code will
-# detect the contents of such a partition.
-0 string EFI\ PART GPT data structure (nonstandard: at LBA 0)
->0 use gpt-table
->0 ubyte x (sector size unknown)
-
-
-
-#------------------------------------------------------------------------------
-# $File: grace,v 1.4 2009/09/19 16:28:09 christos Exp $
-# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
-#
-# ACE/gr binary
-0 string \000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003 old ACE/gr binary file
->39 byte >0 - version %c
-# ACE/gr ascii
-0 string #\ xvgr\ parameter\ file ACE/gr ascii file
-0 string #\ xmgr\ parameter\ file ACE/gr ascii file
-0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file
-# Grace projects
-0 string #\ Grace\ project\ file Grace project file
->23 string @version\ (version
->>32 byte >0 %c
->>33 string >\0 \b.%.2s
->>35 string >\0 \b.%.2s)
-# ACE/gr fit description files
-0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file
-# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
-
-#------------------------------------------------------------------------------
-# $File: graphviz,v 1.8 2014/06/03 19:01:34 christos Exp $
-# graphviz: file(1) magic for http://www.graphviz.org/
-
-# FIXME: These patterns match too generally. For example, the first
-# line matches a LaTeX file containing the word "graph" (with a {
-# following later) and the second line matches this file.
-#0 regex/100l [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text
-#!:mime text/vnd.graphviz
-#0 regex/100l [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text
-#!:mime text/vnd.graphviz
-
-#------------------------------------------------------------------------------
-# $File: gringotts,v 1.5 2009/09/19 16:28:09 christos Exp $
-# gringotts: file(1) magic for Gringotts
-# http://devel.pluto.linux.it/projects/Gringotts/
-# author: Germano Rizzo <mano at pluto.linux.it>
-#GRG3????Y
-0 string GRG Gringotts data file
-#file format 1
->3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
-#file format 2
->3 string 2 v.2, MCRYPT S2K,
->>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
->>8 byte&0x70 0x10 SERPENT crypt,
->>8 byte&0x70 0x20 TWOFISH crypt,
->>8 byte&0x70 0x30 CAST-256 crypt,
->>8 byte&0x70 0x40 SAFER+ crypt,
->>8 byte&0x70 0x50 LOKI97 crypt,
->>8 byte&0x70 0x60 3DES crypt,
->>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
->>8 byte&0x08 0x00 SHA1 hash,
->>8 byte&0x08 0x08 RIPEMD-160 hash,
->>8 byte&0x04 0x00 ZLib
->>8 byte&0x04 0x04 BZip2
->>8 byte&0x03 0x00 lvl.0
->>8 byte&0x03 0x01 lvl.3
->>8 byte&0x03 0x02 lvl.6
->>8 byte&0x03 0x03 lvl.9
-#file format 3
->3 string 3 v.3, OpenPGP S2K,
->>8 byte&0x70 0x00 RIJNDAEL-128 crypt,
->>8 byte&0x70 0x10 SERPENT crypt,
->>8 byte&0x70 0x20 TWOFISH crypt,
->>8 byte&0x70 0x30 CAST-256 crypt,
->>8 byte&0x70 0x40 SAFER+ crypt,
->>8 byte&0x70 0x50 LOKI97 crypt,
->>8 byte&0x70 0x60 3DES crypt,
->>8 byte&0x70 0x70 RIJNDAEL-256 crypt,
->>8 byte&0x08 0x00 SHA1 hash,
->>8 byte&0x08 0x08 RIPEMD-160 hash,
->>8 byte&0x04 0x00 ZLib
->>8 byte&0x04 0x04 BZip2
->>8 byte&0x03 0x00 lvl.0
->>8 byte&0x03 0x01 lvl.3
->>8 byte&0x03 0x02 lvl.6
->>8 byte&0x03 0x03 lvl.9
-#file format >3
->3 string >3 v.%.1s (unknown details)
-
-#------------------------------------------------------------------------------
-# $File: guile,v 1.1 2011/12/16 17:44:33 christos Exp $
-# Guile file magic from <dalepsmith at gmail.com>
-# http://www.gnu.org/s/guile/
-# http://git.savannah.gnu.org/gitweb/?p=guile.git;f=libguile/_scm.h;hb=HEAD#l250
-
-0 string GOOF---- Guile Object
->8 string LE \b, little endian
->8 string BE \b, big endian
->11 string 4 \b, 32bit
->11 string 8 \b, 64bit
->13 regex .\.. \b, bytecode v%s
-
-#------------------------------------------------------------------------------
-# $File: hitachi-sh,v 1.6 2013/01/29 19:31:33 christos Exp $
-# hitach-sh: file(1) magic for Hitachi Super-H
-#
-# Super-H COFF
-#
-# below test line conflicts with 2nd NTFS filesystem sector
-0 beshort 0x0500 Hitachi SH big-endian COFF
-# 2nd NTFS filesystem sector often starts with 0x05004e00 for unicode string 5 NTLDR
-#0 ubelong&0xFFFFNMPQ 0x0500NMPQ Hitachi SH big-endian COFF
->18 beshort&0x0002 =0x0000 object
->18 beshort&0x0002 =0x0002 executable
->18 beshort&0x0008 =0x0008 \b, stripped
->18 beshort&0x0008 =0x0000 \b, not stripped
-#
-0 leshort 0x0550 Hitachi SH little-endian COFF
->18 leshort&0x0002 =0x0000 object
->18 leshort&0x0002 =0x0002 executable
->18 leshort&0x0008 =0x0008 \b, stripped
->18 leshort&0x0008 =0x0000 \b, not stripped
-
-
-#------------------------------------------------------------------------------
-# $File: hp,v 1.24 2014/04/30 21:41:02 christos Exp $
-# hp: file(1) magic for Hewlett Packard machines (see also "printer")
-#
-# XXX - somebody should figure out whether any byte order needs to be
-# applied to the "TML" stuff; I'm assuming the Apollo stuff is
-# big-endian as it was mostly 68K-based.
-#
-# I think the 500 series was the old stack-based machines, running a
-# UNIX environment atop the "SUN kernel"; dunno whether it was
-# big-endian or little-endian.
-#
-# Daniel Quinlan (quinlan at yggdrasil.com): hp200 machines are 68010 based;
-# hp300 are 68020+68881 based; hp400 are also 68k. The following basic
-# HP magic is useful for reference, but using "long" magic is a better
-# practice in order to avoid collisions.
-#
-# Guy Harris (guy at netapp.com): some additions to this list came from
-# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
-# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
-# "/etc/magic", though, except for the "archive file relocatable library"
-# stuff, and the 68030 and 68040 stuff isn't there at all - are they not
-# used in executables, or have they just not yet updated "/etc/magic"
-# completely?
-#
-# 0 beshort 200 hp200 (68010) BSD binary
-# 0 beshort 300 hp300 (68020+68881) BSD binary
-# 0 beshort 0x20c hp200/300 HP-UX binary
-# 0 beshort 0x20d hp400 (68030) HP-UX binary
-# 0 beshort 0x20e hp400 (68040?) HP-UX binary
-# 0 beshort 0x20b PA-RISC1.0 HP-UX binary
-# 0 beshort 0x210 PA-RISC1.1 HP-UX binary
-# 0 beshort 0x211 PA-RISC1.2 HP-UX binary
-# 0 beshort 0x214 PA-RISC2.0 HP-UX binary
-
-#
-# The "misc" stuff needs a byte order; the archives look suspiciously
-# like the old 177545 archives (0xff65 = 0177545).
-#
-#### Old Apollo stuff
-0 beshort 0627 Apollo m68k COFF executable
->18 beshort ^040000 not stripped
->22 beshort >0 - version %d
-0 beshort 0624 apollo a88k COFF executable
->18 beshort ^040000 not stripped
->22 beshort >0 - version %d
-0 long 01203604016 TML 0123 byte-order format
-0 long 01702407010 TML 1032 byte-order format
-0 long 01003405017 TML 2301 byte-order format
-0 long 01602007412 TML 3210 byte-order format
-#### PA-RISC 1.1
-0 belong 0x02100106 PA-RISC1.1 relocatable object
-0 belong 0x02100107 PA-RISC1.1 executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x02100108 PA-RISC1.1 shared executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0210010b PA-RISC1.1 demand-load executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0210010e PA-RISC1.1 shared library
->96 belong >0 - not stripped
-
-0 belong 0x0210010d PA-RISC1.1 dynamic load library
->96 belong >0 - not stripped
-
-#### PA-RISC 2.0
-0 belong 0x02140106 PA-RISC2.0 relocatable object
-
-0 belong 0x02140107 PA-RISC2.0 executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x02140108 PA-RISC2.0 shared executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0214010b PA-RISC2.0 demand-load executable
->168 belong &0x00000004 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x0214010e PA-RISC2.0 shared library
->96 belong >0 - not stripped
-
-0 belong 0x0214010d PA-RISC2.0 dynamic load library
->96 belong >0 - not stripped
-
-#### 800
-0 belong 0x020b0106 PA-RISC1.0 relocatable object
-
-0 belong 0x020b0107 PA-RISC1.0 executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x020b0108 PA-RISC1.0 shared executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x020b010b PA-RISC1.0 demand-load executable
->168 belong&0x4 0x4 dynamically linked
->(144) belong 0x054ef630 dynamically linked
->96 belong >0 - not stripped
-
-0 belong 0x020b010e PA-RISC1.0 shared library
->96 belong >0 - not stripped
-
-0 belong 0x020b010d PA-RISC1.0 dynamic load library
->96 belong >0 - not stripped
-
-0 belong 0x213c6172 archive file
->68 belong 0x020b0619 - PA-RISC1.0 relocatable library
->68 belong 0x02100619 - PA-RISC1.1 relocatable library
->68 belong 0x02110619 - PA-RISC1.2 relocatable library
->68 belong 0x02140619 - PA-RISC2.0 relocatable library
-
-#### 500
-0 long 0x02080106 HP s500 relocatable executable
->16 long >0 - version %d
-
-0 long 0x02080107 HP s500 executable
->16 long >0 - version %d
-
-0 long 0x02080108 HP s500 pure executable
->16 long >0 - version %d
-
-#### 200
-0 belong 0x020c0108 HP s200 pure executable
->4 beshort >0 - version %d
->8 belong &0x80000000 save fp regs
->8 belong &0x40000000 dynamically linked
->8 belong &0x20000000 debuggable
->36 belong >0 not stripped
-
-0 belong 0x020c0107 HP s200 executable
->4 beshort >0 - version %d
->8 belong &0x80000000 save fp regs
->8 belong &0x40000000 dynamically linked
->8 belong &0x20000000 debuggable
->36 belong >0 not stripped
-
-0 belong 0x020c010b HP s200 demand-load executable
->4 beshort >0 - version %d
->8 belong &0x80000000 save fp regs
->8 belong &0x40000000 dynamically linked
->8 belong &0x20000000 debuggable
->36 belong >0 not stripped
-
-0 belong 0x020c0106 HP s200 relocatable executable
->4 beshort >0 - version %d
->6 beshort >0 - highwater %d
->8 belong &0x80000000 save fp regs
->8 belong &0x20000000 debuggable
->8 belong &0x10000000 PIC
-
-0 belong 0x020a0108 HP s200 (2.x release) pure executable
->4 beshort >0 - version %d
->36 belong >0 not stripped
-
-0 belong 0x020a0107 HP s200 (2.x release) executable
->4 beshort >0 - version %d
->36 belong >0 not stripped
-
-0 belong 0x020c010e HP s200 shared library
->4 beshort >0 - version %d
->6 beshort >0 - highwater %d
->36 belong >0 not stripped
-
-0 belong 0x020c010d HP s200 dynamic load library
->4 beshort >0 - version %d
->6 beshort >0 - highwater %d
->36 belong >0 not stripped
-
-#### MISC
-0 long 0x0000ff65 HP old archive
-0 long 0x020aff65 HP s200 old archive
-0 long 0x020cff65 HP s200 old archive
-0 long 0x0208ff65 HP s500 old archive
-
-0 long 0x015821a6 HP core file
-
-0 long 0x4da7eee8 HP-WINDOWS font
->8 byte >0 - version %d
-0 string Bitmapfile HP Bitmapfile
-
-0 string IMGfile CIS compimg HP Bitmapfile
-# XXX - see "lif"
-#0 short 0x8000 lif file
-0 long 0x020c010c compiled Lisp
-
-0 string msgcat01 HP NLS message catalog,
->8 long >0 %d messages
-
-# Summary: HP-48/49 calculator
-# Created by: phk at data.fls.dk
-# Modified by (1): AMAKAWA Shuhei <sa264 at cam.ac.uk>
-# Modified by (2): Samuel Thibault <samuel.thibault at ens-lyon.org> (HP49 support)
-0 string HPHP HP
->4 string 48 48 binary
->4 string 49 49 binary
->7 byte >64 - Rev %c
->8 leshort 0x2911 (ADR)
->8 leshort 0x2933 (REAL)
->8 leshort 0x2955 (LREAL)
->8 leshort 0x2977 (COMPLX)
->8 leshort 0x299d (LCOMPLX)
->8 leshort 0x29bf (CHAR)
->8 leshort 0x29e8 (ARRAY)
->8 leshort 0x2a0a (LNKARRAY)
->8 leshort 0x2a2c (STRING)
->8 leshort 0x2a4e (HXS)
->8 leshort 0x2a74 (LIST)
->8 leshort 0x2a96 (DIR)
->8 leshort 0x2ab8 (ALG)
->8 leshort 0x2ada (UNIT)
->8 leshort 0x2afc (TAGGED)
->8 leshort 0x2b1e (GROB)
->8 leshort 0x2b40 (LIB)
->8 leshort 0x2b62 (BACKUP)
->8 leshort 0x2b88 (LIBDATA)
->8 leshort 0x2d9d (PROG)
->8 leshort 0x2dcc (CODE)
->8 leshort 0x2e48 (GNAME)
->8 leshort 0x2e6d (LNAME)
->8 leshort 0x2e92 (XLIB)
-
-0 string %%HP: HP text
->6 string T(0) - T(0)
->6 string T(1) - T(1)
->6 string T(2) - T(2)
->6 string T(3) - T(3)
->10 string A(D) A(D)
->10 string A(R) A(R)
->10 string A(G) A(G)
->14 string F(.) F(.);
->14 string F(,) F(,);
-
-
-# Summary: HP-38/39 calculator
-# Created by: Samuel Thibault <samuel.thibault at ens-lyon.org>
-0 string HP3
->3 string 8 HP 38
->3 string 9 HP 39
->4 string Bin binary
->4 string Asc ASCII
->7 string A (Directory List)
->7 string B (Zaplet)
->7 string C (Note)
->7 string D (Program)
->7 string E (Variable)
->7 string F (List)
->7 string G (Matrix)
->7 string H (Library)
->7 string I (Target List)
->7 string J (ASCII Vector specification)
->7 string K (wildcard)
-
-# Summary: HP-38/39 calculator
-# Created by: Samuel Thibault <samuel.thibault at ens-lyon.org>
-0 string HP3
->3 string 8 HP 38
->3 string 9 HP 39
->4 string Bin binary
->4 string Asc ASCII
->7 string A (Directory List)
->7 string B (Zaplet)
->7 string C (Note)
->7 string D (Program)
->7 string E (Variable)
->7 string F (List)
->7 string G (Matrix)
->7 string H (Library)
->7 string I (Target List)
->7 string J (ASCII Vector specification)
->7 string K (wildcard)
-
-# hpBSD magic numbers
-0 beshort 200 hp200 (68010) BSD
->2 beshort 0407 impure binary
->2 beshort 0410 read-only binary
->2 beshort 0413 demand paged binary
-0 beshort 300 hp300 (68020+68881) BSD
->2 beshort 0407 impure binary
->2 beshort 0410 read-only binary
->2 beshort 0413 demand paged binary
-#
-# From David Gero <dgero at nortelnetworks.com>
-# HP-UX 10.20 core file format from /usr/include/sys/core.h
-# Unfortunately, HP-UX uses corehead blocks without specifying the order
-# There are four we care about:
-# CORE_KERNEL, which starts with the string "HP-UX"
-# CORE_EXEC, which contains the name of the command
-# CORE_PROC, which contains the signal number that caused the core dump
-# CORE_FORMAT, which contains the version of the core file format (== 1)
-# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC
-# but we include all 6 variations of the order of the first 3, and
-# assume that PROC will always be last
-# Order 1: KERNEL, EXEC, FORMAT, PROC
-0x10 string HP-UX
->0 belong 2
->>0xC belong 0x3C
->>>0x4C belong 0x100
->>>>0x58 belong 0x44
->>>>>0xA0 belong 1
->>>>>>0xAC belong 4
->>>>>>>0xB0 belong 1
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x90 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 2: KERNEL, FORMAT, EXEC, PROC
->>>0x4C belong 1
->>>>0x58 belong 4
->>>>>0x5C belong 1
->>>>>>0x60 belong 0x100
->>>>>>>0x6C belong 0x44
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0xA4 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 3: FORMAT, KERNEL, EXEC, PROC
-0x24 string HP-UX
->0 belong 1
->>0xC belong 4
->>>0x10 belong 1
->>>>0x14 belong 2
->>>>>0x20 belong 0x3C
->>>>>>0x60 belong 0x100
->>>>>>>0x6C belong 0x44
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0xA4 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 4: EXEC, KERNEL, FORMAT, PROC
-0x64 string HP-UX
->0 belong 0x100
->>0xC belong 0x44
->>>0x54 belong 2
->>>>0x60 belong 0x3C
->>>>>0xA0 belong 1
->>>>>>0xAC belong 4
->>>>>>>0xB0 belong 1
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x44 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 5: FORMAT, EXEC, KERNEL, PROC
-0x78 string HP-UX
->0 belong 1
->>0xC belong 4
->>>0x10 belong 1
->>>>0x14 belong 0x100
->>>>>0x20 belong 0x44
->>>>>>0x68 belong 2
->>>>>>>0x74 belong 0x3C
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x58 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-# Order 6: EXEC, FORMAT, KERNEL, PROC
->0 belong 0x100
->>0xC belong 0x44
->>>0x54 belong 1
->>>>0x60 belong 4
->>>>>0x64 belong 1
->>>>>>0x68 belong 2
->>>>>>>0x74 belong 0x2C
->>>>>>>>0xB4 belong 4 core file
->>>>>>>>>0x44 string >\0 from '%s'
->>>>>>>>>0xC4 belong 3 - received SIGQUIT
->>>>>>>>>0xC4 belong 4 - received SIGILL
->>>>>>>>>0xC4 belong 5 - received SIGTRAP
->>>>>>>>>0xC4 belong 6 - received SIGABRT
->>>>>>>>>0xC4 belong 7 - received SIGEMT
->>>>>>>>>0xC4 belong 8 - received SIGFPE
->>>>>>>>>0xC4 belong 10 - received SIGBUS
->>>>>>>>>0xC4 belong 11 - received SIGSEGV
->>>>>>>>>0xC4 belong 12 - received SIGSYS
->>>>>>>>>0xC4 belong 33 - received SIGXCPU
->>>>>>>>>0xC4 belong 34 - received SIGXFSZ
-
-
-
-#------------------------------------------------------------------------------
-# $File: human68k,v 1.5 2009/09/19 16:28:09 christos Exp $
-# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats
-# Magic too short!
-#0 string HU Human68k
-#>68 string LZX LZX compressed
-#>>72 string >\0 (version %s)
-#>(8.L+74) string LZX LZX compressed
-#>>(8.L+78) string >\0 (version %s)
-#>60 belong >0 binded
-#>(8.L+66) string #HUPAIR hupair
-#>0 string HU X executable
-#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1
-#>4 belong >0 - base address 0x%x
-#>28 belong >0 not stripped
-#>32 belong >0 with debug information
-#0 beshort 0x601a Human68k Z executable
-#0 beshort 0x6000 Human68k object file
-#0 belong 0xd1000000 Human68k ar binary archive
-#0 belong 0xd1010000 Human68k ar ascii archive
-#0 beshort 0x0068 Human68k lib archive
-#4 string LZX Human68k LZX compressed
-#>8 string >\0 (version %s)
-#>4 string LZX R executable
-#2 string #HUPAIR Human68k hupair R executable
-
-#------------------------------------------------------------------------------
-# $File: ibm370,v 1.9 2014/04/30 21:41:02 christos Exp $
-# ibm370: file(1) magic for IBM 370 and compatibles.
-#
-# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
-# What the heck *is* "USS/370"?
-# AIX 4.1's "/etc/magic" has
-#
-# 0 short 0535 370 sysV executable
-# >12 long >0 not stripped
-# >22 short >0 - version %d
-# >30 long >0 - 5.2 format
-# 0 short 0530 370 sysV pure executable
-# >12 long >0 not stripped
-# >22 short >0 - version %d
-# >30 long >0 - 5.2 format
-#
-# instead of the "USS/370" versions of the same magic numbers.
-#
-0 beshort 0537 370 XA sysV executable
->12 belong >0 not stripped
->22 beshort >0 - version %d
->30 belong >0 - 5.2 format
-0 beshort 0532 370 XA sysV pure executable
->12 belong >0 not stripped
->22 beshort >0 - version %d
->30 belong >0 - 5.2 format
-0 beshort 054001 370 sysV pure executable
->12 belong >0 not stripped
-0 beshort 055001 370 XA sysV pure executable
->12 belong >0 not stripped
-0 beshort 056401 370 sysV executable
->12 belong >0 not stripped
-0 beshort 057401 370 XA sysV executable
->12 belong >0 not stripped
-0 beshort 0531 SVR2 executable (Amdahl-UTS)
->12 belong >0 not stripped
->24 belong >0 - version %d
-0 beshort 0534 SVR2 pure executable (Amdahl-UTS)
->12 belong >0 not stripped
->24 belong >0 - version %d
-0 beshort 0530 SVR2 pure executable (USS/370)
->12 belong >0 not stripped
->24 belong >0 - version %d
-0 beshort 0535 SVR2 executable (USS/370)
->12 belong >0 not stripped
->24 belong >0 - version %d
-
-#------------------------------------------------------------------------------
-# $File: ibm6000,v 1.12 2013/09/16 15:12:42 christos Exp $
-# ibm6000: file(1) magic for RS/6000 and the RT PC.
-#
-0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
->12 belong >0 not stripped
-# Breaks sun4 statically linked execs.
-#0 beshort 0x0103 executable (RT Version 2) or obj module
-#>2 byte 0x50 pure
-#>28 belong >0 not stripped
-#>6 beshort >0 - version %ld
-0 beshort 0x0104 shared library
-0 beshort 0x0105 ctab data
-0 beshort 0xfe04 structured file
-0 string 0xabcdef AIX message catalog
-0 belong 0x000001f9 AIX compiled message catalog
-0 string \<aiaff> archive
-0 string \<bigaf> archive (big format)
-
-0 beshort 0x01f7 64-bit XCOFF executable or object module
->20 belong 0 not stripped
-# GRR: this test is still too general as it catches also many FATs of DOS filesystems
-4 belong &0x0feeddb0
-# real core dump could not be 32-bit and 64-bit together
->7 byte&0x03 !3 AIX core file
->>1 byte &0x01 fulldump
->>7 byte &0x01 32-bit
->>>0x6e0 string >\0 \b, %s
->>7 byte &0x02 64-bit
->>>0x524 string >\0 \b, %s
-
-#------------------------------------------------------------------------------
-# $File: icc,v 1.1 2013/01/08 01:43:18 christos Exp $
-# icc: file(1) magic for International Color Consortium file formats
-
-#
-# Color profiles as per the ICC's "Image technology colour management -
-# Architecture, profile format, and data structure" specification.
-# See
-#
-# http://www.color.org/specification/ICC1v43_2010-12.pdf
-#
-# for Specification ICC.1:2010 (Profile version 4.3.0.0).
-#
-# Bytes 36 to 39 contain a generic profile file signature of "acsp";
-# bytes 40 to 43 "may be used to identify the primary platform/operating
-# system framework for which the profile was created".
-#
-# There are other fields that might be worth dumping as well.
-#
-
-# This appears to be what's used for Apple ColorSync profiles.
-# Instead of adding that, Apple just changed the generic "acsp" entry
-# to be for "ColorSync ICC Color Profile" rather than "Kodak Color
-# Management System, ICC Profile".
-# Yes, it's "APPL", not "AAPL"; see the spec.
-36 string acspAPPL ColorSync ICC Profile
-!:mime application/vnd.iccprofile
-
-# Microsoft ICM color profile
-36 string acspMSFT Microsoft ICM Color Profile
-!:mime application/vnd.iccprofile
-
-# Yes, that's a blank after "SGI".
-36 string acspSGI\ SGI ICC Profile
-!:mime application/vnd.iccprofile
-
-# XXX - is this what's used for the Sun KCMS or not? The standard file
-# uses just "acsp" for that, but Apple's file uses it for "ColorSync",
-# and there *is* an identified "primary platform" value of SUNW.
-36 string acspSUNW Sun KCMS ICC Profile
-!:mime application/vnd.iccprofile
-
-# Any other profile.
-# XXX - should we use "acsp\0\0\0\0" for "no primary platform" profiles,
-# and use "acsp" for everything else and dump the "primary platform"
-# string in those cases?
-36 string acsp ICC Profile
-!:mime application/vnd.iccprofile
-
-
-
-#------------------------------------------------------------------------------
-# $File: iff,v 1.13 2011/09/06 11:00:06 christos Exp $
-# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
-#
-# Daniel Quinlan (quinlan at yggdrasil.com) -- IFF was designed by Electronic
-# Arts for file interchange. It has also been used by Apple, SGI, and
-# especially Commodore-Amiga.
-#
-# IFF files begin with an 8 byte FORM header, followed by a 4 character
-# FORM type, which is followed by the first chunk in the FORM.
-
-0 string FORM IFF data
-#>4 belong x \b, FORM is %d bytes long
-# audio formats
->8 string AIFF \b, AIFF audio
-!:mime audio/x-aiff
->8 string AIFC \b, AIFF-C compressed audio
-!:mime audio/x-aiff
->8 string 8SVX \b, 8SVX 8-bit sampled sound voice
-!:mime audio/x-aiff
->8 string 16SV \b, 16SV 16-bit sampled sound voice
->8 string SAMP \b, SAMP sampled audio
->8 string MAUD \b, MAUD MacroSystem audio
->8 string SMUS \b, SMUS simple music
->8 string CMUS \b, CMUS complex music
-# image formats
->8 string ILBMBMHD \b, ILBM interleaved image
->>20 beshort x \b, %d x
->>22 beshort x %d
->8 string RGBN \b, RGBN 12-bit RGB image
->8 string RGB8 \b, RGB8 24-bit RGB image
->8 string DEEP \b, DEEP TVPaint/XiPaint image
->8 string DR2D \b, DR2D 2-D object
->8 string TDDD \b, TDDD 3-D rendering
->8 string LWOB \b, LWOB 3-D object
->8 string LWO2 \b, LWO2 3-D object, v2
->8 string LWLO \b, LWLO 3-D layered object
->8 string REAL \b, REAL Real3D rendering
->8 string MC4D \b, MC4D MaxonCinema4D rendering
->8 string ANIM \b, ANIM animation
->8 string YAFA \b, YAFA animation
->8 string SSA\ \b, SSA super smooth animation
->8 string ACBM \b, ACBM continuous image
->8 string FAXX \b, FAXX fax image
-# other formats
->8 string FTXT \b, FTXT formatted text
->8 string CTLG \b, CTLG message catalog
->8 string PREF \b, PREF preferences
->8 string DTYP \b, DTYP datatype description
->8 string PTCH \b, PTCH binary patch
->8 string AMFF \b, AMFF AmigaMetaFile format
->8 string WZRD \b, WZRD StormWIZARD resource
->8 string DOC\ \b, DOC desktop publishing document
->8 string WVQA \b, Westwood Studios VQA Multimedia,
->>24 leshort x %d video frames,
->>26 leshort x %d x
->>28 leshort x %d
->8 string MOVE \b, Wing Commander III Video
->>12 string _PC_ \b, PC version
->>12 string 3DO_ \b, 3DO version
-
-# 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)
-
-#------------------------------------------------------------------------------
-# $File: images,v 1.91 2014/04/30 21:41:02 christos Exp $
-# images: file(1) magic for image formats (see also "iff", and "c-lang" for
-# XPM bitmaps)
-#
-# originally from jef at helios.ee.lbl.gov (Jef Poskanzer),
-# additions by janl at ifi.uio.no as well as others. Jan also suggested
-# merging several one- and two-line files into here.
-#
-# little magic: PCX (first byte is 0x0a)
-
-# Targa - matches `povray', `ppmtotga' and `xv' outputs
-# by Philippe De Muyter <phdm at macqel.be>
-# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
-# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
-# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
-# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
-# `tgatoppm' recognizes a superset (Index may be anything)
-1 belong&0xfff7ffff 0x01010000 Targa image data - Map
-!:strength + 2
->2 byte&8 8 - RLE
->12 leshort >0 %d x
->14 leshort >0 %d
-1 belong&0xfff7ffff 0x00020000 Targa image data - RGB
-!:strength + 2
->2 byte&8 8 - RLE
->12 leshort >0 %d x
->14 leshort >0 %d
-1 belong&0xfff7ffff 0x00030000 Targa image data - Mono
-!:strength + 2
->2 byte&8 8 - RLE
->12 leshort >0 %d x
->14 leshort >0 %d
-
-# PBMPLUS images
-# The next byte following the magic is always whitespace.
-# strength is changed to try these patterns before "x86 boot sector"
-0 search/1 P1
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PBM image text
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
-!:strength + 45
-!:mime image/x-portable-bitmap
-0 search/1 P2
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PGM image text
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
-!:strength + 45
-!:mime image/x-portable-greymap
-0 search/1 P3
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PPM image text
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
-!:strength + 45
-!:mime image/x-portable-pixmap
-0 string P4
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PBM "rawbits" image data
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
-!:strength + 45
-!:mime image/x-portable-bitmap
-0 string P5
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PGM "rawbits" image data
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
-!:strength + 45
-!:mime image/x-portable-greymap
-0 string P6
->3 regex =[0-9]{0,50}\ [0-9]{0,50} Netpbm PPM "rawbits" image data
->3 regex =[0-9]{1,50}\ \b, size = %sx
->>3 regex =\ [0-9]{1,50} \b%s
-!:strength + 45
-!:mime image/x-portable-pixmap
-0 string P7 Netpbm PAM image file
-!:mime image/x-portable-pixmap
-
-# From: bryanh at giraffe-data.com (Bryan Henderson)
-0 string \117\072 Solitaire Image Recorder format
->4 string \013 MGI Type 11
->4 string \021 MGI Type 17
-0 string .MDA MicroDesign data
->21 byte 48 version 2
->21 byte 51 version 3
-0 string .MDP MicroDesign page data
->21 byte 48 version 2
->21 byte 51 version 3
-
-# NIFF (Navy Interchange File Format, a modification of TIFF) images
-# [GRR: this *must* go before TIFF]
-0 string IIN1 NIFF image data
-!:mime image/x-niff
-
-# Canon RAW version 1 (CRW) files are a type of Canon Image File Format
-# (CIFF) file. These are apparently all little-endian.
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# URL: http://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html
-0 string II\x1a\0\0\0HEAPCCDR Canon CIFF raw image data
-!:mime image/x-canon-crw
->16 leshort x \b, version %d.
->14 leshort x \b%d
-
-# Canon RAW version 2 (CR2) files are a kind of TIFF with an extra magic
-# number. Put this above the TIFF test to make sure we detect them.
-# These are apparently all little-endian.
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# URL: http://libopenraw.freedesktop.org/wiki/Canon_CR2
-0 string II\x2a\0\x10\0\0\0CR Canon CR2 raw image data
-!:mime image/x-canon-cr2
->10 byte x \b, version %d.
->11 byte x \b%d
-
-# Tag Image File Format, from Daniel Quinlan (quinlan at yggdrasil.com)
-# The second word of TIFF files is the TIFF version number, 42, which has
-# never changed. The TIFF specification recommends testing for it.
-0 string MM\x00\x2a TIFF image data, big-endian
-!:mime image/tiff
-0 string II\x2a\x00 TIFF image data, little-endian
-!:mime image/tiff
-
-0 string MM\x00\x2b Big TIFF image data, big-endian
-!:mime image/tiff
-0 string II\x2b\x00 Big TIFF image data, little-endian
-!:mime image/tiff
-
-# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
-# (Greg Roelofs, newt at uchicago.edu)
-# (Albert Cahalan, acahalan at cs.uml.edu)
-#
-# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
-#
-0 string \x89PNG\x0d\x0a\x1a\x0a PNG image data
-!:mime image/png
->16 belong x \b, %d x
->20 belong x %d,
->24 byte x %d-bit
->25 byte 0 grayscale,
->25 byte 2 \b/color RGB,
->25 byte 3 colormap,
->25 byte 4 gray+alpha,
->25 byte 6 \b/color RGBA,
-#>26 byte 0 deflate/32K,
->28 byte 0 non-interlaced
->28 byte 1 interlaced
-
-# possible GIF replacements; none yet released!
-# (Greg Roelofs, newt at uchicago.edu)
-#
-# GRR 950115: this was mine ("Zip GIF"):
-0 string GIF94z ZIF image (GIF+deflate alpha)
-!:mime image/x-unknown
-#
-# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better):
-#
-0 string FGF95a FGF image (GIF+deflate beta)
-!:mime image/x-unknown
-#
-# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal
-# (best; not yet implemented):
-#
-0 string PBF PBF image (deflate compression)
-!:mime image/x-unknown
-
-# GIF
-0 string GIF8 GIF image data
-!:mime image/gif
-!:apple 8BIMGIFf
->4 string 7a \b, version 8%s,
->4 string 9a \b, version 8%s,
->6 leshort >0 %d x
->8 leshort >0 %d
-#>10 byte &0x80 color mapped,
-#>10 byte&0x07 =0x00 2 colors
-#>10 byte&0x07 =0x01 4 colors
-#>10 byte&0x07 =0x02 8 colors
-#>10 byte&0x07 =0x03 16 colors
-#>10 byte&0x07 =0x04 32 colors
-#>10 byte&0x07 =0x05 64 colors
-#>10 byte&0x07 =0x06 128 colors
-#>10 byte&0x07 =0x07 256 colors
-
-# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster,
-# 1 plane, no encoding.
-0 string \361\0\100\273 CMU window manager raster image data
->4 lelong >0 %d x
->8 lelong >0 %d,
->12 lelong >0 %d-bit
-
-# Magick Image File Format
-0 string id=ImageMagick MIFF image data
-
-# Artisan
-0 long 1123028772 Artisan image data
->4 long 1 \b, rectangular 24-bit
->4 long 2 \b, rectangular 8-bit with colormap
->4 long 3 \b, rectangular 32-bit (24-bit with matte)
-
-# FIG (Facility for Interactive Generation of figures), an object-based format
-0 search/1 #FIG FIG image text
->5 string x \b, version %.3s
-
-# PHIGS
-0 string ARF_BEGARF PHIGS clear text archive
-0 string @(#)SunPHIGS SunPHIGS
-# version number follows, in the form m.n
->40 string SunBin binary
->32 string archive archive
-
-# GKS (Graphics Kernel System)
-0 string GKSM GKS Metafile
->24 string SunGKS \b, SunGKS
-
-# CGM image files
-0 string BEGMF clear text Computer Graphics Metafile
-
-# MGR bitmaps (Michael Haardt, u31b3hs at pool.informatik.rwth-aachen.de)
-0 string yz MGR bitmap, modern format, 8-bit aligned
-0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned
-0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned
-0 string yx MGR bitmap, modern format, squeezed
-
-# Fuzzy Bitmap (FBM) images
-0 string %bitmap\0 FBM image data
->30 long 0x31 \b, mono
->30 long 0x33 \b, color
-
-# facsimile data
-1 string PC\ Research,\ Inc group 3 fax data
->29 byte 0 \b, normal resolution (204x98 DPI)
->29 byte 1 \b, fine resolution (204x196 DPI)
-# From: Herbert Rosmanith <herp at wildsau.idv.uni.linz.at>
-0 string Sfff structured fax file
-
-# From: Joerg Jenderek <joerg.jen.der.ek at gmx.net>
-# most files with the extension .EPA and some with .BMP
-0 string \x11\x06 Award BIOS Logo, 136 x 84
-!:mime image/x-award-bioslogo
-0 string \x11\x09 Award BIOS Logo, 136 x 126
-!:mime image/x-award-bioslogo
-#0 string \x07\x1f BIOS Logo corrupted?
-# http://www.blackfiveservices.co.uk/awbmtools.shtml
-# http://biosgfx.narod.ru/v3/
-# http://biosgfx.narod.ru/abr-2/
-0 string AWBM
->4 leshort <1981 Award BIOS bitmap
-!:mime image/x-award-bmp
-# image width is a multiple of 4
->>4 leshort&0x0003 0
->>>4 leshort x \b, %d
->>>6 leshort x x %d
->>4 leshort&0x0003 >0 \b,
->>>4 leshort&0x0003 =1
->>>>4 leshort x %d+3
->>>4 leshort&0x0003 =2
->>>>4 leshort x %d+2
->>>4 leshort&0x0003 =3
->>>>4 leshort x %d+1
->>>6 leshort x x %d
-# at offset 8 starts imagedata followed by "RGB " marker
-
-# PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt at uchicago.edu)
-# http://en.wikipedia.org/wiki/BMP_file_format#DIB_header_.\
-# 28bitmap_information_header.29
-0 string BM
->14 leshort 12 PC bitmap, OS/2 1.x format
-!:mime image/x-ms-bmp
->>18 leshort x \b, %d x
->>20 leshort x %d
->14 leshort 64 PC bitmap, OS/2 2.x format
-!:mime image/x-ms-bmp
->>18 leshort x \b, %d x
->>20 leshort x %d
->14 leshort 40 PC bitmap, Windows 3.x format
-!:mime image/x-ms-bmp
->>18 lelong x \b, %d x
->>22 lelong x %d x
->>28 leshort x %d
->14 leshort 124 PC bitmap, Windows 98/2000 and newer format
-!:mime image/x-ms-bmp
->>18 lelong x \b, %d x
->>22 lelong x %d x
->>28 leshort x %d
->14 leshort 108 PC bitmap, Windows 95/NT4 and newer format
-!:mime image/x-ms-bmp
->>18 lelong x \b, %d x
->>22 lelong x %d x
->>28 leshort x %d
->14 leshort 128 PC bitmap, Windows NT/2000 format
-!:mime image/x-ms-bmp
->>18 lelong x \b, %d x
->>22 lelong x %d x
->>28 leshort x %d
-# Too simple - MPi
-#0 string IC PC icon data
-#0 string PI PC pointer image data
-#0 string CI PC color icon data
-#0 string CP PC color pointer image data
-# Conflicts with other entries [BABYL]
-#0 string BA PC bitmap array data
-
-# XPM icons (Greg Roelofs, newt at uchicago.edu)
-0 search/1 /*\ XPM\ */ X pixmap image text
-!:mime image/x-xpmi
-
-# Utah Raster Toolkit RLE images (janl at ifi.uio.no)
-0 leshort 0xcc52 RLE image data,
->6 leshort x %d x
->8 leshort x %d
->2 leshort >0 \b, lower left corner: %d
->4 leshort >0 \b, lower right corner: %d
->10 byte&0x1 =0x1 \b, clear first
->10 byte&0x2 =0x2 \b, no background
->10 byte&0x4 =0x4 \b, alpha channel
->10 byte&0x8 =0x8 \b, comment
->11 byte >0 \b, %d color channels
->12 byte >0 \b, %d bits per pixel
->13 byte >0 \b, %d color map channels
-
-# image file format (Robert Potter, potter at cs.rochester.edu)
-0 string Imagefile\ version- iff image data
-# this adds the whole header (inc. version number), informative but longish
->10 string >\0 %s
-
-# Sun raster images, from Daniel Quinlan (quinlan at yggdrasil.com)
-0 belong 0x59a66a95 Sun raster image data
->4 belong >0 \b, %d x
->8 belong >0 %d,
->12 belong >0 %d-bit,
-#>16 belong >0 %d bytes long,
->20 belong 0 old format,
-#>20 belong 1 standard,
->20 belong 2 compressed,
->20 belong 3 RGB,
->20 belong 4 TIFF,
->20 belong 5 IFF,
->20 belong 0xffff reserved for testing,
->24 belong 0 no colormap
->24 belong 1 RGB colormap
->24 belong 2 raw colormap
-#>28 belong >0 colormap is %d bytes long
-
-# SGI image file format, from Daniel Quinlan (quinlan at yggdrasil.com)
-#
-# See
-# http://reality.sgi.com/grafica/sgiimage.html
-#
-0 beshort 474 SGI image data
-#>2 byte 0 \b, verbatim
->2 byte 1 \b, RLE
-#>3 byte 1 \b, normal precision
->3 byte 2 \b, high precision
->4 beshort x \b, %d-D
->6 beshort x \b, %d x
->8 beshort x %d
->10 beshort x \b, %d channel
->10 beshort !1 \bs
->80 string >0 \b, "%s"
-
-0 string IT01 FIT image data
->4 belong x \b, %d x
->8 belong x %d x
->12 belong x %d
-#
-0 string IT02 FIT image data
->4 belong x \b, %d x
->8 belong x %d x
->12 belong x %d
-#
-2048 string PCD_IPI Kodak Photo CD image pack file
->0xe02 byte&0x03 0x00 , landscape mode
->0xe02 byte&0x03 0x01 , portrait mode
->0xe02 byte&0x03 0x02 , landscape mode
->0xe02 byte&0x03 0x03 , portrait mode
-0 string PCD_OPA Kodak Photo CD overview pack file
-
-# FITS format. Jeff Uphoff <juphoff at tarsier.cv.nrao.edu>
-# FITS is the Flexible Image Transport System, the de facto standard for
-# data and image transfer, storage, etc., for the astronomical community.
-# (FITS floating point formats are big-endian.)
-0 string SIMPLE\ \ = FITS image data
->109 string 8 \b, 8-bit, character or unsigned binary integer
->108 string 16 \b, 16-bit, two's complement binary integer
->107 string \ 32 \b, 32-bit, two's complement binary integer
->107 string -32 \b, 32-bit, floating point, single precision
->107 string -64 \b, 64-bit, floating point, double precision
-
-# other images
-0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file
-
-# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
-# stuff.
-#
-0 beshort 0x1010 PEX Binary Archive
-
-# DICOM medical imaging data
-128 string DICM DICOM medical imaging data
-!:mime application/dicom
-
-# XWD - X Window Dump file.
-# As described in /usr/X11R6/include/X11/XWDFile.h
-# used by the xwd program.
-# Bradford Castalia, idaeim, 1/01
-# updated by Adam Buchbinder, 2/09
-# The following assumes version 7 of the format; the first long is the length
-# of the header, which is at least 25 4-byte longs, and the one at offset 8
-# is a constant which is always either 1 or 2. Offset 12 is the pixmap depth,
-# which is a maximum of 32.
-0 belong >100
->8 belong <3
->>12 belong <33
->>>4 belong 7 XWD X Window Dump image data
-!:mime image/x-xwindowdump
->>>>100 string >\0 \b, "%s"
->>>>16 belong x \b, %dx
->>>>20 belong x \b%dx
->>>>12 belong x \b%d
-
-# PDS - Planetary Data System
-# These files use Parameter Value Language in the header section.
-# Unfortunately, there is no certain magic, but the following
-# strings have been found to be most likely.
-0 string NJPL1I00 PDS (JPL) image data
-2 string NJPL1I PDS (JPL) image data
-0 string CCSD3ZF PDS (CCSD) image data
-2 string CCSD3Z PDS (CCSD) image data
-0 string PDS_ PDS image data
-0 string LBLSIZE= PDS (VICAR) image data
-
-# pM8x: ATARI STAD compressed bitmap format
-#
-# from Oskar Schirmer <schirmer at scara.com> Feb 2, 2001
-# p M 8 5/6 xx yy zz data...
-# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
-# bytes either run horizontally (pM85) or vertically (pM86). yy is the
-# most frequent byte, xx and zz are runlength escape codes, where xx is
-# used for runs of yy.
-#
-0 string pM85 Atari ST STAD bitmap image data (hor)
->5 byte 0x00 (white background)
->5 byte 0xFF (black background)
-0 string pM86 Atari ST STAD bitmap image data (vert)
->5 byte 0x00 (white background)
->5 byte 0xFF (black background)
-
-# Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
-# http://www.atarimax.com/jindroush.atari.org/afmtatr.html
-0 leshort 0x0296 Atari ATR image
-
-# XXX:
-# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
-# magic.
-# SGI RICE image file <mpruett at sgi.com>
-#0 beshort 0x5249 RICE image
-#>2 beshort x v%d
-#>4 beshort x (%d x
-#>6 beshort x %d)
-#>8 beshort 0 8 bit
-#>8 beshort 1 10 bit
-#>8 beshort 2 12 bit
-#>8 beshort 3 13 bit
-#>10 beshort 0 4:2:2
-#>10 beshort 1 4:2:2:4
-#>10 beshort 2 4:4:4
-#>10 beshort 3 4:4:4:4
-#>12 beshort 1 RGB
-#>12 beshort 2 CCIR601
-#>12 beshort 3 RP175
-#>12 beshort 4 YUV
-
-# PCX image files
-# From: Dan Fandrich <dan at coneharvesters.com>
-# updated by Joerg Jenderek at Feb 2013 by http://de.wikipedia.org/wiki/PCX
-# http://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt
-# GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000
-# test for bytes 0x0a,version byte (0,2,3,4,5),compression byte flag(0,1), bit depth (>0) of PCX or T5.DBT,T6.DBT
-0 ubelong&0xffF8fe00 0x0a000000
-# for PCX bit depth > 0
->3 ubyte >0
-# test for valid versions
->>1 ubyte <6
->>>1 ubyte !1 PCX
-!:mime image/x-pcx
-#!:mime image/pcx
->>>>1 ubyte 0 ver. 2.5 image data
->>>>1 ubyte 2 ver. 2.8 image data, with palette
->>>>1 ubyte 3 ver. 2.8 image data, without palette
->>>>1 ubyte 4 for Windows image data
->>>>1 ubyte 5 ver. 3.0 image data
->>>>4 uleshort x bounding box [%d,
->>>>6 uleshort x %d] -
->>>>8 uleshort x [%d,
->>>>10 uleshort x %d],
->>>>65 ubyte >1 %d planes each of
->>>>3 ubyte x %d-bit
->>>>68 byte 1 colour,
->>>>68 byte 2 grayscale,
-# this should not happen
->>>>68 default x image,
->>>>12 leshort >0 %d x
->>>>>14 uleshort x %d dpi,
->>>>2 byte 0 uncompressed
->>>>2 byte 1 RLE compressed
-
-# Adobe Photoshop
-# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
-0 string 8BPS Adobe Photoshop Image
-!:mime image/vnd.adobe.photoshop
->4 beshort 2 (PSB)
->18 belong x \b, %d x
->14 belong x %d,
->24 beshort 0 bitmap
->24 beshort 1 grayscale
->>12 beshort 2 with alpha
->24 beshort 2 indexed
->24 beshort 3 RGB
->>12 beshort 4 \bA
->24 beshort 4 CMYK
->>12 beshort 5 \bA
->24 beshort 7 multichannel
->24 beshort 8 duotone
->24 beshort 9 lab
->12 beshort > 1
->>12 beshort x \b, %dx
->12 beshort 1 \b,
->22 beshort x %d-bit channel
->12 beshort > 1 \bs
-
-# XV thumbnail indicator (ThMO)
-0 string P7\ 332 XV thumbnail image data
-
-# NITF is defined by United States MIL-STD-2500A
-0 string NITF National Imagery Transmission Format
->25 string >\0 dated %.14s
-
-# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
-0 belong 0x00010008 GEM Image data
->12 beshort x %d x
->14 beshort x %d,
->4 beshort x %d planes,
->8 beshort x %d x
->10 beshort x %d pixelsize
-
-# GEM Metafile (Wolfram Kleff)
-0 lelong 0x0018FFFF GEM Metafile data
->4 leshort x version %d
-
-#
-# SMJPEG. A custom Motion JPEG format used by Loki Entertainment
-# Software Torbjorn Andersson <d91tan at Update.UU.SE>.
-#
-0 string \0\nSMJPEG SMJPEG
->8 belong x %d.x data
-# According to the specification you could find any number of _TXT
-# headers here, but I can't think of any way of handling that. None of
-# the SMJPEG files I tried it on used this feature. Even if such a
-# file is encountered the output should still be reasonable.
->16 string _SND \b,
->>24 beshort >0 %d Hz
->>26 byte 8 8-bit
->>26 byte 16 16-bit
->>28 string NONE uncompressed
-# >>28 string APCM ADPCM compressed
->>27 byte 1 mono
->>28 byte 2 stereo
-# Help! Isn't there any way to avoid writing this part twice?
->>32 string _VID \b,
-# >>>48 string JFIF JPEG
->>>40 belong >0 %d frames
->>>44 beshort >0 (%d x
->>>46 beshort >0 %d)
->16 string _VID \b,
-# >>32 string JFIF JPEG
->>24 belong >0 %d frames
->>28 beshort >0 (%d x
->>30 beshort >0 %d)
-
-0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File
-
-# "thumbnail file" (icon)
-# descended from "xv", but in use by other applications as well (Wolfram Kleff)
-0 string P7\ 332 XV "thumbnail file" (icon) data
-
-# taken from fkiss: (<yav at mte.biglobe.ne.jp> ?)
-0 string KiSS KISS/GS
->4 byte 16 color
->>5 byte x %d bit
->>8 leshort x %d colors
->>10 leshort x %d groups
->4 byte 32 cell
->>5 byte x %d bit
->>8 leshort x %d x
->>10 leshort x %d
->>12 leshort x +%d
->>14 leshort x +%d
-
-# Webshots (www.webshots.com), by John Harrison
-0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file
-
-# Hercules DASD image files
-# From Jan Jaeger <jj at septa.nl>
-0 string CKD_P370 Hercules CKD DASD image file
->8 long x \b, %d heads per cylinder
->12 long x \b, track size %d bytes
->16 byte x \b, device type 33%2.2X
-
-0 string CKD_C370 Hercules compressed CKD DASD image file
->8 long x \b, %d heads per cylinder
->12 long x \b, track size %d bytes
->16 byte x \b, device type 33%2.2X
-
-0 string CKD_S370 Hercules CKD DASD shadow file
->8 long x \b, %d heads per cylinder
->12 long x \b, track size %d bytes
->16 byte x \b, device type 33%2.2X
-
-# Squeak images and programs - etoffi at softhome.net
-0 string \146\031\0\0 Squeak image data
-0 search/1 'From\040Squeak Squeak program text
-
-# partimage: file(1) magic for PartImage files (experimental, incomplete)
-# Author: Hans-Joachim Baader <hjb at pro-linux.de>
-0 string PaRtImAgE-VoLuMe PartImage
->0x0020 string 0.6.1 file version %s
->>0x0060 lelong >-1 volume %d
-#>>0x0064 8 byte identifier
-#>>0x007c reserved
->>0x0200 string >\0 type %s
->>0x1400 string >\0 device %s,
->>0x1600 string >\0 original filename %s,
-# Some fields omitted
->>0x2744 lelong 0 not compressed
->>0x2744 lelong 1 gzip compressed
->>0x2744 lelong 2 bzip2 compressed
->>0x2744 lelong >2 compressed with unknown algorithm
->0x0020 string >0.6.1 file version %s
->0x0020 string <0.6.1 file version %s
-
-# DCX is multi-page PCX, using a simple header of up to 1024
-# offsets for the respective PCX components.
-# From: Joerg Wunsch <joerg_wunsch at uriah.heep.sax.de>
-0 lelong 987654321 DCX multi-page PCX image data
-
-# Simon Walton <simonw at matteworld.com>
-# Kodak Cineon format for scanned negatives
-# http://www.kodak.com/US/en/motion/support/dlad/
-0 lelong 0xd75f2a80 Cineon image data
->200 belong >0 \b, %d x
->204 belong >0 %d
-
-
-# Bio-Rad .PIC is an image format used by microscope control systems
-# and related image processing software used by biologists.
-# From: Vebjorn Ljosa <vebjorn at ljosa.com>
-# BOOL values are two-byte integers; use them to rule out false positives.
-# http://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt
-# Samples: http://www.loci.wisc.edu/software/sample-data
-14 leshort <2
->62 leshort <2
->>54 leshort 12345 Bio-Rad .PIC Image File
->>>0 leshort >0 %d x
->>>2 leshort >0 %d,
->>>4 leshort =1 1 image in file
->>>4 leshort >1 %d images in file
-
-# From Jan "Yenya" Kasprzak <kas at fi.muni.cz>
-# The description of *.mrw format can be found at
-# http://www.dalibor.cz/minolta/raw_file_format.htm
-0 string \000MRM Minolta Dimage camera raw image data
-
-# Summary: DjVu image / document
-# Extension: .djvu
-# Reference: http://djvu.org/docs/DjVu3Spec.djvu
-# Submitted by: Stephane Loeuillet <stephane.loeuillet at tiscali.fr>
-# Modified by (1): Abel Cheung <abelcheung at gmail.com>
-0 string AT&TFORM
->12 string DJVM DjVu multiple page document
-!:mime image/vnd.djvu
->12 string DJVU DjVu image or single page document
-!:mime image/vnd.djvu
->12 string DJVI DjVu shared document
-!:mime image/vnd.djvu
->12 string THUM DjVu page thumbnails
-!:mime image/vnd.djvu
-
-# Originally by Marc Espie
-# Modified by Robert Minsk <robertminsk at yahoo.com>
-# http://www.openexr.com/openexrfilelayout.pdf
-0 lelong 20000630 OpenEXR image data,
-!:mime image/x-exr
->4 lelong&0x000000ff x version %d,
->4 lelong ^0x00000200 storage: scanline
->4 lelong &0x00000200 storage: tiled
->8 search/0x1000 compression\0 \b, compression:
->>&16 byte 0 none
->>&16 byte 1 rle
->>&16 byte 2 zips
->>&16 byte 3 zip
->>&16 byte 4 piz
->>&16 byte 5 pxr24
->>&16 byte 6 b44
->>&16 byte 7 b44a
->>&16 byte >7 unknown
->8 search/0x1000 dataWindow\0 \b, dataWindow:
->>&10 lelong x (%d
->>&14 lelong x %d)-
->>&18 lelong x \b(%d
->>&22 lelong x %d)
->8 search/0x1000 displayWindow\0 \b, displayWindow:
->>&10 lelong x (%d
->>&14 lelong x %d)-
->>&18 lelong x \b(%d
->>&22 lelong x %d)
->8 search/0x1000 lineOrder\0 \b, lineOrder:
->>&14 byte 0 increasing y
->>&14 byte 1 decreasing y
->>&14 byte 2 random y
->>&14 byte >2 unknown
-
-# SMPTE Digital Picture Exchange Format, SMPTE DPX
-#
-# ANSI/SMPTE 268M-1994, SMPTE Standard for File Format for Digital
-# Moving-Picture Exchange (DPX), v1.0, 18 February 1994
-# Robert Minsk <robertminsk at yahoo.com>
-0 string SDPX DPX image data, big-endian,
-!:mime image/x-dpx
->768 beshort <4
->>772 belong x %dx
->>776 belong x \b%d,
->768 beshort >3
->>776 belong x %dx
->>772 belong x \b%d,
->768 beshort 0 left to right/top to bottom
->768 beshort 1 right to left/top to bottom
->768 beshort 2 left to right/bottom to top
->768 beshort 3 right to left/bottom to top
->768 beshort 4 top to bottom/left to right
->768 beshort 5 top to bottom/right to left
->768 leshort 6 bottom to top/left to right
->768 leshort 7 bottom to top/right to left
-
-# From: Tom Hilinski <tom.hilinski at comcast.net>
-# http://www.unidata.ucar.edu/packages/netcdf/
-0 string CDF\001 NetCDF Data Format data
-
-#-----------------------------------------------------------------------
-# Hierarchical Data Format, used to facilitate scientific data exchange
-# specifications at http://hdf.ncsa.uiuc.edu/
-0 belong 0x0e031301 Hierarchical Data Format (version 4) data
-!:mime application/x-hdf
-0 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) data
-!:mime application/x-hdf
-512 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 512 bytes user block
-!:mime application/x-hdf
-1024 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 1k user block
-!:mime application/x-hdf
-2048 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 2k user block
-!:mime application/x-hdf
-4096 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 4k user block
-!:mime application/x-hdf
-
-
-# From: Tobias Burnus <burnus at net-b.de>
-# Xara (for a while: Corel Xara) is a graphic package, see
-# http://www.xara.com/ for Windows and as GPL application for Linux
-0 string XARA\243\243 Xara graphics file
-
-# http://www.cartesianinc.com/Tech/
-0 string CPC\262 Cartesian Perceptual Compression image
-!:mime image/x-cpi
-
-# From Albert Cahalan <acahalan at gmail.com>
-# puredigital used it for the CVS disposable camcorder
-#8 lelong 4 ZBM bitmap image data
-#>4 leshort x %u x
-#>6 leshort x %u
-
-# From Albert Cahalan <acahalan at gmail.com>
-# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons
-0 string C565 OLPC firmware icon image data
->4 leshort x %u x
->6 leshort x %u
-
-# Applied Images - Image files from Cytovision
-# Gustavo Junior Alves <gjalves at gjalves.com.br>
-0 string \xce\xda\xde\xfa Cytovision Metaphases file
-0 string \xed\xad\xef\xac Cytovision Karyotype file
-0 string \x0b\x00\x03\x00 Cytovision FISH Probe file
-0 string \xed\xfe\xda\xbe Cytovision FLEX file
-0 string \xed\xab\xed\xfe Cytovision FLEX file
-0 string \xad\xfd\xea\xad Cytovision RATS file
-
-# Wavelet Scalar Quantization format used in gray-scale fingerprint images
-# From Tano M Fotang <mfotang at quanteq.com>
-0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data
-
-# Type: PCO B16 image files
-# URL: http://www.pco.de/fileadmin/user_upload/db/download/MA_CWDCOPIE_0412b.pdf
-# From: Florian Philipp <florian.philipp at binarywings.net>
-# Extension: .b16
-# Description: Pixel image format produced by PCO Camware, typically used
-# together with PCO cameras.
-# Note: Different versions exist for e.g. 8 bit and 16 bit images.
-# Documentation is incomplete.
-0 string/b PCO- PCO B16 image data
->12 lelong x \b, %dx
->16 lelong x \b%d
->20 lelong 0 \b, short header
->20 lelong -1 \b, extended header
->>24 lelong 0 \b, grayscale
->>>36 lelong 0 linear LUT
->>>36 lelong 1 logarithmic LUT
->>>28 lelong x [%d
->>>32 lelong x \b,%d]
->>24 lelong 1 \b, color
->>>64 lelong 0 linear LUT
->>>64 lelong 1 logarithmic LUT
->>>40 lelong x r[%d
->>>44 lelong x \b,%d]
->>>48 lelong x g[%d
->>>52 lelong x \b,%d]
->>>56 lelong x b[%d
->>>60 lelong x \b,%d]
-
-# Polar Monitor Bitmap (.pmb) used as logo for Polar Electro watches
-# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 string/t [BitmapInfo2] Polar Monitor Bitmap text
-!:mime image/x-polar-monitor-bitmap
-
-# From: Rick Richardson <rickrich at gmail.com>
-0 string GARMIN\ BITMAP\ 01 Garmin Bitmap file
-
-# Type: Ulead Photo Explorer5 (.pe5)
-# URL: http://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese)
-# From: Simon Horman <horms at debian.org>
-0 string IIO2H Ulead Photo Explorer5
-
-# Type: X11 cursor
-# URL: http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup
-# From: Mathias Brodala <info at noctus.net>
-0 string Xcur X11 cursor
-
-# Type: Olympus ORF raw images.
-# URL: http://libopenraw.freedesktop.org/wiki/Olympus_ORF
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-0 string MMOR Olympus ORF raw image data, big-endian
-!:mime image/x-olympus-orf
-0 string IIRO Olympus ORF raw image data, little-endian
-!:mime image/x-olympus-orf
-0 string IIRS Olympus ORF raw image data, little-endian
-!:mime image/x-olympus-orf
-
-# Type: files used in modern AVCHD camcoders to store clip information
-# Extension: .cpi
-# From: Alexander Danilov <alexander.a.danilov at gmail.com>
-0 string HDMV0100 AVCHD Clip Information
-
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# URL: http://local.wasp.uwa.edu.au/~pbourke/dataformats/pic/
-# Radiance HDR; usually has .pic or .hdr extension.
-0 string #?RADIANCE\n Radiance HDR image data
-#!mime image/vnd.radiance
-
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# URL: http://www.mpi-inf.mpg.de/resources/pfstools/pfs_format_spec.pdf
-# Used by the pfstools packages. The regex matches for the image size could
-# probably use some work. The MIME type is made up; if there's one in
-# actual common use, it should replace the one below.
-0 string PFS1\x0a PFS HDR image data
-#!mime image/x-pfs
->1 regex [0-9]*\ \b, %s
->>1 regex \ [0-9]{4} \bx%s
-
-# Type: Foveon X3F
-# URL: http://www.photofo.com/downloads/x3f-raw-format.pdf
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# Note that the MIME type isn't defined anywhere that I can find; if
-# there's a canonical type for this format, it should replace this one.
-0 string FOVb Foveon X3F raw image data
-!:mime image/x-x3f
->6 leshort x \b, version %d.
->4 leshort x \b%d
->28 lelong x \b, %dx
->32 lelong x \b%d
-
-# Paint.NET file
-# From Adam Buchbinder <adam.buchbinder at gmail.com>
-0 string PDN3 Paint.NET image data
-!:mime image/x-paintnet
-
-# Not really an image.
-# From: "Tano M. Fotang" <mfotang at quanteq.com>
-0 string \x46\x4d\x52\x00 ISO/IEC 19794-2 Format Minutiae Record (FMR)
-
-# WEBP https://developers.google.com/speed/webp/docs/riff_container
-0 string RIFF
->8 string WEBP Web/P image data
->>4 lelong x \b, %d bytes
-
-#------------------------------------------------------------------------------
-# $File: inform,v 1.5 2009/09/19 16:28:09 christos Exp $
-# inform: file(1) magic for Inform interactive fiction language
-
-# URL: http://www.inform-fiction.org/
-# From: Reuben Thomas <rrt at sc3d.org>
-
-0 search/100/cW constant\ story Inform source text
-
-#------------------------------------------------------------------------------
-# $File: intel,v 1.12 2014/04/30 21:41:02 christos Exp $
-# intel: file(1) magic for x86 Unix
-#
-# Various flavors of x86 UNIX executable/object (other than Xenix, which
-# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do
-# Windows as well.
-#
-# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
-# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere
-# as well, if, as, and when IBM makes it portable.
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-0 leshort 0502 basic-16 executable
->12 lelong >0 not stripped
-#>22 leshort >0 - version %d
-0 leshort 0503 basic-16 executable (TV)
->12 lelong >0 not stripped
-#>22 leshort >0 - version %d
-0 leshort 0510 x86 executable
->12 lelong >0 not stripped
-0 leshort 0511 x86 executable (TV)
->12 lelong >0 not stripped
-0 leshort =0512 iAPX 286 executable small model (COFF)
->12 lelong >0 not stripped
-#>22 leshort >0 - version %d
-0 leshort =0522 iAPX 286 executable large model (COFF)
->12 lelong >0 not stripped
-#>22 leshort >0 - version %d
-# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
-0 leshort =0514 80386 COFF executable
->12 lelong >0 not stripped
->22 leshort >0 - version %d
-
-# rom: file(1) magic for BIOS ROM Extensions found in intel machines
-# mapped into memory between 0xC0000 and 0xFFFFF
-# From Gurkan Sengun <gurkan at linuks.mine.nu>, www.linuks.mine.nu
-0 beshort 0x55AA BIOS (ia32) ROM Ext.
->5 string USB USB
->7 string LDR UNDI image
->30 string IBM IBM comp. Video
->26 string Adaptec Adaptec
->28 string Adaptec Adaptec
->42 string PROMISE Promise
->2 byte x (%d*512)
-
-# Flash descriptors for Intel SPI flash roms.
-# From Dr. Jesus <j at hug.gs>
-0 lelong 0x0ff0a55a Intel serial flash for ICH/PCH ROM <= 5 or 3400 series A-step
-16 lelong 0x0ff0a55a Intel serial flash for PCH ROM
-
-#------------------------------------------------------------------------------
-# $File: interleaf,v 1.10 2009/09/19 16:28:10 christos Exp $
-# interleaf: file(1) magic for InterLeaf TPS:
-#
-0 string =\210OPS Interleaf saved data
-0 string =<!OPS Interleaf document text
->5 string ,\ Version\ = \b, version
->>17 string >\0 %.3s
-
-#------------------------------------------------------------------------------
-# $File: island,v 1.5 2009/09/19 16:28:10 christos Exp $
-# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
-# "/etc/magic":
-# From: guy at netapp.com (Guy Harris)
-#
-4 string pgscriptver IslandWrite document
-13 string DrawFile IslandDraw document
-
-
-#------------------------------------------------------------------------------
-# $File: ispell,v 1.8 2009/09/19 16:28:10 christos Exp $
-# ispell: file(1) magic for ispell
-#
-# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic
-# will match 0x9600 through 0x9603 in *both* little endian and big endian.
-# (No other current magic entries collide.)
-#
-# Updated by Daniel Quinlan (quinlan at yggdrasil.com)
-#
-0 leshort&0xFFFC 0x9600 little endian ispell
->0 byte 0 hash file (?),
->0 byte 1 3.0 hash file,
->0 byte 2 3.1 hash file,
->0 byte 3 hash file (?),
->2 leshort 0x00 8-bit, no capitalization, 26 flags
->2 leshort 0x01 7-bit, no capitalization, 26 flags
->2 leshort 0x02 8-bit, capitalization, 26 flags
->2 leshort 0x03 7-bit, capitalization, 26 flags
->2 leshort 0x04 8-bit, no capitalization, 52 flags
->2 leshort 0x05 7-bit, no capitalization, 52 flags
->2 leshort 0x06 8-bit, capitalization, 52 flags
->2 leshort 0x07 7-bit, capitalization, 52 flags
->2 leshort 0x08 8-bit, no capitalization, 128 flags
->2 leshort 0x09 7-bit, no capitalization, 128 flags
->2 leshort 0x0A 8-bit, capitalization, 128 flags
->2 leshort 0x0B 7-bit, capitalization, 128 flags
->2 leshort 0x0C 8-bit, no capitalization, 256 flags
->2 leshort 0x0D 7-bit, no capitalization, 256 flags
->2 leshort 0x0E 8-bit, capitalization, 256 flags
->2 leshort 0x0F 7-bit, capitalization, 256 flags
->4 leshort >0 and %d string characters
-0 beshort&0xFFFC 0x9600 big endian ispell
->1 byte 0 hash file (?),
->1 byte 1 3.0 hash file,
->1 byte 2 3.1 hash file,
->1 byte 3 hash file (?),
->2 beshort 0x00 8-bit, no capitalization, 26 flags
->2 beshort 0x01 7-bit, no capitalization, 26 flags
->2 beshort 0x02 8-bit, capitalization, 26 flags
->2 beshort 0x03 7-bit, capitalization, 26 flags
->2 beshort 0x04 8-bit, no capitalization, 52 flags
->2 beshort 0x05 7-bit, no capitalization, 52 flags
->2 beshort 0x06 8-bit, capitalization, 52 flags
->2 beshort 0x07 7-bit, capitalization, 52 flags
->2 beshort 0x08 8-bit, no capitalization, 128 flags
->2 beshort 0x09 7-bit, no capitalization, 128 flags
->2 beshort 0x0A 8-bit, capitalization, 128 flags
->2 beshort 0x0B 7-bit, capitalization, 128 flags
->2 beshort 0x0C 8-bit, no capitalization, 256 flags
->2 beshort 0x0D 7-bit, no capitalization, 256 flags
->2 beshort 0x0E 8-bit, capitalization, 256 flags
->2 beshort 0x0F 7-bit, capitalization, 256 flags
->4 beshort >0 and %d string characters
-# ispell 4.0 hash files kromJx <kromJx at crosswinds.net>
-# Ispell 4.0
-0 string ISPL ispell
->4 long x hash file version %d,
->8 long x lexletters %d,
->12 long x lexsize %d,
->16 long x hashsize %d,
->20 long x stblsize %d
-
-#------------------------------------------------------------------------------
-# $File: isz,v 1.3 2014/04/30 21:41:02 christos Exp $
-# ISO Zipped file format
-# http://www.ezbsystems.com/isz/iszspec.txt
-0 string IsZ! ISO Zipped file
->4 byte x \b, header size %u
->5 byte x \b, version %u
->8 lelong x \b, serial %u
-#12 leshort x \b, sector size %u
-#>16 lelong x \b, total sectors %u
->17 byte >0 \b, password protected
-#>24 lequad x \b, segment size %llu
-#>32 lelong x \b, blocks %u
-#>36 lelong x \b, block size %u
-
-#------------------------------------------------------------
-# $File: java,v 1.16 2013/09/24 20:22:03 christos Exp $
-# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the
-# same magic number, 0xcafebabe, so they are both handled
-# in the entry called "cafebabe".
-#------------------------------------------------------------
-# Java serialization
-# From Martin Pool (m.pool at pharos.com.au)
-0 beshort 0xaced Java serialization data
->2 beshort >0x0004 \b, version %d
-
-0 belong 0xfeedfeed Java KeyStore
-!:mime application/x-java-keystore
-0 belong 0xcececece Java JCE KeyStore
-!:mime application/x-java-jce-keystore
-
-# Java source
-0 regex ^import.*;$ Java source
-!:mime text/x-java
-
-#------------------------------------------------------------------------------
-# $File: javascript,v 1.1 2012/06/16 13:30:36 christos Exp $
-# javascript: magic for javascript and node.js scripts.
-#
-0 search/1/w #!/bin/node Node.js script text executable
-!:mime application/javascript
-0 search/1/w #!/usr/bin/node Node.js script text executable
-!:mime application/javascript
-0 search/1/w #!/bin/nodejs Node.js script text executable
-!:mime application/javascript
-0 search/1/w #!/usr/bin/nodejs Node.js script text executable
-!:mime application/javascript
-0 search/1 #!/usr/bin/env\ node Node.js script text executable
-!:mime application/javascript
-0 search/1 #!/usr/bin/env\ nodejs Node.js script text executable
-!:mime application/javascript
-
-#------------------------------------------------------------------------------
-# $File: jpeg,v 1.19 2013/02/04 15:50:03 christos Exp $
-# JPEG images
-# SunOS 5.5.1 had
-#
-# 0 string \377\330\377\340 JPEG file
-# 0 string \377\330\377\356 JPG file
-#
-# both of which turn into "JPEG image data" here.
-#
-0 beshort 0xffd8 JPEG image data
-!:mime image/jpeg
-!:apple 8BIMJPEG
-!:strength +2
->6 string JFIF \b, JFIF standard
-# The following added by Erik Rossen <rossen at freesurf.ch> 1999-09-06
-# in a vain attempt to add image size reporting for JFIF. Note that these
-# tests are not fool-proof since some perfectly valid JPEGs are currently
-# impossible to specify in magic(4) format.
-# First, a little JFIF version info:
->>11 byte x \b %d.
->>12 byte x \b%02d
-# Next, the resolution or aspect ratio of the image:
-#>>13 byte 0 \b, aspect ratio
-#>>13 byte 1 \b, resolution (DPI)
-#>>13 byte 2 \b, resolution (DPCM)
-#>>4 beshort x \b, segment length %d
-# Next, show thumbnail info, if it exists:
->>18 byte !0 \b, thumbnail %dx
->>>19 byte x \b%d
-
-# EXIF moved down here to avoid reporting a bogus version number,
-# and EXIF version number printing added.
-# - Patrik R=E5dman <patrik+file-magic at iki.fi>
->6 string Exif \b, EXIF standard
-# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD.
-# All possible combinations of entries have to be enumerated, since no looping
-# is possible. And both endians are possible...
-# The combinations included below are from real-world JPEGs.
-# Little-endian
->>12 string II
-# IFD 0 Entry #5:
->>>70 leshort 0x8769
-# EXIF IFD Entry #1:
->>>>(78.l+14) leshort 0x9000
->>>>>(78.l+23) byte x %c
->>>>>(78.l+24) byte x \b.%c
->>>>>(78.l+25) byte !0x30 \b%c
-# IFD 0 Entry #9:
->>>118 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(126.l+38) leshort 0x9000
->>>>>(126.l+47) byte x %c
->>>>>(126.l+48) byte x \b.%c
->>>>>(126.l+49) byte !0x30 \b%c
-# IFD 0 Entry #10
->>>130 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(138.l+38) leshort 0x9000
->>>>>(138.l+47) byte x %c
->>>>>(138.l+48) byte x \b.%c
->>>>>(138.l+49) byte !0x30 \b%c
-# EXIF IFD Entry #4:
->>>>(138.l+50) leshort 0x9000
->>>>>(138.l+59) byte x %c
->>>>>(138.l+60) byte x \b.%c
->>>>>(138.l+61) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(138.l+62) leshort 0x9000
->>>>>(138.l+71) byte x %c
->>>>>(138.l+72) byte x \b.%c
->>>>>(138.l+73) byte !0x30 \b%c
-# IFD 0 Entry #11
->>>142 leshort 0x8769
-# EXIF IFD Entry #3:
->>>>(150.l+38) leshort 0x9000
->>>>>(150.l+47) byte x %c
->>>>>(150.l+48) byte x \b.%c
->>>>>(150.l+49) byte !0x30 \b%c
-# EXIF IFD Entry #4:
->>>>(150.l+50) leshort 0x9000
->>>>>(150.l+59) byte x %c
->>>>>(150.l+60) byte x \b.%c
->>>>>(150.l+61) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(150.l+62) leshort 0x9000
->>>>>(150.l+71) byte x %c
->>>>>(150.l+72) byte x \b.%c
->>>>>(150.l+73) byte !0x30 \b%c
-# Big-endian
->>12 string MM
-# IFD 0 Entry #9:
->>>118 beshort 0x8769
-# EXIF IFD Entry #1:
->>>>(126.L+14) beshort 0x9000
->>>>>(126.L+23) byte x %c
->>>>>(126.L+24) byte x \b.%c
->>>>>(126.L+25) byte !0x30 \b%c
-# EXIF IFD Entry #3:
->>>>(126.L+38) beshort 0x9000
->>>>>(126.L+47) byte x %c
->>>>>(126.L+48) byte x \b.%c
->>>>>(126.L+49) byte !0x30 \b%c
-# IFD 0 Entry #10
->>>130 beshort 0x8769
-# EXIF IFD Entry #3:
->>>>(138.L+38) beshort 0x9000
->>>>>(138.L+47) byte x %c
->>>>>(138.L+48) byte x \b.%c
->>>>>(138.L+49) byte !0x30 \b%c
-# EXIF IFD Entry #5:
->>>>(138.L+62) beshort 0x9000
->>>>>(138.L+71) byte x %c
->>>>>(138.L+72) byte x \b.%c
->>>>>(138.L+73) byte !0x30 \b%c
-# IFD 0 Entry #11
->>>142 beshort 0x8769
-# EXIF IFD Entry #4:
->>>>(150.L+50) beshort 0x9000
->>>>>(150.L+59) byte x %c
->>>>>(150.L+60) byte x \b.%c
->>>>>(150.L+61) byte !0x30 \b%c
-# Here things get sticky. We can do ONE MORE marker segment with
-# indirect addressing, and that's all. It would be great if we could
-# do pointer arithemetic like in an assembler language. Christos?
-# And if there was some sort of looping construct to do searches, plus a few
-# named accumulators, it would be even more effective...
-# At least we can show a comment if no other segments got inserted before:
->(4.S+5) byte 0xFE \b, comment:
->>(4.S+6) pstring/HJ x "%s"
-# Or, we can show the encoding type (I've included only the three most common)
-# and image dimensions if we are lucky and the SOFn (image segment) is here:
->(4.S+5) byte 0xC0 \b, baseline
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
->(4.S+5) byte 0xC1 \b, extended sequential
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
->(4.S+5) byte 0xC2 \b, progressive
->>(4.S+6) byte x \b, precision %d
->>(4.S+7) beshort x \b, %dx
->>(4.S+9) beshort x \b%d
-# I've commented-out quantisation table reporting. I doubt anyone cares yet.
-#>(4.S+5) byte 0xDB \b, quantisation table
-#>>(4.S+6) beshort x \b length=%d
-#>14 beshort x \b, %d x
-#>16 beshort x \b %d
-
-# HSI is Handmade Software's proprietary JPEG encoding scheme
-0 string hsi1 JPEG image data, HSI proprietary
-
-# From: David Santinoli <david at santinoli.com>
-0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000
-# From: Johan van der Knijff <johan.vanderknijff at kb.nl>
-# Added sub-entries for JP2, JPX, JPM and MJ2 formats; added mimetypes
-# https://github.com/bitsgalore/jp2kMagic
-#
-# Now read value of 'Brand' field, which yields a few possibilities:
->20 string \x6a\x70\x32\x20 Part 1 (JP2)
-!:mime image/jp2
->20 string \x6a\x70\x78\x20 Part 2 (JPX)
-!:mime image/jpx
->20 string \x6a\x70\x6d\x20 Part 6 (JPM)
-!:mime image/jpm
->20 string \x6d\x6a\x70\x32 Part 3 (MJ2)
-!:mime video/mj2
-
-# Type: JPEG 2000 codesream
-# From: Mathieu Malaterre <mathieu.malaterre at gmail.com>
-0 belong 0xff4fff51 JPEG 2000 codestream
-45 beshort 0xff52
-
-#------------------------------------------------------------------------------
-# $File: karma,v 1.7 2014/04/30 21:41:02 christos Exp $
-# karma: file(1) magic for Karma data files
-#
-# From <rgooch at atnf.csiro.au>
-
-0 string KarmaRHD Version Karma Data Structure Version
->16 belong x %u
-
-#------------------------------------------------------------------------------
-# $File: kde,v 1.5 2010/11/25 15:00:12 christos Exp $
-# kde: file(1) magic for KDE
-
-0 string/t [KDE\ Desktop\ Entry] KDE desktop entry
-!:mime application/x-kdelnk
-0 string/t #\ KDE\ Config\ File KDE config file
-!:mime application/x-kdelnk
-0 string/t #\ xmcd xmcd database file for kscd
-!:mime text/x-xmcd
-
-#------------------------------------------------------------------------------
-# $File: keepass,v 1.1 2012/12/24 22:14:56 christos Exp $
-# keepass: file(1) magic for KeePass file
-#
-# Keepass Password Safe:
-# * original one: http://keepass.info/
-# * *nix port: http://www.keepassx.org/
-# * android port: http://code.google.com/p/keepassdroid/
-
-0 lelong 0x9AA2D903 Keepass password database
->4 lelong 0xB54BFB65 1.x KDB
->>48 lelong >0 \b, %d groups
->>52 lelong >0 \b, %d entries
->>8 lelong&0x0f 1 \b, SHA-256
->>8 lelong&0x0f 2 \b, AES
->>8 lelong&0x0f 4 \b, RC4
->>8 lelong&0x0f 8 \b, Twofish
->>120 lelong >0 \b, %d key transformation rounds
->4 lelong 0xB54BFB67 2.x KDBX
-
-#------------------------------------------------------------------------------
-# $File: kml,v 1.3 2010/11/25 15:00:12 christos Exp $
-# Type: Google KML, formerly Keyhole Markup Language
-# Future development of this format has been handed
-# over to the Open Geospatial Consortium.
-# http://www.opengeospatial.org/standards/kml/
-# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
-0 string/t \<?xml
->20 search/400 \ xmlns=
->>&0 regex ['"]http://earth.google.com/kml Google KML document
-!:mime application/vnd.google-earth.kml+xml
->>>&1 string 2.0' \b, version 2.0
->>>&1 string 2.1' \b, version 2.1
->>>&1 string 2.2' \b, version 2.2
-
-#------------------------------------------------------------------------------
-# Type: OpenGIS KML, formerly Keyhole Markup Language
-# This standard is maintained by the
-# Open Geospatial Consortium.
-# http://www.opengeospatial.org/standards/kml/
-# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
->>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document
-!:mime application/vnd.google-earth.kml+xml
->>>&1 string/t 2.2 \b, version 2.2
-
-#------------------------------------------------------------------------------
-# Type: Google KML Archive (ZIP based)
-# http://code.google.com/apis/kml/documentation/kml_tut.html
-# From: Asbjoern Sloth Toennesen <asbjorn at lila.io>
-0 string PK\003\004
->4 byte 0x14
->>30 string doc.kml Compressed Google KML Document, including resources.
-!:mime application/vnd.google-earth.kmz
-
-#------------------------------------------------------------------------------
-# $File: lecter,v 1.4 2009/09/19 16:28:10 christos Exp $
-# DEC SRC Virtual Paper: Lectern files
-# Karl M. Hegbloom <karlheg at inetarena.com>
-0 string lect DEC SRC Virtual Paper Lectern file
-
-#------------------------------------------------------------------------------
-# $File: lex,v 1.6 2009/09/19 16:28:10 christos Exp $
-# lex: file(1) magic for lex
-#
-# derived empirically, your offsets may vary!
-0 search/100 yyprevious C program text (from lex)
->3 search/1 >\0 for %s
-# C program text from GNU flex, from Daniel Quinlan <quinlan at yggdrasil.com>
-0 search/100 generated\ by\ flex C program text (from flex)
-# lex description file, from Daniel Quinlan <quinlan at yggdrasil.com>
-0 search/1 %{ lex description text
-
-#------------------------------------------------------------------------------
-# $File: lif,v 1.8 2009/09/19 16:28:10 christos Exp $
-# lif: file(1) magic for lif
-#
-# (Daniel Quinlan <quinlan at yggdrasil.com>)
-#
-0 beshort 0x8000 lif file
-
-#------------------------------------------------------------------------------
-# $File: linux,v 1.57 2014/05/20 20:10:17 christos Exp $
-# linux: file(1) magic for Linux files
-#
-# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan at yggdrasil.com>
-# The following basic Linux magic is useful for reference, but using
-# "long" magic is a better practice in order to avoid collisions.
-#
-# 2 leshort 100 Linux/i386
-# >0 leshort 0407 impure executable (OMAGIC)
-# >0 leshort 0410 pure executable (NMAGIC)
-# >0 leshort 0413 demand-paged executable (ZMAGIC)
-# >0 leshort 0314 demand-paged executable (QMAGIC)
-#
-0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC)
->16 lelong 0 \b, stripped
-0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC)
->16 lelong 0 \b, stripped
-0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC)
->16 lelong 0 \b, stripped
-0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC)
->16 lelong 0 \b, stripped
-#
-0 string \007\001\000 Linux/i386 object file
->20 lelong >0x1020 \b, DLL library
-# Linux-8086 stuff:
-0 string \01\03\020\04 Linux-8086 impure executable
->28 long !0 not stripped
-0 string \01\03\040\04 Linux-8086 executable
->28 long !0 not stripped
-#
-0 string \243\206\001\0 Linux-8086 object file
-#
-0 string \01\03\020\20 Minix-386 impure executable
->28 long !0 not stripped
-0 string \01\03\040\20 Minix-386 executable
->28 long !0 not stripped
-0 string \01\03\04\20 Minix-386 NSYM/GNU executable
->28 long !0 not stripped
-# core dump file, from Bill Reynolds <bill at goshawk.lanl.gov>
-216 lelong 0421 Linux/i386 core file
-!:strength / 2
->220 string >\0 of '%s'
->200 lelong >0 (signal %d)
-#
-# LILO boot/chain loaders, from Daniel Quinlan <quinlan at yggdrasil.com>
-# this can be overridden by the DOS executable (COM) entry
-2 string LILO Linux/i386 LILO boot/chain loader
-#
-# Linux make config build file, from Ole Aamot <oka at oka.no>
-# Updated by Ken Sharp
-28 string make\ config Linux make config build file (old)
-49 search/70 Kernel\ Configuration Linux make config build file
-
-#
-# PSF fonts, from H. Peter Anvin <hpa at yggdrasil.com>
-# Updated by Adam Buchbinder <adam.buchbinder at gmail.com>
-# See: http://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html
-0 leshort 0x0436 Linux/i386 PC Screen Font v1 data,
->2 byte&0x01 0 256 characters,
->2 byte&0x01 !0 512 characters,
->2 byte&0x02 0 no directory,
->2 byte&0x02 !0 Unicode directory,
->3 byte >0 8x%d
-0 string \x72\xb5\x4a\x86\x00\x00 Linux/i386 PC Screen Font v2 data,
->16 lelong x %d characters,
->12 lelong&0x01 0 no directory,
->12 lelong&0x01 !0 Unicode directory,
->24 lelong x %d
->28 lelong x \bx%d
-
-# Linux swap file, from Daniel Quinlan <quinlan at yggdrasil.com>
-4086 string SWAP-SPACE Linux/i386 swap file
-# From: Jeff Bailey <jbailey at ubuntu.com>
-# Linux swap file with swsusp1 image, from Jeff Bailey <jbailey at ubuntu.com>
-4076 string SWAPSPACE2S1SUSPEND Linux/i386 swap file (new style) with SWSUSP1 image
-# From: James Hunt <james.hunt at ubuntu.com>
-4076 string SWAPSPACE2LINHIB0001 Linux/i386 swap file (new style) (compressed hibernate)
-# according to man page of mkswap (8) March 1999
-# volume label and UUID Russell Coker
-# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
-4086 string SWAPSPACE2 Linux/i386 swap file (new style),
->0x400 long x version %d (4K pages),
->0x404 long x size %d pages,
->1052 string \0 no label,
->1052 string >\0 LABEL=%s,
->0x40c belong x UUID=%08x
->0x410 beshort x \b-%04x
->0x412 beshort x \b-%04x
->0x414 beshort x \b-%04x
->0x416 belong x \b-%08x
->0x41a beshort x \b%04x
-# From Daniel Novotny <dnovotny at redhat.com>
-# swap file for PowerPC
-65526 string SWAPSPACE2 Linux/ppc swap file
-16374 string SWAPSPACE2 Linux/ia64 swap file
-#
-# Linux kernel boot images, from Albert Cahalan <acahalan at cs.uml.edu>
-# and others such as Axel Kohlmeyer <akohlmey at rincewind.chemie.uni-ulm.de>
-# and Nicolas Lichtmaier <nick at debian.org>
-# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
-# Linux kernel boot images (i386 arch) (Wolfram Kleff)
-514 string HdrS Linux kernel
-!:strength + 55
->510 leshort 0xAA55 x86 boot executable
->>518 leshort >0x1ff
->>>529 byte 0 zImage,
->>>529 byte 1 bzImage,
->>>526 lelong >0
->>>>(526.s+0x200) string >\0 version %s,
->>498 leshort 1 RO-rootFS,
->>498 leshort 0 RW-rootFS,
->>508 leshort >0 root_dev 0x%X,
->>502 leshort >0 swap_dev 0x%X,
->>504 leshort >0 RAMdisksize %u KB,
->>506 leshort 0xFFFF Normal VGA
->>506 leshort 0xFFFE Extended VGA
->>506 leshort 0xFFFD Prompt for Videomode
->>506 leshort >0 Video mode %d
-# This also matches new kernels, which were caught above by "HdrS".
-0 belong 0xb8c0078e Linux kernel
->0x1e3 string Loading version 1.3.79 or older
->0x1e9 string Loading from prehistoric times
-
-# System.map files - Nicolas Lichtmaier <nick at debian.org>
-8 search/1 \ A\ _text Linux kernel symbol map text
-
-# LSM entries - Nicolas Lichtmaier <nick at debian.org>
-0 search/1 Begin3 Linux Software Map entry text
-0 search/1 Begin4 Linux Software Map entry text (new format)
-
-# From Matt Zimmerman, enhanced for v3 by Matthew Palmer
-0 belong 0x4f4f4f4d User-mode Linux COW file
->4 belong <3 \b, version %d
->>8 string >\0 \b, backing file %s
->4 belong >2 \b, version %d
->>32 string >\0 \b, backing file %s
-
-############################################################################
-# Linux kernel versions
-
-0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux
->497 leshort 0 x86 boot sector
->>514 belong 0x8e of a kernel from the dawn of time!
->>514 belong 0x908ed8b4 version 0.99-1.1.42
->>514 belong 0x908ed8b8 for memtest86
-
->497 leshort !0 x86 kernel
->>504 leshort >0 RAMdisksize=%u KB
->>502 leshort >0 swap=0x%X
->>508 leshort >0 root=0x%X
->>>498 leshort 1 \b-ro
->>>498 leshort 0 \b-rw
->>506 leshort 0xFFFF vga=normal
->>506 leshort 0xFFFE vga=extended
->>506 leshort 0xFFFD vga=ask
->>506 leshort >0 vga=%d
->>514 belong 0x908ed881 version 1.1.43-1.1.45
->>514 belong 0x15b281cd
->>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0
->>>0xa99 belong 0x55AA5a5a version 1.3.1,2
->>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30
->>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41
->>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45
->>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72
->>514 string HdrS
->>>518 leshort >0x1FF
->>>>529 byte 0 \b, zImage
->>>>529 byte 1 \b, bzImage
->>>>(526.s+0x200) string >\0 \b, version %s
-
-# Linux boot sector thefts.
-0 belong 0xb8c0078e Linux
->0x1e6 belong 0x454c4b53 ELKS Kernel
->0x1e6 belong !0x454c4b53 style boot sector
-
-############################################################################
-# Linux S390 kernel image
-# Created by: Jan Kaluza <jkaluza at redhat.com>
-8 string \x02\x00\x00\x18\x60\x00\x00\x50\x02\x00\x00\x68\x60\x00\x00\x50\x40\x40\x40\x40\x40\x40\x40\x40 Linux S390
->0x00010000 search/b/4096 \x00\x0a\x00\x00\x8b\xad\xcc\xcc
-# 64bit
->>&0 string \xc1\x00\xef\xe3\xf0\x68\x00\x00 Z10 64bit kernel
->>&0 string \xc1\x00\xef\xc3\x00\x00\x00\x00 Z9-109 64bit kernel
->>&0 string \xc0\x00\x20\x00\x00\x00\x00\x00 Z990 64bit kernel
->>&0 string \x00\x00\x00\x00\x00\x00\x00\x00 Z900 64bit kernel
-# 32bit
->>&0 string \x81\x00\xc8\x80\x00\x00\x00\x00 Z10 32bit kernel
->>&0 string \x81\x00\xc8\x80\x00\x00\x00\x00 Z9-109 32bit kernel
->>&0 string \x80\x00\x20\x00\x00\x00\x00\x00 Z990 32bit kernel
->>&0 string \x80\x00\x00\x00\x00\x00\x00\x00 Z900 32bit kernel
-
-# Linux ARM compressed kernel image
-# From: Kevin Cernekee <cernekee at gmail.com>
-36 lelong 0x016f2818 Linux kernel ARM boot executable zImage (little-endian)
-36 belong 0x016f2818 Linux kernel ARM boot executable zImage (big-endian)
-
-############################################################################
-# Linux 8086 executable
-0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
->5 string .
->>4 string >\0 \b, libc version %s
-
-0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable
->2 byte&0x01 !0 \b, unmapped zero page
->2 byte&0x20 0 \b, impure
->2 byte&0x20 !0
->>2 byte&0x10 !0 \b, A_EXEC
->2 byte&0x02 !0 \b, A_PAL
->2 byte&0x04 !0 \b, A_NSYM
->2 byte&0x08 !0 \b, A_STAND
->2 byte&0x40 !0 \b, A_PURE
->2 byte&0x80 !0 \b, A_TOVLY
->28 long !0 \b, not stripped
->37 string .
->>36 string >\0 \b, libc version %s
-
-# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable
-# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable
-# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable
-# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable
-
-# SYSLINUX boot logo files (from 'ppmtolss16' sources)
-# http://www.syslinux.org/wiki/index.php/SYSLINUX#Display_graphic_from_filename:
-# file extension .lss .16
-0 lelong =0x1413f33d SYSLINUX' LSS16 image data
-# syslinux-4.05/mime/image/x-lss16.xml
-!:mime image/x-lss16
->4 leshort x \b, width %d
->6 leshort x \b, height %d
-
-0 string OOOM User-Mode-Linux's Copy-On-Write disk image
->4 belong x version %d
-
-# SE Linux policy database
-# From: Mike Frysinger <vapier at gentoo.org>
-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
-
-# Linux Logical Volume Manager (LVM)
-# Emmanuel VARAGNAT <emmanuel.varagnat at guzu.net>
-#
-# System ID, UUID and volume group name are 128 bytes long
-# but they should never be full and initialized with zeros...
-#
-# LVM1
-#
-0x0 string HM\001 LVM1 (Linux Logical Volume Manager), version 1
->0x12c string >\0 , System ID: %s
-
-0x0 string HM\002 LVM1 (Linux Logical Volume Manager), version 2
->0x12c string >\0 , System ID: %s
-
-# LVM2
-#
-# It seems that the label header can be in one the four first sector
-# of the disk... (from _find_labeller in lib/label/label.c of LVM2)
-#
-# 0x200 seems to be the common case
-
-0x218 string LVM2\ 001 LVM2 PV (Linux Logical Volume Manager)
-# read the offset to add to the start of the header, and the header
-# start in 0x200
->&(&-12.l-0x21) byte x
-# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)
->>&0x0 string >\x2f \b, UUID: %.6s
->>&0x6 string >\x2f \b-%.4s
->>&0xa string >\x2f \b-%.4s
->>&0xe string >\x2f \b-%.4s
->>&0x12 string >\x2f \b-%.4s
->>&0x16 string >\x2f \b-%.4s
->>&0x1a string >\x2f \b-%.6s
->>&0x20 lequad x \b, size: %lld
-
-0x018 string LVM2\ 001 LVM2 PV (Linux Logical Volume Manager)
->&(&-12.l-0x21) byte x
-# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)
->>&0x0 string >\x2f \b, UUID: %.6s
->>&0x6 string >\x2f \b-%.4s
->>&0xa string >\x2f \b-%.4s
->>&0xe string >\x2f \b-%.4s
->>&0x12 string >\x2f \b-%.4s
->>&0x16 string >\x2f \b-%.4s
->>&0x1a string >\x2f \b-%.6s
->>&0x20 lequad x \b, size: %lld
-
-0x418 string LVM2\ 001 LVM2 PV (Linux Logical Volume Manager)
->&(&-12.l-0x21) byte x
-# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)
->>&0x0 string >\x2f \b, UUID: %.6s
->>&0x6 string >\x2f \b-%.4s
->>&0xa string >\x2f \b-%.4s
->>&0xe string >\x2f \b-%.4s
->>&0x12 string >\x2f \b-%.4s
->>&0x16 string >\x2f \b-%.4s
->>&0x1a string >\x2f \b-%.6s
->>&0x20 lequad x \b, size: %lld
-
-0x618 string LVM2\ 001 LVM2 PV (Linux Logical Volume Manager)
->&(&-12.l-0x21) byte x
-# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)
->>&0x0 string >\x2f \b, UUID: %.6s
->>&0x6 string >\x2f \b-%.4s
->>&0xa string >\x2f \b-%.4s
->>&0xe string >\x2f \b-%.4s
->>&0x12 string >\x2f \b-%.4s
->>&0x16 string >\x2f \b-%.4s
->>&0x1a string >\x2f \b-%.6s
->>&0x20 lequad x \b, size: %lld
-
-# LVM snapshot
-# from Jason Farrel
-0 string SnAp LVM Snapshot (CopyOnWrite store)
->4 lelong !0 - valid,
->4 lelong 0 - invalid,
->8 lelong x version %d,
->12 lelong x chunk_size %d
-
-# 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
-
-# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec
-# Anthon van der Neut (anthon at mnt.org)
-0 string LUKS\xba\xbe LUKS encrypted file,
->6 beshort x ver %d
->8 string x [%s,
->40 string x %s,
->72 string x %s]
->168 string x UUID: %s
-
-
-# Summary: Xen saved domain file
-# Created by: Radek Vokal <rvokal at redhat.com>
-0 string LinuxGuestRecord Xen saved domain
->20 search/256 (name
->>&1 string x (name %s)
-
-# Type: Xen, the virtual machine monitor
-# From: Radek Vokal <rvokal at redhat.com>
-0 string LinuxGuestRecord Xen saved domain
-#>2 regex \(name\ [^)]*\) %s
->20 search/256 (name (name
->>&1 string x %s...)
-
-# Systemd journald files
-# See http://www.freedesktop.org/wiki/Software/systemd/journal-files/.
-# From: Zbigniew Jedrzejewski-Szmek <zbyszek at in.waw.pl>
-
-# check magic
-0 string LPKSHHRH
-# check that state is one of known values
->16 ubyte&252 0
-# check that each half of three unique id128s is non-zero
->>24 ubequad >0
->>>32 ubequad >0
->>>>40 ubequad >0
->>>>>48 ubequad >0
->>>>>>56 ubequad >0
->>>>>>>64 ubequad >0 Journal file
-!:mime application/octet-stream
-# provide more info
->>>>>>>>184 leqdate 0 empty
->>>>>>>>16 ubyte 0 \b, offline
->>>>>>>>16 ubyte 1 \b, online
->>>>>>>>16 ubyte 2 \b, archived
->>>>>>>>8 ulelong&1 1 \b, sealed
->>>>>>>>12 ulelong&1 1 \b, compressed
-
-# BCache backing and cache devices
-# From: Gabriel de Perthuis <g2p.code at gmail.com>
-0x1008 lequad 8
->0x1018 string \xc6\x85\x73\xf6\x4e\x1a\x45\xca\x82\x65\xf5\x7f\x48\xba\x6d\x81 BCache
->>0x1010 ulequad 0 cache device
->>0x1010 ulequad 1 backing device
->>0x1010 ulequad 3 cache device
->>0x1010 ulequad 4 backing device
->>0x1048 string >0 \b, label "%.32s"
->>0x1028 ubelong x \b, uuid %08x
->>0x102c ubeshort x \b-%04x
->>0x102e ubeshort x \b-%04x
->>0x1030 ubeshort x \b-%04x
->>0x1032 ubelong x \b-%08x
->>0x1036 ubeshort x \b%04x
->>0x1038 ubelong x \b, set uuid %08x
->>0x103c ubeshort x \b-%04x
->>0x103e ubeshort x \b-%04x
->>0x1040 ubeshort x \b-%04x
->>0x1042 ubelong x \b-%08x
->>0x1046 ubeshort x \b%04x
-
-# Linux device tree:
-# File format description can be found in the Linux kernel sources at
-# Documentation/devicetree/booting-without-of.txt
-# From Christoph Biedl
-0 belong 0xd00dfeed
-# structure and strings must be within blob
->&(8.L) byte x
->>&(12.L) byte x
->>>20 belong >1 Device Tree Blob version %d
->>>>4 belong x \b, size=%d
->>>>20 belong >1
->>>>>28 belong x \b, boot CPU=%d
->>>>20 belong >2
->>>>>32 belong x \b, string block size=%d
->>>>20 belong >16
->>>>>36 belong x \b, DT structure block size=%d
-
-
-#------------------------------------------------------------------------------
-# $File: lisp,v 1.23 2009/09/19 16:28:10 christos Exp $
-# lisp: file(1) magic for lisp programs
-#
-# various lisp types, from Daniel Quinlan (quinlan at yggdrasil.com)
-
-# updated by Joerg Jenderek
-# GRR: This lot is too weak
-#0 string ;;
-# windows INF files often begin with semicolon and use CRLF as line end
-# lisp files are mainly created on unix system with LF as line end
-#>2 search/4096 !\r Lisp/Scheme program text
-#>2 search/4096 \r Windows INF file
-
-0 search/4096 (setq\ Lisp/Scheme program text
-!:mime text/x-lisp
-0 search/4096 (defvar\ Lisp/Scheme program text
-!:mime text/x-lisp
-0 search/4096 (defparam\ Lisp/Scheme program text
-!:mime text/x-lisp
-0 search/4096 (defun\ Lisp/Scheme program text
-!:mime text/x-lisp
-0 search/4096 (autoload\ Lisp/Scheme program text
-!:mime text/x-lisp
-0 search/4096 (custom-set-variables\ Lisp/Scheme program text
-!:mime text/x-lisp
-
-# Emacs 18 - this is always correct, but not very magical.
-0 string \012( Emacs v18 byte-compiled Lisp data
-!:mime application/x-elc
-# Emacs 19+ - ver. recognition added by Ian Springer
-# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs
-# - Chris Chittleborough <cchittleborough at yahoo.com.au>
-0 string ;ELC
->4 byte >18
->4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data
-!:mime application/x-elc
-
-# Files produced by CLISP Common Lisp From: Bruno Haible <haible at ilog.fr>
-0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27)
-0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text
-
-0 long 0x70768BD2 CLISP memory image data
-0 long 0xD28B7670 CLISP memory image data, other endian
-
-#.com and .bin for MIT scheme
-0 string \372\372\372\372 MIT scheme (library?)
-
-# From: David Allouche <david at allouche.net>
-0 search/1 \<TeXmacs| TeXmacs document text
-!:mime text/texmacs
-
-#------------------------------------------------------------------------------
-# $File: llvm,v 1.8 2013/01/12 03:09:51 christos Exp $
-# llvm: file(1) magic for LLVM byte-codes
-# URL: http://llvm.org/docs/BitCodeFormat.html
-# From: Al Stone <ahs3 at fc.hp.com>
-
-0 string llvm LLVM byte-codes, uncompressed
-0 string llvc0 LLVM byte-codes, null compression
-0 string llvc1 LLVM byte-codes, gzip compression
-0 string llvc2 LLVM byte-codes, bzip2 compression
-
-0 lelong 0x0b17c0de LLVM bitcode, wrapper
-# Are these Mach-O ABI values? They appear to be.
->16 lelong 0x01000007 x86_64
->16 lelong 0x00000007 i386
->16 lelong 0x00000012 ppc
->16 lelong 0x01000012 ppc64
->16 lelong 0x0000000c arm
-
-0 string BC\xc0\xde LLVM IR bitcode
-
-#------------------------------------------------------------------------------
-# $File: lua,v 1.6 2013/01/09 16:23:17 christos Exp $
-# lua: file(1) magic for Lua scripting language
-# URL: http://www.lua.org/
-# From: Reuben Thomas <rrt at sc3d.org>, Seo Sanghyeon <tinuviel at sparcs.kaist.ac.kr>
-
-# Lua scripts
-0 search/1/w #!\ /usr/bin/lua Lua script text executable
-!:mime text/x-lua
-0 search/1/w #!\ /usr/local/bin/lua Lua script text executable
-!:mime text/x-lua
-0 search/1 #!/usr/bin/env\ lua Lua script text executable
-!:mime text/x-lua
-0 search/1 #!\ /usr/bin/env\ lua Lua script text executable
-!:mime text/x-lua
-
-# Lua bytecode
-0 string \033Lua Lua bytecode,
->4 byte 0x50 version 5.0
->4 byte 0x51 version 5.1
->4 byte 0x52 version 5.2
-
-#------------------------------------------------------------------------------
-# $File: luks,v 1.4 2009/09/19 16:28:10 christos Exp $
-# luks: file(1) magic for Linux Unified Key Setup
-# URL: http://luks.endorphin.org/spec
-# From: Anthon van der Neut <anthon at mnt.org>
-
-0 string LUKS\xba\xbe LUKS encrypted file,
->6 beshort x ver %d
->8 string x [%s,
->40 string x %s,
->72 string x %s]
->168 string x UUID: %s
-#------------------------------------------------------------------------------
-# $File: m4,v 1.1 2011/12/08 12:12:46 rrt Exp $
-# make: file(1) magic for M4 scripts
-#
-0 regex \^dnl\ M4 macro processor script text
-!:mime text/x-m4
-
-#------------------------------------------------------------
-# $File: mach,v 1.19 2014/04/30 21:41:02 christos Exp $
-# Mach has two magic numbers, 0xcafebabe and 0xfeedface.
-# Unfortunately the first, cafebabe, is shared with
-# Java ByteCode, so they are both handled in the file "cafebabe".
-# The "feedface" ones are handled herein.
-#------------------------------------------------------------
-# if set, it's for the 64-bit version of the architecture
-# yes, this is separate from the low-order magic number bit
-# it's also separate from the "64-bit libraries" bit in the
-# upper 8 bits of the CPU subtype
-
-0 name mach-o-cpu
->0 belong&0x01000000 0
-#
-# 32-bit ABIs.
-#
-# 1 vax
->>0 belong&0x00ffffff 1
->>>4 belong&0x00ffffff 0 vax
->>>4 belong&0x00ffffff 1 vax11/780
->>>4 belong&0x00ffffff 2 vax11/785
->>>4 belong&0x00ffffff 3 vax11/750
->>>4 belong&0x00ffffff 4 vax11/730
->>>4 belong&0x00ffffff 5 uvaxI
->>>4 belong&0x00ffffff 6 uvaxII
->>>4 belong&0x00ffffff 7 vax8200
->>>4 belong&0x00ffffff 8 vax8500
->>>4 belong&0x00ffffff 9 vax8600
->>>4 belong&0x00ffffff 10 vax8650
->>>4 belong&0x00ffffff 11 vax8800
->>>4 belong&0x00ffffff 12 uvaxIII
->>>4 belong&0x00ffffff >12 vax subarchitecture=%d
->>0 belong&0x00ffffff 2 romp
->>0 belong&0x00ffffff 3 architecture=3
->>0 belong&0x00ffffff 4 ns32032
->>0 belong&0x00ffffff 5 ns32332
->>0 belong&0x00ffffff 6 m68k
-# 7 x86
->>0 belong&0x00ffffff 7
->>>4 belong&0x0000000f 3 i386
->>>4 belong&0x0000000f 4 i486
->>>>4 belong&0x00fffff0 0
->>>>4 belong&0x00fffff0 0x80 \bsx
->>>4 belong&0x0000000f 5 i586
->>>4 belong&0x0000000f 6
->>>>4 belong&0x00fffff0 0 p6
->>>>4 belong&0x00fffff0 0x10 pentium_pro
->>>>4 belong&0x00fffff0 0x20 pentium_2_m0x20
->>>>4 belong&0x00fffff0 0x30 pentium_2_m3
->>>>4 belong&0x00fffff0 0x40 pentium_2_m0x40
->>>>4 belong&0x00fffff0 0x50 pentium_2_m5
->>>>4 belong&0x00fffff0 >0x50 pentium_2_m0x%x
->>>4 belong&0x0000000f 7 celeron
->>>>4 belong&0x00fffff0 0x00 \b_m0x%x
->>>>4 belong&0x00fffff0 0x10 \b_m0x%x
->>>>4 belong&0x00fffff0 0x20 \b_m0x%x
->>>>4 belong&0x00fffff0 0x30 \b_m0x%x
->>>>4 belong&0x00fffff0 0x40 \b_m0x%x
->>>>4 belong&0x00fffff0 0x50 \b_m0x%x
->>>>4 belong&0x00fffff0 0x60
->>>>4 belong&0x00fffff0 0x70 \b_mobile
->>>>4 belong&0x00fffff0 >0x70 \b_m0x%x
->>>4 belong&0x0000000f 8 pentium_3
->>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 0x10 \b_m
->>>>4 belong&0x00fffff0 0x20 \b_xeon
->>>>4 belong&0x00fffff0 >0x20 \b_m0x%x
->>>4 belong&0x0000000f 9 pentiumM
->>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 >0x00 \b_m0x%x
->>>4 belong&0x0000000f 10 pentium_4
->>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 0x10 \b_m
->>>>4 belong&0x00fffff0 >0x10 \b_m0x%x
->>>4 belong&0x0000000f 11 itanium
->>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 0x10 \b_2
->>>>4 belong&0x00fffff0 >0x10 \b_m0x%x
->>>4 belong&0x0000000f 12 xeon
->>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 0x10 \b_mp
->>>>4 belong&0x00fffff0 >0x10 \b_m0x%x
->>>4 belong&0x0000000f >12 ia32 family=%d
->>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 >0x00 model=%x
->>0 belong&0x00ffffff 8 mips
->>>4 belong&0x00ffffff 1 R2300
->>>4 belong&0x00ffffff 2 R2600
->>>4 belong&0x00ffffff 3 R2800
->>>4 belong&0x00ffffff 4 R2000a
->>>4 belong&0x00ffffff 5 R2000
->>>4 belong&0x00ffffff 6 R3000a
->>>4 belong&0x00ffffff 7 R3000
->>>4 belong&0x00ffffff >7 subarchitecture=%d
->>0 belong&0x00ffffff 9 ns32532
->>0 belong&0x00ffffff 10 mc98000
->>0 belong&0x00ffffff 11 hppa
->>>4 belong&0x00ffffff 0 7100
->>>4 belong&0x00ffffff 1 7100LC
->>>4 belong&0x00ffffff >1 subarchitecture=%d
->>0 belong&0x00ffffff 12 arm
->>>4 belong&0x00ffffff 0
->>>4 belong&0x00ffffff 1 subarchitecture=%d
->>>4 belong&0x00ffffff 2 subarchitecture=%d
->>>4 belong&0x00ffffff 3 subarchitecture=%d
->>>4 belong&0x00ffffff 4 subarchitecture=%d
->>>4 belong&0x00ffffff 5 \b_v4t
->>>4 belong&0x00ffffff 6 \b_v6
->>>4 belong&0x00ffffff 7 \b_v5tej
->>>4 belong&0x00ffffff 8 \b_xscale
->>>4 belong&0x00ffffff 9 \b_v7
->>>4 belong&0x00ffffff 10 \b_v7f
->>>4 belong&0x00ffffff 11 subarchitecture=%d
->>>4 belong&0x00ffffff 12 \b_v7k
->>>4 belong&0x00ffffff >12 subarchitecture=%d
-# 13 m88k
->>0 belong&0x00ffffff 13
->>>4 belong&0x00ffffff 0 mc88000
->>>4 belong&0x00ffffff 1 mc88100
->>>4 belong&0x00ffffff 2 mc88110
->>>4 belong&0x00ffffff >2 mc88000 subarchitecture=%d
->>0 belong&0x00ffffff 14 SPARC
->>0 belong&0x00ffffff 15 i860g
->>0 belong&0x00ffffff 16 alpha
->>0 belong&0x00ffffff 17 rs6000
->>0 belong&0x00ffffff 18 ppc
->>>4 belong&0x00ffffff 0
->>>4 belong&0x00ffffff 1 \b_601
->>>4 belong&0x00ffffff 2 \b_602
->>>4 belong&0x00ffffff 3 \b_603
->>>4 belong&0x00ffffff 4 \b_603e
->>>4 belong&0x00ffffff 5 \b_603ev
->>>4 belong&0x00ffffff 6 \b_604
->>>4 belong&0x00ffffff 7 \b_604e
->>>4 belong&0x00ffffff 8 \b_620
->>>4 belong&0x00ffffff 9 \b_650
->>>4 belong&0x00ffffff 10 \b_7400
->>>4 belong&0x00ffffff 11 \b_7450
->>>4 belong&0x00ffffff 100 \b_970
->>>4 belong&0x00ffffff >100 subarchitecture=%d
->>0 belong&0x00ffffff >18 architecture=%d
->0 belong&0x01000000 0x01000000
-#
-# 64-bit ABIs.
-#
->>0 belong&0x00ffffff 0 64-bit architecture=%d
->>0 belong&0x00ffffff 1 64-bit architecture=%d
->>0 belong&0x00ffffff 2 64-bit architecture=%d
->>0 belong&0x00ffffff 3 64-bit architecture=%d
->>0 belong&0x00ffffff 4 64-bit architecture=%d
->>0 belong&0x00ffffff 5 64-bit architecture=%d
->>0 belong&0x00ffffff 6 64-bit architecture=%d
->>0 belong&0x00ffffff 7 x86_64
->>>4 belong&0x00ffffff 0 subarchitecture=%d
->>>4 belong&0x00ffffff 1 subarchitecture=%d
->>>4 belong&0x00ffffff 2 subarchitecture=%d
->>>4 belong&0x00ffffff 3
->>>4 belong&0x00ffffff 4 \b_arch1
->>>4 belong&0x00ffffff >4 subarchitecture=%d
->>0 belong&0x00ffffff 8 64-bit architecture=%d
->>0 belong&0x00ffffff 9 64-bit architecture=%d
->>0 belong&0x00ffffff 10 64-bit architecture=%d
->>0 belong&0x00ffffff 11 64-bit architecture=%d
->>0 belong&0x00ffffff 12 64-bit architecture=%d
->>0 belong&0x00ffffff 13 64-bit architecture=%d
->>0 belong&0x00ffffff 14 64-bit architecture=%d
->>0 belong&0x00ffffff 15 64-bit architecture=%d
->>0 belong&0x00ffffff 16 64-bit architecture=%d
->>0 belong&0x00ffffff 17 64-bit architecture=%d
->>0 belong&0x00ffffff 18 ppc64
->>>4 belong&0x00ffffff 0
->>>4 belong&0x00ffffff 1 \b_601
->>>4 belong&0x00ffffff 2 \b_602
->>>4 belong&0x00ffffff 3 \b_603
->>>4 belong&0x00ffffff 4 \b_603e
->>>4 belong&0x00ffffff 5 \b_603ev
->>>4 belong&0x00ffffff 6 \b_604
->>>4 belong&0x00ffffff 7 \b_604e
->>>4 belong&0x00ffffff 8 \b_620
->>>4 belong&0x00ffffff 9 \b_650
->>>4 belong&0x00ffffff 10 \b_7400
->>>4 belong&0x00ffffff 11 \b_7450
->>>4 belong&0x00ffffff 100 \b_970
->>>4 belong&0x00ffffff >100 subarchitecture=%d
->>0 belong&0x00ffffff >18 64-bit architecture=%d
-
-
-0 name mach-o-be
->0 byte 0xcf 64-bit
->4 use mach-o-cpu
->12 belong 1 object
->12 belong 2 executable
->12 belong 3 fixed virtual memory shared library
->12 belong 4 core
->12 belong 5 preload executable
->12 belong 6 dynamically linked shared library
->12 belong 7 dynamic linker
->12 belong 8 bundle
->12 belong 9 dynamically linked shared library stub
->12 belong 10 dSYM companion file
->12 belong 11 kext bundle
->12 belong >11
->>12 belong x filetype=%d
-
-#
-0 lelong&0xfffffffe 0xfeedface Mach-O
-!:strength +1
->0 use \^mach-o-be
-
-0 belong&0xfffffffe 0xfeedface Mach-O
-!:strength +1
->0 use mach-o-be
-
-#------------------------------------------------------------------------------
-# $File: macintosh,v 1.23 2013/11/19 18:47:58 christos Exp $
-# macintosh description
-#
-# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
-# Daniel Quinlan, quinlan at yggdrasil.com
-11 string must\ be\ converted\ with\ BinHex BinHex binary text
-!:mime application/mac-binhex40
->41 string x \b, version %.3s
-
-# Stuffit archives are the de facto standard of compression for Macintosh
-# files obtained from most archives. (franklsm at tuns.ca)
-0 string SIT! StuffIt Archive (data)
-!:mime application/x-stuffit
-!:apple SIT!SIT!
->2 string x : %s
-0 string SITD StuffIt Deluxe (data)
->2 string x : %s
-0 string Seg StuffIt Deluxe Segment (data)
->2 string x : %s
-
-# Newer StuffIt archives (grant at netbsd.org)
-0 string StuffIt StuffIt Archive
-!:mime application/x-stuffit
-!:apple SIT!SIT!
-#>162 string >0 : %s
-
-# Macintosh Applications and Installation binaries (franklsm at tuns.ca)
-# GRR: Too weak
-#0 string APPL Macintosh Application (data)
-#>2 string x \b: %s
-
-# Macintosh System files (franklsm at tuns.ca)
-# GRR: Too weak
-#0 string zsys Macintosh System File (data)
-#0 string FNDR Macintosh Finder (data)
-#0 string libr Macintosh Library (data)
-#>2 string x : %s
-#0 string shlb Macintosh Shared Library (data)
-#>2 string x : %s
-#0 string cdev Macintosh Control Panel (data)
-#>2 string x : %s
-#0 string INIT Macintosh Extension (data)
-#>2 string x : %s
-#0 string FFIL Macintosh Truetype Font (data)
-#>2 string x : %s
-#0 string LWFN Macintosh Postscript Font (data)
-#>2 string x : %s
-
-# Additional Macintosh Files (franklsm at tuns.ca)
-# GRR: Too weak
-#0 string PACT Macintosh Compact Pro Archive (data)
-#>2 string x : %s
-#0 string ttro Macintosh TeachText File (data)
-#>2 string x : %s
-#0 string TEXT Macintosh TeachText File (data)
-#>2 string x : %s
-#0 string PDF Macintosh PDF File (data)
-#>2 string x : %s
-
-# MacBinary format (Eric Fischer, enf at pobox.com)
-#
-# Unfortunately MacBinary doesn't really have a magic number prior
-# to the MacBinary III format. The checksum is really the way to
-# do it, but the magic file format isn't up to the challenge.
-#
-# 0 byte 0
-# 1 byte # filename length
-# 2 string # filename
-# 65 string # file type
-# 69 string # file creator
-# 73 byte # Finder flags
-# 74 byte 0
-# 75 beshort # vertical posn in window
-# 77 beshort # horiz posn in window
-# 79 beshort # window or folder ID
-# 81 byte # protected?
-# 82 byte 0
-# 83 belong # length of data segment
-# 87 belong # length of resource segment
-# 91 belong # file creation date
-# 95 belong # file modification date
-# 99 beshort # length of comment after resource
-# 101 byte # new Finder flags
-# 102 string mBIN # (only in MacBinary III)
-# 106 byte # char. code of file name
-# 107 byte # still more Finder flags
-# 116 belong # total file length
-# 120 beshort # length of add'l header
-# 122 byte 129 # for MacBinary II
-# 122 byte 130 # for MacBinary III
-# 123 byte 129 # minimum version that can read fmt
-# 124 beshort # checksum
-#
-# This attempts to use the version numbers as a magic number, requiring
-# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second
-# be 0x81. This works for the files I have, but maybe not for everyone's.
-
-# Unfortunately, this magic is quite weak - MPi
-#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data
-
-# MacBinary I doesn't have the version number field at all, but MacBinary II
-# has been in use since 1987 so I hope there aren't many really old files
-# floating around that this will miss. The original spec calls for using
-# the nulls in 0, 74, and 82 as the magic number.
-#
-# Another possibility, that would also work for MacBinary I, is to use
-# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will
-# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset,
-# and that 74 will be 0. So something like
-#
-# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data
-#
-# >73 byte&0x01 0x01 \b, inited
-# >73 byte&0x02 0x02 \b, changed
-# >73 byte&0x04 0x04 \b, busy
-# >73 byte&0x08 0x08 \b, bozo
-# >73 byte&0x10 0x10 \b, system
-# >73 byte&0x10 0x20 \b, bundle
-# >73 byte&0x10 0x40 \b, invisible
-# >73 byte&0x10 0x80 \b, locked
-
-#>65 string x \b, type "%4.4s"
-
-#>65 string 8BIM (PhotoShop)
-#>65 string ALB3 (PageMaker 3)
-#>65 string ALB4 (PageMaker 4)
-#>65 string ALT3 (PageMaker 3)
-#>65 string APPL (application)
-#>65 string AWWP (AppleWorks word processor)
-#>65 string CIRC (simulated circuit)
-#>65 string DRWG (MacDraw)
-#>65 string EPSF (Encapsulated PostScript)
-#>65 string FFIL (font suitcase)
-#>65 string FKEY (function key)
-#>65 string FNDR (Macintosh Finder)
-#>65 string GIFf (GIF image)
-#>65 string Gzip (GNU gzip)
-#>65 string INIT (system extension)
-#>65 string LIB\ (library)
-#>65 string LWFN (PostScript font)
-#>65 string MSBC (Microsoft BASIC)
-#>65 string PACT (Compact Pro archive)
-#>65 string PDF\ (Portable Document Format)
-#>65 string PICT (picture)
-#>65 string PNTG (MacPaint picture)
-#>65 string PREF (preferences)
-#>65 string PROJ (Think C project)
-#>65 string QPRJ (Think Pascal project)
-#>65 string SCFL (Defender scores)
-#>65 string SCRN (startup screen)
-#>65 string SITD (StuffIt Deluxe)
-#>65 string SPn3 (SuperPaint)
-#>65 string STAK (HyperCard stack)
-#>65 string Seg\ (StuffIt segment)
-#>65 string TARF (Unix tar archive)
-#>65 string TEXT (ASCII)
-#>65 string TIFF (TIFF image)
-#>65 string TOVF (Eudora table of contents)
-#>65 string WDBN (Microsoft Word word processor)
-#>65 string WORD (MacWrite word processor)
-#>65 string XLS\ (Microsoft Excel)
-#>65 string ZIVM (compress (.Z))
-#>65 string ZSYS (Pre-System 7 system file)
-#>65 string acf3 (Aldus FreeHand)
-#>65 string cdev (control panel)
-#>65 string dfil (Desk Acessory suitcase)
-#>65 string libr (library)
-#>65 string nX^d (WriteNow word processor)
-#>65 string nX^w (WriteNow dictionary)
-#>65 string rsrc (resource)
-#>65 string scbk (Scrapbook)
-#>65 string shlb (shared library)
-#>65 string ttro (SimpleText read-only)
-#>65 string zsys (system file)
-
-#>69 string x \b, creator "%4.4s"
-
-# Somewhere, Apple has a repository of registered Creator IDs. These are
-# just the ones that I happened to have files from and was able to identify.
-
-#>69 string 8BIM (Adobe Photoshop)
-#>69 string ALD3 (PageMaker 3)
-#>69 string ALD4 (PageMaker 4)
-#>69 string ALFA (Alpha editor)
-#>69 string APLS (Apple Scanner)
-#>69 string APSC (Apple Scanner)
-#>69 string BRKL (Brickles)
-#>69 string BTFT (BitFont)
-#>69 string CCL2 (Common Lisp 2)
-#>69 string CCL\ (Common Lisp)
-#>69 string CDmo (The Talking Moose)
-#>69 string CPCT (Compact Pro)
-#>69 string CSOm (Eudora)
-#>69 string DMOV (Font/DA Mover)
-#>69 string DSIM (DigSim)
-#>69 string EDIT (Macintosh Edit)
-#>69 string ERIK (Macintosh Finder)
-#>69 string EXTR (self-extracting archive)
-#>69 string Gzip (GNU gzip)
-#>69 string KAHL (Think C)
-#>69 string LWFU (LaserWriter Utility)
-#>69 string LZIV (compress)
-#>69 string MACA (MacWrite)
-#>69 string MACS (Macintosh operating system)
-#>69 string MAcK (MacKnowledge terminal emulator)
-#>69 string MLND (Defender)
-#>69 string MPNT (MacPaint)
-#>69 string MSBB (Microsoft BASIC (binary))
-#>69 string MSWD (Microsoft Word)
-#>69 string NCSA (NCSA Telnet)
-#>69 string PJMM (Think Pascal)
-#>69 string PSAL (Hunt the Wumpus)
-#>69 string PSI2 (Apple File Exchange)
-#>69 string R*ch (BBEdit)
-#>69 string RMKR (Resource Maker)
-#>69 string RSED (Resource Editor)
-#>69 string Rich (BBEdit)
-#>69 string SIT! (StuffIt)
-#>69 string SPNT (SuperPaint)
-#>69 string Unix (NeXT Mac filesystem)
-#>69 string VIM! (Vim editor)
-#>69 string WILD (HyperCard)
-#>69 string XCEL (Microsoft Excel)
-#>69 string aCa2 (Fontographer)
-#>69 string aca3 (Aldus FreeHand)
-#>69 string dosa (Macintosh MS-DOS file system)
-#>69 string movr (Font/DA Mover)
-#>69 string nX^n (WriteNow)
-#>69 string pdos (Apple ProDOS file system)
-#>69 string scbk (Scrapbook)
-#>69 string ttxt (SimpleText)
-#>69 string ufox (Foreign File Access)
-
-# Just in case...
-
-102 string mBIN MacBinary III data with surprising version number
-
-# sas magic from Bruce Foster (bef at nwu.edu)
-#
-#0 string SAS SAS
-#>8 string x %s
-0 string SAS SAS
->24 string DATA data file
->24 string CATALOG catalog
->24 string INDEX data file index
->24 string VIEW data view
-# sas 7+ magic from Reinhold Koch (reinhold.koch at roche.com)
-#
-0x54 string SAS SAS 7+
->0x9C string DATA data file
->0x9C string CATALOG catalog
->0x9C string INDEX data file index
->0x9C string VIEW data view
-
-# spss magic for SPSS system and portable files,
-# from Bruce Foster (bef at nwu.edu).
-
-0 long 0xc1e2c3c9 SPSS Portable File
->40 string x %s
-
-0 string $FL2 SPSS System File
->24 string x %s
-
-0 string $FL3 SPSS System File
->24 string x %s
-
-# Macintosh filesystem data
-# From "Tom N Harris" <telliamed at mac.com>
-# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson at alaska.net>
-# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these
-# entries depend on the data arithmetic added after v.35
-# There's also some Pascal strings in here, ditto...
-
-# The boot block signature, according to IM:Files, is
-# "for HFS volumes, this field always contains the value 0x4C4B."
-# But if this is true for MFS or HFS+ volumes, I don't know.
-# Alternatively, the boot block is supposed to be zeroed if it's
-# unused, so a simply >0 should suffice.
-
-0x400 beshort 0xD2D7 Macintosh MFS data
->0 beshort 0x4C4B (bootable)
->0x40a beshort &0x8000 (locked)
->0x402 beldate-0x7C25B080 x created: %s,
->0x406 beldate-0x7C25B080 >0 last backup: %s,
->0x414 belong x block size: %d,
->0x412 beshort x number of blocks: %d,
->0x424 pstring x volume name: %s
-
-# "BD" gives many false positives
-#0x400 beshort 0x4244 Macintosh HFS data
-#>0 beshort 0x4C4B (bootable)
-#>0x40a beshort &0x8000 (locked)
-#>0x40a beshort ^0x0100 (mounted)
-#>0x40a beshort &0x0200 (spared blocks)
-#>0x40a beshort &0x0800 (unclean)
-#>0x47C beshort 0x482B (Embedded HFS+ Volume)
-#>0x402 beldate-0x7C25B080 x created: %s,
-#>0x406 beldate-0x7C25B080 x last modified: %s,
-#>0x440 beldate-0x7C25B080 >0 last backup: %s,
-#>0x414 belong x block size: %d,
-#>0x412 beshort x number of blocks: %d,
-#>0x424 pstring x volume name: %s
-
-0x400 beshort 0x482B Macintosh HFS Extended
->&0 beshort x version %d data
->0 beshort 0x4C4B (bootable)
->0x404 belong ^0x00000100 (mounted)
->&2 belong &0x00000200 (spared blocks)
->&2 belong &0x00000800 (unclean)
->&2 belong &0x00008000 (locked)
->&6 string x last mounted by: '%.4s',
-# really, that should be treated as a belong and we print a string
-# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1"
->&14 beldate-0x7C25B080 x created: %s,
-# only the creation date is local time, all other timestamps in HFS+ are UTC.
->&18 bedate-0x7C25B080 x last modified: %s,
->&22 bedate-0x7C25B080 >0 last backup: %s,
->&26 bedate-0x7C25B080 >0 last checked: %s,
->&38 belong x block size: %d,
->&42 belong x number of blocks: %d,
->&46 belong x free blocks: %d
-
-# I don't think this is really necessary since it doesn't do much and
-# anything with a valid driver descriptor will also have a valid
-# partition map
-#0 beshort 0x4552 Apple Device Driver data
-#>&24 beshort =1 \b, MacOS
-
-# Is that the partition type a cstring or a pstring? Well, IM says "strings
-# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a
-# cstring. Of course, partitions can contain more than four entries, but
-# what're you gonna do?
-# GRR: This magic is too weak, it is just "PM"
-#0x200 beshort 0x504D Apple Partition data
-#>0x2 beshort x (block size: %d):
-#>0x230 string x first type: %s,
-#>0x210 string x name: %s,
-#>0x254 belong x number of blocks: %d,
-#>0x400 beshort 0x504D
-#>>0x430 string x second type: %s,
-#>>0x410 string x name: %s,
-#>>0x454 belong x number of blocks: %d,
-#>>0x600 beshort 0x504D
-#>>>0x630 string x third type: %s,
-#>>>0x610 string x name: %s,
-#>>>0x654 belong x number of blocks: %d,
-#>>0x800 beshort 0x504D
-#>>>0x830 string x fourth type: %s,
-#>>>0x810 string x name: %s,
-#>>>0x854 belong x number of blocks: %d,
-#>>>0xa00 beshort 0x504D
-#>>>>0xa30 string x fifth type: %s,
-#>>>>0xa10 string x name: %s,
-#>>>>0xa54 belong x number of blocks: %d
-#>>>0xc00 beshort 0x504D
-#>>>>0xc30 string x sixth type: %s,
-#>>>>0xc10 string x name: %s,
-#>>>>0xc54 belong x number of blocks: %d
-## AFAIK, only the signature is different
-#0x200 beshort 0x5453 Apple Old Partition data
-#>0x2 beshort x block size: %d,
-#>0x230 string x first type: %s,
-#>0x210 string x name: %s,
-#>0x254 belong x number of blocks: %d,
-#>0x400 beshort 0x504D
-#>>0x430 string x second type: %s,
-#>>0x410 string x name: %s,
-#>>0x454 belong x number of blocks: %d,
-#>>0x800 beshort 0x504D
-#>>>0x830 string x third type: %s,
-#>>>0x810 string x name: %s,
-#>>>0x854 belong x number of blocks: %d,
-#>>>0xa00 beshort 0x504D
-#>>>>0xa30 string x fourth type: %s,
-#>>>>0xa10 string x name: %s,
-#>>>>0xa54 belong x number of blocks: %d
-
-# From: Remi Mommsen <mommsen at slac.stanford.edu>
-0 string BOMStore Mac OS X bill of materials (BOM) file
-
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# URL: http://en.wikipedia.org/wiki/Datafork_TrueType
-# Derived from the 'fondu' and 'ufond' source code (fondu.sf.net). 'sfnt' is
-# TrueType; 'POST' is PostScript. 'FONT' and 'NFNT' sometimes appear, but I
-# don't know what they mean.
-0 belong 0x100
->(0x4.L+24) beshort x
->>&4 belong 0x73666e74 Mac OSX datafork font, TrueType
->>&4 belong 0x464f4e54 Mac OSX datafork font, 'FONT'
->>&4 belong 0x4e464e54 Mac OSX datafork font, 'NFNT'
->>&4 belong 0x504f5354 Mac OSX datafork font, PostScript
-
-#------------------------------------------------------------------------------
-# $File: macos,v 1.1 2012/12/21 16:41:07 christos Exp $
-# MacOS files
-#
-
-0 string book\0\0\0\0mark\0\0\0\0 MacOS Alias file
-
-#------------------------------------------------------------------------------
-# $File: magic,v 1.10 2010/11/25 15:00:12 christos Exp $
-# magic: file(1) magic for magic files
-#
-0 string/t #\ Magic magic text file for file(1) cmd
-0 lelong 0xF11E041C magic binary file for file(1) cmd
->4 lelong x (version %d) (little endian)
-0 belong 0xF11E041C magic binary file for file(1) cmd
->4 belong x (version %d) (big endian)
-#------------------------------------------------------------------------------
-# $File: mail.news,v 1.22 2013/01/04 14:22:07 christos Exp $
-# mail.news: file(1) magic for mail and news
-#
-# Unfortunately, saved netnews also has From line added in some news software.
-#0 string From mail text
-0 string/t Relay-Version: old news text
-!:mime message/rfc822
-0 string/t #!\ rnews batched news text
-!:mime message/rfc822
-0 string/t N#!\ rnews mailed, batched news text
-!:mime message/rfc822
-0 string/t Forward\ to mail forwarding text
-!:mime message/rfc822
-0 string/t Pipe\ to mail piping text
-!:mime message/rfc822
-0 string/tc delivered-to: SMTP mail text
-!:mime message/rfc822
-0 string/tc return-path: SMTP mail text
-!:mime message/rfc822
-0 string/t Path: news text
-!:mime message/news
-0 string/t Xref: news text
-!:mime message/news
-0 string/t From: news or mail text
-!:mime message/rfc822
-0 string/t Article saved news text
-!:mime message/news
-0 string/t BABYL Emacs RMAIL text
-0 string/t Received: RFC 822 mail text
-!:mime message/rfc822
-0 string/t MIME-Version: MIME entity text
-#0 string/t Content- MIME entity text
-
-# TNEF files...
-0 lelong 0x223E9F78 Transport Neutral Encapsulation Format
-!:mime application/vnd.ms-tnef
-
-# From: Kevin Sullivan <ksulliva at psc.edu>
-0 string *mbx* MBX mail folder
-
-# From: Simon Matter <simon.matter at invoca.ch>
-0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB
-
-# JAM(mbp) Fidonet message area databases
-# JHR file
-0 string JAM\0 JAM message area header file
->12 leshort >0 (%d messages)
-
-# Squish Fidonet message area databases
-# SQD file (requires at least one message in the area)
-# XXX: Weak magic
-#256 leshort 0xAFAE4453 Squish message area data file
-#>4 leshort >0 (%d messages)
-
-#0 string \<!--\ MHonArc text/html; x-type=mhonarc
-
-# Cyrus: file(1) magic for compiled Cyrus sieve scripts
-# URL: http://www.cyrusimap.org/docs/cyrus-imapd/2.4.6/internal/bytecode.php
-# URL: http://git.cyrusimap.org/cyrus-imapd/tree/sieve/bytecode.h?h=master
-# From: Philipp Hahn <hahn at univention.de>
-
-# Compiled Cyrus sieve script
-0 string CyrSBytecode Cyrus sieve bytecode data,
->12 belong =1 version 1, big-endian
->12 lelong =1 version 1, little-endian
->12 belong x version %d, network-endian
-#------------------------------------------------------------------------------
-# $File: make,v 1.1 2011/12/08 12:12:46 rrt Exp $
-# make: file(1) magic for makefiles
-#
-0 regex \^CFLAGS makefile script text
-!:mime text/x-makefile
-0 regex \^LDFLAGS makefile script text
-!:mime text/x-makefile
-0 regex \^all: makefile script text
-!:mime text/x-makefile
-0 regex \^.PRECIOUS makefile script text
-!:mime text/x-makefile
-
-0 regex \^SUBDIRS automake makefile script text
-!:mime text/x-makefile
-
-
-#------------------------------------------------------------------------------
-# $File: map,v 1.1 2014/06/03 18:22:25 christos Exp $
-# map: file(1) magic for Map data
-#
-
-# Garmin .FIT files http://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml
-8 string .FIT FIT Map data
->15 byte 0
->>35 belong x \b, unit id %d
-# 20 years after unix epoch
->>39 lelong x \b, serial %u
->>43 ledate/631152000 x \b, %s
-
->>47 leshort x \b, manufacturer %d
->>47 leshort 1 \b (garmin)
->>49 leshort x \b, product %d
->>53 byte x \b, type %d
->>53 byte 1 \b (Device)
->>53 byte 2 \b (Settings)
->>53 byte 3 \b (Sports/Cycling)
->>53 byte 4 \b (Activity)
->>53 byte 8 \b (Elevations)
->>53 byte 10 \b (Totals)
-
-#------------------------------------------------------------------------------
-# $File: maple,v 1.7 2013/01/11 16:45:23 christos Exp $
-# maple: file(1) magic for maple files
-# "H. Nanosecond" <aldomel at ix.netcom.com>
-# Maple V release 4, a multi-purpose math program
-#
-
-# maple library .lib
-0 string \000MVR4\nI MapleVr4 library
-
-# .ind
-# no magic for these :-(
-# they are compiled indexes for maple files
-
-# .hdb
-0 string \000\004\000\000 Maple help database
-
-# .mhp
-# this has the form <PACKAGE=name>
-0 string \<PACKAGE= Maple help file
-0 string \<HELP\ NAME= Maple help file
-0 string \n\<HELP\ NAME= Maple help file with extra carriage return at start (yuck)
-#0 string #\ Newton Maple help file, old style
-0 string #\ daub Maple help file, old style
-#0 string #=========== Maple help file, old style
-
-# .mws
-0 string \000\000\001\044\000\221 Maple worksheet
-#this is anomalous
-0 string WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000 Maple worksheet, but weird
-# this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n
-# that is {VERSION major_version miunor_version computer_type version_string}
-0 string {VERSION\ Maple worksheet
->9 string >\0 version %.1s.
->>11 string >\0 %.1s
-
-# .mps
-0 string \0\0\001$ Maple something
-# from byte 4 it is either 'nul E' or 'soh R'
-# I think 'nul E' means a file that was saved as a different name
-# a sort of revision marking
-# 'soh R' means new
->4 string \000\105 An old revision
->4 string \001\122 The latest save
-
-# .mpl
-# some of these are the same as .mps above
-#0000000 000 000 001 044 000 105 same as .mps
-#0000000 000 000 001 044 001 122 same as .mps
-
-0 string #\n##\ <SHAREFILE= Maple something
-0 string \n#\n##\ <SHAREFILE= Maple something
-0 string ##\ <SHAREFILE= Maple something
-0 string #\r##\ <SHAREFILE= Maple something
-0 string \r#\r##\ <SHAREFILE= Maple something
-0 string #\ \r##\ <DESCRIBE> Maple something anomalous.
-#--------------------------------------------
-# marc21: file(1) magic for MARC 21 Format
-#
-# Kevin Ford (kefo at loc.gov)
-#
-# MARC21 formats are for the representation and communication
-# of bibliographic and related information in machine-readable
-# form. For more info, see http://www.loc.gov/marc/
-
-
-# leader position 20-21 must be 45
-20 string 45
-
-# leader starts with 5 digits, followed by codes specific to MARC format
->0 regex/1l (^[0-9]{5})[acdnp][^bhlnqsu-z] MARC21 Bibliographic
-!:mime application/marc
->0 regex/1l (^[0-9]{5})[acdnosx][z] MARC21 Authority
-!:mime application/marc
->0 regex/1l (^[0-9]{5})[cdn][uvxy] MARC21 Holdings
-!:mime application/marc
-0 regex/1l (^[0-9]{5})[acdn][w] MARC21 Classification
-!:mime application/marc
->0 regex/1l (^[0-9]{5})[cdn][q] MARC21 Community
-!:mime application/marc
-
-# leader position 22-23, should be "00" but is it?
->0 regex/1l (^.{21})([^0]{2}) (non-conforming)
-!:mime application/marc
-
-#------------------------------------------------------------------------------
-# $File: mathcad,v 1.5 2009/09/19 16:28:10 christos Exp $
-# mathcad: file(1) magic for Mathcad documents
-# URL: http://www.mathsoft.com/
-# From: Josh Triplett <josh at freedesktop.org>
-
-0 string .MCAD\t Mathcad document
-
-#------------------------------------------------------------------------------
-# $File: mathematica,v 1.7 2009/09/19 16:28:10 christos Exp $
-# mathematica: file(1) magic for mathematica files
-# "H. Nanosecond" <aldomel at ix.netcom.com>
-# Mathematica a multi-purpose math program
-# versions 2.2 and 3.0
-
-#mathematica .mb
-0 string \064\024\012\000\035\000\000\000 Mathematica version 2 notebook
-0 string \064\024\011\000\035\000\000\000 Mathematica version 2 notebook
-
-# .ma
-# multiple possibilites:
-
-0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook
-#>41 string >\0 %s
-
-#0 string (*^\n\n::[\011palette Mathematica notebook version 2.x
-
-#0 string (*^\n\n::[\011Information Mathematica notebook version 2.x
-#>675 string >\0 %s #doesn't work well
-
-# there may be 'cr' instread of 'nl' in some does this matter?
-
-# generic:
-0 string (*^\r\r::[\011 Mathematica notebook version 2.x
-0 string (*^\r\n\r\n::[\011 Mathematica notebook version 2.x
-0 string (*^\015 Mathematica notebook version 2.x
-0 string (*^\n\r\n\r::[\011 Mathematica notebook version 2.x
-0 string (*^\r::[\011 Mathematica notebook version 2.x
-0 string (*^\r\n::[\011 Mathematica notebook version 2.x
-0 string (*^\n\n::[\011 Mathematica notebook version 2.x
-0 string (*^\n::[\011 Mathematica notebook version 2.x
-
-
-# Mathematica .mx files
-
-#0 string (*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*) Mathematica binary file
-0 string (*This\ is\ a\ Mathematica\ binary\ Mathematica binary file
-#>71 string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
-# >71... is optional
->88 string >\0 from %s
-
-
-# Mathematica files PBF:
-# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
-0 string MMAPBF\000\001\000\000\000\203\000\001\000 Mathematica PBF (fonts I think)
-
-# .ml files These are menu resources I think
-# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
-# how to put that into a magic rule?
-4 string \ A~ MAthematica .ml file
-
-# .nb files
-#too long 0 string (***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook Mathematica 3.0 notebook
-0 string (*********************** Mathematica 3.0 notebook
-
-# other (* matches it is a comment start in these langs
-# GRR: Too weak; also matches other languages e.g. ML
-#0 string (* Mathematica, or Pascal, Modula-2 or 3 code text
-
-#########################
-# MatLab v5
-0 string MATLAB Matlab v5 mat-file
->126 short 0x494d (big endian)
->>124 beshort x version 0x%04x
->126 short 0x4d49 (little endian)
->>124 leshort x version 0x%04x
-
-
-#------------------------------------------------------------------------------
-# $File: matroska,v 1.8 2013/02/08 17:25:16 christos Exp $
-# matroska: file(1) magic for Matroska files
-#
-# See http://www.matroska.org/
-#
-
-# EBML id:
-0 belong 0x1a45dfa3
-# DocType id:
->4 search/4096 \x42\x82
-# DocType contents:
->>&1 string webm WebM
-!:mime video/webm
->>&1 string matroska Matroska data
-!:mime video/x-matroska
-
-#------------------------------------------------------------------------------
-# $File: mcrypt,v 1.5 2009/09/19 16:28:10 christos Exp $
-# Mavroyanopoulos Nikos <nmav at hellug.gr>
-# mcrypt: file(1) magic for mcrypt 2.2.x;
-0 string \0m\3 mcrypt 2.5 encrypted data,
->4 string >\0 algorithm: %s,
->>&1 leshort >0 keysize: %d bytes,
->>>&0 string >\0 mode: %s,
-
-0 string \0m\2 mcrypt 2.2 encrypted data,
->3 byte 0 algorithm: blowfish-448,
->3 byte 1 algorithm: DES,
->3 byte 2 algorithm: 3DES,
->3 byte 3 algorithm: 3-WAY,
->3 byte 4 algorithm: GOST,
->3 byte 6 algorithm: SAFER-SK64,
->3 byte 7 algorithm: SAFER-SK128,
->3 byte 8 algorithm: CAST-128,
->3 byte 9 algorithm: xTEA,
->3 byte 10 algorithm: TWOFISH-128,
->3 byte 11 algorithm: RC2,
->3 byte 12 algorithm: TWOFISH-192,
->3 byte 13 algorithm: TWOFISH-256,
->3 byte 14 algorithm: blowfish-128,
->3 byte 15 algorithm: blowfish-192,
->3 byte 16 algorithm: blowfish-256,
->3 byte 100 algorithm: RC6,
->3 byte 101 algorithm: IDEA,
->4 byte 0 mode: CBC,
->4 byte 1 mode: ECB,
->4 byte 2 mode: CFB,
->4 byte 3 mode: OFB,
->4 byte 4 mode: nOFB,
->5 byte 0 keymode: 8bit
->5 byte 1 keymode: 4bit
->5 byte 2 keymode: SHA-1 hash
->5 byte 3 keymode: MD5 hash
-
-#------------------------------------------------------------------------------
-# $File: mercurial,v 1.4 2009/09/19 16:28:10 christos Exp $
-# mercurial: file(1) magic for Mercurial changeset bundles
-# http://www.selenic.com/mercurial/wiki/
-#
-# Jesse Glick (jesse.glick at sun.com)
-#
-
-0 string HG10 Mercurial changeset bundle
->4 string UN (uncompressed)
->4 string GZ (gzip compressed)
->4 string BZ (bzip2 compressed)
-
-#------------------------------------------------------------------------------
-# $File: metastore,v 1.1 2011/04/06 12:37:44 christos Exp $
-# metastore: file(1) magic for metastore files
-# From: Thomas Wissen
-# see http://david.hardeman.nu/software.php#metastore
-0 string MeTaSt00r3 Metastore data file,
->10 bequad x version %0llx
-
-#------------------------------------------------------------------------------
-# $File: mime,v 1.6 2010/11/25 15:00:12 christos Exp $
-# mime: file(1) magic for MIME encoded files
-#
-0 string/t Content-Type:\
->14 string >\0 %s
-0 string/t Content-Type:
->13 string >\0 %s
-
-#------------------------------------------------------------------------------
-# $File: mips,v 1.10 2014/04/30 21:41:02 christos Exp $
-# mips: file(1) magic for MIPS ECOFF and Ucode, as used in SGI IRIX
-# and DEC Ultrix
-#
-0 beshort 0x0160 MIPSEB ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %d
->23 byte x \b.%d
-#
-0 beshort 0x0162 MIPSEL-BE ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-0 beshort 0x6001 MIPSEB-LE ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-0 beshort 0x6201 MIPSEL ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-# MIPS 2 additions
-#
-0 beshort 0x0163 MIPSEB MIPS-II ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %d
->23 byte x \b.%d
-#
-0 beshort 0x0166 MIPSEL-BE MIPS-II ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %d
->23 byte x \b.%d
-#
-0 beshort 0x6301 MIPSEB-LE MIPS-II ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-0 beshort 0x6601 MIPSEL MIPS-II ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-# MIPS 3 additions
-#
-0 beshort 0x0140 MIPSEB MIPS-III ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %d
->23 byte x \b.%d
-#
-0 beshort 0x0142 MIPSEL-BE MIPS-III ECOFF executable
->20 beshort 0407 (impure)
->20 beshort 0410 (swapped)
->20 beshort 0413 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->22 byte x - version %d
->23 byte x \b.%d
-#
-0 beshort 0x4001 MIPSEB-LE MIPS-III ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-0 beshort 0x4201 MIPSEL MIPS-III ECOFF executable
->20 beshort 03401 (impure)
->20 beshort 04001 (swapped)
->20 beshort 05401 (paged)
->8 belong >0 not stripped
->8 belong 0 stripped
->23 byte x - version %d
->22 byte x \b.%d
-#
-0 beshort 0x180 MIPSEB Ucode
-0 beshort 0x182 MIPSEL-BE Ucode
-
-#------------------------------------------------------------------------------
-# $File: mirage,v 1.7 2009/09/19 16:28:10 christos Exp $
-# mirage: file(1) magic for Mirage executables
-#
-# XXX - byte order?
-#
-0 long 31415 Mirage Assembler m.out executable
-
-#-----------------------------------------------------------------------------
-# $File: misctools,v 1.14 2014/03/06 16:08:58 christos Exp $
-# misctools: file(1) magic for miscellaneous UNIX tools.
-#
-0 search/1 %%!! X-Post-It-Note text
-0 string/c BEGIN:VCALENDAR vCalendar calendar file
-!:mime text/calendar
-0 string/c BEGIN:VCARD vCard visiting card
-!:mime text/x-vcard
-
-# Summary: Libtool library file
-# Extension: .la
-# Submitted by: Tomasz Trojanowski <tomek at uninet.com.pl>
-0 search/80 .la\ -\ a\ libtool\ library\ file libtool library file
-
-# Summary: Libtool object file
-# Extension: .lo
-# Submitted by: Abel Cheung <abelcheung at gmail.com>
-0 search/80 .lo\ -\ a\ libtool\ object\ file libtool object file
-
-# From: Daniel Novotny <dnovotny at redhat.com>
-0 string MDMP\x93\xA7 MDMP crash report data
-
-# Summary: abook addressbook file
-# Submitted by: Mark Schreiber <mark7 at alumni.cmu.edu>
-0 string #\x20abook\x20addressbook\x20file abook address book
-!:mime application/x-abook-addressbook
-
-#------------------------------------------------------------------------------
-# $File: mkid,v 1.6 2009/09/19 16:28:10 christos Exp $
-# mkid: file(1) magic for mkid(1) databases
-#
-# ID is the binary tags database produced by mkid(1).
-#
-# XXX - byte order?
-#
-0 string \311\304 ID tags data
->2 short >0 version %d
-
-#------------------------------------------------------------------------------
-# $File: mlssa,v 1.4 2009/09/19 16:28:10 christos Exp $
-# mlssa: file(1) magic for MLSSA datafiles
-#
-0 lelong 0xffffabcd MLSSA datafile,
->4 leshort x algorithm %d,
->10 lelong x %d samples
-
-#------------------------------------------------------------------------------
-# $File: mmdf,v 1.6 2009/09/19 16:28:10 christos Exp $
-# mmdf: file(1) magic for MMDF mail files
-#
-0 string \001\001\001\001 MMDF mailbox
-
-#------------------------------------------------------------------------------
-# $File: modem,v 1.5 2010/09/20 18:55:20 rrt Exp $
-# modem: file(1) magic for modem programs
-#
-# From: Florian La Roche <florian at knorke.saar.de>
-1 string PC\ Research,\ Inc Digifax-G3-File
->29 byte 1 \b, fine resolution
->29 byte 0 \b, normal resolution
-
-0 short 0x0100 raw G3 data, byte-padded
-0 short 0x1400 raw G3 data
-#
-# Magic data for vgetty voice formats
-# (Martin Seine & Marc Eberhard)
-
-#
-# raw modem data version 1
-#
-0 string RMD1 raw modem data
->4 string >\0 (%s /
->20 short >0 compression type 0x%04x)
-
-#
-# portable voice format 1
-#
-0 string PVF1\n portable voice format
->5 string >\0 (binary %s)
-
-#
-# portable voice format 2
-#
-0 string PVF2\n portable voice format
->5 string >\0 (ascii %s)
-
-
-#------------------------------------------------------------------------------
-# $File: motorola,v 1.11 2014/04/30 21:41:02 christos Exp $
-# motorola: file(1) magic for Motorola 68K and 88K binaries
-#
-# 68K
-#
-0 beshort 0520 mc68k COFF
->18 beshort ^00000020 object
->18 beshort &00000020 executable
->12 belong >0 not stripped
->168 string .lowmem Apple toolbox
->20 beshort 0407 (impure)
->20 beshort 0410 (pure)
->20 beshort 0413 (demand paged)
->20 beshort 0421 (standalone)
-0 beshort 0521 mc68k executable (shared)
->12 belong >0 not stripped
-0 beshort 0522 mc68k executable (shared demand paged)
->12 belong >0 not stripped
-#
-# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
-#
-0 beshort 0554 68K BCS executable
-#
-# 88K
-#
-# Motorola/88Open BCS
-#
-0 beshort 0555 88K BCS executable
-#
-# Motorola S-Records, from Gerd Truschinski <gt at freebsd.first.gmd.de>
-0 string S0 Motorola S-Record; binary data in text format
-
-# ATARI ST relocatable PRG
-#
-# from Oskar Schirmer <schirmer at scara.com> Feb 3, 2001
-# (according to Roland Waldi, Oct 21, 1987)
-# besides the magic 0x601a, the text segment size is checked to be
-# not larger than 1 MB (which is a lot on ST).
-# The additional 0x601b distinction I took from Doug Lee's magic.
-0 belong&0xFFFFFFF0 0x601A0000 Atari ST M68K contiguous executable
->2 belong x (txt=%d,
->6 belong x dat=%d,
->10 belong x bss=%d,
->14 belong x sym=%d)
-0 belong&0xFFFFFFF0 0x601B0000 Atari ST M68K non-contig executable
->2 belong x (txt=%d,
->6 belong x dat=%d,
->10 belong x bss=%d,
->14 belong x sym=%d)
-
-# Atari ST/TT... program format (sent by Wolfram Kleff <kleff at cs.uni-bonn.de>)
-0 beshort 0x601A Atari 68xxx executable,
->2 belong x text len %u,
->6 belong x data len %u,
->10 belong x BSS len %u,
->14 belong x symboltab len %u,
->18 belong 0
->22 belong &0x01 fastload flag,
->22 belong &0x02 may be loaded to alternate RAM,
->22 belong &0x04 malloc may be from alternate RAM,
->22 belong x flags: 0x%X,
->26 beshort 0 no relocation tab
->26 beshort !0 + relocation tab
->30 string SFX [Self-Extracting LZH SFX archive]
->38 string SFX [Self-Extracting LZH SFX archive]
->44 string ZIP! [Self-Extracting ZIP SFX archive]
-
-0 beshort 0x0064 Atari 68xxx CPX file
->8 beshort x (version %04x)
-
-#------------------------------------------------------------------------------
-# $File: mozilla,v 1.4 2009/09/19 16:28:11 christos Exp $
-# mozilla: file(1) magic for Mozilla XUL fastload files
-# (XUL.mfasl and XPC.mfasl)
-# URL: http://www.mozilla.org/
-# From: Josh Triplett <josh at freedesktop.org>
-
-0 string XPCOM\nMozFASL\r\n\x1A Mozilla XUL fastload data
-
-#------------------------------------------------------------------------------
-# $File: msdos,v 1.100 2014/06/03 19:17:27 christos Exp $
-# msdos: file(1) magic for MS-DOS files
-#
-
-# .BAT files (Daniel Quinlan, quinlan at yggdrasil.com)
-# updated by Joerg Jenderek at Oct 2008,Apr 2011
-0 string/t @
->1 string/cW \ echo\ off DOS batch file text
-!:mime text/x-msdos-batch
->1 string/cW echo\ off DOS batch file text
-!:mime text/x-msdos-batch
->1 string/cW rem DOS batch file text
-!:mime text/x-msdos-batch
->1 string/cW set\ DOS batch file text
-!:mime text/x-msdos-batch
-
-
-# OS/2 batch files are REXX. the second regex is a bit generic, oh well
-# the matched commands seem to be common in REXX and uncommon elsewhere
-100 search/0xffff rxfuncadd
->100 regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc OS/2 REXX batch file text
-100 search/0xffff say
->100 regex/c =^[\ \t]{0,10}say\ ['"] OS/2 REXX batch file text
-
-0 leshort 0x14c MS Windows COFF Intel 80386 object file
-#>4 ledate x stamp %s
-0 leshort 0x166 MS Windows COFF MIPS R4000 object file
-#>4 ledate x stamp %s
-0 leshort 0x184 MS Windows COFF Alpha object file
-#>4 ledate x stamp %s
-0 leshort 0x268 MS Windows COFF Motorola 68000 object file
-#>4 ledate x stamp %s
-0 leshort 0x1f0 MS Windows COFF PowerPC object file
-#>4 ledate x stamp %s
-0 leshort 0x290 MS Windows COFF PA-RISC object file
-#>4 ledate x stamp %s
-
-# Tests for various EXE types.
-#
-# Many of the compressed formats were extraced from IDARC 1.23 source code.
-#
-0 string/b MZ
-# All non-DOS EXE extensions have the relocation table more than 0x40 bytes into the file.
->0x18 leshort <0x40 MS-DOS executable
-!:mime application/x-dosexec
-# These traditional tests usually work but not always. When test quality support is
-# implemented these can be turned on.
-#>>0x18 leshort 0x1c (Borland compiler)
-#>>0x18 leshort 0x1e (MS compiler)
-
-# If the relocation table is 0x40 or more bytes into the file, it's definitely
-# not a DOS EXE.
->0x18 leshort >0x3f
-
-# Maybe it's a PE?
->>(0x3c.l) string PE\0\0 PE
-!:mime application/x-dosexec
->>>(0x3c.l+24) leshort 0x010b \b32 executable
->>>(0x3c.l+24) leshort 0x020b \b32+ executable
->>>(0x3c.l+24) leshort 0x0107 ROM image
->>>(0x3c.l+24) default x Unknown PE signature
->>>>&0 leshort x 0x%x
->>>(0x3c.l+22) leshort&0x2000 >0 (DLL)
->>>(0x3c.l+92) leshort 1 (native)
->>>(0x3c.l+92) leshort 2 (GUI)
->>>(0x3c.l+92) leshort 3 (console)
->>>(0x3c.l+92) leshort 7 (POSIX)
->>>(0x3c.l+92) leshort 9 (Windows CE)
->>>(0x3c.l+92) leshort 10 (EFI application)
->>>(0x3c.l+92) leshort 11 (EFI boot service driver)
->>>(0x3c.l+92) leshort 12 (EFI runtime driver)
->>>(0x3c.l+92) leshort 13 (EFI ROM)
->>>(0x3c.l+92) leshort 14 (XBOX)
->>>(0x3c.l+92) leshort 15 (Windows boot application)
->>>(0x3c.l+92) default x (Unknown subsystem
->>>>&0 leshort x 0x%x)
->>>(0x3c.l+4) leshort 0x14c Intel 80386
->>>(0x3c.l+4) leshort 0x166 MIPS R4000
->>>(0x3c.l+4) leshort 0x168 MIPS R10000
->>>(0x3c.l+4) leshort 0x184 Alpha
->>>(0x3c.l+4) leshort 0x1a2 Hitachi SH3
->>>(0x3c.l+4) leshort 0x1a6 Hitachi SH4
->>>(0x3c.l+4) leshort 0x1c0 ARM
->>>(0x3c.l+4) leshort 0x1c2 ARM Thumb
->>>(0x3c.l+4) leshort 0x1c4 ARMv7 Thumb
->>>(0x3c.l+4) leshort 0x1f0 PowerPC
->>>(0x3c.l+4) leshort 0x200 Intel Itanium
->>>(0x3c.l+4) leshort 0x266 MIPS16
->>>(0x3c.l+4) leshort 0x268 Motorola 68000
->>>(0x3c.l+4) leshort 0x290 PA-RISC
->>>(0x3c.l+4) leshort 0x366 MIPSIV
->>>(0x3c.l+4) leshort 0x466 MIPS16 with FPU
->>>(0x3c.l+4) leshort 0xebc EFI byte code
->>>(0x3c.l+4) leshort 0x8664 x86-64
->>>(0x3c.l+4) leshort 0xc0ee MSIL
->>>(0x3c.l+4) default x Unknown processor type
->>>>&0 leshort x 0x%x
->>>(0x3c.l+22) leshort&0x0200 >0 (stripped to external PDB)
->>>(0x3c.l+22) leshort&0x1000 >0 system file
->>>(0x3c.l+24) leshort 0x010b
->>>>(0x3c.l+232) lelong >0 Mono/.Net assembly
->>>(0x3c.l+24) leshort 0x020b
->>>>(0x3c.l+248) lelong >0 Mono/.Net assembly
-
-# hooray, there's a DOS extender using the PE format, with a valid PE
-# executable inside (which just prints a message and exits if run in win)
->>>(8.s*16) string 32STUB \b, 32rtm DOS extender
->>>(8.s*16) string !32STUB \b, for MS Windows
->>>(0x3c.l+0xf8) string UPX0 \b, UPX compressed
->>>(0x3c.l+0xf8) search/0x140 PEC2 \b, PECompact2 compressed
->>>(0x3c.l+0xf8) search/0x140 UPX2
->>>>(&0x10.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
->>>(0x3c.l+0xf8) search/0x140 .idata
->>>>(&0xe.l+(-4)) string PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
->>>>(&0xe.l+(-4)) string ZZ0 \b, ZZip self-extracting archive
->>>>(&0xe.l+(-4)) string ZZ1 \b, ZZip self-extracting archive
->>>(0x3c.l+0xf8) search/0x140 .rsrc
->>>>(&0x0f.l+(-4)) string a\\\4\5 \b, WinHKI self-extracting archive
->>>>(&0x0f.l+(-4)) string Rar! \b, RAR self-extracting archive
->>>>(&0x0f.l+(-4)) search/0x3000 MSCF \b, InstallShield self-extracting archive
->>>>(&0x0f.l+(-4)) search/32 Nullsoft \b, Nullsoft Installer self-extracting archive
->>>(0x3c.l+0xf8) search/0x140 .data
->>>>(&0x0f.l) string WEXTRACT \b, MS CAB-Installer self-extracting archive
->>>(0x3c.l+0xf8) search/0x140 .petite\0 \b, Petite compressed
->>>>(0x3c.l+0xf7) byte x
->>>>>(&0x104.l+(-4)) string =!sfx! \b, ACE self-extracting archive
->>>(0x3c.l+0xf8) search/0x140 .WISE \b, WISE installer self-extracting archive
->>>(0x3c.l+0xf8) search/0x140 .dz\0\0\0 \b, Dzip self-extracting archive
->>>&(0x3c.l+0xf8) search/0x100 _winzip_ \b, ZIP self-extracting archive (WinZip)
->>>&(0x3c.l+0xf8) search/0x100 SharedD \b, Microsoft Installer self-extracting archive
->>>0x30 string Inno \b, InnoSetup self-extracting archive
-
-# Hmm, not a PE but the relocation table is too high for a traditional DOS exe,
-# must be one of the unusual subformats.
->>(0x3c.l) string !PE\0\0 MS-DOS executable
-!:mime application/x-dosexec
-
->>(0x3c.l) string NE \b, NE
-!:mime application/x-dosexec
->>>(0x3c.l+0x36) byte 1 for OS/2 1.x
->>>(0x3c.l+0x36) byte 2 for MS Windows 3.x
->>>(0x3c.l+0x36) byte 3 for MS-DOS
->>>(0x3c.l+0x36) byte 4 for Windows 386
->>>(0x3c.l+0x36) byte 5 for Borland Operating System Services
->>>(0x3c.l+0x36) default x
->>>>(0x3c.l+0x36) byte x (unknown OS %x)
->>>(0x3c.l+0x36) byte 0x81 for MS-DOS, Phar Lap DOS extender
->>>(0x3c.l+0x0c) leshort&0x8003 0x8002 (DLL)
->>>(0x3c.l+0x0c) leshort&0x8003 0x8001 (driver)
->>>&(&0x24.s-1) string ARJSFX \b, ARJ self-extracting archive
->>>(0x3c.l+0x70) search/0x80 WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
-
->>(0x3c.l) string LX\0\0 \b, LX
-!:mime application/x-dosexec
->>>(0x3c.l+0x0a) leshort <1 (unknown OS)
->>>(0x3c.l+0x0a) leshort 1 for OS/2
->>>(0x3c.l+0x0a) leshort 2 for MS Windows
->>>(0x3c.l+0x0a) leshort 3 for DOS
->>>(0x3c.l+0x0a) leshort >3 (unknown OS)
->>>(0x3c.l+0x10) lelong&0x28000 =0x8000 (DLL)
->>>(0x3c.l+0x10) lelong&0x20000 >0 (device driver)
->>>(0x3c.l+0x10) lelong&0x300 0x300 (GUI)
->>>(0x3c.l+0x10) lelong&0x28300 <0x300 (console)
->>>(0x3c.l+0x08) leshort 1 i80286
->>>(0x3c.l+0x08) leshort 2 i80386
->>>(0x3c.l+0x08) leshort 3 i80486
->>>(8.s*16) string emx \b, emx
->>>>&1 string x %s
->>>&(&0x54.l-3) string arjsfx \b, ARJ self-extracting archive
-
-# MS Windows system file, supposedly a collection of LE executables
->>(0x3c.l) string W3 \b, W3 for MS Windows
-!:mime application/x-dosexec
-
->>(0x3c.l) string LE\0\0 \b, LE executable
-!:mime application/x-dosexec
->>>(0x3c.l+0x0a) leshort 1
-# some DOS extenders use LE files with OS/2 header
->>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender
->>>>0x240 search/0x200 WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
->>>>0x440 search/0x100 CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
->>>>0x40 search/0x40 PMODE/W for MS-DOS, PMODE/W DOS extender
->>>>0x40 search/0x40 STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
->>>>0x40 search/0x80 STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
->>>>0x40 search/0x80 DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
-# this is a wild guess; hopefully it is a specific signature
->>>>&0x24 lelong <0x50
->>>>>(&0x4c.l) string \xfc\xb8WATCOM
->>>>>>&0 search/8 3\xdbf\xb9 \b, 32Lite compressed
-# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
-#>>>>(0x3c.l+0x1c) lelong >0x10000 for OS/2
-# fails with DOS-Extenders.
->>>(0x3c.l+0x0a) leshort 2 for MS Windows
->>>(0x3c.l+0x0a) leshort 3 for DOS
->>>(0x3c.l+0x0a) leshort 4 for MS Windows (VxD)
->>>(&0x7c.l+0x26) string UPX \b, UPX compressed
->>>&(&0x54.l-3) string UNACE \b, ACE self-extracting archive
-
-# looks like ASCII, probably some embedded copyright message.
-# and definitely not NE/LE/LX/PE
->>0x3c lelong >0x20000000
->>>(4.s*512) leshort !0x014c \b, MZ for MS-DOS
-!:mime application/x-dosexec
-# header data too small for extended executable
->2 long !0
->>0x18 leshort <0x40
->>>(4.s*512) leshort !0x014c
-
->>>>&(2.s-514) string !LE
->>>>>&-2 string !BW \b, MZ for MS-DOS
-!:mime application/x-dosexec
->>>>&(2.s-514) string LE \b, LE
->>>>>0x240 search/0x100 DOS/4G for MS-DOS, DOS4GW DOS extender
-# educated guess since indirection is still not capable enough for complex offset
-# calculations (next embedded executable would be at &(&2*512+&0-2)
-# I suspect there are only LE executables in these multi-exe files
->>>>&(2.s-514) string BW
->>>>>0x240 search/0x100 DOS/4G \b, LE for MS-DOS, DOS4GW DOS extender (embedded)
->>>>>0x240 search/0x100 !DOS/4G \b, BW collection for MS-DOS
-
-# This sequence skips to the first COFF segment, usually .text
->(4.s*512) leshort 0x014c \b, COFF
-!:mime application/x-dosexec
->>(8.s*16) string go32stub for MS-DOS, DJGPP go32 DOS extender
->>(8.s*16) string emx
->>>&1 string x for DOS, Win or OS/2, emx %s
->>&(&0x42.l-3) byte x
->>>&0x26 string UPX \b, UPX compressed
-# and yet another guess: small .text, and after large .data is unusal, could be 32lite
->>&0x2c search/0xa0 .text
->>>&0x0b lelong <0x2000
->>>>&0 lelong >0x6000 \b, 32lite compressed
-
->(8.s*16) string $WdX \b, WDos/X DOS extender
-
-# By now an executable type should have been printed out. The executable
-# may be a self-uncompressing archive, so look for evidence of that and
-# print it out.
-#
-# Some signatures below from Greg Roelofs, newt at uchicago.edu.
-#
->0x35 string \x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed
->0xe7 string LH/2\ Self-Extract \b, %s
->0x1c string UC2X \b, UCEXE compressed
->0x1c string WWP\ \b, WWPACK compressed
->0x1c string RJSX \b, ARJ self-extracting archive
->0x1c string diet \b, diet compressed
->0x1c string LZ09 \b, LZEXE v0.90 compressed
->0x1c string LZ91 \b, LZEXE v0.91 compressed
->0x1c string tz \b, TinyProg compressed
->0x1e string Copyright\ 1989-1990\ PKWARE\ Inc. Self-extracting PKZIP archive
-!:mime application/zip
-# Yes, this really is "Copr", not "Corp."
->0x1e string PKLITE\ Copr. Self-extracting PKZIP archive
-!:mime application/zip
-# winarj stores a message in the stub instead of the sig in the MZ header
->0x20 search/0xe0 aRJsfX \b, ARJ self-extracting archive
->0x20 string AIN
->>0x23 string 2 \b, AIN 2.x compressed
->>0x23 string <2 \b, AIN 1.x compressed
->>0x23 string >2 \b, AIN 1.x compressed
->0x24 string LHa's\ SFX \b, LHa self-extracting archive
-!:mime application/x-lha
->0x24 string LHA's\ SFX \b, LHa self-extracting archive
-!:mime application/x-lha
->0x24 string \ $ARX \b, ARX self-extracting archive
->0x24 string \ $LHarc \b, LHarc self-extracting archive
->0x20 string SFX\ by\ LARC \b, LARC self-extracting archive
->0x40 string aPKG \b, aPackage self-extracting archive
->0x64 string W\ Collis\0\0 \b, Compack compressed
->0x7a string Windows\ self-extracting\ ZIP \b, ZIP self-extracting archive
->>&0xf4 search/0x140 \x0\x40\x1\x0
->>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
->1638 string -lh5- \b, LHa self-extracting archive v2.13S
->0x17888 string Rar! \b, RAR self-extracting archive
-
-# Skip to the end of the EXE. This will usually work fine in the PE case
-# because the MZ image is hardcoded into the toolchain and almost certainly
-# won't match any of these signatures.
->(4.s*512) long x
->>&(2.s-517) byte x
->>>&0 string PK\3\4 \b, ZIP self-extracting archive
->>>&0 string Rar! \b, RAR self-extracting archive
->>>&0 string =!\x11 \b, AIN 2.x self-extracting archive
->>>&0 string =!\x12 \b, AIN 2.x self-extracting archive
->>>&0 string =!\x17 \b, AIN 1.x self-extracting archive
->>>&0 string =!\x18 \b, AIN 1.x self-extracting archive
->>>&7 search/400 **ACE** \b, ACE self-extracting archive
->>>&0 search/0x480 UC2SFX\ Header \b, UC2 self-extracting archive
-
-# a few unknown ZIP sfxes, no idea if they are needed or if they are
-# already captured by the generic patterns above
->(8.s*16) search/0x20 PKSFX \b, ZIP self-extracting archive (PKZIP)
-# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
-#
-
-# TELVOX Teleinformatica CODEC self-extractor for OS/2:
->49801 string \x79\xff\x80\xff\x76\xff \b, CODEC archive v3.21
->>49824 leshort =1 \b, 1 file
->>49824 leshort >1 \b, %u files
-
-# added by Joerg Jenderek of http://www.freedos.org/software/?prog=kc
-# and http://www.freedos.org/software/?prog=kpdos
-# for FreeDOS files like KEYBOARD.SYS, KEYBRD2.SYS, KEYBRD3.SYS, *.KBD
-0 string/b KCF FreeDOS KEYBoard Layout collection
-# only version=0x100 found
->3 uleshort x \b, version 0x%x
-# length of string containing author,info and special characters
->6 ubyte >0
-#>>6 pstring x \b, name=%s
->>7 string >\0 \b, author=%-.14s
->>7 search/254 \xff \b, info=
-#>>>&0 string x \b%-s
->>>&0 string x \b%-.15s
-# for FreeDOS *.KL files
-0 string/b KLF FreeDOS KEYBoard Layout file
-# only version=0x100 or 0x101 found
->3 uleshort x \b, version 0x%x
-# stringlength
->5 ubyte >0
->>8 string x \b, name=%-.2s
-0 string \xffKEYB\ \ \ \0\0\0\0
->12 string \0\0\0\0`\004\360 MS-DOS KEYBoard Layout file
-
-# .COM formats (Daniel Quinlan, quinlan at yggdrasil.com)
-# Uncommenting only the first two lines will cover about 2/3 of COM files,
-# but it isn't feasible to match all COM files since there must be at least
-# two dozen different one-byte "magics".
-# test too generic ?
-0 byte 0xe9 DOS executable (COM)
->0x1FE leshort 0xAA55 \b, boot code
->6 string SFX\ of\ LHarc (%s)
-
-# DOS device driver updated by Joerg Jenderek at May 2011
-# http://maben.homeip.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
-0 ulequad&0x07a0ffffffff 0xffffffff DOS executable (
->40 search/7 UPX! \bUPX compressed
-# DOS device driver attributes
->4 uleshort&0x8000 0x0000 \bblock device driver
-# character device
->4 uleshort&0x8000 0x8000 \b
->>4 uleshort&0x0008 0x0008 \bclock
-# fast video output by int 29h
->>4 uleshort&0x0010 0x0010 \bfast
-# standard input/output device
->>4 uleshort&0x0003 >0 \bstandard
->>>4 uleshort&0x0001 0x0001 \binput
->>>4 uleshort&0x0003 0x0003 \b/
->>>4 uleshort&0x0002 0x0002 \boutput
->>4 uleshort&0x8000 0x8000 \bcharacter device driver
->0 ubyte x
-# upx compressed device driver has garbage instead of real in name field of header
->>40 search/7 UPX!
->>40 default x
-# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped
->>>12 ubyte >0x27 \b
->>>>10 ubyte >0x20
->>>>>10 ubyte !0x2E
->>>>>>10 ubyte !0x2A \b%c
->>>>11 ubyte >0x20
->>>>>11 ubyte !0x2E \b%c
->>>>12 ubyte >0x20
->>>>>12 ubyte !0x39
->>>>>>12 ubyte !0x2E \b%c
->>>13 ubyte >0x20
->>>>13 ubyte !0x2E \b%c
->>>>14 ubyte >0x20
->>>>>14 ubyte !0x2E \b%c
->>>>15 ubyte >0x20
->>>>>15 ubyte !0x2E \b%c
->>>>16 ubyte >0x20
->>>>>16 ubyte !0x2E
->>>>>>16 ubyte <0xCB \b%c
->>>>17 ubyte >0x20
->>>>>17 ubyte !0x2E
->>>>>>17 ubyte <0x90 \b%c
-# some character device drivers like ASPICD.SYS, btcdrom.sys and Cr_atapi.sys contain only spaces or points in name field
->>>4 uleshort&0x8000 0x8000
->>>>12 ubyte <0x2F
-# they have their real name at offset 22
->>>>>22 string >\0 \b%-.5s
->4 uleshort&0x8000 0x0000
-# 32 bit sector addressing ( > 32 MB) for block devices
->>4 uleshort&0x0002 0x0002 \b,32-bit sector-
-# support by driver functions 13h, 17h, 18h
->4 uleshort&0x0040 0x0040 \b,IOCTL-
-# open, close, removable media support by driver functions 0Dh, 0Eh, 0Fh
->4 uleshort&0x0800 0x0800 \b,close media-
-# output until busy support by int 10h for character device driver
->4 uleshort&0x8000 0x8000
->>4 uleshort&0x2000 0x2000 \b,until busy-
-# direct read/write support by driver functions 03h,0Ch
->4 uleshort&0x4000 0x4000 \b,control strings-
->4 uleshort&0x8000 0x8000
->>4 uleshort&0x6840 >0 \bsupport
->4 uleshort&0x8000 0x0000
->>4 uleshort&0x4842 >0 \bsupport
->0 ubyte x \b)
-# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
-# Too weak, matches files that only contain 0's
-#0 ulequad&0x000007a0ffffffed 0x0000000000000000 DOS-executable (
-#>4 uleshort&0x8000 0x8000 \bcharacter device driver
-#>>10 string x %-.8s
-#>4 uleshort&0x4000 0x4000 \b,control strings-support)
-
-# test too generic ?
-0 byte 0x8c DOS executable (COM)
-# updated by Joerg Jenderek at Oct 2008
-0 ulelong 0xffff10eb DR-DOS executable (COM)
-# byte 0xeb conflicts with "sequent" magic leshort 0xn2eb
-0 ubeshort&0xeb8d >0xeb00
-# DR-DOS STACKER.COM SCREATE.SYS missed
->0 byte 0xeb
->>0x1FE leshort 0xAA55 DOS executable (COM), boot code
->>85 string UPX DOS executable (COM), UPX compressed
->>4 string \ $ARX DOS executable (COM), ARX self-extracting archive
->>4 string \ $LHarc DOS executable (COM), LHarc self-extracting archive
->>0x20e string SFX\ by\ LARC DOS executable (COM), LARC self-extracting archive
-# updated by Joerg Jenderek at Oct 2008
-#0 byte 0xb8 COM executable
-0 uleshort&0x80ff 0x00b8
-# modified by Joerg Jenderek
->1 lelong !0x21cd4cff COM executable for DOS
-# http://syslinux.zytor.com/comboot.php
-# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
-# start with assembler instructions mov eax,21cd4cffh
-0 uleshort&0xc0ff 0xc0b8
->1 lelong 0x21cd4cff COM executable (32-bit COMBOOT)
-# syslinux:doc/comboot.txt
-# A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov
-# eax,21cd4cfeh) as a magic number.
-0 string/b \xb8\xfe\x4c\xcd\x21 COM executable (COM32R)
-# start with assembler instructions mov eax,21cd4cfeh
-0 uleshort&0xc0ff 0xc0b8
->1 lelong 0x21cd4cfe COM executable (32-bit COMBOOT, relocatable)
-0 string/b \x81\xfc
->4 string \x77\x02\xcd\x20\xb9
->>36 string UPX! FREE-DOS executable (COM), UPX compressed
-252 string Must\ have\ DOS\ version DR-DOS executable (COM)
-# added by Joerg Jenderek at Oct 2008
-# GRR search is not working
-#34 search/2 UPX! FREE-DOS executable (COM), UPX compressed
-34 string UPX! FREE-DOS executable (COM), UPX compressed
-35 string UPX! FREE-DOS executable (COM), UPX compressed
-# GRR search is not working
-#2 search/28 \xcd\x21 COM executable for MS-DOS
-#WHICHFAT.cOM
-2 string \xcd\x21 COM executable for DOS
-#DELTREE.cOM DELTREE2.cOM
-4 string \xcd\x21 COM executable for DOS
-#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
-5 string \xcd\x21 COM executable for DOS
-#DELTMP.COm HASFAT32.cOM
-7 string \xcd\x21
->0 byte !0xb8 COM executable for DOS
-#COMP.cOM MORE.COm
-10 string \xcd\x21
->5 string !\xcd\x21 COM executable for DOS
-#comecho.com
-13 string \xcd\x21 COM executable for DOS
-#HELP.COm EDIT.coM
-18 string \xcd\x21 COM executable for MS-DOS
-#NWRPLTRM.COm
-23 string \xcd\x21 COM executable for MS-DOS
-#LOADFIX.cOm LOADFIX.cOm
-30 string \xcd\x21 COM executable for MS-DOS
-#syslinux.com 3.11
-70 string \xcd\x21 COM executable for DOS
-# many compressed/converted COMs start with a copy loop instead of a jump
-0x6 search/0xa \xfc\x57\xf3\xa5\xc3 COM executable for MS-DOS
-0x6 search/0xa \xfc\x57\xf3\xa4\xc3 COM executable for DOS
->0x18 search/0x10 \x50\xa4\xff\xd5\x73 \b, aPack compressed
-0x3c string W\ Collis\0\0 COM executable for MS-DOS, Compack compressed
-# FIXME: missing diet .com compression
-
-# miscellaneous formats
-0 string/b LZ MS-DOS executable (built-in)
-#0 byte 0xf0 MS-DOS program library data
-#
-
-# AAF files:
-# <stuartc at rd.bbc.co.uk> Stuart Cunningham
-0 string/b \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/b \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
-!:mime application/msword
-2080 string Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
-!:mime application/msword
-# Pawel Wiecek <coven at i17linuxb.ists.pwr.wroc.pl> (for polish Word)
-2112 string MSWordDoc Microsoft Word document data
-!:mime application/msword
-#
-0 belong 0x31be0000 Microsoft Word Document
-!:mime application/msword
-#
-0 string/b PO^Q` Microsoft Word 6.0 Document
-!:mime application/msword
-#
-0 string/b \376\067\0\043 Microsoft Office Document
-!:mime application/msword
-0 string/b \333\245-\0\0\0 Microsoft Office Document
-!:mime application/msword
-512 string/b \354\245\301 Microsoft Word Document
-!:mime application/msword
-
-#
-0 string/b \xDB\xA5\x2D\x00 Microsoft WinWord 2.0 Document
-!:mime application/msword
-#
-2080 string Microsoft\ Excel\ 5.0\ Worksheet %s
-!:mime application/vnd.ms-excel
-#
-0 string/b \xDB\xA5\x2D\x00 Microsoft WinWord 2.0 Document
-!:mime application/msword
-
-2080 string Foglio\ di\ lavoro\ Microsoft\ Exce %s
-!:mime application/vnd.ms-excel
-#
-# Pawel Wiecek <coven at i17linuxb.ists.pwr.wroc.pl> (for polish Excel)
-2114 string Biff5 Microsoft Excel 5.0 Worksheet
-!:mime application/vnd.ms-excel
-# Italian MS-Excel
-2121 string Biff5 Microsoft Excel 5.0 Worksheet
-!:mime application/vnd.ms-excel
-0 string/b \x09\x04\x06\x00\x00\x00\x10\x00 Microsoft Excel Worksheet
-!:mime application/vnd.ms-excel
-#
-0 belong 0x00001a00 Lotus 1-2-3
-!:mime application/x-123
->4 belong 0x00100400 wk3 document data
->4 belong 0x02100400 wk4 document data
->4 belong 0x07800100 fm3 or fmb document data
->4 belong 0x07800000 fm3 or fmb document data
-#
-0 belong 0x00000200 Lotus 1-2-3
-!:mime application/x-123
->4 belong 0x06040600 wk1 document data
->4 belong 0x06800200 fmt document data
-0 string/b WordPro\0 Lotus WordPro
-!:mime application/vnd.lotus-wordpro
-0 string/b WordPro\r\373 Lotus WordPro
-!:mime application/vnd.lotus-wordpro
-
-
-# Summary: Script used by InstallScield to uninstall applications
-# Extension: .isu
-# Submitted by: unknown
-# Modified by (1): Abel Cheung <abelcheung at gmail.com> (replace useless entry)
-0 string \x71\xa8\x00\x00\x01\x02
->12 string Stirling\ Technologies, InstallShield Uninstall Script
-
-# Winamp .avs
-#0 string Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
-0 string/b Nullsoft\ AVS\ Preset\ Winamp plug in
-
-# Windows Metafont .WMF
-0 string/b \327\315\306\232 ms-windows metafont .wmf
-0 string/b \002\000\011\000 ms-windows metafont .wmf
-0 string/b \001\000\011\000 ms-windows metafont .wmf
-
-#tz3 files whatever that is (MS Works files)
-0 string/b \003\001\001\004\070\001\000\000 tz3 ms-works file
-0 string/b \003\002\001\004\070\001\000\000 tz3 ms-works file
-0 string/b \003\003\001\004\070\001\000\000 tz3 ms-works file
-
-# PGP sig files .sig
-#0 string \211\000\077\003\005\000\063\237\127 065 to \027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
-0 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
-
-# windows zips files .dmf
-0 string/b MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
-
-
-#ico files
-0 string/b \102\101\050\000\000\000\056\000\000\000\000\000\000\000 Icon for MS Windows
-
-# Windows icons
-0 name ico-dir
-# not entirely accurate, the number of icons is part of the header
->0 byte 1 - 1 icon
->0 ubyte >1 - %d icons
->2 byte 0 \b, 256x
->2 byte !0 \b, %dx
->3 byte 0 \b256
->3 byte !0 \b%d
->4 ubyte !0 \b, %d colors
-
-0 belong 0x00000100
->9 byte 0
->>0 byte x MS Windows icon resource
-!:mime image/x-icon
->>4 use ico-dir
->9 ubyte 0xff
->>0 byte x MS Windows icon resource
-!:mime image/x-icon
->>4 use ico-dir
-
-# Windows non-animated cursors
-0 name cur-dir
-# not entirely accurate, the number of icons is part of the header
->0 byte 1 - 1 icon
->0 ubyte >1 - %d icons
->2 byte 0 \b, 256x
->2 byte !0 \b, %dx
->3 byte 0 \b256
->3 byte !0 \b%d
->6 uleshort x \b, hotspot @%dx
->8 uleshort x \b%d
-
-0 belong 0x00000200
->9 byte 0
->>0 byte x MS Windows cursor resource
-!:mime image/x-cur
->>4 use cur-dir
->9 ubyte 0xff
->>0 byte x MS Windows cursor resource
-!:mime image/x-cur
->>4 use cur-dir
-
-# .chr files
-0 string/b PK\010\010BGI Borland font
->4 string >\0 %s
-# then there is a copyright notice
-
-
-# .bgi files
-0 string/b pk\010\010BGI Borland device
->4 string >\0 %s
-# then there is a copyright notice
-
-
-# Windows Recycle Bin record file (named INFO2)
-# By Abel Cheung (abelcheung AT gmail dot com)
-# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
-# Since Vista uses another structure, INFO2 structure probably won't change
-# anymore. Detailed analysis in:
-# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
-0 lelong 0x00000004
->12 lelong 0x00000118 Windows Recycle Bin INFO2 file (Win98 or below)
-
-0 lelong 0x00000005
->12 lelong 0x00000320 Windows Recycle Bin INFO2 file (Win2k - WinXP)
-
-
-##### put in Either Magic/font or Magic/news
-# Acroread or something files wrongly identified as G3 .pfm
-# these have the form \000 \001 any? \002 \000 \000
-# or \000 \001 any? \022 \000 \000
-0 belong&0xffff00ff 0x00010012 PFM data
->4 string \000\000
->6 string >\060 - %s
-
-0 belong&0xffff00ff 0x00010002 PFM data
->4 string \000\000
->6 string >\060 - %s
-#0 string \000\001 pfm?
-#>3 string \022\000\000Copyright\ yes
-#>3 string \002\000\000Copyright\ yes
-#>3 string >\0 oops, not a font file. Cancel that.
-#it clashes with ttf files so put it lower down.
-
-# From Doug Lee via a FreeBSD pr
-9 string GERBILDOC First Choice document
-9 string GERBILDB First Choice database
-9 string GERBILCLIP First Choice database
-0 string GERBIL First Choice device file
-9 string RABBITGRAPH RabbitGraph file
-0 string DCU1 Borland Delphi .DCU file
-0 string =!<spell> MKS Spell hash list (old format)
-0 string =!<spell2> MKS Spell hash list
-# Too simple - MPi
-#0 string AH Halo(TM) bitmapped font file
-0 lelong 0x08086b70 TurboC BGI file
-0 lelong 0x08084b50 TurboC Font file
-
-# Debian#712046: The magic below identifies "Delphi compiled form data".
-# An additional source of information is available at:
-# http://www.woodmann.com/fravia/dafix_t1.htm
-0 string TPF0
->4 pstring >\0 Delphi compiled form '%s'
-
-# tests for DBase files moved, updated and merged to database
-
-0 string PMCC Windows 3.x .GRP file
-1 string RDC-meg MegaDots
->8 byte >0x2F version %c
->9 byte >0x2F \b.%c file
-0 lelong 0x4C
->4 lelong 0x00021401 Windows shortcut file
-
-# .PIF files added by Joerg Jenderek from http://smsoft.ru/en/pifdoc.htm
-# only for windows versions equal or greater 3.0
-0x171 string MICROSOFT\ PIFEX\0 Windows Program Information File
-!:mime application/x-dosexec
-#>2 string >\0 \b, Title:%.30s
->0x24 string >\0 \b for %.63s
->0x65 string >\0 \b, directory=%.64s
->0xA5 string >\0 \b, parameters=%.64s
-#>0x181 leshort x \b, offset %x
-#>0x183 leshort x \b, offsetdata %x
-#>0x185 leshort x \b, section length %x
->0x187 search/0xB55 WINDOWS\ VMM\ 4.0\0
->>&0x5e ubyte >0
->>>&-1 string <PIFMGR.DLL \b, icon=%s
-#>>>&-1 string PIFMGR.DLL \b, icon=%s
->>>&-1 string >PIFMGR.DLL \b, icon=%s
->>&0xF0 ubyte >0
->>>&-1 string <Terminal \b, font=%.32s
-#>>>&-1 string =Terminal \b, font=%.32s
->>>&-1 string >Terminal \b, font=%.32s
->>&0x110 ubyte >0
->>>&-1 string <Lucida\ Console \b, TrueTypeFont=%.32s
-#>>>&-1 string =Lucida\ Console \b, TrueTypeFont=%.32s
->>>&-1 string >Lucida\ Console \b, TrueTypeFont=%.32s
-#>0x187 search/0xB55 WINDOWS\ 286\ 3.0\0 \b, Windows 3.X standard mode-style
-#>0x187 search/0xB55 WINDOWS\ 386\ 3.0\0 \b, Windows 3.X enhanced mode-style
->0x187 search/0xB55 WINDOWS\ NT\ \ 3.1\0 \b, Windows NT-style
-#>0x187 search/0xB55 WINDOWS\ NT\ \ 4.0\0 \b, Windows NT-style
->0x187 search/0xB55 CONFIG\ \ SYS\ 4.0\0 \b +CONFIG.SYS
-#>>&06 string x \b:%s
->0x187 search/0xB55 AUTOEXECBAT\ 4.0\0 \b +AUTOEXEC.BAT
-#>>&06 string x \b:%s
-
-# DOS EPS Binary File Header
-# From: Ed Sznyter <ews at Black.Market.NET>
-0 belong 0xC5D0D3C6 DOS EPS Binary File
->4 long >0 Postscript starts at byte %d
->>8 long >0 length %d
->>>12 long >0 Metafile starts at byte %d
->>>>16 long >0 length %d
->>>20 long >0 TIFF starts at byte %d
->>>>24 long >0 length %d
-
-# TNEF magic From "Joomy" <joomy at se-ed.net>
-# Microsoft Outlook's Transport Neutral Encapsulation Format (TNEF)
-0 leshort 0x223e9f78 TNEF
-!:mime application/vnd.ms-tnef
-
-# Norton Guide (.NG , .HLP) files added by Joerg Jenderek from source NG2HTML.C
-# of http://www.davep.org/norton-guides/ng2h-105.tgz
-# http://en.wikipedia.org/wiki/Norton_Guides
-0 string NG\0\001
-# only value 0x100 found at offset 2
->2 ulelong 0x00000100 Norton Guide
-# Title[40]
->>8 string >\0 "%-.40s"
-#>>6 uleshort x \b, MenuCount=%u
-# szCredits[5][66]
->>48 string >\0 \b, %-.66s
->>114 string >\0 %-.66s
-
-# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
-# of http://www.4dos.info/
-# pointer,HelpID[8]=4DHnnnmm
-0 ulelong 0x48443408 4DOS help file
->4 string x \b, version %-4.4s
-
-# old binary Microsoft (.HLP) files added by Joerg Jenderek from http://file-extension.net/seeker/file_extension_hlp
-0 ulequad 0x3a000000024e4c MS Advisor help file
-
-# HtmlHelp files (.chm)
-0 string/b ITSF\003\000\000\000\x60\000\000\000\001\000\000\000 MS Windows HtmlHelp Data
-
-# GFA-BASIC (Wolfram Kleff)
-2 string/b GFA-BASIC3 GFA-BASIC 3 data
-
-#------------------------------------------------------------------------------
-# From Stuart Caie <kyzer at 4u.net> (developer of cabextract)
-# Microsoft Cabinet files
-0 string/b MSCF\0\0\0\0 Microsoft Cabinet archive data
-!:mime application/vnd.ms-cab-compressed
->8 lelong x \b, %u bytes
->28 leshort 1 \b, 1 file
->28 leshort >1 \b, %u files
-
-# InstallShield Cabinet files
-0 string/b ISc( InstallShield Cabinet archive data
->5 byte&0xf0 =0x60 version 6,
->5 byte&0xf0 !0x60 version 4/5,
->(12.l+40) lelong x %u files
-
-# Windows CE package files
-0 string/b MSCE\0\0\0\0 Microsoft WinCE install header
->20 lelong 0 \b, architecture-independent
->20 lelong 103 \b, Hitachi SH3
->20 lelong 104 \b, Hitachi SH4
->20 lelong 0xA11 \b, StrongARM
->20 lelong 4000 \b, MIPS R4000
->20 lelong 10003 \b, Hitachi SH3
->20 lelong 10004 \b, Hitachi SH3E
->20 lelong 10005 \b, Hitachi SH4
->20 lelong 70001 \b, ARM 7TDMI
->52 leshort 1 \b, 1 file
->52 leshort >1 \b, %u files
->56 leshort 1 \b, 1 registry entry
->56 leshort >1 \b, %u registry entries
-
-
-# Windows Enhanced Metafile (EMF)
-# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
-# for further information.
-0 ulelong 1
->40 string \ EMF Windows Enhanced Metafile (EMF) image data
->>44 ulelong x version 0x%x
-
-# from http://filext.com by Derek M Jones <derek at knosof.co.uk>
-# False positive with PPT (also currently this string is too long)
-#0 string/b \xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3E\x00\x03\x00\xFE\xFF\x09\x00\x06 Microsoft Installer
-0 string/b \320\317\021\340\241\261\032\341 Microsoft Office Document
-#>48 byte 0x1B Excel Document
-#!:mime application/vnd.ms-excel
->546 string bjbj Microsoft Word Document
-!:mime application/msword
->546 string jbjb Microsoft Word Document
-!:mime application/msword
-
-0 string/b \224\246\056 Microsoft Word Document
-!:mime application/msword
-
-512 string R\0o\0o\0t\0\ \0E\0n\0t\0r\0y Microsoft Word Document
-!:mime application/msword
-
-# From: "Nelson A. de Oliveira" <naoliv at gmail.com>
-# Magic type for Dell's BIOS .hdr files
-# Dell's .hdr
-0 string/b $RBU
->23 string Dell %s system BIOS
->5 byte 2
->>48 byte x version %d.
->>49 byte x \b%d.
->>50 byte x \b%d
->5 byte <2
->>48 string x version %.3s
-
-# Type: Microsoft DirectDraw Surface
-# URL: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
-# From: Morten Hustveit <morten at debian.org>
-0 string/b DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS),
->16 lelong >0 %d x
->12 lelong >0 %d,
->84 string x %.4s
-
-# Type: Microsoft Document Imaging Format (.mdi)
-# URL: http://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
-# From: Daniele Sempione <scrows at oziosi.org>
-0 short 0x5045 Microsoft Document Imaging Format
-
-# MS eBook format (.lit)
-0 string/b ITOLITLS Microsoft Reader eBook Data
->8 lelong x \b, version %u
-!:mime application/x-ms-reader
-
-# Windows CE Binary Image Data Format
-# From: Dr. Jesus <j at hug.gs>
-0 string/b B000FF\n Windows Embedded CE binary image
-
-# Windows Imaging (WIM) Image
-0 string/b MSWIM\000\000\000 Windows imaging (WIM) image
-
-# The second byte of these signatures is a file version; I don't know what,
-# if anything, produced files with version numbers 0-2.
-# From: John Elliott <johne at seasip.demon.co.uk>
-0 string \xfc\x03\x00 Mallard BASIC program data (v1.11)
-0 string \xfc\x04\x00 Mallard BASIC program data (v1.29+)
-0 string \xfc\x03\x01 Mallard BASIC protected program data (v1.11)
-0 string \xfc\x04\x01 Mallard BASIC protected program data (v1.29+)
-
-0 string MIOPEN Mallard BASIC Jetsam data
-0 string Jetsam0 Mallard BASIC Jetsam index data
-
-
-#------------------------------------------------------------------------------
-# $File: msooxml,v 1.4 2014/01/06 18:16:24 rrt Exp $
-# msooxml: file(1) magic for Microsoft Office XML
-# From: Ralf Brown <ralf.brown at gmail.com>
-
-# .docx, .pptx, and .xlsx are XML plus other files inside a ZIP
-# archive. The first member file is normally "[Content_Types].xml".
-# but some libreoffice generated files put this later. Perhaps skip
-# the "[Content_Types].xml" test?
-# Since MSOOXML doesn't have anything like the uncompressed "mimetype"
-# file of ePub or OpenDocument, we'll have to scan for a filename
-# which can distinguish between the three types
-
-# start by checking for ZIP local file header signature
-0 string PK\003\004
-!:strength +10
-# make sure the first file is correct
->0x1E regex \[Content_Types\]\.xml|_rels/\.rels
-# skip to the second local file header
-# since some documents include a 520-byte extra field following the file
-# header, we need to scan for the next header
->>(18.l+49) search/2000 PK\003\004
-# now skip to the *third* local file header; again, we need to scan due to a
-# 520-byte extra field following the file header
->>>&26 search/1000 PK\003\004
-# and check the subdirectory name to determine which type of OOXML
-# file we have. Correct the mimetype with the registered ones:
-# http://technet.microsoft.com/en-us/library/cc179224.aspx
->>>>&26 string word/ Microsoft Word 2007+
-!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
->>>>&26 string ppt/ Microsoft PowerPoint 2007+
-!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
->>>>&26 string xl/ Microsoft Excel 2007+
-!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
->>>>&26 default x Microsoft OOXML
-
-#------------------------------------------------------------------------------
-# $File: msvc,v 1.5 2009/09/19 16:28:11 christos Exp $
-# msvc: file(1) magic for msvc
-# "H. Nanosecond" <aldomel at ix.netcom.com>
-# Microsoft visual C
-#
-# I have version 1.0
-
-# .aps
-0 string HWB\000\377\001\000\000\000 Microsoft Visual C .APS file
-
-# .ide
-#too long 0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316 MSVC .ide
-0 string \102\157\162\154\141\156\144\040\103\053\053\040\120\162\157 MSVC .ide
-
-# .res
-0 string \000\000\000\000\040\000\000\000\377 MSVC .res
-0 string \377\003\000\377\001\000\020\020\350 MSVC .res
-0 string \377\003\000\377\001\000\060\020\350 MSVC .res
-
-#.lib
-0 string \360\015\000\000 Microsoft Visual C library
-0 string \360\075\000\000 Microsoft Visual C library
-0 string \360\175\000\000 Microsoft Visual C library
-
-#.pch
-0 string DTJPCH0\000\022\103\006\200 Microsoft Visual C .pch
-
-# .pdb
-# too long 0 string Microsoft\ C/C++\ program\ database\
-0 string Microsoft\ C/C++\ MSVC program database
->18 string program\ database\
->33 string >\0 ver %s
-
-#.sbr
-0 string \000\002\000\007\000 MSVC .sbr
->5 string >\0 %s
-
-#.bsc
-0 string \002\000\002\001 MSVC .bsc
-
-#.wsp
-0 string 1.00\ .0000.0000\000\003 MSVC .wsp version 1.0000.0000
-# these seem to start with the version and contain menus
-
-#------------------------------------------------------------------------------
-# msx: file(1) magic for the MSX Home Computer
-# v1.1
-# Fabio R. Schmidlin <sd-snatcher at users.sourceforge.net>
-
-############## MSX Music file formats ##############
-
-# Gigamix MGSDRV music file
-0 string MGS MSX Gigamix MGSDRV3 music file,
->6 ubeshort 0x0D0A
->>3 byte x \bv%c
->>4 byte x \b.%c
->>5 byte x \b%c
->>8 string >\0 \b, title: %s
-
-1 string mgs2\ MSX Gigamix MGSDRV2 music file
->6 uleshort 0x80
->>0x2E uleshort 0
->>>0x30 string >\0 \b, title: %s
-
-# KSS music file
-0 string KSCC KSS music file v1.03
->0xE byte 0
->>0xF byte&0x02 0 \b, soundchips: AY-3-8910, SCC(+)
->>0xF byte&0x02 2 \b, soundchip(s): SN76489
->>>0xF byte&0x04 4 stereo
->>0xF byte&0x01 1 \b, YM2413
->>0xF byte&0x08 8 \b, Y8950
-
-0 string KSSX KSS music file v1.20
->0xE byte&0xEF 0
->>0xF byte&0x40 0x00 \b, 60Hz
->>0xF byte&0x40 0x40 \b, 50Hz
->>0xF byte&0x02 0 \b, soundchips: AY-3-8910, SCC(+)
->>0xF byte&0x02 0x02 \b, soundchips: SN76489
->>>0xF byte&0x04 0x04 stereo
->>0xF byte&0x01 0x01 \b,
->>>0xF byte&0x18 0x00 \bYM2413
->>>0xF byte&0x18 0x08 \bYM2413, Y8950
->>>0xF byte&0x18 0x18 \bYM2413+Y8950 pseudostereo
->>0xF byte&0x18 0x10 \b, Majyutsushi DAC
-
-# Moonblaster for Moonsound
-0 string MBMS
->4 byte 0x10 MSX Moonblaster for MoonSound music
-
-# Music Player K-kaz
-0 string MPK MSX Music Player K-kaz song
->6 ubeshort 0x0D0A
->>3 byte x v%c
->>4 byte x \b.%c
->>5 byte x \b%c
-
-# I don't know why these don't work
-#0 search/0xFFFF \r\n.FM9
-#>0 search/0xFFFF \r\n#FORMAT MSX Music Player K-kaz source MML file
-#0 search/0xFFFF \r\nFM1\ \=
-#>0 search/0xFFFF \r\nPSG1\=
-#>>0 search/0xFFFF \r\nSCC1\= MSX MuSiCa MML source file
-
-# OPX Music file
-0x35 beshort 0x0d0a
->0x7B beshort 0x0d0a
->>0x7D byte 0x1a
->>>0x87 uleshort 0 MSX OPX Music file
->>>>0x86 byte 0 v1.5
->>>>>0 string >\32 \b, title: %s
->>>>0x86 byte 1 v2.4
->>>>>0 string >\32 \b, title: %s
-
-# SCMD music file
-0x8B string SCMD
->0xCE uleshort 0 MSX SCMD Music file
-#>>-2 uleshort 0x6a71 ; The file must end with this value. How to code this here?
->>0x8F string >\0 \b, title: %s
-
-0 search/0xFFFF \r\n at title
->&0 search/0xFFFF \r\n at m=[ MSX SCMD source MML file
-
-
-############## MSX image file formats ##############
-
-# MSX raw VRAM dump
-0 ubyte 0xFE
->1 uleshort 0
->>5 uleshort 0
->>>3 uleshort 0x37FF MSX SC2/GRP raw image
->>>3 uleshort 0x6A00 MSX Graph Saurus SR5 raw image
->>>3 uleshort >0x769E
->>>>3 uleshort <0x8000 MSX GE5/GE6 raw image
->>>>>3 uleshort 0x7FFF \b, with sprite patterns
->>>3 uleshort 0xD3FF MSX screen 7-12 raw image
->>>3 uleshort 0xD400 MSX Graph Saurus SR7/SR8/SRS raw image
-
-# Graph Saurus compressed images
-0 ubyte 0xFD
->1 uleshort 0
->>5 uleshort 0
->>>3 uleshort >0x013D MSX Graph Saurus compressed image
-
-# Maki-chan Graphic format
-0 string MAKI02\ \ Maki-chan image,
->8 byte x system ID: %c
->9 byte x \b%c
->10 byte x \b%c
->11 byte x \b%c,
->13 search/0x200 \x1A
-# >>&3 ubyte 0 , video mode: PC-98 400 lines, 16 analog colors
-# >>&3 ubyte 1 , video mode: MSX SC7, 16 analog colors
-# >>&3 ubyte 2 , video mode: VM-98 400 lines, 8 analog colors
-# >>&3 ubyte 3 , video mode: PC-88 analog, 200 lines, 8 analog colors
-# >>&3 ubyte 4 , video mode: 400 lines, 16 digital colors
-# >>&3 ubyte 5 , video mode: 200 lines, 16 digital colors
-# >>&3 ubyte 6 , video mode: old PC-98 digital 400 lines, 8 colors
-# >>&3 ubyte 7 , video mode: PC-88 400 lines, 8 digital colors
->>&8 uleshort+1 x %dx
->>&10 uleshort+1 x \b%d,
->>&3 ubyte&0x82 0x80 256 colors
->>&3 ubyte&0x82 0x00 16 colors
->>&3 ubyte&0x82 0x01 8 colors
->>&3 ubyte&0x04 4 digital
->>&3 ubyte&0x04 0 analog
->>&3 ubyte&0x01 1 \b, 2:1 dot aspect ratio
-
-# Japanese PIC file
-0 string PIC\x1A
->4 lelong 0 Japanese PIC image file
-
-# MSX G9B image file
-0 string G9B
->1 uleshort 11
->>3 uleshort >10
->>>5 ubyte >0 MSX G9B image, depth=%d
->>>>8 uleshort x \b, %dx
->>>>10 uleshort x \b%d
->>>>5 ubyte <9
->>>>>6 ubyte 0
->>>>>>7 ubyte x \b, codec=%d RGB color palettes
->>>>>6 ubyte 64 \b, codec=RGB fixed color
->>>>>6 ubyte 128 \b, codec=YJK
->>>>>6 ubyte 192 \b, codec=YUV
->>>>5 ubyte >8 codec=RGB fixed color
->>>>12 ubyte 0 \b, raw
->>>>12 ubyte 1 \b, bitbuster compression
-
-############## Other MSX file formats ##############
-
-# MSX ROMs
-0 string AB
->2 uleshort 0x0010 MSX ROM
->>2 uleshort x \b, init=0x%4x
->>4 uleshort >0 \b, stat=0x%4x
->>6 uleshort >0 \b, dev=0x%4x
->>8 uleshort >0 \b, bas=0x%4x
->2 uleshort 0x4010 MSX ROM
->>2 uleshort x \b, init=0x%04x
->>4 uleshort >0 \b, stat=0x%04x
->>6 uleshort >0 \b, dev=0x%04x
->>8 uleshort >0 \b, bas=0x%04x
->2 uleshort 0x8010 MSX ROM
->>2 uleshort x \b, init=0x%04x
->>4 uleshort >0 \b, stat=0x%04x
->>6 uleshort >0 \b, dev=0x%04x
->>8 uleshort >0 \b, bas=0x%04x
-
-0 string AB
-#>2 string 5JSuperLAYDOCK MSX Super Laydock ROM
-#>3 string @HYDLIDE3MSX MSX Hydlide-3 ROM
-#>3 string @3\x80IA862 Golvellius MSX1 ROM
->2 uleshort >10
->>10 string \0\0\0\0\0\0 MSX ROM
->>>0x10 string YZ\0\0\0\0 Konami Game Master 2 MSX ROM
->>>0x10 string CD \b, Konami RC-
->>>>0x12 ubyte x \b%d
->>>>0x13 ubyte/16 x \b%d
->>>>0x13 ubyte&0xF x \b%d
->>>0x10 string EF \b, Konami RC-
->>>>0x12 ubyte x \b%d
->>>>0x13 ubyte/16 x \b%d
->>>>0x13 ubyte&0xF x \b%d
->>>2 uleshort x \b, init=0x%04x
->>>4 uleshort >0 \b, stat=0x%04x
->>>6 uleshort >0 \b, dev=0x%04x
->>>8 uleshort >0 \b, bas=0x%04x
->2 uleshort 0
->>4 uleshort 0
->>>6 uleshort 0
->>>>8 uleshort >0 MSX BASIC program in ROM, bas=0x%04x
-
-0x4000 string AB
->0x4002 uleshort >0x4010
->>0x400A string \0\0\0\0\0\0 MSX MegaROM with nonstandard page order
->>0x4002 uleshort x \b, init=0x%04x
->>0x4004 uleshort >0 \b, stat=0x%04x
->>0x4006 uleshort >0 \b, dev=0x%04x
->>0x4008 uleshort >0 \b, bas=0x%04x
-
-0x8000 string AB
->0x8002 uleshort >0x4010
->>0x800A string \0\0\0\0\0\0 MSX MegaROM with nonstandard page order
->>0x8002 uleshort x \b, init=0x%04x
->>0x8004 uleshort >0 \b, stat=0x%04x
->>0x8006 uleshort >0 \b, dev=0x%04x
->>0x8008 uleshort >0 \b, bas=0x%04x
-
-
-0x3C000 string AB
->0x3C008 string \0\0\0\0\0\0\0\0 MSX MegaROM with nonstandard page order
->>0x3C002 uleshort x \b, init=0x%04x
->>0x3C004 uleshort >0 \b, stat=0x%04x
->>0x3C006 uleshort >0 \b, dev=0x%04x
->>0x3C008 uleshort >0 \b, bas=0x%04x
-
-# MSX BIN file
-#0 byte 0xFE
-#>1 uleshort >0x8000
-#>>3 uleshort >0x8004
-#>>>5 uleshort >0x8000 MSX BIN file
-
-# MSX-BASIC file
-0 byte 0xFF
->3 uleshort 0x000A
->>1 uleshort >0x8000 MSX-BASIC program
-
-# MSX .CAS file
-0 string \x1F\xA6\xDE\xBA\xCC\x13\x7D\x74 MSX cassette archive
-
-# Mega-Assembler file
-0 byte 0xFE
->1 uleshort 0x0001
->>5 uleshort 0xffff
->>>6 byte 0x0A MSX Mega-Assembler source
-
-# Execrom Patchfile
-0 string ExecROM\ patchfile\x1A MSX ExecROM patchfile
->0x12 ubyte/16 x v%d
->0x12 ubyte&0xF x \b.%d
->0x13 ubyte x \b, contains %d patches
-
-# Konami's King's Valley-2 custom stage (ELG file)
-4 uleshort 0x0900
->0xF byte 1
->>0x14 byte 0
->>>0x1E string \ \ \
->>>>0x23 byte 1
->>>>>0x25 byte 0
->>>>>>0x15 string >\x30
->>>>>>>0x15 string <\x5A Konami King's Valley-2 custom stage, title: "%-8.8s"
->>>>>>>>0x1D byte <32 \b, theme: %d
-
-# Metal Gear 1 savegame
-#0x4F string \x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
-#>>0x60 string \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
-#>>>0x7B string \0x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00 Metal Gear 1 savegame
-
-# ------------------------------------------------------------------------
-# $File: mup,v 1.4 2009/09/19 16:28:11 christos Exp $
-# mup: file(1) magic for Mup (Music Publisher) input file.
-#
-# From: Abel Cheung <abel (@) oaka.org>
-#
-# NOTE: This header is mainly proposed in the Arkkra mailing list,
-# and is not a mandatory header because of old mup input file
-# compatibility. Noteedit also use mup format, but is not forcing
-# user to use any header as well.
-#
-0 search/1 //!Mup Mup music publication program input text
->6 string -Arkkra (Arkkra)
->>13 string -
->>>16 string .
->>>>14 string x \b, need V%.4s
->>>15 string .
->>>>14 string x \b, need V%.3s
->6 string -
->>9 string .
->>>7 string x \b, need V%.4s
->>8 string .
->>>7 string x \b, need V%.3s
-#------------------------------------------------------------------------------
-# $File: music,v 1.1 2011/11/25 03:28:17 christos Exp $
-# music: file (1) magic for music formats
-
-# BWW format used by Bagpipe Music Writer Gold by Robert MacNeil Musicworks
-# and Bagpipe Writer by Doug Wickstrom
-#
-0 string Bagpipe Bagpipe
->8 string Reader Reader
->>15 string >\0 (version %.3s)
->8 string Music\ Writer Music Writer
->>20 string :
->>>21 string >\0 (version %.3s)
->>21 string Gold Gold
->>>25 string :
->>>>26 string >\0 (version %.3s)
-
-
-#-----------------------------------------------------------------------------
-# $File: natinst,v 1.6 2014/06/03 19:17:27 christos Exp $
-# natinst: file(1) magic for National Instruments Code Files
-
-#
-# From <egamez at fcfm.buap.mx> Enrique Gamez-Flores
-# version 1
-# Many formats still missing, we use, for the moment LabVIEW
-# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing
-#
-0 string RSRC National Instruments,
-# Check if it's a LabVIEW File
->8 string LV LabVIEW File,
-# Check which kind of file it is
->>10 string SB Code Resource File, data
->>10 string IN Virtual Instrument Program, data
->>10 string AR VI Library, data
-# This is for Menu Libraries
->8 string LMNULBVW Portable File Names, data
-# This is for General Resources
->8 string rsc Resources File, data
-# This is for VXI Package
-0 string VMAP National Instruments, VXI File, data
-
-#------------------------------------------------------------------------------
-# $File: ncr,v 1.8 2014/04/30 21:41:02 christos Exp $
-# ncr: file(1) magic for NCR Tower objects
-#
-# contributed by
-# Michael R. Wayne *** TMC & Associates *** INTERNET: wayne at ford-vax.arpa
-# uucp: {philabs | pyramid} !fmsrl7!wayne OR wayne at fmsrl7.UUCP
-#
-0 beshort 000610 Tower/XP rel 2 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %d
-0 beshort 000615 Tower/XP rel 2 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %d
-0 beshort 000620 Tower/XP rel 3 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %d
-0 beshort 000625 Tower/XP rel 3 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %d
-0 beshort 000630 Tower32/600/400 68020 object
->12 belong >0 not stripped
->20 beshort 0407 executable
->20 beshort 0410 pure executable
->22 beshort >0 - version %d
-0 beshort 000640 Tower32/800 68020
->18 beshort &020000 w/68881 object
->18 beshort &040000 compatible object
->18 beshort &060000 object
->20 beshort 0407 executable
->20 beshort 0413 pure executable
->12 belong >0 not stripped
->22 beshort >0 - version %d
-0 beshort 000645 Tower32/800 68010
->18 beshort &040000 compatible object
->18 beshort &060000 object
->20 beshort 0407 executable
->20 beshort 0413 pure executable
->12 belong >0 not stripped
->22 beshort >0 - version %d
-
-#------------------------------------------------------------
-# $File: neko,v 1.1 2009/11/10 20:36:10 christos Exp $
-
-# From: Mikhail Gusarov <dottedmag at dottedmag.net>
-# NekoVM (http://nekovm.org/) bytecode
-0 string NEKO NekoVM bytecode
->4 lelong x (%d global symbols,
->8 lelong x %d global fields,
->12 lelong x %d bytecode ops)
-!:mime application/x-nekovm-bytecode
-
-
-#------------------------------------------------------------------------------
-# $File: netbsd,v 1.21 2014/03/29 15:40:34 christos Exp $
-# netbsd: file(1) magic for NetBSD objects
-#
-# All new-style magic numbers are in network byte order.
-# The old-style magic numbers are indistinguishable from the same magic
-# numbers used in other systems, and are handled, for all those systems,
-# in aout.
-#
-
-0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 041400410 a.out NetBSD/i386 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 041400407 a.out NetBSD/i386
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 041400507 a.out NetBSD/i386 core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 041600413 a.out NetBSD/m68k demand paged
->0 byte &0x80
->>20 belong <8192 shared library
->>20 belong =8192 dynamically linked executable
->>20 belong >8192 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 041600410 a.out NetBSD/m68k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 041600407 a.out NetBSD/m68k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 041600507 a.out NetBSD/m68k core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 042000413 a.out NetBSD/m68k4k demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042000410 a.out NetBSD/m68k4k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042000407 a.out NetBSD/m68k4k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 042000507 a.out NetBSD/m68k4k core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 042200413 a.out NetBSD/ns32532 demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042200410 a.out NetBSD/ns32532 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042200407 a.out NetBSD/ns32532
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 042200507 a.out NetBSD/ns32532 core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 045200507 a.out NetBSD/powerpc core
->12 string >\0 from '%s'
-
-0 belong&0377777777 042400413 a.out NetBSD/SPARC demand paged
->0 byte &0x80
->>20 belong <8192 shared library
->>20 belong =8192 dynamically linked executable
->>20 belong >8192 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042400410 a.out NetBSD/SPARC pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 042400407 a.out NetBSD/SPARC
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 042400507 a.out NetBSD/SPARC core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 042600413 a.out NetBSD/pmax demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042600410 a.out NetBSD/pmax pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 042600407 a.out NetBSD/pmax
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 042600507 a.out NetBSD/pmax core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 043000413 a.out NetBSD/vax 1k demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043000410 a.out NetBSD/vax 1k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043000407 a.out NetBSD/vax 1k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 043000507 a.out NetBSD/vax 1k core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 045400413 a.out NetBSD/vax 4k demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 045400410 a.out NetBSD/vax 4k pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 045400407 a.out NetBSD/vax 4k
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-0 belong&0377777777 045400507 a.out NetBSD/vax 4k core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-# NetBSD/alpha does not support (and has never supported) a.out objects,
-# so no rules are provided for them. NetBSD/alpha ELF objects are
-# dealt with in "elf".
-0 lelong 0x00070185 ECOFF NetBSD/alpha binary
->10 leshort 0x0001 not stripped
->10 leshort 0x0000 stripped
-0 belong&0377777777 043200507 a.out NetBSD/alpha core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-0 belong&0377777777 043400413 a.out NetBSD/mips demand paged
->0 byte &0x80
->>20 belong <8192 shared library
->>20 belong =8192 dynamically linked executable
->>20 belong >8192 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 043400410 a.out NetBSD/mips pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-0 belong&0377777777 043400407 a.out NetBSD/mips
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 belong !0 executable
->>20 belong =0 object file
->16 belong >0 not stripped
-0 belong&0377777777 043400507 a.out NetBSD/mips core
->12 string >\0 from '%s'
->32 belong !0 (signal %d)
-
-0 belong&0377777777 043600413 a.out NetBSD/arm32 demand paged
->0 byte &0x80
->>20 lelong <4096 shared library
->>20 lelong =4096 dynamically linked executable
->>20 lelong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043600410 a.out NetBSD/arm32 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 lelong >0 not stripped
-0 belong&0377777777 043600407 a.out NetBSD/arm32
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80
->>0 byte &0x40 position independent
->>20 lelong !0 executable
->>20 lelong =0 object file
->16 lelong >0 not stripped
-# NetBSD/arm26 has always used ELF objects, but it shares a core file
-# format with NetBSD/arm32.
-0 belong&0377777777 043600507 a.out NetBSD/arm core
->12 string >\0 from '%s'
->32 lelong !0 (signal %d)
-
-# Kernel core dump format
-0 belong&0x0000ffff 0x00008fca NetBSD kernel core file
->0 belong&0x03ff0000 0x00000000 \b, Unknown
->0 belong&0x03ff0000 0x00001000 \b, sun 68010/68020
->0 belong&0x03ff0000 0x00020000 \b, sun 68020
->0 belong&0x03ff0000 0x00640000 \b, 386 PC
->0 belong&0x03ff0000 0x00860000 \b, i386 BSD
->0 belong&0x03ff0000 0x00870000 \b, m68k BSD (8K pages)
->0 belong&0x03ff0000 0x00880000 \b, m68k BSD (4K pages)
->0 belong&0x03ff0000 0x00890000 \b, ns32532 BSD
->0 belong&0x03ff0000 0x008a0000 \b, SPARC/32 BSD
->0 belong&0x03ff0000 0x008b0000 \b, pmax BSD
->0 belong&0x03ff0000 0x008c0000 \b, vax BSD (1K pages)
->0 belong&0x03ff0000 0x008d0000 \b, alpha BSD
->0 belong&0x03ff0000 0x008e0000 \b, mips BSD (Big Endian)
->0 belong&0x03ff0000 0x008f0000 \b, arm6 BSD
->0 belong&0x03ff0000 0x00900000 \b, m68k BSD (2K pages)
->0 belong&0x03ff0000 0x00910000 \b, sh3 BSD
->0 belong&0x03ff0000 0x00920000 \b, ppc BSD (Big Endian)
->0 belong&0x03ff0000 0x00930000 \b, vax BSD (4K pages)
->0 belong&0x03ff0000 0x00940000 \b, mips1 BSD
->0 belong&0x03ff0000 0x00950000 \b, mips2 BSD
->0 belong&0x03ff0000 0x00960000 \b, parisc BSD
->0 belong&0x03ff0000 0x00970000 \b, sh5/64 BSD
->0 belong&0x03ff0000 0x00980000 \b, SPARC/64 BSD
->0 belong&0x03ff0000 0x00990000 \b, amd64 BSD
->0 belong&0x03ff0000 0x009a0000 \b, hp200 (68010) BSD
->0 belong&0x03ff0000 0x009b0000 \b, hp300 (68020+68881) BSD
->0 belong&0x03ff0000 0x009b0000 \b, hp300 (68020+68881) BSD
->0 belong&0x03ff0000 0x00c80000 \b, hp200
->0 belong&0x03ff0000 0x020b0000 \b, hp300 (68020+68881) HP-UX
->0 belong&0x03ff0000 0x020c0000 \b, hp300 (68020+68881) HP-UX
->0 belong&0xfc000000 0x04000000 \b, CPU
->0 belong&0xfc000000 0x08000000 \b, DATA
->0 belong&0xfc000000 0x10000000 \b, STACK
->4 leshort x \b, (headersize = %d
->6 leshort x \b, segmentsize = %d
->6 lelong x \b, segments = %d)
-
-#------------------------------------------------------------------------------
-# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $
-# netscape: file(1) magic for Netscape files
-# "H. Nanosecond" <aldomel at ix.netcom.com>
-# version 3 and 4 I think
-#
-
-# Netscape Address book .nab
-0 string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book
-
-# Netscape Communicator address book
-0 string \000\017\102\111 Netscape Communicator address book
-
-# .snm Caches
-0 string #\ Netscape\ folder\ cache Netscape folder cache
-0 string \000\036\204\220\000 Netscape folder cache
-# .n2p
-# Net 2 Phone
-#0 string 123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
-0 string SX961999 Net2phone
-
-#
-#This is files ending in .art, FIXME add more rules
-0 string JG\004\016\0\0\0\0 ART
-
-#------------------------------------------------------------------------------
-# $File: netware,v 1.4 2009/09/19 16:28:11 christos Exp $
-# netware: file(1) magic for NetWare Loadable Modules (NLMs)
-# From: Mads Martin Joergensen <mmj at suse.de>
-
-0 string NetWare\ Loadable\ Module NetWare Loadable Module
-
-#------------------------------------------------------------------------------
-# $File: news,v 1.6 2009/09/19 16:28:11 christos Exp $
-# news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
-#
-0 string StartFontMetrics ASCII font metrics
-0 string StartFont ASCII font bits
-0 belong 0x137A2944 NeWS bitmap font
-0 belong 0x137A2947 NeWS font family
-0 belong 0x137A2950 scalable OpenFont binary
-0 belong 0x137A2951 encrypted scalable OpenFont binary
-8 belong 0x137A2B45 X11/NeWS bitmap font
-8 belong 0x137A2B48 X11/NeWS font family
-
-#------------------------------------------------------------------------------
-# $File: nitpicker,v 1.6 2014/04/30 21:41:02 christos Exp $
-# nitpicker: file(1) magic for Flowfiles.
-# From: Christian Jachmann <C.Jachmann at gmx.net> http://www.nitpicker.de
-0 string NPFF NItpicker Flow File
->4 byte x V%d.
->5 byte x %d
->6 bedate x started: %s
->10 bedate x stopped: %s
->14 belong x Bytes: %u
->18 belong x Bytes1: %u
->22 belong x Flows: %u
->26 belong x Pkts: %u
-
-#------------------------------------------------------------------------------
-# $File: oasis,v 1.2 2014/06/03 19:17:27 christos Exp $
-# OASIS
-# Summary: OASIS stream file
-# Long description: Open Artwork System Interchange Standard
-# File extension: .oas
-# Full name: Ben Cowley (bcowley at broadcom.com)
-# Philip Dixon (pdixon at broadcom.com)
-# Reference: http://www.wrcad.com/oasis/oasis-3626-042303-draft.pdf
-# (see page 3)
-0 string %SEMI-OASIS\r\n OASIS Stream file
-
-#------------------------------------------------------------------------------
-# $File: ocaml,v 1.5 2010/09/20 18:55:20 rrt Exp $
-# ocaml: file(1) magic for Objective Caml files.
-0 string Caml1999 OCaml
->8 string X exec file
->8 string I interface file (.cmi)
->8 string O object file (.cmo)
->8 string A library file (.cma)
->8 string Y native object file (.cmx)
->8 string Z native library file (.cmxa)
->8 string M abstract syntax tree implementation file
->8 string N abstract syntax tree interface file
->9 string >\0 (Version %3.3s)
-
-#------------------------------------------------------------------------------
-# $File: octave,v 1.4 2009/09/19 16:28:11 christos Exp $
-# octave binary data file(1) magic, from Dirk Eddelbuettel <edd at debian.org>
-0 string Octave-1-L Octave binary data (little endian)
-0 string Octave-1-B Octave binary data (big endian)
-
-#------------------------------------------------------------------------------
-# $File: ole2compounddocs,v 1.4 2009/09/19 16:28:11 christos Exp $
-# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured
-# storage (http://en.wikipedia.org/wiki/Structured_Storage)
-# Additional tests for OLE 2 Compound Documents should be under this recipe.
-
-0 string \320\317\021\340\241\261\032\341 OLE 2 Compound Document
-# - Microstation V8 DGN files (www.bentley.com)
-# Last update on 10/23/2006 by Lester Hightower
-> 0x480 string D\000g\000n\000~\000H : Microstation V8 DGN
-# - Visio documents
-# Last update on 10/23/2006 by Lester Hightower
-> 0x480 string V\000i\000s\000i\000o\000D\000o\000c : Visio Document
-
-#------------------------------------------------------------------------------
-# $File: olf,v 1.4 2009/09/19 16:28:11 christos Exp $
-# olf: file(1) magic for OLF executables
-#
-# We have to check the byte order flag to see what byte order all the
-# other stuff in the header is in.
-#
-# MIPS R3000 may also be for MIPS R2000.
-# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
-#
-# Created by Erik Theisen <etheisen at openbsd.org>
-# Based on elf from Daniel Quinlan <quinlan at yggdrasil.com>
-0 string \177OLF OLF
->4 byte 0 invalid class
->4 byte 1 32-bit
->4 byte 2 64-bit
->7 byte 0 invalid os
->7 byte 1 OpenBSD
->7 byte 2 NetBSD
->7 byte 3 FreeBSD
->7 byte 4 4.4BSD
->7 byte 5 Linux
->7 byte 6 SVR4
->7 byte 7 esix
->7 byte 8 Solaris
->7 byte 9 Irix
->7 byte 10 SCO
->7 byte 11 Dell
->7 byte 12 NCR
->5 byte 0 invalid byte order
->5 byte 1 LSB
->>16 leshort 0 no file type,
->>16 leshort 1 relocatable,
->>16 leshort 2 executable,
->>16 leshort 3 shared object,
-# Core handling from Peter Tobias <tobias at server.et-inf.fho-emden.de>
-# corrections by Christian 'Dr. Disk' Hechelmann <drdisk at ds9.au.s.shuttle.de>
->>16 leshort 4 core file
->>>(0x38+0xcc) string >\0 of '%s'
->>>(0x38+0x10) lelong >0 (signal %d),
->>16 leshort &0xff00 processor-specific,
->>18 leshort 0 no machine,
->>18 leshort 1 AT&T WE32100 - invalid byte order,
->>18 leshort 2 SPARC - invalid byte order,
->>18 leshort 3 Intel 80386,
->>18 leshort 4 Motorola 68000 - invalid byte order,
->>18 leshort 5 Motorola 88000 - invalid byte order,
->>18 leshort 6 Intel 80486,
->>18 leshort 7 Intel 80860,
->>18 leshort 8 MIPS R3000_BE - invalid byte order,
->>18 leshort 9 Amdahl - invalid byte order,
->>18 leshort 10 MIPS R3000_LE,
->>18 leshort 11 RS6000 - invalid byte order,
->>18 leshort 15 PA-RISC - invalid byte order,
->>18 leshort 16 nCUBE,
->>18 leshort 17 VPP500,
->>18 leshort 18 SPARC32PLUS,
->>18 leshort 20 PowerPC,
->>18 leshort 0x9026 Alpha,
->>20 lelong 0 invalid version
->>20 lelong 1 version 1
->>36 lelong 1 MathCoPro/FPU/MAU Required
->8 string >\0 (%s)
->5 byte 2 MSB
->>16 beshort 0 no file type,
->>16 beshort 1 relocatable,
->>16 beshort 2 executable,
->>16 beshort 3 shared object,
->>16 beshort 4 core file,
->>>(0x38+0xcc) string >\0 of '%s'
->>>(0x38+0x10) belong >0 (signal %d),
->>16 beshort &0xff00 processor-specific,
->>18 beshort 0 no machine,
->>18 beshort 1 AT&T WE32100,
->>18 beshort 2 SPARC,
->>18 beshort 3 Intel 80386 - invalid byte order,
->>18 beshort 4 Motorola 68000,
->>18 beshort 5 Motorola 88000,
->>18 beshort 6 Intel 80486 - invalid byte order,
->>18 beshort 7 Intel 80860,
->>18 beshort 8 MIPS R3000_BE,
->>18 beshort 9 Amdahl,
->>18 beshort 10 MIPS R3000_LE - invalid byte order,
->>18 beshort 11 RS6000,
->>18 beshort 15 PA-RISC,
->>18 beshort 16 nCUBE,
->>18 beshort 17 VPP500,
->>18 beshort 18 SPARC32PLUS,
->>18 beshort 20 PowerPC or cisco 4500,
->>18 beshort 21 cisco 7500,
->>18 beshort 24 cisco SVIP,
->>18 beshort 25 cisco 7200,
->>18 beshort 36 cisco 12000,
->>18 beshort 0x9026 Alpha,
->>20 belong 0 invalid version
->>20 belong 1 version 1
->>36 belong 1 MathCoPro/FPU/MAU Required
-
-#------------------------------------------------------------------------------
-# $File: os2,v 1.7 2009/09/19 16:28:11 christos Exp $
-# os2: file(1) magic for OS/2 files
-#
-
-# Provided 1998/08/22 by
-# David Mediavilla <davidme.news at REMOVEIFNOTSPAMusa.net>
-1 search/1 InternetShortcut MS Windows 95 Internet shortcut text
->24 search/1 >\ (URL=<%s>)
-
-# OS/2 URL objects
-# Provided 1998/08/22 by
-# David Mediavilla <davidme.news at REMOVEIFNOTSPAMusa.net>
-#0 string http: OS/2 URL object text
-#>5 string >\ (WWW) <http:%s>
-#0 string mailto: OS/2 URL object text
-#>7 string >\ (email) <%s>
-#0 string news: OS/2 URL object text
-#>5 string >\ (Usenet) <%s>
-#0 string ftp: OS/2 URL object text
-#>4 string >\ (FTP) <ftp:%s>
-#0 string file: OS/2 URL object text
-#>5 string >\ (Local file) <%s>
-
-# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett at netcom.com)
-# Carl Hauser (chauser.parc at xerox.com) and
-# Marcus Groeber (marcusg at ph-cip.uni-koeln.de)
-# list the following header format in inf02a.doc:
-#
-# int16 ID; // ID magic word (5348h = "HS")
-# int8 unknown1; // unknown purpose, could be third letter of ID
-# int8 flags; // probably a flag word...
-# // bit 0: set if INF style file
-# // bit 4: set if HLP style file
-# // patching this byte allows reading HLP files
-# // using the VIEW command, while help files
-# // seem to work with INF settings here as well.
-# int16 hdrsize; // total size of header
-# int16 unknown2; // unknown purpose
-#
-0 string HSP\x01\x9b\x00 OS/2 INF
->107 string >0 (%s)
-0 string HSP\x10\x9b\x00 OS/2 HLP
->107 string >0 (%s)
-
-# OS/2 INI (this is a guess)
-0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI
-
-#------------------------------------------------------------------------------
-# $File: os400,v 1.5 2009/09/19 16:28:11 christos Exp $
-# os400: file(1) magic for IBM OS/400 files
-#
-# IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari at gmail.com
-# In spite of its quite variable format (due to internal memory page
-# length differences between CISC and RISC versions of the OS) the
-# SAVF structure hasn't suitable offsets to identify the catalog
-# header in the first descriptor where there are some useful infos,
-# so we must search in a somewhat large area for a particular string
-# that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore
-# descriptor space) preceded by a two byte constant.
-#
-1090 search/7393 \x19\xDB\xD8\xE2\xD9\xC4\xE2\xE2\xD7\xC3 IBM OS/400 save file data
->&212 byte 0x01 \b, created with SAVOBJ
->&212 byte 0x02 \b, created with SAVLIB
->&212 byte 0x07 \b, created with SAVCFG
->&212 byte 0x08 \b, created with SAVSECDTA
->&212 byte 0x0A \b, created with SAVSECDTA
->&212 byte 0x0B \b, created with SAVDLO
->&212 byte 0x0D \b, created with SAVLICPGM
->&212 byte 0x11 \b, created with SAVCHGOBJ
->&213 byte 0x44 \b, at least V5R4 to open
->&213 byte 0x43 \b, at least V5R3 to open
->&213 byte 0x42 \b, at least V5R2 to open
->&213 byte 0x41 \b, at least V5R1 to open
->&213 byte 0x40 \b, at least V4R5 to open
->&213 byte 0x3F \b, at least V4R4 to open
->&213 byte 0x3E \b, at least V4R3 to open
->&213 byte 0x3C \b, at least V4R2 to open
->&213 byte 0x3D \b, at least V4R1M4 to open
->&213 byte 0x3B \b, at least V4R1 to open
->&213 byte 0x3A \b, at least V3R7 to open
->&213 byte 0x35 \b, at least V3R6 to open
->&213 byte 0x36 \b, at least V3R2 to open
->&213 byte 0x34 \b, at least V3R1 to open
->&213 byte 0x31 \b, at least V3R0M5 to open
->&213 byte 0x30 \b, at least V2R3 to open
-
-#------------------------------------------------------------------------------
-# $File: os9,v 1.7 2011/05/13 22:15:54 christos Exp $
-#
-# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#
-#
-# OS9/6809 module descriptions:
-#
-0 beshort 0x87CD OS9/6809 module:
-#
->6 byte&0x0f 0x00 non-executable
->6 byte&0x0f 0x01 machine language
->6 byte&0x0f 0x02 BASIC I-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&0xf0 0x10 program executable
->6 byte&0xf0 0x20 subroutine
->6 byte&0xf0 0x30 multi-module
->6 byte&0xf0 0x40 data module
-#
->6 byte&0xf0 0xC0 system module
->6 byte&0xf0 0xD0 file manager
->6 byte&0xf0 0xE0 device driver
->6 byte&0xf0 0xF0 device descriptor
-#
-# OS9/m68k stuff (to be continued)
-#
-0 beshort 0x4AFC OS9/68K module:
-#
-# attr
->0x14 byte&0x80 0x80 re-entrant
->0x14 byte&0x40 0x40 ghost
->0x14 byte&0x20 0x20 system-state
-#
-# lang:
-#
->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:
-#
->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
-
-#------------------------------------------------------------------------------
-# $File: osf1,v 1.7 2009/09/19 16:28:11 christos Exp $
-#
-# Mach magic number info
-#
-0 long 0xefbe OSF/Rose object
-# I386 magic number info
-#
-0 short 0565 i386 COFF object
-
-#------------------------------------------------------------------------------
-# $File: palm,v 1.13 2014/03/30 21:40:08 christos Exp $
-# palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
-#
-# Brian Lalor <blalor at hcirisc.cs.binghamton.edu>
-
-# These are weak, byte 59 is not guaranteed to be 0 and there are
-# 8 character identifiers at byte 60, one I found for appl is BIGb.
-# What are the possibilities and where is this documented?
-
-# The common header format for PalmOS .pdb/.prc files is
-# {
-# char name[ 32 ];
-# Word attributes;
-# Word version;
-# DWord creationDate;
-# DWord modificationDate;
-# DWord lastBackupDate;
-# DWord modificationNumber;
-# DWord appInfoID;
-# DWord sortInfoID;
-# char type[4];
-# char creator[4];
-# DWord uniqueIDSeed;
-# RecordListType recordList;
-# };
-#
-# Datestamps are unsigned seconds since the MacOS epoch (Jan 1, 1904),
-# or Unix/POSIX time + 2082844800.
-
-0 name aportisdoc
-# date is supposed to be big-endian seconds since 1 Jan 1904, but many
-# files contain the timestamp in little-endian or a completely
-# nonsensical value...
-#>36 bedate-2082844800 >0 \b, created %s
-# compression: 1=uncomp, 2=orig, 0x4448=HuffDic
->(78.L) beshort =1 \b, uncompressed
-# compressed
->(78.L) beshort >1
->>(78.L+4) belong x \b, %d bytes uncompressed
-
-# appl
-#60 string appl PalmOS application
-#>0 string >\0 "%s"
-
-# HACK
-#60 string HACK HackMaster hack
-#>0 string >\0 "%s"
-
-# iSiloX e-book
-60 string SDocSilX iSiloX E-book
->0 string >\0 "%s"
-
-# Mobipocket (www.mobipocket.com), donated by Carl Witty
-# expanded by Ralf Brown
-60 string BOOKMOBI Mobipocket E-book
-# MobiPocket stores a full title, pointed at by the belong at offset
-# 0x54 in its header at (78.L), with length given by the belong at
-# offset 0x58.
-# there's no guarantee that the title string is null-terminated, but
-# we currently can't specify a variable-length string where the length
-# field is not at the start of the string; in practice, the data
-# following the string always seems to start with a zero byte
->(78.L) belong x
->>&(&0x50.L-4) string >\0 "%s"
->0 use aportisdoc
->>(78.L+0x68) belong >0 \b, version %d
->>(78.L+0x1C) belong !0 \b, codepage %d
->>(78.L+0x0C) beshort >0 \b, encrypted (type %d)
-
-# AportisDoc/PalmDOC
-60 string TEXtREAd AportisDoc/PalmDOC E-book
->0 string >\0 "%s"
->0 use aportisdoc
-
-# Variety of PalmOS document types
-# Michael-John Turner <mj at debian.org>
-# Thanks to Hasan Umit Ezerce <humit at tr-net.net.tr> for his DocType
-60 string BVokBDIC BDicty PalmOS document
->0 string >\0 "%s"
-60 string DB99DBOS DB PalmOS document
->0 string >\0 "%s"
-60 string vIMGView FireViewer/ImageViewer PalmOS document
->0 string >\0 "%s"
-60 string PmDBPmDB HanDBase PalmOS document
->0 string >\0 "%s"
-60 string InfoINDB InfoView PalmOS document
->0 string >\0 "%s"
-60 string ToGoToGo iSilo PalmOS document
->0 string >\0 "%s"
-60 string JfDbJBas JFile PalmOS document
->0 string >\0 "%s"
-60 string JfDbJFil JFile Pro PalmOS document
->0 string >\0 "%s"
-60 string DATALSdb List PalmOS document
->0 string >\0 "%s"
-60 string Mdb1Mdb1 MobileDB PalmOS document
->0 string >\0 "%s"
-60 string PNRdPPrs PeanutPress PalmOS document
->0 string >\0 "%s"
-60 string DataPlkr Plucker PalmOS document
->0 string >\0 "%s"
-60 string DataSprd QuickSheet PalmOS document
->0 string >\0 "%s"
-60 string SM01SMem SuperMemo PalmOS document
->0 string >\0 "%s"
-60 string TEXtTlDc TealDoc PalmOS document
->0 string >\0 "%s"
-60 string InfoTlIf TealInfo PalmOS document
->0 string >\0 "%s"
-60 string DataTlMl TealMeal PalmOS document
->0 string >\0 "%s"
-60 string DataTlPt TealPaint PalmOS document
->0 string >\0 "%s"
-60 string dataTDBP ThinkDB PalmOS document
->0 string >\0 "%s"
-60 string TdatTide Tides PalmOS document
->0 string >\0 "%s"
-60 string ToRaTRPW TomeRaider PalmOS document
->0 string >\0 "%s"
-
-# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)
-# For version 1.xx zTXTs, outputs version and numbers of bookmarks and
-# annotations.
-# For other versions, just outputs version.
-#
-60 string zTXT A GutenPalm zTXT e-book
->0 string >\0 "%s"
->(0x4E.L) byte 0
->>(0x4E.L+1) byte x (v0.%02d)
->(0x4E.L) byte 1
->>(0x4E.L+1) byte x (v1.%02d)
->>>(0x4E.L+10) beshort >0
->>>>(0x4E.L+10) beshort <2 - 1 bookmark
->>>>(0x4E.L+10) beshort >1 - %d bookmarks
->>>(0x4E.L+14) beshort >0
->>>>(0x4E.L+14) beshort <2 - 1 annotation
->>>>(0x4E.L+14) beshort >1 - %d annotations
->(0x4E.L) byte >1 (v%d.
->>(0x4E.L+1) byte x %02d)
-
-# Palm OS .prc file types
-60 string libr
-# flags, only bit 0 or bit 6
-# http://en.wikipedia.org/wiki/PRC_%28Palm_OS%29
-# http://web.mit.edu/tytso/www/pilot/prc-format.html
->0x20 beshort&0xffbe 0
->>0 string >\0 Palm OS dynamic library data "%s"
-60 string ptch Palm OS operating system patch data
->0 string >\0 "%s"
-
-# Mobipocket (www.mobipocket.com), donated by Carl Witty
-60 string BOOKMOBI Mobipocket E-book
->0 string >\0 "%s"
-
-#------------------------------------------------------------------------------
-# $File: parix,v 1.4 2009/09/19 16:28:11 christos Exp $
-#
-# Parix COFF executables
-# From: Ignatios Souvatzis <ignatios at cs.uni-bonn.de>
-#
-0 beshort&0xfff 0xACE PARIX
->0 byte&0xf0 0x80 T800
->0 byte&0xf0 0x90 T9000
->19 byte&0x02 0x02 executable
->19 byte&0x02 0x00 object
->19 byte&0x0c 0x00 not stripped
-#------------------------------------------------------------------------------
-# $File: parrot,v 1.1 2010/07/08 20:18:40 christos Exp $
-# parrot: file(1) magic for Parrot Virtual Machine
-# URL: http://www.lua.org/
-# From: Lubomir Rintel <lkundrak at v3.sk>
-
-# Compiled Parrot byte code
-0 string \376PBC\r\n\032\n Parrot bytecode
->64 byte x %d.
->72 byte x \b%d,
->8 byte >0 %d byte words,
->16 byte 0 little-endian,
->16 byte 1 big-endian,
->32 byte 0 IEEE-754 8 byte double floats,
->32 byte 1 x86 12 byte long double floats,
->32 byte 2 IEEE-754 16 byte long double floats,
->32 byte 3 MIPS 16 byte long double floats,
->32 byte 4 AIX 16 byte long double floats,
->32 byte 5 4-byte floats,
->40 byte x Parrot %d.
->48 byte x \b%d.
->56 byte x \b%d
-#------------------------------------------------------------------------------
-# $File: pascal,v 1.1 2011/12/08 12:12:46 rrt Exp $
-# pascal: file(1) magic for Pascal source
-#
-0 search/8192 (input, Pascal source text
-!:mime text/x-pascal
-0 regex \^program Pascal source text
-!:mime text/x-pascal
-0 regex \^record Pascal source text
-!:mime text/x-pascal
-
-#------------------------------------------------------------------------------
-# $File: pbf,v 1.1 2013/12/21 14:27:24 christos Exp $
-# file(1) magic(5) data for OpenStreetMap
-
-# OpenStreetMap Protocolbuffer Binary Format (.osm.pbf)
-# http://wiki.openstreetmap.org/wiki/PBF_Format
-# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 belong 0x0000000D
->4 beshort 0x0A09
->>6 string OSMHeader OpenStreetMap Protocolbuffer Binary Format
-
-#------------------------------------------------------------------------------
-# $File: pbm,v 1.6 2009/09/19 16:28:11 christos Exp $
-# pbm: file(1) magic for Portable Bitmap files
-#
-# XXX - byte order?
-#
-0 short 0x2a17 "compact bitmap" format (Poskanzer)
-
-#------------------------------------------------------------------------------
-# $File: pdf,v 1.7 2013/08/22 07:47:26 christos Exp $
-# pdf: file(1) magic for Portable Document Format
-#
-
-0 string %PDF- PDF document
-!:mime application/pdf
->5 byte x \b, version %c
->7 byte x \b.%c
-
-# From: Nick Schmalenberger <nick at schmalenberger.us>
-# Forms Data Format
-0 string %FDF- FDF document
-!:mime application/vnd.fdf
->5 byte x \b, version %c
->7 byte x \b.%c
-
-#------------------------------------------------------------------------------
-# $File: pdp,v 1.10 2014/04/30 21:41:02 christos Exp $
-# pdp: file(1) magic for PDP-11 executable/object and APL workspace
-#
-0 lelong 0101555 PDP-11 single precision APL workspace
-0 lelong 0101554 PDP-11 double precision APL workspace
-#
-# PDP-11 a.out
-#
-0 leshort 0407 PDP-11 executable
->8 leshort >0 not stripped
->15 byte >0 - version %d
-
-# updated by Joerg Jenderek at Mar 2013
-# GRR: line below too general as it catches also Windows precompiled setup information *.PNF
-0 leshort 0401
-# skip *.PNF with WinDirPathOffset 58h
->68 ulelong !0x00000058 PDP-11 UNIX/RT ldp
-# skip *.PNF with high byte of InfVersionDatumCount zero
-#>>15 byte !0 PDP-11 UNIX/RT ldp
-0 leshort 0405 PDP-11 old overlay
-
-0 leshort 0410 PDP-11 pure executable
->8 leshort >0 not stripped
->15 byte >0 - version %d
-
-0 leshort 0411 PDP-11 separate I&D executable
->8 leshort >0 not stripped
->15 byte >0 - version %d
-
-0 leshort 0437 PDP-11 kernel overlay
-
-# These last three are derived from 2.11BSD file(1)
-0 leshort 0413 PDP-11 demand-paged pure executable
->8 leshort >0 not stripped
-
-0 leshort 0430 PDP-11 overlaid pure executable
->8 leshort >0 not stripped
-
-0 leshort 0431 PDP-11 overlaid separate executable
->8 leshort >0 not stripped
-#------------------------------------------------------------------------------
-# $File: perl,v 1.22 2014/04/28 12:04:35 christos Exp $
-# perl: file(1) magic for Larry Wall's perl language.
-#
-# The `eval' lines recognizes an outrageously clever hack.
-# Keith Waclena <keith at cerberus.uchicago.edu>
-# Send additions to <perl5-porters at perl.org>
-0 search/1 eval\ "exec\ /bin/perl Perl script text
-!:mime text/x-perl
-0 search/1 eval\ "exec\ /usr/bin/perl Perl script text
-!:mime text/x-perl
-0 search/1 eval\ "exec\ /usr/local/bin/perl Perl script text
-!:mime text/x-perl
-0 search/1 eval\ '(exit\ $?0)'\ &&\ eval\ 'exec Perl script text
-!:mime text/x-perl
-0 search/1 #!/usr/bin/env\ perl Perl script text executable
-!:mime text/x-perl
-0 search/1 #!\ /usr/bin/env\ perl Perl script text executable
-!:mime text/x-perl
-0 search/1 #!
->0 regex \^#!.*/bin/perl$ Perl script text executable
-!:mime text/x-perl
-
-# by Dmitry V. Levin and Alexey Tourbin
-# check the first line
-0 search/1 package
->0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *; Perl5 module source text
-!:strength + 10
-# not 'p', check other lines
-0 search/1 !p
->0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *;
->>0 regex \^1\ *;|\^(use|sub|my)\ .*[(;{=] Perl5 module source text
-!:strength + 10
-
-# Perl POD documents
-# From: Tom Hukins <tom at eborcom.com>
-0 search/1/W \=pod\n Perl POD document text
-0 search/1/W \n\=pod\n Perl POD document text
-0 search/1/W \=head1\ Perl POD document text
-0 search/1/W \n\=head1\ Perl POD document text
-0 search/1/W \=head2\ Perl POD document text
-0 search/1/W \n\=head2\ Perl POD document text
-0 search/1/W \=encoding\ Perl POD document text
-0 search/1/W \n\=encoding\ Perl POD document 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)
-
-# This is Debian #742949 by Zefram <zefram at fysh.org>:
-# -----------------------------------------------------------
-# The Perl module Hash::SharedMem
-# <https://metacpan.org/release/Hash-SharedMem> defines a file format
-# for a key/value store. Details of the file format are in the "DESIGN"
-# file in the module distribution. Magic:
-0 bequad =0xa58afd185cbf5af7 Hash::SharedMem master file, big-endian
->8 bequad <0x1000000
->>15 byte >2 \b, line size 2^%d byte
->>14 byte >2 \b, page size 2^%d byte
->>13 byte &1
->>>13 byte >1 \b, max fanout %d
-0 lequad =0xa58afd185cbf5af7 Hash::SharedMem master file, little-endian
->8 lequad <0x1000000
->>8 byte >2 \b, line size 2^%d byte
->>9 byte >2 \b, page size 2^%d byte
->>10 byte &1
->>>10 byte >1 \b, max fanout %d
-0 bequad =0xc693dac5ed5e47c2 Hash::SharedMem data file, big-endian
->8 bequad <0x1000000
->>15 byte >2 \b, line size 2^%d byte
->>14 byte >2 \b, page size 2^%d byte
->>13 byte &1
->>>13 byte >1 \b, max fanout %d
-0 lequad =0xc693dac5ed5e47c2 Hash::SharedMem data file, little-endian
->8 lequad <0x1000000
->>8 byte >2 \b, line size 2^%d byte
->>9 byte >2 \b, page size 2^%d byte
->>10 byte &1
->>>10 byte >1 \b, max fanout %d
-
-#------------------------------------------------------------------------------
-# $File: pgf,v 1.1 2013/04/22 15:19:49 christos Exp $
-# pgf: file(1) magic for Progressive Graphics File (PGF)
-#
-# <http://www.libpgf.org/uploads/media/PGF_Details_01.pdf>
-# 2013 by Philipp Hahn <pmhahn debian org>
-0 string PGF Progressive Graphics image data,
-!:mime image/x-pgf
->3 string 2 version %s,
->3 string 4 version %s,
->3 string 5 version %s,
->3 string 6 version %s,
-# PGFPreHeader
-#>>4 lelong x header size %d,
-# PGFHeader
->>8 lelong x %d x
->>12 lelong x %d,
->>16 byte x %d levels,
->>17 byte x compression level %d,
->>18 byte x %d bpp,
->>19 byte x %d channels,
->>20 clear x
->>20 byte 0 bitmap,
->>20 byte 1 gray scale,
->>20 byte 2 indexed color,
->>20 byte 3 RGB color,
->>20 byte 4 CYMK color,
->>20 byte 5 HSL color,
->>20 byte 6 HSB color,
->>20 byte 7 multi-channel,
->>20 byte 8 duo tone,
->>20 byte 9 LAB color,
->>20 byte 10 gray scale 16,
->>20 byte 11 RGB color 48,
->>20 byte 12 LAB color 48,
->>20 byte 13 CYMK color 64,
->>20 byte 14 deep multi-channel,
->>20 byte 15 duo tone 16,
->>20 byte 17 RGBA color,
->>20 byte 18 gray scale 32,
->>20 byte 19 RGB color 12,
->>20 byte 20 RGB color 16,
->>20 byte 255 unknown format,
->>20 default x format
->>>20 byte x \b %d,
->>21 byte x %d bpc
-# PGFPostHeader
-# Level-Sizes
-#>>(4.l+4) lelong x level 0 size: %d
-#>>(4.l+8) lelong x level 1 size: %d
-#>>(4.l+12) lelong x level 2 size: %d
-
-#------------------------------------------------------------------------------
-# $File: pgp,v 1.9 2009/09/19 16:28:11 christos Exp $
-# pgp: file(1) magic for Pretty Good Privacy
-# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
-#
-0 beshort 0x9900 PGP key public ring
-!:mime application/x-pgp-keyring
-0 beshort 0x9501 PGP key security ring
-!:mime application/x-pgp-keyring
-0 beshort 0x9500 PGP key security ring
-!:mime application/x-pgp-keyring
-0 beshort 0xa600 PGP encrypted data
-#!:mime application/pgp-encrypted
-#0 string -----BEGIN\040PGP text/PGP armored data
-!:mime text/PGP # encoding: armored data
-#>15 string PUBLIC\040KEY\040BLOCK- public key block
-#>15 string MESSAGE- message
-#>15 string SIGNED\040MESSAGE- signed message
-#>15 string PGP\040SIGNATURE- signature
-
-2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- PGP public key block
-!:mime application/pgp-keys
-0 string -----BEGIN\040PGP\40MESSAGE- PGP message
-!:mime application/pgp
-0 string -----BEGIN\040PGP\40SIGNATURE- PGP signature
-!:mime application/pgp-signature
-
-#------------------------------------------------------------------------------
-# $File: pkgadd,v 1.6 2009/09/19 16:28:11 christos Exp $
-# pkgadd: file(1) magic for SysV R4 PKG Datastreams
-#
-0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4)
-!:mime application/x-svr4-package
-
-#------------------------------------------------------------------------------
-# $File: plan9,v 1.5 2009/09/19 16:28:11 christos Exp $
-# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables
-# From: "Stefan A. Haubenthal" <polluks at web.de>
-#
-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
-
-#------------------------------------------------------------------------------
-# $File: plus5,v 1.6 2009/09/19 16:28:11 christos Exp $
-# plus5: file(1) magic for Plus Five's UNIX MUMPS
-#
-# XXX - byte order? Paging Hokey....
-#
-0 short 0x259 mumps avl global
->2 byte >0 (V%d)
->6 byte >0 with %d byte name
->7 byte >0 and %d byte data cells
-0 short 0x25a mumps blt global
->2 byte >0 (V%d)
->8 short >0 - %d byte blocks
->15 byte 0x00 - P/D format
->15 byte 0x01 - P/K/D format
->15 byte 0x02 - K/D format
->15 byte >0x02 - Bad Flags
-
-#------------------------------------------------------------------------------
-# $File: printer,v 1.26 2014/04/12 14:51:52 christos Exp $
-# printer: file(1) magic for printer-formatted files
-#
-
-# PostScript, updated by Daniel Quinlan (quinlan at yggdrasil.com)
-0 string %! PostScript document text
-!:mime application/postscript
-!:apple ASPSTEXT
->2 string PS-Adobe- conforming
->>11 string >\0 DSC level %.3s
->>>15 string EPS \b, type %s
->>>15 string Query \b, type %s
->>>15 string ExitServer \b, type %s
->>>15 search/1000 %%LanguageLevel:\
->>>>&0 string >\0 \b, Level %s
-# Some PCs have the annoying habit of adding a ^D as a document separator
-0 string \004%! PostScript document text
-!:mime application/postscript
-!:apple ASPSTEXT
->3 string PS-Adobe- conforming
->>12 string >\0 DSC level %.3s
->>>16 string EPS \b, type %s
->>>16 string Query \b, type %s
->>>16 string ExitServer \b, type %s
->>>16 search/1000 %%LanguageLevel:\
->>>>&0 string >\0 \b, Level %s
-0 string \033%-12345X%!PS PostScript document
-
-# DOS EPS Binary File Header
-# From: Ed Sznyter <ews at Black.Market.NET>
-0 belong 0xC5D0D3C6 DOS EPS Binary File
->4 long >0 Postscript starts at byte %d
->>8 long >0 length %d
->>>12 long >0 Metafile starts at byte %d
->>>>16 long >0 length %d
->>>20 long >0 TIFF starts at byte %d
->>>>24 long >0 length %d
-
-# Summary: Adobe's PostScript Printer Description File
-# Extension: .ppd
-# Reference: http://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8
-# Submitted by: Yves Arrouye <arrouye at marin.fdn.fr>
-#
-0 string *PPD-Adobe:\x20 PPD file
->&0 string x \b, version %s
-
-# HP Printer Job Language
-0 string \033%-12345X at PJL HP Printer Job Language data
-# HP Printer Job Language
-# The header found on Win95 HP plot files is the "Silliest Thing possible"
-# (TM)
-# Every driver puts the language at some random position, with random case
-# (LANGUAGE and Language)
-# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
-# From: Uwe Bonnes <bon at elektron.ikp.physik.th-darmstadt.de>
-#
-0 string \033%-12345X at PJL HP Printer Job Language data
->&0 string >\0 %s
->>&0 string >\0 %s
->>>&0 string >\0 %s
->>>>&0 string >\0 %s
-#>15 string \ ENTER\ LANGUAGE\ =
-#>31 string PostScript PostScript
-
-# From: Stefan Thurner <thurners at nicsys.de>
-0 string \033%-12345X at PJL
->&0 search/10000 %! PJL encapsulated PostScript document text
-
-# Rick Richardson <rickrich at gmail.com>
-
-# For Fuji-Xerox Printers - HBPL stands for Host Based Printer Language
-# For Oki Data Printers - HIPERC
-# For Konica Minolta Printers - LAVAFLOW
-# For Samsung Printers - QPDL
-# For HP Printers - ZJS stands for Zenographics ZJStream
-0 string \033%-12345X at PJL HP Printer Job Language data
->0 search/10000 @PJL\ ENTER\ LANGUAGE=HBPL - HBPL
->0 search/10000 @PJL\ ENTER\ LANGUAGE=HIPERC - Oki Data HIPERC
->0 search/10000 @PJL\ ENTER\ LANGUAGE=LAVAFLOW - Konica Minolta LAVAFLOW
->0 search/10000 @PJL\ ENTER\ LANGUAGE=QPDL - Samsung QPDL
->0 search/10000 @PJL\ ENTER\ LANGUAGE\ =\ QPDL - Samsung QPDL
->0 search/10000 @PJL\ ENTER\ LANGUAGE=ZJS - HP ZJS
-
-
-# HP Printer Control Language, Daniel Quinlan (quinlan at yggdrasil.com)
-0 string \033E\033 HP PCL printer data
->3 string \&l0A - default page size
->3 string \&l1A - US executive page size
->3 string \&l2A - US letter page size
->3 string \&l3A - US legal page size
->3 string \&l26A - A4 page size
->3 string \&l80A - Monarch envelope size
->3 string \&l81A - No. 10 envelope size
->3 string \&l90A - Intl. DL envelope size
->3 string \&l91A - Intl. C5 envelope size
->3 string \&l100A - Intl. B5 envelope size
->3 string \&l-81A - No. 10 envelope size (landscape)
->3 string \&l-90A - Intl. DL envelope size (landscape)
-
-# IMAGEN printer-ready files:
-0 string @document( Imagen printer
-# this only works if "language xxx" is first item in Imagen header.
->10 string language\ impress (imPRESS data)
->10 string language\ daisy (daisywheel text)
->10 string language\ diablo (daisywheel text)
->10 string language\ printer (line printer emulation)
->10 string language\ tektronix (Tektronix 4014 emulation)
-# Add any other languages that your Imagen uses - remember
-# to keep the word `text' if the file is human-readable.
-# [GRR 950115: missing "postscript" or "ultrascript" (whatever it was called)]
-#
-# Now magic for IMAGEN font files...
-0 string Rast RST-format raster font data
->45 string >0 face %s
-# From Jukka Ukkonen
-0 string \033[K\002\0\0\017\033(a\001\0\001\033(g Canon Bubble Jet BJC formatted data
-
-# From <mike at flyn.org>
-# These are the /etc/magic entries to decode data sent to an Epson printer.
-0 string \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P Epson Stylus Color 460 data
-
-
-#------------------------------------------------------------------------------
-# zenographics: file(1) magic for Zenographics ZjStream printer data
-# Rick Richardson <rickrich at gmail.com>
-0 string JZJZ
->0x12 string ZZ Zenographics ZjStream printer data (big-endian)
-0 string ZJZJ
->0x12 string ZZ Zenographics ZjStream printer data (little-endian)
-
-
-#------------------------------------------------------------------------------
-# Oak Technologies printer stream
-# Rick Richardson <rickrich at gmail.com>
-0 string OAK
->0x07 byte 0
->0x0b byte 0 Oak Technologies printer stream
-
-# This would otherwise be recognized as PostScript - nick at debian.org
-0 string %!VMF SunClock's Vector Map Format data
-
-#------------------------------------------------------------------------------
-# HP LaserJet 1000 series downloadable firmware file
-0 string \xbe\xefABCDEFGH HP LaserJet 1000 series downloadable firmware
-
-# From: Paolo <oopla at users.sf.net>
-# Epson ESC/Page, ESC/PageColor
-0 string \x1b\x01 at EJL Epson ESC/Page language printer data
-
-#------------------------------------------------------------------------------
-# $File: project,v 1.4 2009/09/19 16:28:11 christos Exp $
-# project: file(1) magic for Project management
-#
-# Magic strings for ftnchek project files. Alexander Mai
-0 string FTNCHEK_\ P project file for ftnchek
->10 string 1 version 2.7
->10 string 2 version 2.8 to 2.10
->10 string 3 version 2.11 or later
-
-#------------------------------------------------------------------------------
-# $File: psdbms,v 1.6 2009/09/19 16:28:11 christos Exp $
-# psdbms: file(1) magic for psdatabase
-#
-0 belong&0xff00ffff 0x56000000 ps database
->1 string >\0 version %s
->4 string >\0 from kernel %s
-
-#------------------------------------------------------------------------------
-# $File: pulsar,v 1.5 2009/09/19 16:28:12 christos Exp $
-# pulsar: file(1) magic for Pulsar POP3 daemon binary files
-#
-# http://pulsar.sourceforge.net
-# mailto:rok.papez at lugos.si
-#
-
-0 belong 0x1ee7f11e Pulsar POP3 daemon mailbox cache file.
->4 ubelong x Version: %d.
->8 ubelong x \b%d
-
-
-#------------------------------------------------------------------------------
-# $File: pwsafe,v 1.1 2012/10/25 00:12:19 christos Exp $
-# pwsafe: file(1) magic for passwordsafe file
-#
-# Password Safe
-# http://passwordsafe.sourceforge.net/
-# file format specs
-# http://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/formatV3.txt
-# V2 http://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/formatV2.txt
-# V1 http://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/notes.txt
-# V2 and V1 have no easy identifier that I can find
-# .psafe3
-0 string PWS3 Password Safe V3 database
-
-#------------------------------------------------------------------------------
-# $File: pyramid,v 1.7 2009/09/19 16:28:12 christos Exp $
-# pyramid: file(1) magic for Pyramids
-#
-# XXX - byte order?
-#
-0 long 0x50900107 Pyramid 90x family executable
-0 long 0x50900108 Pyramid 90x family pure executable
->16 long >0 not stripped
-0 long 0x5090010b Pyramid 90x family demand paged pure executable
->16 long >0 not stripped
-
-#------------------------------------------------------------------------------
-# $File: python,v 1.25 2014/05/06 16:08:32 christos Exp $
-# python: file(1) magic for python
-#
-# Outlook puts """ too for urgent messages
-# From: David Necas <yeti at physics.muni.cz>
-# often the module starts with a multiline string
-0 string/t """ Python script text executable
-# MAGIC as specified in Python/import.c (1.5 to 2.7a0 and 3.1a0, assuming
-# that Py_UnicodeFlag is off for Python 2)
-# 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n"
-0 belong 0x994e0d0a python 1.5/1.6 byte-compiled
-0 belong 0x87c60d0a python 2.0 byte-compiled
-0 belong 0x2aeb0d0a python 2.1 byte-compiled
-0 belong 0x2ded0d0a python 2.2 byte-compiled
-0 belong 0x3bf20d0a python 2.3 byte-compiled
-0 belong 0x6df20d0a python 2.4 byte-compiled
-0 belong 0xb3f20d0a python 2.5 byte-compiled
-0 belong 0xd1f20d0a python 2.6 byte-compiled
-0 belong 0x03f30d0a python 2.7 byte-compiled
-0 belong 0x3b0c0d0a python 3.0 byte-compiled
-0 belong 0x4f0c0d0a python 3.1 byte-compiled
-0 belong 0x6c0c0d0a python 3.2 byte-compiled
-0 belong 0x9e0c0d0a python 3.3 byte-compiled
-
-0 search/1/w #!\ /usr/bin/python Python script text executable
-!:mime text/x-python
-0 search/1/w #!\ /usr/local/bin/python Python script text executable
-!:mime text/x-python
-0 search/1 #!/usr/bin/env\ python Python script text executable
-!:mime text/x-python
-0 search/1 #!\ /usr/bin/env\ python Python script text executable
-!:mime text/x-python
-
-
-# from module.submodule import func1, func2
-0 regex \^from\\s+(\\w|\\.)+\\s+import.*$ Python script text executable
-!:mime text/x-python
-
-# def __init__ (self, ...):
-0 search/4096 def\ __init__
->&0 search/64 self Python script text executable
-!:mime text/x-python
-
-# comments
-#0 search/4096 '''
-#>&0 regex .*'''$ Python script text executable
-#!:mime text/x-python
-
-#0 search/4096 """
-#>&0 regex .*"""$ Python script text executable
-#!:mime text/x-python
-
-# try:
-# except: or finally:
-# block
-0 search/4096 try:
->&0 regex \^\\s*except.*: Python script text executable
-!:mime text/x-python
->&0 search/4096 finally: Python script text executable
-!:mime text/x-python
-
-# def name(args, args):
-0 regex \^(\ |\\t){0,50}def\ {1,50}[a-zA-Z]{1,100}
->&0 regex \ {0,50}\\(([a-zA-Z]|,|\ ){1,255}\\):$ Python script text executable
-!:mime text/x-python
-
-#------------------------------------------------------------------------------
-# $File: revision,v 1.9 2013/02/06 14:18:52 christos Exp $
-# file(1) magic for revision control files
-# From Hendrik Scholz <hendrik at scholz.net>
-0 string/t /1\ :pserver: cvs password text file
-
-# Conary changesets
-# From: Jonathan Smith <smithj at rpath.com>
-0 belong 0xea3f81bb Conary changeset data
-
-# Type: Git bundles (git-bundle)
-# From: Josh Triplett <josh at freedesktop.org>
-0 string #\ v2\ git\ bundle\n Git bundle
-
-# Type: Git pack
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However,
-# those have a little-endian offset immediately following the magic 'PACK',
-# the first byte of which is never 0, while the first byte of the Git pack
-# version, since it's a tiny number stored in big-endian format, is always 0.
-0 string PACK\0 Git pack
->4 belong >0 \b, version %d
->>8 belong >0 \b, %d objects
-
-# Type: Git pack index
-# From: Adam Buchbinder <adam.buchbinder at gmail.com>
-0 string \377tOc Git pack index
->4 belong =2 \b, version 2
-
-# Type: Git index file
-# From: Frederic Briare <fbriere at fbriere.net>
-0 string DIRC Git index
->4 belong >0 \b, version %d
->>8 belong >0 \b, %d entries
-
-# Type: Mercurial bundles
-# From: Seo Sanghyeon <tinuviel at sparcs.kaist.ac.kr>
-0 string HG10 Mercurial bundle,
->4 string UN uncompressed
->4 string BZ bzip2 compressed
-
-# Type: Subversion (SVN) dumps
-# From: Uwe Zeisberger <zeisberg at informatik.uni-freiburg.de>
-0 string SVN-fs-dump-format-version: Subversion dumpfile
->28 string >\0 (version: %s)
-
-# Type: Bazaar revision bundles and merge requests
-# URL: http://www.bazaar-vcs.org/
-# From: Jelmer Vernooij <jelmer at samba.org>
-0 string #\ Bazaar\ revision\ bundle\ v Bazaar Bundle
-0 string #\ Bazaar\ merge\ directive\ format Bazaar merge directive
-
-#------------------------------------------------------------------------------
-# $File: riff,v 1.27 2014/04/30 21:41:02 christos Exp $
-# riff: file(1) magic for RIFF format
-# See
-#
-# http://www.seanet.com/users/matts/riffmci/riffmci.htm
-#
-
-# audio format tag. Assume limits: max 1024 bit, 128 channels, 1 MHz
-0 name riff-wave
->0 leshort 1 \b, Microsoft PCM
->>14 leshort >0
->>>14 leshort <1024 \b, %d bit
->0 leshort 2 \b, Microsoft ADPCM
->0 leshort 6 \b, ITU G.711 A-law
->0 leshort 7 \b, ITU G.711 mu-law
->0 leshort 8 \b, Microsoft DTS
->0 leshort 17 \b, IMA ADPCM
->0 leshort 20 \b, ITU G.723 ADPCM (Yamaha)
->0 leshort 49 \b, GSM 6.10
->0 leshort 64 \b, ITU G.721 ADPCM
->0 leshort 80 \b, MPEG
->0 leshort 85 \b, MPEG Layer 3
->0 leshort 0x2001 \b, DTS
->2 leshort =1 \b, mono
->2 leshort =2 \b, stereo
->2 leshort >2
->>2 leshort <128 \b, %d channels
->4 lelong >0
->>4 lelong <1000000 %d Hz
-
-# try to find "fmt "
-0 name riff-walk
->0 string fmt\x20
->>4 lelong <0x80
->>>8 use riff-wave
->0 string LIST
->>&(4.l+4) use riff-walk
->0 string DISP
->>&(4.l+4) use riff-walk
->0 string bext
->>&(4.l+4) use riff-walk
->0 string Fake
->>&(4.l+4) use riff-walk
->0 string fact
->>&(4.l+4) use riff-walk
-
-# AVI section extended by Patrik Radman <patrik+file-magic at iki.fi>
-#
-0 string RIFF RIFF (little-endian) data
-# RIFF Palette format
->8 string PAL \b, palette
->>16 leshort x \b, version %d
->>18 leshort x \b, %d entries
-# RIFF Device Independent Bitmap format
->8 string RDIB \b, device-independent bitmap
->>16 string BM
->>>30 leshort 12 \b, OS/2 1.x format
->>>>34 leshort x \b, %d x
->>>>36 leshort x %d
->>>30 leshort 64 \b, OS/2 2.x format
->>>>34 leshort x \b, %d x
->>>>36 leshort x %d
->>>30 leshort 40 \b, Windows 3.x format
->>>>34 lelong x \b, %d x
->>>>38 lelong x %d x
->>>>44 leshort x %d
-# RIFF MIDI format
->8 string RMID \b, MIDI
-# RIFF Multimedia Movie File format
->8 string RMMP \b, multimedia movie
-# RIFF wrapper for MP3
->8 string RMP3 \b, MPEG Layer 3 audio
-# Microsoft WAVE format (*.wav)
->8 string WAVE \b, WAVE audio
-!:mime audio/x-wav
->>12 string >\0
->>>12 use riff-walk
-# Corel Draw Picture
->8 string CDRA \b, Corel Draw Picture
-!:mime image/x-coreldraw
->8 string CDR6 \b, Corel Draw Picture, version 6
-!:mime image/x-coreldraw
->8 string NUNDROOT \b, Steinberg CuBase
-# AVI == Audio Video Interleave
->8 string AVI\040 \b, AVI
-!:mime video/x-msvideo
->>12 string LIST
->>>20 string hdrlavih
->>>>&36 lelong x \b, %u x
->>>>&40 lelong x %u,
->>>>&4 lelong >1000000 <1 fps,
->>>>&4 lelong 1000000 1.00 fps,
->>>>&4 lelong 500000 2.00 fps,
->>>>&4 lelong 333333 3.00 fps,
->>>>&4 lelong 250000 4.00 fps,
->>>>&4 lelong 200000 5.00 fps,
->>>>&4 lelong 166667 6.00 fps,
->>>>&4 lelong 142857 7.00 fps,
->>>>&4 lelong 125000 8.00 fps,
->>>>&4 lelong 111111 9.00 fps,
->>>>&4 lelong 100000 10.00 fps,
-# ]9.9,10.1[
->>>>&4 lelong <101010
->>>>>&-4 lelong >99010
->>>>>>&-4 lelong !100000 ~10 fps,
->>>>&4 lelong 83333 12.00 fps,
-# ]11.9,12.1[
->>>>&4 lelong <84034
->>>>>&-4 lelong >82645
->>>>>>&-4 lelong !83333 ~12 fps,
->>>>&4 lelong 66667 15.00 fps,
-# ]14.9,15.1[
->>>>&4 lelong <67114
->>>>>&-4 lelong >66225
->>>>>>&-4 lelong !66667 ~15 fps,
->>>>&4 lelong 50000 20.00 fps,
->>>>&4 lelong 41708 23.98 fps,
->>>>&4 lelong 41667 24.00 fps,
-# ]23.9,24.1[
->>>>&4 lelong <41841
->>>>>&-4 lelong >41494
->>>>>>&-4 lelong !41708
->>>>>>>&-4 lelong !41667 ~24 fps,
->>>>&4 lelong 40000 25.00 fps,
-# ]24.9,25.1[
->>>>&4 lelong <40161
->>>>>&-4 lelong >39841
->>>>>>&-4 lelong !40000 ~25 fps,
->>>>&4 lelong 33367 29.97 fps,
->>>>&4 lelong 33333 30.00 fps,
-# ]29.9,30.1[
->>>>&4 lelong <33445
->>>>>&-4 lelong >33223
->>>>>>&-4 lelong !33367
->>>>>>>&-4 lelong !33333 ~30 fps,
->>>>&4 lelong <32224 >30 fps,
-##>>>>&4 lelong x (%lu)
-##>>>>&20 lelong x %lu frames,
-# Note: The tests below assume that the AVI has 1 or 2 streams,
-# "vids" optionally followed by "auds".
-# (Should cover 99.9% of all AVIs.)
-# assuming avih length = 56
->>>88 string LIST
->>>>96 string strlstrh
->>>>>108 string vids video:
->>>>>>&0 lelong 0 uncompressed
-# skip past vids strh
->>>>>>(104.l+108) string strf
->>>>>>>(104.l+132) lelong 1 RLE 8bpp
->>>>>>>(104.l+132) string/c cvid Cinepak
->>>>>>>(104.l+132) string/c i263 Intel I.263
->>>>>>>(104.l+132) string/c iv32 Indeo 3.2
->>>>>>>(104.l+132) string/c iv41 Indeo 4.1
->>>>>>>(104.l+132) string/c iv50 Indeo 5.0
->>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2
->>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3
->>>>>>>(104.l+132) string/c fmp4 FFMpeg MPEG-4
->>>>>>>(104.l+132) string/c mjpg Motion JPEG
->>>>>>>(104.l+132) string/c div3 DivX 3
->>>>>>>>112 string/c div3 Low-Motion
->>>>>>>>112 string/c div4 Fast-Motion
->>>>>>>(104.l+132) string/c divx DivX 4
->>>>>>>(104.l+132) string/c dx50 DivX 5
->>>>>>>(104.l+132) string/c xvid XviD
->>>>>>>(104.l+132) string/c h264 H.264
->>>>>>>(104.l+132) string/c wmv3 Windows Media Video 9
->>>>>>>(104.l+132) string/c h264 X.264 or H.264
->>>>>>>(104.l+132) lelong 0
-##>>>>>>>(104.l+132) string x (%.4s)
-# skip past first (video) LIST
->>>>(92.l+96) string LIST
->>>>>(92.l+104) string strlstrh
->>>>>>(92.l+116) string auds \b, audio:
-# auds strh length = 56:
->>>>>>>(92.l+172) string strf
->>>>>>>>(92.l+180) leshort 0x0001 uncompressed PCM
->>>>>>>>(92.l+180) leshort 0x0002 ADPCM
->>>>>>>>(92.l+180) leshort 0x0006 aLaw
->>>>>>>>(92.l+180) leshort 0x0007 uLaw
->>>>>>>>(92.l+180) leshort 0x0050 MPEG-1 Layer 1 or 2
->>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3
->>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3
->>>>>>>>(92.l+180) leshort 0x0161 DivX
-##>>>>>>>>(92.l+180) leshort x (0x%.4x)
->>>>>>>>(92.l+182) leshort 1 (mono,
->>>>>>>>(92.l+182) leshort 2 (stereo,
->>>>>>>>(92.l+182) leshort >2 (%d channels,
->>>>>>>>(92.l+184) lelong x %d Hz)
-# auds strh length = 64:
->>>>>>>(92.l+180) string strf
->>>>>>>>(92.l+188) leshort 0x0001 uncompressed PCM
->>>>>>>>(92.l+188) leshort 0x0002 ADPCM
->>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3
->>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3
->>>>>>>>(92.l+188) leshort 0x0161 DivX
-##>>>>>>>>(92.l+188) leshort x (0x%.4x)
->>>>>>>>(92.l+190) leshort 1 (mono,
->>>>>>>>(92.l+190) leshort 2 (stereo,
->>>>>>>>(92.l+190) leshort >2 (%d channels,
->>>>>>>>(92.l+192) lelong x %d Hz)
-# Animated Cursor format
->8 string ACON \b, animated cursor
-# SoundFont 2 <mpruett at sgi.com>
->8 string sfbk SoundFont/Bank
-# MPEG-1 wrapped in a RIFF, apparently
->8 string CDXA \b, wrapped MPEG-1 (CDXA)
->8 string 4XMV \b, 4X Movie file
-# AMV-type AVI file: http://wiki.multimedia.cx/index.php?title=AMV
->8 string AMV\040 \b, AMV
-
-#
-# XXX - some of the below may only appear in little-endian form.
-#
-# Also "MV93" appears to be for one form of Macromedia Director
-# files, and "GDMF" appears to be another multimedia format.
-#
-0 string RIFX RIFF (big-endian) data
-# RIFF Palette format
->8 string PAL \b, palette
->>16 beshort x \b, version %d
->>18 beshort x \b, %d entries
-# RIFF Device Independent Bitmap format
->8 string RDIB \b, device-independent bitmap
->>16 string BM
->>>30 beshort 12 \b, OS/2 1.x format
->>>>34 beshort x \b, %d x
->>>>36 beshort x %d
->>>30 beshort 64 \b, OS/2 2.x format
->>>>34 beshort x \b, %d x
->>>>36 beshort x %d
->>>30 beshort 40 \b, Windows 3.x format
->>>>34 belong x \b, %d x
->>>>38 belong x %d x
->>>>44 beshort x %d
-# RIFF MIDI format
->8 string RMID \b, MIDI
-# RIFF Multimedia Movie File format
->8 string RMMP \b, multimedia movie
-# Microsoft WAVE format (*.wav)
->8 string WAVE \b, WAVE audio
->>20 leshort 1 \b, Microsoft PCM
->>>34 leshort >0 \b, %d bit
->>22 beshort =1 \b, mono
->>22 beshort =2 \b, stereo
->>22 beshort >2 \b, %d channels
->>24 belong >0 %d Hz
-# Corel Draw Picture
->8 string CDRA \b, Corel Draw Picture
->8 string CDR6 \b, Corel Draw Picture, version 6
-# AVI == Audio Video Interleave
->8 string AVI\040 \b, AVI
-# Animated Cursor format
->8 string ACON \b, animated cursor
-# Notation Interchange File Format (big-endian only)
->8 string NIFF \b, Notation Interchange File Format
-# SoundFont 2 <mpruett at sgi.com>
->8 string sfbk SoundFont/Bank
-
-#------------------------------------------------------------------------------
-# Sony Wave64
-# see http://www.vcs.de/fileadmin/user_upload/MBS/PDF/Whitepaper/Informations_about_Sony_Wave64.pdf
-# 128 bit RIFF-GUID { 66666972-912E-11CF-A5D6-28DB04C10000 } in little-endian
-0 string riff\x2E\x91\xCF\x11\xA5\xD6\x28\xDB\x04\xC1\x00\x00 Sony Wave64 RIFF data
-# 128 bit + total file size (64 bits) so 24 bytes
-# then WAVE-GUID { 65766177-ACF3-11D3-8CD1-00C04F8EDB8A }
->24 string wave\xF3\xAC\xD3\x11\x8C\xD1\x00\xC0\x4F\x8E\xDB\x8A \b, WAVE 64 audio
-!:mime audio/x-w64
-# FMT-GUID { 20746D66-ACF3-11D3-8CD1-00C04F8EDB8A }
->>40 search/256 fmt\x20\xF3\xAC\xD3\x11\x8C\xD1\x00\xC0\x4F\x8E\xDB\x8A \b
->>>&10 leshort =1 \b, mono
->>>&10 leshort =2 \b, stereo
->>>&10 leshort >2 \b, %d channels
->>>&12 lelong >0 %d Hz
-
-#------------------------------------------------------------------------------
-# MBWF/RF64
-# see EBU TECH 3306 http://tech.ebu.ch/docs/tech/tech3306-2009.pdf
-0 string RF64\xff\xff\xff\xffWAVEds64 MBWF/RF64 audio
-!:mime audio/x-wav
->40 search/256 fmt\x20 \b
->>&6 leshort =1 \b, mono
->>&6 leshort =2 \b, stereo
->>&6 leshort >2 \b, %d channels
->>&8 lelong >0 %d Hz
-
-
-#------------------------------------------------------------------------------
-# $File: rinex,v 1.4 2011/05/03 01:44:17 christos Exp $
-# rinex: file(1) magic for RINEX files
-# http://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt
-# ftp://cddis.gsfc.nasa.gov/pub/reports/formats/rinex300.pdf
-# data for testing: ftp://cddis.gsfc.nasa.gov/pub/gps/data
-60 string RINEX
->80 search/256 XXRINEXB RINEX Data, GEO SBAS Broadcast
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/broadcast
->80 search/256 XXRINEXD RINEX Data, Observation (Hatanaka comp)
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/observation
->80 search/256 XXRINEXC RINEX Data, Clock
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/clock
->80 search/256 XXRINEXH RINEX Data, GEO SBAS Navigation
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/navigation
->80 search/256 XXRINEXG RINEX Data, GLONASS Navigation
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/navigation
->80 search/256 XXRINEXL RINEX Data, Galileo Navigation
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/navigation
->80 search/256 XXRINEXM RINEX Data, Meteorological
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/meteorological
->80 search/256 XXRINEXN RINEX Data, Navigation
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/navigation
->80 search/256 XXRINEXO RINEX Data, Observation
->>&32 string x \b, date %15.15s
->>5 string x \b, version %6.6s
-!:mime rinex/observation
-
-#------------------------------------------------------------------------------
-# $File: rpm,v 1.12 2013/01/11 16:45:23 christos Exp $
-#
-# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt at redhat.com)
-#
-0 belong 0xedabeedb RPM
-!:mime application/x-rpm
->4 byte x v%d
->5 byte x \b.%d
->6 beshort 1 src
->6 beshort 0 bin
->>8 beshort 1 i386/x86_64
->>8 beshort 2 Alpha/Sparc64
->>8 beshort 3 Sparc
->>8 beshort 4 MIPS
->>8 beshort 5 PowerPC
->>8 beshort 6 68000
->>8 beshort 7 SGI
->>8 beshort 8 RS6000
->>8 beshort 9 IA64
->>8 beshort 10 Sparc64
->>8 beshort 11 MIPSel
->>8 beshort 12 ARM
->>8 beshort 13 MiNT
->>8 beshort 14 S/390
->>8 beshort 15 S/390x
->>8 beshort 16 PowerPC64
->>8 beshort 17 SuperH
->>8 beshort 18 Xtensa
->>8 beshort 255 noarch
-
-#delta RPM Daniel Novotny (dnovotny at redhat.com)
-0 string drpm Delta RPM
-!:mime application/x-rpm
->12 string x %s
->>8 beshort 11 MIPSel
->>8 beshort 12 ARM
->>8 beshort 13 MiNT
->>8 beshort 14 S/390
->>8 beshort 15 S/390x
->>8 beshort 16 PowerPC64
->>8 beshort 17 SuperH
->>8 beshort 18 Xtensa
->>10 string x %s
-
-#------------------------------------------------------------------------------
-# $File: rtf,v 1.7 2009/09/19 16:28:12 christos Exp $
-# rtf: file(1) magic for Rich Text Format (RTF)
-#
-# Duncan P. Simpson, D.P.Simpson at dcs.warwick.ac.uk
-#
-0 string {\\rtf Rich Text Format data,
-!:mime text/rtf
->5 string 1 version 1,
->>6 string \\ansi ANSI
->>6 string \\mac Apple Macintosh
->>6 string \\pc IBM PC, code page 437
->>6 string \\pca IBM PS/2, code page 850
->>6 default x unknown character set
->5 default x unknown version
-
-#------------------------------------------------------------------------------
-# $File: ruby,v 1.5 2010/07/21 16:47:17 christos Exp $
-# ruby: file(1) magic for Ruby scripting language
-# URL: http://www.ruby-lang.org/
-# From: Reuben Thomas <rrt at sc3d.org>
-
-# Ruby scripts
-0 search/1/w #!\ /usr/bin/ruby Ruby script text executable
-!:mime text/x-ruby
-0 search/1/w #!\ /usr/local/bin/ruby Ruby script text executable
-!:mime text/x-ruby
-0 search/1 #!/usr/bin/env\ ruby Ruby script text executable
-!:mime text/x-ruby
-0 search/1 #!\ /usr/bin/env\ ruby Ruby script text executable
-!:mime text/x-ruby
-
-# What looks like ruby, but does not have a shebang
-# (modules and such)
-# From: Lubomir Rintel <lkundrak at v3.sk>
-0 regex \^[\ \t]*require[\ \t]'[A-Za-z_/]+'
->0 regex include\ [A-Z]|def\ [a-z]|\ do$
->>0 regex \^[\ \t]*end([\ \t]*[;#].*)?$ Ruby script text
-!:mime text/x-ruby
-0 regex \^[\ \t]*(class|module)[\ \t][A-Z]
->0 regex (modul|includ)e\ [A-Z]|def\ [a-z]
->>0 regex \^[\ \t]*end([\ \t]*[;#].*)?$ Ruby module source text
-!:mime text/x-ruby
-
-#------------------------------------------------------------------------------
-# $File: sc,v 1.6 2009/09/19 16:28:12 christos Exp $
-# sc: file(1) magic for "sc" spreadsheet
-#
-38 string Spreadsheet sc spreadsheet file
-!:mime application/x-sc
-
-#------------------------------------------------------------------------------
-# $File: sccs,v 1.6 2009/09/19 16:28:12 christos Exp $
-# sccs: file(1) magic for SCCS archives
-#
-# SCCS archive structure:
-# \001h01207
-# \001s 00276/00000/00000
-# \001d D 1.1 87/09/23 08:09:20 ian 1 0
-# \001c date and time created 87/09/23 08:09:20 by ian
-# \001e
-# \001u
-# \001U
-# ... etc.
-# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
-# *Sigh*. And these both came from various parts of the USG.
-# Maybe we should just switch everybody from SCCS to RCS!
-# Further, you can't just say '\001h0', because the five-digit number
-# is a checksum that could (presumably) have any leading digit,
-# and we don't have regular expression matching yet.
-# Hence the following official kludge:
-8 string \001s\ SCCS archive data
-
-#------------------------------------------------------------------------------
-# $File: scientific,v 1.9 2014/06/03 19:01:34 christos Exp $
-# scientific: file(1) magic for scientific formats
-#
-# From: Joe Krahn <krahn at niehs.nih.gov>
-
-########################################################
-# CCP4 data and plot files:
-0 string MTZ\040 MTZ reflection file
-
-92 string PLOT%%84 Plot84 plotting file
->52 byte 1 , Little-endian
->55 byte 1 , Big-endian
-
-########################################################
-# Electron density MAP/MASK formats
-
-0 string EZD_MAP NEWEZD Electron Density Map
-109 string MAP\040( Old EZD Electron Density Map
-
-0 string/c :-)\040Origin BRIX Electron Density Map
->170 string >0 , Sigma:%.12s
-#>4 string >0 %.178s
-#>4 addr x %.178s
-
-7 string 18\040!NTITLE XPLOR ASCII Electron Density Map
-9 string \040!NTITLE\012\040REMARK CNS ASCII electron density map
-
-208 string MAP\040 CCP4 Electron Density Map
-# Assumes same stamp for float and double (normal case)
->212 byte 17 \b, Big-endian
->212 byte 34 \b, VAX format
->212 byte 68 \b, Little-endian
->212 byte 85 \b, Convex native
-
-############################################################
-# X-Ray Area Detector images
-0 string R-AXIS4\ \ \ R-Axis Area Detector Image:
->796 lelong <20 Little-endian, IP #%d,
->>768 lelong >0 Size=%dx
->>772 lelong >0 \b%d
->796 belong <20 Big-endian, IP #%d,
->>768 belong >0 Size=%dx
->>772 belong >0 \b%d
-
-0 string RAXIS\ \ \ \ \ R-Axis Area Detector Image, Win32:
->796 lelong <20 Little-endian, IP #%d,
->>768 lelong >0 Size=%dx
->>772 lelong >0 \b%d
->796 belong <20 Big-endian, IP #%d,
->>768 belong >0 Size=%dx
->>772 belong >0 \b%d
-
-
-1028 string MMX\000\000\000\000\000\000\000\000\000\000\000\000\000 MAR Area Detector Image,
->1072 ulong >1 Compressed(%d),
->1100 ulong >1 %d headers,
->1104 ulong >0 %d x
->1108 ulong >0 %d,
->1120 ulong >0 %d bits/pixel
-
-# Type: GEDCOM genealogical (family history) data
-# From: Giuseppe Bilotta
-0 search/1/c 0\ HEAD GEDCOM genealogy text
->&0 search 1\ GEDC
->>&0 search 2\ VERS version
->>>&1 string >\0 %s
-# From: Phil Endecott <phil05 at chezphil.org>
-0 string \000\060\000\040\000\110\000\105\000\101\000\104 GEDCOM data
-0 string \060\000\040\000\110\000\105\000\101\000\104\000 GEDCOM data
-0 string \376\377\000\060\000\040\000\110\000\105\000\101\000\104 GEDCOM data
-0 string \377\376\060\000\040\000\110\000\105\000\101\000\104\000 GEDCOM data
-
-# PDB: Protein Data Bank files
-# Adam Buchbinder <adam.buchbinder at gmail.com>
-#
-# http://www.wwpdb.org/documentation/format32/sect2.html
-# http://www.ch.ic.ac.uk/chemime/
-#
-# The PDB file format is fixed-field, 80 columns. From the spec:
-#
-# COLS DATA
-# 1 - 6 "HEADER"
-# 11 - 50 String(40)
-# 51 - 59 Date
-# 63 - 66 IDcode
-#
-# Thus, positions 7-10, 60-62 and 67-80 are spaces. The Date must be in the
-# format DD-MMM-YY, e.g., 01-JAN-70, and the IDcode consists of numbers and
-# uppercase letters. However, examples have been seen without the date string,
-# e.g., the example on the chemime site.
-0 string HEADER\ \ \ \
->&0 regex/1l \^.{40}
->>&0 regex/1l [0-9]{2}-[A-Z]{3}-[0-9]{2}\ {3}
->>>&0 regex/1ls [A-Z0-9]{4}.{14}$
->>>>&0 regex/1l [A-Z0-9]{4} Protein Data Bank data, ID Code %s
-!:mime chemical/x-pdb
->>>>0 regex/1l [0-9]{2}-[A-Z]{3}-[0-9]{2} \b, %s
-
-# Type: GDSII Stream file
-0 belong 0x00060002 GDSII Stream file
->4 byte 0x00
->>5 byte x version %d.0
->4 byte >0x00 version %d
->>5 byte x \b.%d
-
-#------------------------------------------------------------------------------
-# $File: securitycerts,v 1.4 2009/09/19 16:28:12 christos Exp $
-0 search/1 -----BEGIN\ CERTIFICATE------ RFC1421 Security Certificate text
-0 search/1 -----BEGIN\ NEW\ CERTIFICATE RFC1421 Security Certificate Signing Request text
-0 belong 0xedfeedfe Sun 'jks' Java Keystore File data
-# Type: SE Linux policy modules *.pp reference policy
-# for Fedora 5 to 9, RHEL5, and Debian Etch and Lenny.
-# URL: http://doc.coker.com.au/computers/selinux-magic
-# From: Russell Coker <russell at coker.com.au>
-
-0 lelong 0xf97cff8f SE Linux modular policy
->4 lelong x version %d,
->8 lelong x %d sections,
->>(12.l) lelong 0xf97cff8d
->>>(12.l+27) lelong x mod version %d,
->>>(12.l+31) lelong 0 Not MLS,
->>>(12.l+31) lelong 1 MLS,
->>>(12.l+23) lelong 2
->>>>(12.l+47) string >\0 module name %s
->>>(12.l+23) lelong 1 base
-
-1 string policy_module( SE Linux policy module source
-2 string policy_module( SE Linux policy module source
-
-0 string ##\ <summary> SE Linux policy interface source
-
-#0 search gen_context( SE Linux policy file contexts
-
-#0 search gen_sens( SE Linux policy MLS constraints source
-
-#------------------------------------------------------------------------------
-# $File: sendmail,v 1.7 2009/09/19 16:28:12 christos Exp $
-# sendmail: file(1) magic for sendmail config files
-#
-# XXX - byte order?
-#
-0 byte 046 Sendmail frozen configuration
->16 string >\0 - version %s
-0 short 0x271c Sendmail frozen configuration
->16 string >\0 - version %s
-
-#------------------------------------------------------------------------------
-# sendmail: file(1) magic for sendmail m4(1) files
-#
-# From Hendrik Scholz <hendrik at scholz.net>
-# i.e. files in /usr/share/sendmail/cf/
-#
-0 string divert(-1)\n sendmail m4 text file
-
-
-#------------------------------------------------------------------------------
-# $File: sequent,v 1.11 2014/06/02 19:27:54 christos Exp $
-# sequent: file(1) magic for Sequent machines
-#
-# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
-# For Sequent's multiprocessor systems (incomplete).
-0 lelong 0x00ea BALANCE NS32000 .o
->16 lelong >0 not stripped
->124 lelong >0 version %d
-0 lelong 0x10ea BALANCE NS32000 executable (0 @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %d
-0 lelong 0x20ea BALANCE NS32000 executable (invalid @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %d
-0 lelong 0x30ea BALANCE NS32000 standalone executable
->16 lelong >0 not stripped
->124 lelong >0 version %d
-#
-# Symmetry information added by Jason Merrill <jason at jarthur.claremont.edu>.
-# Symmetry magic nums will not be reached if DOS COM comes before them;
-# byte 0xeb is matched before these get a chance.
-0 leshort 0x12eb SYMMETRY i386 .o
->16 lelong >0 not stripped
->124 lelong >0 version %d
-0 leshort 0x22eb SYMMETRY i386 executable (0 @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %d
-0 leshort 0x32eb SYMMETRY i386 executable (invalid @ 0)
->16 lelong >0 not stripped
->124 lelong >0 version %d
-0 leshort 0x42eb SYMMETRY i386 standalone executable
->16 lelong >0 not stripped
->124 lelong >0 version %d
-# http://en.wikipedia.org/wiki/Sequent_Computer_Systems
-# below test line conflicts with MS-DOS 2.11 floppies and Acronis loader
-#0 leshort 0x42eb SYMMETRY i386 standalone executable
-0 leshort 0x42eb
-# skip unlike negative version
->124 lelong >-1
-# assuming version 28867614 is very low probable
->>124 lelong !28867614 SYMMETRY i386 standalone executable
->>>16 lelong >0 not stripped
->>>124 lelong >0 version %d
-#------------------------------------------------------------------------------
-# $File: sereal,v 1.1 2014/05/14 23:04:59 christos Exp $
-# sereal: file(1) magic the Sereal binary serialization format
-#
-# From: Ævar Arnfjörð Bjarmason <avarab at gmail.com>
-#
-# See the specification of the format at
-# https://github.com/Sereal/Sereal/blob/master/sereal_spec.pod#document-header-format
-#
-# I'd have liked to do the byte&0xF0 matching against 0, 1, 2 ... by
-# doing (byte&0xF0)>>4 here, but unfortunately that's not
-# supported. So when we print out a message about an unknown format
-# we'll print out e.g. 0x30 instead of the more human-readable
-# 0x30>>4.
-#
-# See https://github.com/Sereal/Sereal/commit/35372ae01d in the
-# Sereal.git repository for test Sereal data.
-0 string \=srl Sereal data
-!:mime application/sereal
->4 byte&0x0F x (version %d,
->4 byte&0xF0 0x00 uncompressed)
->4 byte&0xF0 0x10 compressed with non-incremental Snappy)
->4 byte&0xF0 0x20 compressed with incremental Snappy)
->4 byte&0xF0 >0x20 unknown subformat, flag: %d>>4)
-
-#------------------------------------------------------------------------------
-# $File: sgi,v 1.21 2014/04/30 21:41:02 christos Exp $
-# sgi: file(1) magic for Silicon Graphics operating systems and applications
-#
-# Executable images are handled either in aout (for old-style a.out
-# files for 68K; they are indistinguishable from other big-endian 32-bit
-# a.out files) or in mips (for MIPS ECOFF and Ucode files)
-#
-
-# kbd file definitions
-0 string kbd!map kbd map file
->8 byte >0 Ver %d:
->10 short >0 with %d table(s)
-
-0 beshort 0x8765 disk quotas file
-
-0 beshort 0x0506 IRIS Showcase file
->2 byte 0x49 -
->3 byte x - version %d
-0 beshort 0x0226 IRIS Showcase template
->2 byte 0x63 -
->3 byte x - version %d
-0 belong 0x5343464d IRIS Showcase file
->4 byte x - version %d
-0 belong 0x5443464d IRIS Showcase template
->4 byte x - version %d
-0 belong 0xdeadbabe IRIX Parallel Arena
->8 belong >0 - version %d
-
-# core files
-#
-# 32bit core file
-0 belong 0xdeadadb0 IRIX core dump
->4 belong 1 of
->16 string >\0 '%s'
-# 64bit core file
-0 belong 0xdeadad40 IRIX 64-bit core dump
->4 belong 1 of
->16 string >\0 '%s'
-# N32bit core file
-0 belong 0xbabec0bb IRIX N32 core dump
->4 belong 1 of
->16 string >\0 '%s'
-# New style crash dump file
-0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
->36 string >\0 '%s'
-
-# Trusted IRIX info
-0 string SGIAUDIT SGI Audit file
->8 byte x - version %d
->9 byte x \b.%d
-#
-0 string WNGZWZSC Wingz compiled script
-0 string WNGZWZSS Wingz spreadsheet
-0 string WNGZWZHP Wingz help file
-#
-0 string #Inventor V IRIS Inventor 1.0 file
-0 string #Inventor V2 Open Inventor 2.0 file
-# GLF is OpenGL stream encoding
-0 string glfHeadMagic(); GLF_TEXT
-4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
-!:strength -30
-4 belong 0x0000007d GLF_BINARY_MSB_FIRST
-!:strength -30
-# GLS is OpenGL stream encoding; GLS is the successor of GLF
-0 string glsBeginGLS( GLS_TEXT
-4 belong 0x10000000 GLS_BINARY_LSB_FIRST
-!:strength -30
-4 belong 0x00000010 GLS_BINARY_MSB_FIRST
-!:strength -30
-
-#
-#
-# Performance Co-Pilot file types
-0 string PmNs PCP compiled namespace (V.0)
-0 string PmN PCP compiled namespace
->3 string >\0 (V.%1.1s)
-#3 lelong 0x84500526 PCP archive
-3 belong 0x84500526 PCP archive
->7 byte x (V.%d)
-#>20 lelong -2 temporal index
-#>20 lelong -1 metadata
-#>20 lelong 0 log volume #0
-#>20 lelong >0 log volume #%d
->20 belong -2 temporal index
->20 belong -1 metadata
->20 belong 0 log volume #0
->20 belong >0 log volume #%d
->24 string >\0 host: %s
-0 string PCPFolio PCP
->9 string Version: Archive Folio
->18 string >\0 (V.%s)
-0 string #pmchart PCP pmchart view
->9 string Version
->17 string >\0 (V%-3.3s)
-0 string #kmchart PCP kmchart view
->9 string Version
->17 string >\0 (V.%s)
-0 string pmview PCP pmview config
->7 string Version
->15 string >\0 (V%-3.3s)
-0 string #pmlogger PCP pmlogger config
->10 string Version
->18 string >\0 (V%1.1s)
-0 string #pmdahotproc PCP pmdahotproc config
->13 string Version
->21 string >\0 (V%-3.3s)
-0 string PcPh PCP Help
->4 string 1 Index
->4 string 2 Text
->5 string >\0 (V.%1.1s)
-0 string #pmieconf-rules PCP pmieconf rules
->16 string >\0 (V.%1.1s)
-3 string pmieconf-pmie PCP pmie config
->17 string >\0 (V.%1.1s)
-
-# SpeedShop data files
-0 lelong 0x13130303 SpeedShop data file
-
-# mdbm files
-0 lelong 0x01023962 mdbm file, version 0 (obsolete)
-0 string mdbm mdbm file,
->5 byte x version %d,
->6 byte x 2^%d pages,
->7 byte x pagesize 2^%d,
->17 byte x hash %d,
->11 byte x dataformat %d
-
-# Alias Maya files
-0 string/t //Maya\040ASCII Alias Maya Ascii File,
->13 string >\0 version %s
-8 string MAYAFOR4 Alias Maya Binary File,
->32 string >\0 version %s scene
-8 string MayaFOR4 Alias Maya Binary File,
->32 string >\0 version %s scene
-8 string CIMG Alias Maya Image File
-8 string DEEP Alias Maya Image File
-#------------------------------------------------------------------------------
-# $File: sgml,v 1.30 2013/12/21 14:27:24 christos Exp $
-# Type: SVG Vectorial Graphics
-# From: Noel Torres <tecnico at ejerciciosresueltos.com>
-0 string \<?xml\ version="
->15 string >\0
->>19 search/4096 \<svg SVG Scalable Vector Graphics image
-!:mime image/svg+xml
->>19 search/4096 \<gnc-v2 GnuCash file
-!:mime application/x-gnucash
-
-# Sitemap file
-0 string/t \<?xml\ version="
->15 string >\0
->>19 search/4096 \<urlset XML Sitemap document text
-!:mime application/xml-sitemap
-
-# OpenStreetMap XML (.osm)
-# http://wiki.openstreetmap.org/wiki/OSM_XML
-# From: Markus Heidelberg <markus.heidelberg at web.de>
-0 string \<?xml\ version="
->15 string >\0
->>19 search/4096 \<osm OpenStreetMap XML data
-
-# xhtml
-0 string/t \<?xml\ version="
->15 string >\0
->>19 search/4096/cWbt \<!doctype\ html XHTML document text
-!:mime text/html
-0 string/t \<?xml\ version='
->15 string >\0
->>19 search/4096/cWbt \<!doctype\ html XHTML document text
-!:mime text/html
-0 string/t \<?xml\ version="
->15 string >\0
->>19 search/4096/cWbt \<html broken XHTML document text
-!:mime text/html
-
-#------------------------------------------------------------------------------
-# sgml: file(1) magic for Standard Generalized Markup Language
-# HyperText Markup Language (HTML) is an SGML document type,
-# from Daniel Quinlan (quinlan at yggdrasil.com)
-# adapted to string extenstions by Anthon van der Neut <anthon at mnt.org)
-0 search/4096/cWt \<!doctype\ html HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<head HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<title HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<html HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<script HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<style HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<table HTML document text
-!:mime text/html
-!:strength + 5
-0 search/4096/cwt \<a\ href= HTML document text
-!:mime text/html
-!:strength + 5
-
-# Extensible markup language (XML), a subset of SGML
-# from Marc Prud'hommeaux (marc at apocalypse.org)
-0 search/1/cwt \<?xml XML document text
-!:mime application/xml
-!:strength + 5
-0 string/t \<?xml\ version\ " XML
-!:mime application/xml
-!:strength + 5
-0 string/t \<?xml\ version=" XML
-!:mime application/xml
-!:strength + 5
->15 string/t >\0 %.3s document text
->>23 search/1 \<xsl:stylesheet (XSL stylesheet)
->>24 search/1 \<xsl:stylesheet (XSL stylesheet)
-0 string \<?xml\ version=' XML
-!:mime application/xml
-!:strength + 5
->15 string/t >\0 %.3s document text
->>23 search/1 \<xsl:stylesheet (XSL stylesheet)
->>24 search/1 \<xsl:stylesheet (XSL stylesheet)
-0 search/1/wbt \<?xml XML document text
-!:mime application/xml
-!:strength - 10
-0 search/1/wt \<?XML broken XML document text
-!:mime application/xml
-!:strength - 10
-
-
-# SGML, mostly from rph at sq
-0 search/4096/cwt \<!doctype exported SGML document text
-0 search/4096/cwt \<!subdoc exported SGML subdocument text
-0 search/4096/cwt \<!-- exported SGML document text
-!:strength - 10
-
-# Web browser cookie files
-# (Mozilla, Galeon, Netscape 4, Konqueror..)
-# Ulf Harnhammar <ulfh at update.uu.se>
-0 search/1 #\ HTTP\ Cookie\ File Web browser cookie text
-0 search/1 #\ Netscape\ HTTP\ Cookie\ File Netscape cookie text
-0 search/1 #\ KDE\ Cookie\ File Konqueror cookie text
-
-#------------------------------------------------------------------------
-# $File: sharc,v 1.7 2014/04/30 21:41:02 christos Exp $
-# file(1) magic for sharc files
-#
-# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
-# FutureGroove Music (dsp at futuregroove.de)
-
-#------------------------------------------------------------------------
-#0 string Draw RiscOS Drawfile
-#0 string PACK RiscOS PackdDir archive
-
-#------------------------------------------------------------------------
-# SHARC DSP stuff (based on the FGM SHARC DSP SDK)
-
-#0 string =! Assembler source
-#0 string Analog ADi asm listing file
-0 string .SYSTEM SHARC architecture file
-0 string .system SHARC architecture file
-
-0 leshort 0x521C SHARC COFF binary
->2 leshort >1 , %d sections
->>12 lelong >0 , not stripped
-
-#------------------------------------------------------------------------------
-# $File: sinclair,v 1.5 2009/09/19 16:28:12 christos Exp $
-# sinclair: file(1) sinclair QL
-
-# additions to /etc/magic by Thomas M. Ott (ThMO)
-
-# Sinclair QL floppy disk formats (ThMO)
-0 string =QL5 QL disk dump data,
->3 string =A 720 KB,
->3 string =B 1.44 MB,
->3 string =C 3.2 MB,
->4 string >\0 label:%.10s
-
-# Sinclair QL OS dump (ThMO)
-# (NOTE: if `file' would be able to use indirect references in a endian format
-# differing from the natural host format, this could be written more
-# reliably and faster...)
-#
-# we *can't* lookup QL OS code dumps, because `file' is UNABLE to read more
-# than the first 8K of a file... #-(
-#
-#0 belong =0x30000
-#>49124 belong <47104
-#>>49128 belong <47104
-#>>>49132 belong <47104
-#>>>>49136 belong <47104 QL OS dump data,
-#>>>>>49148 string >\0 type %.3s,
-#>>>>>49142 string >\0 version %.4s
-
-# Sinclair QL firmware executables (ThMO)
-0 string NqNqNq`\004 QL firmware executable (BCPL)
-
-# Sinclair QL libraries (was ThMO)
-0 beshort 0xFB01 QDOS object
->2 pstring x '%s'
-
-# Sinclair QL executables (was ThMO)
-4 belong 0x4AFB QDOS executable
->9 pstring x '%s'
-
-# Sinclair QL ROM (ThMO)
-0 belong =0x4AFB0001 QL plugin-ROM data,
->9 pstring =\0 un-named
->9 pstring >\0 named: %s
-# Type: SiSU Markup Language
-# URL: http://www.sisudoc.org/
-# From: Ralph Amissah <ralph.amissah at gmail.com>
-
-0 regex \^%?[\ \t]*SiSU[\ \t]+insert SiSU text insert
->5 regex [0-9.]+ %s
-
-0 regex \^%[\ \t]+SiSU[\ \t]+master SiSU text master
->5 regex [0-9.]+ %s
-
-0 regex \^%?[\ \t]*SiSU[\ \t]+text SiSU text
->5 regex [0-9.]+ %s
-
-0 regex \^%?[\ \t]*SiSU[\ \t][0-9.]+ SiSU text
->5 regex [0-9.]+ %s
-
-0 regex \^%*[\ \t]*sisu-[0-9.]+ SiSU text
->5 regex [0-9.]+ %s
-
-#------------------------------------------------------------------------------
-# $File: sketch,v 1.4 2009/09/19 16:28:12 christos Exp $
-# Sketch Drawings: http://sketch.sourceforge.net/
-# From: Edwin Mons <e at ik.nu>
-0 search/1 ##Sketch Sketch document text
-
-#-----------------------------------------------
-# $File: smalltalk,v 1.5 2009/09/19 16:28:12 christos Exp $
-# GNU Smalltalk image, starting at version 1.6.2
-# From: catull_us at yahoo.com
-#
-0 string GSTIm\0\0 GNU SmallTalk
-# little-endian
->7 byte&1 =0 LE image version
->>10 byte x %d.
->>9 byte x \b%d.
->>8 byte x \b%d
-#>>12 lelong x , data: %ld
-#>>16 lelong x , table: %ld
-#>>20 lelong x , memory: %ld
-# big-endian
->7 byte&1 =1 BE image version
->>8 byte x %d.
->>9 byte x \b%d.
->>10 byte x \b%d
-#>>12 belong x , data: %ld
-#>>16 belong x , table: %ld
-#>>20 belong x , memory: %ld
-
-
-
-#------------------------------------------------------------------------------
-# $File: smile,v 1.1 2011/08/17 17:37:18 christos Exp $
-# smile: file(1) magic for Smile serialization
-#
-# The Smile serialization format uses a 4-byte header:
-#
-# Constant byte #0: 0x3A (ASCII ':')
-# Constant byte #1: 0x29 (ASCII ')')
-# Constant byte #2: 0x0A (ASCII linefeed, '\n')
-# Variable byte #3, consisting of bits:
-# Bits 4-7 (4 MSB): 4-bit version number
-# Bits 3: Reserved
-# Bit 2 (mask 0x04): Whether raw binary (unescaped 8-bit) values may be present in content
-# Bit 1 (mask 0x02): Whether shared String value checking was enabled during encoding, default false
-# Bit 0 (mask 0x01): Whether shared property name checking was enabled during encoding, default true
-#
-# Reference: http://wiki.fasterxml.com/SmileFormatSpec
-# Created by: Pierre-Alexandre Meyer <pierre at mouraf.org>
-
-# Detection
-0 string :)\n Smile binary data
-
-# Versioning
->3 byte&0xF0 x version %d:
-
-# Properties
->3 byte&0x04 0x04 binary raw,
->3 byte&0x04 0x00 binary encoded,
->3 byte&0x02 0x02 shared String values enabled,
->3 byte&0x02 0x00 shared String values disabled,
->3 byte&0x01 0x01 shared field names enabled
->3 byte&0x01 0x00 shared field names disabled
-
-
-#------------------------------------------------------------------------------
-# $File: sniffer,v 1.19 2013/01/06 01:11:04 christos Exp $
-# sniffer: file(1) magic for packet capture files
-#
-# From: guy at alum.mit.edu (Guy Harris)
-#
-
-#
-# Microsoft Network Monitor 1.x capture files.
-#
-0 string RTSS NetMon capture file
->5 byte x - version %d
->4 byte x \b.%d
->6 leshort 0 (Unknown)
->6 leshort 1 (Ethernet)
->6 leshort 2 (Token Ring)
->6 leshort 3 (FDDI)
->6 leshort 4 (ATM)
->6 leshort >4 (type %d)
-
-#
-# Microsoft Network Monitor 2.x capture files.
-#
-0 string GMBU NetMon capture file
->5 byte x - version %d
->4 byte x \b.%d
->6 leshort 0 (Unknown)
->6 leshort 1 (Ethernet)
->6 leshort 2 (Token Ring)
->6 leshort 3 (FDDI)
->6 leshort 4 (ATM)
->6 leshort 5 (IP-over-IEEE 1394)
->6 leshort 6 (802.11)
->6 leshort 7 (Raw IP)
->6 leshort 8 (Raw IP)
->6 leshort 9 (Raw IP)
->6 leshort >9 (type %d)
-
-#
-# 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)
->23 leshort x - version %d
->25 leshort x \b.%d
->32 byte 0 (Token Ring)
->32 byte 1 (Ethernet)
->32 byte 2 (ARCNET)
->32 byte 3 (StarLAN)
->32 byte 4 (PC Network broadband)
->32 byte 5 (LocalTalk)
->32 byte 6 (Znet)
->32 byte 7 (Internetwork Analyzer)
->32 byte 9 (FDDI)
->32 byte 10 (ATM)
-
-#
-# Cinco Networks NetXRay capture files.
-# Sorry, make that "Network General Sniffer Basic capture files."
-# 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."
-# Sorry, make that "NetScout Sniffer capture files."
-#
-0 string XCP\0 NetXRay capture file
->4 string >\0 - version %s
->44 leshort 0 (Ethernet)
->44 leshort 1 (Token Ring)
->44 leshort 2 (FDDI)
->44 leshort 3 (WAN)
->44 leshort 8 (ATM)
->44 leshort 9 (802.11)
-
-#
-# "libpcap" capture files.
-# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
-# the main program that uses that format, but there are other programs
-# that use "libpcap", or that use the same capture file format.)
-#
-0 name pcap-be
->4 beshort x - version %d
->6 beshort x \b.%d
->20 belong 0 (No link-layer encapsulation
->20 belong 1 (Ethernet
->20 belong 2 (3Mb Ethernet
->20 belong 3 (AX.25
->20 belong 4 (ProNET
->20 belong 5 (CHAOS
->20 belong 6 (Token Ring
->20 belong 7 (BSD ARCNET
->20 belong 8 (SLIP
->20 belong 9 (PPP
->20 belong 10 (FDDI
->20 belong 11 (RFC 1483 ATM
->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 103 (BSD/OS PPP
->20 belong 104 (BSD/OS Cisco HDLC
->20 belong 105 (802.11
->20 belong 106 (Linux Classical IP over ATM
->20 belong 107 (Frame Relay
->20 belong 108 (OpenBSD loopback
->20 belong 109 (OpenBSD IPsec encrypted
->20 belong 112 (Cisco HDLC
->20 belong 113 (Linux "cooked"
->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 139 (MTP2 with pseudo-header
->20 belong 140 (MTP2
->20 belong 141 (MTP3
->20 belong 142 (SCCP
->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
->20 belong 165 (BACnet MS/TP
->20 belong 166 (PPPD
->20 belong 169 (GPRS LLC
->20 belong 177 (Linux LAPD
->20 belong 187 (Bluetooth HCI H4
->20 belong 189 (Linux USB
->20 belong 192 (PPI
->20 belong 195 (802.15.4
->20 belong 196 (SITA
->20 belong 197 (Endace ERF
->20 belong 201 (Bluetooth HCI H4 with pseudo-header
->20 belong 202 (AX.25 with KISS header
->20 belong 203 (LAPD
->20 belong 204 (PPP with direction pseudo-header
->20 belong 205 (Cisco HDLC with direction pseudo-header
->20 belong 206 (Frame Relay with direction pseudo-header
->20 belong 209 (Linux IPMB
->20 belong 215 (802.15.4 with non-ASK PHY header
->20 belong 220 (Memory-mapped Linux USB
->20 belong 224 (Fibre Channel FC-2
->20 belong 225 (Fibre Channel FC-2 with frame delimiters
->20 belong 226 (Solaris IPNET
->20 belong 227 (SocketCAN
->20 belong 228 (Raw IPv4
->20 belong 229 (Raw IPv6
->20 belong 230 (802.15.4 without FCS
->20 belong 231 (D-Bus messages
->20 belong 235 (DVB-CI
->20 belong 236 (MUX27010
->20 belong 237 (STANAG 5066 D_PDUs
->20 belong 239 (Linux netlink NFLOG messages
->20 belong 240 (Hilscher netAnalyzer
->20 belong 241 (Hilscher netAnalyzer with delimiters
->20 belong 242 (IP-over-Infiniband
->20 belong 243 (MPEG-2 Transport Stream packets
->20 belong 244 (ng4t ng40
->20 belong 245 (NFC LLCP
->20 belong 247 (Infiniband
->20 belong 248 (SCTP
->16 belong x \b, capture length %d)
-
-0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian)
-!:mime application/vnd.tcpdump.pcap
->0 use pcap-be
-0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian)
-!:mime application/vnd.tcpdump.pcap
->0 use \^pcap-be
-
-#
-# "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
-# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
-# the main program that uses that format, but there are other programs
-# that use "libpcap", or that use the same capture file format.)
-#
-0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian)
->0 use pcap-be
-0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian)
->0 use \^pcap-be
-
-#
-# "pcap-ng" capture files.
-# http://www.winpcap.org/ntar/draft/PCAP-DumpFileFormat.html
-# Pcap-ng files can contain multiple sections. Printing the endianness,
-# snaplen, or other information from the first SHB may be misleading.
-#
-0 ubelong 0x0a0d0d0a
->8 ubelong 0x1a2b3c4d pcap-ng capture file
->>12 beshort x - version %d
->>14 beshort x \b.%d
-0 ulelong 0x0a0d0d0a
->8 ulelong 0x1a2b3c4d pcap-ng capture file
->>12 leshort x - version %d
->>14 leshort x \b.%d
-
-#
-# AIX "iptrace" capture files.
-#
-0 string iptrace\ 1.0 "iptrace" capture file
-0 string iptrace\ 2.0 "iptrace" capture file
-
-#
-# Novell LANalyzer capture files.
-#
-0 leshort 0x1001 LANalyzer capture file
-0 leshort 0x1007 LANalyzer capture file
-
-#
-# HP-UX "nettl" capture files.
-#
-0 string \x54\x52\x00\x64\x00 "nettl" capture file
-
-#
-# RADCOM WAN/LAN Analyzer capture files.
-#
-0 string \x42\xd2\x00\x34\x12\x66\x22\x88 RADCOM WAN/LAN Analyzer capture file
-
-#
-# NetStumbler log files. Not really packets, per se, but about as
-# close as you can get. These are log files from NetStumbler, a
-# Windows program, that scans for 802.11b networks.
-#
-0 string NetS NetStumbler log file
->8 lelong x \b, %d stations found
-
-#
-# *Peek tagged capture files.
-#
-0 string \177ver EtherPeek/AiroPeek/OmniPeek capture file
-
-#
-# Visual Networks traffic capture files.
-#
-0 string \x05VNF Visual Networks traffic capture file
-
-#
-# Network Instruments Observer capture files.
-#
-0 string ObserverPktBuffe Network Instruments Observer capture file
-
-#
-# Files from Accellent Group's 5View products.
-#
-0 string \xaa\xaa\xaa\xaa 5View capture file
-
-#------------------------------------------------------------------------------
-# $File: softquad,v 1.13 2009/09/19 16:28:12 christos Exp $
-# softquad: file(1) magic for SoftQuad Publishing Software
-#
-# Author/Editor and RulesBuilder
-#
-# XXX - byte order?
-#
-0 string \<!SQ\ DTD> Compiled SGML rules file
->9 string >\0 Type %s
-0 string \<!SQ\ A/E> A/E SGML Document binary
->9 string >\0 Type %s
-0 string \<!SQ\ STS> A/E SGML binary styles file
->9 string >\0 Type %s
-0 short 0xc0de Compiled PSI (v1) data
-0 short 0xc0da Compiled PSI (v2) data
->3 string >\0 (%s)
-# Binary sqtroff font/desc files...
-0 short 0125252 SoftQuad DESC or font file binary
->2 short >0 - version %d
-# Bitmaps...
-0 search/1 SQ\ BITMAP1 SoftQuad Raster Format text
-#0 string SQ\ BITMAP2 SoftQuad Raster Format data
-# sqtroff intermediate language (replacement for ditroff int. lang.)
-0 string X\ SoftQuad troff Context intermediate
->2 string 495 for AT&T 495 laser printer
->2 string hp for Hewlett-Packard LaserJet
->2 string impr for IMAGEN imPRESS
->2 string ps for PostScript
-
-# From: Michael Piefel <piefel at debian.org>
-# sqtroff intermediate language (replacement for ditroff int. lang.)
-0 string X\ 495 SoftQuad troff Context intermediate for AT&T 495 laser printer
-0 string X\ hp SoftQuad troff Context intermediate for HP LaserJet
-0 string X\ impr SoftQuad troff Context intermediate for IMAGEN imPRESS
-0 string X\ ps SoftQuad troff Context intermediate for PostScript
-
-#------------------------------------------------------------------------------
-# $File: spec,v 1.4 2009/09/19 16:28:12 christos Exp $
-# spec: file(1) magic for SPEC raw results (*.raw, *.rsf)
-#
-# Cloyce D. Spradling <cloyce at headgear.org>
-
-0 string spec SPEC
->4 string .cpu CPU
->>8 string <: \b%.4s
->>12 string . raw result text
-
-17 string version=SPECjbb SPECjbb
->32 string <: \b%.4s
->>37 string <: v%.4s raw result text
-
-0 string BEGIN\040SPECWEB SPECweb
->13 string <: \b%.2s
->>15 string _SSL \b_SSL
->>>20 string <: v%.4s raw result text
->>16 string <: v%.4s raw result text
-
-#------------------------------------------------------------------------------
-# $File: spectrum,v 1.7 2010/09/20 18:55:20 rrt Exp $
-# spectrum: file(1) magic for Spectrum emulator files.
-#
-# John Elliott <jce at seasip.demon.co.uk>
-
-#
-# Spectrum +3DOS header
-#
-0 string PLUS3DOS\032 Spectrum +3 data
->15 byte 0 - BASIC program
->15 byte 1 - number array
->15 byte 2 - character array
->15 byte 3 - memory block
->>16 belong 0x001B0040 (screen)
->15 byte 4 - Tasword document
->15 string TAPEFILE - ZXT tapefile
-#
-# Tape file. This assumes the .TAP starts with a Spectrum-format header,
-# which nearly all will.
-#
-# Update: Sanity-check string contents to be printable.
-# -Adam Buchbinder <adam.buchbinder at gmail.com>
-#
-0 string \023\000\000
->4 string >\0
->>4 string <\177 Spectrum .TAP data "%-10.10s"
->>>3 byte 0 - BASIC program
->>>3 byte 1 - number array
->>>3 byte 2 - character array
->>>3 byte 3 - memory block
->>>>14 belong 0x001B0040 (screen)
-
-# The following three blocks are from pak21-spectrum at srcf.ucam.org
-# TZX tape images
-0 string ZXTape!\x1a Spectrum .TZX data
->8 byte x version %d
->9 byte x \b.%d
-
-# RZX input recording files
-0 string RZX! Spectrum .RZX data
->4 byte x version %d
->5 byte x \b.%d
-
-# Floppy disk images
-0 string MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data
-0 string MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data
-0 string EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data
-0 string SINCLAIR Spectrum .SCL Betadisk image
-
-# Hard disk images
-0 string RS-IDE\x1a Spectrum .HDF hard disk image
->7 byte x \b, version 0x%02x
-
-#------------------------------------------------------------------------------
-# $File: sql,v 1.15 2014/04/30 21:41:02 christos Exp $
-# sql: file(1) magic for SQL files
-#
-# From: "Marty Leisner" <mleisner at eng.mc.xerox.com>
-# Recognize some MySQL files.
-# Elan Ruusamae <glen at delfi.ee>, added MariaDB signatures
-# from https://bazaar.launchpad.net/~maria-captains/maria/5.5/view/head:/support-files/magic
-#
-0 beshort 0xfe01 MySQL table definition file
->2 byte x Version %d
-0 belong&0xffffff00 0xfefe0700 MySQL MyISAM index file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0800 MySQL MyISAM compressed data file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0900 MySQL Maria index file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0A00 MySQL Maria compressed data file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0500 MySQL ISAM index file
->3 byte x Version %d
-0 belong&0xffffff00 0xfefe0600 MySQL ISAM compressed data file
->3 byte x Version %d
-0 string \376bin MySQL replication log
-0 belong&0xffffff00 0xfefe0b00
->4 string MARIALOG MySQL Maria transaction log file
->>3 byte x Version %d
-0 belong&0xffffff00 0xfefe0c00
->4 string MACF MySQL Maria control file
->>3 byte x Version %d
-
-#------------------------------------------------------------------------------
-# iRiver H Series database file
-# From Ken Guest <ken at linux.ie>
-# As observed from iRivNavi.iDB and unencoded firmware
-#
-0 string iRivDB iRiver Database file
->11 string >\0 Version %s
->39 string iHP-100 [H Series]
-
-#------------------------------------------------------------------------------
-# SQLite database files
-# Ken Guest <ken at linux.ie>, Ty Sarna, Zack Weinberg
-#
-# Version 1 used GDBM internally; its files cannot be distinguished
-# from other GDBM files.
-#
-# Version 2 used this format:
-0 string **\ This\ file\ contains\ an\ SQLite SQLite 2.x database
-
-# Version 3 of SQLite allows applications to embed their own "user version"
-# number in the database at offset 60. Later, SQLite added an "application id"
-# at offset 68 that is preferred over "user version" for indicating the
-# associated application.
-#
-0 string SQLite\ format\ 3
->60 belong =0x5f4d544e Monotone source repository - SQLite3 database
->68 belong =0x0f055112 Fossil checkout - SQLite3 database
->68 belong =0x0f055113 Fossil global configuration - SQLite3 database
->68 belong =0x0f055111 Fossil repository - SQLite3 database
->68 belong =0x42654462 Bentley Systems BeSQLite Database - SQLite3 database
->68 belong =0x42654c6e Bentley Systems Localization File - SQLite3 database
->68 belong =0x47504b47 OGC GeoPackage file - SQLite3 database
->68 default x SQLite 3.x database
->>68 belong !0 \b, application id %u
->>60 belong !0 \b, user version %d
-
-# SQLite Write-Ahead Log from SQLite version >= 3.7.0
-# http://www.sqlite.org/fileformat.html#walformat
-0 belong&0xfffffffe 0x377f0682 SQLite Write-Ahead Log,
->4 belong x version %d
-
-# SQLite Rollback Journal
-# http://www.sqlite.org/fileformat.html#rollbackjournal
-0 string \xd9\xd5\x05\xf9\x20\xa1\x63\xd7 SQLite Rollback Journal
-
-# Panasonic channel list database svl.bin or svl.db added by Joerg Jenderek
-# http://www.ullrich.es/job/service-menue/panasonic/panasonic-sendersortierung-sat-am-pc/
-# pceditor_V2003.jar
-0 string PSDB\0 Panasonic channel list database
->126 string SQLite\ format\ 3
->>&-15 indirect x \b; contains
-# Type: OpenSSH key files
-# From: Nicolas Collignon <tsointsoin at gmail.com>
-
-0 string SSH\ PRIVATE\ KEY OpenSSH RSA1 private key,
->28 string >\0 version %s
-
-0 string ssh-dss\ OpenSSH DSA public key
-0 string ssh-rsa\ OpenSSH RSA public key
-0 string ecdsa-sha2-nistp256 OpenSSH ECDSA public key
-0 string ecdsa-sha2-nistp384 OpenSSH ECDSA public key
-0 string ecdsa-sha2-nistp521 OpenSSH ECDSA public key
-# Type: OpenSSL certificates/key files
-# From: Nicolas Collignon <tsointsoin at gmail.com>
-
-0 string -----BEGIN\ CERTIFICATE----- PEM certificate
-0 string -----BEGIN\ CERTIFICATE\ REQ PEM certificate request
-0 string -----BEGIN\ RSA\ PRIVATE PEM RSA private key
-0 string -----BEGIN\ DSA\ PRIVATE PEM DSA private key
-0 string -----BEGIN\ EC\ PRIVATE PEM EC private key
-
-#------------------------------------------------------------------------------
-# $File: sun,v 1.27 2014/04/30 21:41:02 christos Exp $
-# sun: file(1) magic for Sun machines
-#
-# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
-# releases. (5.x uses ELF.) Entries for executables without an
-# architecture type, used before the 68020-based Sun-3's came out,
-# are in aout, as they're indistinguishable from other big-endian
-# 32-bit a.out files.
-#
-0 belong&077777777 0600413 a.out SunOS SPARC demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0600410 a.out SunOS SPARC pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0600407 a.out SunOS SPARC
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0400413 a.out SunOS mc68020 demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0400410 a.out SunOS mc68020 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0400407 a.out SunOS mc68020
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0200413 a.out SunOS mc68010 demand paged
->0 byte &0x80
->>20 belong <4096 shared library
->>20 belong =4096 dynamically linked executable
->>20 belong >4096 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0200410 a.out SunOS mc68010 pure
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-0 belong&077777777 0200407 a.out SunOS mc68010
->0 byte &0x80 dynamically linked executable
->0 byte ^0x80 executable
->16 belong >0 not stripped
-
-#
-# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
-# binary executed in compatibility mode under SunOS 5.x".
-#
-0 belong 0x080456 SunOS core file
->4 belong 432 (SPARC)
->>132 string >\0 from '%s'
->>116 belong =3 (quit)
->>116 belong =4 (illegal instruction)
->>116 belong =5 (trace trap)
->>116 belong =6 (abort)
->>116 belong =7 (emulator trap)
->>116 belong =8 (arithmetic exception)
->>116 belong =9 (kill)
->>116 belong =10 (bus error)
->>116 belong =11 (segmentation violation)
->>116 belong =12 (bad argument to system call)
->>116 belong =29 (resource lost)
->>120 belong x (T=%dK,
->>124 belong x D=%dK,
->>128 belong x S=%dK)
->4 belong 826 (68K)
->>128 string >\0 from '%s'
->4 belong 456 (SPARC 4.x BCP)
->>152 string >\0 from '%s'
-# Sun SunPC
-0 long 0xfa33c08e SunPC 4.0 Hard Disk
-0 string #SUNPC_CONFIG SunPC 4.0 Properties Values
-# Sun snoop (see RFC 1761, which describes the capture file format,
-# RFC 3827, which describes some additional datalink types, and
-# http://www.iana.org/assignments/snoop-datalink-types/snoop-datalink-types.xml,
-# which is the IANA registry of Snoop datalink types)
-#
-0 string snoop Snoop capture file
->8 belong >0 - version %d
->12 belong 0 (IEEE 802.3)
->12 belong 1 (IEEE 802.4)
->12 belong 2 (IEEE 802.5)
->12 belong 3 (IEEE 802.6)
->12 belong 4 (Ethernet)
->12 belong 5 (HDLC)
->12 belong 6 (Character synchronous)
->12 belong 7 (IBM channel-to-channel adapter)
->12 belong 8 (FDDI)
->12 belong 9 (Other)
->12 belong 10 (type %d)
->12 belong 11 (type %d)
->12 belong 12 (type %d)
->12 belong 13 (type %d)
->12 belong 14 (type %d)
->12 belong 15 (type %d)
->12 belong 16 (Fibre Channel)
->12 belong 17 (ATM)
->12 belong 18 (ATM Classical IP)
->12 belong 19 (type %d)
->12 belong 20 (type %d)
->12 belong 21 (type %d)
->12 belong 22 (type %d)
->12 belong 23 (type %d)
->12 belong 24 (type %d)
->12 belong 25 (type %d)
->12 belong 26 (IP over Infiniband)
->12 belong >26 (type %d)
-
-#---------------------------------------------------------------------------
-# The following entries have been tested by Duncan Laurie <duncan at sun.com> (a
-# lead Sun/Cobalt developer) who agrees that they are good and worthy of
-# inclusion.
-
-# Boot ROM images for Sun/Cobalt Linux server appliances
-0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom
->38 string x V%.4s
-
-# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
-# at the very end where file(1) can't get it.
-0 string CRfs COBALT boot rom data (Flat boot rom or file system)
-
-#------------------------------------------------------------------------------
-# msx: file(1) magic for the SymbOS operating system
-# http://www.symbos.de
-# Fabio R. Schmidlin <frs at pop.com.br>
-
-# SymbOS EXE file
-0x30 string SymExe SymbOS executable
->0x36 ubyte x v%c
->0x37 ubyte x \b.%c
->0xF string x \b, name: %s
-
-# SymbOS DOX document
-0 string INFOq\0 SymbOS DOX document
-
-# Symbos driver
-0 string SMD1 SymbOS driver
->19 byte x \b, name: %c
->20 byte x \b%c
->21 byte x \b%c
->22 byte x \b%c
->23 byte x \b%c
->24 byte x \b%c
->25 byte x \b%c
->26 byte x \b%c
->27 byte x \b%c
->28 byte x \b%c
->29 byte x \b%c
->30 byte x \b%c
->31 byte x \b%c
-
-# Symbos video
-0 string SymVid SymbOS video
->6 ubyte x v%c
->7 ubyte x \b.%c
-
-# Soundtrakker 128 ST2 music
-0 byte 0
->0xC string \x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x40\x00 Soundtrakker 128 ST2 music,
->>1 string x name: %s
-
-
-
-#------------------------------------------------------------------------
-# $File: sysex,v 1.8 2014/06/03 19:17:27 christos Exp $
-# sysex: file(1) magic for MIDI sysex files
-#
-# GRR: original 1 byte test at offset was too general as it catches also many FATs of DOS filesystems
-# where real SYStem EXclusive messages at offset 1 are limited to seven bits
-# http://en.wikipedia.org/wiki/MIDI
-0 ubeshort&0xFF80 0xF000 SysEx File -
-
-# North American Group
->1 byte 0x01 Sequential
->1 byte 0x02 IDP
->1 byte 0x03 OctavePlateau
->1 byte 0x04 Moog
->1 byte 0x05 Passport
->1 byte 0x06 Lexicon
->1 byte 0x07 Kurzweil/Future Retro
->>3 byte 0x77 777
->>4 byte 0x00 Bank
->>4 byte 0x01 Song
->>5 byte 0x0f 16
->>5 byte 0x0e 15
->>5 byte 0x0d 14
->>5 byte 0x0c 13
->>5 byte 0x0b 12
->>5 byte 0x0a 11
->>5 byte 0x09 10
->>5 byte 0x08 9
->>5 byte 0x07 8
->>5 byte 0x06 7
->>5 byte 0x05 6
->>5 byte 0x04 5
->>5 byte 0x03 4
->>5 byte 0x02 3
->>5 byte 0x01 2
->>5 byte 0x00 1
->>5 byte 0x10 (ALL)
->>2 byte x \b, Channel %d
->1 byte 0x08 Fender
->1 byte 0x09 Gulbransen
->1 byte 0x0a AKG
->1 byte 0x0b Voyce
->1 byte 0x0c Waveframe
->1 byte 0x0d ADA
->1 byte 0x0e Garfield
->1 byte 0x0f Ensoniq
->1 byte 0x10 Oberheim
->>2 byte 0x06 Matrix 6 series
->>3 byte 0x0A Dump (All)
->>3 byte 0x01 Dump (Bank)
->>4 belong 0x0002040E Matrix 1000
->>>11 byte <2 User bank %d
->>>11 byte >1 Preset bank %d
->1 byte 0x11 Apple
->1 byte 0x12 GreyMatter
->1 byte 0x14 PalmTree
->1 byte 0x15 JLCooper
->1 byte 0x16 Lowrey
->1 byte 0x17 AdamsSmith
->1 byte 0x18 E-mu
->1 byte 0x19 Harmony
->1 byte 0x1a ART
->1 byte 0x1b Baldwin
->1 byte 0x1c Eventide
->1 byte 0x1d Inventronics
->1 byte 0x1f Clarity
-
-# European Group
->1 byte 0x21 SIEL
->1 byte 0x22 Synthaxe
->1 byte 0x24 Hohner
->1 byte 0x25 Twister
->1 byte 0x26 Solton
->1 byte 0x27 Jellinghaus
->1 byte 0x28 Southworth
->1 byte 0x29 PPG
->1 byte 0x2a JEN
->1 byte 0x2b SSL
->1 byte 0x2c AudioVertrieb
-
->1 byte 0x2f ELKA
->>3 byte 0x09 EK-44
-
->1 byte 0x30 Dynacord
->1 byte 0x31 Jomox
->1 byte 0x33 Clavia
->1 byte 0x39 Soundcraft
-# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs
->1 byte 0x3e Waldorf
->>2 byte 0x00 microWave
->>2 byte 0x0E microwave2 / XT
->>2 byte 0x0F Q / Q+
->>3 byte =0 (default id)
->>3 byte >0 (
->>>3 byte <0x7F \bdevice %d)
->>>3 byte =0x7F \bbroadcast id)
->>3 byte 0x7f Microwave I
->>>4 byte 0x00 SNDR (Sound Request)
->>>4 byte 0x10 SNDD (Sound Dump)
->>>4 byte 0x20 SNDP (Sound Parameter Change)
->>>4 byte 0x30 SNDQ (Sound Parameter Inquiry)
->>>4 byte 0x70 BOOT (Sound Reserved)
->>>4 byte 0x01 MULR (Multi Request)
->>>4 byte 0x11 MULD (Multi Dump)
->>>4 byte 0x21 MULP (Multi Parameter Change)
->>>4 byte 0x31 MULQ (Multi Parameter Inquiry)
->>>4 byte 0x71 OS (Multi Reserved)
->>>4 byte 0x02 DRMR (Drum Map Request)
->>>4 byte 0x12 DRMD (Drum Map Dump)
->>>4 byte 0x22 DRMP (Drum Map Parameter Change)
->>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry)
->>>4 byte 0x72 BIN (Drum Map Reserved)
->>>4 byte 0x03 PATR (Sequencer Pattern Request)
->>>4 byte 0x13 PATD (Sequencer Pattern Dump)
->>>4 byte 0x23 PATP (Sequencer Pattern Parameter Change)
->>>4 byte 0x33 PATQ (Sequencer Pattern Parameter Inquiry)
->>>4 byte 0x73 AFM (Sequencer Pattern Reserved)
->>>4 byte 0x04 GLBR (Global Parameter Request)
->>>4 byte 0x14 GLBD (Global Parameter Dump)
->>>4 byte 0x24 GLBP (Global Parameter Parameter Change)
->>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry)
->>>4 byte 0x07 MODR (Mode Parameter Request)
->>>4 byte 0x17 MODD (Mode Parameter Dump)
->>>4 byte 0x27 MODP (Mode Parameter Parameter Change)
->>>4 byte 0x37 MODQ (Mode Parameter Parameter Inquiry)
->>2 byte 0x10 microQ
->>>4 byte 0x00 SNDR (Sound Request)
->>>4 byte 0x10 SNDD (Sound Dump)
->>>4 byte 0x20 SNDP (Sound Parameter Change)
->>>4 byte 0x30 SNDQ (Sound Parameter Inquiry)
->>>4 byte 0x70 (Sound Reserved)
->>>4 byte 0x01 MULR (Multi Request)
->>>4 byte 0x11 MULD (Multi Dump)
->>>4 byte 0x21 MULP (Multi Parameter Change)
->>>4 byte 0x31 MULQ (Multi Parameter Inquiry)
->>>4 byte 0x71 OS (Multi Reserved)
->>>4 byte 0x02 DRMR (Drum Map Request)
->>>4 byte 0x12 DRMD (Drum Map Dump)
->>>4 byte 0x22 DRMP (Drum Map Parameter Change)
->>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry)
->>>4 byte 0x72 BIN (Drum Map Reserved)
->>>4 byte 0x04 GLBR (Global Parameter Request)
->>>4 byte 0x14 GLBD (Global Parameter Dump)
->>>4 byte 0x24 GLBP (Global Parameter Parameter Change)
->>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry)
->>2 byte 0x11 rackAttack
->>>4 byte 0x00 SNDR (Sound Parameter Request)
->>>4 byte 0x10 SNDD (Sound Parameter Dump)
->>>4 byte 0x20 SNDP (Sound Parameter Parameter Change)
->>>4 byte 0x30 SNDQ (Sound Parameter Parameter Inquiry)
->>>4 byte 0x01 PRGR (Program Parameter Request)
->>>4 byte 0x11 PRGD (Program Parameter Dump)
->>>4 byte 0x21 PRGP (Program Parameter Parameter Change)
->>>4 byte 0x31 PRGQ (Program Parameter Parameter Inquiry)
->>>4 byte 0x71 OS (Program Parameter Reserved)
->>>4 byte 0x03 PATR (Pattern Parameter Request)
->>>4 byte 0x13 PATD (Pattern Parameter Dump)
->>>4 byte 0x23 PATP (Pattern Parameter Parameter Change)
->>>4 byte 0x33 PATQ (Pattern Parameter Parameter Inquiry)
->>>4 byte 0x04 GLBR (Global Parameter Request)
->>>4 byte 0x14 GLBD (Global Parameter Dump)
->>>4 byte 0x24 GLBP (Global Parameter Parameter Change)
->>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry)
->>>4 byte 0x05 EFXR (FX Parameter Request)
->>>4 byte 0x15 EFXD (FX Parameter Dump)
->>>4 byte 0x25 EFXP (FX Parameter Parameter Change)
->>>4 byte 0x35 EFXQ (FX Parameter Parameter Inquiry)
->>>4 byte 0x07 MODR (Mode Command Request)
->>>4 byte 0x17 MODD (Mode Command Dump)
->>>4 byte 0x27 MODP (Mode Command Parameter Change)
->>>4 byte 0x37 MODQ (Mode Command Parameter Inquiry)
->>2 byte 0x03 Wave
->>>4 byte 0x00 SBPR (Soundprogram)
->>>4 byte 0x01 SAPR (Performance)
->>>4 byte 0x02 SWAVE (Wave)
->>>4 byte 0x03 SWTBL (Wave control table)
->>>4 byte 0x04 SVT (Velocity Curve)
->>>4 byte 0x05 STT (Tuning Table)
->>>4 byte 0x06 SGLB (Global Parameters)
->>>4 byte 0x07 SARRMAP (Performance Program Change Map)
->>>4 byte 0x08 SBPRMAP (Sound Program Change Map)
->>>4 byte 0x09 SBPRPAR (Sound Parameter)
->>>4 byte 0x0A SARRPAR (Performance Parameter)
->>>4 byte 0x0B SINSPAR (Instrument/External Parameter)
->>>4 byte 0x0F SBULK (Bulk Switch on/off)
-
-# Japanese Group
->1 byte 0x40 Kawai
->>3 byte 0x20 K1
->>3 byte 0x22 K4
-
->1 byte 0x41 Roland
->>3 byte 0x14 D-50
->>3 byte 0x2b U-220
->>3 byte 0x02 TR-707
-
->1 byte 0x42 Korg
->>3 byte 0x19 M1
-
->1 byte 0x43 Yamaha
->1 byte 0x44 Casio
->1 byte 0x46 Kamiya
->1 byte 0x47 Akai
->1 byte 0x48 Victor
->1 byte 0x49 Mesosha
->1 byte 0x4b Fujitsu
->1 byte 0x4c Sony
->1 byte 0x4e Teac
->1 byte 0x50 Matsushita
->1 byte 0x51 Fostex
->1 byte 0x52 Zoom
->1 byte 0x54 Matsushita
->1 byte 0x57 Acoustic tech. lab.
-# http://www.midi.org/techspecs/manid.php
->1 belong&0xffffff00 0x00007400 Ta Horng
->1 belong&0xffffff00 0x00007500 e-Tek
->1 belong&0xffffff00 0x00007600 E-Voice
->1 belong&0xffffff00 0x00007700 Midisoft
->1 belong&0xffffff00 0x00007800 Q-Sound
->1 belong&0xffffff00 0x00007900 Westrex
->1 belong&0xffffff00 0x00007a00 Nvidia*
->1 belong&0xffffff00 0x00007b00 ESS
->1 belong&0xffffff00 0x00007c00 Mediatrix
->1 belong&0xffffff00 0x00007d00 Brooktree
->1 belong&0xffffff00 0x00007e00 Otari
->1 belong&0xffffff00 0x00007f00 Key Electronics
->1 belong&0xffffff00 0x00010000 Shure
->1 belong&0xffffff00 0x00010100 AuraSound
->1 belong&0xffffff00 0x00010200 Crystal
->1 belong&0xffffff00 0x00010300 Rockwell
->1 belong&0xffffff00 0x00010400 Silicon Graphics
->1 belong&0xffffff00 0x00010500 Midiman
->1 belong&0xffffff00 0x00010600 PreSonus
->1 belong&0xffffff00 0x00010800 Topaz
->1 belong&0xffffff00 0x00010900 Cast Lightning
->1 belong&0xffffff00 0x00010a00 Microsoft
->1 belong&0xffffff00 0x00010b00 Sonic Foundry
->1 belong&0xffffff00 0x00010c00 Line 6
->1 belong&0xffffff00 0x00010d00 Beatnik Inc.
->1 belong&0xffffff00 0x00010e00 Van Koerving
->1 belong&0xffffff00 0x00010f00 Altech Systems
->1 belong&0xffffff00 0x00011000 S & S Research
->1 belong&0xffffff00 0x00011100 VLSI Technology
->1 belong&0xffffff00 0x00011200 Chromatic
->1 belong&0xffffff00 0x00011300 Sapphire
->1 belong&0xffffff00 0x00011400 IDRC
->1 belong&0xffffff00 0x00011500 Justonic Tuning
->1 belong&0xffffff00 0x00011600 TorComp
->1 belong&0xffffff00 0x00011700 Newtek Inc.
->1 belong&0xffffff00 0x00011800 Sound Sculpture
->1 belong&0xffffff00 0x00011900 Walker Technical
->1 belong&0xffffff00 0x00011a00 Digital Harmony
->1 belong&0xffffff00 0x00011b00 InVision
->1 belong&0xffffff00 0x00011c00 T-Square
->1 belong&0xffffff00 0x00011d00 Nemesys
->1 belong&0xffffff00 0x00011e00 DBX
->1 belong&0xffffff00 0x00011f00 Syndyne
->1 belong&0xffffff00 0x00012000 Bitheadz
->1 belong&0xffffff00 0x00012100 Cakewalk
->1 belong&0xffffff00 0x00012200 Staccato
->1 belong&0xffffff00 0x00012300 National Semicon.
->1 belong&0xffffff00 0x00012400 Boom Theory
->1 belong&0xffffff00 0x00012500 Virtual DSP Corp
->1 belong&0xffffff00 0x00012600 Antares
->1 belong&0xffffff00 0x00012700 Angel Software
->1 belong&0xffffff00 0x00012800 St Louis Music
->1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX
->1 belong&0xffffff00 0x00012a00 Ashley Audio
->1 belong&0xffffff00 0x00012b00 Vari-Lite
->1 belong&0xffffff00 0x00012c00 Summit Audio
->1 belong&0xffffff00 0x00012d00 Aureal Semicon.
->1 belong&0xffffff00 0x00012e00 SeaSound
->1 belong&0xffffff00 0x00012f00 U.S. Robotics
->1 belong&0xffffff00 0x00013000 Aurisis
->1 belong&0xffffff00 0x00013100 Nearfield Multimedia
->1 belong&0xffffff00 0x00013200 FM7 Inc.
->1 belong&0xffffff00 0x00013300 Swivel Systems
->1 belong&0xffffff00 0x00013400 Hyperactive
->1 belong&0xffffff00 0x00013500 MidiLite
->1 belong&0xffffff00 0x00013600 Radical
->1 belong&0xffffff00 0x00013700 Roger Linn
->1 belong&0xffffff00 0x00013800 Helicon
->1 belong&0xffffff00 0x00013900 Event
->1 belong&0xffffff00 0x00013a00 Sonic Network
->1 belong&0xffffff00 0x00013b00 Realtime Music
->1 belong&0xffffff00 0x00013c00 Apogee Digital
-
->1 belong&0xffffff00 0x00202b00 Medeli Electronics
->1 belong&0xffffff00 0x00202c00 Charlie Lab
->1 belong&0xffffff00 0x00202d00 Blue Chip Music
->1 belong&0xffffff00 0x00202e00 BEE OH Corp
->1 belong&0xffffff00 0x00202f00 LG Semicon America
->1 belong&0xffffff00 0x00203000 TESI
->1 belong&0xffffff00 0x00203100 EMAGIC
->1 belong&0xffffff00 0x00203200 Behringer
->1 belong&0xffffff00 0x00203300 Access Music
->1 belong&0xffffff00 0x00203400 Synoptic
->1 belong&0xffffff00 0x00203500 Hanmesoft Corp
->1 belong&0xffffff00 0x00203600 Terratec
->1 belong&0xffffff00 0x00203700 Proel SpA
->1 belong&0xffffff00 0x00203800 IBK MIDI
->1 belong&0xffffff00 0x00203900 IRCAM
->1 belong&0xffffff00 0x00203a00 Propellerhead Software
->1 belong&0xffffff00 0x00203b00 Red Sound Systems
->1 belong&0xffffff00 0x00203c00 Electron ESI AB
->1 belong&0xffffff00 0x00203d00 Sintefex Audio
->1 belong&0xffffff00 0x00203e00 Music and More
->1 belong&0xffffff00 0x00203f00 Amsaro
->1 belong&0xffffff00 0x00204000 CDS Advanced Technology
->1 belong&0xffffff00 0x00204100 Touched by Sound
->1 belong&0xffffff00 0x00204200 DSP Arts
->1 belong&0xffffff00 0x00204300 Phil Rees Music
->1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH
->1 belong&0xffffff00 0x00204500 Soundart
->1 belong&0xffffff00 0x00204600 C-Mexx Software
->1 belong&0xffffff00 0x00204700 Klavis Tech.
->1 belong&0xffffff00 0x00204800 Noteheads AB
-
-0 string T707 Roland TR-707 Data
-#------------------------------------------------------------------------------
-# file: file(1) magic for Tcl scripting language
-# URL: http://www.tcl.tk/
-# From: gustaf neumann
-
-# Tcl scripts
-0 search/1/w #!\ /usr/bin/tcl Tcl script text executable
-!:mime text/x-tcl
-0 search/1/w #!\ /usr/local/bin/tcl Tcl script text executable
-!:mime text/x-tcl
-0 search/1 #!/usr/bin/env\ tcl Tcl script text executable
-!:mime text/x-tcl
-0 search/1 #!\ /usr/bin/env\ tcl Tcl script text executable
-!:mime text/x-tcl
-0 search/1/w #!\ /usr/bin/wish Tcl/Tk script text executable
-!:mime text/x-tcl
-0 search/1/w #!\ /usr/local/bin/wish Tcl/Tk script text executable
-!:mime text/x-tcl
-0 search/1 #!/usr/bin/env\ wish Tcl/Tk script text executable
-!:mime text/x-tcl
-0 search/1 #!\ /usr/bin/env\ wish Tcl/Tk script text executable
-!:mime text/x-tcl
-
-# check the first line
-0 search/1 package\ req
->0 regex \^package[\ \t]+req Tcl script
-# not 'p', check other lines
-0 search/1 !p
->0 regex \^package[\ \t]+req Tcl script
-
-#------------------------------------------------------------------------------
-# $File: teapot,v 1.4 2009/09/19 16:28:12 christos Exp $
-# teapot: file(1) magic for "teapot" spreadsheet
-#
-0 string #!teapot\012xdr teapot work sheet (XDR format)
-
-#------------------------------------------------------------------------------
-# $File: terminfo,v 1.6 2009/09/19 16:28:12 christos Exp $
-# terminfo: file(1) magic for terminfo
-#
-# XXX - byte order for screen images?
-#
-0 string \032\001 Compiled terminfo entry
-0 short 0433 Curses screen image
-0 short 0434 Curses screen image
-
-#------------------------------------------------------------------------------
-# $File: tex,v 1.20 2014/03/16 02:53:03 christos Exp $
-# tex: file(1) magic for TeX files
-#
-# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
-#
-# From <conklin at talisman.kaleida.com>
-
-# Although we may know the offset of certain text fields in TeX DVI
-# and font files, we can't use them reliably because they are not
-# zero terminated. [but we do anyway, christos]
-0 string \367\002 TeX DVI file
-!:mime application/x-dvi
->16 string >\0 (%s)
-0 string \367\203 TeX generic font data
-0 string \367\131 TeX packed font data
->3 string >\0 (%s)
-0 string \367\312 TeX virtual font data
-0 search/1 This\ is\ TeX, TeX transcript text
-0 search/1 This\ is\ METAFONT, METAFONT transcript text
-
-# There is no way to detect TeX Font Metric (*.tfm) files without
-# breaking them apart and reading the data. The following patterns
-# match most *.tfm files generated by METAFONT or afm2tfm.
-2 string \000\021 TeX font metric data
-!:mime application/x-tex-tfm
->33 string >\0 (%s)
-2 string \000\022 TeX font metric data
-!:mime application/x-tex-tfm
->33 string >\0 (%s)
-
-# Texinfo and GNU Info, from Daniel Quinlan (quinlan at yggdrasil.com)
-0 search/1 \\input\ texinfo Texinfo source text
-!:mime text/x-texinfo
-0 search/1 This\ is\ Info\ file GNU Info text
-!:mime text/x-info
-
-# TeX documents, from Daniel Quinlan (quinlan at yggdrasil.com)
-0 search/4096 \\input TeX document text
-!:mime text/x-tex
-!:strength + 15
-0 search/4096 \\begin LaTeX document text
-!:mime text/x-tex
-!:strength + 15
-0 search/4096 \\section LaTeX document text
-!:mime text/x-tex
-!:strength + 18
-0 search/4096 \\setlength LaTeX document text
-!:mime text/x-tex
-!:strength + 15
-0 search/4096 \\documentstyle LaTeX document text
-!:mime text/x-tex
-!:strength + 18
-0 search/4096 \\chapter LaTeX document text
-!:mime text/x-tex
-!:strength + 18
-0 search/4096 \\documentclass LaTeX 2e document text
-!:mime text/x-tex
-!:strength + 15
-0 search/4096 \\relax LaTeX auxiliary file
-!:mime text/x-tex
-!:strength + 15
-0 search/4096 \\contentsline LaTeX table of contents
-!:mime text/x-tex
-!:strength + 15
-0 search/4096 %\ -*-latex-*- LaTeX document text
-!:mime text/x-tex
-
-# Tex document, from Hendrik Scholz <hendrik at scholz.net>
-0 search/1 \\ifx TeX document text
-
-# Index and glossary files
-0 search/4096 \\indexentry LaTeX raw index file
-0 search/4096 \\begin{theindex} LaTeX sorted index
-0 search/4096 \\glossaryentry LaTeX raw glossary
-0 search/4096 \\begin{theglossary} LaTeX sorted glossary
-0 search/4096 This\ is\ makeindex Makeindex log file
-
-# End of TeX
-
-#------------------------------------------------------------------------------
-# file(1) magic for BibTex text files
-# From Hendrik Scholz <hendrik at scholz.net>
-
-0 search/1/c @article{ BibTeX text file
-0 search/1/c @book{ BibTeX text file
-0 search/1/c @inbook{ BibTeX text file
-0 search/1/c @incollection{ BibTeX text file
-0 search/1/c @inproceedings{ BibTeX text file
-0 search/1/c @manual{ BibTeX text file
-0 search/1/c @misc{ BibTeX text file
-0 search/1/c @preamble{ BibTeX text file
-0 search/1/c @phdthesis{ BibTeX text file
-0 search/1/c @techreport{ BibTeX text file
-0 search/1/c @unpublished{ BibTeX text file
-
-73 search/1 %%%\ \ BibTeX-file{ BibTex text file (with full header)
-
-73 search/1 %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header)
-
-0 search/1 %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file
-
-0 search/1 %\ BibTeX\ ` BibTeX custom bibliography style text file
-
-0 search/1 @c\ @mapfile{ TeX font aliases text file
-
-0 string #LyX LyX document text
-
-# ConTeXt documents
-# http://wiki.contextgarden.net/
-0 search/4096 \\setupcolors[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\definecolor[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupinteraction[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\useURL[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setuppapersize[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setuplayout[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupfooter[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupfootertexts[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setuppagenumbering[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupbodyfont[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setuphead[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupitemize[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupwhitespace[ ConTeXt document text
-!:strength + 15
-0 search/4096 \\setupindenting[ ConTeXt document text
-!:strength + 15
-
-#------------------------------------------------------------------------------
-# $File: tgif,v 1.7 2010/09/20 19:03:46 rrt Exp $
-# file(1) magic for tgif(1) files
-# From Hendrik Scholz <hendrik at scholz.net>
-0 string %TGIF\ Tgif file version
->6 string x %s
-
-#------------------------------------------------------------------------------
-# $File: ti-8x,v 1.7 2014/04/30 21:41:02 christos Exp $
-# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.
-#
-# From: Ryan McGuire (rmcguire at freenet.columbus.oh.us).
-#
-# Update: Romain Lievin (roms at lpg.ticalc.org).
-#
-# NOTE: This list is not complete.
-# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
-# program/group magic numbers in here because I cannot find any.
-0 string **TI80** TI-80 Graphing Calculator File.
-0 string **TI81** TI-81 Graphing Calculator File.
-#
-# Magic Numbers for the TI-73
-#
-0 string **TI73** TI-73 Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (equation)
->0x00003B byte 0x04 (string)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (assembly program)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0C (complex number)
->0x00003B byte 0x0F (window settings)
->0x00003B byte 0x10 (zoom)
->0x00003B byte 0x11 (table setup)
->0x00003B byte 0x13 (backup)
-
-# Magic Numbers for the TI-82
-#
-0 string **TI82** TI-82 Graphing Calculator
->0x00003B byte 0x00 (real)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (Y-variable)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (protected prgm)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0B (window settings)
->0x00003B byte 0x0C (window settings)
->0x00003B byte 0x0D (table setup)
->0x00003B byte 0x0E (screenshot)
->0x00003B byte 0x0F (backup)
-#
-# Magic Numbers for the TI-83
-#
-0 string **TI83** TI-83 Graphing Calculator
->0x00003B byte 0x00 (real)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (Y-variable)
->0x00003B byte 0x04 (string)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (protected prgm)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0B (window settings)
->0x00003B byte 0x0C (window settings)
->0x00003B byte 0x0D (table setup)
->0x00003B byte 0x0E (screenshot)
->0x00003B byte 0x13 (backup)
-#
-# Magic Numbers for the TI-83+
-#
-0 string **TI83F* TI-83+ Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (list)
->0x00003B byte 0x02 (matrix)
->0x00003B byte 0x03 (equation)
->0x00003B byte 0x04 (string)
->0x00003B byte 0x05 (program)
->0x00003B byte 0x06 (assembly program)
->0x00003B byte 0x07 (picture)
->0x00003B byte 0x08 (gdb)
->0x00003B byte 0x0C (complex number)
->0x00003B byte 0x0F (window settings)
->0x00003B byte 0x10 (zoom)
->0x00003B byte 0x11 (table setup)
->0x00003B byte 0x13 (backup)
->0x00003B byte 0x15 (application variable)
->0x00003B byte 0x17 (group of variable)
-
-#
-# Magic Numbers for the TI-85
-#
-0 string **TI85** TI-85 Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (complex number)
->0x00003B byte 0x02 (real vector)
->0x00003B byte 0x03 (complex vector)
->0x00003B byte 0x04 (real list)
->0x00003B byte 0x05 (complex list)
->0x00003B byte 0x06 (real matrix)
->0x00003B byte 0x07 (complex matrix)
->0x00003B byte 0x08 (real constant)
->0x00003B byte 0x09 (complex constant)
->0x00003B byte 0x0A (equation)
->0x00003B byte 0x0C (string)
->0x00003B byte 0x0D (function GDB)
->0x00003B byte 0x0E (polar GDB)
->0x00003B byte 0x0F (parametric GDB)
->0x00003B byte 0x10 (diffeq GDB)
->0x00003B byte 0x11 (picture)
->0x00003B byte 0x12 (program)
->0x00003B byte 0x13 (range)
->0x00003B byte 0x17 (window settings)
->0x00003B byte 0x18 (window settings)
->0x00003B byte 0x19 (window settings)
->0x00003B byte 0x1A (window settings)
->0x00003B byte 0x1B (zoom)
->0x00003B byte 0x1D (backup)
->0x00003B byte 0x1E (unknown)
->0x00003B byte 0x2A (equation)
->0x000032 string ZS4 - ZShell Version 4 File.
->0x000032 string ZS3 - ZShell Version 3 File.
-#
-# Magic Numbers for the TI-86
-#
-0 string **TI86** TI-86 Graphing Calculator
->0x00003B byte 0x00 (real number)
->0x00003B byte 0x01 (complex number)
->0x00003B byte 0x02 (real vector)
->0x00003B byte 0x03 (complex vector)
->0x00003B byte 0x04 (real list)
->0x00003B byte 0x05 (complex list)
->0x00003B byte 0x06 (real matrix)
->0x00003B byte 0x07 (complex matrix)
->0x00003B byte 0x08 (real constant)
->0x00003B byte 0x09 (complex constant)
->0x00003B byte 0x0A (equation)
->0x00003B byte 0x0C (string)
->0x00003B byte 0x0D (function GDB)
->0x00003B byte 0x0E (polar GDB)
->0x00003B byte 0x0F (parametric GDB)
->0x00003B byte 0x10 (diffeq GDB)
->0x00003B byte 0x11 (picture)
->0x00003B byte 0x12 (program)
->0x00003B byte 0x13 (range)
->0x00003B byte 0x17 (window settings)
->0x00003B byte 0x18 (window settings)
->0x00003B byte 0x19 (window settings)
->0x00003B byte 0x1A (window settings)
->0x00003B byte 0x1B (zoom)
->0x00003B byte 0x1D (backup)
->0x00003B byte 0x1E (unknown)
->0x00003B byte 0x2A (equation)
-#
-# Magic Numbers for the TI-89
-#
-0 string **TI89** TI-89 Graphing Calculator
->0x000048 byte 0x00 (expression)
->0x000048 byte 0x04 (list)
->0x000048 byte 0x06 (matrix)
->0x000048 byte 0x0A (data)
->0x000048 byte 0x0B (text)
->0x000048 byte 0x0C (string)
->0x000048 byte 0x0D (graphic data base)
->0x000048 byte 0x0E (figure)
->0x000048 byte 0x10 (picture)
->0x000048 byte 0x12 (program)
->0x000048 byte 0x13 (function)
->0x000048 byte 0x14 (macro)
->0x000048 byte 0x1C (zipped)
->0x000048 byte 0x21 (assembler)
-#
-# Magic Numbers for the TI-92
-#
-0 string **TI92** TI-92 Graphing Calculator
->0x000048 byte 0x00 (expression)
->0x000048 byte 0x04 (list)
->0x000048 byte 0x06 (matrix)
->0x000048 byte 0x0A (data)
->0x000048 byte 0x0B (text)
->0x000048 byte 0x0C (string)
->0x000048 byte 0x0D (graphic data base)
->0x000048 byte 0x0E (figure)
->0x000048 byte 0x10 (picture)
->0x000048 byte 0x12 (program)
->0x000048 byte 0x13 (function)
->0x000048 byte 0x14 (macro)
->0x000048 byte 0x1D (backup)
-#
-# Magic Numbers for the TI-92+/V200
-#
-0 string **TI92P* TI-92+/V200 Graphing Calculator
->0x000048 byte 0x00 (expression)
->0x000048 byte 0x04 (list)
->0x000048 byte 0x06 (matrix)
->0x000048 byte 0x0A (data)
->0x000048 byte 0x0B (text)
->0x000048 byte 0x0C (string)
->0x000048 byte 0x0D (graphic data base)
->0x000048 byte 0x0E (figure)
->0x000048 byte 0x10 (picture)
->0x000048 byte 0x12 (program)
->0x000048 byte 0x13 (function)
->0x000048 byte 0x14 (macro)
->0x000048 byte 0x1C (zipped)
->0x000048 byte 0x21 (assembler)
-#
-# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades
-#
-0x0000016 string Advanced TI-XX Graphing Calculator (FLASH)
-0 string **TIFL** TI-XX Graphing Calculator (FLASH)
->8 byte >0 - Revision %d
->>9 byte x \b.%d,
->12 byte >0 Revision date %02x
->>13 byte x \b/%02x
->>14 beshort x \b/%04x,
->17 string >/0 name: '%s',
->48 byte 0x74 device: TI-73,
->48 byte 0x73 device: TI-83+,
->48 byte 0x98 device: TI-89,
->48 byte 0x88 device: TI-92+,
->49 byte 0x23 type: OS upgrade,
->49 byte 0x24 type: application,
->49 byte 0x25 type: certificate,
->49 byte 0x3e type: license,
->74 lelong >0 size: %d bytes
-
-# VTi & TiEmu skins (TI Graphing Calculators).
-# From: Romain Lievin (roms at lpg.ticalc.org).
-# Magic Numbers for the VTi skins
-0 string VTI Virtual TI skin
->3 string v - Version
->>4 byte >0 \b %c
->>6 byte x \b.%c
-# Magic Numbers for the TiEmu skins
-0 string TiEmu TiEmu skin
->6 string v - Version
->>7 byte >0 \b %c
->>9 byte x \b.%c
->>10 byte x \b%c
-
-#------------------------------------------------------------------------------
-# $File: timezone,v 1.11 2009/09/19 16:28:12 christos Exp $
-# timezone: file(1) magic for timezone data
-#
-# from Daniel Quinlan (quinlan at yggdrasil.com)
-# this should work on Linux, SunOS, and maybe others
-# Added new official magic number for recent versions of the Olson code
-0 string TZif timezone data
->4 byte 0 \b, old version
->4 byte >0 \b, version %c
->20 belong 0 \b, no gmt time flags
->20 belong 1 \b, 1 gmt time flag
->20 belong >1 \b, %d gmt time flags
->24 belong 0 \b, no std time flags
->20 belong 1 \b, 1 std time flag
->24 belong >1 \b, %d std time flags
->28 belong 0 \b, no leap seconds
->28 belong 1 \b, 1 leap second
->28 belong >1 \b, %d leap seconds
->32 belong 0 \b, no transition times
->32 belong 1 \b, 1 transition time
->32 belong >1 \b, %d transition times
->36 belong 0 \b, no abbreviation chars
->36 belong 1 \b, 1 abbreviation char
->36 belong >1 \b, %d abbreviation chars
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data
-0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data
-
-#------------------------------------------------------------------------------
-# $File: troff,v 1.11 2014/06/03 19:01:34 christos Exp $
-# troff: file(1) magic for *roff
-#
-# updated by Daniel Quinlan (quinlan at yggdrasil.com)
-
-# troff input
-0 search/1 .\\" troff or preprocessor input text
-!:mime text/troff
-0 search/1 '\\" troff or preprocessor input text
-!:mime text/troff
-0 search/1 '.\\" troff or preprocessor input text
-!:mime text/troff
-0 search/1 \\" troff or preprocessor input text
-!:mime text/troff
-0 search/1 ''' troff or preprocessor input text
-!:mime text/troff
-0 regex/20l \^\\.[A-Za-z0-9][A-Za-z0-9][\ \t] troff or preprocessor input text
-!:mime text/troff
-0 regex/20l \^\\.[A-Za-z0-9][A-Za-z0-9]$ troff or preprocessor input text
-!:mime text/troff
-
-# ditroff intermediate output text
-0 search/1 x\ T ditroff output text
->4 search/1 cat for the C/A/T phototypesetter
->4 search/1 ps for PostScript
->4 search/1 dvi for DVI
->4 search/1 ascii for ASCII
->4 search/1 lj4 for LaserJet 4
->4 search/1 latin1 for ISO 8859-1 (Latin 1)
->4 search/1 X75 for xditview at 75dpi
->>7 search/1 -12 (12pt)
->4 search/1 X100 for xditview at 100dpi
->>8 search/1 -12 (12pt)
-
-# output data formats
-0 string \100\357 very old (C/A/T) troff output data
-
-#------------------------------------------------------------------------------
-# $File: tuxedo,v 1.4 2009/09/19 16:28:13 christos Exp $
-# tuxedo: file(1) magic for BEA TUXEDO data files
-#
-# from Ian Springer <ispringer at hotmail.com>
-#
-0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data
-
-#------------------------------------------------------------------------------
-# $File: typeset,v 1.8 2009/09/19 16:28:13 christos Exp $
-# typeset: file(1) magic for other typesetting
-#
-0 string Interpress/Xerox Xerox InterPress data
->16 string / (version
->>17 string >\0 %s)
-
-#------------------------------------------------------------------------------
-# $File: unicode,v 1.6 2010/09/20 18:55:20 rrt Exp $
-# Unicode: BOM prefixed text files - Adrian Havill <havill at turbolinux.co.jp>
-# GRR: These types should be recognised in file_ascmagic so these
-# encodings can be treated by text patterns.
-# Missing types are already dealt with internally.
-#
-0 string +/v8 Unicode text, UTF-7
-0 string +/v9 Unicode text, UTF-7
-0 string +/v+ Unicode text, UTF-7
-0 string +/v/ Unicode text, UTF-7
-0 string \335\163\146\163 Unicode text, UTF-8-EBCDIC
-0 string \000\000\376\377 Unicode text, UTF-32, big-endian
-0 string \377\376\000\000 Unicode text, UTF-32, little-endian
-0 string \016\376\377 Unicode text, SCSU (Standard Compression Scheme for Unicode)
-
-#------------------------------------------------------------------------------
-# $File: unknown,v 1.8 2013/01/09 22:37:24 christos Exp $
-# unknown: file(1) magic for unknown machines
-#
-# 0x107 is 0407, 0x108 is 0410, and 0x109 is 0411; those are all PDP-11
-# (executable, pure, and split I&D, respectively), but the PDP-11 version
-# doesn't have the "version %ld", which may be a bogus COFFism (I don't
-# think there was ever COFF for the PDP-11).
-#
-# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
-# long, as it would be on a VAX. In any case, that could collide with
-# VAX demand-paged files, as the magic number is little-endian on those
-# binaries, so the first 16 bits of the file would contain 0x10B.
-#
-# Therefore, those entries are commented out.
-#
-# 0x10C is 0414 and 0x10E is 0416; those *are* unknown.
-#
-#0 short 0x107 unknown machine executable
-#>8 short >0 not stripped
-#>15 byte >0 - version %ld
-#0 short 0x108 unknown pure executable
-#>8 short >0 not stripped
-#>15 byte >0 - version %ld
-#0 short 0x109 PDP-11 separate I&D
-#>8 short >0 not stripped
-#>15 byte >0 - version %ld
-#0 short 0x10b unknown pure executable
-#>8 short >0 not stripped
-#>15 byte >0 - version %ld
-0 long 0x10c unknown demand paged pure executable
->16 long >0 not stripped
-0 long 0x10e unknown readable demand paged pure executable
-
-#------------------------------------------------------------------------------
-# $File: uterus,v 1.3 2014/04/30 21:41:02 christos Exp $
-# file(1) magic for uterus files
-# http://freecode.com/projects/uterus
-#
-0 string UTE+ uterus file
->4 string v \b, version
->5 byte x %c
->6 string . \b.
->7 byte x \b%c
->8 string \<\> \b, big-endian
->>16 belong >0 \b, slut size %u
->8 string \>\< \b, litte-endian
->>16 lelong >0 \b, slut size %u
->10 byte &8 \b, compressed
-
-#------------------------------------------------------------------------------
-# $File: uuencode,v 1.7 2009/09/19 16:28:13 christos Exp $
-# uuencode: file(1) magic for ASCII-encoded files
-#
-
-# GRR: the first line of xxencoded files is identical to that in uuencoded
-# files, but the first character in most subsequent lines is 'h' instead of
-# 'M'. (xxencoding uses lowercase letters in place of most of uuencode's
-# punctuation and survives BITNET gateways better.) If regular expressions
-# were supported, this entry could possibly be split into two with
-# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
-0 search/1 begin\ uuencoded or xxencoded text
-
-# btoa(1) is an alternative to uuencode that requires less space.
-0 search/1 xbtoa\ Begin btoa'd text
-
-# ship(1) is another, much cooler alternative to uuencode.
-# Greg Roelofs, newt at uchicago.edu
-0 search/1 $\012ship ship'd binary text
-
-# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
-# Greg Roelofs, newt at uchicago.edu
-0 search/1 Decode\ the\ following\ with\ bdeco bencoded News text
-
-# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
-# Daniel Quinlan, quinlan at yggdrasil.com
-11 search/1 must\ be\ converted\ with\ BinHex BinHex binary text
->41 search/1 x \b, version %.3s
-
-# GRR: handle BASE64
-
-#------------------------------------------------------------------------------
-# $File: varied.out,v 1.23 2014/04/30 21:41:02 christos Exp $
-# varied.out: file(1) magic for various USG systems
-#
-# Herewith many of the object file formats used by USG systems.
-# Most have been moved to files for a particular processor,
-# and deleted if they duplicate other entries.
-#
-0 short 0610 Perkin-Elmer executable
-# AMD 29K
-0 beshort 0572 amd 29k coff noprebar executable
-0 beshort 01572 amd 29k coff prebar executable
-0 beshort 0160007 amd 29k coff archive
-# Cray
-6 beshort 0407 unicos (cray) executable
-# Ultrix 4.3
-596 string \130\337\377\377 Ultrix core file
->600 string >\0 from '%s'
-# BeOS and MAcOS PEF executables
-# From: hplus at zilker.net (Jon Watte)
-0 string Joy!peffpwpc header for PowerPC PEF executable
-#
-# ava assembler/linker Uros Platise <uros.platise at ijs.si>
-0 string avaobj AVR assembler object code
->7 string >\0 version '%s'
-# gnu gmon magic From: Eugen Dedu <dedu at ese-metz.fr>
-0 string gmon GNU prof performance data
->4 long x - version %d
-# From: Dave Pearson <davep at davep.org>
-# Harbour <URL:http://harbour-project.org/> HRB files.
-0 string \xc0HRB Harbour HRB file
->4 leshort x version %d
-# Harbour HBV files
-0 string \xc0HBV Harbour variable dump file
->4 leshort x version %d
-
-# From: Alex Beregszaszi <alex at fsn.hu>
-# 0 string exec BugOS executable
-# 0 string pack BugOS archive
-
-# From: Jason Spence <jspence at lightconsulting.com>
-# Generated by the "examples" in STM's ST40 devkit, and derived code.
-0 lelong 0x13a9f17e ST40 component image format
->4 string >\0 \b, name '%s'
-
-#------------------------------------------------------------------------------
-# $File: varied.script,v 1.10 2014/03/01 22:32:39 christos Exp $
-# varied.script: file(1) magic for various interpreter scripts
-
-0 string/t #!\ / a
->3 string >\0 %s script text executable
-!:strength / 2
-
-0 string/b #!\ / a
->3 string >\0 %s script executable (binary data)
-!:strength / 2
-
-0 string/t #!\t/ a
->3 string >\0 %s script text executable
-!:strength / 2
-
-0 string/b #!\t/ a
->3 string >\0 %s script executable (binary data)
-!:strength / 2
-
-0 string/t #!/ a
->2 string >\0 %s script text executable
-!:strength / 2
-
-0 string/b #!/ a
->2 string >\0 %s script executable (binary data)
-!:strength / 2
-
-0 string/t #!\ script text executable
->3 string >\0 for %s
-!:strength / 3
-
-0 string/b #!\ script executable
->3 string >\0 for %s (binary data)
-!:strength / 3
-
-# using env
-0 string/t #!/usr/bin/env a
->15 string/t >\0 %s script text executable
-!:strength / 10
-
-0 string/b #!/usr/bin/env a
->15 string/b >\0 %s script executable (binary data)
-!:strength / 10
-
-0 string/t #!\ /usr/bin/env a
->16 string/t >\0 %s script text executable
-!:strength / 10
-
-0 string/b #!\ /usr/bin/env a
->16 string/b >\0 %s script executable (binary data)
-!:strength / 10
-
-# From: arno <arenevier at fdn.fr>
-# mozilla xpconnect typelib
-# see http://www.mozilla.org/scriptable/typelib_file.html
-0 string XPCOM\nTypeLib\r\n\032 XPConnect Typelib
->0x10 byte x version %d
->>0x11 byte x \b.%d
-
-#------------------------------------------------------------------------------
-# $File: vax,v 1.9 2014/04/30 21:41:02 christos Exp $
-# vax: file(1) magic for VAX executable/object and APL workspace
-#
-0 lelong 0101557 VAX single precision APL workspace
-0 lelong 0101556 VAX double precision APL workspace
-
-#
-# VAX a.out (BSD; others collide with 386 and other 32-bit little-endian
-# executables, and are handled in aout)
-#
-0 lelong 0420 a.out VAX demand paged (first page unmapped) pure executable
->16 lelong >0 not stripped
-
-#
-# VAX COFF
-#
-# The `versions' were commented out, but have been un-commented out.
-# (Was the problem just one of endianness?)
-#
-0 leshort 0570 VAX COFF executable
->12 lelong >0 not stripped
->22 leshort >0 - version %d
-0 leshort 0575 VAX COFF pure executable
->12 lelong >0 not stripped
->22 leshort >0 - version %d
-
-#------------------------------------------------------------------------------
-# $File: vicar,v 1.4 2009/09/19 16:28:13 christos Exp $
-# vicar: file(1) magic for VICAR files.
-#
-# From: Ossama Othman <othman at astrosun.tn.cornell.edu
-# VICAR is JPL's in-house spacecraft image processing program
-# VICAR image
-0 string LBLSIZE= VICAR image data
->32 string BYTE \b, 8 bits = VAX byte
->32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2
->32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4
->32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4
->32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8
->32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8
-# VICAR label file
-43 string SFDU_LABEL VICAR label file
-
-#------------------------------------------------------------------------------
-# $File: virtual,v 1.6 2014/05/07 21:25:41 christos Exp $
-# From: James Nobis <quel at quelrod.net>
-# Microsoft hard disk images for:
-# Virtual Server
-# Virtual PC
-# http://technet.microsoft.com/en-us/virtualserver/bb676673.aspx
-# .vhd
-0 string conectix Microsoft Disk Image, Virtual Server or Virtual PC
-
-# libvirt
-# From: Philipp Hahn <hahn at univention.de>
-0 string LibvirtQemudSave Libvirt QEMU Suspend Image
->0x10 lelong x \b, version %u
->0x14 lelong x \b, XML length %u
->0x18 lelong 1 \b, running
->0x1c lelong 1 \b, compressed
-
-0 string LibvirtQemudPart Libvirt QEMU partial Suspend Image
-# From: Alex Beregszaszi <alex at fsn.hu>
-0 string/b COWD VMWare3
->4 byte 3 disk image
->>32 lelong x (%d/
->>36 lelong x \b%d/
->>40 lelong x \b%d)
->4 byte 2 undoable disk image
->>32 string >\0 (%s)
-
-0 string/b VMDK VMware4 disk image
-0 string/b KDMV VMware4 disk image
-
-#--------------------------------------------------------------------
-# Qemu Emulator Images
-# Lines written by Friedrich Schwittay (f.schwittay at yousable.de)
-# Updated by Adam Buchbinder (adam.buchbinder at gmail.com)
-# Made by reading sources, reading documentation, and doing trial and error
-# on existing QCOW files
-0 string/b QFI\xFB QEMU QCOW Image
-
-# Uncomment the following line to display Magic (only used for debugging
-# this magic number)
-#>0 string/b x , Magic: %s
-
-# There are currently 2 Versions: "1" and "2".
-# http://www.gnome.org/~markmc/qcow-image-format-version-1.html
->4 belong 1 (v1)
-
-# Using the existence of the Backing File Offset to determine whether
-# to read Backing File Information
->>12 belong >0 \b, has backing file (
-# Note that this isn't a null-terminated string; the length is actually
-# (16.L). Assuming a null-terminated string happens to work usually, but it
-# may spew junk until it reaches a \0 in some cases.
->>>(12.L) string >\0 \bpath %s
-
-# Modification time of the Backing File
-# Really useful if you want to know if your backing
-# file is still usable together with this image
->>>>20 bedate >0 \b, mtime %s)
->>>>20 default x \b)
-
-# Size is stored in bytes in a big-endian u64.
->>24 bequad x \b, %lld bytes
-
-# 1 for AES encryption, 0 for none.
->>36 belong 1 \b, AES-encrypted
-
-# http://www.gnome.org/~markmc/qcow-image-format.html
->4 belong 2 (v2)
-# Using the existence of the Backing File Offset to determine whether
-# to read Backing File Information
->>8 bequad >0 \b, has backing file
-# Note that this isn't a null-terminated string; the length is actually
-# (16.L). Assuming a null-terminated string happens to work usually, but it
-# may spew junk until it reaches a \0 in some cases. Also, since there's no
-# .Q modifier, we just use the bottom four bytes as an offset. Note that if
-# the file is over 4G, and the backing file path is stored after the first 4G,
-# the wrong filename will be printed. (This should be (8.Q), when that syntax
-# is introduced.)
->>>(12.L) string >\0 (path %s)
->>24 bequad x \b, %lld bytes
->>32 belong 1 \b, AES-encrypted
-
->4 belong 3 (v3)
-# Using the existence of the Backing File Offset to determine whether
-# to read Backing File Information
->>8 bequad >0 \b, has backing file
-# Note that this isn't a null-terminated string; the length is actually
-# (16.L). Assuming a null-terminated string happens to work usually, but it
-# may spew junk until it reaches a \0 in some cases. Also, since there's no
-# .Q modifier, we just use the bottom four bytes as an offset. Note that if
-# the file is over 4G, and the backing file path is stored after the first 4G,
-# the wrong filename will be printed. (This should be (8.Q), when that syntax
-# is introduced.)
->>>(12.L) string >\0 (path %s)
->>24 bequad x \b, %lld bytes
->>32 belong 1 \b, AES-encrypted
-
->4 default x (unknown version)
-
-0 string/b QEVM QEMU suspend to disk image
-
-# QEMU QED Image
-# http://wiki.qemu.org/Features/QED/Specification
-0 string/b QED\0 QEMU QED Image
-
-# VDI Image
-# Sun xVM VirtualBox Disk Image
-# From: Richard W.M. Jones <rich at annexia.org>
-# VirtualBox Disk Image
-0x40 ulelong 0xbeda107f VirtualBox Disk Image
->0x44 uleshort >0 \b, major %u
->0x46 uleshort >0 \b, minor %u
->0 string >\0 (%s)
->368 lequad x \b, %lld bytes
-
-0 string/b Bochs\ Virtual\ HD\ Image Bochs disk image,
->32 string x type %s,
->48 string x subtype %s
-
-0 lelong 0x02468ace Bochs Sparse disk image
-
-
-#------------------------------------------------------------------------------
-# $File: virtutech,v 1.4 2009/09/19 16:28:13 christos Exp $
-# Virtutech Compressed Random Access File Format
-#
-# From <gustav at 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
-
-#------------------------------------------------------------------------------
-# $File: visx,v 1.5 2009/09/19 16:28:13 christos Exp $
-# visx: file(1) magic for Visx format files
-#
-0 short 0x5555 VISX image file
->2 byte 0 (zero)
->2 byte 1 (unsigned char)
->2 byte 2 (short integer)
->2 byte 3 (float 32)
->2 byte 4 (float 64)
->2 byte 5 (signed char)
->2 byte 6 (bit-plane)
->2 byte 7 (classes)
->2 byte 8 (statistics)
->2 byte 10 (ascii text)
->2 byte 15 (image segments)
->2 byte 100 (image set)
->2 byte 101 (unsigned char vector)
->2 byte 102 (short integer vector)
->2 byte 103 (float 32 vector)
->2 byte 104 (float 64 vector)
->2 byte 105 (signed char vector)
->2 byte 106 (bit plane vector)
->2 byte 121 (feature vector)
->2 byte 122 (feature vector library)
->2 byte 124 (chain code)
->2 byte 126 (bit vector)
->2 byte 130 (graph)
->2 byte 131 (adjacency graph)
->2 byte 132 (adjacency graph library)
->2 string .VISIX (ascii text)
-
-#------------------------------------------------------------------------------
-# $File: vms,v 1.7 2013/03/09 22:36:00 christos Exp $
-# vms: file(1) magic for VMS executables (experimental)
-#
-# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt at uchicago.edu)
-
-# GRR 950122: I'm just guessing on these, based on inspection of the headers
-# of three executables each for Alpha and VAX architectures. The VAX files
-# all had headers similar to this:
-#
-# 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205
-# 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................
-#
-0 string \xb0\0\x30\0 VMS VAX executable
->44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
-#
-# The AXP files all looked like this, except that the byte at offset 0x22
-# was 06 in some of them and 07 in others:
-#
-# 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................
-# 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h...............
-# 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-# 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................
-# 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................
-#
-# GRR this test is still too general as it catches example adressen.dbt
-0 belong 0x03000000
->8 ubelong 0xec020000 VMS Alpha executable
->>75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption
-
-#------------------------------------------------------------------------------
-# $File: vmware,v 1.7 2009/09/19 16:28:13 christos Exp $
-# VMware specific files (deducted from version 1.1 and log file entries)
-# Anthon van der Neut (anthon at mnt.org)
-0 belong 0x4d52564e VMware nvram
-
-#------------------------------------------------------------------------------
-# $File: vorbis,v 1.18 2014/04/30 21:41:02 christos Exp $
-# vorbis: file(1) magic for Ogg/Vorbis files
-#
-# From Felix von Leitner <leitner at fefe.de>
-# Extended by Beni Cherniavsky <cben at crosswinds.net>
-# Further extended by Greg Wooledge <greg at wooledge.org>
-#
-# Most (everything but the number of channels and bitrate) is commented
-# out with `##' as it's not interesting to the average user. The most
-# probable things advanced users would want to uncomment are probably
-# the number of comments and the encoder version.
-#
-# FIXME: The first match has been made a search, so that it can skip
-# over prepended ID3 tags. This will work for MIME type detection, but
-# won't work for detecting other properties of the file (they all need
-# to be made relative to the search). In any case, if the file has ID3
-# tags, the ID3 information will be printed, not the Ogg information,
-# so until that's fixed, this doesn't matter.
-# FIXME[2]: Disable the above for now, since search assumes text mode.
-#
-# --- Ogg Framing ---
-#0 search/1000 OggS Ogg data
-0 string OggS Ogg data
-!:mime application/ogg
->4 byte !0 UNKNOWN REVISION %u
-##>4 byte 0 revision 0
->4 byte 0
-##>>14 lelong x (Serial %lX)
-# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
->>28 string \x7fFLAC \b, FLAC audio
-# non-Vorbis content: Theora
->>28 string \x80theora \b, Theora video
-# non-Vorbis content: Kate
->>28 string \x80kate\0\0\0\0 \b, Kate
->>>37 ubyte x v%u
->>>38 ubyte x \b.%u,
->>>40 byte 0 utf8 encoding,
->>>40 byte !0 unknown character encoding,
->>>60 string >\0 language %s,
->>>60 string \0 no language set,
->>>76 string >\0 category %s
->>>76 string \0 no category set
-# non-Vorbis content: Skeleton
->>28 string fishead\0 \b, Skeleton
->>>36 short x v%u
->>>40 short x \b.%u
-# non-Vorbis content: Speex
->>28 string Speex\ \ \ \b, Speex audio
-# non-Vorbis content: OGM
->>28 string \x01video\0\0\0 \b, OGM video
->>>37 string/c div3 (DivX 3)
->>>37 string/c divx (DivX 4)
->>>37 string/c dx50 (DivX 5)
->>>37 string/c xvid (XviD)
-# --- First vorbis packet - general header ---
->>28 string \x01vorbis \b, Vorbis audio,
->>>35 lelong !0 UNKNOWN VERSION %u,
-##>>>35 lelong 0 version 0,
->>>35 lelong 0
->>>>39 ubyte 1 mono,
->>>>39 ubyte 2 stereo,
->>>>39 ubyte >2 %u channels,
->>>>40 lelong x %u Hz
-# Minimal, nominal and maximal bitrates specified when encoding
->>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b,
-# The above tests if at least one of these is specified:
->>>>>52 lelong !-1
-# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
-# instead of -1.
-# Vorbis 1.0 uses 0 instead of -1.
->>>>>>52 lelong !0
->>>>>>>52 lelong !-1000
->>>>>>>>52 lelong x <%u
->>>>>48 lelong !-1
->>>>>>48 lelong x ~%u
->>>>>44 lelong !-1
->>>>>>44 lelong !-1000
->>>>>>>44 lelong !0
->>>>>>>>44 lelong x >%u
->>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps
-# -- Second vorbis header packet - the comments
-# A kludge to read the vendor string. It's a counted string, not a
-# zero-terminated one, so file(1) can't read it in a generic way.
-# libVorbis is the only one existing currently, so I detect specifically
-# it. The interesting value is the cvs date (8 digits decimal).
-# Post-RC1 Ogg files have the second header packet (and thus the version)
-# in a different place, so we must use an indirect offset.
->>>(84.b+85) string \x03vorbis
->>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I
->>>>>(84.b+120) string >00000000
-# Map to beta version numbers:
->>>>>>(84.b+120) string <20000508 (<beta1, prepublic)
->>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2)
->>>>>>(84.b+120) string >20000508
->>>>>>>(84.b+120) string <20001031 (beta2-3)
->>>>>>(84.b+120) string 20001031 (1.0 beta 3)
->>>>>>(84.b+120) string >20001031
->>>>>>>(84.b+120) string <20010225 (beta3-4)
->>>>>>(84.b+120) string 20010225 (1.0 beta 4)
->>>>>>(84.b+120) string >20010225
->>>>>>>(84.b+120) string <20010615 (beta4-RC1)
->>>>>>(84.b+120) string 20010615 (1.0 RC1)
->>>>>>(84.b+120) string 20010813 (1.0 RC2)
->>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1)
->>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2)
->>>>>>(84.b+120) string 20011217 (1.0 RC3)
->>>>>>(84.b+120) string 20011231 (1.0 RC3)
-# Some pre-1.0 CVS snapshots still had "Xiphphorus"...
->>>>>>(84.b+120) string >20011231 (pre-1.0 CVS)
-# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
->>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I
->>>>>(84.b+117) string >00000000
->>>>>>(84.b+117) string <20020717 (pre-1.0 CVS)
->>>>>>(84.b+117) string 20020717 (1.0)
->>>>>>(84.b+117) string 20030909 (1.0.1)
->>>>>>(84.b+117) string 20040629 (1.1.0 RC1)
-
-#------------------------------------------------------------------------------
-# $File: vxl,v 1.4 2009/09/19 16:28:13 christos Exp $
-# VXL: file(1) magic for VXL binary IO data files
-#
-# from Ian Scott <scottim at sf.net>
-#
-# VXL is a collection of C++ libraries for Computer Vision.
-# See the vsl chapter in the VXL Book for more info
-# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
-# http:/vxl.sf.net
-
-2 lelong 0x472b2c4e VXL data file,
->0 leshort >0 schema version no %d
-
-#------------------------------------------------------------------------------
-# $File: warc,v 1.3 2010/11/25 15:05:43 christos Exp $
-# warc: file(1) magic for WARC files
-
-0 string WARC/ WARC Archive
->5 string x version %.4s
-!:mime application/warc
-
-#------------------------------------------------------------------------------
-# Arc File Format from Internet Archive
-# see http://www.archive.org/web/researcher/ArcFileFormat.php
-0 string filedesc:// Internet Archive File
-!:mime application/x-ia-arc
->11 search/256 \x0A \b
->>&0 ubyte >0 \b version %c
-
-#------------------------------------------------------------------------------
-# weak: file(1) magic for very weak magic entries, disabled by default
-#
-# These entries are so weak that they might interfere identification of
-# other formats. Example include:
-# - Only identify for 1 or 2 bytes
-# - Match against very wide range of values
-# - Match against generic word in some spoken languages (e.g. English)
-
-# Summary: Computer Graphics Metafile
-# Extension: .cgm
-#0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile
-#0 beshort 0x3020 character Computer Graphics Metafile
-
-#0 string =!! Bennet Yee's "face" format
-
-#------------------------------------------------------------------------------
-# $File: windows,v 1.8 2014/04/30 21:41:02 christos Exp $
-# windows: file(1) magic for Microsoft Windows
-#
-# This file is mainly reserved for files where programs
-# using them are run almost always on MS Windows 3.x or
-# above, or files only used exclusively in Windows OS,
-# where there is no better category to allocate for.
-# For example, even though WinZIP almost run on Windows
-# only, it is better to treat them as "archive" instead.
-# For format usable in DOS, such as generic executable
-# format, please specify under "msdos" file.
-#
-
-
-# Summary: Outlook Express DBX file
-# Extension: .dbx
-# Created by: Christophe Monniez
-0 string \xCF\xAD\x12\xFE MS Outlook Express DBX file
->4 byte =0xC5 \b, message database
->4 byte =0xC6 \b, folder database
->4 byte =0xC7 \b, account information
->4 byte =0x30 \b, offline database
-
-
-# Summary: Windows crash dump
-# Extension: .dmp
-# Created by: Andreas Schuster (http://computer.forensikblog.de/)
-# Reference (1): http://computer.forensikblog.de/en/2008/02/64bit_magic.html
-# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)
-0 string PAGE
->4 string DUMP MS Windows 32bit crash dump
->>0x05c byte 0 \b, no PAE
->>0x05c byte 1 \b, PAE
->>0xf88 lelong 1 \b, full dump
->>0xf88 lelong 2 \b, kernel dump
->>0xf88 lelong 3 \b, small dump
->>0x068 lelong x \b, %d pages
->4 string DU64 MS Windows 64bit crash dump
->>0xf98 lelong 1 \b, full dump
->>0xf98 lelong 2 \b, kernel dump
->>0xf98 lelong 3 \b, small dump
->>0x090 lequad x \b, %lld pages
-
-
-# Summary: Vista Event Log
-# Extension: .evtx
-# Created by: Andreas Schuster (http://computer.forensikblog.de/)
-# Reference (1): http://computer.forensikblog.de/en/2007/05/some_magic.html
-0 string ElfFile\0 MS Windows Vista Event Log
->0x2a leshort x \b, %d chunks
->>0x10 lelong x \b (no. %d in use)
->0x18 lelong >1 \b, next record no. %d
->0x18 lelong =1 \b, empty
->0x78 lelong &1 \b, DIRTY
->0x78 lelong &2 \b, FULL
-
-
-# Summary: Windows 3.1 group files
-# Extension: .grp
-# Created by: unknown
-0 string \120\115\103\103 MS Windows 3.1 group files
-
-
-# Summary: Old format help files
-# Extension: .hlp
-# Created by: Dirk Jagdmann <doj at cubic.org>
-0 lelong 0x00035f3f MS Windows 3.x help file
-
-
-# Summary: Hyper terminal
-# Extension: .ht
-# Created by: unknown
-0 string HyperTerminal\
->15 string 1.0\ --\ HyperTerminal\ data\ file MS Windows HyperTerminal profile
-
-# http://ithreats.files.wordpress.com/2009/05/\
-# lnk_the_windows_shortcut_file_format.pdf
-# Summary: Windows shortcut
-# Extension: .lnk
-# Created by: unknown
-# 'L' + GUUID
-0 string \114\0\0\0\001\024\002\0\0\0\0\0\300\0\0\0\0\0\0\106 MS Windows shortcut
->20 lelong&1 1 \b, Item id list present
->20 lelong&2 2 \b, Points to a file or directory
->20 lelong&4 4 \b, Has Description string
->20 lelong&8 8 \b, Has Relative path
->20 lelong&16 16 \b, Has Working directory
->20 lelong&32 32 \b, Has command line arguments
->20 lelong&64 64 \b, Icon
->>56 lelong \b number=%d
->24 lelong&1 1 \b, Read-Only
->24 lelong&2 2 \b, Hidden
->24 lelong&4 4 \b, System
->24 lelong&8 8 \b, Volume Label
->24 lelong&16 16 \b, Directory
->24 lelong&32 32 \b, Archive
->24 lelong&64 64 \b, Encrypted
->24 lelong&128 128 \b, Normal
->24 lelong&256 256 \b, Temporary
->24 lelong&512 512 \b, Sparse
->24 lelong&1024 1024 \b, Reparse point
->24 lelong&2048 2048 \b, Compressed
->24 lelong&4096 4096 \b, Offline
->28 leqwdate x \b, ctime=%s
->36 leqwdate x \b, mtime=%s
->44 leqwdate x \b, atime=%s
->52 lelong x \b, length=%u, window=
->60 lelong&1 1 \bhide
->60 lelong&2 2 \bnormal
->60 lelong&4 4 \bshowminimized
->60 lelong&8 8 \bshowmaximized
->60 lelong&16 16 \bshownoactivate
->60 lelong&32 32 \bminimize
->60 lelong&64 64 \bshowminnoactive
->60 lelong&128 128 \bshowna
->60 lelong&256 256 \brestore
->60 lelong&512 512 \bshowdefault
-#>20 lelong&1 0
-#>>20 lelong&2 2
-#>>>(72.l-64) pstring/h x \b [%s]
-#>20 lelong&1 1
-#>>20 lelong&2 2
-#>>>(72.s) leshort x
-#>>>&75 pstring/h x \b [%s]
-
-# Summary: Outlook Personal Folders
-# Created by: unknown
-0 lelong 0x4E444221 Microsoft Outlook email folder
->10 leshort 0x0e (<=2002)
->10 leshort 0x17 (>=2003)
-
-
-# Summary: Windows help cache
-# Created by: unknown
-0 string \164\146\115\122\012\000\000\000\001\000\000\000 MS Windows help cache
-
-
-# Summary: IE cache file
-# Created by: Christophe Monniez
-0 string Client\ UrlCache\ MMF Internet Explorer cache file
->20 string >\0 version %s
-
-
-# Summary: Registry files
-# Created by: unknown
-# Modified by (1): Joerg Jenderek
-0 string regf MS Windows registry file, NT/2000 or above
-0 string CREG MS Windows 95/98/ME registry file
-0 string SHCC3 MS Windows 3.1 registry file
-
-
-# Summary: Windows Registry text
-# Extension: .reg
-# Submitted by: Abel Cheung <abelcheung at gmail.com>
-0 string REGEDIT4\r\n\r\n Windows Registry text (Win95 or above)
-0 string Windows\ Registry\ Editor\
->&0 string Version\ 5.00\r\n\r\n Windows Registry text (Win2K or above)
-
-# Windows *.INF *.INI files updated by Joerg Jenderek at Apr 2013
-# emtpy ,comment , section , unicode line
-0 regex/s \\`(\r\n|;|[[]|\xFF\xFE)
-# left bracket in section line
->&0 search/8192 [
-# http://en.wikipedia.org/wiki/Autorun.inf
-# http://msdn.microsoft.com/en-us/library/windows/desktop/cc144200.aspx
->>&0 regex/c \^(autorun)]\r\n
->>>&0 ubyte =0x5b INItialization configuration
-!:mime application/x-wine-extension-ini
-# From: Pal Tamas <folti at balabit.hu>
-# Autorun File
->>>&0 ubyte !0x5b Microsoft Windows Autorun file
-!:mime application/x-setupscript
-# http://msdn.microsoft.com/en-us/library/windows/hardware/ff549520(v=vs.85).aspx
-# version strings ASCII coded case-independent for Windows setup information script file
->>&0 regex/c \^(version|strings)] Windows setup INFormation
-!:mime application/x-setupscript
-#!:mime application/inf
-#!:mime application/x-wine-extension-inf
->>&0 regex/c \^(WinsockCRCList|OEMCPL)] Windows setup INFormation
-!:mime text/inf
-# http://www.winfaq.de/faq_html/Content/tip2500/onlinefaq.php?h=tip2653.htm
-# http://msdn.microsoft.com/en-us/library/windows/desktop/cc144102.aspx
-# .ShellClassInfo DeleteOnCopy LocalizedFileNames ASCII coded case-independent
->>&0 regex/c \^(\.ShellClassInfo|DeleteOnCopy|LocalizedFileNames)] Windows desktop.ini
-!:mime application/x-wine-extension-ini
-#!:mime text/plain
-# http://support.microsoft.com/kb/84709/
->>&0 regex/c \^(don't\ load)] Windows CONTROL.INI
-!:mime application/x-wine-extension-ini
->>&0 regex/c \^(ndishlp\\$|protman\\$|NETBEUI\\$)] Windows PROTOCOL.INI
-!:mime application/x-wine-extension-ini
-# http://technet.microsoft.com/en-us/library/cc722567.aspx
-# http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0137.htm
->>&0 regex/c \^(windows|Compatibility|embedding)] Windows WIN.INI
-!:mime application/x-wine-extension-ini
-# http://en.wikipedia.org/wiki/SYSTEM.INI
->>&0 regex/c \^(boot|386enh|drivers)] Windows SYSTEM.INI
-!:mime application/x-wine-extension-ini
-# http://www.mdgx.com/newtip6.htm
->>&0 regex/c \^(SafeList)] Windows IOS.INI
-!:mime application/x-wine-extension-ini
-# http://en.wikipedia.org/wiki/NTLDR Windows Boot Loader information
->>&0 regex/c \^(boot\x20loader)] Windows boot.ini
-!:mime application/x-wine-extension-ini
->>>&0 ubyte x
-# http://en.wikipedia.org/wiki/CONFIG.SYS
->>&0 regex/c \^(menu)]\r\n MS-DOS CONFIG.SYS
-# http://support.microsoft.com/kb/118579/
->>&0 regex/c \^(Paths)]\r\n MS-DOS MSDOS.SYS
-# VERS string unicoded case-independent
->>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0056004500520053
-# ION] string unicoded case-independent
->>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x0049004f004e005d Windows setup INFormation
-!:mime application/x-setupscript
-# STRI string unicoded case-independent
->>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0053005400520049
-# NGS] string unicoded case-independent
->>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x004e00470053005D Windows setup INFormation
-!:mime application/x-setupscript
-# unknown keyword after opening bracket
->>&0 default x
->>>&0 search/8192 [
-# version Strings FileIdentification
->>>>&0 string/c version Windows setup INFormation
-!:mime application/x-setupscript
-# VERS string unicoded case-independent
->>>>&0 ubequad&0xFFdfFFdfFFdfFFdf 0x0056004500520053
-# ION] string unicoded case-independent
->>>>>&0 ubequad&0xFFdfFFdfFFdfFFff 0x0049004f004e005d Windows setup INFormation
-!:mime application/x-setupscript
-# http://en.wikipedia.org/wiki/Initialization_file Windows Initialization File or other
-#>>>>&0 default x Generic INItialization configuration
-#!:mime application/x-wine-extension-ini
-
-# Windows Precompiled INF files *.PNF added by Joerg Jenderek at Mar 2013 of _PNF_HEADER inf.h
-# http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/setup/setupapi/inf.h__.htm
-# GRR: line below too general as it catches also PDP-11 UNIX/RT ldp
-0 leshort&0xFeFe 0x0000
-# test for unused null bits in PNF_FLAGs
->4 ulelong&0xFCffFe00 0x00000000
-# only found 58h for Offset of WinDirPath immediately after _PNF_HEADER structure
->>68 ulelong >0x57
-# test for zero high byte of InfValueBlockSize, followed by WinDirPath like
-# C:\WINDOWS (ASCII 0x433a5c.. , unicode 0x43003a005c..) or X:\MININT
->>>(68.l-1) ubelong&0xffE0C519 =0x00400018 Windows Precompiled iNF
-!:mime application/x-pnf
-# currently only found Major Version=1 and Minor Version=1
-#>>>>0 uleshort =0x0101
-#>>>>>1 ubyte x \b, version %u
-#>>>>>0 ubyte x \b.%u
->>>>0 uleshort !0x0101
->>>>>1 ubyte x \b, version %u
->>>>>0 ubyte x \b.%u
-# 1 ,2 (windows 98 SE)
-#>>>>2 uleshort =2 \b, InfStyle %u
->>>>2 uleshort !2 \b, InfStyle %u
-# PNF_FLAG_IS_UNICODE 0x00000001
-# PNF_FLAG_HAS_STRINGS 0x00000002
-# PNF_FLAG_SRCPATH_IS_URL 0x00000004
-# PNF_FLAG_HAS_VOLATILE_DIRIDS 0x00000008
-# PNF_FLAG_INF_VERIFIED 0x00000010
-# PNF_FLAG_INF_DIGITALLY_SIGNED 0x00000020
-# ?? 0x00000100
-# ?? 0x01000000
-# ?? 0x02000000
->>>>4 ulelong&0x00000001 0x00000001 \b, unicoded
->>>>4 ulelong&0x00000020 0x00000020 \b, digitally signed
-#>>>>8 ulelong x \b, InfSubstValueListOffset 0x%x
-# many 0, 1 lmouusb.PNF, 2 linkfx10.PNF , f webfdr16.PNF
-#>>>>12 uleshort x \b, InfSubstValueCount 0x%x
-# only < 9 found
-#>>>>14 uleshort x \b, InfVersionDatumCount 0x%x
-# only found values lower 0x0000ffff
-#>>>>16 ulelong x \b, InfVersionDataSize 0x%x
-# only found positive values lower 0x00ffFFff for InfVersionDataOffset
->>>>20 ulelong x \b, at 0x%x
->>>>4 ulelong&0x00000001 =0x00000001
-# case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature
->>>>>(20.l) lestring16 x "%s"
->>>>4 ulelong&0x00000001 !0x00000001
->>>>>(20.l) string x "%s"
-# FILETIME is number of 100-nanosecond intervals since 1 January 1601
-#>>>>24 ulequad x \b, InfVersionLastWriteTime %16.16llx
-# only found values lower 0x00ffFFff
-#>>>>32 ulelong x \b, StringTableBlockOffset 0x%x
-#>>>>36 ulelong x \b, StringTableBlockSize 0x%x
-#>>>>40 ulelong x \b, InfSectionCount 0x%x
-#>>>>44 ulelong x \b, InfSectionBlockOffset 0x%x
-#>>>>48 ulelong x \b, InfSectionBlockSize 0x%x
-#>>>>52 ulelong x \b, InfLineBlockOffset 0x%x
-#>>>>56 ulelong x \b, InfLineBlockSize 0x%x
-#>>>>60 ulelong x \b, InfValueBlockOffset 0x%x
-#>>>>64 ulelong x \b, InfValueBlockSize 0x%x
-# WinDirPathOffset
-#>>>>68 ulelong x \b, at 0x%x
->>>>68 ulelong >0x57
->>>>>4 ulelong&0x00000001 =0x00000001
->>>>>>(68.l) ubequad =0x43003a005c005700
-# normally unicoded C:\Windows
-#>>>>>>>(68.l) lestring16 x \b, WinDirPath "%s"
->>>>>>(68.l) ubequad !0x43003a005c005700
->>>>>>>(68.l) lestring16 x \b, WinDirPath "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
-# normally ASCII C:\WINDOWS
-#>>>>>>(68.l) string =C:\\WINDOWS \b, WinDirPath "%s"
->>>>>>(68.l) string !C:\\WINDOWS \b, WinDirPath "%s"
-# found OsLoaderPathOffset values often 0 , once 70h corelist.PNF, once 68h ASCII machine.PNF
-#>>>>72 ulelong >0 \b, at 0x%x
->>>>72 ulelong >0 \b,
->>>>>4 ulelong&0x00000001 =0x00000001
->>>>>>(72.l) lestring16 x OsLoaderPath "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
-# seldom C:\ instead empty
->>>>>>(72.l) string x OsLoaderPath "%s"
-# 1fdh
-#>>>>76 uleshort x \b, StringTableHashBucketCount 0x%x
->>>>78 uleshort !0x407 \b, LanguageId %x
-# only 407h found
-#>>>>78 uleshort =0x407 \b, LanguageId %x
-# InfSourcePathOffset often 0
-#>>>>80 ulelong >0 \b, at 0x%x
->>>>80 ulelong >0 \b,
->>>>>4 ulelong&0x00000001 =0x00000001
->>>>>>(80.l) lestring16 x SourcePath "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
->>>>>>(80.l) string >\0 SourcePath "%s"
-# OriginalInfNameOffset often 0
-#>>>>84 ulelong >0 \b, at 0x%x
->>>>84 ulelong >0 \b,
->>>>>4 ulelong&0x00000001 =0x00000001
->>>>>>(84.l) lestring16 x InfName "%s"
->>>>>4 ulelong&0x00000001 !0x00000001
->>>>>>(84.l) string >\0 InfName "%s"
-
-
-#------------------------------------------------------------------------------
-# $File: wireless,v 1.2 2009/09/19 16:28:13 christos Exp $
-# wireless-regdb: file(1) magic for CRDA wireless-regdb file format
-#
-0 string RGDB CRDA wireless regulatory database file
->4 belong 19 (Version 1)
-
-#------------------------------------------------------------------------------
-# $File: wordprocessors,v 1.18 2013/06/03 19:07:29 christos Exp $
-# wordprocessors: file(1) magic fo word processors.
-#
-####### PWP file format used on Smith Corona Personal Word Processors:
-2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040'92 Smith Corona PWP
->24 byte 2 \b, single spaced
->24 byte 3 \b, 1.5 spaced
->24 byte 4 \b, double spaced
->25 byte 0x42 \b, letter
->25 byte 0x54 \b, legal
->26 byte 0x46 \b, A4
-
-#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-0 string \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable file
->15 byte 0 Optimized for Intel
->15 byte 1 Optimized for Non-Intel
-1 string WPC (Corel/WP)
->8 short 257 WordPerfect macro
->8 short 258 WordPerfect help file
->8 short 259 WordPerfect keyboard file
->8 short 266 WordPerfect document
->8 short 267 WordPerfect dictionary
->8 short 268 WordPerfect thesaurus
->8 short 269 WordPerfect block
->8 short 270 WordPerfect rectangular block
->8 short 271 WordPerfect column block
->8 short 272 WordPerfect printer data
->8 short 275 WordPerfect printer data
->8 short 276 WordPerfect driver resource data
->8 short 279 WordPerfect hyphenation code
->8 short 280 WordPerfect hyphenation data
->8 short 281 WordPerfect macro resource data
->8 short 283 WordPerfect hyphenation lex
->8 short 285 WordPerfect wordlist
->8 short 286 WordPerfect equation resource data
->8 short 289 WordPerfect spell rules
->8 short 290 WordPerfect dictionary rules
->8 short 295 WordPerfect spell rules (Microlytics)
->8 short 299 WordPerfect settings file
->8 short 301 WordPerfect 4.2 document
->8 short 325 WordPerfect dialog file
->8 short 332 WordPerfect button bar
->8 short 513 Shell macro
->8 short 522 Shell definition
->8 short 769 Notebook macro
->8 short 770 Notebook help file
->8 short 771 Notebook keyboard file
->8 short 778 Notebook definition
->8 short 1026 Calculator help file
->8 short 1538 Calendar help file
->8 short 1546 Calendar data file
->8 short 1793 Editor macro
->8 short 1794 Editor help file
->8 short 1795 Editor keyboard file
->8 short 1817 Editor macro resource file
->8 short 2049 Macro editor macro
->8 short 2050 Macro editor help file
->8 short 2051 Macro editor keyboard file
->8 short 2305 PlanPerfect macro
->8 short 2306 PlanPerfect help file
->8 short 2307 PlanPerfect keyboard file
->8 short 2314 PlanPerfect worksheet
->8 short 2319 PlanPerfect printer definition
->8 short 2322 PlanPerfect graphic definition
->8 short 2323 PlanPerfect data
->8 short 2324 PlanPerfect temporary printer
->8 short 2329 PlanPerfect macro resource data
->8 byte 11 Mail
->8 short 2818 help file
->8 short 2821 distribution list
->8 short 2826 out box
->8 short 2827 in box
->8 short 2836 users archived mailbox
->8 short 2837 archived message database
->8 short 2838 archived attachments
->8 short 3083 Printer temporary file
->8 short 3330 Scheduler help file
->8 short 3338 Scheduler in file
->8 short 3339 Scheduler out file
->8 short 3594 GroupWise settings file
->8 short 3601 GroupWise directory services
->8 short 3627 GroupWise settings file
->8 short 4362 Terminal resource data
->8 short 4363 Terminal resource data
->8 short 4395 Terminal resource data
->8 short 4619 GUI loadable text
->8 short 4620 graphics resource data
->8 short 4621 printer settings file
->8 short 4622 port definition file
->8 short 4623 print queue parameters
->8 short 4624 compressed file
->8 short 5130 Network service msg file
->8 short 5131 Network service msg file
->8 short 5132 Async gateway login msg
->8 short 5134 GroupWise message file
->8 short 7956 GroupWise admin domain database
->8 short 7957 GroupWise admin host database
->8 short 7959 GroupWise admin remote host database
->8 short 7960 GroupWise admin ADS deferment data file
->8 short 8458 IntelliTAG (SGML) compiled DTD
->8 long 18219264 WordPerfect graphic image (1.0)
->8 long 18219520 WordPerfect graphic image (2.0)
-#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-
-# Hangul (Korean) Word Processor File
-0 string HWP\ Document\ File Hangul (Korean) Word Processor File 3.0
-# From: Won-Kyu Park <wkpark at kldp.org>
-512 string R\0o\0o\0t\0 Hangul (Korean) Word Processor File 2000
-!:mime application/x-hwp
-
-# CosmicBook, from Benoit Rouits
-0 string CSBK Ted Neslson's CosmicBook hypertext file
-
-2 string EYWR AmigaWriter file
-
-# chi: file(1) magic for ChiWriter files
-0 string \\1cw\ ChiWriter file
->5 string >\0 version %s
-0 string \\1cw ChiWriter file
-
-# Quark Express from http://www.garykessler.net/library/file_sigs.html
-2 string IIXPR3 Intel Quark Express Document (English)
-2 string IIXPRa Intel Quark Express Document (Korean)
-2 string MMXPR3 Motorola Quark Express Document (English)
-!:mime application/x-quark-xpress-3
-2 string MMXPRa Motorola Quark Express Document (Korean)
-
-# adobe indesign (document, whatever...) from querkan
-0 belong 0x0606edf5 Adobe InDesign
->16 string DOCUMENT Document
-
-#------------------------------------------------------------------------------
-# ichitaro456: file(1) magic for Just System Word Processor Ichitaro
-#
-# Contributor kenzo-:
-# Reversed-engineered JS Ichitaro magic numbers
-#
-
-0 string DOC
->43 byte 0x14 Just System Word Processor Ichitaro v4
-!:mime application/x-ichitaro4
->144 string JDASH application/x-ichitaro4
-
-0 string DOC
->43 byte 0x15 Just System Word Processor Ichitaro v5
-!:mime application/x-ichitaro5
-
-0 string DOC
->43 byte 0x16 Just System Word Processor Ichitaro v6
-!:mime application/x-ichitaro6
-
-# Type: Freemind mindmap documents
-# From: Jamie Thompson <debian-bugs at jamie-thompson.co.uk>
-0 string/w \<map\ version Freemind document
-!:mime application/x-freemind
-
-# Type: Freeplane mindmap documents
-# From: Felix Natter <fnatter at gmx.net>
-0 string/w \<map\ version="freeplane Freeplane document
-!:mime application/x-freeplane
-
-# Type: Scribus
-# From: Werner Fink <werner at suse.de>
-0 string \<SCRIBUSUTF8\ Version Scribus Document
-0 string \<SCRIBUSUTF8NEW\ Version Scribus Document
-!:mime application/x-scribus
-
-# help files .hlp compiled from html and used by gfxboot added by Joerg Jenderek
-# markups page=0x04,label=0x12, followed by strings like "opt" or "main" and title=0x14
-0 ulelong&0x8080FFFF 0x00001204 gfxboot compiled html help file
-
-#------------------------------------------------------------------------------
-# $File: wsdl,v 1.3 2013/02/06 14:18:52 christos Exp $
-# wsdl: PHP WSDL Cache, http://www.php.net/manual/en/book.soap.php
-# Cache format extracted from source:
-# http://svn.php.net/viewvc/php/php-src/trunk/ext/soap/php_sdl.c?revision=HEAD&view=markup
-# Requires file >= 5.05, see http://mx.gw.com/pipermail/file/2010/000683.html
-# By Elan Ruusamae <glen at delfi.ee>, Patryk Zawadzki <patrys at pld-linux.org>, 2010-2011
-0 string wsdl PHP WSDL cache,
->4 byte x version 0x%02x
->6 ledate x \b, created %s
-
-# uri
->10 lelong <0x7fffffff
->>10 pstring/l x \b, uri: "%s"
-
-# source
->>>&0 lelong <0x7fffffff
->>>>&-4 pstring/l x \b, source: "%s"
-
-# target_ns
->>>>>&0 lelong <0x7fffffff
->>>>>>&-4 pstring/l x \b, target_ns: "%s"
-
-#------------------------------------------------------------------------------
-# $File: xdelta,v 1.5 2011/08/08 09:01:05 christos Exp $
-# file(1) magic(5) data for xdelta Josh MacDonald <jmacd at CS.Berkeley.EDU>
-#
-0 string %XDELTA% XDelta binary patch file 0.14
-0 string %XDZ000% XDelta binary patch file 0.18
-0 string %XDZ001% XDelta binary patch file 0.20
-0 string %XDZ002% XDelta binary patch file 1.0
-0 string %XDZ003% XDelta binary patch file 1.0.4
-0 string %XDZ004% XDelta binary patch file 1.1
-
-0 string \xD6\xC3\xC4\x00 VCDIFF binary diff
-
-#------------------------------------------------------------------------------
-# $File: xenix,v 1.9 2009/09/19 16:28:13 christos Exp $
-# xenix: file(1) magic for Microsoft Xenix
-#
-# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
-# model" lifted from "magic.xenix", with comment "derived empirically;
-# treat as folklore until proven"
-#
-# "small model", "large model", "huge model" stuff lifted from XXX
-#
-# XXX - "x.out" collides with PDP-11 archives
-#
-0 string core core file (Xenix)
-0 byte 0x80 8086 relocatable (Microsoft)
-0 leshort 0xff65 x.out
->2 string __.SYMDEF randomized
->0 byte x archive
-0 leshort 0x206 Microsoft a.out
->8 leshort 1 Middle model
->0x1e leshort &0x10 overlay
->0x1e leshort &0x2 separate
->0x1e leshort &0x4 pure
->0x1e leshort &0x800 segmented
->0x1e leshort &0x400 standalone
->0x1e leshort &0x8 fixed-stack
->0x1c byte &0x80 byte-swapped
->0x1c byte &0x40 word-swapped
->0x10 lelong >0 not-stripped
->0x1e leshort ^0xc000 pre-SysV
->0x1e leshort &0x4000 V2.3
->0x1e leshort &0x8000 V3.0
->0x1c byte &0x4 86
->0x1c byte &0xb 186
->0x1c byte &0x9 286
->0x1c byte &0xa 386
->0x1f byte <0x040 small model
->0x1f byte =0x048 large model
->0x1f byte =0x049 huge model
->0x1e leshort &0x1 executable
->0x1e leshort ^0x1 object file
->0x1e leshort &0x40 Large Text
->0x1e leshort &0x20 Large Data
->0x1e leshort &0x120 Huge Objects Enabled
->0x10 lelong >0 not stripped
-
-0 leshort 0x140 old Microsoft 8086 x.out
->0x3 byte &0x4 separate
->0x3 byte &0x2 pure
->0 byte &0x1 executable
->0 byte ^0x1 relocatable
->0x14 lelong >0 not stripped
-
-0 lelong 0x206 b.out
->0x1e leshort &0x10 overlay
->0x1e leshort &0x2 separate
->0x1e leshort &0x4 pure
->0x1e leshort &0x800 segmented
->0x1e leshort &0x400 standalone
->0x1e leshort &0x1 executable
->0x1e leshort ^0x1 object file
->0x1e leshort &0x4000 V2.3
->0x1e leshort &0x8000 V3.0
->0x1c byte &0x4 86
->0x1c byte &0xb 186
->0x1c byte &0x9 286
->0x1c byte &0x29 286
->0x1c byte &0xa 386
->0x1e leshort &0x4 Large Text
->0x1e leshort &0x2 Large Data
->0x1e leshort &0x102 Huge Objects Enabled
-
-0 leshort 0x580 XENIX 8086 relocatable or 80286 small model
-
-#------------------------------------------------------------------------------
-# $File: xilinx,v 1.7 2014/04/30 21:41:02 christos Exp $
-# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.
-# Xilinx-Magic at RevRagnarok.com
-# Got the info from FPGA-FAQ 0026
-#
-# Rewritten to use pstring/H instead of hardcoded lengths by O. Freyermuth,
-# fixes at least reading of bitfiles from Spartan 2, 3, 6.
-# http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm
-#
-# First there is the sync header and its length
-0 beshort 0x0009
->2 belong =0x0ff00ff0
->>&0 belong =0x0ff00ff0
->>>&0 byte =0x00
->>>&1 beshort =0x0001
->>>&3 string a Xilinx BIT data
-# Next is a Pascal-style string with the NCD name. We want to capture that.
->>>>&0 pstring/H x - from %s
-# And then 'b'
->>>>>&1 string b
-# Then the model / part number:
->>>>>>&0 pstring/H x - for %s
-# Then 'c'
->>>>>>>&1 string c
-# Then the build-date
->>>>>>>>&0 pstring/H x - built %s
-# Then 'd'
->>>>>>>>>&1 string d
-# Then the build-time
->>>>>>>>>>&0 pstring/H x \b(%s)
-# Then 'e'
->>>>>>>>>>>&1 string e
-# And length of data
->>>>>>>>>>>>&0 belong x - data length 0x%x
-
-# Raw bitstream files
-0 long 0xffffffff
->&0 belong 0xaa995566 Xilinx RAW bitstream (.BIN)
-
-#------------------------------------------------------------------------------
-# $File: xo65,v 1.4 2009/09/19 16:28:13 christos Exp $
-# xo65 object files
-# From: "Ullrich von Bassewitz" <uz at 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
-
-#------------------------------------------------------------------------------
-# $File: xwindows,v 1.9 2014/04/30 21:41:02 christos Exp $
-# xwindows: file(1) magic for various X/Window system file formats.
-
-# Compiled X Keymap
-# XKM (compiled X keymap) files (including version and byte ordering)
-1 string mkx Compiled XKB Keymap: lsb,
->0 byte >0 version %d
->0 byte =0 obsolete
-0 string xkm Compiled XKB Keymap: msb,
->3 byte >0 version %d
->3 byte =0 obsolete
-
-# xfsdump archive
-0 string xFSdump0 xfsdump archive
->8 belong x (version %d)
-
-# Jaleo XFS files
-0 long 395726 Jaleo XFS file
->4 long x - version %d
->8 long x - [%d -
->20 long x \b%dx
->24 long x \b%dx
->28 long 1008 \bYUV422]
->28 long 1000 \bRGB24]
-
-# Xcursor data
-# X11 mouse cursor format defined in libXcursor, see
-# http://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html
-# http://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h
-0 string Xcur Xcursor data
-!:mime image/x-xcursor
->10 leshort x version %d
->>8 leshort x \b.%d
-#------------------------------------------------------------------------------
-# zfs: file(1) magic for ZFS dumps
-#
-# From <rea-fbsd at codelabs.ru>
-# ZFS dump header has the following structure (as per zfs_ioctl.h
-# in FreeBSD with drr_type is set to DRR_BEGIN)
-#
-# enum {
-# DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
-# DRR_WRITE, DRR_FREE, DRR_END,
-# } drr_type;
-# uint32_t drr_pad;
-# uint64_t drr_magic;
-# uint64_t drr_version;
-# uint64_t drr_creation_time;
-# dmu_objset_type_t drr_type;
-# uint32_t drr_pad;
-# uint64_t drr_toguid;
-# uint64_t drr_fromguid;
-# char drr_toname[MAXNAMELEN];
-#
-# Backup magic is 0x00000002f5bacbac (quad word)
-# The drr_type is defined as
-# typedef enum dmu_objset_type {
-# DMU_OST_NONE,
-# DMU_OST_META,
-# DMU_OST_ZFS,
-# DMU_OST_ZVOL,
-# DMU_OST_OTHER, /* For testing only! */
-# DMU_OST_ANY, /* Be careful! */
-# DMU_OST_NUMTYPES
-# } dmu_objset_type_t;
-#
-# Almost all uint64_t fields are printed as the 32-bit ones (with high
-# 32 bits zeroed), because there is no simple way to print them as the
-# full 64-bit values.
-
-# Big-endian values
-8 string \000\000\000\002\365\272\313\254 ZFS shapshot (big-endian machine),
->20 belong x version %u,
->32 belong 0 type: NONE,
->32 belong 1 type: META,
->32 belong 2 type: ZFS,
->32 belong 3 type: ZVOL,
->32 belong 4 type: OTHER,
->32 belong 5 type: ANY,
->32 belong >5 type: UNKNOWN (%u),
->40 byte x destination GUID: %02X
->41 byte x %02X
->42 byte x %02X
->43 byte x %02X
->44 byte x %02X
->45 byte x %02X
->46 byte x %02X
->47 byte x %02X,
->48 ulong >0
->>52 ulong >0
->>>48 byte x source GUID: %02X
->>>49 byte x %02X
->>>50 byte x %02X
->>>51 byte x %02X
->>>52 byte x %02X
->>>53 byte x %02X
->>>54 byte x %02X
->>>55 byte x %02X,
->56 string >\0 name: '%s'
-
-# Little-endian values
-8 string \254\313\272\365\002\000\000\000 ZFS shapshot (little-endian machine),
->16 lelong x version %u,
->32 lelong 0 type: NONE,
->32 lelong 1 type: META,
->32 lelong 2 type: ZFS,
->32 lelong 3 type: ZVOL,
->32 lelong 4 type: OTHER,
->32 lelong 5 type: ANY,
->32 lelong >5 type: UNKNOWN (%u),
->47 byte x destination GUID: %02X
->46 byte x %02X
->45 byte x %02X
->44 byte x %02X
->43 byte x %02X
->42 byte x %02X
->41 byte x %02X
->40 byte x %02X,
->48 ulong >0
->>52 ulong >0
->>>55 byte x source GUID: %02X
->>>54 byte x %02X
->>>53 byte x %02X
->>>52 byte x %02X
->>>51 byte x %02X
->>>50 byte x %02X
->>>49 byte x %02X
->>>48 byte x %02X,
->56 string >\0 name: '%s'
-
-#------------------------------------------------------------------------------
-# $File: zilog,v 1.7 2009/09/19 16:28:13 christos Exp $
-# zilog: file(1) magic for Zilog Z8000.
-#
-# Was it big-endian or little-endian? My Product Specification doesn't
-# say.
-#
-0 long 0xe807 object file (z8000 a.out)
-0 long 0xe808 pure object file (z8000 a.out)
-0 long 0xe809 separate object file (z8000 a.out)
-0 long 0xe805 overlay object file (z8000 a.out)
-
-#------------------------------------------------------------------------------
-# $File: zyxel,v 1.6 2009/09/19 16:28:13 christos Exp $
-# zyxel: file(1) magic for ZyXEL modems
-#
-# From <rob at pe1chl.ampr.org>
-# These are the /etc/magic entries to decode datafiles as used for the
-# ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a
-# ZyXEL-defined standard)
-
-0 string ZyXEL\002 ZyXEL voice data
->10 byte 0 - CELP encoding
->10 byte&0x0B 1 - ADPCM2 encoding
->10 byte&0x0B 2 - ADPCM3 encoding
->10 byte&0x0B 3 - ADPCM4 encoding
->10 byte&0x0B 8 - New ADPCM3 encoding
->10 byte&0x04 4 with resync
Deleted: trunk/contrib/file/magic2mime
===================================================================
--- trunk/contrib/file/magic2mime 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/magic2mime 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,69 +0,0 @@
-#! /usr/bin/env perl
-# -*- PERL -*-
-# $File: magic2mime,v 1.4 2006/11/25 18:36:10 christos Exp $
-# Copyright (c) 1996, 1997 vax at linkdead.paranoia.com (VaX#n8)
-#
-# Usage: echo 'your-file-output-here' | file_to_ctype.pl
-# file -b files... | file_to_ctype.pl
-# It acts like a filter, reading from STDIN and any files on the command
-# line, printing to STDOUT.
-
-## refs
-# http://www.faqs.org/faqs/mail/mime-faq/part1/index.html
-# comp.mail.mime FAQ
-# ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types
-# assigned content-types
-# ftp://ftp.uu.net/inet/rfc/rfc-index
-# RFC index; search for MIME
-
- at mapping =
-(
- # defaults
- 'data', 'application/octet-stream',
- 'text', 'text/plain',
- # more specific
- '^Rich Text Format data', 'text/richtext',
- '^HTML document text', 'text/html',
- '^exported SGML document text', 'text/sgml',
- 'mail text', 'message/rfc822',
- 'news text', 'message/news',
- '^PostScript document text', 'application/postscript',
- '^BinHex binary text', 'application/mac-binhex40',
- '^Zip archive data', 'application/zip',
- '^Microsoft Word', 'application/msword',
- '^PGP key', 'application/pgp-keys',
- '^PGP encrypted', 'application/pgp-encrypted',
- '^PGP armored data signature', 'application/pgp-signature',
- '^JPEG image', 'image/jpeg',
- '^GIF image', 'image/gif',
- '^PNG image', 'image/png',
- '^TIFF image', 'image/tiff',
- 'Computer Graphics Metafile', 'image/cgf',
- '^Sun/NeXT audio data', 'audio/basic',
- '^MPEG', 'video/mpeg',
- '^Apple QuickTime movie', 'video/quicktime',
- '^DICOM medical imaging data', 'application/dicom',
- # made up by me
- '^bitmap', 'image/x-bitmap',
- '^PC bitmap data, Windows 3.x format', 'image/x-msw3bmp',
- '^FLI', 'video/x-fli',
- '^FLC', 'video/x-flc',
- 'AVI data', 'video/x-avi',
- 'WAVE', 'audio/x-wav',
- 'VOC', 'audio/x-voc',
-);
-
-local($mimetype,$index,$regexp);
-while (<>)
- {
- chop;
- $index = $#mapping - 1;
- while ($index > -1 && !defined($mimetype))
- {
- $mimetype = $mapping[$index + 1] if (/$mapping[$index]/);
- $index -= 2;
- }
- print "$mimetype\n";
- undef $mimetype; # hack
- }
-0;
Added: trunk/contrib/file/missing
===================================================================
--- trunk/contrib/file/missing (rev 0)
+++ trunk/contrib/file/missing 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake at gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
Deleted: trunk/contrib/file/mkinstalldirs
===================================================================
--- trunk/contrib/file/mkinstalldirs 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/mkinstalldirs 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,161 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2006-05-11.19
-
-# Original author: Noah Friedman <friedman at prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake at gnu.org> or send patches to
-# <automake-patches at gnu.org>.
-
-nl='
-'
-IFS=" "" $nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake at gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case $1 in
- -h | --help | --h*) # -h for help
- echo "$usage"
- exit $?
- ;;
- -m) # -m PERM arg
- shift
- test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
- dirmode=$1
- shift
- ;;
- --version)
- echo "$0 $scriptversion"
- exit $?
- ;;
- --) # stop option processing
- shift
- break
- ;;
- -*) # unknown option
- echo "$usage" 1>&2
- exit 1
- ;;
- *) # first non-opt arg
- break
- ;;
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
- 0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error. This is a problem when calling mkinstalldirs
-# from a parallel make. We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
- '')
- if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- else
- # On NextStep and OpenStep, the `mkdir' command does not
- # recognize any option. It will interpret all options as
- # directories to create, and then abort because `.' already
- # exists.
- test -d ./-p && rmdir ./-p
- test -d ./--version && rmdir ./--version
- fi
- ;;
- *)
- if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
- test ! -d ./--version; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- else
- # Clean up after NextStep and OpenStep mkdir.
- for d in ./-m ./-p ./--version "./$dirmode";
- do
- test -d $d && rmdir $d
- done
- fi
- ;;
-esac
-
-for file
-do
- case $file in
- /*) pathcomp=/ ;;
- *) pathcomp= ;;
- esac
- oIFS=$IFS
- IFS=/
- set fnord $file
- shift
- IFS=$oIFS
-
- for d
- do
- test "x$d" = x && continue
-
- pathcomp=$pathcomp$d
- case $pathcomp in
- -*) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
- lasterr=
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp=$pathcomp/
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
Deleted: trunk/contrib/file/mygetopt.h
===================================================================
--- trunk/contrib/file/mygetopt.h 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/mygetopt.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,68 +0,0 @@
-/* $NetBSD: getopt.h,v 1.8 2007/11/06 19:21:18 christos Exp $ */
-
-/*-
- * Copyright (c) 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Dieter Baron and Thomas Klausner.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _GETOPT_H_
-#define _GETOPT_H_
-
-#include <unistd.h>
-
-/*
- * Gnu like getopt_long() and BSD4.4 getsubopt()/optreset extensions
- */
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-struct option {
- /* name of long option */
- const char *name;
- /*
- * one of no_argument, required_argument, and optional_argument:
- * whether option takes an argument
- */
- int has_arg;
- /* if not NULL, set *flag to val when option found */
- int *flag;
- /* if flag not NULL, value to set *flag to; else return value */
- int val;
-};
-
-int getopt_long(int, char * const *, const char *,
- const struct option *, int *);
-
-#endif /* !_GETOPT_H_ */
Deleted: trunk/contrib/file/pread.c
===================================================================
--- trunk/contrib/file/pread.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/pread.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,14 +0,0 @@
-#include "file.h"
-#ifndef lint
-FILE_RCSID("@(#)$File: pread.c,v 1.2 2013/04/02 16:23:07 christos Exp $")
-#endif /* lint */
-#include <fcntl.h>
-#include <unistd.h>
-
-ssize_t
-pread(int fd, void *buf, size_t len, off_t off) {
- if (lseek(fd, off, SEEK_SET) == (off_t)-1)
- return -1;
-
- return read(fd, buf, len);
-}
Deleted: trunk/contrib/file/print.c
===================================================================
--- trunk/contrib/file/print.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/print.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,275 +0,0 @@
-/*
- * Copyright (c) Ian F. Darwin 1986-1995.
- * Software written by Ian F. Darwin and others;
- * maintained 1995-present by Christos Zoulas and others.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * print.c - debugging printout routines
- */
-
-#include "file.h"
-
-#ifndef lint
-FILE_RCSID("@(#)$File: print.c,v 1.76 2013/02/26 18:25:00 christos Exp $")
-#endif /* lint */
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <time.h>
-
-#define SZOF(a) (sizeof(a) / sizeof(a[0]))
-
-#include "cdf.h"
-
-#ifndef COMPILE_ONLY
-protected void
-file_mdump(struct magic *m)
-{
- static const char optyp[] = { FILE_OPS };
- char tbuf[26];
-
- (void) fprintf(stderr, "%u: %.*s %u", m->lineno,
- (m->cont_level & 7) + 1, ">>>>>>>>", m->offset);
-
- if (m->flag & INDIR) {
- (void) fprintf(stderr, "(%s,",
- /* Note: type is unsigned */
- (m->in_type < file_nnames) ? file_names[m->in_type] :
- "*bad in_type*");
- if (m->in_op & FILE_OPINVERSE)
- (void) fputc('~', stderr);
- (void) fprintf(stderr, "%c%u),",
- ((size_t)(m->in_op & FILE_OPS_MASK) <
- SZOF(optyp)) ? optyp[m->in_op & FILE_OPS_MASK] : '?',
- m->in_offset);
- }
- (void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
- /* Note: type is unsigned */
- (m->type < file_nnames) ? file_names[m->type] : "*bad type");
- if (m->mask_op & FILE_OPINVERSE)
- (void) fputc('~', stderr);
-
- if (IS_STRING(m->type)) {
- if (m->str_flags) {
- (void) fputc('/', stderr);
- if (m->str_flags & STRING_COMPACT_WHITESPACE)
- (void) fputc(CHAR_COMPACT_WHITESPACE, stderr);
- if (m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE)
- (void) fputc(CHAR_COMPACT_OPTIONAL_WHITESPACE,
- stderr);
- if (m->str_flags & STRING_IGNORE_LOWERCASE)
- (void) fputc(CHAR_IGNORE_LOWERCASE, stderr);
- if (m->str_flags & STRING_IGNORE_UPPERCASE)
- (void) fputc(CHAR_IGNORE_UPPERCASE, stderr);
- if (m->str_flags & REGEX_OFFSET_START)
- (void) fputc(CHAR_REGEX_OFFSET_START, stderr);
- if (m->str_flags & STRING_TEXTTEST)
- (void) fputc(CHAR_TEXTTEST, stderr);
- if (m->str_flags & STRING_BINTEST)
- (void) fputc(CHAR_BINTEST, stderr);
- if (m->str_flags & PSTRING_1_BE)
- (void) fputc(CHAR_PSTRING_1_BE, stderr);
- if (m->str_flags & PSTRING_2_BE)
- (void) fputc(CHAR_PSTRING_2_BE, stderr);
- if (m->str_flags & PSTRING_2_LE)
- (void) fputc(CHAR_PSTRING_2_LE, stderr);
- if (m->str_flags & PSTRING_4_BE)
- (void) fputc(CHAR_PSTRING_4_BE, stderr);
- if (m->str_flags & PSTRING_4_LE)
- (void) fputc(CHAR_PSTRING_4_LE, stderr);
- if (m->str_flags & PSTRING_LENGTH_INCLUDES_ITSELF)
- (void) fputc(
- CHAR_PSTRING_LENGTH_INCLUDES_ITSELF,
- stderr);
- }
- if (m->str_range)
- (void) fprintf(stderr, "/%u", m->str_range);
- }
- else {
- if ((size_t)(m->mask_op & FILE_OPS_MASK) < SZOF(optyp))
- (void) fputc(optyp[m->mask_op & FILE_OPS_MASK], stderr);
- else
- (void) fputc('?', stderr);
-
- if (m->num_mask) {
- (void) fprintf(stderr, "%.8llx",
- (unsigned long long)m->num_mask);
- }
- }
- (void) fprintf(stderr, ",%c", m->reln);
-
- if (m->reln != 'x') {
- switch (m->type) {
- case FILE_BYTE:
- case FILE_SHORT:
- case FILE_LONG:
- case FILE_LESHORT:
- case FILE_LELONG:
- case FILE_MELONG:
- case FILE_BESHORT:
- case FILE_BELONG:
- case FILE_INDIRECT:
- (void) fprintf(stderr, "%d", m->value.l);
- break;
- case FILE_BEQUAD:
- case FILE_LEQUAD:
- case FILE_QUAD:
- (void) fprintf(stderr, "%" INT64_T_FORMAT "d",
- (unsigned long long)m->value.q);
- break;
- case FILE_PSTRING:
- case FILE_STRING:
- case FILE_REGEX:
- case FILE_BESTRING16:
- case FILE_LESTRING16:
- case FILE_SEARCH:
- file_showstr(stderr, m->value.s, (size_t)m->vallen);
- break;
- case FILE_DATE:
- case FILE_LEDATE:
- case FILE_BEDATE:
- case FILE_MEDATE:
- (void)fprintf(stderr, "%s,",
- file_fmttime(m->value.l, FILE_T_LOCAL, tbuf));
- break;
- case FILE_LDATE:
- case FILE_LELDATE:
- case FILE_BELDATE:
- case FILE_MELDATE:
- (void)fprintf(stderr, "%s,",
- file_fmttime(m->value.l, 0, tbuf));
- case FILE_QDATE:
- case FILE_LEQDATE:
- case FILE_BEQDATE:
- (void)fprintf(stderr, "%s,",
- file_fmttime(m->value.q, FILE_T_LOCAL, tbuf));
- break;
- case FILE_QLDATE:
- case FILE_LEQLDATE:
- case FILE_BEQLDATE:
- (void)fprintf(stderr, "%s,",
- file_fmttime(m->value.q, 0, tbuf));
- break;
- case FILE_QWDATE:
- case FILE_LEQWDATE:
- case FILE_BEQWDATE:
- (void)fprintf(stderr, "%s,",
- file_fmttime(m->value.q, FILE_T_WINDOWS, tbuf));
- break;
- case FILE_FLOAT:
- case FILE_BEFLOAT:
- case FILE_LEFLOAT:
- (void) fprintf(stderr, "%G", m->value.f);
- break;
- case FILE_DOUBLE:
- case FILE_BEDOUBLE:
- case FILE_LEDOUBLE:
- (void) fprintf(stderr, "%G", m->value.d);
- break;
- case FILE_DEFAULT:
- /* XXX - do anything here? */
- break;
- case FILE_USE:
- case FILE_NAME:
- (void) fprintf(stderr, "'%s'", m->value.s);
- break;
- default:
- (void) fprintf(stderr, "*bad type %d*", m->type);
- break;
- }
- }
- (void) fprintf(stderr, ",\"%s\"]\n", m->desc);
-}
-#endif
-
-/*VARARGS*/
-protected void
-file_magwarn(struct magic_set *ms, const char *f, ...)
-{
- va_list va;
-
- /* cuz we use stdout for most, stderr here */
- (void) fflush(stdout);
-
- if (ms->file)
- (void) fprintf(stderr, "%s, %lu: ", ms->file,
- (unsigned long)ms->line);
- (void) fprintf(stderr, "Warning: ");
- va_start(va, f);
- (void) vfprintf(stderr, f, va);
- va_end(va);
- (void) fputc('\n', stderr);
-}
-
-protected const char *
-file_fmttime(uint64_t v, int flags, char *buf)
-{
- char *pp;
- time_t t = (time_t)v;
- struct tm *tm;
-
- if (flags & FILE_T_WINDOWS) {
- struct timespec ts;
- cdf_timestamp_to_timespec(&ts, t);
- t = ts.tv_sec;
- }
-
- if (flags & FILE_T_LOCAL) {
- pp = ctime_r(&t, buf);
- } else {
-#ifndef HAVE_DAYLIGHT
- private int daylight = 0;
-#ifdef HAVE_TM_ISDST
- private time_t now = (time_t)0;
-
- if (now == (time_t)0) {
- struct tm *tm1;
- (void)time(&now);
- tm1 = localtime(&now);
- if (tm1 == NULL)
- goto out;
- daylight = tm1->tm_isdst;
- }
-#endif /* HAVE_TM_ISDST */
-#endif /* HAVE_DAYLIGHT */
- if (daylight)
- t += 3600;
- tm = gmtime(&t);
- if (tm == NULL)
- goto out;
- pp = asctime_r(tm, buf);
- }
-
- if (pp == NULL)
- goto out;
- pp[strcspn(pp, "\n")] = '\0';
- return pp;
-out:
- return strcpy(buf, "*Invalid time*");
-}
Added: trunk/contrib/file/python/Makefile.am
===================================================================
--- trunk/contrib/file/python/Makefile.am (rev 0)
+++ trunk/contrib/file/python/Makefile.am 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,3 @@
+
+EXTRA_DIST = README example.py magic.py setup.py
+
Property changes on: trunk/contrib/file/python/Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/python/Makefile.in
===================================================================
--- trunk/contrib/file/python/Makefile.in (rev 0)
+++ trunk/contrib/file/python/Makefile.in 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,439 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = python
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MINGW = @MINGW@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARNINGS = @WARNINGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fsect = @fsect@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = README example.py magic.py setup.py
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign python/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign python/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Property changes on: trunk/contrib/file/python/Makefile.in
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/python/README
===================================================================
Added: trunk/contrib/file/python/example.py
===================================================================
--- trunk/contrib/file/python/example.py (rev 0)
+++ trunk/contrib/file/python/example.py 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,17 @@
+#! /usr/bin/python
+
+import magic
+
+ms = magic.open(magic.NONE)
+ms.load()
+tp = ms.file("/bin/ls")
+print (tp)
+
+f = open("/bin/ls", "rb")
+buf = f.read(4096)
+f.close()
+
+tp = ms.buffer(buf)
+print (tp)
+
+ms.close()
Property changes on: trunk/contrib/file/python/example.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/python/magic.py
===================================================================
--- trunk/contrib/file/python/magic.py (rev 0)
+++ trunk/contrib/file/python/magic.py 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,285 @@
+# coding: utf-8
+
+'''
+Python bindings for libmagic
+'''
+
+import ctypes
+
+from collections import namedtuple
+
+from ctypes import *
+from ctypes.util import find_library
+
+
+def _init():
+ """
+ Loads the shared library through ctypes and returns a library
+ L{ctypes.CDLL} instance
+ """
+ return ctypes.cdll.LoadLibrary(find_library('magic'))
+
+_libraries = {}
+_libraries['magic'] = _init()
+
+# Flag constants for open and setflags
+MAGIC_NONE = NONE = 0
+MAGIC_DEBUG = DEBUG = 1
+MAGIC_SYMLINK = SYMLINK = 2
+MAGIC_COMPRESS = COMPRESS = 4
+MAGIC_DEVICES = DEVICES = 8
+MAGIC_MIME_TYPE = MIME_TYPE = 16
+MAGIC_CONTINUE = CONTINUE = 32
+MAGIC_CHECK = CHECK = 64
+MAGIC_PRESERVE_ATIME = PRESERVE_ATIME = 128
+MAGIC_RAW = RAW = 256
+MAGIC_ERROR = ERROR = 512
+MAGIC_MIME_ENCODING = MIME_ENCODING = 1024
+MAGIC_MIME = MIME = 1040 # MIME_TYPE + MIME_ENCODING
+MAGIC_APPLE = APPLE = 2048
+
+MAGIC_NO_CHECK_COMPRESS = NO_CHECK_COMPRESS = 4096
+MAGIC_NO_CHECK_TAR = NO_CHECK_TAR = 8192
+MAGIC_NO_CHECK_SOFT = NO_CHECK_SOFT = 16384
+MAGIC_NO_CHECK_APPTYPE = NO_CHECK_APPTYPE = 32768
+MAGIC_NO_CHECK_ELF = NO_CHECK_ELF = 65536
+MAGIC_NO_CHECK_TEXT = NO_CHECK_TEXT = 131072
+MAGIC_NO_CHECK_CDF = NO_CHECK_CDF = 262144
+MAGIC_NO_CHECK_TOKENS = NO_CHECK_TOKENS = 1048576
+MAGIC_NO_CHECK_ENCODING = NO_CHECK_ENCODING = 2097152
+
+MAGIC_NO_CHECK_BUILTIN = NO_CHECK_BUILTIN = 4173824
+
+FileMagic = namedtuple('FileMagic', ('mime_type', 'encoding', 'name'))
+
+
+class magic_set(Structure):
+ pass
+magic_set._fields_ = []
+magic_t = POINTER(magic_set)
+
+_open = _libraries['magic'].magic_open
+_open.restype = magic_t
+_open.argtypes = [c_int]
+
+_close = _libraries['magic'].magic_close
+_close.restype = None
+_close.argtypes = [magic_t]
+
+_file = _libraries['magic'].magic_file
+_file.restype = c_char_p
+_file.argtypes = [magic_t, c_char_p]
+
+_descriptor = _libraries['magic'].magic_descriptor
+_descriptor.restype = c_char_p
+_descriptor.argtypes = [magic_t, c_int]
+
+_buffer = _libraries['magic'].magic_buffer
+_buffer.restype = c_char_p
+_buffer.argtypes = [magic_t, c_void_p, c_size_t]
+
+_error = _libraries['magic'].magic_error
+_error.restype = c_char_p
+_error.argtypes = [magic_t]
+
+_setflags = _libraries['magic'].magic_setflags
+_setflags.restype = c_int
+_setflags.argtypes = [magic_t, c_int]
+
+_load = _libraries['magic'].magic_load
+_load.restype = c_int
+_load.argtypes = [magic_t, c_char_p]
+
+_compile = _libraries['magic'].magic_compile
+_compile.restype = c_int
+_compile.argtypes = [magic_t, c_char_p]
+
+_check = _libraries['magic'].magic_check
+_check.restype = c_int
+_check.argtypes = [magic_t, c_char_p]
+
+_list = _libraries['magic'].magic_list
+_list.restype = c_int
+_list.argtypes = [magic_t, c_char_p]
+
+_errno = _libraries['magic'].magic_errno
+_errno.restype = c_int
+_errno.argtypes = [magic_t]
+
+
+class Magic(object):
+ def __init__(self, ms):
+ self._magic_t = ms
+
+ def close(self):
+ """
+ Closes the magic database and deallocates any resources used.
+ """
+ _close(self._magic_t)
+
+ @staticmethod
+ def __tostr(s):
+ if s is None:
+ return None
+ if isinstance(s, str):
+ return s
+ try: # keep Python 2 compatibility
+ return str(s, 'utf-8')
+ except TypeError:
+ return str(s)
+
+ @staticmethod
+ def __tobytes(b):
+ if b is None:
+ return None
+ if isinstance(b, bytes):
+ return b
+ try: # keep Python 2 compatibility
+ return bytes(b, 'utf-8')
+ except TypeError:
+ return bytes(b)
+
+ def file(self, filename):
+ """
+ Returns a textual description of the contents of the argument passed
+ as a filename or None if an error occurred and the MAGIC_ERROR flag
+ is set. A call to errno() will return the numeric error code.
+ """
+ return Magic.__tostr(_file(self._magic_t, Magic.__tobytes(filename)))
+
+ def descriptor(self, fd):
+ """
+ Returns a textual description of the contents of the argument passed
+ as a file descriptor or None if an error occurred and the MAGIC_ERROR
+ flag is set. A call to errno() will return the numeric error code.
+ """
+ return Magic.__tostr(_descriptor(self._magic_t, fd))
+
+ def buffer(self, buf):
+ """
+ Returns a textual description of the contents of the argument passed
+ as a buffer or None if an error occurred and the MAGIC_ERROR flag
+ is set. A call to errno() will return the numeric error code.
+ """
+ return Magic.__tostr(_buffer(self._magic_t, buf, len(buf)))
+
+ def error(self):
+ """
+ Returns a textual explanation of the last error or None
+ if there was no error.
+ """
+ return Magic.__tostr(_error(self._magic_t))
+
+ def setflags(self, flags):
+ """
+ Set flags on the magic object which determine how magic checking
+ behaves; a bitwise OR of the flags described in libmagic(3), but
+ without the MAGIC_ prefix.
+
+ Returns -1 on systems that don't support utime(2) or utimes(2)
+ when PRESERVE_ATIME is set.
+ """
+ return _setflags(self._magic_t, flags)
+
+ def load(self, filename=None):
+ """
+ Must be called to load entries in the colon separated list of database
+ files passed as argument or the default database file if no argument
+ before any magic queries can be performed.
+
+ Returns 0 on success and -1 on failure.
+ """
+ return _load(self._magic_t, Magic.__tobytes(filename))
+
+ def compile(self, dbs):
+ """
+ Compile entries in the colon separated list of database files
+ passed as argument or the default database file if no argument.
+ The compiled files created are named from the basename(1) of each file
+ argument with ".mgc" appended to it.
+
+ Returns 0 on success and -1 on failure.
+ """
+ return _compile(self._magic_t, Magic.__tobytes(dbs))
+
+ def check(self, dbs):
+ """
+ Check the validity of entries in the colon separated list of
+ database files passed as argument or the default database file
+ if no argument.
+
+ Returns 0 on success and -1 on failure.
+ """
+ return _check(self._magic_t, Magic.__tobytes(dbs))
+
+ def list(self, dbs):
+ """
+ Check the validity of entries in the colon separated list of
+ database files passed as argument or the default database file
+ if no argument.
+
+ Returns 0 on success and -1 on failure.
+ """
+ return _list(self._magic_t, Magic.__tobytes(dbs))
+
+ def errno(self):
+ """
+ Returns a numeric error code. If return value is 0, an internal
+ magic error occurred. If return value is non-zero, the value is
+ an OS error code. Use the errno module or os.strerror() can be used
+ to provide detailed error information.
+ """
+ return _errno(self._magic_t)
+
+
+def open(flags):
+ """
+ Returns a magic object on success and None on failure.
+ Flags argument as for setflags.
+ """
+ return Magic(_open(flags))
+
+
+# Objects used by `detect_from_` functions
+mime_magic = Magic(_open(MAGIC_MIME))
+mime_magic.load()
+none_magic = Magic(_open(MAGIC_NONE))
+none_magic.load()
+
+
+def _create_filemagic(mime_detected, type_detected):
+ mime_type, mime_encoding = mime_detected.split('; ')
+
+ return FileMagic(name=type_detected, mime_type=mime_type,
+ encoding=mime_encoding.replace('charset=', ''))
+
+
+def detect_from_filename(filename):
+ '''Detect mime type, encoding and file type from a filename
+
+ Returns a `FileMagic` namedtuple.
+ '''
+
+ return _create_filemagic(mime_magic.file(filename),
+ none_magic.file(filename))
+
+
+def detect_from_fobj(fobj):
+ '''Detect mime type, encoding and file type from file-like object
+
+ Returns a `FileMagic` namedtuple.
+ '''
+
+ file_descriptor = fobj.fileno()
+ return _create_filemagic(mime_magic.descriptor(file_descriptor),
+ none_magic.descriptor(file_descriptor))
+
+
+def detect_from_content(byte_content):
+ '''Detect mime type, encoding and file type from bytes
+
+ Returns a `FileMagic` namedtuple.
+ '''
+
+ return _create_filemagic(mime_magic.buffer(byte_content),
+ none_magic.buffer(byte_content))
Property changes on: trunk/contrib/file/python/magic.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/python/setup.py
===================================================================
--- trunk/contrib/file/python/setup.py (rev 0)
+++ trunk/contrib/file/python/setup.py 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,22 @@
+# coding: utf-8
+
+from __future__ import unicode_literals
+
+from setuptools import setup
+
+
+setup(name='file-magic',
+ version='0.3.0',
+ author='Reuben Thomas, Álvaro Justen',
+ author_email='rrt at sc3d.org, alvarojusten at gmail.com',
+ url='https://github.com/file/file',
+ license='BSD',
+ description='(official) libmagic Python bindings',
+ py_modules=['magic'],
+ test_suite='tests',
+ classifiers = [
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ 'Natural Language :: English',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ ])
Property changes on: trunk/contrib/file/python/setup.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Deleted: trunk/contrib/file/readcdf.c
===================================================================
--- trunk/contrib/file/readcdf.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/readcdf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,473 +0,0 @@
-/*-
- * Copyright (c) 2008 Christos Zoulas
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-#include "file.h"
-
-#ifndef lint
-FILE_RCSID("@(#)$File: readcdf.c,v 1.44 2014/05/14 23:22:48 christos Exp $")
-#endif
-
-#include <assert.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-#if defined(HAVE_LOCALE_H)
-#include <locale.h>
-#endif
-
-#include "cdf.h"
-#include "magic.h"
-
-#define NOTMIME(ms) (((ms)->flags & MAGIC_MIME) == 0)
-
-static const struct nv {
- const char *pattern;
- const char *mime;
-} app2mime[] = {
- { "Word", "msword", },
- { "Excel", "vnd.ms-excel", },
- { "Powerpoint", "vnd.ms-powerpoint", },
- { "Crystal Reports", "x-rpt", },
- { "Advanced Installer", "vnd.ms-msi", },
- { "InstallShield", "vnd.ms-msi", },
- { "Microsoft Patch Compiler", "vnd.ms-msi", },
- { "NAnt", "vnd.ms-msi", },
- { "Windows Installer", "vnd.ms-msi", },
- { NULL, NULL, },
-}, name2mime[] = {
- { "WordDocument", "msword", },
- { "PowerPoint", "vnd.ms-powerpoint", },
- { "DigitalSignature", "vnd.ms-msi", },
- { NULL, NULL, },
-}, name2desc[] = {
- { "WordDocument", "Microsoft Office Word",},
- { "PowerPoint", "Microsoft PowerPoint", },
- { "DigitalSignature", "Microsoft Installer", },
- { NULL, NULL, },
-};
-
-static const struct cv {
- uint64_t clsid[2];
- const char *mime;
-} clsid2mime[] = {
- {
- { 0x00000000000c1084LLU, 0x46000000000000c0LLU },
- "x-msi",
- },
- { { 0, 0 },
- NULL,
- },
-}, clsid2desc[] = {
- {
- { 0x00000000000c1084LLU, 0x46000000000000c0LLU },
- "MSI Installer",
- },
- { { 0, 0 },
- NULL,
- },
-};
-
-private const char *
-cdf_clsid_to_mime(const uint64_t clsid[2], const struct cv *cv)
-{
- size_t i;
- for (i = 0; cv[i].mime != NULL; i++) {
- if (clsid[0] == cv[i].clsid[0] && clsid[1] == cv[i].clsid[1])
- return cv[i].mime;
- }
- return NULL;
-}
-
-private const char *
-cdf_app_to_mime(const char *vbuf, const struct nv *nv)
-{
- size_t i;
- const char *rv = NULL;
- char *old_lc_ctype;
-
- old_lc_ctype = setlocale(LC_CTYPE, NULL);
- assert(old_lc_ctype != NULL);
- old_lc_ctype = strdup(old_lc_ctype);
- assert(old_lc_ctype != NULL);
- (void)setlocale(LC_CTYPE, "C");
- for (i = 0; nv[i].pattern != NULL; i++)
- if (strcasestr(vbuf, nv[i].pattern) != NULL) {
- rv = nv[i].mime;
- break;
- }
- (void)setlocale(LC_CTYPE, old_lc_ctype);
- free(old_lc_ctype);
- return rv;
-}
-
-private int
-cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info,
- size_t count, const cdf_directory_t *root_storage)
-{
- size_t i;
- cdf_timestamp_t tp;
- struct timespec ts;
- char buf[64];
- const char *str = NULL;
- const char *s;
- int len;
-
- if (!NOTMIME(ms) && root_storage)
- str = cdf_clsid_to_mime(root_storage->d_storage_uuid,
- clsid2mime);
-
- for (i = 0; i < count; i++) {
- cdf_print_property_name(buf, sizeof(buf), info[i].pi_id);
- switch (info[i].pi_type) {
- case CDF_NULL:
- break;
- case CDF_SIGNED16:
- if (NOTMIME(ms) && file_printf(ms, ", %s: %hd", buf,
- info[i].pi_s16) == -1)
- return -1;
- break;
- case CDF_SIGNED32:
- if (NOTMIME(ms) && file_printf(ms, ", %s: %d", buf,
- info[i].pi_s32) == -1)
- return -1;
- break;
- case CDF_UNSIGNED32:
- if (NOTMIME(ms) && file_printf(ms, ", %s: %u", buf,
- info[i].pi_u32) == -1)
- return -1;
- break;
- case CDF_FLOAT:
- if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf,
- info[i].pi_f) == -1)
- return -1;
- break;
- case CDF_DOUBLE:
- if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf,
- info[i].pi_d) == -1)
- return -1;
- break;
- case CDF_LENGTH32_STRING:
- case CDF_LENGTH32_WSTRING:
- len = info[i].pi_str.s_len;
- if (len > 1) {
- char vbuf[1024];
- size_t j, k = 1;
-
- if (info[i].pi_type == CDF_LENGTH32_WSTRING)
- k++;
- s = info[i].pi_str.s_buf;
- for (j = 0; j < sizeof(vbuf) && len--; s += k) {
- if (*s == '\0')
- break;
- if (isprint((unsigned char)*s))
- vbuf[j++] = *s;
- }
- if (j == sizeof(vbuf))
- --j;
- vbuf[j] = '\0';
- if (NOTMIME(ms)) {
- if (vbuf[0]) {
- if (file_printf(ms, ", %s: %s",
- buf, vbuf) == -1)
- return -1;
- }
- } else if (str == NULL && info[i].pi_id ==
- CDF_PROPERTY_NAME_OF_APPLICATION) {
- str = cdf_app_to_mime(vbuf, app2mime);
- }
- }
- break;
- case CDF_FILETIME:
- tp = info[i].pi_tp;
- if (tp != 0) {
- char tbuf[64];
- if (tp < 1000000000000000LL) {
- cdf_print_elapsed_time(tbuf,
- sizeof(tbuf), tp);
- if (NOTMIME(ms) && file_printf(ms,
- ", %s: %s", buf, tbuf) == -1)
- return -1;
- } else {
- char *c, *ec;
- cdf_timestamp_to_timespec(&ts, tp);
- c = cdf_ctime(&ts.tv_sec, tbuf);
- if (c != NULL &&
- (ec = strchr(c, '\n')) != NULL)
- *ec = '\0';
-
- if (NOTMIME(ms) && file_printf(ms,
- ", %s: %s", buf, c) == -1)
- return -1;
- }
- }
- break;
- case CDF_CLIPBOARD:
- break;
- default:
- return -1;
- }
- }
- if (!NOTMIME(ms)) {
- if (str == NULL)
- return 0;
- if (file_printf(ms, "application/%s", str) == -1)
- return -1;
- }
- return 1;
-}
-
-private int
-cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h,
- const cdf_stream_t *sst, const cdf_directory_t *root_storage)
-{
- cdf_summary_info_header_t si;
- cdf_property_info_t *info;
- size_t count;
- int m;
-
- if (cdf_unpack_summary_info(sst, h, &si, &info, &count) == -1)
- return -1;
-
- if (NOTMIME(ms)) {
- const char *str;
-
- if (file_printf(ms, "Composite Document File V2 Document")
- == -1)
- return -1;
-
- if (file_printf(ms, ", %s Endian",
- si.si_byte_order == 0xfffe ? "Little" : "Big") == -1)
- return -2;
- switch (si.si_os) {
- case 2:
- if (file_printf(ms, ", Os: Windows, Version %d.%d",
- si.si_os_version & 0xff,
- (uint32_t)si.si_os_version >> 8) == -1)
- return -2;
- break;
- case 1:
- if (file_printf(ms, ", Os: MacOS, Version %d.%d",
- (uint32_t)si.si_os_version >> 8,
- si.si_os_version & 0xff) == -1)
- return -2;
- break;
- default:
- if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os,
- si.si_os_version & 0xff,
- (uint32_t)si.si_os_version >> 8) == -1)
- return -2;
- break;
- }
- if (root_storage) {
- str = cdf_clsid_to_mime(root_storage->d_storage_uuid,
- clsid2desc);
- if (str)
- if (file_printf(ms, ", %s", str) == -1)
- return -2;
- }
- }
-
- m = cdf_file_property_info(ms, info, count, root_storage);
- free(info);
-
- return m == -1 ? -2 : m;
-}
-
-#ifdef notdef
-private char *
-format_clsid(char *buf, size_t len, const uint64_t uuid[2]) {
- snprintf(buf, len, "%.8" PRIx64 "-%.4" PRIx64 "-%.4" PRIx64 "-%.4"
- PRIx64 "-%.12" PRIx64,
- (uuid[0] >> 32) & (uint64_t)0x000000000ffffffffLLU,
- (uuid[0] >> 16) & (uint64_t)0x0000000000000ffffLLU,
- (uuid[0] >> 0) & (uint64_t)0x0000000000000ffffLLU,
- (uuid[1] >> 48) & (uint64_t)0x0000000000000ffffLLU,
- (uuid[1] >> 0) & (uint64_t)0x0000fffffffffffffLLU);
- return buf;
-}
-#endif
-
-protected int
-file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf,
- size_t nbytes)
-{
- cdf_info_t info;
- cdf_header_t h;
- cdf_sat_t sat, ssat;
- cdf_stream_t sst, scn;
- cdf_dir_t dir;
- int i;
- const char *expn = "";
- const char *corrupt = "corrupt: ";
-
- info.i_fd = fd;
- info.i_buf = buf;
- info.i_len = nbytes;
- if (ms->flags & MAGIC_APPLE)
- return 0;
- if (cdf_read_header(&info, &h) == -1)
- return 0;
-#ifdef CDF_DEBUG
- cdf_dump_header(&h);
-#endif
-
- if ((i = cdf_read_sat(&info, &h, &sat)) == -1) {
- expn = "Can't read SAT";
- goto out0;
- }
-#ifdef CDF_DEBUG
- cdf_dump_sat("SAT", &sat, CDF_SEC_SIZE(&h));
-#endif
-
- if ((i = cdf_read_ssat(&info, &h, &sat, &ssat)) == -1) {
- expn = "Can't read SSAT";
- goto out1;
- }
-#ifdef CDF_DEBUG
- cdf_dump_sat("SSAT", &ssat, CDF_SHORT_SEC_SIZE(&h));
-#endif
-
- if ((i = cdf_read_dir(&info, &h, &sat, &dir)) == -1) {
- expn = "Can't read directory";
- goto out2;
- }
-
- const cdf_directory_t *root_storage;
- if ((i = cdf_read_short_stream(&info, &h, &sat, &dir, &sst,
- &root_storage)) == -1) {
- expn = "Cannot read short stream";
- goto out3;
- }
-#ifdef CDF_DEBUG
- cdf_dump_dir(&info, &h, &sat, &ssat, &sst, &dir);
-#endif
-#ifdef notdef
- if (root_storage) {
- if (NOTMIME(ms)) {
- char clsbuf[128];
- if (file_printf(ms, "CLSID %s, ",
- format_clsid(clsbuf, sizeof(clsbuf),
- root_storage->d_storage_uuid)) == -1)
- return -1;
- }
- }
-#endif
-
- if ((i = cdf_read_user_stream(&info, &h, &sat, &ssat, &sst, &dir,
- "FileHeader", &scn)) != -1) {
-#define HWP5_SIGNATURE "HWP Document File"
- if (scn.sst_dirlen >= sizeof(HWP5_SIGNATURE) - 1
- && memcmp(scn.sst_tab, HWP5_SIGNATURE,
- sizeof(HWP5_SIGNATURE) - 1) == 0) {
- if (NOTMIME(ms)) {
- if (file_printf(ms,
- "Hangul (Korean) Word Processor File 5.x") == -1)
- return -1;
- } else {
- if (file_printf(ms, "application/x-hwp") == -1)
- return -1;
- }
- i = 1;
- goto out5;
- } else {
- free(scn.sst_tab);
- scn.sst_tab = NULL;
- scn.sst_len = 0;
- scn.sst_dirlen = 0;
- }
- }
-
- if ((i = cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
- &scn)) == -1) {
- if (errno == ESRCH) {
- corrupt = expn;
- expn = "No summary info";
- } else {
- expn = "Cannot read summary info";
- }
- goto out4;
- }
-#ifdef CDF_DEBUG
- cdf_dump_summary_info(&h, &scn);
-#endif
- if ((i = cdf_file_summary_info(ms, &h, &scn, root_storage)) < 0)
- expn = "Can't expand summary_info";
-
- if (i == 0) {
- const char *str = NULL;
- cdf_directory_t *d;
- char name[__arraycount(d->d_name)];
- size_t j, k;
-
- for (j = 0; str == NULL && j < dir.dir_len; j++) {
- d = &dir.dir_tab[j];
- for (k = 0; k < sizeof(name); k++)
- name[k] = (char)cdf_tole2(d->d_name[k]);
- str = cdf_app_to_mime(name,
- NOTMIME(ms) ? name2desc : name2mime);
- }
- if (NOTMIME(ms)) {
- if (str != NULL) {
- if (file_printf(ms, "%s", str) == -1)
- return -1;
- i = 1;
- }
- } else {
- if (str == NULL)
- str = "vnd.ms-office";
- if (file_printf(ms, "application/%s", str) == -1)
- return -1;
- i = 1;
- }
- }
-out5:
- free(scn.sst_tab);
-out4:
- free(sst.sst_tab);
-out3:
- free(dir.dir_tab);
-out2:
- free(ssat.sat_tab);
-out1:
- free(sat.sat_tab);
-out0:
- if (i == -1) {
- if (NOTMIME(ms)) {
- if (file_printf(ms,
- "Composite Document File V2 Document") == -1)
- return -1;
- if (*expn)
- if (file_printf(ms, ", %s%s", corrupt, expn) == -1)
- return -1;
- } else {
- if (file_printf(ms, "application/CDFV2-corrupt") == -1)
- return -1;
- }
- i = 1;
- }
- return i;
-}
Deleted: trunk/contrib/file/readelf.c
===================================================================
--- trunk/contrib/file/readelf.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/readelf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,1303 +0,0 @@
-/*
- * Copyright (c) Christos Zoulas 2003.
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include "file.h"
-
-#ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.103 2014/05/02 02:25:10 christos Exp $")
-#endif
-
-#ifdef BUILTIN_ELF
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "readelf.h"
-#include "magic.h"
-
-#ifdef ELFCORE
-private int dophn_core(struct magic_set *, int, int, int, off_t, int, size_t,
- off_t, int *);
-#endif
-private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t,
- off_t, int *, int);
-private int doshn(struct magic_set *, int, int, int, off_t, int, size_t,
- off_t, int *, int, int);
-private size_t donote(struct magic_set *, void *, size_t, size_t, int,
- int, size_t, int *);
-
-#define ELF_ALIGN(a) ((((a) + align - 1) / align) * align)
-
-#define isquote(c) (strchr("'\"`", (c)) != NULL)
-
-private uint16_t getu16(int, uint16_t);
-private uint32_t getu32(int, uint32_t);
-private uint64_t getu64(int, uint64_t);
-
-#define MAX_PHNUM 256
-#define MAX_SHNUM 1024
-
-private int
-toomany(struct magic_set *ms, const char *name, uint16_t num)
-{
- if (file_printf(ms, ", too many %s header sections (%u)", name, num
- ) == -1)
- return -1;
- return 0;
-}
-
-private uint16_t
-getu16(int swap, uint16_t value)
-{
- union {
- uint16_t ui;
- char c[2];
- } retval, tmpval;
-
- if (swap) {
- tmpval.ui = value;
-
- retval.c[0] = tmpval.c[1];
- retval.c[1] = tmpval.c[0];
-
- return retval.ui;
- } else
- return value;
-}
-
-private uint32_t
-getu32(int swap, uint32_t value)
-{
- union {
- uint32_t ui;
- char c[4];
- } retval, tmpval;
-
- if (swap) {
- tmpval.ui = value;
-
- retval.c[0] = tmpval.c[3];
- retval.c[1] = tmpval.c[2];
- retval.c[2] = tmpval.c[1];
- retval.c[3] = tmpval.c[0];
-
- return retval.ui;
- } else
- return value;
-}
-
-private uint64_t
-getu64(int swap, uint64_t value)
-{
- union {
- uint64_t ui;
- char c[8];
- } retval, tmpval;
-
- if (swap) {
- tmpval.ui = value;
-
- retval.c[0] = tmpval.c[7];
- retval.c[1] = tmpval.c[6];
- retval.c[2] = tmpval.c[5];
- retval.c[3] = tmpval.c[4];
- retval.c[4] = tmpval.c[3];
- retval.c[5] = tmpval.c[2];
- retval.c[6] = tmpval.c[1];
- retval.c[7] = tmpval.c[0];
-
- return retval.ui;
- } else
- return value;
-}
-
-#define elf_getu16(swap, value) getu16(swap, value)
-#define elf_getu32(swap, value) getu32(swap, value)
-#define elf_getu64(swap, value) getu64(swap, value)
-
-#define xsh_addr (clazz == ELFCLASS32 \
- ? (void *)&sh32 \
- : (void *)&sh64)
-#define xsh_sizeof (clazz == ELFCLASS32 \
- ? sizeof(sh32) \
- : sizeof(sh64))
-#define xsh_size (size_t)(clazz == ELFCLASS32 \
- ? elf_getu32(swap, sh32.sh_size) \
- : elf_getu64(swap, sh64.sh_size))
-#define xsh_offset (off_t)(clazz == ELFCLASS32 \
- ? elf_getu32(swap, sh32.sh_offset) \
- : elf_getu64(swap, sh64.sh_offset))
-#define xsh_type (clazz == ELFCLASS32 \
- ? elf_getu32(swap, sh32.sh_type) \
- : elf_getu32(swap, sh64.sh_type))
-#define xsh_name (clazz == ELFCLASS32 \
- ? elf_getu32(swap, sh32.sh_name) \
- : elf_getu32(swap, sh64.sh_name))
-#define xph_addr (clazz == ELFCLASS32 \
- ? (void *) &ph32 \
- : (void *) &ph64)
-#define xph_sizeof (clazz == ELFCLASS32 \
- ? sizeof(ph32) \
- : sizeof(ph64))
-#define xph_type (clazz == ELFCLASS32 \
- ? elf_getu32(swap, ph32.p_type) \
- : elf_getu32(swap, ph64.p_type))
-#define xph_offset (off_t)(clazz == ELFCLASS32 \
- ? elf_getu32(swap, ph32.p_offset) \
- : elf_getu64(swap, ph64.p_offset))
-#define xph_align (size_t)((clazz == ELFCLASS32 \
- ? (off_t) (ph32.p_align ? \
- elf_getu32(swap, ph32.p_align) : 4) \
- : (off_t) (ph64.p_align ? \
- elf_getu64(swap, ph64.p_align) : 4)))
-#define xph_filesz (size_t)((clazz == ELFCLASS32 \
- ? elf_getu32(swap, ph32.p_filesz) \
- : elf_getu64(swap, ph64.p_filesz)))
-#define xnh_addr (clazz == ELFCLASS32 \
- ? (void *)&nh32 \
- : (void *)&nh64)
-#define xph_memsz (size_t)((clazz == ELFCLASS32 \
- ? elf_getu32(swap, ph32.p_memsz) \
- : elf_getu64(swap, ph64.p_memsz)))
-#define xnh_sizeof (clazz == ELFCLASS32 \
- ? sizeof nh32 \
- : sizeof nh64)
-#define xnh_type (clazz == ELFCLASS32 \
- ? elf_getu32(swap, nh32.n_type) \
- : elf_getu32(swap, nh64.n_type))
-#define xnh_namesz (clazz == ELFCLASS32 \
- ? elf_getu32(swap, nh32.n_namesz) \
- : elf_getu32(swap, nh64.n_namesz))
-#define xnh_descsz (clazz == ELFCLASS32 \
- ? elf_getu32(swap, nh32.n_descsz) \
- : elf_getu32(swap, nh64.n_descsz))
-#define prpsoffsets(i) (clazz == ELFCLASS32 \
- ? prpsoffsets32[i] \
- : prpsoffsets64[i])
-#define xcap_addr (clazz == ELFCLASS32 \
- ? (void *)&cap32 \
- : (void *)&cap64)
-#define xcap_sizeof (clazz == ELFCLASS32 \
- ? sizeof cap32 \
- : sizeof cap64)
-#define xcap_tag (clazz == ELFCLASS32 \
- ? elf_getu32(swap, cap32.c_tag) \
- : elf_getu64(swap, cap64.c_tag))
-#define xcap_val (clazz == ELFCLASS32 \
- ? elf_getu32(swap, cap32.c_un.c_val) \
- : elf_getu64(swap, cap64.c_un.c_val))
-
-#ifdef ELFCORE
-/*
- * Try larger offsets first to avoid false matches
- * from earlier data that happen to look like strings.
- */
-static const size_t prpsoffsets32[] = {
-#ifdef USE_NT_PSINFO
- 104, /* SunOS 5.x (command line) */
- 88, /* SunOS 5.x (short name) */
-#endif /* USE_NT_PSINFO */
-
- 100, /* SunOS 5.x (command line) */
- 84, /* SunOS 5.x (short name) */
-
- 44, /* Linux (command line) */
- 28, /* Linux 2.0.36 (short name) */
-
- 8, /* FreeBSD */
-};
-
-static const size_t prpsoffsets64[] = {
-#ifdef USE_NT_PSINFO
- 152, /* SunOS 5.x (command line) */
- 136, /* SunOS 5.x (short name) */
-#endif /* USE_NT_PSINFO */
-
- 136, /* SunOS 5.x, 64-bit (command line) */
- 120, /* SunOS 5.x, 64-bit (short name) */
-
- 56, /* Linux (command line) */
- 40, /* Linux (tested on core from 2.4.x, short name) */
-
- 16, /* FreeBSD, 64-bit */
-};
-
-#define NOFFSETS32 (sizeof prpsoffsets32 / sizeof prpsoffsets32[0])
-#define NOFFSETS64 (sizeof prpsoffsets64 / sizeof prpsoffsets64[0])
-
-#define NOFFSETS (clazz == ELFCLASS32 ? NOFFSETS32 : NOFFSETS64)
-
-/*
- * Look through the program headers of an executable image, searching
- * for a PT_NOTE section of type NT_PRPSINFO, with a name "CORE" or
- * "FreeBSD"; if one is found, try looking in various places in its
- * contents for a 16-character string containing only printable
- * characters - if found, that string should be the name of the program
- * that dropped core. Note: right after that 16-character string is,
- * at least in SunOS 5.x (and possibly other SVR4-flavored systems) and
- * Linux, a longer string (80 characters, in 5.x, probably other
- * SVR4-flavored systems, and Linux) containing the start of the
- * command line for that program.
- *
- * SunOS 5.x core files contain two PT_NOTE sections, with the types
- * NT_PRPSINFO (old) and NT_PSINFO (new). These structs contain the
- * same info about the command name and command line, so it probably
- * isn't worthwhile to look for NT_PSINFO, but the offsets are provided
- * above (see USE_NT_PSINFO), in case we ever decide to do so. The
- * NT_PRPSINFO and NT_PSINFO sections are always in order and adjacent;
- * the SunOS 5.x file command relies on this (and prefers the latter).
- *
- * The signal number probably appears in a section of type NT_PRSTATUS,
- * but that's also rather OS-dependent, in ways that are harder to
- * dissect with heuristics, so I'm not bothering with the signal number.
- * (I suppose the signal number could be of interest in situations where
- * you don't have the binary of the program that dropped core; if you
- * *do* have that binary, the debugger will probably tell you what
- * signal it was.)
- */
-
-#define OS_STYLE_SVR4 0
-#define OS_STYLE_FREEBSD 1
-#define OS_STYLE_NETBSD 2
-
-private const char os_style_names[][8] = {
- "SVR4",
- "FreeBSD",
- "NetBSD",
-};
-
-#define FLAGS_DID_CORE 0x01
-#define FLAGS_DID_NOTE 0x02
-#define FLAGS_DID_BUILD_ID 0x04
-#define FLAGS_DID_CORE_STYLE 0x08
-#define FLAGS_IS_CORE 0x10
-
-private int
-dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
- int num, size_t size, off_t fsize, int *flags)
-{
- Elf32_Phdr ph32;
- Elf64_Phdr ph64;
- size_t offset, len;
- unsigned char nbuf[BUFSIZ];
- ssize_t bufsize;
-
- if (size != xph_sizeof) {
- if (file_printf(ms, ", corrupted program header size") == -1)
- return -1;
- return 0;
- }
-
- /*
- * Loop through all the program headers.
- */
- for ( ; num; num--) {
- if (pread(fd, xph_addr, xph_sizeof, off) == -1) {
- file_badread(ms);
- return -1;
- }
- off += size;
-
- if (xph_offset > fsize) {
- /* Perhaps warn here */
- continue;
- }
-
- if (xph_type != PT_NOTE)
- continue;
-
- /*
- * This is a PT_NOTE section; loop through all the notes
- * in the section.
- */
- len = xph_filesz < sizeof(nbuf) ? xph_filesz : sizeof(nbuf);
- if ((bufsize = pread(fd, nbuf, len, xph_offset)) == -1) {
- file_badread(ms);
- return -1;
- }
- offset = 0;
- for (;;) {
- if (offset >= (size_t)bufsize)
- break;
- offset = donote(ms, nbuf, offset, (size_t)bufsize,
- clazz, swap, 4, flags);
- if (offset == 0)
- break;
-
- }
- }
- return 0;
-}
-#endif
-
-static void
-do_note_netbsd_version(struct magic_set *ms, int swap, void *v)
-{
- uint32_t desc;
- (void)memcpy(&desc, v, sizeof(desc));
- desc = elf_getu32(swap, desc);
-
- if (file_printf(ms, ", for NetBSD") == -1)
- return;
- /*
- * The version number used to be stuck as 199905, and was thus
- * basically content-free. Newer versions of NetBSD have fixed
- * this and now use the encoding of __NetBSD_Version__:
- *
- * MMmmrrpp00
- *
- * M = major version
- * m = minor version
- * r = release ["",A-Z,Z[A-Z] but numeric]
- * p = patchlevel
- */
- if (desc > 100000000U) {
- uint32_t ver_patch = (desc / 100) % 100;
- uint32_t ver_rel = (desc / 10000) % 100;
- uint32_t ver_min = (desc / 1000000) % 100;
- uint32_t ver_maj = desc / 100000000;
-
- if (file_printf(ms, " %u.%u", ver_maj, ver_min) == -1)
- return;
- if (ver_rel == 0 && ver_patch != 0) {
- if (file_printf(ms, ".%u", ver_patch) == -1)
- return;
- } else if (ver_rel != 0) {
- while (ver_rel > 26) {
- if (file_printf(ms, "Z") == -1)
- return;
- ver_rel -= 26;
- }
- if (file_printf(ms, "%c", 'A' + ver_rel - 1)
- == -1)
- return;
- }
- }
-}
-
-static void
-do_note_freebsd_version(struct magic_set *ms, int swap, void *v)
-{
- uint32_t desc;
-
- (void)memcpy(&desc, v, sizeof(desc));
- desc = elf_getu32(swap, desc);
- if (file_printf(ms, ", for FreeBSD") == -1)
- return;
-
- /*
- * Contents is __FreeBSD_version, whose relation to OS
- * 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 == 460002) {
- if (file_printf(ms, " 4.6.2") == -1)
- return;
- } else if (desc < 460100) {
- if (file_printf(ms, " %d.%d", desc / 100000,
- desc / 10000 % 10) == -1)
- return;
- if (desc / 1000 % 10 > 0)
- if (file_printf(ms, ".%d", desc / 1000 % 10) == -1)
- return;
- if ((desc % 1000 > 0) || (desc % 100000 == 0))
- if (file_printf(ms, " (%d)", desc) == -1)
- return;
- } else if (desc < 500000) {
- if (file_printf(ms, " %d.%d", desc / 100000,
- desc / 10000 % 10 + desc / 1000 % 10) == -1)
- return;
- if (desc / 100 % 10 > 0) {
- if (file_printf(ms, " (%d)", desc) == -1)
- return;
- } else if (desc / 10 % 10 > 0) {
- if (file_printf(ms, ".%d", desc / 10 % 10) == -1)
- return;
- }
- } else {
- if (file_printf(ms, " %d.%d", desc / 100000,
- desc / 1000 % 100) == -1)
- return;
- if ((desc / 100 % 10 > 0) ||
- (desc % 100000 / 100 == 0)) {
- if (file_printf(ms, " (%d)", desc) == -1)
- return;
- } else if (desc / 10 % 10 > 0) {
- if (file_printf(ms, ".%d", desc / 10 % 10) == -1)
- return;
- }
- }
-}
-
-private size_t
-donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
- int clazz, int swap, size_t align, int *flags)
-{
- Elf32_Nhdr nh32;
- Elf64_Nhdr nh64;
- size_t noff, doff;
-#ifdef ELFCORE
- int os_style = -1;
-#endif
- uint32_t namesz, descsz;
- unsigned char *nbuf = CAST(unsigned char *, vbuf);
-
- (void)memcpy(xnh_addr, &nbuf[offset], xnh_sizeof);
- offset += xnh_sizeof;
-
- namesz = xnh_namesz;
- descsz = xnh_descsz;
- if ((namesz == 0) && (descsz == 0)) {
- /*
- * We're out of note headers.
- */
- return (offset >= size) ? offset : size;
- }
-
- if (namesz & 0x80000000) {
- (void)file_printf(ms, ", bad note name size 0x%lx",
- (unsigned long)namesz);
- return 0;
- }
-
- if (descsz & 0x80000000) {
- (void)file_printf(ms, ", bad note description size 0x%lx",
- (unsigned long)descsz);
- return 0;
- }
-
-
- noff = offset;
- doff = ELF_ALIGN(offset + namesz);
-
- if (offset + namesz > size) {
- /*
- * We're past the end of the buffer.
- */
- return doff;
- }
-
- offset = ELF_ALIGN(doff + descsz);
- if (doff + descsz > size) {
- /*
- * We're past the end of the buffer.
- */
- return (offset >= size) ? offset : size;
- }
-
- if ((*flags & (FLAGS_DID_NOTE|FLAGS_DID_BUILD_ID)) ==
- (FLAGS_DID_NOTE|FLAGS_DID_BUILD_ID))
- goto core;
-
- if (namesz == 5 && strcmp((char *)&nbuf[noff], "SuSE") == 0 &&
- xnh_type == NT_GNU_VERSION && descsz == 2) {
- file_printf(ms, ", for SuSE %d.%d", nbuf[doff], nbuf[doff + 1]);
- }
- if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
- xnh_type == NT_GNU_VERSION && descsz == 16) {
- uint32_t desc[4];
- (void)memcpy(desc, &nbuf[doff], sizeof(desc));
-
- if (file_printf(ms, ", for GNU/") == -1)
- return size;
- switch (elf_getu32(swap, desc[0])) {
- case GNU_OS_LINUX:
- if (file_printf(ms, "Linux") == -1)
- return size;
- break;
- case GNU_OS_HURD:
- if (file_printf(ms, "Hurd") == -1)
- return size;
- break;
- case GNU_OS_SOLARIS:
- if (file_printf(ms, "Solaris") == -1)
- return size;
- break;
- case GNU_OS_KFREEBSD:
- if (file_printf(ms, "kFreeBSD") == -1)
- return size;
- break;
- case GNU_OS_KNETBSD:
- if (file_printf(ms, "kNetBSD") == -1)
- return size;
- break;
- default:
- if (file_printf(ms, "<unknown>") == -1)
- return size;
- }
- if (file_printf(ms, " %d.%d.%d", elf_getu32(swap, desc[1]),
- elf_getu32(swap, desc[2]), elf_getu32(swap, desc[3])) == -1)
- return size;
- *flags |= FLAGS_DID_NOTE;
- return size;
- }
-
- if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
- xnh_type == NT_GNU_BUILD_ID && (descsz == 16 || descsz == 20)) {
- uint8_t desc[20];
- uint32_t i;
- if (file_printf(ms, ", BuildID[%s]=", descsz == 16 ? "md5/uuid" :
- "sha1") == -1)
- return size;
- (void)memcpy(desc, &nbuf[doff], descsz);
- for (i = 0; i < descsz; i++)
- if (file_printf(ms, "%02x", desc[i]) == -1)
- return size;
- *flags |= FLAGS_DID_BUILD_ID;
- }
-
- if (namesz == 4 && strcmp((char *)&nbuf[noff], "PaX") == 0 &&
- xnh_type == NT_NETBSD_PAX && descsz == 4) {
- static const char *pax[] = {
- "+mprotect",
- "-mprotect",
- "+segvguard",
- "-segvguard",
- "+ASLR",
- "-ASLR",
- };
- uint32_t desc;
- size_t i;
- int did = 0;
-
- (void)memcpy(&desc, &nbuf[doff], sizeof(desc));
- desc = elf_getu32(swap, desc);
-
- if (desc && file_printf(ms, ", PaX: ") == -1)
- return size;
-
- for (i = 0; i < __arraycount(pax); i++) {
- if (((1 << i) & desc) == 0)
- continue;
- if (file_printf(ms, "%s%s", did++ ? "," : "",
- pax[i]) == -1)
- return size;
- }
- }
-
- if (namesz == 7 && strcmp((char *)&nbuf[noff], "NetBSD") == 0) {
- switch (xnh_type) {
- case NT_NETBSD_VERSION:
- if (descsz == 4) {
- do_note_netbsd_version(ms, swap, &nbuf[doff]);
- *flags |= FLAGS_DID_NOTE;
- return size;
- }
- break;
- case NT_NETBSD_MARCH:
- if (file_printf(ms, ", compiled for: %.*s", (int)descsz,
- (const char *)&nbuf[doff]) == -1)
- return size;
- break;
- case NT_NETBSD_CMODEL:
- if (file_printf(ms, ", compiler model: %.*s",
- (int)descsz, (const char *)&nbuf[doff]) == -1)
- return size;
- break;
- default:
- if (file_printf(ms, ", note=%u", xnh_type) == -1)
- return size;
- break;
- }
- return size;
- }
-
- if (namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0) {
- if (xnh_type == NT_FREEBSD_VERSION && descsz == 4) {
- do_note_freebsd_version(ms, swap, &nbuf[doff]);
- *flags |= FLAGS_DID_NOTE;
- return size;
- }
- }
-
- if (namesz == 8 && strcmp((char *)&nbuf[noff], "OpenBSD") == 0 &&
- xnh_type == NT_OPENBSD_VERSION && descsz == 4) {
- if (file_printf(ms, ", for OpenBSD") == -1)
- return size;
- /* Content of note is always 0 */
- *flags |= FLAGS_DID_NOTE;
- return size;
- }
-
- if (namesz == 10 && strcmp((char *)&nbuf[noff], "DragonFly") == 0 &&
- xnh_type == NT_DRAGONFLY_VERSION && descsz == 4) {
- uint32_t desc;
- if (file_printf(ms, ", for DragonFly") == -1)
- return size;
- (void)memcpy(&desc, &nbuf[doff], sizeof(desc));
- desc = elf_getu32(swap, desc);
- if (file_printf(ms, " %d.%d.%d", desc / 100000,
- desc / 10000 % 10, desc % 10000) == -1)
- return size;
- *flags |= FLAGS_DID_NOTE;
- return size;
- }
-
-core:
- /*
- * Sigh. The 2.0.36 kernel in Debian 2.1, at
- * least, doesn't correctly implement name
- * sections, in core dumps, as specified by
- * the "Program Linking" section of "UNIX(R) System
- * V Release 4 Programmer's Guide: ANSI C and
- * Programming Support Tools", because my copy
- * clearly says "The first 'namesz' bytes in 'name'
- * contain a *null-terminated* [emphasis mine]
- * character representation of the entry's owner
- * or originator", but the 2.0.36 kernel code
- * doesn't include the terminating null in the
- * name....
- */
- if ((namesz == 4 && strncmp((char *)&nbuf[noff], "CORE", 4) == 0) ||
- (namesz == 5 && strcmp((char *)&nbuf[noff], "CORE") == 0)) {
- os_style = OS_STYLE_SVR4;
- }
-
- if ((namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0)) {
- os_style = OS_STYLE_FREEBSD;
- }
-
- if ((namesz >= 11 && strncmp((char *)&nbuf[noff], "NetBSD-CORE", 11)
- == 0)) {
- os_style = OS_STYLE_NETBSD;
- }
-
-#ifdef ELFCORE
- if ((*flags & FLAGS_DID_CORE) != 0)
- return size;
-
- if (os_style != -1 && (*flags & FLAGS_DID_CORE_STYLE) == 0) {
- if (file_printf(ms, ", %s-style", os_style_names[os_style])
- == -1)
- return size;
- *flags |= FLAGS_DID_CORE_STYLE;
- }
-
- switch (os_style) {
- case OS_STYLE_NETBSD:
- if (xnh_type == NT_NETBSD_CORE_PROCINFO) {
- uint32_t signo;
- /*
- * Extract the program name. It is at
- * offset 0x7c, and is up to 32-bytes,
- * including the terminating NUL.
- */
- if (file_printf(ms, ", from '%.31s'",
- &nbuf[doff + 0x7c]) == -1)
- return size;
-
- /*
- * Extract the signal number. It is at
- * offset 0x08.
- */
- (void)memcpy(&signo, &nbuf[doff + 0x08],
- sizeof(signo));
- if (file_printf(ms, " (signal %u)",
- elf_getu32(swap, signo)) == -1)
- return size;
- *flags |= FLAGS_DID_CORE;
- return size;
- }
- break;
-
- default:
- if (xnh_type == NT_PRPSINFO && *flags & FLAGS_IS_CORE) {
- size_t i, j;
- unsigned char c;
- /*
- * Extract the program name. We assume
- * it to be 16 characters (that's what it
- * is in SunOS 5.x and Linux).
- *
- * Unfortunately, it's at a different offset
- * in various OSes, so try multiple offsets.
- * If the characters aren't all printable,
- * reject it.
- */
- for (i = 0; i < NOFFSETS; i++) {
- unsigned char *cname, *cp;
- size_t reloffset = prpsoffsets(i);
- size_t noffset = doff + reloffset;
- size_t k;
- for (j = 0; j < 16; j++, noffset++,
- reloffset++) {
- /*
- * Make sure we're not past
- * the end of the buffer; if
- * we are, just give up.
- */
- if (noffset >= size)
- goto tryanother;
-
- /*
- * Make sure we're not past
- * the end of the contents;
- * if we are, this obviously
- * isn't the right offset.
- */
- if (reloffset >= descsz)
- goto tryanother;
-
- c = nbuf[noffset];
- if (c == '\0') {
- /*
- * A '\0' at the
- * beginning is
- * obviously wrong.
- * Any other '\0'
- * means we're done.
- */
- if (j == 0)
- goto tryanother;
- else
- break;
- } else {
- /*
- * A nonprintable
- * character is also
- * wrong.
- */
- if (!isprint(c) || isquote(c))
- goto tryanother;
- }
- }
- /*
- * Well, that worked.
- */
-
- /*
- * Try next offsets, in case this match is
- * in the middle of a string.
- */
- for (k = i + 1 ; k < NOFFSETS ; k++) {
- size_t no;
- int adjust = 1;
- if (prpsoffsets(k) >= prpsoffsets(i))
- continue;
- for (no = doff + prpsoffsets(k);
- no < doff + prpsoffsets(i); no++)
- adjust = adjust
- && isprint(nbuf[no]);
- if (adjust)
- i = k;
- }
-
- cname = (unsigned char *)
- &nbuf[doff + prpsoffsets(i)];
- for (cp = cname; *cp && isprint(*cp); cp++)
- continue;
- /*
- * Linux apparently appends a space at the end
- * of the command line: remove it.
- */
- while (cp > cname && isspace(cp[-1]))
- cp--;
- if (file_printf(ms, ", from '%.*s'",
- (int)(cp - cname), cname) == -1)
- return size;
- *flags |= FLAGS_DID_CORE;
- return size;
-
- tryanother:
- ;
- }
- }
- break;
- }
-#endif
- return offset;
-}
-
-/* SunOS 5.x hardware capability descriptions */
-typedef struct cap_desc {
- uint64_t cd_mask;
- const char *cd_name;
-} cap_desc_t;
-
-static const cap_desc_t cap_desc_sparc[] = {
- { AV_SPARC_MUL32, "MUL32" },
- { AV_SPARC_DIV32, "DIV32" },
- { AV_SPARC_FSMULD, "FSMULD" },
- { AV_SPARC_V8PLUS, "V8PLUS" },
- { AV_SPARC_POPC, "POPC" },
- { AV_SPARC_VIS, "VIS" },
- { AV_SPARC_VIS2, "VIS2" },
- { AV_SPARC_ASI_BLK_INIT, "ASI_BLK_INIT" },
- { AV_SPARC_FMAF, "FMAF" },
- { AV_SPARC_FJFMAU, "FJFMAU" },
- { AV_SPARC_IMA, "IMA" },
- { 0, NULL }
-};
-
-static const cap_desc_t cap_desc_386[] = {
- { AV_386_FPU, "FPU" },
- { AV_386_TSC, "TSC" },
- { AV_386_CX8, "CX8" },
- { AV_386_SEP, "SEP" },
- { AV_386_AMD_SYSC, "AMD_SYSC" },
- { AV_386_CMOV, "CMOV" },
- { AV_386_MMX, "MMX" },
- { AV_386_AMD_MMX, "AMD_MMX" },
- { AV_386_AMD_3DNow, "AMD_3DNow" },
- { AV_386_AMD_3DNowx, "AMD_3DNowx" },
- { AV_386_FXSR, "FXSR" },
- { AV_386_SSE, "SSE" },
- { AV_386_SSE2, "SSE2" },
- { AV_386_PAUSE, "PAUSE" },
- { AV_386_SSE3, "SSE3" },
- { AV_386_MON, "MON" },
- { AV_386_CX16, "CX16" },
- { AV_386_AHF, "AHF" },
- { AV_386_TSCP, "TSCP" },
- { AV_386_AMD_SSE4A, "AMD_SSE4A" },
- { AV_386_POPCNT, "POPCNT" },
- { AV_386_AMD_LZCNT, "AMD_LZCNT" },
- { AV_386_SSSE3, "SSSE3" },
- { AV_386_SSE4_1, "SSE4.1" },
- { AV_386_SSE4_2, "SSE4.2" },
- { 0, NULL }
-};
-
-private int
-doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
- size_t size, off_t fsize, int *flags, int mach, int strtab)
-{
- Elf32_Shdr sh32;
- Elf64_Shdr sh64;
- int stripped = 1;
- size_t nbadcap = 0;
- void *nbuf;
- off_t noff, coff, name_off;
- uint64_t cap_hw1 = 0; /* SunOS 5.x hardware capabilites */
- uint64_t cap_sf1 = 0; /* SunOS 5.x software capabilites */
- char name[50];
-
- if (size != xsh_sizeof) {
- if (file_printf(ms, ", corrupted section header size") == -1)
- return -1;
- return 0;
- }
-
- /* Read offset of name section to be able to read section names later */
- if (pread(fd, xsh_addr, xsh_sizeof, off + size * strtab) == -1) {
- file_badread(ms);
- return -1;
- }
- name_off = xsh_offset;
-
- for ( ; num; num--) {
- /* Read the name of this section. */
- if (pread(fd, name, sizeof(name), name_off + xsh_name) == -1) {
- file_badread(ms);
- return -1;
- }
- name[sizeof(name) - 1] = '\0';
- if (strcmp(name, ".debug_info") == 0)
- stripped = 0;
-
- if (pread(fd, xsh_addr, xsh_sizeof, off) == -1) {
- file_badread(ms);
- return -1;
- }
- off += size;
-
- /* Things we can determine before we seek */
- switch (xsh_type) {
- case SHT_SYMTAB:
-#if 0
- case SHT_DYNSYM:
-#endif
- stripped = 0;
- break;
- default:
- if (xsh_offset > fsize) {
- /* Perhaps warn here */
- continue;
- }
- break;
- }
-
- /* Things we can determine when we seek */
- switch (xsh_type) {
- case SHT_NOTE:
- if ((nbuf = malloc(xsh_size)) == NULL) {
- file_error(ms, errno, "Cannot allocate memory"
- " for note");
- return -1;
- }
- if (pread(fd, nbuf, xsh_size, xsh_offset) == -1) {
- file_badread(ms);
- free(nbuf);
- return -1;
- }
-
- noff = 0;
- for (;;) {
- if (noff >= (off_t)xsh_size)
- break;
- noff = donote(ms, nbuf, (size_t)noff,
- xsh_size, clazz, swap, 4, flags);
- if (noff == 0)
- break;
- }
- free(nbuf);
- break;
- case SHT_SUNW_cap:
- if (nbadcap > 5)
- break;
- switch (mach) {
- case EM_SPARC:
- case EM_SPARCV9:
- case EM_IA_64:
- case EM_386:
- case EM_AMD64:
- break;
- default:
- goto skip;
- }
-
- if (lseek(fd, xsh_offset, SEEK_SET) == (off_t)-1) {
- file_badseek(ms);
- return -1;
- }
- coff = 0;
- for (;;) {
- Elf32_Cap cap32;
- Elf64_Cap cap64;
- char cbuf[/*CONSTCOND*/
- MAX(sizeof cap32, sizeof cap64)];
- if ((coff += xcap_sizeof) > (off_t)xsh_size)
- break;
- if (read(fd, cbuf, (size_t)xcap_sizeof) !=
- (ssize_t)xcap_sizeof) {
- file_badread(ms);
- return -1;
- }
- if (cbuf[0] == 'A') {
-#ifdef notyet
- char *p = cbuf + 1;
- uint32_t len, tag;
- memcpy(&len, p, sizeof(len));
- p += 4;
- len = getu32(swap, len);
- if (memcmp("gnu", p, 3) != 0) {
- if (file_printf(ms,
- ", unknown capability %.3s", p)
- == -1)
- return -1;
- break;
- }
- p += strlen(p) + 1;
- tag = *p++;
- memcpy(&len, p, sizeof(len));
- p += 4;
- len = getu32(swap, len);
- if (tag != 1) {
- if (file_printf(ms, ", unknown gnu"
- " capability tag %d", tag)
- == -1)
- return -1;
- break;
- }
- // gnu attributes
-#endif
- break;
- }
- (void)memcpy(xcap_addr, cbuf, xcap_sizeof);
- switch (xcap_tag) {
- case CA_SUNW_NULL:
- break;
- case CA_SUNW_HW_1:
- cap_hw1 |= xcap_val;
- break;
- case CA_SUNW_SF_1:
- cap_sf1 |= xcap_val;
- break;
- default:
- if (file_printf(ms,
- ", with unknown capability "
- "0x%" INT64_T_FORMAT "x = 0x%"
- INT64_T_FORMAT "x",
- (unsigned long long)xcap_tag,
- (unsigned long long)xcap_val) == -1)
- return -1;
- if (nbadcap++ > 2)
- coff = xsh_size;
- break;
- }
- }
- /*FALLTHROUGH*/
- skip:
- default:
- break;
- }
- }
-
- if (file_printf(ms, ", %sstripped", stripped ? "" : "not ") == -1)
- return -1;
- if (cap_hw1) {
- const cap_desc_t *cdp;
- switch (mach) {
- case EM_SPARC:
- case EM_SPARC32PLUS:
- case EM_SPARCV9:
- cdp = cap_desc_sparc;
- break;
- case EM_386:
- case EM_IA_64:
- case EM_AMD64:
- cdp = cap_desc_386;
- break;
- default:
- cdp = NULL;
- break;
- }
- if (file_printf(ms, ", uses") == -1)
- return -1;
- if (cdp) {
- while (cdp->cd_name) {
- if (cap_hw1 & cdp->cd_mask) {
- if (file_printf(ms,
- " %s", cdp->cd_name) == -1)
- return -1;
- cap_hw1 &= ~cdp->cd_mask;
- }
- ++cdp;
- }
- if (cap_hw1)
- if (file_printf(ms,
- " unknown hardware capability 0x%"
- INT64_T_FORMAT "x",
- (unsigned long long)cap_hw1) == -1)
- return -1;
- } else {
- if (file_printf(ms,
- " hardware capability 0x%" INT64_T_FORMAT "x",
- (unsigned long long)cap_hw1) == -1)
- return -1;
- }
- }
- if (cap_sf1) {
- if (cap_sf1 & SF1_SUNW_FPUSED) {
- if (file_printf(ms,
- (cap_sf1 & SF1_SUNW_FPKNWN)
- ? ", uses frame pointer"
- : ", not known to use frame pointer") == -1)
- return -1;
- }
- cap_sf1 &= ~SF1_SUNW_MASK;
- if (cap_sf1)
- if (file_printf(ms,
- ", with unknown software capability 0x%"
- INT64_T_FORMAT "x",
- (unsigned long long)cap_sf1) == -1)
- return -1;
- }
- return 0;
-}
-
-/*
- * Look through the program headers of an executable image, searching
- * for a PT_INTERP section; if one is found, it's dynamically linked,
- * otherwise it's statically linked.
- */
-private int
-dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
- int num, size_t size, off_t fsize, int *flags, int sh_num)
-{
- Elf32_Phdr ph32;
- Elf64_Phdr ph64;
- const char *linking_style = "statically";
- const char *shared_libraries = "";
- unsigned char nbuf[BUFSIZ];
- ssize_t bufsize;
- size_t offset, align, len;
-
- if (size != xph_sizeof) {
- if (file_printf(ms, ", corrupted program header size") == -1)
- return -1;
- return 0;
- }
-
- for ( ; num; num--) {
- if (pread(fd, xph_addr, xph_sizeof, off) == -1) {
- file_badread(ms);
- return -1;
- }
-
- off += size;
-
- /* Things we can determine before we seek */
- switch (xph_type) {
- case PT_DYNAMIC:
- linking_style = "dynamically";
- break;
- case PT_INTERP:
- shared_libraries = " (uses shared libs)";
- break;
- default:
- if (xph_offset > fsize) {
- /* Maybe warn here? */
- continue;
- }
- break;
- }
-
- /* Things we can determine when we seek */
- switch (xph_type) {
- case PT_NOTE:
- if ((align = xph_align) & 0x80000000UL) {
- if (file_printf(ms,
- ", invalid note alignment 0x%lx",
- (unsigned long)align) == -1)
- return -1;
- align = 4;
- }
- if (sh_num)
- break;
- /*
- * This is a PT_NOTE section; loop through all the notes
- * in the section.
- */
- len = xph_filesz < sizeof(nbuf) ? xph_filesz
- : sizeof(nbuf);
- bufsize = pread(fd, nbuf, len, xph_offset);
- if (bufsize == -1) {
- file_badread(ms);
- return -1;
- }
- offset = 0;
- for (;;) {
- if (offset >= (size_t)bufsize)
- break;
- offset = donote(ms, nbuf, offset,
- (size_t)bufsize, clazz, swap, align,
- flags);
- if (offset == 0)
- break;
- }
- break;
- default:
- break;
- }
- }
- if (file_printf(ms, ", %s linked%s", linking_style, shared_libraries)
- == -1)
- return -1;
- return 0;
-}
-
-
-protected int
-file_tryelf(struct magic_set *ms, int fd, const unsigned char *buf,
- size_t nbytes)
-{
- union {
- int32_t l;
- char c[sizeof (int32_t)];
- } u;
- int clazz;
- int swap;
- struct stat st;
- off_t fsize;
- int flags = 0;
- Elf32_Ehdr elf32hdr;
- Elf64_Ehdr elf64hdr;
- uint16_t type, phnum, shnum;
-
- if (ms->flags & (MAGIC_MIME|MAGIC_APPLE))
- return 0;
- /*
- * ELF executables have multiple section headers in arbitrary
- * file locations and thus file(1) cannot determine it from easily.
- * Instead we traverse thru all section headers until a symbol table
- * one is found or else the binary is stripped.
- * Return immediately if it's not ELF (so we avoid pipe2file unless needed).
- */
- if (buf[EI_MAG0] != ELFMAG0
- || (buf[EI_MAG1] != ELFMAG1 && buf[EI_MAG1] != OLFMAG1)
- || buf[EI_MAG2] != ELFMAG2 || buf[EI_MAG3] != ELFMAG3)
- return 0;
-
- /*
- * If we cannot seek, it must be a pipe, socket or fifo.
- */
- if((lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) && (errno == ESPIPE))
- fd = file_pipe2file(ms, fd, buf, nbytes);
-
- if (fstat(fd, &st) == -1) {
- file_badread(ms);
- return -1;
- }
- fsize = st.st_size;
-
- clazz = buf[EI_CLASS];
-
- switch (clazz) {
- case ELFCLASS32:
-#undef elf_getu
-#define elf_getu(a, b) elf_getu32(a, b)
-#undef elfhdr
-#define elfhdr elf32hdr
-#include "elfclass.h"
- case ELFCLASS64:
-#undef elf_getu
-#define elf_getu(a, b) elf_getu64(a, b)
-#undef elfhdr
-#define elfhdr elf64hdr
-#include "elfclass.h"
- default:
- if (file_printf(ms, ", unknown class %d", clazz) == -1)
- return -1;
- break;
- }
- return 0;
-}
-#endif
Deleted: trunk/contrib/file/readelf.h
===================================================================
--- trunk/contrib/file/readelf.h 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/readelf.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,365 +0,0 @@
-/*
- * Copyright (c) Christos Zoulas 2003.
- * All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
- *
- * Provide elf data structures for non-elf machines, allowing file
- * non-elf hosts to determine if an elf binary is stripped.
- * Note: cobbled from the linux header file, with modifications
- */
-#ifndef __fake_elf_h__
-#define __fake_elf_h__
-
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-typedef uint32_t Elf32_Addr;
-typedef uint32_t Elf32_Off;
-typedef uint16_t Elf32_Half;
-typedef uint32_t Elf32_Word;
-typedef uint8_t Elf32_Char;
-
-typedef uint64_t Elf64_Addr;
-typedef uint64_t Elf64_Off;
-typedef uint64_t Elf64_Xword;
-typedef uint16_t Elf64_Half;
-typedef uint32_t Elf64_Word;
-typedef uint8_t Elf64_Char;
-
-#define EI_NIDENT 16
-
-typedef struct {
- Elf32_Char e_ident[EI_NIDENT];
- Elf32_Half e_type;
- Elf32_Half e_machine;
- Elf32_Word e_version;
- Elf32_Addr e_entry; /* Entry point */
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
- Elf32_Word e_flags;
- Elf32_Half e_ehsize;
- Elf32_Half e_phentsize;
- Elf32_Half e_phnum;
- Elf32_Half e_shentsize;
- Elf32_Half e_shnum;
- Elf32_Half e_shstrndx;
-} Elf32_Ehdr;
-
-typedef struct {
- Elf64_Char e_ident[EI_NIDENT];
- Elf64_Half e_type;
- Elf64_Half e_machine;
- Elf64_Word e_version;
- Elf64_Addr e_entry; /* Entry point */
- Elf64_Off e_phoff;
- Elf64_Off e_shoff;
- Elf64_Word e_flags;
- Elf64_Half e_ehsize;
- Elf64_Half e_phentsize;
- Elf64_Half e_phnum;
- Elf64_Half e_shentsize;
- Elf64_Half e_shnum;
- Elf64_Half e_shstrndx;
-} Elf64_Ehdr;
-
-/* e_type */
-#define ET_REL 1
-#define ET_EXEC 2
-#define ET_DYN 3
-#define ET_CORE 4
-
-/* e_machine (used only for SunOS 5.x hardware capabilities) */
-#define EM_SPARC 2
-#define EM_386 3
-#define EM_SPARC32PLUS 18
-#define EM_SPARCV9 43
-#define EM_IA_64 50
-#define EM_AMD64 62
-
-/* sh_type */
-#define SHT_SYMTAB 2
-#define SHT_NOTE 7
-#define SHT_DYNSYM 11
-#define SHT_SUNW_cap 0x6ffffff5 /* SunOS 5.x hw/sw capabilites */
-
-/* elf type */
-#define ELFDATANONE 0 /* e_ident[EI_DATA] */
-#define ELFDATA2LSB 1
-#define ELFDATA2MSB 2
-
-/* elf class */
-#define ELFCLASSNONE 0
-#define ELFCLASS32 1
-#define ELFCLASS64 2
-
-/* magic number */
-#define EI_MAG0 0 /* e_ident[] indexes */
-#define EI_MAG1 1
-#define EI_MAG2 2
-#define EI_MAG3 3
-#define EI_CLASS 4
-#define EI_DATA 5
-#define EI_VERSION 6
-#define EI_PAD 7
-
-#define ELFMAG0 0x7f /* EI_MAG */
-#define ELFMAG1 'E'
-#define ELFMAG2 'L'
-#define ELFMAG3 'F'
-#define ELFMAG "\177ELF"
-
-#define OLFMAG1 'O'
-#define OLFMAG "\177OLF"
-
-typedef struct {
- Elf32_Word p_type;
- Elf32_Off p_offset;
- Elf32_Addr p_vaddr;
- Elf32_Addr p_paddr;
- Elf32_Word p_filesz;
- Elf32_Word p_memsz;
- Elf32_Word p_flags;
- Elf32_Word p_align;
-} Elf32_Phdr;
-
-typedef struct {
- Elf64_Word p_type;
- Elf64_Word p_flags;
- Elf64_Off p_offset;
- Elf64_Addr p_vaddr;
- Elf64_Addr p_paddr;
- Elf64_Xword p_filesz;
- Elf64_Xword p_memsz;
- Elf64_Xword p_align;
-} Elf64_Phdr;
-
-#define PT_NULL 0 /* p_type */
-#define PT_LOAD 1
-#define PT_DYNAMIC 2
-#define PT_INTERP 3
-#define PT_NOTE 4
-#define PT_SHLIB 5
-#define PT_PHDR 6
-#define PT_NUM 7
-
-typedef struct {
- Elf32_Word sh_name;
- Elf32_Word sh_type;
- Elf32_Word sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- Elf32_Word sh_size;
- Elf32_Word sh_link;
- Elf32_Word sh_info;
- Elf32_Word sh_addralign;
- Elf32_Word sh_entsize;
-} Elf32_Shdr;
-
-typedef struct {
- Elf64_Word sh_name;
- Elf64_Word sh_type;
- Elf64_Off sh_flags;
- Elf64_Addr sh_addr;
- Elf64_Off sh_offset;
- Elf64_Off sh_size;
- Elf64_Word sh_link;
- Elf64_Word sh_info;
- Elf64_Off sh_addralign;
- Elf64_Off sh_entsize;
-} Elf64_Shdr;
-
-#define NT_NETBSD_CORE_PROCINFO 1
-
-/* Note header in a PT_NOTE section */
-typedef struct elf_note {
- Elf32_Word n_namesz; /* Name size */
- Elf32_Word n_descsz; /* Content size */
- Elf32_Word n_type; /* Content type */
-} Elf32_Nhdr;
-
-typedef struct {
- Elf64_Word n_namesz;
- Elf64_Word n_descsz;
- Elf64_Word n_type;
-} Elf64_Nhdr;
-
-/* Notes used in ET_CORE */
-#define NT_PRSTATUS 1
-#define NT_PRFPREG 2
-#define NT_PRPSINFO 3
-#define NT_PRXREG 4
-#define NT_TASKSTRUCT 4
-#define NT_PLATFORM 5
-#define NT_AUXV 6
-
-/* Note types used in executables */
-/* NetBSD executables (name = "NetBSD") */
-#define NT_NETBSD_VERSION 1
-#define NT_NETBSD_EMULATION 2
-#define NT_FREEBSD_VERSION 1
-#define NT_OPENBSD_VERSION 1
-#define NT_DRAGONFLY_VERSION 1
-/*
- * GNU executables (name = "GNU")
- * word[0]: GNU OS tags
- * word[1]: major version
- * word[2]: minor version
- * word[3]: tiny version
- */
-#define NT_GNU_VERSION 1
-
-/* GNU OS tags */
-#define GNU_OS_LINUX 0
-#define GNU_OS_HURD 1
-#define GNU_OS_SOLARIS 2
-#define GNU_OS_KFREEBSD 3
-#define GNU_OS_KNETBSD 4
-
-/*
- * GNU Hardware capability information
- * word[0]: Number of entries
- * word[1]: Bitmask of enabled entries
- * Followed by a byte id, and a NUL terminated string per entry
- */
-#define NT_GNU_HWCAP 2
-
-/*
- * GNU Build ID generated by ld
- * 160 bit SHA1 [default]
- * 128 bit md5 or uuid
- */
-#define NT_GNU_BUILD_ID 3
-
-/*
- * NetBSD-specific note type: PaX.
- * There should be 1 NOTE per executable.
- * name: PaX\0
- * namesz: 4
- * desc:
- * word[0]: capability bitmask
- * descsz: 4
- */
-#define NT_NETBSD_PAX 3
-#define NT_NETBSD_PAX_MPROTECT 0x01 /* Force enable Mprotect */
-#define NT_NETBSD_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */
-#define NT_NETBSD_PAX_GUARD 0x04 /* Force enable Segvguard */
-#define NT_NETBSD_PAX_NOGUARD 0x08 /* Force disable Servguard */
-#define NT_NETBSD_PAX_ASLR 0x10 /* Force enable ASLR */
-#define NT_NETBSD_PAX_NOASLR 0x20 /* Force disable ASLR */
-
-/*
- * NetBSD-specific note type: MACHINE_ARCH.
- * There should be 1 NOTE per executable.
- * name: NetBSD\0
- * namesz: 7
- * desc: string
- * descsz: variable
- */
-#define NT_NETBSD_MARCH 5
-
-/*
- * NetBSD-specific note type: COMPILER MODEL.
- * There should be 1 NOTE per executable.
- * name: NetBSD\0
- * namesz: 7
- * desc: string
- * descsz: variable
- */
-#define NT_NETBSD_CMODEL 6
-
-#if !defined(ELFSIZE) && defined(ARCH_ELFSIZE)
-#define ELFSIZE ARCH_ELFSIZE
-#endif
-/* SunOS 5.x hardware/software capabilities */
-typedef struct {
- Elf32_Word c_tag;
- union {
- Elf32_Word c_val;
- Elf32_Addr c_ptr;
- } c_un;
-} Elf32_Cap;
-
-typedef struct {
- Elf64_Xword c_tag;
- union {
- Elf64_Xword c_val;
- Elf64_Addr c_ptr;
- } c_un;
-} Elf64_Cap;
-
-/* SunOS 5.x hardware/software capability tags */
-#define CA_SUNW_NULL 0
-#define CA_SUNW_HW_1 1
-#define CA_SUNW_SF_1 2
-
-/* SunOS 5.x software capabilities */
-#define SF1_SUNW_FPKNWN 0x01
-#define SF1_SUNW_FPUSED 0x02
-#define SF1_SUNW_MASK 0x03
-
-/* SunOS 5.x hardware capabilities: sparc */
-#define AV_SPARC_MUL32 0x0001
-#define AV_SPARC_DIV32 0x0002
-#define AV_SPARC_FSMULD 0x0004
-#define AV_SPARC_V8PLUS 0x0008
-#define AV_SPARC_POPC 0x0010
-#define AV_SPARC_VIS 0x0020
-#define AV_SPARC_VIS2 0x0040
-#define AV_SPARC_ASI_BLK_INIT 0x0080
-#define AV_SPARC_FMAF 0x0100
-#define AV_SPARC_FJFMAU 0x4000
-#define AV_SPARC_IMA 0x8000
-
-/* SunOS 5.x hardware capabilities: 386 */
-#define AV_386_FPU 0x00000001
-#define AV_386_TSC 0x00000002
-#define AV_386_CX8 0x00000004
-#define AV_386_SEP 0x00000008
-#define AV_386_AMD_SYSC 0x00000010
-#define AV_386_CMOV 0x00000020
-#define AV_386_MMX 0x00000040
-#define AV_386_AMD_MMX 0x00000080
-#define AV_386_AMD_3DNow 0x00000100
-#define AV_386_AMD_3DNowx 0x00000200
-#define AV_386_FXSR 0x00000400
-#define AV_386_SSE 0x00000800
-#define AV_386_SSE2 0x00001000
-#define AV_386_PAUSE 0x00002000
-#define AV_386_SSE3 0x00004000
-#define AV_386_MON 0x00008000
-#define AV_386_CX16 0x00010000
-#define AV_386_AHF 0x00020000
-#define AV_386_TSCP 0x00040000
-#define AV_386_AMD_SSE4A 0x00080000
-#define AV_386_POPCNT 0x00100000
-#define AV_386_AMD_LZCNT 0x00200000
-#define AV_386_SSSE3 0x00400000
-#define AV_386_SSE4_1 0x00800000
-#define AV_386_SSE4_2 0x01000000
-
-#endif
Deleted: trunk/contrib/file/softmagic.c
===================================================================
--- trunk/contrib/file/softmagic.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/softmagic.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,2132 +0,0 @@
-/*
- * Copyright (c) Ian F. Darwin 1986-1995.
- * Software written by Ian F. Darwin and others;
- * maintained 1995-present by Christos Zoulas and others.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * softmagic - interpret variable magic from MAGIC
- */
-
-#include "file.h"
-
-#ifndef lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.191 2014/06/04 17:36:34 christos Exp $")
-#endif /* lint */
-
-#include "magic.h"
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <time.h>
-#if defined(HAVE_LOCALE_H)
-#include <locale.h>
-#endif
-
-
-private int match(struct magic_set *, struct magic *, uint32_t,
- const unsigned char *, size_t, size_t, int, int, int, int, int *, int *,
- int *);
-private int mget(struct magic_set *, const unsigned char *,
- struct magic *, size_t, size_t, unsigned int, int, int, int, int, int *,
- int *, int *);
-private int magiccheck(struct magic_set *, struct magic *);
-private int32_t mprint(struct magic_set *, struct magic *);
-private int32_t moffset(struct magic_set *, struct magic *);
-private void mdebug(uint32_t, const char *, size_t);
-private int mcopy(struct magic_set *, union VALUETYPE *, int, int,
- const unsigned char *, uint32_t, size_t, struct magic *);
-private int mconvert(struct magic_set *, struct magic *, int);
-private int print_sep(struct magic_set *, int);
-private int handle_annotation(struct magic_set *, struct magic *);
-private void cvt_8(union VALUETYPE *, const struct magic *);
-private void cvt_16(union VALUETYPE *, const struct magic *);
-private void cvt_32(union VALUETYPE *, const struct magic *);
-private void cvt_64(union VALUETYPE *, const struct magic *);
-
-#define OFFSET_OOB(n, o, i) ((n) < (o) || (i) > ((n) - (o)))
-
-#define MAX_RECURSION_LEVEL 10
-
-/*
- * softmagic - lookup one file in parsed, in-memory copy of database
- * Passed the name and FILE * of one file to be typed.
- */
-/*ARGSUSED1*/ /* nbytes passed for regularity, maybe need later */
-protected int
-file_softmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes,
- size_t level, int mode, int text)
-{
- struct mlist *ml;
- int rv, printed_something = 0, need_separator = 0;
- for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next)
- if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes, 0, mode,
- text, 0, level, &printed_something, &need_separator,
- NULL)) != 0)
- return rv;
-
- return 0;
-}
-
-#define FILE_FMTDEBUG
-#ifdef FILE_FMTDEBUG
-#define F(a, b, c) file_fmtcheck((a), (b), (c), __FILE__, __LINE__)
-
-private const char * __attribute__((__format_arg__(3)))
-file_fmtcheck(struct magic_set *ms, const struct magic *m, const char *def,
- const char *file, size_t line)
-{
- const char *ptr = fmtcheck(m->desc, def);
- if (ptr == def)
- file_magerror(ms,
- "%s, %zu: format `%s' does not match with `%s'",
- file, line, m->desc, def);
- return ptr;
-}
-#else
-#define F(a, b, c) fmtcheck((b)->desc, (c))
-#endif
-
-/*
- * Go through the whole list, stopping if you find a match. Process all
- * the continuations of that match before returning.
- *
- * We support multi-level continuations:
- *
- * At any time when processing a successful top-level match, there is a
- * current continuation level; it represents the level of the last
- * successfully matched continuation.
- *
- * Continuations above that level are skipped as, if we see one, it
- * means that the continuation that controls them - i.e, the
- * lower-level continuation preceding them - failed to match.
- *
- * Continuations below that level are processed as, if we see one,
- * it means we've finished processing or skipping higher-level
- * continuations under the control of a successful or unsuccessful
- * lower-level continuation, and are now seeing the next lower-level
- * continuation and should process it. The current continuation
- * level reverts to the level of the one we're seeing.
- *
- * Continuations at the current level are processed as, if we see
- * one, there's no lower-level continuation that may have failed.
- *
- * If a continuation matches, we bump the current continuation level
- * so that higher-level continuations are processed.
- */
-private int
-match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
- const unsigned char *s, size_t nbytes, size_t offset, int mode, int text,
- int flip, int recursion_level, int *printed_something, int *need_separator,
- int *returnval)
-{
- uint32_t magindex = 0;
- unsigned int cont_level = 0;
- int returnvalv = 0, e; /* if a match is found it is set to 1*/
- int firstline = 1; /* a flag to print X\n X\n- X */
- int print = (ms->flags & (MAGIC_MIME|MAGIC_APPLE)) == 0;
-
- if (returnval == NULL)
- returnval = &returnvalv;
-
- if (file_check_mem(ms, cont_level) == -1)
- return -1;
-
- for (magindex = 0; magindex < nmagic; magindex++) {
- int flush = 0;
- struct magic *m = &magic[magindex];
-
- if (m->type != FILE_NAME)
- if ((IS_STRING(m->type) &&
-#define FLT (STRING_BINTEST | STRING_TEXTTEST)
- ((text && (m->str_flags & FLT) == STRING_BINTEST) ||
- (!text && (m->str_flags & FLT) == STRING_TEXTTEST))) ||
- (m->flag & mode) != mode) {
- /* Skip sub-tests */
- while (magindex + 1 < nmagic &&
- magic[magindex + 1].cont_level != 0 &&
- ++magindex)
- continue;
- continue; /* Skip to next top-level test*/
- }
-
- ms->offset = m->offset;
- ms->line = m->lineno;
-
- /* if main entry matches, print it... */
- switch (mget(ms, s, m, nbytes, offset, cont_level, mode, text,
- flip, recursion_level + 1, printed_something,
- need_separator, returnval)) {
- case -1:
- return -1;
- case 0:
- flush = m->reln != '!';
- break;
- default:
- if (m->type == FILE_INDIRECT)
- *returnval = 1;
-
- switch (magiccheck(ms, m)) {
- case -1:
- return -1;
- case 0:
- flush++;
- break;
- default:
- flush = 0;
- break;
- }
- break;
- }
- if (flush) {
- /*
- * main entry didn't match,
- * flush its continuations
- */
- while (magindex < nmagic - 1 &&
- magic[magindex + 1].cont_level != 0)
- magindex++;
- continue;
- }
-
- if ((e = handle_annotation(ms, m)) != 0) {
- *need_separator = 1;
- *printed_something = 1;
- *returnval = 1;
- return e;
- }
- /*
- * If we are going to print something, we'll need to print
- * a blank before we print something else.
- */
- if (*m->desc) {
- *need_separator = 1;
- *printed_something = 1;
- if (print_sep(ms, firstline) == -1)
- return -1;
- }
-
-
- if (print && mprint(ms, m) == -1)
- return -1;
-
- ms->c.li[cont_level].off = moffset(ms, m);
-
- /* and any continuations that match */
- if (file_check_mem(ms, ++cont_level) == -1)
- return -1;
-
- while (++magindex < nmagic &&
- magic[magindex].cont_level != 0) {
- m = &magic[magindex];
- ms->line = m->lineno; /* for messages */
-
- if (cont_level < m->cont_level)
- continue;
- if (cont_level > m->cont_level) {
- /*
- * We're at the end of the level
- * "cont_level" continuations.
- */
- cont_level = m->cont_level;
- }
- ms->offset = m->offset;
- if (m->flag & OFFADD) {
- ms->offset +=
- ms->c.li[cont_level - 1].off;
- }
-
-#ifdef ENABLE_CONDITIONALS
- if (m->cond == COND_ELSE ||
- m->cond == COND_ELIF) {
- if (ms->c.li[cont_level].last_match == 1)
- continue;
- }
-#endif
- switch (mget(ms, s, m, nbytes, offset, cont_level, mode,
- text, flip, recursion_level + 1, printed_something,
- need_separator, returnval)) {
- case -1:
- return -1;
- case 0:
- if (m->reln != '!')
- continue;
- flush = 1;
- break;
- default:
- if (m->type == FILE_INDIRECT)
- *returnval = 1;
- flush = 0;
- break;
- }
-
- switch (flush ? 1 : magiccheck(ms, m)) {
- case -1:
- return -1;
- case 0:
-#ifdef ENABLE_CONDITIONALS
- ms->c.li[cont_level].last_match = 0;
-#endif
- break;
- default:
-#ifdef ENABLE_CONDITIONALS
- ms->c.li[cont_level].last_match = 1;
-#endif
- if (m->type == FILE_CLEAR)
- ms->c.li[cont_level].got_match = 0;
- else if (ms->c.li[cont_level].got_match) {
- if (m->type == FILE_DEFAULT)
- break;
- } else
- ms->c.li[cont_level].got_match = 1;
- if ((e = handle_annotation(ms, m)) != 0) {
- *need_separator = 1;
- *printed_something = 1;
- *returnval = 1;
- return e;
- }
- /*
- * If we are going to print something,
- * make sure that we have a separator first.
- */
- if (*m->desc) {
- if (!*printed_something) {
- *printed_something = 1;
- if (print_sep(ms, firstline)
- == -1)
- return -1;
- }
- }
- /*
- * This continuation matched. Print
- * its message, with a blank before it
- * if the previous item printed and
- * this item isn't empty.
- */
- /* space if previous printed */
- if (*need_separator
- && ((m->flag & NOSPACE) == 0)
- && *m->desc) {
- if (print &&
- file_printf(ms, " ") == -1)
- return -1;
- *need_separator = 0;
- }
- if (print && mprint(ms, m) == -1)
- return -1;
-
- ms->c.li[cont_level].off = moffset(ms, m);
-
- if (*m->desc)
- *need_separator = 1;
-
- /*
- * If we see any continuations
- * at a higher level,
- * process them.
- */
- if (file_check_mem(ms, ++cont_level) == -1)
- return -1;
- break;
- }
- }
- if (*printed_something) {
- firstline = 0;
- if (print)
- *returnval = 1;
- }
- if ((ms->flags & MAGIC_CONTINUE) == 0 && *printed_something) {
- return *returnval; /* don't keep searching */
- }
- }
- return *returnval; /* This is hit if -k is set or there is no match */
-}
-
-private int
-check_fmt(struct magic_set *ms, struct magic *m)
-{
- file_regex_t rx;
- int rc, rv = -1;
-
- if (strchr(m->desc, '%') == NULL)
- return 0;
-
- rc = file_regcomp(&rx, "%[-0-9\\.]*s", REG_EXTENDED|REG_NOSUB);
- if (rc) {
- file_regerror(&rx, rc, ms);
- } else {
- rc = file_regexec(&rx, m->desc, 0, 0, 0);
- rv = !rc;
- }
- file_regfree(&rx);
- return rv;
-}
-
-#ifndef HAVE_STRNDUP
-char * strndup(const char *, size_t);
-
-char *
-strndup(const char *str, size_t n)
-{
- size_t len;
- char *copy;
-
- for (len = 0; len < n && str[len]; len++)
- continue;
- if ((copy = malloc(len + 1)) == NULL)
- return NULL;
- (void)memcpy(copy, str, len);
- copy[len] = '\0';
- return copy;
-}
-#endif /* HAVE_STRNDUP */
-
-private int32_t
-mprint(struct magic_set *ms, struct magic *m)
-{
- uint64_t v;
- float vf;
- double vd;
- int64_t t = 0;
- char buf[128], tbuf[26];
- union VALUETYPE *p = &ms->ms_value;
-
- switch (m->type) {
- case FILE_BYTE:
- v = file_signextend(ms, m, (uint64_t)p->b);
- switch (check_fmt(ms, m)) {
- case -1:
- return -1;
- case 1:
- (void)snprintf(buf, sizeof(buf), "%d",
- (unsigned char)v);
- if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
- return -1;
- break;
- default:
- if (file_printf(ms, F(ms, m, "%d"),
- (unsigned char) v) == -1)
- return -1;
- break;
- }
- t = ms->offset + sizeof(char);
- break;
-
- case FILE_SHORT:
- case FILE_BESHORT:
- case FILE_LESHORT:
- v = file_signextend(ms, m, (uint64_t)p->h);
- switch (check_fmt(ms, m)) {
- case -1:
- return -1;
- case 1:
- (void)snprintf(buf, sizeof(buf), "%u",
- (unsigned short)v);
- if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
- return -1;
- break;
- default:
- if (file_printf(ms, F(ms, m, "%u"),
- (unsigned short) v) == -1)
- return -1;
- break;
- }
- t = ms->offset + sizeof(short);
- break;
-
- case FILE_LONG:
- case FILE_BELONG:
- case FILE_LELONG:
- case FILE_MELONG:
- v = file_signextend(ms, m, (uint64_t)p->l);
- switch (check_fmt(ms, m)) {
- case -1:
- return -1;
- case 1:
- (void)snprintf(buf, sizeof(buf), "%u", (uint32_t) v);
- if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
- return -1;
- break;
- default:
- if (file_printf(ms, F(ms, m, "%u"), (uint32_t) v) == -1)
- return -1;
- break;
- }
- t = ms->offset + sizeof(int32_t);
- break;
-
- case FILE_QUAD:
- case FILE_BEQUAD:
- case FILE_LEQUAD:
- v = file_signextend(ms, m, p->q);
- switch (check_fmt(ms, m)) {
- case -1:
- return -1;
- case 1:
- (void)snprintf(buf, sizeof(buf), "%" INT64_T_FORMAT "u",
- (unsigned long long)v);
- if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
- return -1;
- break;
- default:
- if (file_printf(ms, F(ms, m, "%" INT64_T_FORMAT "u"),
- (unsigned long long) v) == -1)
- return -1;
- break;
- }
- t = ms->offset + sizeof(int64_t);
- break;
-
- case FILE_STRING:
- case FILE_PSTRING:
- case FILE_BESTRING16:
- case FILE_LESTRING16:
- if (m->reln == '=' || m->reln == '!') {
- if (file_printf(ms, F(ms, m, "%s"), m->value.s) == -1)
- return -1;
- t = ms->offset + m->vallen;
- }
- else {
- char *str = p->s;
-
- /* compute t before we mangle the string? */
- t = ms->offset + strlen(str);
-
- if (*m->value.s == '\0')
- str[strcspn(str, "\n")] = '\0';
-
- if (m->str_flags & STRING_TRIM) {
- char *last;
- while (isspace((unsigned char)*str))
- str++;
- last = str;
- while (*last)
- last++;
- --last;
- while (isspace((unsigned char)*last))
- last--;
- *++last = '\0';
- }
-
- if (file_printf(ms, F(ms, m, "%s"), str) == -1)
- return -1;
-
- if (m->type == FILE_PSTRING)
- t += file_pstring_length_size(m);
- }
- break;
-
- case FILE_DATE:
- case FILE_BEDATE:
- case FILE_LEDATE:
- case FILE_MEDATE:
- if (file_printf(ms, F(ms, m, "%s"),
- file_fmttime(p->l + m->num_mask, FILE_T_LOCAL, tbuf)) == -1)
- return -1;
- t = ms->offset + sizeof(uint32_t);
- break;
-
- case FILE_LDATE:
- case FILE_BELDATE:
- case FILE_LELDATE:
- case FILE_MELDATE:
- if (file_printf(ms, F(ms, m, "%s"),
- file_fmttime(p->l + m->num_mask, 0, tbuf)) == -1)
- return -1;
- t = ms->offset + sizeof(uint32_t);
- break;
-
- case FILE_QDATE:
- case FILE_BEQDATE:
- case FILE_LEQDATE:
- if (file_printf(ms, F(ms, m, "%s"),
- file_fmttime(p->q + m->num_mask, FILE_T_LOCAL, tbuf)) == -1)
- return -1;
- t = ms->offset + sizeof(uint64_t);
- break;
-
- case FILE_QLDATE:
- case FILE_BEQLDATE:
- case FILE_LEQLDATE:
- if (file_printf(ms, F(ms, m, "%s"),
- file_fmttime(p->q + m->num_mask, 0, tbuf)) == -1)
- return -1;
- t = ms->offset + sizeof(uint64_t);
- break;
-
- case FILE_QWDATE:
- case FILE_BEQWDATE:
- case FILE_LEQWDATE:
- if (file_printf(ms, F(ms, m, "%s"),
- file_fmttime(p->q + m->num_mask, FILE_T_WINDOWS, tbuf)) == -1)
- return -1;
- t = ms->offset + sizeof(uint64_t);
- break;
-
- case FILE_FLOAT:
- case FILE_BEFLOAT:
- case FILE_LEFLOAT:
- vf = p->f;
- switch (check_fmt(ms, m)) {
- case -1:
- return -1;
- case 1:
- (void)snprintf(buf, sizeof(buf), "%g", vf);
- if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
- return -1;
- break;
- default:
- if (file_printf(ms, F(ms, m, "%g"), vf) == -1)
- return -1;
- break;
- }
- t = ms->offset + sizeof(float);
- break;
-
- case FILE_DOUBLE:
- case FILE_BEDOUBLE:
- case FILE_LEDOUBLE:
- vd = p->d;
- switch (check_fmt(ms, m)) {
- case -1:
- return -1;
- case 1:
- (void)snprintf(buf, sizeof(buf), "%g", vd);
- if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
- return -1;
- break;
- default:
- if (file_printf(ms, F(ms, m, "%g"), vd) == -1)
- return -1;
- break;
- }
- t = ms->offset + sizeof(double);
- break;
-
- case FILE_REGEX: {
- char *cp;
- int rval;
-
- cp = strndup((const char *)ms->search.s, ms->search.rm_len);
- if (cp == NULL) {
- file_oomem(ms, ms->search.rm_len);
- return -1;
- }
- rval = file_printf(ms, F(ms, m, "%s"), cp);
- free(cp);
-
- if (rval == -1)
- return -1;
-
- if ((m->str_flags & REGEX_OFFSET_START))
- t = ms->search.offset;
- else
- t = ms->search.offset + ms->search.rm_len;
- break;
- }
-
- case FILE_SEARCH:
- if (file_printf(ms, F(ms, m, "%s"), m->value.s) == -1)
- return -1;
- if ((m->str_flags & REGEX_OFFSET_START))
- t = ms->search.offset;
- else
- t = ms->search.offset + m->vallen;
- break;
-
- case FILE_DEFAULT:
- case FILE_CLEAR:
- if (file_printf(ms, "%s", m->desc) == -1)
- return -1;
- t = ms->offset;
- break;
-
- case FILE_INDIRECT:
- case FILE_USE:
- case FILE_NAME:
- t = ms->offset;
- break;
-
- default:
- file_magerror(ms, "invalid m->type (%d) in mprint()", m->type);
- return -1;
- }
- return (int32_t)t;
-}
-
-private int32_t
-moffset(struct magic_set *ms, struct magic *m)
-{
- switch (m->type) {
- case FILE_BYTE:
- return CAST(int32_t, (ms->offset + sizeof(char)));
-
- case FILE_SHORT:
- case FILE_BESHORT:
- case FILE_LESHORT:
- return CAST(int32_t, (ms->offset + sizeof(short)));
-
- case FILE_LONG:
- case FILE_BELONG:
- case FILE_LELONG:
- case FILE_MELONG:
- return CAST(int32_t, (ms->offset + sizeof(int32_t)));
-
- case FILE_QUAD:
- case FILE_BEQUAD:
- case FILE_LEQUAD:
- return CAST(int32_t, (ms->offset + sizeof(int64_t)));
-
- case FILE_STRING:
- case FILE_PSTRING:
- case FILE_BESTRING16:
- case FILE_LESTRING16:
- if (m->reln == '=' || m->reln == '!')
- return ms->offset + m->vallen;
- else {
- union VALUETYPE *p = &ms->ms_value;
- uint32_t t;
-
- if (*m->value.s == '\0')
- p->s[strcspn(p->s, "\n")] = '\0';
- t = CAST(uint32_t, (ms->offset + strlen(p->s)));
- if (m->type == FILE_PSTRING)
- t += (uint32_t)file_pstring_length_size(m);
- return t;
- }
-
- case FILE_DATE:
- case FILE_BEDATE:
- case FILE_LEDATE:
- case FILE_MEDATE:
- return CAST(int32_t, (ms->offset + sizeof(uint32_t)));
-
- case FILE_LDATE:
- case FILE_BELDATE:
- case FILE_LELDATE:
- case FILE_MELDATE:
- return CAST(int32_t, (ms->offset + sizeof(uint32_t)));
-
- case FILE_QDATE:
- case FILE_BEQDATE:
- case FILE_LEQDATE:
- return CAST(int32_t, (ms->offset + sizeof(uint64_t)));
-
- case FILE_QLDATE:
- case FILE_BEQLDATE:
- case FILE_LEQLDATE:
- return CAST(int32_t, (ms->offset + sizeof(uint64_t)));
-
- case FILE_FLOAT:
- case FILE_BEFLOAT:
- case FILE_LEFLOAT:
- return CAST(int32_t, (ms->offset + sizeof(float)));
-
- case FILE_DOUBLE:
- case FILE_BEDOUBLE:
- case FILE_LEDOUBLE:
- return CAST(int32_t, (ms->offset + sizeof(double)));
-
- case FILE_REGEX:
- if ((m->str_flags & REGEX_OFFSET_START) != 0)
- return CAST(int32_t, ms->search.offset);
- else
- return CAST(int32_t, (ms->search.offset +
- ms->search.rm_len));
-
- case FILE_SEARCH:
- if ((m->str_flags & REGEX_OFFSET_START) != 0)
- return CAST(int32_t, ms->search.offset);
- else
- return CAST(int32_t, (ms->search.offset + m->vallen));
-
- case FILE_CLEAR:
- case FILE_DEFAULT:
- case FILE_INDIRECT:
- return ms->offset;
-
- default:
- return 0;
- }
-}
-
-private int
-cvt_flip(int type, int flip)
-{
- if (flip == 0)
- return type;
- switch (type) {
- case FILE_BESHORT:
- return FILE_LESHORT;
- case FILE_BELONG:
- return FILE_LELONG;
- case FILE_BEDATE:
- return FILE_LEDATE;
- case FILE_BELDATE:
- return FILE_LELDATE;
- case FILE_BEQUAD:
- return FILE_LEQUAD;
- case FILE_BEQDATE:
- return FILE_LEQDATE;
- case FILE_BEQLDATE:
- return FILE_LEQLDATE;
- case FILE_BEQWDATE:
- return FILE_LEQWDATE;
- case FILE_LESHORT:
- return FILE_BESHORT;
- case FILE_LELONG:
- return FILE_BELONG;
- case FILE_LEDATE:
- return FILE_BEDATE;
- case FILE_LELDATE:
- return FILE_BELDATE;
- case FILE_LEQUAD:
- return FILE_BEQUAD;
- case FILE_LEQDATE:
- return FILE_BEQDATE;
- case FILE_LEQLDATE:
- return FILE_BEQLDATE;
- case FILE_LEQWDATE:
- return FILE_BEQWDATE;
- case FILE_BEFLOAT:
- return FILE_LEFLOAT;
- case FILE_LEFLOAT:
- return FILE_BEFLOAT;
- case FILE_BEDOUBLE:
- return FILE_LEDOUBLE;
- case FILE_LEDOUBLE:
- return FILE_BEDOUBLE;
- default:
- return type;
- }
-}
-#define DO_CVT(fld, cast) \
- if (m->num_mask) \
- switch (m->mask_op & FILE_OPS_MASK) { \
- case FILE_OPAND: \
- p->fld &= cast m->num_mask; \
- break; \
- case FILE_OPOR: \
- p->fld |= cast m->num_mask; \
- break; \
- case FILE_OPXOR: \
- p->fld ^= cast m->num_mask; \
- break; \
- case FILE_OPADD: \
- p->fld += cast m->num_mask; \
- break; \
- case FILE_OPMINUS: \
- p->fld -= cast m->num_mask; \
- break; \
- case FILE_OPMULTIPLY: \
- p->fld *= cast m->num_mask; \
- break; \
- case FILE_OPDIVIDE: \
- p->fld /= cast m->num_mask; \
- break; \
- case FILE_OPMODULO: \
- p->fld %= cast m->num_mask; \
- break; \
- } \
- if (m->mask_op & FILE_OPINVERSE) \
- p->fld = ~p->fld \
-
-private void
-cvt_8(union VALUETYPE *p, const struct magic *m)
-{
- DO_CVT(b, (uint8_t));
-}
-
-private void
-cvt_16(union VALUETYPE *p, const struct magic *m)
-{
- DO_CVT(h, (uint16_t));
-}
-
-private void
-cvt_32(union VALUETYPE *p, const struct magic *m)
-{
- DO_CVT(l, (uint32_t));
-}
-
-private void
-cvt_64(union VALUETYPE *p, const struct magic *m)
-{
- DO_CVT(q, (uint64_t));
-}
-
-#define DO_CVT2(fld, cast) \
- if (m->num_mask) \
- switch (m->mask_op & FILE_OPS_MASK) { \
- case FILE_OPADD: \
- p->fld += cast m->num_mask; \
- break; \
- case FILE_OPMINUS: \
- p->fld -= cast m->num_mask; \
- break; \
- case FILE_OPMULTIPLY: \
- p->fld *= cast m->num_mask; \
- break; \
- case FILE_OPDIVIDE: \
- p->fld /= cast m->num_mask; \
- break; \
- } \
-
-private void
-cvt_float(union VALUETYPE *p, const struct magic *m)
-{
- DO_CVT2(f, (float));
-}
-
-private void
-cvt_double(union VALUETYPE *p, const struct magic *m)
-{
- DO_CVT2(d, (double));
-}
-
-/*
- * Convert the byte order of the data we are looking at
- * While we're here, let's apply the mask operation
- * (unless you have a better idea)
- */
-private int
-mconvert(struct magic_set *ms, struct magic *m, int flip)
-{
- union VALUETYPE *p = &ms->ms_value;
- uint8_t type;
-
- switch (type = cvt_flip(m->type, flip)) {
- case FILE_BYTE:
- cvt_8(p, m);
- return 1;
- case FILE_SHORT:
- cvt_16(p, m);
- return 1;
- case FILE_LONG:
- case FILE_DATE:
- case FILE_LDATE:
- cvt_32(p, m);
- return 1;
- case FILE_QUAD:
- case FILE_QDATE:
- case FILE_QLDATE:
- case FILE_QWDATE:
- cvt_64(p, m);
- return 1;
- case FILE_STRING:
- case FILE_BESTRING16:
- case FILE_LESTRING16: {
- /* Null terminate and eat *trailing* return */
- p->s[sizeof(p->s) - 1] = '\0';
- return 1;
- }
- case FILE_PSTRING: {
- size_t sz = file_pstring_length_size(m);
- char *ptr1 = p->s, *ptr2 = ptr1 + sz;
- size_t len = file_pstring_get_length(m, ptr1);
- if (len >= sizeof(p->s)) {
- /*
- * The size of the pascal string length (sz)
- * is 1, 2, or 4. We need at least 1 byte for NUL
- * termination, but we've already truncated the
- * string by p->s, so we need to deduct sz.
- */
- len = sizeof(p->s) - sz;
- }
- while (len--)
- *ptr1++ = *ptr2++;
- *ptr1 = '\0';
- return 1;
- }
- case FILE_BESHORT:
- p->h = (short)((p->hs[0]<<8)|(p->hs[1]));
- cvt_16(p, m);
- return 1;
- case FILE_BELONG:
- case FILE_BEDATE:
- case FILE_BELDATE:
- p->l = (int32_t)
- ((p->hl[0]<<24)|(p->hl[1]<<16)|(p->hl[2]<<8)|(p->hl[3]));
- if (type == FILE_BELONG)
- cvt_32(p, m);
- return 1;
- case FILE_BEQUAD:
- case FILE_BEQDATE:
- case FILE_BEQLDATE:
- case FILE_BEQWDATE:
- p->q = (uint64_t)
- (((uint64_t)p->hq[0]<<56)|((uint64_t)p->hq[1]<<48)|
- ((uint64_t)p->hq[2]<<40)|((uint64_t)p->hq[3]<<32)|
- ((uint64_t)p->hq[4]<<24)|((uint64_t)p->hq[5]<<16)|
- ((uint64_t)p->hq[6]<<8)|((uint64_t)p->hq[7]));
- if (type == FILE_BEQUAD)
- cvt_64(p, m);
- return 1;
- case FILE_LESHORT:
- p->h = (short)((p->hs[1]<<8)|(p->hs[0]));
- cvt_16(p, m);
- return 1;
- case FILE_LELONG:
- case FILE_LEDATE:
- case FILE_LELDATE:
- p->l = (int32_t)
- ((p->hl[3]<<24)|(p->hl[2]<<16)|(p->hl[1]<<8)|(p->hl[0]));
- if (type == FILE_LELONG)
- cvt_32(p, m);
- return 1;
- case FILE_LEQUAD:
- case FILE_LEQDATE:
- case FILE_LEQLDATE:
- case FILE_LEQWDATE:
- p->q = (uint64_t)
- (((uint64_t)p->hq[7]<<56)|((uint64_t)p->hq[6]<<48)|
- ((uint64_t)p->hq[5]<<40)|((uint64_t)p->hq[4]<<32)|
- ((uint64_t)p->hq[3]<<24)|((uint64_t)p->hq[2]<<16)|
- ((uint64_t)p->hq[1]<<8)|((uint64_t)p->hq[0]));
- if (type == FILE_LEQUAD)
- cvt_64(p, m);
- return 1;
- case FILE_MELONG:
- case FILE_MEDATE:
- case FILE_MELDATE:
- p->l = (int32_t)
- ((p->hl[1]<<24)|(p->hl[0]<<16)|(p->hl[3]<<8)|(p->hl[2]));
- if (type == FILE_MELONG)
- cvt_32(p, m);
- return 1;
- case FILE_FLOAT:
- cvt_float(p, m);
- return 1;
- case FILE_BEFLOAT:
- p->l = ((uint32_t)p->hl[0]<<24)|((uint32_t)p->hl[1]<<16)|
- ((uint32_t)p->hl[2]<<8) |((uint32_t)p->hl[3]);
- cvt_float(p, m);
- return 1;
- case FILE_LEFLOAT:
- p->l = ((uint32_t)p->hl[3]<<24)|((uint32_t)p->hl[2]<<16)|
- ((uint32_t)p->hl[1]<<8) |((uint32_t)p->hl[0]);
- cvt_float(p, m);
- return 1;
- case FILE_DOUBLE:
- cvt_double(p, m);
- return 1;
- case FILE_BEDOUBLE:
- p->q = ((uint64_t)p->hq[0]<<56)|((uint64_t)p->hq[1]<<48)|
- ((uint64_t)p->hq[2]<<40)|((uint64_t)p->hq[3]<<32)|
- ((uint64_t)p->hq[4]<<24)|((uint64_t)p->hq[5]<<16)|
- ((uint64_t)p->hq[6]<<8) |((uint64_t)p->hq[7]);
- cvt_double(p, m);
- return 1;
- case FILE_LEDOUBLE:
- p->q = ((uint64_t)p->hq[7]<<56)|((uint64_t)p->hq[6]<<48)|
- ((uint64_t)p->hq[5]<<40)|((uint64_t)p->hq[4]<<32)|
- ((uint64_t)p->hq[3]<<24)|((uint64_t)p->hq[2]<<16)|
- ((uint64_t)p->hq[1]<<8) |((uint64_t)p->hq[0]);
- cvt_double(p, m);
- return 1;
- case FILE_REGEX:
- case FILE_SEARCH:
- case FILE_DEFAULT:
- case FILE_CLEAR:
- case FILE_NAME:
- case FILE_USE:
- return 1;
- default:
- file_magerror(ms, "invalid type %d in mconvert()", m->type);
- return 0;
- }
-}
-
-
-private void
-mdebug(uint32_t offset, const char *str, size_t len)
-{
- (void) fprintf(stderr, "mget/%zu @%d: ", len, offset);
- file_showstr(stderr, str, len);
- (void) fputc('\n', stderr);
- (void) fputc('\n', stderr);
-}
-
-private int
-mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
- const unsigned char *s, uint32_t offset, size_t nbytes, struct magic *m)
-{
- /*
- * Note: FILE_SEARCH and FILE_REGEX do not actually copy
- * anything, but setup pointers into the source
- */
- if (indir == 0) {
- switch (type) {
- case FILE_SEARCH:
- ms->search.s = RCAST(const char *, s) + offset;
- ms->search.s_len = nbytes - offset;
- ms->search.offset = offset;
- return 0;
-
- case FILE_REGEX: {
- const char *b;
- const char *c;
- const char *last; /* end of search region */
- const char *buf; /* start of search region */
- const char *end;
- size_t lines, linecnt, bytecnt;
-
- if (s == NULL) {
- ms->search.s_len = 0;
- ms->search.s = NULL;
- return 0;
- }
-
- if (m->str_flags & REGEX_LINE_COUNT) {
- linecnt = m->str_range;
- bytecnt = linecnt * 80;
- } else {
- linecnt = 0;
- bytecnt = m->str_range;
- }
-
- if (bytecnt == 0)
- bytecnt = 8192;
- if (bytecnt > nbytes)
- bytecnt = nbytes;
-
- buf = RCAST(const char *, s) + offset;
- end = last = RCAST(const char *, s) + bytecnt;
- /* mget() guarantees buf <= last */
- for (lines = linecnt, b = buf; lines && b < end &&
- ((b = CAST(const char *,
- memchr(c = b, '\n', CAST(size_t, (end - b)))))
- || (b = CAST(const char *,
- memchr(c, '\r', CAST(size_t, (end - c))))));
- lines--, b++) {
- last = b;
- if (b[0] == '\r' && b[1] == '\n')
- b++;
- }
- if (lines)
- last = RCAST(const char *, s) + bytecnt;
-
- ms->search.s = buf;
- ms->search.s_len = last - buf;
- ms->search.offset = offset;
- ms->search.rm_len = 0;
- return 0;
- }
- case FILE_BESTRING16:
- case FILE_LESTRING16: {
- const unsigned char *src = s + offset;
- const unsigned char *esrc = s + nbytes;
- char *dst = p->s;
- char *edst = &p->s[sizeof(p->s) - 1];
-
- if (type == FILE_BESTRING16)
- src++;
-
- /* check that offset is within range */
- if (offset >= nbytes)
- break;
- for (/*EMPTY*/; src < esrc; src += 2, dst++) {
- if (dst < edst)
- *dst = *src;
- else
- break;
- if (*dst == '\0') {
- if (type == FILE_BESTRING16 ?
- *(src - 1) != '\0' :
- *(src + 1) != '\0')
- *dst = ' ';
- }
- }
- *edst = '\0';
- return 0;
- }
- case FILE_STRING: /* XXX - these two should not need */
- case FILE_PSTRING: /* to copy anything, but do anyway. */
- default:
- break;
- }
- }
-
- 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 *)(void *)p) + nbytes, '\0',
- sizeof(*p) - nbytes);
- return 0;
-}
-
-private int
-mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
- size_t nbytes, size_t o, unsigned int cont_level, int mode, int text,
- int flip, int recursion_level, int *printed_something,
- int *need_separator, int *returnval)
-{
- uint32_t soffset, offset = ms->offset;
- uint32_t lhs;
- int rv, oneed_separator, in_type;
- char *sbuf, *rbuf;
- union VALUETYPE *p = &ms->ms_value;
- struct mlist ml;
-
- if (recursion_level >= MAX_RECURSION_LEVEL) {
- file_error(ms, 0, "recursion nesting exceeded");
- return -1;
- }
-
- if (mcopy(ms, p, m->type, m->flag & INDIR, s, (uint32_t)(offset + o),
- (uint32_t)nbytes, m) == -1)
- return -1;
-
- if ((ms->flags & MAGIC_DEBUG) != 0) {
- fprintf(stderr, "mget(type=%d, flag=%x, offset=%u, o=%zu, "
- "nbytes=%zu)\n", m->type, m->flag, offset, o, nbytes);
- mdebug(offset, (char *)(void *)p, sizeof(union VALUETYPE));
-#ifndef COMPILE_ONLY
- file_mdump(m);
-#endif
- }
-
- if (m->flag & INDIR) {
- int off = m->in_offset;
- if (m->in_op & FILE_OPINDIRECT) {
- const union VALUETYPE *q = CAST(const union VALUETYPE *,
- ((const void *)(s + offset + off)));
- switch (cvt_flip(m->in_type, flip)) {
- case FILE_BYTE:
- off = q->b;
- break;
- case FILE_SHORT:
- off = q->h;
- break;
- case FILE_BESHORT:
- off = (short)((q->hs[0]<<8)|(q->hs[1]));
- break;
- case FILE_LESHORT:
- off = (short)((q->hs[1]<<8)|(q->hs[0]));
- break;
- case FILE_LONG:
- off = q->l;
- break;
- case FILE_BELONG:
- case FILE_BEID3:
- off = (int32_t)((q->hl[0]<<24)|(q->hl[1]<<16)|
- (q->hl[2]<<8)|(q->hl[3]));
- break;
- case FILE_LEID3:
- case FILE_LELONG:
- off = (int32_t)((q->hl[3]<<24)|(q->hl[2]<<16)|
- (q->hl[1]<<8)|(q->hl[0]));
- break;
- case FILE_MELONG:
- off = (int32_t)((q->hl[1]<<24)|(q->hl[0]<<16)|
- (q->hl[3]<<8)|(q->hl[2]));
- break;
- }
- if ((ms->flags & MAGIC_DEBUG) != 0)
- fprintf(stderr, "indirect offs=%u\n", off);
- }
- switch (in_type = cvt_flip(m->in_type, flip)) {
- case FILE_BYTE:
- if (OFFSET_OOB(nbytes, offset, 1))
- return 0;
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = p->b & off;
- break;
- case FILE_OPOR:
- offset = p->b | off;
- break;
- case FILE_OPXOR:
- offset = p->b ^ off;
- break;
- case FILE_OPADD:
- offset = p->b + off;
- break;
- case FILE_OPMINUS:
- offset = p->b - off;
- break;
- case FILE_OPMULTIPLY:
- offset = p->b * off;
- break;
- case FILE_OPDIVIDE:
- offset = p->b / off;
- break;
- case FILE_OPMODULO:
- offset = p->b % off;
- break;
- }
- } else
- offset = p->b;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_BESHORT:
- if (OFFSET_OOB(nbytes, offset, 2))
- return 0;
- lhs = (p->hs[0] << 8) | p->hs[1];
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = lhs & off;
- break;
- case FILE_OPOR:
- offset = lhs | off;
- break;
- case FILE_OPXOR:
- offset = lhs ^ off;
- break;
- case FILE_OPADD:
- offset = lhs + off;
- break;
- case FILE_OPMINUS:
- offset = lhs - off;
- break;
- case FILE_OPMULTIPLY:
- offset = lhs * off;
- break;
- case FILE_OPDIVIDE:
- offset = lhs / off;
- break;
- case FILE_OPMODULO:
- offset = lhs % off;
- break;
- }
- } else
- offset = lhs;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_LESHORT:
- if (OFFSET_OOB(nbytes, offset, 2))
- return 0;
- lhs = (p->hs[1] << 8) | p->hs[0];
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = lhs & off;
- break;
- case FILE_OPOR:
- offset = lhs | off;
- break;
- case FILE_OPXOR:
- offset = lhs ^ off;
- break;
- case FILE_OPADD:
- offset = lhs + off;
- break;
- case FILE_OPMINUS:
- offset = lhs - off;
- break;
- case FILE_OPMULTIPLY:
- offset = lhs * off;
- break;
- case FILE_OPDIVIDE:
- offset = lhs / off;
- break;
- case FILE_OPMODULO:
- offset = lhs % off;
- break;
- }
- } else
- offset = lhs;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_SHORT:
- if (OFFSET_OOB(nbytes, offset, 2))
- return 0;
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = p->h & off;
- break;
- case FILE_OPOR:
- offset = p->h | off;
- break;
- case FILE_OPXOR:
- offset = p->h ^ off;
- break;
- case FILE_OPADD:
- offset = p->h + off;
- break;
- case FILE_OPMINUS:
- offset = p->h - off;
- break;
- case FILE_OPMULTIPLY:
- offset = p->h * off;
- break;
- case FILE_OPDIVIDE:
- offset = p->h / off;
- break;
- case FILE_OPMODULO:
- offset = p->h % off;
- break;
- }
- }
- else
- offset = p->h;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_BELONG:
- case FILE_BEID3:
- if (OFFSET_OOB(nbytes, offset, 4))
- return 0;
- lhs = (p->hl[0] << 24) | (p->hl[1] << 16) |
- (p->hl[2] << 8) | p->hl[3];
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = lhs & off;
- break;
- case FILE_OPOR:
- offset = lhs | off;
- break;
- case FILE_OPXOR:
- offset = lhs ^ off;
- break;
- case FILE_OPADD:
- offset = lhs + off;
- break;
- case FILE_OPMINUS:
- offset = lhs - off;
- break;
- case FILE_OPMULTIPLY:
- offset = lhs * off;
- break;
- case FILE_OPDIVIDE:
- offset = lhs / off;
- break;
- case FILE_OPMODULO:
- offset = lhs % off;
- break;
- }
- } else
- offset = lhs;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_LELONG:
- case FILE_LEID3:
- if (OFFSET_OOB(nbytes, offset, 4))
- return 0;
- lhs = (p->hl[3] << 24) | (p->hl[2] << 16) |
- (p->hl[1] << 8) | p->hl[0];
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = lhs & off;
- break;
- case FILE_OPOR:
- offset = lhs | off;
- break;
- case FILE_OPXOR:
- offset = lhs ^ off;
- break;
- case FILE_OPADD:
- offset = lhs + off;
- break;
- case FILE_OPMINUS:
- offset = lhs - off;
- break;
- case FILE_OPMULTIPLY:
- offset = lhs * off;
- break;
- case FILE_OPDIVIDE:
- offset = lhs / off;
- break;
- case FILE_OPMODULO:
- offset = lhs % off;
- break;
- }
- } else
- offset = lhs;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_MELONG:
- if (OFFSET_OOB(nbytes, offset, 4))
- return 0;
- lhs = (p->hl[1] << 24) | (p->hl[0] << 16) |
- (p->hl[3] << 8) | p->hl[2];
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = lhs & off;
- break;
- case FILE_OPOR:
- offset = lhs | off;
- break;
- case FILE_OPXOR:
- offset = lhs ^ off;
- break;
- case FILE_OPADD:
- offset = lhs + off;
- break;
- case FILE_OPMINUS:
- offset = lhs - off;
- break;
- case FILE_OPMULTIPLY:
- offset = lhs * off;
- break;
- case FILE_OPDIVIDE:
- offset = lhs / off;
- break;
- case FILE_OPMODULO:
- offset = lhs % off;
- break;
- }
- } else
- offset = lhs;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- case FILE_LONG:
- if (OFFSET_OOB(nbytes, offset, 4))
- return 0;
- if (off) {
- switch (m->in_op & FILE_OPS_MASK) {
- case FILE_OPAND:
- offset = p->l & off;
- break;
- case FILE_OPOR:
- offset = p->l | off;
- break;
- case FILE_OPXOR:
- offset = p->l ^ off;
- break;
- case FILE_OPADD:
- offset = p->l + off;
- break;
- case FILE_OPMINUS:
- offset = p->l - off;
- break;
- case FILE_OPMULTIPLY:
- offset = p->l * off;
- break;
- case FILE_OPDIVIDE:
- offset = p->l / off;
- break;
- case FILE_OPMODULO:
- offset = p->l % off;
- break;
- }
- } else
- offset = p->l;
- if (m->in_op & FILE_OPINVERSE)
- offset = ~offset;
- break;
- default:
- break;
- }
-
- switch (in_type) {
- case FILE_LEID3:
- case FILE_BEID3:
- offset = ((((offset >> 0) & 0x7f) << 0) |
- (((offset >> 8) & 0x7f) << 7) |
- (((offset >> 16) & 0x7f) << 14) |
- (((offset >> 24) & 0x7f) << 21)) + 10;
- break;
- default:
- break;
- }
-
- if (m->flag & INDIROFFADD) {
- offset += ms->c.li[cont_level-1].off;
- if (offset == 0) {
- if ((ms->flags & MAGIC_DEBUG) != 0)
- fprintf(stderr,
- "indirect *zero* offset\n");
- return 0;
- }
- if ((ms->flags & MAGIC_DEBUG) != 0)
- fprintf(stderr, "indirect +offs=%u\n", offset);
- }
- if (mcopy(ms, p, m->type, 0, s, offset, nbytes, m) == -1)
- return -1;
- ms->offset = offset;
-
- if ((ms->flags & MAGIC_DEBUG) != 0) {
- mdebug(offset, (char *)(void *)p,
- sizeof(union VALUETYPE));
-#ifndef COMPILE_ONLY
- file_mdump(m);
-#endif
- }
- }
-
- /* Verify we have enough data to match magic type */
- switch (m->type) {
- case FILE_BYTE:
- if (OFFSET_OOB(nbytes, offset, 1))
- return 0;
- break;
-
- case FILE_SHORT:
- case FILE_BESHORT:
- case FILE_LESHORT:
- if (OFFSET_OOB(nbytes, offset, 2))
- return 0;
- break;
-
- case FILE_LONG:
- case FILE_BELONG:
- case FILE_LELONG:
- case FILE_MELONG:
- case FILE_DATE:
- case FILE_BEDATE:
- case FILE_LEDATE:
- case FILE_MEDATE:
- case FILE_LDATE:
- case FILE_BELDATE:
- case FILE_LELDATE:
- case FILE_MELDATE:
- case FILE_FLOAT:
- case FILE_BEFLOAT:
- case FILE_LEFLOAT:
- if (OFFSET_OOB(nbytes, offset, 4))
- return 0;
- break;
-
- case FILE_DOUBLE:
- case FILE_BEDOUBLE:
- case FILE_LEDOUBLE:
- if (OFFSET_OOB(nbytes, offset, 8))
- return 0;
- break;
-
- case FILE_STRING:
- case FILE_PSTRING:
- case FILE_SEARCH:
- if (OFFSET_OOB(nbytes, offset, m->vallen))
- return 0;
- break;
-
- case FILE_REGEX:
- if (nbytes < offset)
- return 0;
- break;
-
- case FILE_INDIRECT:
- if (offset == 0)
- return 0;
- if (nbytes < offset)
- return 0;
- sbuf = ms->o.buf;
- soffset = ms->offset;
- ms->o.buf = NULL;
- ms->offset = 0;
- rv = file_softmagic(ms, s + offset, nbytes - offset,
- recursion_level, BINTEST, text);
- if ((ms->flags & MAGIC_DEBUG) != 0)
- fprintf(stderr, "indirect @offs=%u[%d]\n", offset, rv);
- rbuf = ms->o.buf;
- ms->o.buf = sbuf;
- ms->offset = soffset;
- if (rv == 1) {
- if ((ms->flags & (MAGIC_MIME|MAGIC_APPLE)) == 0 &&
- file_printf(ms, F(ms, m, "%u"), offset) == -1) {
- free(rbuf);
- return -1;
- }
- if (file_printf(ms, "%s", rbuf) == -1) {
- free(rbuf);
- return -1;
- }
- }
- free(rbuf);
- return rv;
-
- case FILE_USE:
- if (nbytes < offset)
- return 0;
- sbuf = m->value.s;
- if (*sbuf == '^') {
- sbuf++;
- flip = !flip;
- }
- if (file_magicfind(ms, sbuf, &ml) == -1) {
- file_error(ms, 0, "cannot find entry `%s'", sbuf);
- return -1;
- }
-
- oneed_separator = *need_separator;
- if (m->flag & NOSPACE)
- *need_separator = 0;
- rv = match(ms, ml.magic, ml.nmagic, s, nbytes, offset + o,
- mode, text, flip, recursion_level, printed_something,
- need_separator, returnval);
- if (rv != 1)
- *need_separator = oneed_separator;
- return rv;
-
- case FILE_NAME:
- if (file_printf(ms, "%s", m->desc) == -1)
- return -1;
- return 1;
- case FILE_DEFAULT: /* nothing to check */
- case FILE_CLEAR:
- default:
- break;
- }
- if (!mconvert(ms, m, flip))
- return 0;
- return 1;
-}
-
-private uint64_t
-file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags)
-{
- /*
- * Convert the source args to unsigned here so that (1) the
- * compare will be unsigned as it is in strncmp() and (2) so
- * the ctype functions will work correctly without extra
- * casting.
- */
- const unsigned char *a = (const unsigned char *)s1;
- const unsigned char *b = (const unsigned char *)s2;
- uint64_t v;
-
- /*
- * What we want here is v = strncmp(s1, s2, len),
- * but ignoring any nulls.
- */
- v = 0;
- if (0L == flags) { /* normal string: do it fast */
- while (len-- > 0)
- if ((v = *b++ - *a++) != '\0')
- break;
- }
- else { /* combine the others */
- while (len-- > 0) {
- if ((flags & STRING_IGNORE_LOWERCASE) &&
- islower(*a)) {
- if ((v = tolower(*b++) - *a++) != '\0')
- break;
- }
- else if ((flags & STRING_IGNORE_UPPERCASE) &&
- isupper(*a)) {
- if ((v = toupper(*b++) - *a++) != '\0')
- break;
- }
- else if ((flags & STRING_COMPACT_WHITESPACE) &&
- isspace(*a)) {
- a++;
- if (isspace(*b++)) {
- if (!isspace(*a))
- while (isspace(*b))
- b++;
- }
- else {
- v = 1;
- break;
- }
- }
- else if ((flags & STRING_COMPACT_OPTIONAL_WHITESPACE) &&
- isspace(*a)) {
- a++;
- while (isspace(*b))
- b++;
- }
- else {
- if ((v = *b++ - *a++) != '\0')
- break;
- }
- }
- }
- return v;
-}
-
-private uint64_t
-file_strncmp16(const char *a, const char *b, size_t len, uint32_t flags)
-{
- /*
- * XXX - The 16-bit string compare probably needs to be done
- * differently, especially if the flags are to be supported.
- * At the moment, I am unsure.
- */
- flags = 0;
- return file_strncmp(a, b, len, flags);
-}
-
-private int
-magiccheck(struct magic_set *ms, struct magic *m)
-{
- uint64_t l = m->value.q;
- uint64_t v;
- float fl, fv;
- double dl, dv;
- int matched;
- union VALUETYPE *p = &ms->ms_value;
-
- switch (m->type) {
- case FILE_BYTE:
- v = p->b;
- break;
-
- case FILE_SHORT:
- case FILE_BESHORT:
- case FILE_LESHORT:
- v = p->h;
- break;
-
- case FILE_LONG:
- case FILE_BELONG:
- case FILE_LELONG:
- case FILE_MELONG:
- case FILE_DATE:
- case FILE_BEDATE:
- case FILE_LEDATE:
- case FILE_MEDATE:
- case FILE_LDATE:
- case FILE_BELDATE:
- case FILE_LELDATE:
- case FILE_MELDATE:
- v = p->l;
- break;
-
- case FILE_QUAD:
- case FILE_LEQUAD:
- case FILE_BEQUAD:
- case FILE_QDATE:
- case FILE_BEQDATE:
- case FILE_LEQDATE:
- case FILE_QLDATE:
- case FILE_BEQLDATE:
- case FILE_LEQLDATE:
- case FILE_QWDATE:
- case FILE_BEQWDATE:
- case FILE_LEQWDATE:
- v = p->q;
- break;
-
- case FILE_FLOAT:
- case FILE_BEFLOAT:
- case FILE_LEFLOAT:
- fl = m->value.f;
- fv = p->f;
- switch (m->reln) {
- case 'x':
- matched = 1;
- break;
-
- case '!':
- matched = fv != fl;
- break;
-
- case '=':
- matched = fv == fl;
- break;
-
- case '>':
- matched = fv > fl;
- break;
-
- case '<':
- matched = fv < fl;
- break;
-
- default:
- file_magerror(ms, "cannot happen with float: invalid relation `%c'",
- m->reln);
- return -1;
- }
- return matched;
-
- case FILE_DOUBLE:
- case FILE_BEDOUBLE:
- case FILE_LEDOUBLE:
- dl = m->value.d;
- dv = p->d;
- switch (m->reln) {
- case 'x':
- matched = 1;
- break;
-
- case '!':
- matched = dv != dl;
- break;
-
- case '=':
- matched = dv == dl;
- break;
-
- case '>':
- matched = dv > dl;
- break;
-
- case '<':
- matched = dv < dl;
- break;
-
- default:
- file_magerror(ms, "cannot happen with double: invalid relation `%c'", m->reln);
- return -1;
- }
- return matched;
-
- case FILE_DEFAULT:
- case FILE_CLEAR:
- l = 0;
- v = 0;
- break;
-
- case FILE_STRING:
- case FILE_PSTRING:
- l = 0;
- v = file_strncmp(m->value.s, p->s, (size_t)m->vallen, m->str_flags);
- break;
-
- case FILE_BESTRING16:
- case FILE_LESTRING16:
- l = 0;
- v = file_strncmp16(m->value.s, p->s, (size_t)m->vallen, m->str_flags);
- break;
-
- case FILE_SEARCH: { /* search ms->search.s for the string m->value.s */
- size_t slen;
- size_t idx;
-
- if (ms->search.s == NULL)
- return 0;
-
- slen = MIN(m->vallen, sizeof(m->value.s));
- l = 0;
- v = 0;
-
- for (idx = 0; m->str_range == 0 || idx < m->str_range; idx++) {
- if (slen + idx > ms->search.s_len)
- break;
-
- v = file_strncmp(m->value.s, ms->search.s + idx, slen,
- m->str_flags);
- if (v == 0) { /* found match */
- ms->search.offset += idx;
- break;
- }
- }
- break;
- }
- case FILE_REGEX: {
- int rc;
- file_regex_t rx;
-
- if (ms->search.s == NULL)
- return 0;
-
- l = 0;
- rc = file_regcomp(&rx, m->value.s,
- REG_EXTENDED|REG_NEWLINE|
- ((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0));
- if (rc) {
- file_regerror(&rx, rc, ms);
- v = (uint64_t)-1;
- } else {
- regmatch_t pmatch[1];
- size_t slen = ms->search.s_len;
-#ifndef REG_STARTEND
-#define REG_STARTEND 0
- char c;
- if (slen != 0)
- slen--;
- c = ms->search.s[slen];
- ((char *)(intptr_t)ms->search.s)[slen] = '\0';
-#else
- pmatch[0].rm_so = 0;
- pmatch[0].rm_eo = slen;
-#endif
- rc = file_regexec(&rx, (const char *)ms->search.s,
- 1, pmatch, REG_STARTEND);
-#if REG_STARTEND == 0
- ((char *)(intptr_t)ms->search.s)[l] = c;
-#endif
- switch (rc) {
- case 0:
- ms->search.s += (int)pmatch[0].rm_so;
- ms->search.offset += (size_t)pmatch[0].rm_so;
- ms->search.rm_len =
- (size_t)(pmatch[0].rm_eo - pmatch[0].rm_so);
- v = 0;
- break;
-
- case REG_NOMATCH:
- v = 1;
- break;
-
- default:
- file_regerror(&rx, rc, ms);
- v = (uint64_t)-1;
- break;
- }
- }
- file_regfree(&rx);
- if (v == (uint64_t)-1)
- return -1;
- break;
- }
- case FILE_INDIRECT:
- case FILE_USE:
- case FILE_NAME:
- return 1;
- default:
- file_magerror(ms, "invalid type %d in magiccheck()", m->type);
- return -1;
- }
-
- v = file_signextend(ms, m, v);
-
- switch (m->reln) {
- case 'x':
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT
- "u == *any* = 1\n", (unsigned long long)v);
- matched = 1;
- break;
-
- case '!':
- matched = v != l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT "u != %"
- INT64_T_FORMAT "u = %d\n", (unsigned long long)v,
- (unsigned long long)l, matched);
- break;
-
- case '=':
- matched = v == l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT "u == %"
- INT64_T_FORMAT "u = %d\n", (unsigned long long)v,
- (unsigned long long)l, matched);
- break;
-
- case '>':
- if (m->flag & UNSIGNED) {
- matched = v > l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT
- "u > %" INT64_T_FORMAT "u = %d\n",
- (unsigned long long)v,
- (unsigned long long)l, matched);
- }
- else {
- matched = (int64_t) v > (int64_t) l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT
- "d > %" INT64_T_FORMAT "d = %d\n",
- (long long)v, (long long)l, matched);
- }
- break;
-
- case '<':
- if (m->flag & UNSIGNED) {
- matched = v < l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT
- "u < %" INT64_T_FORMAT "u = %d\n",
- (unsigned long long)v,
- (unsigned long long)l, matched);
- }
- else {
- matched = (int64_t) v < (int64_t) l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "%" INT64_T_FORMAT
- "d < %" INT64_T_FORMAT "d = %d\n",
- (long long)v, (long long)l, matched);
- }
- break;
-
- case '&':
- matched = (v & l) == l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %"
- INT64_T_FORMAT "x) == %" INT64_T_FORMAT
- "x) = %d\n", (unsigned long long)v,
- (unsigned long long)l, (unsigned long long)l,
- matched);
- break;
-
- case '^':
- matched = (v & l) != l;
- if ((ms->flags & MAGIC_DEBUG) != 0)
- (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %"
- INT64_T_FORMAT "x) != %" INT64_T_FORMAT
- "x) = %d\n", (unsigned long long)v,
- (unsigned long long)l, (unsigned long long)l,
- matched);
- break;
-
- default:
- file_magerror(ms, "cannot happen: invalid relation `%c'",
- m->reln);
- return -1;
- }
-
- return matched;
-}
-
-private int
-handle_annotation(struct magic_set *ms, struct magic *m)
-{
- if (ms->flags & MAGIC_APPLE) {
- if (file_printf(ms, "%.8s", m->apple) == -1)
- return -1;
- return 1;
- }
- if ((ms->flags & MAGIC_MIME_TYPE) && m->mimetype[0]) {
- if (file_printf(ms, "%s", m->mimetype) == -1)
- return -1;
- return 1;
- }
- return 0;
-}
-
-private int
-print_sep(struct magic_set *ms, int firstline)
-{
- if (ms->flags & MAGIC_MIME)
- return 0;
- if (firstline)
- return 0;
- /*
- * we found another match
- * put a newline and '-' to do some simple formatting
- */
- return file_printf(ms, "\n- ");
-}
Added: trunk/contrib/file/src/Makefile.am
===================================================================
--- trunk/contrib/file/src/Makefile.am (rev 0)
+++ trunk/contrib/file/src/Makefile.am 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,30 @@
+MAGIC = $(pkgdatadir)/magic
+lib_LTLIBRARIES = libmagic.la
+nodist_include_HEADERS = magic.h
+
+bin_PROGRAMS = file
+
+AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"'
+AM_CFLAGS = $(CFLAG_VISIBILITY) @WARNINGS@
+
+libmagic_la_SOURCES = magic.c apprentice.c softmagic.c ascmagic.c \
+ encoding.c compress.c is_tar.c readelf.c print.c fsmagic.c \
+ funcs.c file.h readelf.h tar.h apptype.c der.c der.h \
+ file_opts.h elfclass.h mygetopt.h cdf.c cdf_time.c readcdf.c cdf.h
+libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0
+if MINGW
+MINGWLIBS = -lgnurx -lshlwapi
+else
+MINGWLIBS =
+endif
+libmagic_la_LIBADD = $(LTLIBOBJS) $(MINGWLIBS)
+
+file_SOURCES = file.c
+file_LDADD = libmagic.la
+CLEANFILES = magic.h
+EXTRA_DIST = magic.h.in
+HDR= $(top_srcdir)/src/magic.h.in
+BUILT_SOURCES = magic.h
+
+magic.h: ${HDR}
+ sed -e "s/X.YY/$$(echo @VERSION@ | tr -d .)/" < ${HDR} > $@
Property changes on: trunk/contrib/file/src/Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/Makefile.in
===================================================================
--- trunk/contrib/file/src/Makefile.in (rev 0)
+++ trunk/contrib/file/src/Makefile.in 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,799 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = file$(EXEEXT)
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+ "$(DESTDIR)$(includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libmagic_la_DEPENDENCIES = $(LTLIBOBJS) $(am__DEPENDENCIES_1)
+am_libmagic_la_OBJECTS = magic.lo apprentice.lo softmagic.lo \
+ ascmagic.lo encoding.lo compress.lo is_tar.lo readelf.lo \
+ print.lo fsmagic.lo funcs.lo apptype.lo der.lo cdf.lo \
+ cdf_time.lo readcdf.lo
+libmagic_la_OBJECTS = $(am_libmagic_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libmagic_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libmagic_la_LDFLAGS) $(LDFLAGS) -o $@
+PROGRAMS = $(bin_PROGRAMS)
+am_file_OBJECTS = file.$(OBJEXT)
+file_OBJECTS = $(am_file_OBJECTS)
+file_DEPENDENCIES = libmagic.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmagic_la_SOURCES) $(file_SOURCES)
+DIST_SOURCES = $(libmagic_la_SOURCES) $(file_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(nodist_include_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \
+ asctime_r.c asprintf.c ctime_r.c dprintf.c fmtcheck.c \
+ getline.c getopt_long.c gmtime_r.c localtime_r.c pread.c \
+ strcasestr.c strlcat.c strlcpy.c vasprintf.c
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MINGW = @MINGW@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARNINGS = @WARNINGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fsect = @fsect@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+MAGIC = $(pkgdatadir)/magic
+lib_LTLIBRARIES = libmagic.la
+nodist_include_HEADERS = magic.h
+AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"'
+AM_CFLAGS = $(CFLAG_VISIBILITY) @WARNINGS@
+libmagic_la_SOURCES = magic.c apprentice.c softmagic.c ascmagic.c \
+ encoding.c compress.c is_tar.c readelf.c print.c fsmagic.c \
+ funcs.c file.h readelf.h tar.h apptype.c der.c der.h \
+ file_opts.h elfclass.h mygetopt.h cdf.c cdf_time.c readcdf.c cdf.h
+
+libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0
+ at MINGW_FALSE@MINGWLIBS =
+ at MINGW_TRUE@MINGWLIBS = -lgnurx -lshlwapi
+libmagic_la_LIBADD = $(LTLIBOBJS) $(MINGWLIBS)
+file_SOURCES = file.c
+file_LDADD = libmagic.la
+CLEANFILES = magic.h
+EXTRA_DIST = magic.h.in
+HDR = $(top_srcdir)/src/magic.h.in
+BUILT_SOURCES = magic.h
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmagic.la: $(libmagic_la_OBJECTS) $(libmagic_la_DEPENDENCIES) $(EXTRA_libmagic_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libmagic_la_LINK) -rpath $(libdir) $(libmagic_la_OBJECTS) $(libmagic_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+file$(EXEEXT): $(file_OBJECTS) $(file_DEPENDENCIES) $(EXTRA_file_DEPENDENCIES)
+ @rm -f file$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(file_OBJECTS) $(file_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asctime_r.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asprintf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ctime_r.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dprintf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fmtcheck.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getline.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt_long.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gmtime_r.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/localtime_r.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pread.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasestr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcat.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcpy.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vasprintf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/apprentice.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/apptype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ascmagic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cdf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cdf_time.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/compress.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/der.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/encoding.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fsmagic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/funcs.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/is_tar.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/magic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/print.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/readcdf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/readelf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/softmagic.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_includeHEADERS: $(nodist_include_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+ done
+
+uninstall-nodist_includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
+install-binPROGRAMS: install-libLTLIBRARIES
+
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf $(DEPDIR) ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf $(DEPDIR) ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
+ uninstall-nodist_includeHEADERS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+ clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-libLTLIBRARIES install-man \
+ install-nodist_includeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS
+
+.PRECIOUS: Makefile
+
+
+magic.h: ${HDR}
+ sed -e "s/X.YY/$$(echo @VERSION@ | tr -d .)/" < ${HDR} > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Property changes on: trunk/contrib/file/src/Makefile.in
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/apprentice.c
===================================================================
--- trunk/contrib/file/src/apprentice.c (rev 0)
+++ trunk/contrib/file/src/apprentice.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,3424 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * apprentice - make one pass through /etc/magic, learning its secrets.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: apprentice.c,v 1.262 2017/08/28 13:39:18 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <fcntl.h>
+#ifdef QUICK
+#include <sys/mman.h>
+#endif
+#include <dirent.h>
+#if defined(HAVE_LIMITS_H)
+#include <limits.h>
+#endif
+
+#ifndef SSIZE_MAX
+#define MAXMAGIC_SIZE ((ssize_t)0x7fffffff)
+#else
+#define MAXMAGIC_SIZE SSIZE_MAX
+#endif
+
+#define EATAB {while (isascii((unsigned char) *l) && \
+ isspace((unsigned char) *l)) ++l;}
+#define LOWCASE(l) (isupper((unsigned char) (l)) ? \
+ tolower((unsigned char) (l)) : (l))
+/*
+ * Work around a bug in headers on Digital Unix.
+ * At least confirmed for: OSF1 V4.0 878
+ */
+#if defined(__osf__) && defined(__DECC)
+#ifdef MAP_FAILED
+#undef MAP_FAILED
+#endif
+#endif
+
+#ifndef MAP_FAILED
+#define MAP_FAILED (void *) -1
+#endif
+
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+
+#define ALLOC_CHUNK (size_t)10
+#define ALLOC_INCR (size_t)200
+
+#define MAP_TYPE_USER 0
+#define MAP_TYPE_MALLOC 1
+#define MAP_TYPE_MMAP 2
+
+struct magic_entry {
+ struct magic *mp;
+ uint32_t cont_count;
+ uint32_t max_count;
+};
+
+struct magic_entry_set {
+ struct magic_entry *me;
+ uint32_t count;
+ uint32_t max;
+};
+
+struct magic_map {
+ void *p;
+ size_t len;
+ int type;
+ struct magic *magic[MAGIC_SETS];
+ uint32_t nmagic[MAGIC_SETS];
+};
+
+int file_formats[FILE_NAMES_SIZE];
+const size_t file_nformats = FILE_NAMES_SIZE;
+const char *file_names[FILE_NAMES_SIZE];
+const size_t file_nnames = FILE_NAMES_SIZE;
+
+private int getvalue(struct magic_set *ms, struct magic *, const char **, int);
+private int hextoint(int);
+private const char *getstr(struct magic_set *, struct magic *, const char *,
+ int);
+private int parse(struct magic_set *, struct magic_entry *, const char *,
+ size_t, int);
+private void eatsize(const char **);
+private int apprentice_1(struct magic_set *, const char *, int);
+private size_t apprentice_magic_strength(const struct magic *);
+private int apprentice_sort(const void *, const void *);
+private void apprentice_list(struct mlist *, int );
+private struct magic_map *apprentice_load(struct magic_set *,
+ const char *, int);
+private struct mlist *mlist_alloc(void);
+private void mlist_free(struct mlist *);
+private void byteswap(struct magic *, uint32_t);
+private void bs1(struct magic *);
+private uint16_t swap2(uint16_t);
+private uint32_t swap4(uint32_t);
+private uint64_t swap8(uint64_t);
+private char *mkdbname(struct magic_set *, const char *, int);
+private struct magic_map *apprentice_buf(struct magic_set *, struct magic *,
+ size_t);
+private struct magic_map *apprentice_map(struct magic_set *, const char *);
+private int check_buffer(struct magic_set *, struct magic_map *, const char *);
+private void apprentice_unmap(struct magic_map *);
+private int apprentice_compile(struct magic_set *, struct magic_map *,
+ const char *);
+private int check_format_type(const char *, int, const char **);
+private int check_format(struct magic_set *, struct magic *);
+private int get_op(char);
+private int parse_mime(struct magic_set *, struct magic_entry *, const char *);
+private int parse_strength(struct magic_set *, struct magic_entry *, const char *);
+private int parse_apple(struct magic_set *, struct magic_entry *, const char *);
+private int parse_ext(struct magic_set *, struct magic_entry *, const char *);
+
+
+private size_t magicsize = sizeof(struct magic);
+
+private const char usg_hdr[] = "cont\toffset\ttype\topcode\tmask\tvalue\tdesc";
+
+private struct {
+ const char *name;
+ size_t len;
+ int (*fun)(struct magic_set *, struct magic_entry *, const char *);
+} bang[] = {
+#define DECLARE_FIELD(name) { # name, sizeof(# name) - 1, parse_ ## name }
+ DECLARE_FIELD(mime),
+ DECLARE_FIELD(apple),
+ DECLARE_FIELD(ext),
+ DECLARE_FIELD(strength),
+#undef DECLARE_FIELD
+ { NULL, 0, NULL }
+};
+
+#ifdef COMPILE_ONLY
+
+int main(int, char *[]);
+
+int
+main(int argc, char *argv[])
+{
+ int ret;
+ struct magic_set *ms;
+ char *progname;
+
+ if ((progname = strrchr(argv[0], '/')) != NULL)
+ progname++;
+ else
+ progname = argv[0];
+
+ if (argc != 2) {
+ (void)fprintf(stderr, "Usage: %s file\n", progname);
+ return 1;
+ }
+
+ if ((ms = magic_open(MAGIC_CHECK)) == NULL) {
+ (void)fprintf(stderr, "%s: %s\n", progname, strerror(errno));
+ return 1;
+ }
+ ret = magic_compile(ms, argv[1]) == -1 ? 1 : 0;
+ if (ret == 1)
+ (void)fprintf(stderr, "%s: %s\n", progname, magic_error(ms));
+ magic_close(ms);
+ return ret;
+}
+#endif /* COMPILE_ONLY */
+
+struct type_tbl_s {
+ const char name[16];
+ const size_t len;
+ const int type;
+ const int format;
+};
+
+/*
+ * XXX - the actual Single UNIX Specification says that "long" means "long",
+ * as in the C data type, but we treat it as meaning "4-byte integer".
+ * Given that the OS X version of file 5.04 did the same, I guess that passes
+ * the actual test; having "long" be dependent on how big a "long" is on
+ * the machine running "file" is silly.
+ */
+static const struct type_tbl_s type_tbl[] = {
+# define XX(s) s, (sizeof(s) - 1)
+# define XX_NULL "", 0
+ { XX("invalid"), FILE_INVALID, FILE_FMT_NONE },
+ { XX("byte"), FILE_BYTE, FILE_FMT_NUM },
+ { XX("short"), FILE_SHORT, FILE_FMT_NUM },
+ { XX("default"), FILE_DEFAULT, FILE_FMT_NONE },
+ { XX("long"), FILE_LONG, FILE_FMT_NUM },
+ { XX("string"), FILE_STRING, FILE_FMT_STR },
+ { XX("date"), FILE_DATE, FILE_FMT_STR },
+ { XX("beshort"), FILE_BESHORT, FILE_FMT_NUM },
+ { XX("belong"), FILE_BELONG, FILE_FMT_NUM },
+ { XX("bedate"), FILE_BEDATE, FILE_FMT_STR },
+ { XX("leshort"), FILE_LESHORT, FILE_FMT_NUM },
+ { XX("lelong"), FILE_LELONG, FILE_FMT_NUM },
+ { XX("ledate"), FILE_LEDATE, FILE_FMT_STR },
+ { XX("pstring"), FILE_PSTRING, FILE_FMT_STR },
+ { XX("ldate"), FILE_LDATE, FILE_FMT_STR },
+ { XX("beldate"), FILE_BELDATE, FILE_FMT_STR },
+ { XX("leldate"), FILE_LELDATE, FILE_FMT_STR },
+ { XX("regex"), FILE_REGEX, FILE_FMT_STR },
+ { XX("bestring16"), FILE_BESTRING16, FILE_FMT_STR },
+ { XX("lestring16"), FILE_LESTRING16, FILE_FMT_STR },
+ { XX("search"), FILE_SEARCH, FILE_FMT_STR },
+ { XX("medate"), FILE_MEDATE, FILE_FMT_STR },
+ { XX("meldate"), FILE_MELDATE, FILE_FMT_STR },
+ { XX("melong"), FILE_MELONG, FILE_FMT_NUM },
+ { XX("quad"), FILE_QUAD, FILE_FMT_QUAD },
+ { XX("lequad"), FILE_LEQUAD, FILE_FMT_QUAD },
+ { XX("bequad"), FILE_BEQUAD, FILE_FMT_QUAD },
+ { XX("qdate"), FILE_QDATE, FILE_FMT_STR },
+ { XX("leqdate"), FILE_LEQDATE, FILE_FMT_STR },
+ { XX("beqdate"), FILE_BEQDATE, FILE_FMT_STR },
+ { XX("qldate"), FILE_QLDATE, FILE_FMT_STR },
+ { XX("leqldate"), FILE_LEQLDATE, FILE_FMT_STR },
+ { XX("beqldate"), FILE_BEQLDATE, FILE_FMT_STR },
+ { XX("float"), FILE_FLOAT, FILE_FMT_FLOAT },
+ { XX("befloat"), FILE_BEFLOAT, FILE_FMT_FLOAT },
+ { XX("lefloat"), FILE_LEFLOAT, FILE_FMT_FLOAT },
+ { XX("double"), FILE_DOUBLE, FILE_FMT_DOUBLE },
+ { XX("bedouble"), FILE_BEDOUBLE, FILE_FMT_DOUBLE },
+ { XX("ledouble"), FILE_LEDOUBLE, FILE_FMT_DOUBLE },
+ { XX("leid3"), FILE_LEID3, FILE_FMT_NUM },
+ { XX("beid3"), FILE_BEID3, FILE_FMT_NUM },
+ { XX("indirect"), FILE_INDIRECT, FILE_FMT_NUM },
+ { XX("qwdate"), FILE_QWDATE, FILE_FMT_STR },
+ { XX("leqwdate"), FILE_LEQWDATE, FILE_FMT_STR },
+ { XX("beqwdate"), FILE_BEQWDATE, FILE_FMT_STR },
+ { XX("name"), FILE_NAME, FILE_FMT_NONE },
+ { XX("use"), FILE_USE, FILE_FMT_NONE },
+ { XX("clear"), FILE_CLEAR, FILE_FMT_NONE },
+ { XX("der"), FILE_DER, FILE_FMT_STR },
+ { XX_NULL, FILE_INVALID, FILE_FMT_NONE },
+};
+
+/*
+ * These are not types, and cannot be preceded by "u" to make them
+ * unsigned.
+ */
+static const struct type_tbl_s special_tbl[] = {
+ { XX("der"), FILE_DER, FILE_FMT_STR },
+ { XX("name"), FILE_NAME, FILE_FMT_STR },
+ { XX("use"), FILE_USE, FILE_FMT_STR },
+ { XX_NULL, FILE_INVALID, FILE_FMT_NONE },
+};
+# undef XX
+# undef XX_NULL
+
+private int
+get_type(const struct type_tbl_s *tbl, const char *l, const char **t)
+{
+ const struct type_tbl_s *p;
+
+ for (p = tbl; p->len; p++) {
+ if (strncmp(l, p->name, p->len) == 0) {
+ if (t)
+ *t = l + p->len;
+ break;
+ }
+ }
+ return p->type;
+}
+
+private int
+get_standard_integer_type(const char *l, const char **t)
+{
+ int type;
+
+ if (isalpha((unsigned char)l[1])) {
+ switch (l[1]) {
+ case 'C':
+ /* "dC" and "uC" */
+ type = FILE_BYTE;
+ break;
+ case 'S':
+ /* "dS" and "uS" */
+ type = FILE_SHORT;
+ break;
+ case 'I':
+ case 'L':
+ /*
+ * "dI", "dL", "uI", and "uL".
+ *
+ * XXX - the actual Single UNIX Specification says
+ * that "L" means "long", as in the C data type,
+ * but we treat it as meaning "4-byte integer".
+ * Given that the OS X version of file 5.04 did
+ * the same, I guess that passes the actual SUS
+ * validation suite; having "dL" be dependent on
+ * how big a "long" is on the machine running
+ * "file" is silly.
+ */
+ type = FILE_LONG;
+ break;
+ case 'Q':
+ /* "dQ" and "uQ" */
+ type = FILE_QUAD;
+ break;
+ default:
+ /* "d{anything else}", "u{anything else}" */
+ return FILE_INVALID;
+ }
+ l += 2;
+ } else if (isdigit((unsigned char)l[1])) {
+ /*
+ * "d{num}" and "u{num}"; we only support {num} values
+ * of 1, 2, 4, and 8 - the Single UNIX Specification
+ * doesn't say anything about whether arbitrary
+ * values should be supported, but both the Solaris 10
+ * and OS X Mountain Lion versions of file passed the
+ * Single UNIX Specification validation suite, and
+ * neither of them support values bigger than 8 or
+ * non-power-of-2 values.
+ */
+ if (isdigit((unsigned char)l[2])) {
+ /* Multi-digit, so > 9 */
+ return FILE_INVALID;
+ }
+ switch (l[1]) {
+ case '1':
+ type = FILE_BYTE;
+ break;
+ case '2':
+ type = FILE_SHORT;
+ break;
+ case '4':
+ type = FILE_LONG;
+ break;
+ case '8':
+ type = FILE_QUAD;
+ break;
+ default:
+ /* XXX - what about 3, 5, 6, or 7? */
+ return FILE_INVALID;
+ }
+ l += 2;
+ } else {
+ /*
+ * "d" or "u" by itself.
+ */
+ type = FILE_LONG;
+ ++l;
+ }
+ if (t)
+ *t = l;
+ return type;
+}
+
+private void
+init_file_tables(void)
+{
+ static int done = 0;
+ const struct type_tbl_s *p;
+
+ if (done)
+ return;
+ done++;
+
+ for (p = type_tbl; p->len; p++) {
+ assert(p->type < FILE_NAMES_SIZE);
+ file_names[p->type] = p->name;
+ file_formats[p->type] = p->format;
+ }
+ assert(p - type_tbl == FILE_NAMES_SIZE);
+}
+
+private int
+add_mlist(struct mlist *mlp, struct magic_map *map, size_t idx)
+{
+ struct mlist *ml;
+
+ mlp->map = NULL;
+ if ((ml = CAST(struct mlist *, malloc(sizeof(*ml)))) == NULL)
+ return -1;
+
+ ml->map = idx == 0 ? map : NULL;
+ ml->magic = map->magic[idx];
+ ml->nmagic = map->nmagic[idx];
+
+ mlp->prev->next = ml;
+ ml->prev = mlp->prev;
+ ml->next = mlp;
+ mlp->prev = ml;
+ return 0;
+}
+
+/*
+ * Handle one file or directory.
+ */
+private int
+apprentice_1(struct magic_set *ms, const char *fn, int action)
+{
+ struct magic_map *map;
+#ifndef COMPILE_ONLY
+ struct mlist *ml;
+ size_t i;
+#endif
+
+ if (magicsize != FILE_MAGICSIZE) {
+ file_error(ms, 0, "magic element size %lu != %lu",
+ (unsigned long)sizeof(*map->magic[0]),
+ (unsigned long)FILE_MAGICSIZE);
+ return -1;
+ }
+
+ if (action == FILE_COMPILE) {
+ map = apprentice_load(ms, fn, action);
+ if (map == NULL)
+ return -1;
+ return apprentice_compile(ms, map, fn);
+ }
+
+#ifndef COMPILE_ONLY
+ map = apprentice_map(ms, fn);
+ if (map == (struct magic_map *)-1)
+ return -1;
+ if (map == NULL) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "using regular magic file `%s'", fn);
+ map = apprentice_load(ms, fn, action);
+ if (map == NULL)
+ return -1;
+ }
+
+ for (i = 0; i < MAGIC_SETS; i++) {
+ if (add_mlist(ms->mlist[i], map, i) == -1) {
+ file_oomem(ms, sizeof(*ml));
+ return -1;
+ }
+ }
+
+ if (action == FILE_LIST) {
+ for (i = 0; i < MAGIC_SETS; i++) {
+ printf("Set %" SIZE_T_FORMAT "u:\nBinary patterns:\n",
+ i);
+ apprentice_list(ms->mlist[i], BINTEST);
+ printf("Text patterns:\n");
+ apprentice_list(ms->mlist[i], TEXTTEST);
+ }
+ }
+ return 0;
+#else
+ return 0;
+#endif /* COMPILE_ONLY */
+}
+
+protected void
+file_ms_free(struct magic_set *ms)
+{
+ size_t i;
+ if (ms == NULL)
+ return;
+ for (i = 0; i < MAGIC_SETS; i++)
+ mlist_free(ms->mlist[i]);
+ free(ms->o.pbuf);
+ free(ms->o.buf);
+ free(ms->c.li);
+ free(ms);
+}
+
+protected struct magic_set *
+file_ms_alloc(int flags)
+{
+ struct magic_set *ms;
+ size_t i, len;
+
+ if ((ms = CAST(struct magic_set *, calloc((size_t)1,
+ sizeof(struct magic_set)))) == NULL)
+ return NULL;
+
+ if (magic_setflags(ms, flags) == -1) {
+ errno = EINVAL;
+ goto free;
+ }
+
+ ms->o.buf = ms->o.pbuf = NULL;
+ len = (ms->c.len = 10) * sizeof(*ms->c.li);
+
+ if ((ms->c.li = CAST(struct level_info *, malloc(len))) == NULL)
+ goto free;
+
+ ms->event_flags = 0;
+ ms->error = -1;
+ for (i = 0; i < MAGIC_SETS; i++)
+ ms->mlist[i] = NULL;
+ ms->file = "unknown";
+ ms->line = 0;
+ ms->indir_max = FILE_INDIR_MAX;
+ ms->name_max = FILE_NAME_MAX;
+ ms->elf_shnum_max = FILE_ELF_SHNUM_MAX;
+ ms->elf_phnum_max = FILE_ELF_PHNUM_MAX;
+ ms->elf_notes_max = FILE_ELF_NOTES_MAX;
+ ms->regex_max = FILE_REGEX_MAX;
+ ms->bytes_max = FILE_BYTES_MAX;
+ return ms;
+free:
+ free(ms);
+ return NULL;
+}
+
+private void
+apprentice_unmap(struct magic_map *map)
+{
+ size_t i;
+ if (map == NULL)
+ return;
+
+ switch (map->type) {
+ case MAP_TYPE_USER:
+ break;
+ case MAP_TYPE_MALLOC:
+ for (i = 0; i < MAGIC_SETS; i++) {
+ void *b = map->magic[i];
+ void *p = map->p;
+ if (CAST(char *, b) >= CAST(char *, p) &&
+ CAST(char *, b) <= CAST(char *, p) + map->len)
+ continue;
+ free(map->magic[i]);
+ }
+ free(map->p);
+ break;
+#ifdef QUICK
+ case MAP_TYPE_MMAP:
+ if (map->p && map->p != MAP_FAILED)
+ (void)munmap(map->p, map->len);
+ break;
+#endif
+ default:
+ abort();
+ }
+ free(map);
+}
+
+private struct mlist *
+mlist_alloc(void)
+{
+ struct mlist *mlist;
+ if ((mlist = CAST(struct mlist *, calloc(1, sizeof(*mlist)))) == NULL) {
+ return NULL;
+ }
+ mlist->next = mlist->prev = mlist;
+ return mlist;
+}
+
+private void
+mlist_free(struct mlist *mlist)
+{
+ struct mlist *ml, *next;
+
+ if (mlist == NULL)
+ return;
+
+ ml = mlist->next;
+ for (ml = mlist->next; (next = ml->next) != NULL; ml = next) {
+ if (ml->map)
+ apprentice_unmap(CAST(struct magic_map *, ml->map));
+ free(ml);
+ if (ml == mlist)
+ break;
+ }
+}
+
+#ifndef COMPILE_ONLY
+/* void **bufs: an array of compiled magic files */
+protected int
+buffer_apprentice(struct magic_set *ms, struct magic **bufs,
+ size_t *sizes, size_t nbufs)
+{
+ size_t i, j;
+ struct mlist *ml;
+ struct magic_map *map;
+
+ if (nbufs == 0)
+ return -1;
+
+ (void)file_reset(ms, 0);
+
+ init_file_tables();
+
+ for (i = 0; i < MAGIC_SETS; i++) {
+ mlist_free(ms->mlist[i]);
+ if ((ms->mlist[i] = mlist_alloc()) == NULL) {
+ file_oomem(ms, sizeof(*ms->mlist[i]));
+ goto fail;
+ }
+ }
+
+ for (i = 0; i < nbufs; i++) {
+ map = apprentice_buf(ms, bufs[i], sizes[i]);
+ if (map == NULL)
+ goto fail;
+
+ for (j = 0; j < MAGIC_SETS; j++) {
+ if (add_mlist(ms->mlist[j], map, j) == -1) {
+ file_oomem(ms, sizeof(*ml));
+ goto fail;
+ }
+ }
+ }
+
+ return 0;
+fail:
+ for (i = 0; i < MAGIC_SETS; i++) {
+ mlist_free(ms->mlist[i]);
+ ms->mlist[i] = NULL;
+ }
+ return -1;
+}
+#endif
+
+/* const char *fn: list of magic files and directories */
+protected int
+file_apprentice(struct magic_set *ms, const char *fn, int action)
+{
+ char *p, *mfn;
+ int file_err, errs = -1;
+ size_t i;
+
+ (void)file_reset(ms, 0);
+
+ if ((fn = magic_getpath(fn, action)) == NULL)
+ return -1;
+
+ init_file_tables();
+
+ if ((mfn = strdup(fn)) == NULL) {
+ file_oomem(ms, strlen(fn));
+ return -1;
+ }
+
+ for (i = 0; i < MAGIC_SETS; i++) {
+ mlist_free(ms->mlist[i]);
+ if ((ms->mlist[i] = mlist_alloc()) == NULL) {
+ file_oomem(ms, sizeof(*ms->mlist[i]));
+ while (i-- > 0) {
+ mlist_free(ms->mlist[i]);
+ ms->mlist[i] = NULL;
+ }
+ free(mfn);
+ return -1;
+ }
+ }
+ fn = mfn;
+
+ while (fn) {
+ p = strchr(fn, PATHSEP);
+ if (p)
+ *p++ = '\0';
+ if (*fn == '\0')
+ break;
+ file_err = apprentice_1(ms, fn, action);
+ errs = MAX(errs, file_err);
+ fn = p;
+ }
+
+ free(mfn);
+
+ if (errs == -1) {
+ for (i = 0; i < MAGIC_SETS; i++) {
+ mlist_free(ms->mlist[i]);
+ ms->mlist[i] = NULL;
+ }
+ file_error(ms, 0, "could not find any valid magic files!");
+ return -1;
+ }
+
+#if 0
+ /*
+ * Always leave the database loaded
+ */
+ if (action == FILE_LOAD)
+ return 0;
+
+ for (i = 0; i < MAGIC_SETS; i++) {
+ mlist_free(ms->mlist[i]);
+ ms->mlist[i] = NULL;
+ }
+#endif
+
+ switch (action) {
+ case FILE_LOAD:
+ case FILE_COMPILE:
+ case FILE_CHECK:
+ case FILE_LIST:
+ return 0;
+ default:
+ file_error(ms, 0, "Invalid action %d", action);
+ return -1;
+ }
+}
+
+/*
+ * Compute the real length of a magic expression, for the purposes
+ * of determining how "strong" a magic expression is (approximating
+ * how specific its matches are):
+ * - magic characters count 0 unless escaped.
+ * - [] expressions count 1
+ * - {} expressions count 0
+ * - regular characters or escaped magic characters count 1
+ * - 0 length expressions count as one
+ */
+private size_t
+nonmagic(const char *str)
+{
+ const char *p;
+ size_t rv = 0;
+
+ for (p = str; *p; p++)
+ switch (*p) {
+ case '\\': /* Escaped anything counts 1 */
+ if (!*++p)
+ p--;
+ rv++;
+ continue;
+ case '?': /* Magic characters count 0 */
+ case '*':
+ case '.':
+ case '+':
+ case '^':
+ case '$':
+ continue;
+ case '[': /* Bracketed expressions count 1 the ']' */
+ while (*p && *p != ']')
+ p++;
+ p--;
+ continue;
+ case '{': /* Braced expressions count 0 */
+ while (*p && *p != '}')
+ p++;
+ if (!*p)
+ p--;
+ continue;
+ default: /* Anything else counts 1 */
+ rv++;
+ continue;
+ }
+
+ return rv == 0 ? 1 : rv; /* Return at least 1 */
+}
+
+
+private size_t
+typesize(int type)
+{
+ switch (type) {
+ case FILE_BYTE:
+ return 1;
+
+ case FILE_SHORT:
+ case FILE_LESHORT:
+ case FILE_BESHORT:
+ return 2;
+
+ case FILE_LONG:
+ case FILE_LELONG:
+ case FILE_BELONG:
+ case FILE_MELONG:
+ return 4;
+
+ case FILE_DATE:
+ case FILE_LEDATE:
+ case FILE_BEDATE:
+ case FILE_MEDATE:
+ case FILE_LDATE:
+ case FILE_LELDATE:
+ case FILE_BELDATE:
+ case FILE_MELDATE:
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ return 4;
+
+ case FILE_QUAD:
+ case FILE_BEQUAD:
+ case FILE_LEQUAD:
+ case FILE_QDATE:
+ case FILE_LEQDATE:
+ case FILE_BEQDATE:
+ case FILE_QLDATE:
+ case FILE_LEQLDATE:
+ case FILE_BEQLDATE:
+ case FILE_QWDATE:
+ case FILE_LEQWDATE:
+ case FILE_BEQWDATE:
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ return 8;
+ default:
+ return (size_t)~0;
+ }
+}
+
+/*
+ * Get weight of this magic entry, for sorting purposes.
+ */
+private size_t
+apprentice_magic_strength(const struct magic *m)
+{
+#define MULT 10
+ size_t ts, v, val = 2 * MULT; /* baseline strength */
+
+ switch (m->type) {
+ case FILE_DEFAULT: /* make sure this sorts last */
+ if (m->factor_op != FILE_FACTOR_OP_NONE)
+ abort();
+ return 0;
+
+ case FILE_BYTE:
+ case FILE_SHORT:
+ case FILE_LESHORT:
+ case FILE_BESHORT:
+ case FILE_LONG:
+ case FILE_LELONG:
+ case FILE_BELONG:
+ case FILE_MELONG:
+ case FILE_DATE:
+ case FILE_LEDATE:
+ case FILE_BEDATE:
+ case FILE_MEDATE:
+ case FILE_LDATE:
+ case FILE_LELDATE:
+ case FILE_BELDATE:
+ case FILE_MELDATE:
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ case FILE_QUAD:
+ case FILE_BEQUAD:
+ case FILE_LEQUAD:
+ case FILE_QDATE:
+ case FILE_LEQDATE:
+ case FILE_BEQDATE:
+ case FILE_QLDATE:
+ case FILE_LEQLDATE:
+ case FILE_BEQLDATE:
+ case FILE_QWDATE:
+ case FILE_LEQWDATE:
+ case FILE_BEQWDATE:
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ ts = typesize(m->type);
+ if (ts == (size_t)~0)
+ abort();
+ val += ts * MULT;
+ break;
+
+ case FILE_PSTRING:
+ case FILE_STRING:
+ val += m->vallen * MULT;
+ break;
+
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ val += m->vallen * MULT / 2;
+ break;
+
+ case FILE_SEARCH:
+ val += m->vallen * MAX(MULT / m->vallen, 1);
+ break;
+
+ case FILE_REGEX:
+ v = nonmagic(m->value.s);
+ val += v * MAX(MULT / v, 1);
+ break;
+
+ case FILE_INDIRECT:
+ case FILE_NAME:
+ case FILE_USE:
+ break;
+
+ case FILE_DER:
+ val += MULT;
+ break;
+
+ default:
+ (void)fprintf(stderr, "Bad type %d\n", m->type);
+ abort();
+ }
+
+ switch (m->reln) {
+ case 'x': /* matches anything penalize */
+ case '!': /* matches almost anything penalize */
+ val = 0;
+ break;
+
+ case '=': /* Exact match, prefer */
+ val += MULT;
+ break;
+
+ case '>':
+ case '<': /* comparison match reduce strength */
+ val -= 2 * MULT;
+ break;
+
+ case '^':
+ case '&': /* masking bits, we could count them too */
+ val -= MULT;
+ break;
+
+ default:
+ (void)fprintf(stderr, "Bad relation %c\n", m->reln);
+ abort();
+ }
+
+ if (val == 0) /* ensure we only return 0 for FILE_DEFAULT */
+ val = 1;
+
+ switch (m->factor_op) {
+ case FILE_FACTOR_OP_NONE:
+ break;
+ case FILE_FACTOR_OP_PLUS:
+ val += m->factor;
+ break;
+ case FILE_FACTOR_OP_MINUS:
+ val -= m->factor;
+ break;
+ case FILE_FACTOR_OP_TIMES:
+ val *= m->factor;
+ break;
+ case FILE_FACTOR_OP_DIV:
+ val /= m->factor;
+ break;
+ default:
+ abort();
+ }
+
+ /*
+ * Magic entries with no description get a bonus because they depend
+ * on subsequent magic entries to print something.
+ */
+ if (m->desc[0] == '\0')
+ val++;
+ return val;
+}
+
+/*
+ * Sort callback for sorting entries by "strength" (basically length)
+ */
+private int
+apprentice_sort(const void *a, const void *b)
+{
+ const struct magic_entry *ma = CAST(const struct magic_entry *, a);
+ const struct magic_entry *mb = CAST(const struct magic_entry *, b);
+ size_t sa = apprentice_magic_strength(ma->mp);
+ size_t sb = apprentice_magic_strength(mb->mp);
+ if (sa == sb)
+ return 0;
+ else if (sa > sb)
+ return -1;
+ else
+ return 1;
+}
+
+/*
+ * Shows sorted patterns list in the order which is used for the matching
+ */
+private void
+apprentice_list(struct mlist *mlist, int mode)
+{
+ uint32_t magindex = 0;
+ struct mlist *ml;
+ for (ml = mlist->next; ml != mlist; ml = ml->next) {
+ for (magindex = 0; magindex < ml->nmagic; magindex++) {
+ struct magic *m = &ml->magic[magindex];
+ if ((m->flag & mode) != mode) {
+ /* Skip sub-tests */
+ while (magindex + 1 < ml->nmagic &&
+ ml->magic[magindex + 1].cont_level != 0)
+ ++magindex;
+ continue; /* Skip to next top-level test*/
+ }
+
+ /*
+ * Try to iterate over the tree until we find item with
+ * description/mimetype.
+ */
+ while (magindex + 1 < ml->nmagic &&
+ ml->magic[magindex + 1].cont_level != 0 &&
+ *ml->magic[magindex].desc == '\0' &&
+ *ml->magic[magindex].mimetype == '\0')
+ magindex++;
+
+ printf("Strength = %3" SIZE_T_FORMAT "u@%u: %s [%s]\n",
+ apprentice_magic_strength(m),
+ ml->magic[magindex].lineno,
+ ml->magic[magindex].desc,
+ ml->magic[magindex].mimetype);
+ }
+ }
+}
+
+private void
+set_test_type(struct magic *mstart, struct magic *m)
+{
+ switch (m->type) {
+ case FILE_BYTE:
+ case FILE_SHORT:
+ case FILE_LONG:
+ case FILE_DATE:
+ case FILE_BESHORT:
+ case FILE_BELONG:
+ case FILE_BEDATE:
+ case FILE_LESHORT:
+ case FILE_LELONG:
+ case FILE_LEDATE:
+ case FILE_LDATE:
+ case FILE_BELDATE:
+ case FILE_LELDATE:
+ case FILE_MEDATE:
+ case FILE_MELDATE:
+ case FILE_MELONG:
+ case FILE_QUAD:
+ case FILE_LEQUAD:
+ case FILE_BEQUAD:
+ case FILE_QDATE:
+ case FILE_LEQDATE:
+ case FILE_BEQDATE:
+ case FILE_QLDATE:
+ case FILE_LEQLDATE:
+ case FILE_BEQLDATE:
+ case FILE_QWDATE:
+ case FILE_LEQWDATE:
+ case FILE_BEQWDATE:
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ case FILE_DER:
+ mstart->flag |= BINTEST;
+ break;
+ case FILE_STRING:
+ case FILE_PSTRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ /* Allow text overrides */
+ if (mstart->str_flags & STRING_TEXTTEST)
+ mstart->flag |= TEXTTEST;
+ else
+ mstart->flag |= BINTEST;
+ break;
+ case FILE_REGEX:
+ case FILE_SEARCH:
+ /* Check for override */
+ if (mstart->str_flags & STRING_BINTEST)
+ mstart->flag |= BINTEST;
+ if (mstart->str_flags & STRING_TEXTTEST)
+ mstart->flag |= TEXTTEST;
+
+ if (mstart->flag & (TEXTTEST|BINTEST))
+ break;
+
+ /* binary test if pattern is not text */
+ if (file_looks_utf8(m->value.us, (size_t)m->vallen, NULL,
+ NULL) <= 0)
+ mstart->flag |= BINTEST;
+ else
+ mstart->flag |= TEXTTEST;
+ break;
+ case FILE_DEFAULT:
+ /* can't deduce anything; we shouldn't see this at the
+ top level anyway */
+ break;
+ case FILE_INVALID:
+ default:
+ /* invalid search type, but no need to complain here */
+ break;
+ }
+}
+
+private int
+addentry(struct magic_set *ms, struct magic_entry *me,
+ struct magic_entry_set *mset)
+{
+ size_t i = me->mp->type == FILE_NAME ? 1 : 0;
+ if (mset[i].count == mset[i].max) {
+ struct magic_entry *mp;
+
+ mset[i].max += ALLOC_INCR;
+ if ((mp = CAST(struct magic_entry *,
+ realloc(mset[i].me, sizeof(*mp) * mset[i].max))) ==
+ NULL) {
+ file_oomem(ms, sizeof(*mp) * mset[i].max);
+ return -1;
+ }
+ (void)memset(&mp[mset[i].count], 0, sizeof(*mp) *
+ ALLOC_INCR);
+ mset[i].me = mp;
+ }
+ mset[i].me[mset[i].count++] = *me;
+ memset(me, 0, sizeof(*me));
+ return 0;
+}
+
+/*
+ * Load and parse one file.
+ */
+private void
+load_1(struct magic_set *ms, int action, const char *fn, int *errs,
+ struct magic_entry_set *mset)
+{
+ size_t lineno = 0, llen = 0;
+ char *line = NULL;
+ ssize_t len;
+ struct magic_entry me;
+
+ FILE *f = fopen(ms->file = fn, "r");
+ if (f == NULL) {
+ if (errno != ENOENT)
+ file_error(ms, errno, "cannot read magic file `%s'",
+ fn);
+ (*errs)++;
+ return;
+ }
+
+ memset(&me, 0, sizeof(me));
+ /* read and parse this file */
+ for (ms->line = 1; (len = getline(&line, &llen, f)) != -1;
+ ms->line++) {
+ if (len == 0) /* null line, garbage, etc */
+ continue;
+ if (line[len - 1] == '\n') {
+ lineno++;
+ line[len - 1] = '\0'; /* delete newline */
+ }
+ switch (line[0]) {
+ case '\0': /* empty, do not parse */
+ case '#': /* comment, do not parse */
+ continue;
+ case '!':
+ if (line[1] == ':') {
+ size_t i;
+
+ for (i = 0; bang[i].name != NULL; i++) {
+ if ((size_t)(len - 2) > bang[i].len &&
+ memcmp(bang[i].name, line + 2,
+ bang[i].len) == 0)
+ break;
+ }
+ if (bang[i].name == NULL) {
+ file_error(ms, 0,
+ "Unknown !: entry `%s'", line);
+ (*errs)++;
+ continue;
+ }
+ if (me.mp == NULL) {
+ file_error(ms, 0,
+ "No current entry for :!%s type",
+ bang[i].name);
+ (*errs)++;
+ continue;
+ }
+ if ((*bang[i].fun)(ms, &me,
+ line + bang[i].len + 2) != 0) {
+ (*errs)++;
+ continue;
+ }
+ continue;
+ }
+ /*FALLTHROUGH*/
+ default:
+ again:
+ switch (parse(ms, &me, line, lineno, action)) {
+ case 0:
+ continue;
+ case 1:
+ (void)addentry(ms, &me, mset);
+ goto again;
+ default:
+ (*errs)++;
+ break;
+ }
+ }
+ }
+ if (me.mp)
+ (void)addentry(ms, &me, mset);
+ free(line);
+ (void)fclose(f);
+}
+
+/*
+ * parse a file or directory of files
+ * const char *fn: name of magic file or directory
+ */
+private int
+cmpstrp(const void *p1, const void *p2)
+{
+ return strcmp(*(char *const *)p1, *(char *const *)p2);
+}
+
+
+private uint32_t
+set_text_binary(struct magic_set *ms, struct magic_entry *me, uint32_t nme,
+ uint32_t starttest)
+{
+ static const char text[] = "text";
+ static const char binary[] = "binary";
+ static const size_t len = sizeof(text);
+
+ uint32_t i = starttest;
+
+ do {
+ set_test_type(me[starttest].mp, me[i].mp);
+ if ((ms->flags & MAGIC_DEBUG) == 0)
+ continue;
+ (void)fprintf(stderr, "%s%s%s: %s\n",
+ me[i].mp->mimetype,
+ me[i].mp->mimetype[0] == '\0' ? "" : "; ",
+ me[i].mp->desc[0] ? me[i].mp->desc : "(no description)",
+ me[i].mp->flag & BINTEST ? binary : text);
+ if (me[i].mp->flag & BINTEST) {
+ char *p = strstr(me[i].mp->desc, text);
+ if (p && (p == me[i].mp->desc ||
+ isspace((unsigned char)p[-1])) &&
+ (p + len - me[i].mp->desc == MAXstring
+ || (p[len] == '\0' ||
+ isspace((unsigned char)p[len]))))
+ (void)fprintf(stderr, "*** Possible "
+ "binary test for text type\n");
+ }
+ } while (++i < nme && me[i].mp->cont_level != 0);
+ return i;
+}
+
+private void
+set_last_default(struct magic_set *ms, struct magic_entry *me, uint32_t nme)
+{
+ uint32_t i;
+ for (i = 0; i < nme; i++) {
+ if (me[i].mp->cont_level == 0 &&
+ me[i].mp->type == FILE_DEFAULT) {
+ while (++i < nme)
+ if (me[i].mp->cont_level == 0)
+ break;
+ if (i != nme) {
+ /* XXX - Ugh! */
+ ms->line = me[i].mp->lineno;
+ file_magwarn(ms,
+ "level 0 \"default\" did not sort last");
+ }
+ return;
+ }
+ }
+}
+
+private int
+coalesce_entries(struct magic_set *ms, struct magic_entry *me, uint32_t nme,
+ struct magic **ma, uint32_t *nma)
+{
+ uint32_t i, mentrycount = 0;
+ size_t slen;
+
+ for (i = 0; i < nme; i++)
+ mentrycount += me[i].cont_count;
+
+ slen = sizeof(**ma) * mentrycount;
+ if ((*ma = CAST(struct magic *, malloc(slen))) == NULL) {
+ file_oomem(ms, slen);
+ return -1;
+ }
+
+ mentrycount = 0;
+ for (i = 0; i < nme; i++) {
+ (void)memcpy(*ma + mentrycount, me[i].mp,
+ me[i].cont_count * sizeof(**ma));
+ mentrycount += me[i].cont_count;
+ }
+ *nma = mentrycount;
+ return 0;
+}
+
+private void
+magic_entry_free(struct magic_entry *me, uint32_t nme)
+{
+ uint32_t i;
+ if (me == NULL)
+ return;
+ for (i = 0; i < nme; i++)
+ free(me[i].mp);
+ free(me);
+}
+
+private struct magic_map *
+apprentice_load(struct magic_set *ms, const char *fn, int action)
+{
+ int errs = 0;
+ uint32_t i, j;
+ size_t files = 0, maxfiles = 0;
+ char **filearr = NULL, *mfn;
+ struct stat st;
+ struct magic_map *map;
+ struct magic_entry_set mset[MAGIC_SETS];
+ DIR *dir;
+ struct dirent *d;
+
+ memset(mset, 0, sizeof(mset));
+ ms->flags |= MAGIC_CHECK; /* Enable checks for parsed files */
+
+
+ if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL)
+ {
+ file_oomem(ms, sizeof(*map));
+ return NULL;
+ }
+ map->type = MAP_TYPE_MALLOC;
+
+ /* print silly verbose header for USG compat. */
+ if (action == FILE_CHECK)
+ (void)fprintf(stderr, "%s\n", usg_hdr);
+
+ /* load directory or file */
+ if (stat(fn, &st) == 0 && S_ISDIR(st.st_mode)) {
+ dir = opendir(fn);
+ if (!dir) {
+ errs++;
+ goto out;
+ }
+ while ((d = readdir(dir)) != NULL) {
+ if (d->d_name[0] == '.')
+ continue;
+ if (asprintf(&mfn, "%s/%s", fn, d->d_name) < 0) {
+ file_oomem(ms,
+ strlen(fn) + strlen(d->d_name) + 2);
+ errs++;
+ closedir(dir);
+ goto out;
+ }
+ if (stat(mfn, &st) == -1 || !S_ISREG(st.st_mode)) {
+ free(mfn);
+ continue;
+ }
+ if (files >= maxfiles) {
+ size_t mlen;
+ maxfiles = (maxfiles + 1) * 2;
+ mlen = maxfiles * sizeof(*filearr);
+ if ((filearr = CAST(char **,
+ realloc(filearr, mlen))) == NULL) {
+ file_oomem(ms, mlen);
+ free(mfn);
+ closedir(dir);
+ errs++;
+ goto out;
+ }
+ }
+ filearr[files++] = mfn;
+ }
+ closedir(dir);
+ qsort(filearr, files, sizeof(*filearr), cmpstrp);
+ for (i = 0; i < files; i++) {
+ load_1(ms, action, filearr[i], &errs, mset);
+ free(filearr[i]);
+ }
+ free(filearr);
+ } else
+ load_1(ms, action, fn, &errs, mset);
+ if (errs)
+ goto out;
+
+ for (j = 0; j < MAGIC_SETS; j++) {
+ /* Set types of tests */
+ for (i = 0; i < mset[j].count; ) {
+ if (mset[j].me[i].mp->cont_level != 0) {
+ i++;
+ continue;
+ }
+ i = set_text_binary(ms, mset[j].me, mset[j].count, i);
+ }
+ if (mset[j].me)
+ qsort(mset[j].me, mset[j].count, sizeof(*mset[j].me),
+ apprentice_sort);
+
+ /*
+ * Make sure that any level 0 "default" line is last
+ * (if one exists).
+ */
+ set_last_default(ms, mset[j].me, mset[j].count);
+
+ /* coalesce per file arrays into a single one */
+ if (coalesce_entries(ms, mset[j].me, mset[j].count,
+ &map->magic[j], &map->nmagic[j]) == -1) {
+ errs++;
+ goto out;
+ }
+ }
+
+out:
+ for (j = 0; j < MAGIC_SETS; j++)
+ magic_entry_free(mset[j].me, mset[j].count);
+
+ if (errs) {
+ apprentice_unmap(map);
+ return NULL;
+ }
+ return map;
+}
+
+/*
+ * extend the sign bit if the comparison is to be signed
+ */
+protected uint64_t
+file_signextend(struct magic_set *ms, struct magic *m, uint64_t v)
+{
+ if (!(m->flag & UNSIGNED)) {
+ switch(m->type) {
+ /*
+ * Do not remove the casts below. They are
+ * vital. When later compared with the data,
+ * the sign extension must have happened.
+ */
+ case FILE_BYTE:
+ v = (signed char) v;
+ break;
+ case FILE_SHORT:
+ case FILE_BESHORT:
+ case FILE_LESHORT:
+ v = (short) v;
+ break;
+ case FILE_DATE:
+ case FILE_BEDATE:
+ case FILE_LEDATE:
+ case FILE_MEDATE:
+ case FILE_LDATE:
+ case FILE_BELDATE:
+ case FILE_LELDATE:
+ case FILE_MELDATE:
+ case FILE_LONG:
+ case FILE_BELONG:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ v = (int32_t) v;
+ break;
+ case FILE_QUAD:
+ case FILE_BEQUAD:
+ case FILE_LEQUAD:
+ case FILE_QDATE:
+ case FILE_QLDATE:
+ case FILE_QWDATE:
+ case FILE_BEQDATE:
+ case FILE_BEQLDATE:
+ case FILE_BEQWDATE:
+ case FILE_LEQDATE:
+ case FILE_LEQLDATE:
+ case FILE_LEQWDATE:
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ v = (int64_t) v;
+ break;
+ case FILE_STRING:
+ case FILE_PSTRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ case FILE_REGEX:
+ case FILE_SEARCH:
+ case FILE_DEFAULT:
+ case FILE_INDIRECT:
+ case FILE_NAME:
+ case FILE_USE:
+ case FILE_CLEAR:
+ case FILE_DER:
+ break;
+ default:
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "cannot happen: m->type=%d\n",
+ m->type);
+ return ~0U;
+ }
+ }
+ return v;
+}
+
+private int
+string_modifier_check(struct magic_set *ms, struct magic *m)
+{
+ if ((ms->flags & MAGIC_CHECK) == 0)
+ return 0;
+
+ if ((m->type != FILE_REGEX || (m->str_flags & REGEX_LINE_COUNT) == 0) &&
+ (m->type != FILE_PSTRING && (m->str_flags & PSTRING_LEN) != 0)) {
+ file_magwarn(ms,
+ "'/BHhLl' modifiers are only allowed for pascal strings\n");
+ return -1;
+ }
+ switch (m->type) {
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ if (m->str_flags != 0) {
+ file_magwarn(ms,
+ "no modifiers allowed for 16-bit strings\n");
+ return -1;
+ }
+ break;
+ case FILE_STRING:
+ case FILE_PSTRING:
+ if ((m->str_flags & REGEX_OFFSET_START) != 0) {
+ file_magwarn(ms,
+ "'/%c' only allowed on regex and search\n",
+ CHAR_REGEX_OFFSET_START);
+ return -1;
+ }
+ break;
+ case FILE_SEARCH:
+ if (m->str_range == 0) {
+ file_magwarn(ms,
+ "missing range; defaulting to %d\n",
+ STRING_DEFAULT_RANGE);
+ m->str_range = STRING_DEFAULT_RANGE;
+ return -1;
+ }
+ break;
+ case FILE_REGEX:
+ if ((m->str_flags & STRING_COMPACT_WHITESPACE) != 0) {
+ file_magwarn(ms, "'/%c' not allowed on regex\n",
+ CHAR_COMPACT_WHITESPACE);
+ return -1;
+ }
+ if ((m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE) != 0) {
+ file_magwarn(ms, "'/%c' not allowed on regex\n",
+ CHAR_COMPACT_OPTIONAL_WHITESPACE);
+ return -1;
+ }
+ break;
+ default:
+ file_magwarn(ms, "coding error: m->type=%d\n",
+ m->type);
+ return -1;
+ }
+ return 0;
+}
+
+private int
+get_op(char c)
+{
+ switch (c) {
+ case '&':
+ return FILE_OPAND;
+ case '|':
+ return FILE_OPOR;
+ case '^':
+ return FILE_OPXOR;
+ case '+':
+ return FILE_OPADD;
+ case '-':
+ return FILE_OPMINUS;
+ case '*':
+ return FILE_OPMULTIPLY;
+ case '/':
+ return FILE_OPDIVIDE;
+ case '%':
+ return FILE_OPMODULO;
+ default:
+ return -1;
+ }
+}
+
+#ifdef ENABLE_CONDITIONALS
+private int
+get_cond(const char *l, const char **t)
+{
+ static const struct cond_tbl_s {
+ char name[8];
+ size_t len;
+ int cond;
+ } cond_tbl[] = {
+ { "if", 2, COND_IF },
+ { "elif", 4, COND_ELIF },
+ { "else", 4, COND_ELSE },
+ { "", 0, COND_NONE },
+ };
+ const struct cond_tbl_s *p;
+
+ for (p = cond_tbl; p->len; p++) {
+ if (strncmp(l, p->name, p->len) == 0 &&
+ isspace((unsigned char)l[p->len])) {
+ if (t)
+ *t = l + p->len;
+ break;
+ }
+ }
+ return p->cond;
+}
+
+private int
+check_cond(struct magic_set *ms, int cond, uint32_t cont_level)
+{
+ int last_cond;
+ last_cond = ms->c.li[cont_level].last_cond;
+
+ switch (cond) {
+ case COND_IF:
+ if (last_cond != COND_NONE && last_cond != COND_ELIF) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "syntax error: `if'");
+ return -1;
+ }
+ last_cond = COND_IF;
+ break;
+
+ case COND_ELIF:
+ if (last_cond != COND_IF && last_cond != COND_ELIF) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "syntax error: `elif'");
+ return -1;
+ }
+ last_cond = COND_ELIF;
+ break;
+
+ case COND_ELSE:
+ if (last_cond != COND_IF && last_cond != COND_ELIF) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "syntax error: `else'");
+ return -1;
+ }
+ last_cond = COND_NONE;
+ break;
+
+ case COND_NONE:
+ last_cond = COND_NONE;
+ break;
+ }
+
+ ms->c.li[cont_level].last_cond = last_cond;
+ return 0;
+}
+#endif /* ENABLE_CONDITIONALS */
+
+private int
+parse_indirect_modifier(struct magic_set *ms, struct magic *m, const char **lp)
+{
+ const char *l = *lp;
+
+ while (!isspace((unsigned char)*++l))
+ switch (*l) {
+ case CHAR_INDIRECT_RELATIVE:
+ m->str_flags |= INDIRECT_RELATIVE;
+ break;
+ default:
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "indirect modifier `%c' "
+ "invalid", *l);
+ *lp = l;
+ return -1;
+ }
+ *lp = l;
+ return 0;
+}
+
+private void
+parse_op_modifier(struct magic_set *ms, struct magic *m, const char **lp,
+ int op)
+{
+ const char *l = *lp;
+ char *t;
+ uint64_t val;
+
+ ++l;
+ m->mask_op |= op;
+ val = (uint64_t)strtoull(l, &t, 0);
+ l = t;
+ m->num_mask = file_signextend(ms, m, val);
+ eatsize(&l);
+ *lp = l;
+}
+
+private int
+parse_string_modifier(struct magic_set *ms, struct magic *m, const char **lp)
+{
+ const char *l = *lp;
+ char *t;
+ int have_range = 0;
+
+ while (!isspace((unsigned char)*++l)) {
+ switch (*l) {
+ case '0': case '1': case '2':
+ case '3': case '4': case '5':
+ case '6': case '7': case '8':
+ case '9':
+ if (have_range && (ms->flags & MAGIC_CHECK))
+ file_magwarn(ms, "multiple ranges");
+ have_range = 1;
+ m->str_range = CAST(uint32_t, strtoul(l, &t, 0));
+ if (m->str_range == 0)
+ file_magwarn(ms, "zero range");
+ l = t - 1;
+ break;
+ case CHAR_COMPACT_WHITESPACE:
+ m->str_flags |= STRING_COMPACT_WHITESPACE;
+ break;
+ case CHAR_COMPACT_OPTIONAL_WHITESPACE:
+ m->str_flags |= STRING_COMPACT_OPTIONAL_WHITESPACE;
+ break;
+ case CHAR_IGNORE_LOWERCASE:
+ m->str_flags |= STRING_IGNORE_LOWERCASE;
+ break;
+ case CHAR_IGNORE_UPPERCASE:
+ m->str_flags |= STRING_IGNORE_UPPERCASE;
+ break;
+ case CHAR_REGEX_OFFSET_START:
+ m->str_flags |= REGEX_OFFSET_START;
+ break;
+ case CHAR_BINTEST:
+ m->str_flags |= STRING_BINTEST;
+ break;
+ case CHAR_TEXTTEST:
+ m->str_flags |= STRING_TEXTTEST;
+ break;
+ case CHAR_TRIM:
+ m->str_flags |= STRING_TRIM;
+ break;
+ case CHAR_PSTRING_1_LE:
+#define SET_LENGTH(a) m->str_flags = (m->str_flags & ~PSTRING_LEN) | (a)
+ if (m->type != FILE_PSTRING)
+ goto bad;
+ SET_LENGTH(PSTRING_1_LE);
+ break;
+ case CHAR_PSTRING_2_BE:
+ if (m->type != FILE_PSTRING)
+ goto bad;
+ SET_LENGTH(PSTRING_2_BE);
+ break;
+ case CHAR_PSTRING_2_LE:
+ if (m->type != FILE_PSTRING)
+ goto bad;
+ SET_LENGTH(PSTRING_2_LE);
+ break;
+ case CHAR_PSTRING_4_BE:
+ if (m->type != FILE_PSTRING)
+ goto bad;
+ SET_LENGTH(PSTRING_4_BE);
+ break;
+ case CHAR_PSTRING_4_LE:
+ switch (m->type) {
+ case FILE_PSTRING:
+ case FILE_REGEX:
+ break;
+ default:
+ goto bad;
+ }
+ SET_LENGTH(PSTRING_4_LE);
+ break;
+ case CHAR_PSTRING_LENGTH_INCLUDES_ITSELF:
+ if (m->type != FILE_PSTRING)
+ goto bad;
+ m->str_flags |= PSTRING_LENGTH_INCLUDES_ITSELF;
+ break;
+ default:
+ bad:
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "string modifier `%c' "
+ "invalid", *l);
+ goto out;
+ }
+ /* allow multiple '/' for readability */
+ if (l[1] == '/' && !isspace((unsigned char)l[2]))
+ l++;
+ }
+ if (string_modifier_check(ms, m) == -1)
+ goto out;
+ *lp = l;
+ return 0;
+out:
+ *lp = l;
+ return -1;
+}
+
+/*
+ * parse one line from magic file, put into magic[index++] if valid
+ */
+private int
+parse(struct magic_set *ms, struct magic_entry *me, const char *line,
+ size_t lineno, int action)
+{
+#ifdef ENABLE_CONDITIONALS
+ static uint32_t last_cont_level = 0;
+#endif
+ size_t i;
+ struct magic *m;
+ const char *l = line;
+ char *t;
+ int op;
+ uint32_t cont_level;
+ int32_t diff;
+
+ cont_level = 0;
+
+ /*
+ * Parse the offset.
+ */
+ while (*l == '>') {
+ ++l; /* step over */
+ cont_level++;
+ }
+#ifdef ENABLE_CONDITIONALS
+ if (cont_level == 0 || cont_level > last_cont_level)
+ if (file_check_mem(ms, cont_level) == -1)
+ return -1;
+ last_cont_level = cont_level;
+#endif
+ if (cont_level != 0) {
+ if (me->mp == NULL) {
+ file_magerror(ms, "No current entry for continuation");
+ return -1;
+ }
+ if (me->cont_count == 0) {
+ file_magerror(ms, "Continuations present with 0 count");
+ return -1;
+ }
+ m = &me->mp[me->cont_count - 1];
+ diff = (int32_t)cont_level - (int32_t)m->cont_level;
+ if (diff > 1)
+ file_magwarn(ms, "New continuation level %u is more "
+ "than one larger than current level %u", cont_level,
+ m->cont_level);
+ if (me->cont_count == me->max_count) {
+ struct magic *nm;
+ size_t cnt = me->max_count + ALLOC_CHUNK;
+ if ((nm = CAST(struct magic *, realloc(me->mp,
+ sizeof(*nm) * cnt))) == NULL) {
+ file_oomem(ms, sizeof(*nm) * cnt);
+ return -1;
+ }
+ me->mp = m = nm;
+ me->max_count = CAST(uint32_t, cnt);
+ }
+ m = &me->mp[me->cont_count++];
+ (void)memset(m, 0, sizeof(*m));
+ m->cont_level = cont_level;
+ } else {
+ static const size_t len = sizeof(*m) * ALLOC_CHUNK;
+ if (me->mp != NULL)
+ return 1;
+ if ((m = CAST(struct magic *, malloc(len))) == NULL) {
+ file_oomem(ms, len);
+ return -1;
+ }
+ me->mp = m;
+ me->max_count = ALLOC_CHUNK;
+ (void)memset(m, 0, sizeof(*m));
+ m->factor_op = FILE_FACTOR_OP_NONE;
+ m->cont_level = 0;
+ me->cont_count = 1;
+ }
+ m->lineno = CAST(uint32_t, lineno);
+
+ if (*l == '&') { /* m->cont_level == 0 checked below. */
+ ++l; /* step over */
+ m->flag |= OFFADD;
+ }
+ if (*l == '(') {
+ ++l; /* step over */
+ m->flag |= INDIR;
+ if (m->flag & OFFADD)
+ m->flag = (m->flag & ~OFFADD) | INDIROFFADD;
+
+ if (*l == '&') { /* m->cont_level == 0 checked below */
+ ++l; /* step over */
+ m->flag |= OFFADD;
+ }
+ }
+ /* Indirect offsets are not valid at level 0. */
+ if (m->cont_level == 0 && (m->flag & (OFFADD | INDIROFFADD))) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "relative offset at level 0");
+ return -1;
+ }
+
+ /* get offset, then skip over it */
+ m->offset = (uint32_t)strtoul(l, &t, 0);
+ if (l == t) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "offset `%s' invalid", l);
+ return -1;
+ }
+ l = t;
+
+ if (m->flag & INDIR) {
+ m->in_type = FILE_LONG;
+ m->in_offset = 0;
+ m->in_op = 0;
+ /*
+ * read [.,lbs][+-]nnnnn)
+ */
+ if (*l == '.' || *l == ',') {
+ if (*l == ',')
+ m->in_op |= FILE_OPSIGNED;
+ l++;
+ switch (*l) {
+ case 'l':
+ m->in_type = FILE_LELONG;
+ break;
+ case 'L':
+ m->in_type = FILE_BELONG;
+ break;
+ case 'm':
+ m->in_type = FILE_MELONG;
+ break;
+ case 'h':
+ case 's':
+ m->in_type = FILE_LESHORT;
+ break;
+ case 'H':
+ case 'S':
+ m->in_type = FILE_BESHORT;
+ break;
+ case 'c':
+ case 'b':
+ case 'C':
+ case 'B':
+ m->in_type = FILE_BYTE;
+ break;
+ case 'e':
+ case 'f':
+ case 'g':
+ m->in_type = FILE_LEDOUBLE;
+ break;
+ case 'E':
+ case 'F':
+ case 'G':
+ m->in_type = FILE_BEDOUBLE;
+ break;
+ case 'i':
+ m->in_type = FILE_LEID3;
+ break;
+ case 'I':
+ m->in_type = FILE_BEID3;
+ break;
+ default:
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms,
+ "indirect offset type `%c' invalid",
+ *l);
+ return -1;
+ }
+ l++;
+ }
+
+ if (*l == '~') {
+ m->in_op |= FILE_OPINVERSE;
+ l++;
+ }
+ if ((op = get_op(*l)) != -1) {
+ m->in_op |= op;
+ l++;
+ }
+ if (*l == '(') {
+ m->in_op |= FILE_OPINDIRECT;
+ l++;
+ }
+ if (isdigit((unsigned char)*l) || *l == '-') {
+ m->in_offset = (int32_t)strtol(l, &t, 0);
+ if (l == t) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms,
+ "in_offset `%s' invalid", l);
+ return -1;
+ }
+ l = t;
+ }
+ if (*l++ != ')' ||
+ ((m->in_op & FILE_OPINDIRECT) && *l++ != ')')) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms,
+ "missing ')' in indirect offset");
+ return -1;
+ }
+ }
+ EATAB;
+
+#ifdef ENABLE_CONDITIONALS
+ m->cond = get_cond(l, &l);
+ if (check_cond(ms, m->cond, cont_level) == -1)
+ return -1;
+
+ EATAB;
+#endif
+
+ /*
+ * Parse the type.
+ */
+ if (*l == 'u') {
+ /*
+ * Try it as a keyword type prefixed by "u"; match what
+ * follows the "u". If that fails, try it as an SUS
+ * integer type.
+ */
+ m->type = get_type(type_tbl, l + 1, &l);
+ if (m->type == FILE_INVALID) {
+ /*
+ * Not a keyword type; parse it as an SUS type,
+ * 'u' possibly followed by a number or C/S/L.
+ */
+ m->type = get_standard_integer_type(l, &l);
+ }
+ /* It's unsigned. */
+ if (m->type != FILE_INVALID)
+ m->flag |= UNSIGNED;
+ } else {
+ /*
+ * Try it as a keyword type. If that fails, try it as
+ * an SUS integer type if it begins with "d" or as an
+ * SUS string type if it begins with "s". In any case,
+ * it's not unsigned.
+ */
+ m->type = get_type(type_tbl, l, &l);
+ if (m->type == FILE_INVALID) {
+ /*
+ * Not a keyword type; parse it as an SUS type,
+ * either 'd' possibly followed by a number or
+ * C/S/L, or just 's'.
+ */
+ if (*l == 'd')
+ m->type = get_standard_integer_type(l, &l);
+ else if (*l == 's' && !isalpha((unsigned char)l[1])) {
+ m->type = FILE_STRING;
+ ++l;
+ }
+ }
+ }
+
+ if (m->type == FILE_INVALID) {
+ /* Not found - try it as a special keyword. */
+ m->type = get_type(special_tbl, l, &l);
+ }
+
+ if (m->type == FILE_INVALID) {
+ if (ms->flags & MAGIC_CHECK)
+ 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? */
+
+ m->mask_op = 0;
+ if (*l == '~') {
+ if (!IS_STRING(m->type))
+ m->mask_op |= FILE_OPINVERSE;
+ else if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "'~' invalid for string types");
+ ++l;
+ }
+ m->str_range = 0;
+ m->str_flags = m->type == FILE_PSTRING ? PSTRING_1_LE : 0;
+ if ((op = get_op(*l)) != -1) {
+ if (IS_STRING(m->type)) {
+ int r;
+
+ if (op != FILE_OPDIVIDE) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms,
+ "invalid string/indirect op: "
+ "`%c'", *t);
+ return -1;
+ }
+
+ if (m->type == FILE_INDIRECT)
+ r = parse_indirect_modifier(ms, m, &l);
+ else
+ r = parse_string_modifier(ms, m, &l);
+ if (r == -1)
+ return -1;
+ } else
+ parse_op_modifier(ms, m, &l, op);
+ }
+
+ /*
+ * We used to set mask to all 1's here, instead let's just not do
+ * anything if mask = 0 (unless you have a better idea)
+ */
+ EATAB;
+
+ switch (*l) {
+ case '>':
+ case '<':
+ m->reln = *l;
+ ++l;
+ if (*l == '=') {
+ if (ms->flags & MAGIC_CHECK) {
+ file_magwarn(ms, "%c= not supported",
+ m->reln);
+ return -1;
+ }
+ ++l;
+ }
+ break;
+ /* Old-style anding: "0 byte &0x80 dynamically linked" */
+ case '&':
+ case '^':
+ case '=':
+ m->reln = *l;
+ ++l;
+ if (*l == '=') {
+ /* HP compat: ignore &= etc. */
+ ++l;
+ }
+ break;
+ case '!':
+ m->reln = *l;
+ ++l;
+ break;
+ default:
+ m->reln = '='; /* the default relation */
+ if (*l == 'x' && ((isascii((unsigned char)l[1]) &&
+ isspace((unsigned char)l[1])) || !l[1])) {
+ m->reln = *l;
+ ++l;
+ }
+ break;
+ }
+ /*
+ * Grab the value part, except for an 'x' reln.
+ */
+ if (m->reln != 'x' && getvalue(ms, m, &l, action))
+ return -1;
+
+ /*
+ * TODO finish this macro and start using it!
+ * #define offsetcheck {if (offset > ms->bytes_max -1)
+ * magwarn("offset too big"); }
+ */
+
+ /*
+ * Now get last part - the description
+ */
+ EATAB;
+ if (l[0] == '\b') {
+ ++l;
+ m->flag |= NOSPACE;
+ } else if ((l[0] == '\\') && (l[1] == 'b')) {
+ ++l;
+ ++l;
+ m->flag |= NOSPACE;
+ }
+ for (i = 0; (m->desc[i++] = *l++) != '\0' && i < sizeof(m->desc); )
+ continue;
+ if (i == sizeof(m->desc)) {
+ m->desc[sizeof(m->desc) - 1] = '\0';
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "description `%s' truncated", m->desc);
+ }
+
+ /*
+ * We only do this check while compiling, or if any of the magic
+ * files were not compiled.
+ */
+ if (ms->flags & MAGIC_CHECK) {
+ if (check_format(ms, m) == -1)
+ return -1;
+ }
+#ifndef COMPILE_ONLY
+ if (action == FILE_CHECK) {
+ file_mdump(m);
+ }
+#endif
+ m->mimetype[0] = '\0'; /* initialise MIME type to none */
+ return 0;
+}
+
+/*
+ * parse a STRENGTH annotation line from magic file, put into magic[index - 1]
+ * if valid
+ */
+private int
+parse_strength(struct magic_set *ms, struct magic_entry *me, const char *line)
+{
+ const char *l = line;
+ char *el;
+ unsigned long factor;
+ struct magic *m = &me->mp[0];
+
+ if (m->factor_op != FILE_FACTOR_OP_NONE) {
+ file_magwarn(ms,
+ "Current entry already has a strength type: %c %d",
+ m->factor_op, m->factor);
+ return -1;
+ }
+ if (m->type == FILE_NAME) {
+ file_magwarn(ms, "%s: Strength setting is not supported in "
+ "\"name\" magic entries", m->value.s);
+ return -1;
+ }
+ EATAB;
+ switch (*l) {
+ case FILE_FACTOR_OP_NONE:
+ case FILE_FACTOR_OP_PLUS:
+ case FILE_FACTOR_OP_MINUS:
+ case FILE_FACTOR_OP_TIMES:
+ case FILE_FACTOR_OP_DIV:
+ m->factor_op = *l++;
+ break;
+ default:
+ file_magwarn(ms, "Unknown factor op `%c'", *l);
+ return -1;
+ }
+ EATAB;
+ factor = strtoul(l, &el, 0);
+ if (factor > 255) {
+ file_magwarn(ms, "Too large factor `%lu'", factor);
+ goto out;
+ }
+ if (*el && !isspace((unsigned char)*el)) {
+ file_magwarn(ms, "Bad factor `%s'", l);
+ goto out;
+ }
+ m->factor = (uint8_t)factor;
+ if (m->factor == 0 && m->factor_op == FILE_FACTOR_OP_DIV) {
+ file_magwarn(ms, "Cannot have factor op `%c' and factor %u",
+ m->factor_op, m->factor);
+ goto out;
+ }
+ return 0;
+out:
+ m->factor_op = FILE_FACTOR_OP_NONE;
+ m->factor = 0;
+ return -1;
+}
+
+private int
+goodchar(unsigned char x, const char *extra)
+{
+ return (isascii(x) && isalnum(x)) || strchr(extra, x);
+}
+
+private int
+parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line,
+ off_t off, size_t len, const char *name, const char *extra, int nt)
+{
+ size_t i;
+ const char *l = line;
+ struct magic *m = &me->mp[me->cont_count == 0 ? 0 : me->cont_count - 1];
+ char *buf = CAST(char *, CAST(void *, m)) + off;
+
+ if (buf[0] != '\0') {
+ len = nt ? strlen(buf) : len;
+ file_magwarn(ms, "Current entry already has a %s type "
+ "`%.*s', new type `%s'", name, (int)len, buf, l);
+ return -1;
+ }
+
+ if (*m->desc == '\0') {
+ file_magwarn(ms, "Current entry does not yet have a "
+ "description for adding a %s type", name);
+ return -1;
+ }
+
+ EATAB;
+ for (i = 0; *l && i < len && goodchar(*l, extra); buf[i++] = *l++)
+ continue;
+
+ if (i == len && *l) {
+ if (nt)
+ buf[len - 1] = '\0';
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "%s type `%s' truncated %"
+ SIZE_T_FORMAT "u", name, line, i);
+ } else {
+ if (!isspace((unsigned char)*l) && !goodchar(*l, extra))
+ file_magwarn(ms, "%s type `%s' has bad char '%c'",
+ name, line, *l);
+ if (nt)
+ buf[i] = '\0';
+ }
+
+ if (i > 0)
+ return 0;
+
+ file_magerror(ms, "Bad magic entry '%s'", line);
+ return -1;
+}
+
+/*
+ * Parse an Apple CREATOR/TYPE annotation from magic file and put it into
+ * magic[index - 1]
+ */
+private int
+parse_apple(struct magic_set *ms, struct magic_entry *me, const char *line)
+{
+ struct magic *m = &me->mp[0];
+
+ return parse_extra(ms, me, line,
+ CAST(off_t, offsetof(struct magic, apple)),
+ sizeof(m->apple), "APPLE", "!+-./?", 0);
+}
+
+/*
+ * Parse a comma-separated list of extensions
+ */
+private int
+parse_ext(struct magic_set *ms, struct magic_entry *me, const char *line)
+{
+ struct magic *m = &me->mp[0];
+
+ return parse_extra(ms, me, line,
+ CAST(off_t, offsetof(struct magic, ext)),
+ sizeof(m->ext), "EXTENSION", ",!+-/@", 0);
+}
+
+/*
+ * parse a MIME annotation line from magic file, put into magic[index - 1]
+ * if valid
+ */
+private int
+parse_mime(struct magic_set *ms, struct magic_entry *me, const char *line)
+{
+ struct magic *m = &me->mp[0];
+
+ return parse_extra(ms, me, line,
+ CAST(off_t, offsetof(struct magic, mimetype)),
+ sizeof(m->mimetype), "MIME", "+-/.", 1);
+}
+
+private int
+check_format_type(const char *ptr, int type, const char **estr)
+{
+ int quad = 0, h;
+ size_t len, cnt;
+ if (*ptr == '\0') {
+ /* Missing format string; bad */
+ *estr = "missing format spec";
+ return -1;
+ }
+
+ switch (file_formats[type]) {
+ case FILE_FMT_QUAD:
+ quad = 1;
+ /*FALLTHROUGH*/
+ case FILE_FMT_NUM:
+ if (quad == 0) {
+ switch (type) {
+ case FILE_BYTE:
+ h = 2;
+ break;
+ case FILE_SHORT:
+ case FILE_BESHORT:
+ case FILE_LESHORT:
+ h = 1;
+ break;
+ case FILE_LONG:
+ case FILE_BELONG:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ case FILE_LEID3:
+ case FILE_BEID3:
+ case FILE_INDIRECT:
+ h = 0;
+ break;
+ default:
+ abort();
+ }
+ } else
+ h = 0;
+ if (*ptr == '-')
+ ptr++;
+ if (*ptr == '.')
+ ptr++;
+ if (*ptr == '#')
+ ptr++;
+#define CHECKLEN() do { \
+ for (len = cnt = 0; isdigit((unsigned char)*ptr); ptr++, cnt++) \
+ len = len * 10 + (*ptr - '0'); \
+ if (cnt > 5 || len > 1024) \
+ goto toolong; \
+} while (/*CONSTCOND*/0)
+
+ CHECKLEN();
+ if (*ptr == '.')
+ ptr++;
+ CHECKLEN();
+ if (quad) {
+ if (*ptr++ != 'l')
+ goto invalid;
+ if (*ptr++ != 'l')
+ goto invalid;
+ }
+
+ switch (*ptr++) {
+#ifdef STRICT_FORMAT /* "long" formats are int formats for us */
+ /* so don't accept the 'l' modifier */
+ case 'l':
+ switch (*ptr++) {
+ case 'i':
+ case 'd':
+ case 'u':
+ case 'o':
+ case 'x':
+ case 'X':
+ if (h == 0)
+ return 0;
+ /*FALLTHROUGH*/
+ default:
+ goto invalid;
+ }
+
+ /*
+ * Don't accept h and hh modifiers. They make writing
+ * magic entries more complicated, for very little benefit
+ */
+ case 'h':
+ if (h-- <= 0)
+ goto invalid;
+ switch (*ptr++) {
+ case 'h':
+ if (h-- <= 0)
+ goto invalid;
+ switch (*ptr++) {
+ case 'i':
+ case 'd':
+ case 'u':
+ case 'o':
+ case 'x':
+ case 'X':
+ return 0;
+ default:
+ goto invalid;
+ }
+ case 'i':
+ case 'd':
+ case 'u':
+ case 'o':
+ case 'x':
+ case 'X':
+ if (h == 0)
+ return 0;
+ /*FALLTHROUGH*/
+ default:
+ goto invalid;
+ }
+#endif
+ case 'c':
+ if (h == 2)
+ return 0;
+ goto invalid;
+ case 'i':
+ case 'd':
+ case 'u':
+ case 'o':
+ case 'x':
+ case 'X':
+#ifdef STRICT_FORMAT
+ if (h == 0)
+ return 0;
+ /*FALLTHROUGH*/
+#else
+ return 0;
+#endif
+ default:
+ goto invalid;
+ }
+
+ case FILE_FMT_FLOAT:
+ case FILE_FMT_DOUBLE:
+ if (*ptr == '-')
+ ptr++;
+ if (*ptr == '.')
+ ptr++;
+ CHECKLEN();
+ if (*ptr == '.')
+ ptr++;
+ CHECKLEN();
+ switch (*ptr++) {
+ case 'e':
+ case 'E':
+ case 'f':
+ case 'F':
+ case 'g':
+ case 'G':
+ return 0;
+
+ default:
+ goto invalid;
+ }
+
+
+ case FILE_FMT_STR:
+ if (*ptr == '-')
+ ptr++;
+ while (isdigit((unsigned char )*ptr))
+ ptr++;
+ if (*ptr == '.') {
+ ptr++;
+ while (isdigit((unsigned char )*ptr))
+ ptr++;
+ }
+
+ switch (*ptr++) {
+ case 's':
+ return 0;
+ default:
+ goto invalid;
+ }
+
+ default:
+ /* internal error */
+ abort();
+ }
+invalid:
+ *estr = "not valid";
+toolong:
+ *estr = "too long";
+ return -1;
+}
+
+/*
+ * Check that the optional printf format in description matches
+ * the type of the magic.
+ */
+private int
+check_format(struct magic_set *ms, struct magic *m)
+{
+ char *ptr;
+ const char *estr;
+
+ for (ptr = m->desc; *ptr; ptr++)
+ if (*ptr == '%')
+ break;
+ if (*ptr == '\0') {
+ /* No format string; ok */
+ return 1;
+ }
+
+ assert(file_nformats == file_nnames);
+
+ if (m->type >= file_nformats) {
+ file_magwarn(ms, "Internal error inconsistency between "
+ "m->type and format strings");
+ return -1;
+ }
+ if (file_formats[m->type] == FILE_FMT_NONE) {
+ file_magwarn(ms, "No format string for `%s' with description "
+ "`%s'", m->desc, file_names[m->type]);
+ return -1;
+ }
+
+ ptr++;
+ if (check_format_type(ptr, m->type, &estr) == -1) {
+ /*
+ * TODO: this error message is unhelpful if the format
+ * string is not one character long
+ */
+ file_magwarn(ms, "Printf format is %s for type "
+ "`%s' in description `%s'", estr,
+ file_names[m->type], m->desc);
+ return -1;
+ }
+
+ for (; *ptr; ptr++) {
+ if (*ptr == '%') {
+ file_magwarn(ms,
+ "Too many format strings (should have at most one) "
+ "for `%s' with description `%s'",
+ file_names[m->type], m->desc);
+ return -1;
+ }
+ }
+ return 0;
+}
+
+/*
+ * Read a numeric value from a pointer, into the value union of a magic
+ * pointer, according to the magic type. Update the string pointer to point
+ * just after the number read. Return 0 for success, non-zero for failure.
+ */
+private int
+getvalue(struct magic_set *ms, struct magic *m, const char **p, int action)
+{
+ switch (m->type) {
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ case FILE_STRING:
+ case FILE_PSTRING:
+ case FILE_REGEX:
+ case FILE_SEARCH:
+ case FILE_NAME:
+ case FILE_USE:
+ case FILE_DER:
+ *p = getstr(ms, m, *p, action == FILE_COMPILE);
+ if (*p == NULL) {
+ if (ms->flags & MAGIC_CHECK)
+ file_magwarn(ms, "cannot get string from `%s'",
+ m->value.s);
+ return -1;
+ }
+ if (m->type == FILE_REGEX) {
+ file_regex_t rx;
+ int rc = file_regcomp(&rx, m->value.s, REG_EXTENDED);
+ if (rc) {
+ if (ms->flags & MAGIC_CHECK)
+ file_regerror(&rx, rc, ms);
+ }
+ file_regfree(&rx);
+ return rc ? -1 : 0;
+ }
+ return 0;
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ if (m->reln != 'x') {
+ char *ep;
+ errno = 0;
+#ifdef HAVE_STRTOF
+ m->value.f = strtof(*p, &ep);
+#else
+ m->value.f = (float)strtod(*p, &ep);
+#endif
+ if (errno == 0)
+ *p = ep;
+ }
+ return 0;
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ if (m->reln != 'x') {
+ char *ep;
+ errno = 0;
+ m->value.d = strtod(*p, &ep);
+ if (errno == 0)
+ *p = ep;
+ }
+ return 0;
+ default:
+ if (m->reln != 'x') {
+ char *ep;
+ uint64_t ull;
+ errno = 0;
+ ull = (uint64_t)strtoull(*p, &ep, 0);
+ m->value.q = file_signextend(ms, m, ull);
+ if (*p == ep) {
+ file_magwarn(ms, "Unparseable number `%s'", *p);
+ } else {
+ size_t ts = typesize(m->type);
+ uint64_t x;
+ const char *q;
+
+ if (ts == (size_t)~0) {
+ file_magwarn(ms, "Expected numeric type got `%s'",
+ type_tbl[m->type].name);
+ }
+ for (q = *p; isspace((unsigned char)*q); q++)
+ continue;
+ if (*q == '-')
+ ull = -(int64_t)ull;
+ switch (ts) {
+ case 1:
+ x = ull & ~0xffULL;
+ break;
+ case 2:
+ x = ull & ~0xffffULL;
+ break;
+ case 4:
+ x = ull & ~0xffffffffULL;
+ break;
+ case 8:
+ x = 0;
+ break;
+ default:
+ abort();
+ }
+ if (x) {
+ file_magwarn(ms, "Overflow for numeric type `%s' value %#" PRIx64,
+ type_tbl[m->type].name, ull);
+ }
+ }
+ if (errno == 0) {
+ *p = ep;
+ eatsize(p);
+ }
+ }
+ return 0;
+ }
+}
+
+/*
+ * Convert a string containing C character escapes. Stop at an unescaped
+ * space or tab.
+ * Copy the converted version to "m->value.s", and the length in m->vallen.
+ * Return updated scan pointer as function result. Warn if set.
+ */
+private const char *
+getstr(struct magic_set *ms, struct magic *m, const char *s, int warn)
+{
+ const char *origs = s;
+ char *p = m->value.s;
+ size_t plen = sizeof(m->value.s);
+ char *origp = p;
+ char *pmax = p + plen - 1;
+ int c;
+ int val;
+
+ while ((c = *s++) != '\0') {
+ if (isspace((unsigned char) c))
+ break;
+ if (p >= pmax) {
+ file_error(ms, 0, "string too long: `%s'", origs);
+ return NULL;
+ }
+ if (c == '\\') {
+ switch(c = *s++) {
+
+ case '\0':
+ if (warn)
+ file_magwarn(ms, "incomplete escape");
+ s--;
+ goto out;
+
+ case '\t':
+ if (warn) {
+ file_magwarn(ms,
+ "escaped tab found, use \\t instead");
+ warn = 0; /* already did */
+ }
+ /*FALLTHROUGH*/
+ default:
+ if (warn) {
+ if (isprint((unsigned char)c)) {
+ /* Allow escaping of
+ * ``relations'' */
+ if (strchr("<>&^=!", c) == NULL
+ && (m->type != FILE_REGEX ||
+ strchr("[]().*?^$|{}", c)
+ == NULL)) {
+ file_magwarn(ms, "no "
+ "need to escape "
+ "`%c'", c);
+ }
+ } else {
+ file_magwarn(ms,
+ "unknown escape sequence: "
+ "\\%03o", c);
+ }
+ }
+ /*FALLTHROUGH*/
+ /* space, perhaps force people to use \040? */
+ case ' ':
+#if 0
+ /*
+ * Other things people escape, but shouldn't need to,
+ * so we disallow them
+ */
+ case '\'':
+ case '"':
+ case '?':
+#endif
+ /* Relations */
+ case '>':
+ case '<':
+ case '&':
+ case '^':
+ case '=':
+ case '!':
+ /* and baskslash itself */
+ case '\\':
+ *p++ = (char) c;
+ break;
+
+ case 'a':
+ *p++ = '\a';
+ break;
+
+ case 'b':
+ *p++ = '\b';
+ break;
+
+ case 'f':
+ *p++ = '\f';
+ break;
+
+ case 'n':
+ *p++ = '\n';
+ break;
+
+ case 'r':
+ *p++ = '\r';
+ break;
+
+ case 't':
+ *p++ = '\t';
+ break;
+
+ case 'v':
+ *p++ = '\v';
+ break;
+
+ /* \ and up to 3 octal digits */
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ val = c - '0';
+ c = *s++; /* try for 2 */
+ if (c >= '0' && c <= '7') {
+ val = (val << 3) | (c - '0');
+ c = *s++; /* try for 3 */
+ if (c >= '0' && c <= '7')
+ val = (val << 3) | (c-'0');
+ else
+ --s;
+ }
+ else
+ --s;
+ *p++ = (char)val;
+ break;
+
+ /* \x and up to 2 hex digits */
+ case 'x':
+ val = 'x'; /* Default if no digits */
+ c = hextoint(*s++); /* Get next char */
+ if (c >= 0) {
+ val = c;
+ c = hextoint(*s++);
+ if (c >= 0)
+ val = (val << 4) + c;
+ else
+ --s;
+ } else
+ --s;
+ *p++ = (char)val;
+ break;
+ }
+ } else
+ *p++ = (char)c;
+ }
+ --s;
+out:
+ *p = '\0';
+ m->vallen = CAST(unsigned char, (p - origp));
+ if (m->type == FILE_PSTRING)
+ m->vallen += (unsigned char)file_pstring_length_size(m);
+ return s;
+}
+
+
+/* Single hex char to int; -1 if not a hex char. */
+private int
+hextoint(int c)
+{
+ if (!isascii((unsigned char) c))
+ return -1;
+ if (isdigit((unsigned char) c))
+ return c - '0';
+ if ((c >= 'a') && (c <= 'f'))
+ return c + 10 - 'a';
+ if (( c>= 'A') && (c <= 'F'))
+ return c + 10 - 'A';
+ return -1;
+}
+
+
+/*
+ * Print a string containing C character escapes.
+ */
+protected void
+file_showstr(FILE *fp, const char *s, size_t len)
+{
+ char c;
+
+ for (;;) {
+ if (len == ~0U) {
+ c = *s++;
+ if (c == '\0')
+ break;
+ }
+ else {
+ if (len-- == 0)
+ break;
+ c = *s++;
+ }
+ if (c >= 040 && c <= 0176) /* TODO isprint && !iscntrl */
+ (void) fputc(c, fp);
+ else {
+ (void) fputc('\\', fp);
+ switch (c) {
+ case '\a':
+ (void) fputc('a', fp);
+ break;
+
+ case '\b':
+ (void) fputc('b', fp);
+ break;
+
+ case '\f':
+ (void) fputc('f', fp);
+ break;
+
+ case '\n':
+ (void) fputc('n', fp);
+ break;
+
+ case '\r':
+ (void) fputc('r', fp);
+ break;
+
+ case '\t':
+ (void) fputc('t', fp);
+ break;
+
+ case '\v':
+ (void) fputc('v', fp);
+ break;
+
+ default:
+ (void) fprintf(fp, "%.3o", c & 0377);
+ break;
+ }
+ }
+ }
+}
+
+/*
+ * eatsize(): Eat the size spec from a number [eg. 10UL]
+ */
+private void
+eatsize(const char **p)
+{
+ const char *l = *p;
+
+ if (LOWCASE(*l) == 'u')
+ l++;
+
+ switch (LOWCASE(*l)) {
+ case 'l': /* long */
+ case 's': /* short */
+ case 'h': /* short */
+ case 'b': /* char/byte */
+ case 'c': /* char/byte */
+ l++;
+ /*FALLTHROUGH*/
+ default:
+ break;
+ }
+
+ *p = l;
+}
+
+/*
+ * handle a buffer containing a compiled file.
+ */
+private struct magic_map *
+apprentice_buf(struct magic_set *ms, struct magic *buf, size_t len)
+{
+ struct magic_map *map;
+
+ if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
+ file_oomem(ms, sizeof(*map));
+ return NULL;
+ }
+ map->len = len;
+ map->p = buf;
+ map->type = MAP_TYPE_USER;
+ if (check_buffer(ms, map, "buffer") != 0) {
+ apprentice_unmap(map);
+ return NULL;
+ }
+ return map;
+}
+
+/*
+ * handle a compiled file.
+ */
+
+private struct magic_map *
+apprentice_map(struct magic_set *ms, const char *fn)
+{
+ int fd;
+ struct stat st;
+ char *dbname = NULL;
+ struct magic_map *map;
+ struct magic_map *rv = NULL;
+
+ fd = -1;
+ if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
+ file_oomem(ms, sizeof(*map));
+ goto error;
+ }
+ map->type = MAP_TYPE_USER; /* unspecified */
+
+ dbname = mkdbname(ms, fn, 0);
+ if (dbname == NULL)
+ goto error;
+
+ if ((fd = open(dbname, O_RDONLY|O_BINARY)) == -1)
+ goto error;
+
+ if (fstat(fd, &st) == -1) {
+ file_error(ms, errno, "cannot stat `%s'", dbname);
+ goto error;
+ }
+ if (st.st_size < 8 || st.st_size > MAXMAGIC_SIZE) {
+ file_error(ms, 0, "file `%s' is too %s", dbname,
+ st.st_size < 8 ? "small" : "large");
+ goto error;
+ }
+
+ map->len = (size_t)st.st_size;
+#ifdef QUICK
+ map->type = MAP_TYPE_MMAP;
+ if ((map->p = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
+ MAP_PRIVATE|MAP_FILE, fd, (off_t)0)) == MAP_FAILED) {
+ file_error(ms, errno, "cannot map `%s'", dbname);
+ goto error;
+ }
+#else
+ map->type = MAP_TYPE_MALLOC;
+ if ((map->p = CAST(void *, malloc(map->len))) == NULL) {
+ file_oomem(ms, map->len);
+ goto error;
+ }
+ if (read(fd, map->p, map->len) != (ssize_t)map->len) {
+ file_badread(ms);
+ goto error;
+ }
+#define RET 1
+#endif
+ (void)close(fd);
+ fd = -1;
+
+ if (check_buffer(ms, map, dbname) != 0) {
+ rv = (struct magic_map *)-1;
+ goto error;
+ }
+#ifdef QUICK
+ if (mprotect(map->p, (size_t)st.st_size, PROT_READ) == -1) {
+ file_error(ms, errno, "cannot mprotect `%s'", dbname);
+ goto error;
+ }
+#endif
+
+ free(dbname);
+ return map;
+
+error:
+ if (fd != -1)
+ (void)close(fd);
+ apprentice_unmap(map);
+ free(dbname);
+ return rv;
+}
+
+private int
+check_buffer(struct magic_set *ms, struct magic_map *map, const char *dbname)
+{
+ uint32_t *ptr;
+ uint32_t entries, nentries;
+ uint32_t version;
+ int i, needsbyteswap;
+
+ ptr = CAST(uint32_t *, map->p);
+ if (*ptr != MAGICNO) {
+ if (swap4(*ptr) != MAGICNO) {
+ file_error(ms, 0, "bad magic in `%s'", dbname);
+ return -1;
+ }
+ needsbyteswap = 1;
+ } else
+ needsbyteswap = 0;
+ if (needsbyteswap)
+ version = swap4(ptr[1]);
+ else
+ version = ptr[1];
+ if (version != VERSIONNO) {
+ file_error(ms, 0, "File %s supports only version %d magic "
+ "files. `%s' is version %d", VERSION,
+ VERSIONNO, dbname, version);
+ return -1;
+ }
+ entries = (uint32_t)(map->len / sizeof(struct magic));
+ if ((entries * sizeof(struct magic)) != map->len) {
+ file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not "
+ "a multiple of %" SIZE_T_FORMAT "u",
+ dbname, map->len, sizeof(struct magic));
+ return -1;
+ }
+ map->magic[0] = CAST(struct magic *, map->p) + 1;
+ nentries = 0;
+ for (i = 0; i < MAGIC_SETS; i++) {
+ if (needsbyteswap)
+ map->nmagic[i] = swap4(ptr[i + 2]);
+ else
+ map->nmagic[i] = ptr[i + 2];
+ if (i != MAGIC_SETS - 1)
+ map->magic[i + 1] = map->magic[i] + map->nmagic[i];
+ nentries += map->nmagic[i];
+ }
+ if (entries != nentries + 1) {
+ file_error(ms, 0, "Inconsistent entries in `%s' %u != %u",
+ dbname, entries, nentries + 1);
+ return -1;
+ }
+ if (needsbyteswap)
+ for (i = 0; i < MAGIC_SETS; i++)
+ byteswap(map->magic[i], map->nmagic[i]);
+ return 0;
+}
+
+/*
+ * handle an mmaped file.
+ */
+private int
+apprentice_compile(struct magic_set *ms, struct magic_map *map, const char *fn)
+{
+ static const size_t nm = sizeof(*map->nmagic) * MAGIC_SETS;
+ static const size_t m = sizeof(**map->magic);
+ int fd = -1;
+ size_t len;
+ char *dbname;
+ int rv = -1;
+ uint32_t i;
+ union {
+ struct magic m;
+ uint32_t h[2 + MAGIC_SETS];
+ } hdr;
+
+ dbname = mkdbname(ms, fn, 1);
+
+ if (dbname == NULL)
+ goto out;
+
+ if ((fd = open(dbname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644)) == -1)
+ {
+ file_error(ms, errno, "cannot open `%s'", dbname);
+ goto out;
+ }
+ memset(&hdr, 0, sizeof(hdr));
+ hdr.h[0] = MAGICNO;
+ hdr.h[1] = VERSIONNO;
+ memcpy(hdr.h + 2, map->nmagic, nm);
+
+ if (write(fd, &hdr, sizeof(hdr)) != (ssize_t)sizeof(hdr)) {
+ file_error(ms, errno, "error writing `%s'", dbname);
+ goto out;
+ }
+
+ for (i = 0; i < MAGIC_SETS; i++) {
+ len = m * map->nmagic[i];
+ if (write(fd, map->magic[i], len) != (ssize_t)len) {
+ file_error(ms, errno, "error writing `%s'", dbname);
+ goto out;
+ }
+ }
+
+ if (fd != -1)
+ (void)close(fd);
+ rv = 0;
+out:
+ apprentice_unmap(map);
+ free(dbname);
+ return rv;
+}
+
+private const char ext[] = ".mgc";
+/*
+ * make a dbname
+ */
+private char *
+mkdbname(struct magic_set *ms, const char *fn, int strip)
+{
+ const char *p, *q;
+ char *buf;
+
+ if (strip) {
+ if ((p = strrchr(fn, '/')) != NULL)
+ fn = ++p;
+ }
+
+ for (q = fn; *q; q++)
+ continue;
+ /* Look for .mgc */
+ for (p = ext + sizeof(ext) - 1; p >= ext && q >= fn; p--, q--)
+ if (*p != *q)
+ break;
+
+ /* Did not find .mgc, restore q */
+ if (p >= ext)
+ while (*q)
+ q++;
+
+ q++;
+ /* Compatibility with old code that looked in .mime */
+ if (ms->flags & MAGIC_MIME) {
+ if (asprintf(&buf, "%.*s.mime%s", (int)(q - fn), fn, ext) < 0)
+ return NULL;
+ if (access(buf, R_OK) != -1) {
+ ms->flags &= MAGIC_MIME_TYPE;
+ return buf;
+ }
+ free(buf);
+ }
+ if (asprintf(&buf, "%.*s%s", (int)(q - fn), fn, ext) < 0)
+ return NULL;
+
+ /* Compatibility with old code that looked in .mime */
+ if (strstr(fn, ".mime") != NULL)
+ ms->flags &= MAGIC_MIME_TYPE;
+ return buf;
+}
+
+/*
+ * Byteswap an mmap'ed file if needed
+ */
+private void
+byteswap(struct magic *magic, uint32_t nmagic)
+{
+ uint32_t i;
+ for (i = 0; i < nmagic; i++)
+ bs1(&magic[i]);
+}
+
+/*
+ * swap a short
+ */
+private uint16_t
+swap2(uint16_t sv)
+{
+ uint16_t rv;
+ uint8_t *s = (uint8_t *)(void *)&sv;
+ uint8_t *d = (uint8_t *)(void *)&rv;
+ d[0] = s[1];
+ d[1] = s[0];
+ return rv;
+}
+
+/*
+ * swap an int
+ */
+private uint32_t
+swap4(uint32_t sv)
+{
+ uint32_t rv;
+ uint8_t *s = (uint8_t *)(void *)&sv;
+ uint8_t *d = (uint8_t *)(void *)&rv;
+ d[0] = s[3];
+ d[1] = s[2];
+ d[2] = s[1];
+ d[3] = s[0];
+ return rv;
+}
+
+/*
+ * swap a quad
+ */
+private uint64_t
+swap8(uint64_t sv)
+{
+ uint64_t rv;
+ uint8_t *s = (uint8_t *)(void *)&sv;
+ uint8_t *d = (uint8_t *)(void *)&rv;
+#if 0
+ d[0] = s[3];
+ d[1] = s[2];
+ d[2] = s[1];
+ d[3] = s[0];
+ d[4] = s[7];
+ d[5] = s[6];
+ d[6] = s[5];
+ d[7] = s[4];
+#else
+ d[0] = s[7];
+ d[1] = s[6];
+ d[2] = s[5];
+ d[3] = s[4];
+ d[4] = s[3];
+ d[5] = s[2];
+ d[6] = s[1];
+ d[7] = s[0];
+#endif
+ return rv;
+}
+
+/*
+ * byteswap a single magic entry
+ */
+private void
+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);
+ m->lineno = swap4((uint32_t)m->lineno);
+ if (IS_STRING(m->type)) {
+ m->str_range = swap4(m->str_range);
+ m->str_flags = swap4(m->str_flags);
+ }
+ else {
+ m->value.q = swap8(m->value.q);
+ m->num_mask = swap8(m->num_mask);
+ }
+}
+
+protected size_t
+file_pstring_length_size(const struct magic *m)
+{
+ switch (m->str_flags & PSTRING_LEN) {
+ case PSTRING_1_LE:
+ return 1;
+ case PSTRING_2_LE:
+ case PSTRING_2_BE:
+ return 2;
+ case PSTRING_4_LE:
+ case PSTRING_4_BE:
+ return 4;
+ default:
+ abort(); /* Impossible */
+ return 1;
+ }
+}
+protected size_t
+file_pstring_get_length(const struct magic *m, const char *ss)
+{
+ size_t len = 0;
+ const unsigned char *s = (const unsigned char *)ss;
+ unsigned int s3, s2, s1, s0;
+
+ switch (m->str_flags & PSTRING_LEN) {
+ case PSTRING_1_LE:
+ len = *s;
+ break;
+ case PSTRING_2_LE:
+ s0 = s[0];
+ s1 = s[1];
+ len = (s1 << 8) | s0;
+ break;
+ case PSTRING_2_BE:
+ s0 = s[0];
+ s1 = s[1];
+ len = (s0 << 8) | s1;
+ break;
+ case PSTRING_4_LE:
+ s0 = s[0];
+ s1 = s[1];
+ s2 = s[2];
+ s3 = s[3];
+ len = (s3 << 24) | (s2 << 16) | (s1 << 8) | s0;
+ break;
+ case PSTRING_4_BE:
+ s0 = s[0];
+ s1 = s[1];
+ s2 = s[2];
+ s3 = s[3];
+ len = (s0 << 24) | (s1 << 16) | (s2 << 8) | s3;
+ break;
+ default:
+ abort(); /* Impossible */
+ }
+
+ if (m->str_flags & PSTRING_LENGTH_INCLUDES_ITSELF)
+ len -= file_pstring_length_size(m);
+
+ return len;
+}
+
+protected int
+file_magicfind(struct magic_set *ms, const char *name, struct mlist *v)
+{
+ uint32_t i, j;
+ struct mlist *mlist, *ml;
+
+ mlist = ms->mlist[1];
+
+ for (ml = mlist->next; ml != mlist; ml = ml->next) {
+ struct magic *ma = ml->magic;
+ uint32_t nma = ml->nmagic;
+ for (i = 0; i < nma; i++) {
+ if (ma[i].type != FILE_NAME)
+ continue;
+ if (strcmp(ma[i].value.s, name) == 0) {
+ v->magic = &ma[i];
+ for (j = i + 1; j < nma; j++)
+ if (ma[j].cont_level == 0)
+ break;
+ v->nmagic = j - i;
+ return 0;
+ }
+ }
+ }
+ return -1;
+}
Property changes on: trunk/contrib/file/src/apprentice.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/apptype.c
===================================================================
--- trunk/contrib/file/src/apptype.c (rev 0)
+++ trunk/contrib/file/src/apptype.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,169 @@
+/*
+ * Adapted from: apptype.c, Written by Eberhard Mattes and put into the
+ * public domain
+ *
+ * Notes: 1. Qualify the filename so that DosQueryAppType does not do extraneous
+ * searches.
+ *
+ * 2. DosQueryAppType will return FAPPTYP_DOS on a file ending with ".com"
+ * (other than an OS/2 exe or Win exe with this name). Eberhard Mattes
+ * remarks Tue, 6 Apr 93: Moreover, it reports the type of the (new and very
+ * bug ridden) Win Emacs as "OS/2 executable".
+ *
+ * 3. apptype() uses the filename if given, otherwise a tmp file is created with
+ * the contents of buf. If buf is not the complete file, apptype can
+ * incorrectly identify the exe type. The "-z" option of "file" is the reason
+ * for this ugly code.
+ */
+
+/*
+ * amai: Darrel Hankerson did the changes described here.
+ *
+ * It remains to check the validity of comments (2.) since it's referred to an
+ * "old" OS/2 version.
+ *
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: apptype.c,v 1.13 2011/09/07 21:57:15 christos Exp $")
+#endif /* lint */
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __EMX__
+#include <io.h>
+#define INCL_DOSSESMGR
+#define INCL_DOSERRORS
+#define INCL_DOSFILEMGR
+#include <os2.h>
+typedef ULONG APPTYPE;
+
+protected int
+file_os2_apptype(struct magic_set *ms, const char *fn, const void *buf,
+ size_t nb)
+{
+ APPTYPE rc, type;
+ char path[_MAX_PATH], drive[_MAX_DRIVE], dir[_MAX_DIR],
+ fname[_MAX_FNAME], ext[_MAX_EXT];
+ char *filename;
+ FILE *fp;
+
+ if (fn)
+ filename = strdup(fn);
+ else if ((filename = tempnam("./", "tmp")) == NULL) {
+ file_error(ms, errno, "cannot create tempnam");
+ return -1;
+ }
+ /* qualify the filename to prevent extraneous searches */
+ _splitpath(filename, drive, dir, fname, ext);
+ (void)sprintf(path, "%s%s%s%s", drive,
+ (*dir == '\0') ? "./" : dir,
+ fname,
+ (*ext == '\0') ? "." : ext);
+
+ if (fn == NULL) {
+ if ((fp = fopen(path, "wb")) == NULL) {
+ file_error(ms, errno, "cannot open tmp file `%s'", path);
+ return -1;
+ }
+ if (fwrite(buf, 1, nb, fp) != nb) {
+ file_error(ms, errno, "cannot write tmp file `%s'",
+ path);
+ (void)fclose(fp);
+ return -1;
+ }
+ (void)fclose(fp);
+ }
+ rc = DosQueryAppType((unsigned char *)path, &type);
+
+ if (fn == NULL) {
+ unlink(path);
+ free(filename);
+ }
+#if 0
+ if (rc == ERROR_INVALID_EXE_SIGNATURE)
+ printf("%s: not an executable file\n", fname);
+ else if (rc == ERROR_FILE_NOT_FOUND)
+ printf("%s: not found\n", fname);
+ else if (rc == ERROR_ACCESS_DENIED)
+ printf("%s: access denied\n", fname);
+ else if (rc != 0)
+ printf("%s: error code = %lu\n", fname, rc);
+ else
+#else
+
+ /*
+ * for our purpose here it's sufficient to just ignore the error and
+ * return w/o success (=0)
+ */
+
+ if (rc)
+ return (0);
+
+#endif
+
+ if (type & FAPPTYP_32BIT)
+ if (file_printf(ms, "32-bit ") == -1)
+ return -1;
+ if (type & FAPPTYP_PHYSDRV) {
+ if (file_printf(ms, "physical device driver") == -1)
+ return -1;
+ } else if (type & FAPPTYP_VIRTDRV) {
+ if (file_printf(ms, "virtual device driver") == -1)
+ return -1;
+ } else if (type & FAPPTYP_DLL) {
+ if (type & FAPPTYP_PROTDLL)
+ if (file_printf(ms, "protected ") == -1)
+ return -1;
+ if (file_printf(ms, "DLL") == -1)
+ return -1;
+ } else if (type & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT)) {
+ if (file_printf(ms, "Windows executable") == -1)
+ return -1;
+ } else if (type & FAPPTYP_DOS) {
+ /*
+ * The API routine is partially broken on filenames ending
+ * ".com".
+ */
+ if (stricmp(ext, ".com") == 0)
+ if (strncmp((const char *)buf, "MZ", 2))
+ return (0);
+ if (file_printf(ms, "DOS executable") == -1)
+ return -1;
+ /* ---------------------------------------- */
+ /* Might learn more from the magic(4) entry */
+ if (file_printf(ms, ", magic(4)-> ") == -1)
+ return -1;
+ return (0);
+ /* ---------------------------------------- */
+ } else if (type & FAPPTYP_BOUND) {
+ if (file_printf(ms, "bound executable") == -1)
+ return -1;
+ } else if ((type & 7) == FAPPTYP_WINDOWAPI) {
+ if (file_printf(ms, "PM executable") == -1)
+ return -1;
+ } else if (file_printf(ms, "OS/2 executable") == -1)
+ return -1;
+
+ switch (type & (FAPPTYP_NOTWINDOWCOMPAT |
+ FAPPTYP_WINDOWCOMPAT |
+ FAPPTYP_WINDOWAPI)) {
+ case FAPPTYP_NOTWINDOWCOMPAT:
+ if (file_printf(ms, " [NOTWINDOWCOMPAT]") == -1)
+ return -1;
+ break;
+ case FAPPTYP_WINDOWCOMPAT:
+ if (file_printf(ms, " [WINDOWCOMPAT]") == -1)
+ return -1;
+ break;
+ case FAPPTYP_WINDOWAPI:
+ if (file_printf(ms, " [WINDOWAPI]") == -1)
+ return -1;
+ break;
+ }
+ return 1;
+}
+#endif
Property changes on: trunk/contrib/file/src/apptype.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/ascmagic.c
===================================================================
--- trunk/contrib/file/src/ascmagic.c (rev 0)
+++ trunk/contrib/file/src/ascmagic.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,361 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * ASCII magic -- try to detect text encoding.
+ *
+ * Extensively modified by Eric Fischer <enf at pobox.com> in July, 2000,
+ * to handle character codes other than ASCII on a unified basis.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: ascmagic.c,v 1.97 2016/06/27 20:56:25 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <string.h>
+#include <memory.h>
+#include <ctype.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#define MAXLINELEN 300 /* longest sane line length */
+#define ISSPC(x) ((x) == ' ' || (x) == '\t' || (x) == '\r' || (x) == '\n' \
+ || (x) == 0x85 || (x) == '\f')
+
+private unsigned char *encode_utf8(unsigned char *, size_t, unichar *, size_t);
+private size_t trim_nuls(const unsigned char *, size_t);
+
+/*
+ * Undo the NUL-termination kindly provided by process()
+ * but leave at least one byte to look at
+ */
+private size_t
+trim_nuls(const unsigned char *buf, size_t nbytes)
+{
+ while (nbytes > 1 && buf[nbytes - 1] == '\0')
+ nbytes--;
+
+ return nbytes;
+}
+
+protected int
+file_ascmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes,
+ int text)
+{
+ unichar *ubuf = NULL;
+ size_t ulen = 0;
+ int rv = 1;
+
+ const char *code = NULL;
+ const char *code_mime = NULL;
+ const char *type = NULL;
+
+ nbytes = trim_nuls(buf, nbytes);
+
+ /* If file doesn't look like any sort of text, give up. */
+ if (file_encoding(ms, buf, nbytes, &ubuf, &ulen, &code, &code_mime,
+ &type) == 0)
+ rv = 0;
+ else
+ rv = file_ascmagic_with_encoding(ms, buf, nbytes, ubuf, ulen, code,
+ type, text);
+
+ free(ubuf);
+
+ return rv;
+}
+
+protected int
+file_ascmagic_with_encoding(struct magic_set *ms, const unsigned char *buf,
+ size_t nbytes, unichar *ubuf, size_t ulen, const char *code,
+ const char *type, int text)
+{
+ unsigned char *utf8_buf = NULL, *utf8_end;
+ size_t mlen, i;
+ int rv = -1;
+ int mime = ms->flags & MAGIC_MIME;
+
+ const char *subtype = NULL;
+ const char *subtype_mime = NULL;
+
+ int has_escapes = 0;
+ int has_backspace = 0;
+ int seen_cr = 0;
+
+ int n_crlf = 0;
+ int n_lf = 0;
+ int n_cr = 0;
+ int n_nel = 0;
+ int executable = 0;
+
+ size_t last_line_end = (size_t)-1;
+ int has_long_lines = 0;
+
+ nbytes = trim_nuls(buf, nbytes);
+
+ /* If we have fewer than 2 bytes, give up. */
+ if (nbytes <= 1) {
+ rv = 0;
+ goto done;
+ }
+
+ if (ulen > 0 && (ms->flags & MAGIC_NO_CHECK_SOFT) == 0) {
+ /* Convert ubuf to UTF-8 and try text soft magic */
+ /* malloc size is a conservative overestimate; could be
+ improved, or at least realloced after conversion. */
+ mlen = ulen * 6;
+ if ((utf8_buf = CAST(unsigned char *, malloc(mlen))) == NULL) {
+ file_oomem(ms, mlen);
+ goto done;
+ }
+ if ((utf8_end = encode_utf8(utf8_buf, mlen, ubuf, ulen))
+ == NULL)
+ goto done;
+ if ((rv = file_softmagic(ms, utf8_buf,
+ (size_t)(utf8_end - utf8_buf), NULL, NULL,
+ TEXTTEST, text)) == 0)
+ rv = -1;
+ if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))) {
+ rv = rv == -1 ? 0 : 1;
+ goto done;
+ }
+ }
+ if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)))
+ return 0;
+
+ /* Now try to discover other details about the file. */
+ for (i = 0; i < ulen; i++) {
+ if (ubuf[i] == '\n') {
+ if (seen_cr)
+ n_crlf++;
+ else
+ n_lf++;
+ last_line_end = i;
+ } else if (seen_cr)
+ n_cr++;
+
+ seen_cr = (ubuf[i] == '\r');
+ if (seen_cr)
+ last_line_end = i;
+
+ if (ubuf[i] == 0x85) { /* X3.64/ECMA-43 "next line" character */
+ n_nel++;
+ last_line_end = i;
+ }
+
+ /* If this line is _longer_ than MAXLINELEN, remember it. */
+ if (i > last_line_end + MAXLINELEN)
+ has_long_lines = 1;
+
+ if (ubuf[i] == '\033')
+ has_escapes = 1;
+ if (ubuf[i] == '\b')
+ has_backspace = 1;
+ }
+
+ /* Beware, if the data has been truncated, the final CR could have
+ been followed by a LF. If we have ms->bytes_max bytes, it indicates
+ that the data might have been truncated, probably even before
+ this function was called. */
+ if (seen_cr && nbytes < ms->bytes_max)
+ n_cr++;
+
+ if (strcmp(type, "binary") == 0) {
+ rv = 0;
+ goto done;
+ }
+ if (mime) {
+ if (!file_printedlen(ms) && (mime & MAGIC_MIME_TYPE) != 0) {
+ if (subtype_mime) {
+ if (file_printf(ms, "%s", subtype_mime) == -1)
+ goto done;
+ } else {
+ if (file_printf(ms, "text/plain") == -1)
+ goto done;
+ }
+ }
+ } else {
+ if (file_printedlen(ms)) {
+ switch (file_replace(ms, " text$", ", ")) {
+ case 0:
+ switch (file_replace(ms, " text executable$",
+ ", ")) {
+ case 0:
+ if (file_printf(ms, ", ") == -1)
+ goto done;
+ break;
+ case -1:
+ goto done;
+ default:
+ executable = 1;
+ break;
+ }
+ break;
+ case -1:
+ goto done;
+ default:
+ break;
+ }
+ }
+
+ if (file_printf(ms, "%s", code) == -1)
+ goto done;
+
+ if (subtype) {
+ if (file_printf(ms, " %s", subtype) == -1)
+ goto done;
+ }
+
+ if (file_printf(ms, " %s", type) == -1)
+ goto done;
+
+ if (executable)
+ if (file_printf(ms, " executable") == -1)
+ goto done;
+
+ if (has_long_lines)
+ if (file_printf(ms, ", with very long lines") == -1)
+ goto done;
+
+ /*
+ * Only report line terminators if we find one other than LF,
+ * or if we find none at all.
+ */
+ if ((n_crlf == 0 && n_cr == 0 && n_nel == 0 && n_lf == 0) ||
+ (n_crlf != 0 || n_cr != 0 || n_nel != 0)) {
+ if (file_printf(ms, ", with") == -1)
+ goto done;
+
+ if (n_crlf == 0 && n_cr == 0 && n_nel == 0 && n_lf == 0) {
+ if (file_printf(ms, " no") == -1)
+ goto done;
+ } else {
+ if (n_crlf) {
+ if (file_printf(ms, " CRLF") == -1)
+ goto done;
+ if (n_cr || n_lf || n_nel)
+ if (file_printf(ms, ",") == -1)
+ goto done;
+ }
+ if (n_cr) {
+ if (file_printf(ms, " CR") == -1)
+ goto done;
+ if (n_lf || n_nel)
+ if (file_printf(ms, ",") == -1)
+ goto done;
+ }
+ if (n_lf) {
+ if (file_printf(ms, " LF") == -1)
+ goto done;
+ if (n_nel)
+ if (file_printf(ms, ",") == -1)
+ goto done;
+ }
+ if (n_nel)
+ if (file_printf(ms, " NEL") == -1)
+ goto done;
+ }
+
+ if (file_printf(ms, " line terminators") == -1)
+ goto done;
+ }
+
+ if (has_escapes)
+ if (file_printf(ms, ", with escape sequences") == -1)
+ goto done;
+ if (has_backspace)
+ if (file_printf(ms, ", with overstriking") == -1)
+ goto done;
+ }
+ rv = 1;
+done:
+ free(utf8_buf);
+
+ return rv;
+}
+
+/*
+ * Encode Unicode string as UTF-8, returning pointer to character
+ * after end of string, or NULL if an invalid character is found.
+ */
+private unsigned char *
+encode_utf8(unsigned char *buf, size_t len, unichar *ubuf, size_t ulen)
+{
+ size_t i;
+ unsigned char *end = buf + len;
+
+ for (i = 0; i < ulen; i++) {
+ if (ubuf[i] <= 0x7f) {
+ if (end - buf < 1)
+ return NULL;
+ *buf++ = (unsigned char)ubuf[i];
+ } else if (ubuf[i] <= 0x7ff) {
+ if (end - buf < 2)
+ return NULL;
+ *buf++ = (unsigned char)((ubuf[i] >> 6) + 0xc0);
+ *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
+ } else if (ubuf[i] <= 0xffff) {
+ if (end - buf < 3)
+ return NULL;
+ *buf++ = (unsigned char)((ubuf[i] >> 12) + 0xe0);
+ *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
+ } else if (ubuf[i] <= 0x1fffff) {
+ if (end - buf < 4)
+ return NULL;
+ *buf++ = (unsigned char)((ubuf[i] >> 18) + 0xf0);
+ *buf++ = (unsigned char)(((ubuf[i] >> 12) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
+ } else if (ubuf[i] <= 0x3ffffff) {
+ if (end - buf < 5)
+ return NULL;
+ *buf++ = (unsigned char)((ubuf[i] >> 24) + 0xf8);
+ *buf++ = (unsigned char)(((ubuf[i] >> 18) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)(((ubuf[i] >> 12) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
+ } else if (ubuf[i] <= 0x7fffffff) {
+ if (end - buf < 6)
+ return NULL;
+ *buf++ = (unsigned char)((ubuf[i] >> 30) + 0xfc);
+ *buf++ = (unsigned char)(((ubuf[i] >> 24) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)(((ubuf[i] >> 18) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)(((ubuf[i] >> 12) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)(((ubuf[i] >> 6) & 0x3f) + 0x80);
+ *buf++ = (unsigned char)((ubuf[i] & 0x3f) + 0x80);
+ } else /* Invalid character */
+ return NULL;
+ }
+
+ return buf;
+}
Property changes on: trunk/contrib/file/src/ascmagic.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/asctime_r.c
===================================================================
--- trunk/contrib/file/src/asctime_r.c (rev 0)
+++ trunk/contrib/file/src/asctime_r.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,19 @@
+/* $File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $ */
+
+#include "file.h"
+#ifndef lint
+FILE_RCSID("@(#)$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $")
+#endif /* lint */
+#include <time.h>
+#include <string.h>
+
+/* asctime_r is not thread-safe anyway */
+char *
+asctime_r(const struct tm *t, char *dst)
+{
+ char *p = asctime(t);
+ if (p == NULL)
+ return NULL;
+ memcpy(dst, p, 26);
+ return dst;
+}
Property changes on: trunk/contrib/file/src/asctime_r.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/asprintf.c
===================================================================
--- trunk/contrib/file/src/asprintf.c (rev 0)
+++ trunk/contrib/file/src/asprintf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: asprintf.c,v 1.4 2010/07/21 16:47:17 christos Exp $")
+#endif
+
+int asprintf(char **ptr, const char *fmt, ...)
+{
+ va_list vargs;
+ int retval;
+
+ va_start(vargs, fmt);
+ retval = vasprintf(ptr, fmt, vargs);
+ va_end(vargs);
+
+ return retval;
+}
Property changes on: trunk/contrib/file/src/asprintf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/cdf.c
===================================================================
--- trunk/contrib/file/src/cdf.c (rev 0)
+++ trunk/contrib/file/src/cdf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,1628 @@
+/*-
+ * Copyright (c) 2008 Christos Zoulas
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * Parse Composite Document Files, the format used in Microsoft Office
+ * document files before they switched to zipped XML.
+ * Info from: http://sc.openoffice.org/compdocfileformat.pdf
+ *
+ * N.B. This is the "Composite Document File" format, and not the
+ * "Compound Document Format", nor the "Channel Definition Format".
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: cdf.c,v 1.106 2017/04/30 17:05:02 christos Exp $")
+#endif
+
+#include <assert.h>
+#ifdef CDF_DEBUG
+#include <err.h>
+#endif
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+#include <ctype.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifndef EFTYPE
+#define EFTYPE EINVAL
+#endif
+
+#include "cdf.h"
+
+#ifdef CDF_DEBUG
+#define DPRINTF(a) printf a, fflush(stdout)
+#else
+#define DPRINTF(a)
+#endif
+
+static union {
+ char s[4];
+ uint32_t u;
+} cdf_bo;
+
+#define NEED_SWAP (cdf_bo.u == (uint32_t)0x01020304)
+
+#define CDF_TOLE8(x) ((uint64_t)(NEED_SWAP ? _cdf_tole8(x) : (uint64_t)(x)))
+#define CDF_TOLE4(x) ((uint32_t)(NEED_SWAP ? _cdf_tole4(x) : (uint32_t)(x)))
+#define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? _cdf_tole2(x) : (uint16_t)(x)))
+#define CDF_TOLE(x) (/*CONSTCOND*/sizeof(x) == 2 ? \
+ CDF_TOLE2(CAST(uint16_t, x)) : \
+ (/*CONSTCOND*/sizeof(x) == 4 ? \
+ CDF_TOLE4(CAST(uint32_t, x)) : \
+ CDF_TOLE8(CAST(uint64_t, x))))
+#define CDF_GETUINT32(x, y) cdf_getuint32(x, y)
+
+#define CDF_MALLOC(n) cdf_malloc(__FILE__, __LINE__, (n))
+#define CDF_REALLOC(p, n) cdf_realloc(__FILE__, __LINE__, (p), (n))
+#define CDF_CALLOC(n, u) cdf_calloc(__FILE__, __LINE__, (n), (u))
+
+
+static void *
+cdf_malloc(const char *file __attribute__((__unused__)),
+ size_t line __attribute__((__unused__)), size_t n)
+{
+ DPRINTF(("%s,%zu: %s %zu\n", file, line, __func__, n));
+ return malloc(n);
+}
+
+static void *
+cdf_realloc(const char *file __attribute__((__unused__)),
+ size_t line __attribute__((__unused__)), void *p, size_t n)
+{
+ DPRINTF(("%s,%zu: %s %zu\n", file, line, __func__, n));
+ return realloc(p, n);
+}
+
+static void *
+cdf_calloc(const char *file __attribute__((__unused__)),
+ size_t line __attribute__((__unused__)), size_t n, size_t u)
+{
+ DPRINTF(("%s,%zu: %s %zu %zu\n", file, line, __func__, n, u));
+ return calloc(n, u);
+}
+
+/*
+ * swap a short
+ */
+static uint16_t
+_cdf_tole2(uint16_t sv)
+{
+ uint16_t rv;
+ uint8_t *s = (uint8_t *)(void *)&sv;
+ uint8_t *d = (uint8_t *)(void *)&rv;
+ d[0] = s[1];
+ d[1] = s[0];
+ return rv;
+}
+
+/*
+ * swap an int
+ */
+static uint32_t
+_cdf_tole4(uint32_t sv)
+{
+ uint32_t rv;
+ uint8_t *s = (uint8_t *)(void *)&sv;
+ uint8_t *d = (uint8_t *)(void *)&rv;
+ d[0] = s[3];
+ d[1] = s[2];
+ d[2] = s[1];
+ d[3] = s[0];
+ return rv;
+}
+
+/*
+ * swap a quad
+ */
+static uint64_t
+_cdf_tole8(uint64_t sv)
+{
+ uint64_t rv;
+ uint8_t *s = (uint8_t *)(void *)&sv;
+ uint8_t *d = (uint8_t *)(void *)&rv;
+ d[0] = s[7];
+ d[1] = s[6];
+ d[2] = s[5];
+ d[3] = s[4];
+ d[4] = s[3];
+ d[5] = s[2];
+ d[6] = s[1];
+ d[7] = s[0];
+ return rv;
+}
+
+/*
+ * grab a uint32_t from a possibly unaligned address, and return it in
+ * the native host order.
+ */
+static uint32_t
+cdf_getuint32(const uint8_t *p, size_t offs)
+{
+ uint32_t rv;
+ (void)memcpy(&rv, p + offs * sizeof(uint32_t), sizeof(rv));
+ return CDF_TOLE4(rv);
+}
+
+#define CDF_UNPACK(a) \
+ (void)memcpy(&(a), &buf[len], sizeof(a)), len += sizeof(a)
+#define CDF_UNPACKA(a) \
+ (void)memcpy((a), &buf[len], sizeof(a)), len += sizeof(a)
+
+uint16_t
+cdf_tole2(uint16_t sv)
+{
+ return CDF_TOLE2(sv);
+}
+
+uint32_t
+cdf_tole4(uint32_t sv)
+{
+ return CDF_TOLE4(sv);
+}
+
+uint64_t
+cdf_tole8(uint64_t sv)
+{
+ return CDF_TOLE8(sv);
+}
+
+void
+cdf_swap_header(cdf_header_t *h)
+{
+ size_t i;
+
+ h->h_magic = CDF_TOLE8(h->h_magic);
+ h->h_uuid[0] = CDF_TOLE8(h->h_uuid[0]);
+ h->h_uuid[1] = CDF_TOLE8(h->h_uuid[1]);
+ h->h_revision = CDF_TOLE2(h->h_revision);
+ h->h_version = CDF_TOLE2(h->h_version);
+ h->h_byte_order = CDF_TOLE2(h->h_byte_order);
+ h->h_sec_size_p2 = CDF_TOLE2(h->h_sec_size_p2);
+ h->h_short_sec_size_p2 = CDF_TOLE2(h->h_short_sec_size_p2);
+ h->h_num_sectors_in_sat = CDF_TOLE4(h->h_num_sectors_in_sat);
+ h->h_secid_first_directory = CDF_TOLE4(h->h_secid_first_directory);
+ h->h_min_size_standard_stream =
+ CDF_TOLE4(h->h_min_size_standard_stream);
+ h->h_secid_first_sector_in_short_sat =
+ CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_short_sat);
+ h->h_num_sectors_in_short_sat =
+ CDF_TOLE4(h->h_num_sectors_in_short_sat);
+ h->h_secid_first_sector_in_master_sat =
+ CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_master_sat);
+ h->h_num_sectors_in_master_sat =
+ CDF_TOLE4(h->h_num_sectors_in_master_sat);
+ for (i = 0; i < __arraycount(h->h_master_sat); i++)
+ h->h_master_sat[i] = CDF_TOLE4((uint32_t)h->h_master_sat[i]);
+}
+
+void
+cdf_unpack_header(cdf_header_t *h, char *buf)
+{
+ size_t i;
+ size_t len = 0;
+
+ CDF_UNPACK(h->h_magic);
+ CDF_UNPACKA(h->h_uuid);
+ CDF_UNPACK(h->h_revision);
+ CDF_UNPACK(h->h_version);
+ CDF_UNPACK(h->h_byte_order);
+ CDF_UNPACK(h->h_sec_size_p2);
+ CDF_UNPACK(h->h_short_sec_size_p2);
+ CDF_UNPACKA(h->h_unused0);
+ CDF_UNPACK(h->h_num_sectors_in_sat);
+ CDF_UNPACK(h->h_secid_first_directory);
+ CDF_UNPACKA(h->h_unused1);
+ CDF_UNPACK(h->h_min_size_standard_stream);
+ CDF_UNPACK(h->h_secid_first_sector_in_short_sat);
+ CDF_UNPACK(h->h_num_sectors_in_short_sat);
+ CDF_UNPACK(h->h_secid_first_sector_in_master_sat);
+ CDF_UNPACK(h->h_num_sectors_in_master_sat);
+ for (i = 0; i < __arraycount(h->h_master_sat); i++)
+ CDF_UNPACK(h->h_master_sat[i]);
+}
+
+void
+cdf_swap_dir(cdf_directory_t *d)
+{
+ d->d_namelen = CDF_TOLE2(d->d_namelen);
+ d->d_left_child = CDF_TOLE4((uint32_t)d->d_left_child);
+ d->d_right_child = CDF_TOLE4((uint32_t)d->d_right_child);
+ d->d_storage = CDF_TOLE4((uint32_t)d->d_storage);
+ d->d_storage_uuid[0] = CDF_TOLE8(d->d_storage_uuid[0]);
+ d->d_storage_uuid[1] = CDF_TOLE8(d->d_storage_uuid[1]);
+ d->d_flags = CDF_TOLE4(d->d_flags);
+ d->d_created = CDF_TOLE8((uint64_t)d->d_created);
+ d->d_modified = CDF_TOLE8((uint64_t)d->d_modified);
+ d->d_stream_first_sector = CDF_TOLE4((uint32_t)d->d_stream_first_sector);
+ d->d_size = CDF_TOLE4(d->d_size);
+}
+
+void
+cdf_swap_class(cdf_classid_t *d)
+{
+ d->cl_dword = CDF_TOLE4(d->cl_dword);
+ d->cl_word[0] = CDF_TOLE2(d->cl_word[0]);
+ d->cl_word[1] = CDF_TOLE2(d->cl_word[1]);
+}
+
+void
+cdf_unpack_dir(cdf_directory_t *d, char *buf)
+{
+ size_t len = 0;
+
+ CDF_UNPACKA(d->d_name);
+ CDF_UNPACK(d->d_namelen);
+ CDF_UNPACK(d->d_type);
+ CDF_UNPACK(d->d_color);
+ CDF_UNPACK(d->d_left_child);
+ CDF_UNPACK(d->d_right_child);
+ CDF_UNPACK(d->d_storage);
+ CDF_UNPACKA(d->d_storage_uuid);
+ CDF_UNPACK(d->d_flags);
+ CDF_UNPACK(d->d_created);
+ CDF_UNPACK(d->d_modified);
+ CDF_UNPACK(d->d_stream_first_sector);
+ CDF_UNPACK(d->d_size);
+ CDF_UNPACK(d->d_unused0);
+}
+
+int
+cdf_zero_stream(cdf_stream_t *scn)
+{
+ scn->sst_len = 0;
+ scn->sst_dirlen = 0;
+ scn->sst_ss = 0;
+ free(scn->sst_tab);
+ scn->sst_tab = NULL;
+ return -1;
+}
+
+static size_t
+cdf_check_stream(const cdf_stream_t *sst, const cdf_header_t *h)
+{
+ size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
+ CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
+ assert(ss == sst->sst_ss);
+ return sst->sst_ss;
+}
+
+static int
+cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h,
+ const void *p, size_t tail, int line)
+{
+ const char *b = (const char *)sst->sst_tab;
+ const char *e = ((const char *)p) + tail;
+ size_t ss = cdf_check_stream(sst, h);
+ /*LINTED*/(void)&line;
+ if (e >= b && (size_t)(e - b) <= ss * sst->sst_len)
+ return 0;
+ DPRINTF(("%d: offset begin %p < end %p || %" SIZE_T_FORMAT "u"
+ " > %" SIZE_T_FORMAT "u [%" SIZE_T_FORMAT "u %"
+ SIZE_T_FORMAT "u]\n", line, b, e, (size_t)(e - b),
+ ss * sst->sst_len, ss, sst->sst_len));
+ errno = EFTYPE;
+ return -1;
+}
+
+static ssize_t
+cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len)
+{
+ size_t siz = (size_t)off + len;
+
+ if ((off_t)(off + len) != (off_t)siz)
+ goto out;
+
+ if (info->i_buf != NULL && info->i_len >= siz) {
+ (void)memcpy(buf, &info->i_buf[off], len);
+ return (ssize_t)len;
+ }
+
+ if (info->i_fd == -1)
+ goto out;
+
+ if (pread(info->i_fd, buf, len, off) != (ssize_t)len)
+ return -1;
+
+ return (ssize_t)len;
+out:
+ errno = EINVAL;
+ return -1;
+}
+
+int
+cdf_read_header(const cdf_info_t *info, cdf_header_t *h)
+{
+ char buf[512];
+
+ (void)memcpy(cdf_bo.s, "\01\02\03\04", 4);
+ if (cdf_read(info, (off_t)0, buf, sizeof(buf)) == -1)
+ return -1;
+ cdf_unpack_header(h, buf);
+ cdf_swap_header(h);
+ if (h->h_magic != CDF_MAGIC) {
+ DPRINTF(("Bad magic %#" INT64_T_FORMAT "x != %#"
+ INT64_T_FORMAT "x\n",
+ (unsigned long long)h->h_magic,
+ (unsigned long long)CDF_MAGIC));
+ goto out;
+ }
+ if (h->h_sec_size_p2 > 20) {
+ DPRINTF(("Bad sector size %hu\n", h->h_sec_size_p2));
+ goto out;
+ }
+ if (h->h_short_sec_size_p2 > 20) {
+ DPRINTF(("Bad short sector size %hu\n",
+ h->h_short_sec_size_p2));
+ goto out;
+ }
+ return 0;
+out:
+ errno = EFTYPE;
+ return -1;
+}
+
+
+ssize_t
+cdf_read_sector(const cdf_info_t *info, void *buf, size_t offs, size_t len,
+ const cdf_header_t *h, cdf_secid_t id)
+{
+ size_t ss = CDF_SEC_SIZE(h);
+ size_t pos = CDF_SEC_POS(h, id);
+ assert(ss == len);
+ return cdf_read(info, (off_t)pos, ((char *)buf) + offs, len);
+}
+
+ssize_t
+cdf_read_short_sector(const cdf_stream_t *sst, void *buf, size_t offs,
+ size_t len, const cdf_header_t *h, cdf_secid_t id)
+{
+ size_t ss = CDF_SHORT_SEC_SIZE(h);
+ size_t pos = CDF_SHORT_SEC_POS(h, id);
+ assert(ss == len);
+ if (pos + len > CDF_SEC_SIZE(h) * sst->sst_len) {
+ DPRINTF(("Out of bounds read %" SIZE_T_FORMAT "u > %"
+ SIZE_T_FORMAT "u\n",
+ pos + len, CDF_SEC_SIZE(h) * sst->sst_len));
+ goto out;
+ }
+ (void)memcpy(((char *)buf) + offs,
+ ((const char *)sst->sst_tab) + pos, len);
+ return len;
+out:
+ errno = EFTYPE;
+ return -1;
+}
+
+/*
+ * Read the sector allocation table.
+ */
+int
+cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat)
+{
+ size_t i, j, k;
+ size_t ss = CDF_SEC_SIZE(h);
+ cdf_secid_t *msa, mid, sec;
+ size_t nsatpersec = (ss / sizeof(mid)) - 1;
+
+ for (i = 0; i < __arraycount(h->h_master_sat); i++)
+ if (h->h_master_sat[i] == CDF_SECID_FREE)
+ break;
+
+#define CDF_SEC_LIMIT (UINT32_MAX / (8 * ss))
+ if ((nsatpersec > 0 &&
+ h->h_num_sectors_in_master_sat > CDF_SEC_LIMIT / nsatpersec) ||
+ i > CDF_SEC_LIMIT) {
+ DPRINTF(("Number of sectors in master SAT too big %u %"
+ SIZE_T_FORMAT "u\n", h->h_num_sectors_in_master_sat, i));
+ errno = EFTYPE;
+ return -1;
+ }
+
+ sat->sat_len = h->h_num_sectors_in_master_sat * nsatpersec + i;
+ DPRINTF(("sat_len = %" SIZE_T_FORMAT "u ss = %" SIZE_T_FORMAT "u\n",
+ sat->sat_len, ss));
+ if ((sat->sat_tab = CAST(cdf_secid_t *, CDF_CALLOC(sat->sat_len, ss)))
+ == NULL)
+ return -1;
+
+ for (i = 0; i < __arraycount(h->h_master_sat); i++) {
+ if (h->h_master_sat[i] < 0)
+ break;
+ if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h,
+ h->h_master_sat[i]) != (ssize_t)ss) {
+ DPRINTF(("Reading sector %d", h->h_master_sat[i]));
+ goto out1;
+ }
+ }
+
+ if ((msa = CAST(cdf_secid_t *, CDF_CALLOC(1, ss))) == NULL)
+ goto out1;
+
+ mid = h->h_secid_first_sector_in_master_sat;
+ for (j = 0; j < h->h_num_sectors_in_master_sat; j++) {
+ if (mid < 0)
+ goto out;
+ if (j >= CDF_LOOP_LIMIT) {
+ DPRINTF(("Reading master sector loop limit"));
+ goto out3;
+ }
+ if (cdf_read_sector(info, msa, 0, ss, h, mid) != (ssize_t)ss) {
+ DPRINTF(("Reading master sector %d", mid));
+ goto out2;
+ }
+ for (k = 0; k < nsatpersec; k++, i++) {
+ sec = CDF_TOLE4((uint32_t)msa[k]);
+ if (sec < 0)
+ goto out;
+ if (i >= sat->sat_len) {
+ DPRINTF(("Out of bounds reading MSA %" SIZE_T_FORMAT
+ "u >= %" SIZE_T_FORMAT "u", i, sat->sat_len));
+ goto out3;
+ }
+ if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h,
+ sec) != (ssize_t)ss) {
+ DPRINTF(("Reading sector %d",
+ CDF_TOLE4(msa[k])));
+ goto out2;
+ }
+ }
+ mid = CDF_TOLE4((uint32_t)msa[nsatpersec]);
+ }
+out:
+ sat->sat_len = i;
+ free(msa);
+ return 0;
+out3:
+ errno = EFTYPE;
+out2:
+ free(msa);
+out1:
+ free(sat->sat_tab);
+ return -1;
+}
+
+size_t
+cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size)
+{
+ size_t i, j;
+ cdf_secid_t maxsector = (cdf_secid_t)((sat->sat_len * size)
+ / sizeof(maxsector));
+
+ DPRINTF(("Chain:"));
+ if (sid == CDF_SECID_END_OF_CHAIN) {
+ /* 0-length chain. */
+ DPRINTF((" empty\n"));
+ return 0;
+ }
+
+ for (j = i = 0; sid >= 0; i++, j++) {
+ DPRINTF((" %d", sid));
+ if (j >= CDF_LOOP_LIMIT) {
+ DPRINTF(("Counting chain loop limit"));
+ goto out;
+ }
+ if (sid >= maxsector) {
+ DPRINTF(("Sector %d >= %d\n", sid, maxsector));
+ goto out;
+ }
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
+ }
+ if (i == 0) {
+ DPRINTF((" none, sid: %d\n", sid));
+ goto out;
+
+ }
+ DPRINTF(("\n"));
+ return i;
+out:
+ errno = EFTYPE;
+ return (size_t)-1;
+}
+
+int
+cdf_read_long_sector_chain(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, cdf_secid_t sid, size_t len, cdf_stream_t *scn)
+{
+ size_t ss = CDF_SEC_SIZE(h), i, j;
+ ssize_t nr;
+ scn->sst_tab = NULL;
+ scn->sst_len = cdf_count_chain(sat, sid, ss);
+ scn->sst_dirlen = MAX(h->h_min_size_standard_stream, len);
+ scn->sst_ss = ss;
+
+ if (sid == CDF_SECID_END_OF_CHAIN || len == 0)
+ return cdf_zero_stream(scn);
+
+ if (scn->sst_len == (size_t)-1)
+ goto out;
+
+ scn->sst_tab = CDF_CALLOC(scn->sst_len, ss);
+ if (scn->sst_tab == NULL)
+ return cdf_zero_stream(scn);
+
+ for (j = i = 0; sid >= 0; i++, j++) {
+ if (j >= CDF_LOOP_LIMIT) {
+ DPRINTF(("Read long sector chain loop limit"));
+ goto out;
+ }
+ if (i >= scn->sst_len) {
+ DPRINTF(("Out of bounds reading long sector chain "
+ "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i,
+ scn->sst_len));
+ goto out;
+ }
+ if ((nr = cdf_read_sector(info, scn->sst_tab, i * ss, ss, h,
+ sid)) != (ssize_t)ss) {
+ if (i == scn->sst_len - 1 && nr > 0) {
+ /* Last sector might be truncated */
+ return 0;
+ }
+ DPRINTF(("Reading long sector chain %d", sid));
+ goto out;
+ }
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
+ }
+ return 0;
+out:
+ errno = EFTYPE;
+ return cdf_zero_stream(scn);
+}
+
+int
+cdf_read_short_sector_chain(const cdf_header_t *h,
+ const cdf_sat_t *ssat, const cdf_stream_t *sst,
+ cdf_secid_t sid, size_t len, cdf_stream_t *scn)
+{
+ size_t ss = CDF_SHORT_SEC_SIZE(h), i, j;
+ scn->sst_tab = NULL;
+ scn->sst_len = cdf_count_chain(ssat, sid, CDF_SEC_SIZE(h));
+ scn->sst_dirlen = len;
+ scn->sst_ss = ss;
+
+ if (scn->sst_len == (size_t)-1)
+ goto out;
+
+ scn->sst_tab = CDF_CALLOC(scn->sst_len, ss);
+ if (scn->sst_tab == NULL)
+ return cdf_zero_stream(scn);
+
+ for (j = i = 0; sid >= 0; i++, j++) {
+ if (j >= CDF_LOOP_LIMIT) {
+ DPRINTF(("Read short sector chain loop limit"));
+ goto out;
+ }
+ if (i >= scn->sst_len) {
+ DPRINTF(("Out of bounds reading short sector chain "
+ "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n",
+ i, scn->sst_len));
+ goto out;
+ }
+ if (cdf_read_short_sector(sst, scn->sst_tab, i * ss, ss, h,
+ sid) != (ssize_t)ss) {
+ DPRINTF(("Reading short sector chain %d", sid));
+ goto out;
+ }
+ sid = CDF_TOLE4((uint32_t)ssat->sat_tab[sid]);
+ }
+ return 0;
+out:
+ errno = EFTYPE;
+ return cdf_zero_stream(scn);
+}
+
+int
+cdf_read_sector_chain(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst,
+ cdf_secid_t sid, size_t len, cdf_stream_t *scn)
+{
+
+ if (len < h->h_min_size_standard_stream && sst->sst_tab != NULL)
+ return cdf_read_short_sector_chain(h, ssat, sst, sid, len,
+ scn);
+ else
+ return cdf_read_long_sector_chain(info, h, sat, sid, len, scn);
+}
+
+int
+cdf_read_dir(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, cdf_dir_t *dir)
+{
+ size_t i, j;
+ size_t ss = CDF_SEC_SIZE(h), ns, nd;
+ char *buf;
+ cdf_secid_t sid = h->h_secid_first_directory;
+
+ ns = cdf_count_chain(sat, sid, ss);
+ if (ns == (size_t)-1)
+ return -1;
+
+ nd = ss / CDF_DIRECTORY_SIZE;
+
+ dir->dir_len = ns * nd;
+ dir->dir_tab = CAST(cdf_directory_t *,
+ CDF_CALLOC(dir->dir_len, sizeof(dir->dir_tab[0])));
+ if (dir->dir_tab == NULL)
+ return -1;
+
+ if ((buf = CAST(char *, CDF_MALLOC(ss))) == NULL) {
+ free(dir->dir_tab);
+ return -1;
+ }
+
+ for (j = i = 0; i < ns; i++, j++) {
+ if (j >= CDF_LOOP_LIMIT) {
+ DPRINTF(("Read dir loop limit"));
+ goto out;
+ }
+ if (cdf_read_sector(info, buf, 0, ss, h, sid) != (ssize_t)ss) {
+ DPRINTF(("Reading directory sector %d", sid));
+ goto out;
+ }
+ for (j = 0; j < nd; j++) {
+ cdf_unpack_dir(&dir->dir_tab[i * nd + j],
+ &buf[j * CDF_DIRECTORY_SIZE]);
+ }
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
+ }
+ if (NEED_SWAP)
+ for (i = 0; i < dir->dir_len; i++)
+ cdf_swap_dir(&dir->dir_tab[i]);
+ free(buf);
+ return 0;
+out:
+ free(dir->dir_tab);
+ free(buf);
+ errno = EFTYPE;
+ return -1;
+}
+
+
+int
+cdf_read_ssat(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, cdf_sat_t *ssat)
+{
+ size_t i, j;
+ size_t ss = CDF_SEC_SIZE(h);
+ cdf_secid_t sid = h->h_secid_first_sector_in_short_sat;
+
+ ssat->sat_tab = NULL;
+ ssat->sat_len = cdf_count_chain(sat, sid, ss);
+ if (ssat->sat_len == (size_t)-1)
+ goto out;
+
+ ssat->sat_tab = CAST(cdf_secid_t *, CDF_CALLOC(ssat->sat_len, ss));
+ if (ssat->sat_tab == NULL)
+ goto out1;
+
+ for (j = i = 0; sid >= 0; i++, j++) {
+ if (j >= CDF_LOOP_LIMIT) {
+ DPRINTF(("Read short sat sector loop limit"));
+ goto out;
+ }
+ if (i >= ssat->sat_len) {
+ DPRINTF(("Out of bounds reading short sector chain "
+ "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i,
+ ssat->sat_len));
+ goto out;
+ }
+ if (cdf_read_sector(info, ssat->sat_tab, i * ss, ss, h, sid) !=
+ (ssize_t)ss) {
+ DPRINTF(("Reading short sat sector %d", sid));
+ goto out1;
+ }
+ sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
+ }
+ return 0;
+out:
+ errno = EFTYPE;
+out1:
+ free(ssat->sat_tab);
+ return -1;
+}
+
+int
+cdf_read_short_stream(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, const cdf_dir_t *dir, cdf_stream_t *scn,
+ const cdf_directory_t **root)
+{
+ size_t i;
+ const cdf_directory_t *d;
+
+ *root = NULL;
+ for (i = 0; i < dir->dir_len; i++)
+ if (dir->dir_tab[i].d_type == CDF_DIR_TYPE_ROOT_STORAGE)
+ break;
+
+ /* If the it is not there, just fake it; some docs don't have it */
+ if (i == dir->dir_len) {
+ DPRINTF(("Cannot find root storage dir\n"));
+ goto out;
+ }
+ d = &dir->dir_tab[i];
+ *root = d;
+
+ /* If the it is not there, just fake it; some docs don't have it */
+ if (d->d_stream_first_sector < 0) {
+ DPRINTF(("No first secror in dir\n"));
+ goto out;
+ }
+
+ return cdf_read_long_sector_chain(info, h, sat,
+ d->d_stream_first_sector, d->d_size, scn);
+out:
+ scn->sst_tab = NULL;
+ (void)cdf_zero_stream(scn);
+ return 0;
+}
+
+static int
+cdf_namecmp(const char *d, const uint16_t *s, size_t l)
+{
+ for (; l--; d++, s++)
+ if (*d != CDF_TOLE2(*s))
+ return (unsigned char)*d - CDF_TOLE2(*s);
+ return 0;
+}
+
+int
+cdf_read_doc_summary_info(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst,
+ const cdf_dir_t *dir, cdf_stream_t *scn)
+{
+ return cdf_read_user_stream(info, h, sat, ssat, sst, dir,
+ "\05DocumentSummaryInformation", scn);
+}
+
+int
+cdf_read_summary_info(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst,
+ const cdf_dir_t *dir, cdf_stream_t *scn)
+{
+ return cdf_read_user_stream(info, h, sat, ssat, sst, dir,
+ "\05SummaryInformation", scn);
+}
+
+int
+cdf_read_user_stream(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst,
+ const cdf_dir_t *dir, const char *name, cdf_stream_t *scn)
+{
+ const cdf_directory_t *d;
+ int i = cdf_find_stream(dir, name, CDF_DIR_TYPE_USER_STREAM);
+
+ if (i <= 0) {
+ memset(scn, 0, sizeof(*scn));
+ return -1;
+ }
+
+ d = &dir->dir_tab[i - 1];
+ return cdf_read_sector_chain(info, h, sat, ssat, sst,
+ d->d_stream_first_sector, d->d_size, scn);
+}
+
+int
+cdf_find_stream(const cdf_dir_t *dir, const char *name, int type)
+{
+ size_t i, name_len = strlen(name) + 1;
+
+ for (i = dir->dir_len; i > 0; i--)
+ if (dir->dir_tab[i - 1].d_type == type &&
+ cdf_namecmp(name, dir->dir_tab[i - 1].d_name, name_len)
+ == 0)
+ break;
+ if (i > 0)
+ return CAST(int, i);
+
+ DPRINTF(("Cannot find type %d `%s'\n", type, name));
+ errno = ESRCH;
+ return 0;
+}
+
+#define CDF_SHLEN_LIMIT (UINT32_MAX / 8)
+#define CDF_PROP_LIMIT (UINT32_MAX / (8 * sizeof(cdf_property_info_t)))
+
+static const void *
+cdf_offset(const void *p, size_t l)
+{
+ return CAST(const void *, CAST(const uint8_t *, p) + l);
+}
+
+static const uint8_t *
+cdf_get_property_info_pos(const cdf_stream_t *sst, const cdf_header_t *h,
+ const uint8_t *p, const uint8_t *e, size_t i)
+{
+ size_t tail = (i << 1) + 1;
+ size_t ofs;
+ const uint8_t *q;
+
+ if (p >= e) {
+ DPRINTF(("Past end %p < %p\n", e, p));
+ return NULL;
+ }
+ if (cdf_check_stream_offset(sst, h, p, (tail + 1) * sizeof(uint32_t),
+ __LINE__) == -1)
+ return NULL;
+ ofs = CDF_GETUINT32(p, tail);
+ q = CAST(const uint8_t *, cdf_offset(CAST(const void *, p),
+ ofs - 2 * sizeof(uint32_t)));
+
+ if (q < p) {
+ DPRINTF(("Wrapped around %p < %p\n", q, p));
+ return NULL;
+ }
+
+ if (q >= e) {
+ DPRINTF(("Ran off the end %p >= %p\n", q, e));
+ return NULL;
+ }
+ return q;
+}
+
+static cdf_property_info_t *
+cdf_grow_info(cdf_property_info_t **info, size_t *maxcount, size_t incr)
+{
+ cdf_property_info_t *inp;
+ size_t newcount = *maxcount + incr;
+
+ if (newcount > CDF_PROP_LIMIT) {
+ DPRINTF(("exceeded property limit %zu > %zu\n",
+ newcount, CDF_PROP_LIMIT));
+ goto out;
+ }
+ inp = CAST(cdf_property_info_t *,
+ CDF_REALLOC(*info, newcount * sizeof(*inp)));
+ if (inp == NULL)
+ goto out;
+
+ *info = inp;
+ *maxcount = newcount;
+ return inp;
+out:
+ free(*info);
+ *maxcount = 0;
+ *info = NULL;
+ return NULL;
+}
+
+static int
+cdf_copy_info(cdf_property_info_t *inp, const void *p, const void *e,
+ size_t len)
+{
+ if (inp->pi_type & CDF_VECTOR)
+ return 0;
+
+ if ((size_t)(CAST(const char *, e) - CAST(const char *, p)) < len)
+ return 0;
+
+ (void)memcpy(&inp->pi_val, p, len);
+
+ switch (len) {
+ case 2:
+ inp->pi_u16 = CDF_TOLE2(inp->pi_u16);
+ break;
+ case 4:
+ inp->pi_u32 = CDF_TOLE4(inp->pi_u32);
+ break;
+ case 8:
+ inp->pi_u64 = CDF_TOLE8(inp->pi_u64);
+ break;
+ default:
+ abort();
+ }
+ return 1;
+}
+
+int
+cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
+ uint32_t offs, cdf_property_info_t **info, size_t *count, size_t *maxcount)
+{
+ const cdf_section_header_t *shp;
+ cdf_section_header_t sh;
+ const uint8_t *p, *q, *e;
+ size_t i, o4, nelements, j, slen, left;
+ cdf_property_info_t *inp;
+
+ if (offs > UINT32_MAX / 4) {
+ errno = EFTYPE;
+ goto out;
+ }
+ shp = CAST(const cdf_section_header_t *,
+ cdf_offset(sst->sst_tab, offs));
+ if (cdf_check_stream_offset(sst, h, shp, sizeof(*shp), __LINE__) == -1)
+ goto out;
+ sh.sh_len = CDF_TOLE4(shp->sh_len);
+ if (sh.sh_len > CDF_SHLEN_LIMIT) {
+ errno = EFTYPE;
+ goto out;
+ }
+
+ if (cdf_check_stream_offset(sst, h, shp, sh.sh_len, __LINE__) == -1)
+ goto out;
+
+ sh.sh_properties = CDF_TOLE4(shp->sh_properties);
+ DPRINTF(("section len: %u properties %u\n", sh.sh_len,
+ sh.sh_properties));
+ if (sh.sh_properties > CDF_PROP_LIMIT)
+ goto out;
+ inp = cdf_grow_info(info, maxcount, sh.sh_properties);
+ if (inp == NULL)
+ goto out;
+ inp += *count;
+ *count += sh.sh_properties;
+ p = CAST(const uint8_t *, cdf_offset(sst->sst_tab, offs + sizeof(sh)));
+ e = CAST(const uint8_t *, cdf_offset(shp, sh.sh_len));
+ if (p >= e || cdf_check_stream_offset(sst, h, e, 0, __LINE__) == -1)
+ goto out;
+
+ for (i = 0; i < sh.sh_properties; i++) {
+ if ((q = cdf_get_property_info_pos(sst, h, p, e, i)) == NULL)
+ goto out;
+ inp[i].pi_id = CDF_GETUINT32(p, i << 1);
+ left = CAST(size_t, e - q);
+ if (left < sizeof(uint32_t)) {
+ DPRINTF(("short info (no type)_\n"));
+ goto out;
+ }
+ inp[i].pi_type = CDF_GETUINT32(q, 0);
+ DPRINTF(("%" SIZE_T_FORMAT "u) id=%#x type=%#x offs=%#tx,%#x\n",
+ i, inp[i].pi_id, inp[i].pi_type, q - p, offs));
+ if (inp[i].pi_type & CDF_VECTOR) {
+ if (left < sizeof(uint32_t) * 2) {
+ DPRINTF(("missing CDF_VECTOR length\n"));
+ goto out;
+ }
+ nelements = CDF_GETUINT32(q, 1);
+ if (nelements == 0) {
+ DPRINTF(("CDF_VECTOR with nelements == 0\n"));
+ goto out;
+ }
+ slen = 2;
+ } else {
+ nelements = 1;
+ slen = 1;
+ }
+ o4 = slen * sizeof(uint32_t);
+ if (inp[i].pi_type & (CDF_ARRAY|CDF_BYREF|CDF_RESERVED))
+ goto unknown;
+ switch (inp[i].pi_type & CDF_TYPEMASK) {
+ case CDF_NULL:
+ case CDF_EMPTY:
+ break;
+ case CDF_SIGNED16:
+ if (!cdf_copy_info(&inp[i], &q[o4], e, sizeof(int16_t)))
+ goto unknown;
+ break;
+ case CDF_SIGNED32:
+ case CDF_BOOL:
+ case CDF_UNSIGNED32:
+ case CDF_FLOAT:
+ if (!cdf_copy_info(&inp[i], &q[o4], e, sizeof(int32_t)))
+ goto unknown;
+ break;
+ case CDF_SIGNED64:
+ case CDF_UNSIGNED64:
+ case CDF_DOUBLE:
+ case CDF_FILETIME:
+ if (!cdf_copy_info(&inp[i], &q[o4], e, sizeof(int64_t)))
+ goto unknown;
+ break;
+ case CDF_LENGTH32_STRING:
+ case CDF_LENGTH32_WSTRING:
+ if (nelements > 1) {
+ size_t nelem = inp - *info;
+ inp = cdf_grow_info(info, maxcount, nelements);
+ if (inp == NULL)
+ goto out;
+ inp += nelem;
+ }
+ DPRINTF(("nelements = %" SIZE_T_FORMAT "u\n",
+ nelements));
+ for (j = 0; j < nelements && i < sh.sh_properties;
+ j++, i++)
+ {
+ uint32_t l;
+
+ if (o4 + sizeof(uint32_t) > left)
+ goto out;
+
+ l = CDF_GETUINT32(q, slen);
+ o4 += sizeof(uint32_t);
+ if (o4 + l > left)
+ goto out;
+
+ inp[i].pi_str.s_len = l;
+ inp[i].pi_str.s_buf = CAST(const char *,
+ CAST(const void *, &q[o4]));
+
+ DPRINTF(("o=%zu l=%d(%" SIZE_T_FORMAT
+ "u), t=%zu s=%s\n", o4, l,
+ CDF_ROUND(l, sizeof(l)), left,
+ inp[i].pi_str.s_buf));
+
+ if (l & 1)
+ l++;
+
+ slen += l >> 1;
+ o4 = slen * sizeof(uint32_t);
+ }
+ i--;
+ break;
+ case CDF_CLIPBOARD:
+ if (inp[i].pi_type & CDF_VECTOR)
+ goto unknown;
+ break;
+ default:
+ unknown:
+ memset(&inp[i].pi_val, 0, sizeof(inp[i].pi_val));
+ DPRINTF(("Don't know how to deal with %#x\n",
+ inp[i].pi_type));
+ break;
+ }
+ }
+ return 0;
+out:
+ free(*info);
+ *info = NULL;
+ *count = 0;
+ *maxcount = 0;
+ errno = EFTYPE;
+ return -1;
+}
+
+int
+cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
+ cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count)
+{
+ size_t maxcount;
+ const cdf_summary_info_header_t *si =
+ CAST(const cdf_summary_info_header_t *, sst->sst_tab);
+ const cdf_section_declaration_t *sd =
+ CAST(const cdf_section_declaration_t *, (const void *)
+ ((const char *)sst->sst_tab + CDF_SECTION_DECLARATION_OFFSET));
+
+ if (cdf_check_stream_offset(sst, h, si, sizeof(*si), __LINE__) == -1 ||
+ cdf_check_stream_offset(sst, h, sd, sizeof(*sd), __LINE__) == -1)
+ return -1;
+ ssi->si_byte_order = CDF_TOLE2(si->si_byte_order);
+ ssi->si_os_version = CDF_TOLE2(si->si_os_version);
+ ssi->si_os = CDF_TOLE2(si->si_os);
+ ssi->si_class = si->si_class;
+ cdf_swap_class(&ssi->si_class);
+ ssi->si_count = CDF_TOLE4(si->si_count);
+ *count = 0;
+ maxcount = 0;
+ *info = NULL;
+ if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset), info,
+ count, &maxcount) == -1)
+ return -1;
+ return 0;
+}
+
+
+#define extract_catalog_field(t, f, l) \
+ if (b + l + sizeof(cep->f) > eb) { \
+ cep->ce_namlen = 0; \
+ break; \
+ } \
+ memcpy(&cep->f, b + (l), sizeof(cep->f)); \
+ ce[i].f = CAST(t, CDF_TOLE(cep->f))
+
+int
+cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst,
+ cdf_catalog_t **cat)
+{
+ size_t ss = cdf_check_stream(sst, h);
+ const char *b = CAST(const char *, sst->sst_tab);
+ const char *nb, *eb = b + ss * sst->sst_len;
+ size_t nr, i, j, k;
+ cdf_catalog_entry_t *ce;
+ uint16_t reclen;
+ const uint16_t *np;
+
+ for (nr = 0;; nr++) {
+ memcpy(&reclen, b, sizeof(reclen));
+ reclen = CDF_TOLE2(reclen);
+ if (reclen == 0)
+ break;
+ b += reclen;
+ if (b > eb)
+ break;
+ }
+ if (nr == 0)
+ return -1;
+ nr--;
+ *cat = CAST(cdf_catalog_t *,
+ CDF_MALLOC(sizeof(cdf_catalog_t) + nr * sizeof(*ce)));
+ if (*cat == NULL)
+ return -1;
+ ce = (*cat)->cat_e;
+ memset(ce, 0, nr * sizeof(*ce));
+ b = CAST(const char *, sst->sst_tab);
+ for (j = i = 0; i < nr; b += reclen) {
+ cdf_catalog_entry_t *cep = &ce[j];
+ uint16_t rlen;
+
+ extract_catalog_field(uint16_t, ce_namlen, 0);
+ extract_catalog_field(uint16_t, ce_num, 4);
+ extract_catalog_field(uint64_t, ce_timestamp, 8);
+ reclen = cep->ce_namlen;
+
+ if (reclen < 14) {
+ cep->ce_namlen = 0;
+ continue;
+ }
+
+ cep->ce_namlen = __arraycount(cep->ce_name) - 1;
+ rlen = reclen - 14;
+ if (cep->ce_namlen > rlen)
+ cep->ce_namlen = rlen;
+
+ np = CAST(const uint16_t *, CAST(const void *, (b + 16)));
+ nb = CAST(const char *, CAST(const void *,
+ (np + cep->ce_namlen)));
+ if (nb > eb) {
+ cep->ce_namlen = 0;
+ break;
+ }
+
+ for (k = 0; k < cep->ce_namlen; k++)
+ cep->ce_name[k] = np[k]; /* XXX: CDF_TOLE2? */
+ cep->ce_name[cep->ce_namlen] = 0;
+ j = i;
+ i++;
+ }
+ (*cat)->cat_num = j;
+ return 0;
+}
+
+int
+cdf_print_classid(char *buf, size_t buflen, const cdf_classid_t *id)
+{
+ return snprintf(buf, buflen, "%.8x-%.4x-%.4x-%.2x%.2x-"
+ "%.2x%.2x%.2x%.2x%.2x%.2x", id->cl_dword, id->cl_word[0],
+ id->cl_word[1], id->cl_two[0], id->cl_two[1], id->cl_six[0],
+ id->cl_six[1], id->cl_six[2], id->cl_six[3], id->cl_six[4],
+ id->cl_six[5]);
+}
+
+static const struct {
+ uint32_t v;
+ const char *n;
+} vn[] = {
+ { CDF_PROPERTY_CODE_PAGE, "Code page" },
+ { CDF_PROPERTY_TITLE, "Title" },
+ { CDF_PROPERTY_SUBJECT, "Subject" },
+ { CDF_PROPERTY_AUTHOR, "Author" },
+ { CDF_PROPERTY_KEYWORDS, "Keywords" },
+ { CDF_PROPERTY_COMMENTS, "Comments" },
+ { CDF_PROPERTY_TEMPLATE, "Template" },
+ { CDF_PROPERTY_LAST_SAVED_BY, "Last Saved By" },
+ { CDF_PROPERTY_REVISION_NUMBER, "Revision Number" },
+ { CDF_PROPERTY_TOTAL_EDITING_TIME, "Total Editing Time" },
+ { CDF_PROPERTY_LAST_PRINTED, "Last Printed" },
+ { CDF_PROPERTY_CREATE_TIME, "Create Time/Date" },
+ { CDF_PROPERTY_LAST_SAVED_TIME, "Last Saved Time/Date" },
+ { CDF_PROPERTY_NUMBER_OF_PAGES, "Number of Pages" },
+ { CDF_PROPERTY_NUMBER_OF_WORDS, "Number of Words" },
+ { CDF_PROPERTY_NUMBER_OF_CHARACTERS, "Number of Characters" },
+ { CDF_PROPERTY_THUMBNAIL, "Thumbnail" },
+ { CDF_PROPERTY_NAME_OF_APPLICATION, "Name of Creating Application" },
+ { CDF_PROPERTY_SECURITY, "Security" },
+ { CDF_PROPERTY_LOCALE_ID, "Locale ID" },
+};
+
+int
+cdf_print_property_name(char *buf, size_t bufsiz, uint32_t p)
+{
+ size_t i;
+
+ for (i = 0; i < __arraycount(vn); i++)
+ if (vn[i].v == p)
+ return snprintf(buf, bufsiz, "%s", vn[i].n);
+ return snprintf(buf, bufsiz, "%#x", p);
+}
+
+int
+cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts)
+{
+ int len = 0;
+ int days, hours, mins, secs;
+
+ ts /= CDF_TIME_PREC;
+ secs = (int)(ts % 60);
+ ts /= 60;
+ mins = (int)(ts % 60);
+ ts /= 60;
+ hours = (int)(ts % 24);
+ ts /= 24;
+ days = (int)ts;
+
+ if (days) {
+ len += snprintf(buf + len, bufsiz - len, "%dd+", days);
+ if ((size_t)len >= bufsiz)
+ return len;
+ }
+
+ if (days || hours) {
+ len += snprintf(buf + len, bufsiz - len, "%.2d:", hours);
+ if ((size_t)len >= bufsiz)
+ return len;
+ }
+
+ len += snprintf(buf + len, bufsiz - len, "%.2d:", mins);
+ if ((size_t)len >= bufsiz)
+ return len;
+
+ len += snprintf(buf + len, bufsiz - len, "%.2d", secs);
+ return len;
+}
+
+char *
+cdf_u16tos8(char *buf, size_t len, const uint16_t *p)
+{
+ size_t i;
+ for (i = 0; i < len && p[i]; i++)
+ buf[i] = (char)p[i];
+ buf[i] = '\0';
+ return buf;
+}
+
+#ifdef CDF_DEBUG
+void
+cdf_dump_header(const cdf_header_t *h)
+{
+ size_t i;
+
+#define DUMP(a, b) (void)fprintf(stderr, "%40.40s = " a "\n", # b, h->h_ ## b)
+#define DUMP2(a, b) (void)fprintf(stderr, "%40.40s = " a " (" a ")\n", # b, \
+ h->h_ ## b, 1 << h->h_ ## b)
+ DUMP("%d", revision);
+ DUMP("%d", version);
+ DUMP("%#x", byte_order);
+ DUMP2("%d", sec_size_p2);
+ DUMP2("%d", short_sec_size_p2);
+ DUMP("%d", num_sectors_in_sat);
+ DUMP("%d", secid_first_directory);
+ DUMP("%d", min_size_standard_stream);
+ DUMP("%d", secid_first_sector_in_short_sat);
+ DUMP("%d", num_sectors_in_short_sat);
+ DUMP("%d", secid_first_sector_in_master_sat);
+ DUMP("%d", num_sectors_in_master_sat);
+ for (i = 0; i < __arraycount(h->h_master_sat); i++) {
+ if (h->h_master_sat[i] == CDF_SECID_FREE)
+ break;
+ (void)fprintf(stderr, "%35.35s[%.3" SIZE_T_FORMAT "u] = %d\n",
+ "master_sat", i, h->h_master_sat[i]);
+ }
+}
+
+void
+cdf_dump_sat(const char *prefix, const cdf_sat_t *sat, size_t size)
+{
+ size_t i, j, s = size / sizeof(cdf_secid_t);
+
+ for (i = 0; i < sat->sat_len; i++) {
+ (void)fprintf(stderr, "%s[%" SIZE_T_FORMAT "u]:\n%.6"
+ SIZE_T_FORMAT "u: ", prefix, i, i * s);
+ for (j = 0; j < s; j++) {
+ (void)fprintf(stderr, "%5d, ",
+ CDF_TOLE4(sat->sat_tab[s * i + j]));
+ if ((j + 1) % 10 == 0)
+ (void)fprintf(stderr, "\n%.6" SIZE_T_FORMAT
+ "u: ", i * s + j + 1);
+ }
+ (void)fprintf(stderr, "\n");
+ }
+}
+
+void
+cdf_dump(const void *v, size_t len)
+{
+ size_t i, j;
+ const unsigned char *p = v;
+ char abuf[16];
+
+ (void)fprintf(stderr, "%.4x: ", 0);
+ for (i = 0, j = 0; i < len; i++, p++) {
+ (void)fprintf(stderr, "%.2x ", *p);
+ abuf[j++] = isprint(*p) ? *p : '.';
+ if (j == 16) {
+ j = 0;
+ abuf[15] = '\0';
+ (void)fprintf(stderr, "%s\n%.4" SIZE_T_FORMAT "x: ",
+ abuf, i + 1);
+ }
+ }
+ (void)fprintf(stderr, "\n");
+}
+
+void
+cdf_dump_stream(const cdf_stream_t *sst)
+{
+ size_t ss = sst->sst_ss;
+ cdf_dump(sst->sst_tab, ss * sst->sst_len);
+}
+
+void
+cdf_dump_dir(const cdf_info_t *info, const cdf_header_t *h,
+ const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst,
+ const cdf_dir_t *dir)
+{
+ size_t i, j;
+ cdf_directory_t *d;
+ char name[__arraycount(d->d_name)];
+ cdf_stream_t scn;
+ struct timespec ts;
+
+ static const char *types[] = { "empty", "user storage",
+ "user stream", "lockbytes", "property", "root storage" };
+
+ for (i = 0; i < dir->dir_len; i++) {
+ char buf[26];
+ d = &dir->dir_tab[i];
+ for (j = 0; j < sizeof(name); j++)
+ name[j] = (char)CDF_TOLE2(d->d_name[j]);
+ (void)fprintf(stderr, "Directory %" SIZE_T_FORMAT "u: %s\n",
+ i, name);
+ if (d->d_type < __arraycount(types))
+ (void)fprintf(stderr, "Type: %s\n", types[d->d_type]);
+ else
+ (void)fprintf(stderr, "Type: %d\n", d->d_type);
+ (void)fprintf(stderr, "Color: %s\n",
+ d->d_color ? "black" : "red");
+ (void)fprintf(stderr, "Left child: %d\n", d->d_left_child);
+ (void)fprintf(stderr, "Right child: %d\n", d->d_right_child);
+ (void)fprintf(stderr, "Flags: %#x\n", d->d_flags);
+ cdf_timestamp_to_timespec(&ts, d->d_created);
+ (void)fprintf(stderr, "Created %s", cdf_ctime(&ts.tv_sec, buf));
+ cdf_timestamp_to_timespec(&ts, d->d_modified);
+ (void)fprintf(stderr, "Modified %s",
+ cdf_ctime(&ts.tv_sec, buf));
+ (void)fprintf(stderr, "Stream %d\n", d->d_stream_first_sector);
+ (void)fprintf(stderr, "Size %d\n", d->d_size);
+ switch (d->d_type) {
+ case CDF_DIR_TYPE_USER_STORAGE:
+ (void)fprintf(stderr, "Storage: %d\n", d->d_storage);
+ break;
+ case CDF_DIR_TYPE_USER_STREAM:
+ if (sst == NULL)
+ break;
+ if (cdf_read_sector_chain(info, h, sat, ssat, sst,
+ d->d_stream_first_sector, d->d_size, &scn) == -1) {
+ warn("Can't read stream for %s at %d len %d",
+ name, d->d_stream_first_sector, d->d_size);
+ break;
+ }
+ cdf_dump_stream(&scn);
+ free(scn.sst_tab);
+ break;
+ default:
+ break;
+ }
+
+ }
+}
+
+void
+cdf_dump_property_info(const cdf_property_info_t *info, size_t count)
+{
+ cdf_timestamp_t tp;
+ struct timespec ts;
+ char buf[64];
+ size_t i, j;
+
+ for (i = 0; i < count; i++) {
+ cdf_print_property_name(buf, sizeof(buf), info[i].pi_id);
+ (void)fprintf(stderr, "%" SIZE_T_FORMAT "u) %s: ", i, buf);
+ switch (info[i].pi_type) {
+ case CDF_NULL:
+ break;
+ case CDF_SIGNED16:
+ (void)fprintf(stderr, "signed 16 [%hd]\n",
+ info[i].pi_s16);
+ break;
+ case CDF_SIGNED32:
+ (void)fprintf(stderr, "signed 32 [%d]\n",
+ info[i].pi_s32);
+ break;
+ case CDF_UNSIGNED32:
+ (void)fprintf(stderr, "unsigned 32 [%u]\n",
+ info[i].pi_u32);
+ break;
+ case CDF_FLOAT:
+ (void)fprintf(stderr, "float [%g]\n",
+ info[i].pi_f);
+ break;
+ case CDF_DOUBLE:
+ (void)fprintf(stderr, "double [%g]\n",
+ info[i].pi_d);
+ break;
+ case CDF_LENGTH32_STRING:
+ (void)fprintf(stderr, "string %u [%.*s]\n",
+ info[i].pi_str.s_len,
+ info[i].pi_str.s_len, info[i].pi_str.s_buf);
+ break;
+ case CDF_LENGTH32_WSTRING:
+ (void)fprintf(stderr, "string %u [",
+ info[i].pi_str.s_len);
+ for (j = 0; j < info[i].pi_str.s_len - 1; j++)
+ (void)fputc(info[i].pi_str.s_buf[j << 1], stderr);
+ (void)fprintf(stderr, "]\n");
+ break;
+ case CDF_FILETIME:
+ tp = info[i].pi_tp;
+ if (tp < 1000000000000000LL) {
+ cdf_print_elapsed_time(buf, sizeof(buf), tp);
+ (void)fprintf(stderr, "timestamp %s\n", buf);
+ } else {
+ char tbuf[26];
+ cdf_timestamp_to_timespec(&ts, tp);
+ (void)fprintf(stderr, "timestamp %s",
+ cdf_ctime(&ts.tv_sec, tbuf));
+ }
+ break;
+ case CDF_CLIPBOARD:
+ (void)fprintf(stderr, "CLIPBOARD %u\n", info[i].pi_u32);
+ break;
+ default:
+ DPRINTF(("Don't know how to deal with %#x\n",
+ info[i].pi_type));
+ break;
+ }
+ }
+}
+
+
+void
+cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst)
+{
+ char buf[128];
+ cdf_summary_info_header_t ssi;
+ cdf_property_info_t *info;
+ size_t count;
+
+ (void)&h;
+ if (cdf_unpack_summary_info(sst, h, &ssi, &info, &count) == -1)
+ return;
+ (void)fprintf(stderr, "Endian: %#x\n", ssi.si_byte_order);
+ (void)fprintf(stderr, "Os Version %d.%d\n", ssi.si_os_version & 0xff,
+ ssi.si_os_version >> 8);
+ (void)fprintf(stderr, "Os %d\n", ssi.si_os);
+ cdf_print_classid(buf, sizeof(buf), &ssi.si_class);
+ (void)fprintf(stderr, "Class %s\n", buf);
+ (void)fprintf(stderr, "Count %d\n", ssi.si_count);
+ cdf_dump_property_info(info, count);
+ free(info);
+}
+
+
+void
+cdf_dump_catalog(const cdf_header_t *h, const cdf_stream_t *sst)
+{
+ cdf_catalog_t *cat;
+ cdf_unpack_catalog(h, sst, &cat);
+ const cdf_catalog_entry_t *ce = cat->cat_e;
+ struct timespec ts;
+ char tbuf[64], sbuf[256];
+ size_t i;
+
+ printf("Catalog:\n");
+ for (i = 0; i < cat->cat_num; i++) {
+ cdf_timestamp_to_timespec(&ts, ce[i].ce_timestamp);
+ printf("\t%d %s %s", ce[i].ce_num,
+ cdf_u16tos8(sbuf, ce[i].ce_namlen, ce[i].ce_name),
+ cdf_ctime(&ts.tv_sec, tbuf));
+ }
+ free(cat);
+}
+
+#endif
+
+#ifdef TEST
+int
+main(int argc, char *argv[])
+{
+ int i;
+ cdf_header_t h;
+ cdf_sat_t sat, ssat;
+ cdf_stream_t sst, scn;
+ cdf_dir_t dir;
+ cdf_info_t info;
+ const cdf_directory_t *root;
+#ifdef __linux__
+#define getprogname() __progname
+ extern char *__progname;
+#endif
+ if (argc < 2) {
+ (void)fprintf(stderr, "Usage: %s <filename>\n", getprogname());
+ return -1;
+ }
+
+ info.i_buf = NULL;
+ info.i_len = 0;
+ for (i = 1; i < argc; i++) {
+ if ((info.i_fd = open(argv[1], O_RDONLY)) == -1)
+ err(1, "Cannot open `%s'", argv[1]);
+
+ if (cdf_read_header(&info, &h) == -1)
+ err(1, "Cannot read header");
+#ifdef CDF_DEBUG
+ cdf_dump_header(&h);
+#endif
+
+ if (cdf_read_sat(&info, &h, &sat) == -1)
+ err(1, "Cannot read sat");
+#ifdef CDF_DEBUG
+ cdf_dump_sat("SAT", &sat, CDF_SEC_SIZE(&h));
+#endif
+
+ if (cdf_read_ssat(&info, &h, &sat, &ssat) == -1)
+ err(1, "Cannot read ssat");
+#ifdef CDF_DEBUG
+ cdf_dump_sat("SSAT", &ssat, CDF_SHORT_SEC_SIZE(&h));
+#endif
+
+ if (cdf_read_dir(&info, &h, &sat, &dir) == -1)
+ err(1, "Cannot read dir");
+
+ if (cdf_read_short_stream(&info, &h, &sat, &dir, &sst, &root)
+ == -1)
+ err(1, "Cannot read short stream");
+#ifdef CDF_DEBUG
+ cdf_dump_stream(&sst);
+#endif
+
+#ifdef CDF_DEBUG
+ cdf_dump_dir(&info, &h, &sat, &ssat, &sst, &dir);
+#endif
+
+
+ if (cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
+ &scn) == -1)
+ warn("Cannot read summary info");
+#ifdef CDF_DEBUG
+ else
+ cdf_dump_summary_info(&h, &scn);
+#endif
+ if (cdf_read_user_stream(&info, &h, &sat, &ssat, &sst,
+ &dir, "Catalog", &scn) == -1)
+ warn("Cannot read catalog");
+#ifdef CDF_DEBUG
+ else
+ cdf_dump_catalog(&h, &scn);
+#endif
+
+ (void)close(info.i_fd);
+ }
+
+ return 0;
+}
+#endif
Property changes on: trunk/contrib/file/src/cdf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/cdf.h
===================================================================
--- trunk/contrib/file/src/cdf.h (rev 0)
+++ trunk/contrib/file/src/cdf.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,352 @@
+/*-
+ * Copyright (c) 2008 Christos Zoulas
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * Parse Composite Document Files, the format used in Microsoft Office
+ * document files before they switched to zipped XML.
+ * Info from: http://sc.openoffice.org/compdocfileformat.pdf
+ *
+ * N.B. This is the "Composite Document File" format, and not the
+ * "Compound Document Format", nor the "Channel Definition Format".
+ */
+
+#ifndef _H_CDF_
+#define _H_CDF_
+
+#ifdef WIN32
+#include <winsock2.h>
+#define timespec timeval
+#define tv_nsec tv_usec
+#endif
+#ifdef __DJGPP__
+#define timespec timeval
+#define tv_nsec tv_usec
+#endif
+
+typedef int32_t cdf_secid_t;
+
+#define CDF_LOOP_LIMIT 10000
+
+#define CDF_SECID_NULL 0
+#define CDF_SECID_FREE -1
+#define CDF_SECID_END_OF_CHAIN -2
+#define CDF_SECID_SECTOR_ALLOCATION_TABLE -3
+#define CDF_SECID_MASTER_SECTOR_ALLOCATION_TABLE -4
+
+typedef struct {
+ uint64_t h_magic;
+#define CDF_MAGIC 0xE11AB1A1E011CFD0LL
+ uint64_t h_uuid[2];
+ uint16_t h_revision;
+ uint16_t h_version;
+ uint16_t h_byte_order;
+ uint16_t h_sec_size_p2;
+ uint16_t h_short_sec_size_p2;
+ uint8_t h_unused0[10];
+ uint32_t h_num_sectors_in_sat;
+ uint32_t h_secid_first_directory;
+ uint8_t h_unused1[4];
+ uint32_t h_min_size_standard_stream;
+ cdf_secid_t h_secid_first_sector_in_short_sat;
+ uint32_t h_num_sectors_in_short_sat;
+ cdf_secid_t h_secid_first_sector_in_master_sat;
+ uint32_t h_num_sectors_in_master_sat;
+ cdf_secid_t h_master_sat[436/4];
+} cdf_header_t;
+
+#define CDF_SEC_SIZE(h) ((size_t)(1 << (h)->h_sec_size_p2))
+#define CDF_SEC_POS(h, secid) (CDF_SEC_SIZE(h) + (secid) * CDF_SEC_SIZE(h))
+#define CDF_SHORT_SEC_SIZE(h) ((size_t)(1 << (h)->h_short_sec_size_p2))
+#define CDF_SHORT_SEC_POS(h, secid) ((secid) * CDF_SHORT_SEC_SIZE(h))
+
+typedef int32_t cdf_dirid_t;
+#define CDF_DIRID_NULL -1
+
+typedef int64_t cdf_timestamp_t;
+#define CDF_BASE_YEAR 1601
+#define CDF_TIME_PREC 10000000
+
+typedef struct {
+ uint16_t d_name[32];
+ uint16_t d_namelen;
+ uint8_t d_type;
+#define CDF_DIR_TYPE_EMPTY 0
+#define CDF_DIR_TYPE_USER_STORAGE 1
+#define CDF_DIR_TYPE_USER_STREAM 2
+#define CDF_DIR_TYPE_LOCKBYTES 3
+#define CDF_DIR_TYPE_PROPERTY 4
+#define CDF_DIR_TYPE_ROOT_STORAGE 5
+ uint8_t d_color;
+#define CDF_DIR_COLOR_READ 0
+#define CDF_DIR_COLOR_BLACK 1
+ cdf_dirid_t d_left_child;
+ cdf_dirid_t d_right_child;
+ cdf_dirid_t d_storage;
+ uint64_t d_storage_uuid[2];
+ uint32_t d_flags;
+ cdf_timestamp_t d_created;
+ cdf_timestamp_t d_modified;
+ cdf_secid_t d_stream_first_sector;
+ uint32_t d_size;
+ uint32_t d_unused0;
+} cdf_directory_t;
+
+#define CDF_DIRECTORY_SIZE 128
+
+typedef struct {
+ cdf_secid_t *sat_tab;
+ size_t sat_len;
+} cdf_sat_t;
+
+typedef struct {
+ cdf_directory_t *dir_tab;
+ size_t dir_len;
+} cdf_dir_t;
+
+typedef struct {
+ void *sst_tab;
+ size_t sst_len; /* Number of sectors */
+ size_t sst_dirlen; /* Directory sector size */
+ size_t sst_ss; /* Sector size */
+} cdf_stream_t;
+
+typedef struct {
+ uint32_t cl_dword;
+ uint16_t cl_word[2];
+ uint8_t cl_two[2];
+ uint8_t cl_six[6];
+} cdf_classid_t;
+
+typedef struct {
+ uint16_t si_byte_order;
+ uint16_t si_zero;
+ uint16_t si_os_version;
+ uint16_t si_os;
+ cdf_classid_t si_class;
+ uint32_t si_count;
+} cdf_summary_info_header_t;
+
+#define CDF_SECTION_DECLARATION_OFFSET 0x1c
+
+typedef struct {
+ cdf_classid_t sd_class;
+ uint32_t sd_offset;
+} cdf_section_declaration_t;
+
+typedef struct {
+ uint32_t sh_len;
+ uint32_t sh_properties;
+} cdf_section_header_t;
+
+typedef struct {
+ uint32_t pi_id;
+ uint32_t pi_type;
+ union {
+ uint16_t _pi_u16;
+ int16_t _pi_s16;
+ uint32_t _pi_u32;
+ int32_t _pi_s32;
+ uint64_t _pi_u64;
+ int64_t _pi_s64;
+ cdf_timestamp_t _pi_tp;
+ float _pi_f;
+ double _pi_d;
+ struct {
+ uint32_t s_len;
+ const char *s_buf;
+ } _pi_str;
+ } pi_val;
+#define pi_u64 pi_val._pi_u64
+#define pi_s64 pi_val._pi_s64
+#define pi_u32 pi_val._pi_u32
+#define pi_s32 pi_val._pi_s32
+#define pi_u16 pi_val._pi_u16
+#define pi_s16 pi_val._pi_s16
+#define pi_f pi_val._pi_f
+#define pi_d pi_val._pi_d
+#define pi_tp pi_val._pi_tp
+#define pi_str pi_val._pi_str
+} cdf_property_info_t;
+
+#define CDF_ROUND(val, by) (((val) + (by) - 1) & ~((by) - 1))
+
+/* Variant type definitions */
+#define CDF_EMPTY 0x00000000
+#define CDF_NULL 0x00000001
+#define CDF_SIGNED16 0x00000002
+#define CDF_SIGNED32 0x00000003
+#define CDF_FLOAT 0x00000004
+#define CDF_DOUBLE 0x00000005
+#define CDF_CY 0x00000006
+#define CDF_DATE 0x00000007
+#define CDF_BSTR 0x00000008
+#define CDF_DISPATCH 0x00000009
+#define CDF_ERROR 0x0000000a
+#define CDF_BOOL 0x0000000b
+#define CDF_VARIANT 0x0000000c
+#define CDF_UNKNOWN 0x0000000d
+#define CDF_DECIMAL 0x0000000e
+#define CDF_SIGNED8 0x00000010
+#define CDF_UNSIGNED8 0x00000011
+#define CDF_UNSIGNED16 0x00000012
+#define CDF_UNSIGNED32 0x00000013
+#define CDF_SIGNED64 0x00000014
+#define CDF_UNSIGNED64 0x00000015
+#define CDF_INT 0x00000016
+#define CDF_UINT 0x00000017
+#define CDF_VOID 0x00000018
+#define CDF_HRESULT 0x00000019
+#define CDF_PTR 0x0000001a
+#define CDF_SAFEARRAY 0x0000001b
+#define CDF_CARRAY 0x0000001c
+#define CDF_USERDEFINED 0x0000001d
+#define CDF_LENGTH32_STRING 0x0000001e
+#define CDF_LENGTH32_WSTRING 0x0000001f
+#define CDF_FILETIME 0x00000040
+#define CDF_BLOB 0x00000041
+#define CDF_STREAM 0x00000042
+#define CDF_STORAGE 0x00000043
+#define CDF_STREAMED_OBJECT 0x00000044
+#define CDF_STORED_OBJECT 0x00000045
+#define CDF_BLOB_OBJECT 0x00000046
+#define CDF_CLIPBOARD 0x00000047
+#define CDF_CLSID 0x00000048
+#define CDF_VECTOR 0x00001000
+#define CDF_ARRAY 0x00002000
+#define CDF_BYREF 0x00004000
+#define CDF_RESERVED 0x00008000
+#define CDF_ILLEGAL 0x0000ffff
+#define CDF_ILLEGALMASKED 0x00000fff
+#define CDF_TYPEMASK 0x00000fff
+
+#define CDF_PROPERTY_CODE_PAGE 0x00000001
+#define CDF_PROPERTY_TITLE 0x00000002
+#define CDF_PROPERTY_SUBJECT 0x00000003
+#define CDF_PROPERTY_AUTHOR 0x00000004
+#define CDF_PROPERTY_KEYWORDS 0x00000005
+#define CDF_PROPERTY_COMMENTS 0x00000006
+#define CDF_PROPERTY_TEMPLATE 0x00000007
+#define CDF_PROPERTY_LAST_SAVED_BY 0x00000008
+#define CDF_PROPERTY_REVISION_NUMBER 0x00000009
+#define CDF_PROPERTY_TOTAL_EDITING_TIME 0x0000000a
+#define CDF_PROPERTY_LAST_PRINTED 0X0000000b
+#define CDF_PROPERTY_CREATE_TIME 0x0000000c
+#define CDF_PROPERTY_LAST_SAVED_TIME 0x0000000d
+#define CDF_PROPERTY_NUMBER_OF_PAGES 0x0000000e
+#define CDF_PROPERTY_NUMBER_OF_WORDS 0x0000000f
+#define CDF_PROPERTY_NUMBER_OF_CHARACTERS 0x00000010
+#define CDF_PROPERTY_THUMBNAIL 0x00000011
+#define CDF_PROPERTY_NAME_OF_APPLICATION 0x00000012
+#define CDF_PROPERTY_SECURITY 0x00000013
+#define CDF_PROPERTY_LOCALE_ID 0x80000000
+
+typedef struct {
+ int i_fd;
+ const unsigned char *i_buf;
+ size_t i_len;
+} cdf_info_t;
+
+
+typedef struct {
+ uint16_t ce_namlen;
+ uint32_t ce_num;
+ uint64_t ce_timestamp;
+ uint16_t ce_name[256];
+} cdf_catalog_entry_t;
+
+typedef struct {
+ size_t cat_num;
+ cdf_catalog_entry_t cat_e[1];
+} cdf_catalog_t;
+
+struct timespec;
+int cdf_timestamp_to_timespec(struct timespec *, cdf_timestamp_t);
+int cdf_timespec_to_timestamp(cdf_timestamp_t *, const struct timespec *);
+int cdf_read_header(const cdf_info_t *, cdf_header_t *);
+void cdf_swap_header(cdf_header_t *);
+void cdf_unpack_header(cdf_header_t *, char *);
+void cdf_swap_dir(cdf_directory_t *);
+void cdf_unpack_dir(cdf_directory_t *, char *);
+void cdf_swap_class(cdf_classid_t *);
+ssize_t cdf_read_sector(const cdf_info_t *, void *, size_t, size_t,
+ const cdf_header_t *, cdf_secid_t);
+ssize_t cdf_read_short_sector(const cdf_stream_t *, void *, size_t, size_t,
+ const cdf_header_t *, cdf_secid_t);
+int cdf_read_sat(const cdf_info_t *, cdf_header_t *, cdf_sat_t *);
+size_t cdf_count_chain(const cdf_sat_t *, cdf_secid_t, size_t);
+int cdf_read_long_sector_chain(const cdf_info_t *, const cdf_header_t *,
+ const cdf_sat_t *, cdf_secid_t, size_t, cdf_stream_t *);
+int cdf_read_short_sector_chain(const cdf_header_t *, const cdf_sat_t *,
+ const cdf_stream_t *, cdf_secid_t, size_t, cdf_stream_t *);
+int cdf_read_sector_chain(const cdf_info_t *, const cdf_header_t *,
+ const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, cdf_secid_t,
+ size_t, cdf_stream_t *);
+int cdf_read_dir(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *,
+ cdf_dir_t *);
+int cdf_read_ssat(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *,
+ cdf_sat_t *);
+int cdf_read_short_stream(const cdf_info_t *, const cdf_header_t *,
+ const cdf_sat_t *, const cdf_dir_t *, cdf_stream_t *,
+ const cdf_directory_t **);
+int cdf_read_property_info(const cdf_stream_t *, const cdf_header_t *, uint32_t,
+ cdf_property_info_t **, size_t *, size_t *);
+int cdf_read_user_stream(const cdf_info_t *, const cdf_header_t *,
+ const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *,
+ const cdf_dir_t *, const char *, cdf_stream_t *);
+int cdf_find_stream(const cdf_dir_t *, const char *, int);
+int cdf_zero_stream(cdf_stream_t *);
+int cdf_read_doc_summary_info(const cdf_info_t *, const cdf_header_t *,
+ const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *,
+ const cdf_dir_t *, cdf_stream_t *);
+int cdf_read_summary_info(const cdf_info_t *, const cdf_header_t *,
+ const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *,
+ const cdf_dir_t *, cdf_stream_t *);
+int cdf_unpack_summary_info(const cdf_stream_t *, const cdf_header_t *,
+ cdf_summary_info_header_t *, cdf_property_info_t **, size_t *);
+int cdf_unpack_catalog(const cdf_header_t *, const cdf_stream_t *,
+ cdf_catalog_t **);
+int cdf_print_classid(char *, size_t, const cdf_classid_t *);
+int cdf_print_property_name(char *, size_t, uint32_t);
+int cdf_print_elapsed_time(char *, size_t, cdf_timestamp_t);
+uint16_t cdf_tole2(uint16_t);
+uint32_t cdf_tole4(uint32_t);
+uint64_t cdf_tole8(uint64_t);
+char *cdf_ctime(const time_t *, char *);
+char *cdf_u16tos8(char *, size_t, const uint16_t *);
+
+#ifdef CDF_DEBUG
+void cdf_dump_header(const cdf_header_t *);
+void cdf_dump_sat(const char *, const cdf_sat_t *, size_t);
+void cdf_dump(const void *, size_t);
+void cdf_dump_stream(const cdf_stream_t *);
+void cdf_dump_dir(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *,
+ const cdf_sat_t *, const cdf_stream_t *, const cdf_dir_t *);
+void cdf_dump_property_info(const cdf_property_info_t *, size_t);
+void cdf_dump_summary_info(const cdf_header_t *, const cdf_stream_t *);
+void cdf_dump_catalog(const cdf_header_t *, const cdf_stream_t *);
+#endif
+
+
+#endif /* _H_CDF_ */
Property changes on: trunk/contrib/file/src/cdf.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/cdf_time.c
===================================================================
--- trunk/contrib/file/src/cdf_time.c (rev 0)
+++ trunk/contrib/file/src/cdf_time.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,198 @@
+/*-
+ * Copyright (c) 2008 Christos Zoulas
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: cdf_time.c,v 1.16 2017/03/29 15:57:48 christos Exp $")
+#endif
+
+#include <time.h>
+#ifdef TEST
+#include <err.h>
+#endif
+#include <string.h>
+
+#include "cdf.h"
+
+#define isleap(y) ((((y) % 4) == 0) && \
+ ((((y) % 100) != 0) || (((y) % 400) == 0)))
+
+static const int mdays[] = {
+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+};
+
+/*
+ * Return the number of days between jan 01 1601 and jan 01 of year.
+ */
+static int
+cdf_getdays(int year)
+{
+ int days = 0;
+ int y;
+
+ for (y = CDF_BASE_YEAR; y < year; y++)
+ days += isleap(y) + 365;
+
+ return days;
+}
+
+/*
+ * Return the day within the month
+ */
+static int
+cdf_getday(int year, int days)
+{
+ size_t m;
+
+ for (m = 0; m < sizeof(mdays) / sizeof(mdays[0]); m++) {
+ int sub = mdays[m] + (m == 1 && isleap(year));
+ if (days < sub)
+ return days;
+ days -= sub;
+ }
+ return days;
+}
+
+/*
+ * Return the 0...11 month number.
+ */
+static int
+cdf_getmonth(int year, int days)
+{
+ size_t m;
+
+ for (m = 0; m < sizeof(mdays) / sizeof(mdays[0]); m++) {
+ days -= mdays[m];
+ if (m == 1 && isleap(year))
+ days--;
+ if (days <= 0)
+ return (int)m;
+ }
+ return (int)m;
+}
+
+int
+cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t)
+{
+ struct tm tm;
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ static char UTC[] = "UTC";
+#endif
+ int rdays;
+
+ /* Unit is 100's of nanoseconds */
+ ts->tv_nsec = (t % CDF_TIME_PREC) * 100;
+
+ t /= CDF_TIME_PREC;
+ tm.tm_sec = (int)(t % 60);
+ t /= 60;
+
+ tm.tm_min = (int)(t % 60);
+ t /= 60;
+
+ tm.tm_hour = (int)(t % 24);
+ t /= 24;
+
+ /* XXX: Approx */
+ tm.tm_year = (int)(CDF_BASE_YEAR + (t / 365));
+
+ rdays = cdf_getdays(tm.tm_year);
+ t -= rdays - 1;
+ tm.tm_mday = cdf_getday(tm.tm_year, (int)t);
+ tm.tm_mon = cdf_getmonth(tm.tm_year, (int)t);
+ tm.tm_wday = 0;
+ tm.tm_yday = 0;
+ tm.tm_isdst = 0;
+#ifdef HAVE_STRUCT_TM_TM_GMTOFF
+ tm.tm_gmtoff = 0;
+#endif
+#ifdef HAVE_STRUCT_TM_TM_ZONE
+ tm.tm_zone = UTC;
+#endif
+ tm.tm_year -= 1900;
+ ts->tv_sec = mktime(&tm);
+ if (ts->tv_sec == -1) {
+ errno = EINVAL;
+ return -1;
+ }
+ return 0;
+}
+
+int
+/*ARGSUSED*/
+cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts)
+{
+#ifndef __lint__
+ (void)&t;
+ (void)&ts;
+#endif
+#ifdef notyet
+ struct tm tm;
+ if (gmtime_r(&ts->ts_sec, &tm) == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+ *t = (ts->ts_nsec / 100) * CDF_TIME_PREC;
+ *t = tm.tm_sec;
+ *t += tm.tm_min * 60;
+ *t += tm.tm_hour * 60 * 60;
+ *t += tm.tm_mday * 60 * 60 * 24;
+#endif
+ return 0;
+}
+
+char *
+cdf_ctime(const time_t *sec, char *buf)
+{
+ char *ptr = ctime_r(sec, buf);
+ if (ptr != NULL)
+ return buf;
+ (void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n",
+ (long long)*sec);
+ return buf;
+}
+
+
+#ifdef TEST_TIME
+int
+main(int argc, char *argv[])
+{
+ struct timespec ts;
+ char buf[25];
+ static const cdf_timestamp_t tst = 0x01A5E403C2D59C00ULL;
+ static const char *ref = "Sat Apr 23 01:30:00 1977";
+ char *p, *q;
+
+ cdf_timestamp_to_timespec(&ts, tst);
+ p = cdf_ctime(&ts.tv_sec, buf);
+ if ((q = strchr(p, '\n')) != NULL)
+ *q = '\0';
+ if (strcmp(ref, p) != 0)
+ errx(1, "Error date %s != %s\n", ref, p);
+ return 0;
+}
+#endif
Property changes on: trunk/contrib/file/src/cdf_time.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/compress.c
===================================================================
--- trunk/contrib/file/src/compress.c (rev 0)
+++ trunk/contrib/file/src/compress.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,762 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * compress routines:
+ * zmagic() - returns 0 if not recognized, uncompresses and prints
+ * information if recognized
+ * uncompress(method, old, n, newch) - uncompress old into new,
+ * using method, return sizeof new
+ */
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: compress.c,v 1.105 2017/05/25 00:13:03 christos Exp $")
+#endif
+
+#include "magic.h"
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <stdarg.h>
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+# ifndef HAVE_SIG_T
+typedef void (*sig_t)(int);
+# endif /* HAVE_SIG_T */
+#endif
+#if !defined(__MINGW32__) && !defined(WIN32)
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#if defined(HAVE_SYS_TIME_H)
+#include <sys/time.h>
+#endif
+#if defined(HAVE_ZLIB_H) && defined(ZLIBSUPPORT)
+#define BUILTIN_DECOMPRESS
+#include <zlib.h>
+#endif
+#ifdef DEBUG
+int tty = -1;
+#define DPRINTF(...) do { \
+ if (tty == -1) \
+ tty = open("/dev/tty", O_RDWR); \
+ if (tty == -1) \
+ abort(); \
+ dprintf(tty, __VA_ARGS__); \
+} while (/*CONSTCOND*/0)
+#else
+#define DPRINTF(...)
+#endif
+
+#ifdef ZLIBSUPPORT
+/*
+ * The following python code is not really used because ZLIBSUPPORT is only
+ * defined if we have a built-in zlib, and the built-in zlib handles that.
+ * That is not true for android where we have zlib.h and not -lz.
+ */
+static const char zlibcode[] =
+ "import sys, zlib; sys.stdout.write(zlib.decompress(sys.stdin.read()))";
+
+static const char *zlib_args[] = { "python", "-c", zlibcode, NULL };
+
+static int
+zlibcmp(const unsigned char *buf)
+{
+ unsigned short x = 1;
+ unsigned char *s = CAST(unsigned char *, CAST(void *, &x));
+
+ if ((buf[0] & 0xf) != 8 || (buf[0] & 0x80) != 0)
+ return 0;
+ if (s[0] != 1) /* endianness test */
+ x = buf[0] | (buf[1] << 8);
+ else
+ x = buf[1] | (buf[0] << 8);
+ if (x % 31)
+ return 0;
+ return 1;
+}
+#endif
+
+#define gzip_flags "-cd"
+#define lrzip_flags "-do"
+#define lzip_flags gzip_flags
+
+static const char *gzip_args[] = {
+ "gzip", gzip_flags, NULL
+};
+static const char *uncompress_args[] = {
+ "uncompress", "-c", NULL
+};
+static const char *bzip2_args[] = {
+ "bzip2", "-cd", NULL
+};
+static const char *lzip_args[] = {
+ "lzip", lzip_flags, NULL
+};
+static const char *xz_args[] = {
+ "xz", "-cd", NULL
+};
+static const char *lrzip_args[] = {
+ "lrzip", lrzip_flags, NULL
+};
+static const char *lz4_args[] = {
+ "lz4", "-cd", NULL
+};
+static const char *zstd_args[] = {
+ "zstd", "-cd", NULL
+};
+
+private const struct {
+ const void *magic;
+ size_t maglen;
+ const char **argv;
+} compr[] = {
+ { "\037\235", 2, gzip_args }, /* compressed */
+ /* Uncompress can get stuck; so use gzip first if we have it
+ * Idea from Damien Clark, thanks! */
+ { "\037\235", 2, uncompress_args }, /* compressed */
+ { "\037\213", 2, gzip_args }, /* gzipped */
+ { "\037\236", 2, gzip_args }, /* frozen */
+ { "\037\240", 2, gzip_args }, /* SCO LZH */
+ /* the standard pack utilities do not accept standard input */
+ { "\037\036", 2, gzip_args }, /* packed */
+ { "PK\3\4", 4, gzip_args }, /* pkzipped, */
+ /* ...only first file examined */
+ { "BZh", 3, bzip2_args }, /* bzip2-ed */
+ { "LZIP", 4, lzip_args }, /* lzip-ed */
+ { "\3757zXZ\0", 6, xz_args }, /* XZ Utils */
+ { "LRZI", 4, lrzip_args }, /* LRZIP */
+ { "\004\"M\030",4, lz4_args }, /* LZ4 */
+ { "\x28\xB5\x2F\xFD", 4, zstd_args }, /* zstd */
+#ifdef ZLIBSUPPORT
+ { RCAST(const void *, zlibcmp), 0, zlib_args }, /* zlib */
+#endif
+};
+
+#define OKDATA 0
+#define NODATA 1
+#define ERRDATA 2
+
+private ssize_t swrite(int, const void *, size_t);
+#if HAVE_FORK
+private size_t ncompr = sizeof(compr) / sizeof(compr[0]);
+private int uncompressbuf(int, size_t, size_t, const unsigned char *,
+ unsigned char **, size_t *);
+#ifdef BUILTIN_DECOMPRESS
+private int uncompresszlib(const unsigned char *, unsigned char **, size_t,
+ size_t *, int);
+private int uncompressgzipped(const unsigned char *, unsigned char **, size_t,
+ size_t *);
+#endif
+static int makeerror(unsigned char **, size_t *, const char *, ...)
+ __attribute__((__format__(__printf__, 3, 4)));
+private const char *methodname(size_t);
+
+protected int
+file_zmagic(struct magic_set *ms, int fd, const char *name,
+ const unsigned char *buf, size_t nbytes)
+{
+ unsigned char *newbuf = NULL;
+ size_t i, nsz;
+ char *rbuf;
+ file_pushbuf_t *pb;
+ int urv, prv, rv = 0;
+ int mime = ms->flags & MAGIC_MIME;
+#ifdef HAVE_SIGNAL_H
+ sig_t osigpipe;
+#endif
+
+ if ((ms->flags & MAGIC_COMPRESS) == 0)
+ return 0;
+
+#ifdef HAVE_SIGNAL_H
+ osigpipe = signal(SIGPIPE, SIG_IGN);
+#endif
+ for (i = 0; i < ncompr; i++) {
+ int zm;
+ if (nbytes < compr[i].maglen)
+ continue;
+#ifdef ZLIBSUPPORT
+ if (compr[i].maglen == 0)
+ zm = (RCAST(int (*)(const unsigned char *),
+ CCAST(void *, compr[i].magic)))(buf);
+ else
+#endif
+ zm = memcmp(buf, compr[i].magic, compr[i].maglen) == 0;
+
+ if (!zm)
+ continue;
+ nsz = nbytes;
+ urv = uncompressbuf(fd, ms->bytes_max, i, buf, &newbuf, &nsz);
+ DPRINTF("uncompressbuf = %d, %s, %zu\n", urv, (char *)newbuf,
+ nsz);
+ switch (urv) {
+ case OKDATA:
+ case ERRDATA:
+
+ ms->flags &= ~MAGIC_COMPRESS;
+ if (urv == ERRDATA)
+ prv = file_printf(ms, "%s ERROR: %s",
+ methodname(i), newbuf);
+ else
+ prv = file_buffer(ms, -1, name, newbuf, nsz);
+ if (prv == -1)
+ goto error;
+ rv = 1;
+ if ((ms->flags & MAGIC_COMPRESS_TRANSP) != 0)
+ goto out;
+ if (mime != MAGIC_MIME && mime != 0)
+ goto out;
+ if ((file_printf(ms,
+ mime ? " compressed-encoding=" : " (")) == -1)
+ goto error;
+ if ((pb = file_push_buffer(ms)) == NULL)
+ goto error;
+ /*
+ * XXX: If file_buffer fails here, we overwrite
+ * the compressed text. FIXME.
+ */
+ if (file_buffer(ms, -1, NULL, buf, nbytes) == -1)
+ goto error;
+ if ((rbuf = file_pop_buffer(ms, pb)) != NULL) {
+ if (file_printf(ms, "%s", rbuf) == -1) {
+ free(rbuf);
+ goto error;
+ }
+ free(rbuf);
+ }
+ if (!mime && file_printf(ms, ")") == -1)
+ goto error;
+ /*FALLTHROUGH*/
+ case NODATA:
+ break;
+ default:
+ abort();
+ /*NOTREACHED*/
+ error:
+ rv = -1;
+ break;
+ }
+ }
+out:
+ DPRINTF("rv = %d\n", rv);
+
+#ifdef HAVE_SIGNAL_H
+ (void)signal(SIGPIPE, osigpipe);
+#endif
+ free(newbuf);
+ ms->flags |= MAGIC_COMPRESS;
+ DPRINTF("Zmagic returns %d\n", rv);
+ return rv;
+}
+#endif
+/*
+ * `safe' write for sockets and pipes.
+ */
+private ssize_t
+swrite(int fd, const void *buf, size_t n)
+{
+ ssize_t rv;
+ size_t rn = n;
+
+ do
+ switch (rv = write(fd, buf, n)) {
+ case -1:
+ if (errno == EINTR)
+ continue;
+ return -1;
+ default:
+ n -= rv;
+ buf = CAST(const char *, buf) + rv;
+ break;
+ }
+ while (n > 0);
+ return rn;
+}
+
+
+/*
+ * `safe' read for sockets and pipes.
+ */
+protected ssize_t
+sread(int fd, void *buf, size_t n, int canbepipe __attribute__((__unused__)))
+{
+ ssize_t rv;
+#ifdef FIONREAD
+ int t = 0;
+#endif
+ size_t rn = n;
+
+ if (fd == STDIN_FILENO)
+ goto nocheck;
+
+#ifdef FIONREAD
+ if (canbepipe && (ioctl(fd, FIONREAD, &t) == -1 || t == 0)) {
+#ifdef FD_ZERO
+ ssize_t cnt;
+ for (cnt = 0;; cnt++) {
+ fd_set check;
+ struct timeval tout = {0, 100 * 1000};
+ int selrv;
+
+ FD_ZERO(&check);
+ FD_SET(fd, &check);
+
+ /*
+ * Avoid soft deadlock: do not read if there
+ * is nothing to read from sockets and pipes.
+ */
+ selrv = select(fd + 1, &check, NULL, NULL, &tout);
+ if (selrv == -1) {
+ if (errno == EINTR || errno == EAGAIN)
+ continue;
+ } else if (selrv == 0 && cnt >= 5) {
+ return 0;
+ } else
+ break;
+ }
+#endif
+ (void)ioctl(fd, FIONREAD, &t);
+ }
+
+ if (t > 0 && (size_t)t < n) {
+ n = t;
+ rn = n;
+ }
+#endif
+
+nocheck:
+ do
+ switch ((rv = read(fd, buf, n))) {
+ case -1:
+ if (errno == EINTR)
+ continue;
+ return -1;
+ case 0:
+ return rn - n;
+ default:
+ n -= rv;
+ buf = CAST(char *, CCAST(void *, buf)) + rv;
+ break;
+ }
+ while (n > 0);
+ return rn;
+}
+
+protected int
+file_pipe2file(struct magic_set *ms, int fd, const void *startbuf,
+ size_t nbytes)
+{
+ char buf[4096];
+ ssize_t r;
+ int tfd;
+
+ (void)strlcpy(buf, "/tmp/file.XXXXXX", sizeof buf);
+#ifndef HAVE_MKSTEMP
+ {
+ char *ptr = mktemp(buf);
+ tfd = open(ptr, O_RDWR|O_TRUNC|O_EXCL|O_CREAT, 0600);
+ r = errno;
+ (void)unlink(ptr);
+ errno = r;
+ }
+#else
+ {
+ int te;
+ tfd = mkstemp(buf);
+ te = errno;
+ (void)unlink(buf);
+ errno = te;
+ }
+#endif
+ if (tfd == -1) {
+ file_error(ms, errno,
+ "cannot create temporary file for pipe copy");
+ return -1;
+ }
+
+ if (swrite(tfd, startbuf, nbytes) != (ssize_t)nbytes)
+ r = 1;
+ else {
+ while ((r = sread(fd, buf, sizeof(buf), 1)) > 0)
+ if (swrite(tfd, buf, (size_t)r) != r)
+ break;
+ }
+
+ switch (r) {
+ case -1:
+ file_error(ms, errno, "error copying from pipe to temp file");
+ return -1;
+ case 0:
+ break;
+ default:
+ file_error(ms, errno, "error while writing to temp file");
+ return -1;
+ }
+
+ /*
+ * We duplicate the file descriptor, because fclose on a
+ * tmpfile will delete the file, but any open descriptors
+ * can still access the phantom inode.
+ */
+ if ((fd = dup2(tfd, fd)) == -1) {
+ file_error(ms, errno, "could not dup descriptor for temp file");
+ return -1;
+ }
+ (void)close(tfd);
+ if (lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) {
+ file_badseek(ms);
+ return -1;
+ }
+ return fd;
+}
+#if HAVE_FORK
+#ifdef BUILTIN_DECOMPRESS
+
+#define FHCRC (1 << 1)
+#define FEXTRA (1 << 2)
+#define FNAME (1 << 3)
+#define FCOMMENT (1 << 4)
+
+
+private int
+uncompressgzipped(const unsigned char *old, unsigned char **newch,
+ size_t bytes_max, size_t *n)
+{
+ unsigned char flg = old[3];
+ size_t data_start = 10;
+
+ if (flg & FEXTRA) {
+ if (data_start + 1 >= *n)
+ goto err;
+ data_start += 2 + old[data_start] + old[data_start + 1] * 256;
+ }
+ if (flg & FNAME) {
+ while(data_start < *n && old[data_start])
+ data_start++;
+ data_start++;
+ }
+ if (flg & FCOMMENT) {
+ while(data_start < *n && old[data_start])
+ data_start++;
+ data_start++;
+ }
+ if (flg & FHCRC)
+ data_start += 2;
+
+ if (data_start >= *n)
+ goto err;
+
+ *n -= data_start;
+ old += data_start;
+ return uncompresszlib(old, newch, bytes_max, n, 0);
+err:
+ return makeerror(newch, n, "File too short");
+}
+
+private int
+uncompresszlib(const unsigned char *old, unsigned char **newch,
+ size_t bytes_max, size_t *n, int zlib)
+{
+ int rc;
+ z_stream z;
+
+ if ((*newch = CAST(unsigned char *, malloc(bytes_max + 1))) == NULL)
+ return makeerror(newch, n, "No buffer, %s", strerror(errno));
+
+ z.next_in = CCAST(Bytef *, old);
+ z.avail_in = CAST(uint32_t, *n);
+ z.next_out = *newch;
+ z.avail_out = CAST(unsigned int, bytes_max);
+ z.zalloc = Z_NULL;
+ z.zfree = Z_NULL;
+ z.opaque = Z_NULL;
+
+ /* LINTED bug in header macro */
+ rc = zlib ? inflateInit(&z) : inflateInit2(&z, -15);
+ if (rc != Z_OK)
+ goto err;
+
+ rc = inflate(&z, Z_SYNC_FLUSH);
+ if (rc != Z_OK && rc != Z_STREAM_END)
+ goto err;
+
+ *n = (size_t)z.total_out;
+ rc = inflateEnd(&z);
+ if (rc != Z_OK)
+ goto err;
+
+ /* let's keep the nul-terminate tradition */
+ (*newch)[*n] = '\0';
+
+ return OKDATA;
+err:
+ strlcpy((char *)*newch, z.msg ? z.msg : zError(rc), bytes_max);
+ *n = strlen((char *)*newch);
+ return ERRDATA;
+}
+#endif
+
+static int
+makeerror(unsigned char **buf, size_t *len, const char *fmt, ...)
+{
+ char *msg;
+ va_list ap;
+ int rv;
+
+ va_start(ap, fmt);
+ rv = vasprintf(&msg, fmt, ap);
+ va_end(ap);
+ if (rv < 0) {
+ *buf = NULL;
+ *len = 0;
+ return NODATA;
+ }
+ *buf = (unsigned char *)msg;
+ *len = strlen(msg);
+ return ERRDATA;
+}
+
+static void
+closefd(int *fd, size_t i)
+{
+ if (fd[i] == -1)
+ return;
+ (void) close(fd[i]);
+ fd[i] = -1;
+}
+
+static void
+closep(int *fd)
+{
+ size_t i;
+ for (i = 0; i < 2; i++)
+ closefd(fd, i);
+}
+
+static void
+copydesc(int i, int *fd)
+{
+ int j = fd[i == STDIN_FILENO ? 0 : 1];
+ if (j == i)
+ return;
+ if (dup2(j, i) == -1) {
+ DPRINTF("dup(%d, %d) failed (%s)\n", j, i, strerror(errno));
+ exit(1);
+ }
+ closep(fd);
+}
+
+static void
+writechild(int fdp[3][2], const void *old, size_t n)
+{
+ int status;
+
+ closefd(fdp[STDIN_FILENO], 0);
+ /*
+ * fork again, to avoid blocking because both
+ * pipes filled
+ */
+ switch (fork()) {
+ case 0: /* child */
+ closefd(fdp[STDOUT_FILENO], 0);
+ if (swrite(fdp[STDIN_FILENO][1], old, n) != (ssize_t)n) {
+ DPRINTF("Write failed (%s)\n", strerror(errno));
+ exit(1);
+ }
+ exit(0);
+ /*NOTREACHED*/
+
+ case -1:
+ DPRINTF("Fork failed (%s)\n", strerror(errno));
+ exit(1);
+ /*NOTREACHED*/
+
+ default: /* parent */
+ if (wait(&status) == -1) {
+ DPRINTF("Wait failed (%s)\n", strerror(errno));
+ exit(1);
+ }
+ DPRINTF("Grandchild wait return %#x\n", status);
+ }
+ closefd(fdp[STDIN_FILENO], 1);
+}
+
+static ssize_t
+filter_error(unsigned char *ubuf, ssize_t n)
+{
+ char *p;
+ char *buf;
+
+ ubuf[n] = '\0';
+ buf = (char *)ubuf;
+ while (isspace((unsigned char)*buf))
+ buf++;
+ DPRINTF("Filter error[[[%s]]]\n", buf);
+ if ((p = strchr((char *)buf, '\n')) != NULL)
+ *p = '\0';
+ if ((p = strchr((char *)buf, ';')) != NULL)
+ *p = '\0';
+ if ((p = strrchr((char *)buf, ':')) != NULL) {
+ ++p;
+ while (isspace((unsigned char)*p))
+ p++;
+ n = strlen(p);
+ memmove(ubuf, p, CAST(size_t, n + 1));
+ }
+ DPRINTF("Filter error after[[[%s]]]\n", (char *)ubuf);
+ if (islower(*ubuf))
+ *ubuf = toupper(*ubuf);
+ return n;
+}
+
+private const char *
+methodname(size_t method)
+{
+#ifdef BUILTIN_DECOMPRESS
+ /* FIXME: This doesn't cope with bzip2 */
+ if (method == 2 || compr[method].maglen == 0)
+ return "zlib";
+#endif
+ return compr[method].argv[0];
+}
+
+private int
+uncompressbuf(int fd, size_t bytes_max, size_t method, const unsigned char *old,
+ unsigned char **newch, size_t* n)
+{
+ int fdp[3][2];
+ int status, rv;
+ size_t i;
+ ssize_t r;
+
+#ifdef BUILTIN_DECOMPRESS
+ /* FIXME: This doesn't cope with bzip2 */
+ if (method == 2)
+ return uncompressgzipped(old, newch, bytes_max, n);
+ if (compr[method].maglen == 0)
+ return uncompresszlib(old, newch, bytes_max, n, 1);
+#endif
+ (void)fflush(stdout);
+ (void)fflush(stderr);
+
+ for (i = 0; i < __arraycount(fdp); i++)
+ fdp[i][0] = fdp[i][1] = -1;
+
+ if ((fd == -1 && pipe(fdp[STDIN_FILENO]) == -1) ||
+ pipe(fdp[STDOUT_FILENO]) == -1 || pipe(fdp[STDERR_FILENO]) == -1) {
+ closep(fdp[STDIN_FILENO]);
+ closep(fdp[STDOUT_FILENO]);
+ return makeerror(newch, n, "Cannot create pipe, %s",
+ strerror(errno));
+ }
+ switch (fork()) {
+ case 0: /* child */
+ if (fd != -1) {
+ fdp[STDIN_FILENO][0] = fd;
+ (void) lseek(fd, (off_t)0, SEEK_SET);
+ }
+
+ for (i = 0; i < __arraycount(fdp); i++)
+ copydesc(CAST(int, i), fdp[i]);
+
+ (void)execvp(compr[method].argv[0],
+ (char *const *)(intptr_t)compr[method].argv);
+ dprintf(STDERR_FILENO, "exec `%s' failed, %s",
+ compr[method].argv[0], strerror(errno));
+ exit(1);
+ /*NOTREACHED*/
+ case -1:
+ return makeerror(newch, n, "Cannot fork, %s",
+ strerror(errno));
+
+ default: /* parent */
+ for (i = 1; i < __arraycount(fdp); i++)
+ closefd(fdp[i], 1);
+
+ /* Write the buffer data to the child, if we don't have fd */
+ if (fd == -1)
+ writechild(fdp, old, *n);
+
+ *newch = CAST(unsigned char *, malloc(bytes_max + 1));
+ if (*newch == NULL) {
+ rv = makeerror(newch, n, "No buffer, %s",
+ strerror(errno));
+ goto err;
+ }
+ rv = OKDATA;
+ if ((r = sread(fdp[STDOUT_FILENO][0], *newch, bytes_max, 0)) > 0)
+ break;
+ DPRINTF("Read stdout failed %d (%s)\n", fdp[STDOUT_FILENO][0],
+ r != -1 ? strerror(errno) : "no data");
+
+ rv = ERRDATA;
+ if (r == 0 &&
+ (r = sread(fdp[STDERR_FILENO][0], *newch, bytes_max, 0)) > 0)
+ {
+ r = filter_error(*newch, r);
+ break;
+ }
+ free(*newch);
+ if (r == 0)
+ rv = makeerror(newch, n, "Read failed, %s",
+ strerror(errno));
+ else
+ rv = makeerror(newch, n, "No data");
+ goto err;
+ }
+
+ *n = r;
+ /* NUL terminate, as every buffer is handled here. */
+ (*newch)[*n] = '\0';
+err:
+ closefd(fdp[STDIN_FILENO], 1);
+ closefd(fdp[STDOUT_FILENO], 0);
+ closefd(fdp[STDERR_FILENO], 0);
+ if (wait(&status) == -1) {
+ free(*newch);
+ rv = makeerror(newch, n, "Wait failed, %s", strerror(errno));
+ DPRINTF("Child wait return %#x\n", status);
+ } else if (!WIFEXITED(status)) {
+ DPRINTF("Child not exited (%#x)\n", status);
+ } else if (WEXITSTATUS(status) != 0) {
+ DPRINTF("Child exited (%#x)\n", WEXITSTATUS(status));
+ }
+
+ closefd(fdp[STDIN_FILENO], 0);
+ DPRINTF("Returning %p n=%zu rv=%d\n", *newch, *n, rv);
+
+ return rv;
+}
+#endif
Property changes on: trunk/contrib/file/src/compress.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/ctime_r.c
===================================================================
--- trunk/contrib/file/src/ctime_r.c (rev 0)
+++ trunk/contrib/file/src/ctime_r.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,19 @@
+/* $File: ctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $ */
+
+#include "file.h"
+#ifndef lint
+FILE_RCSID("@(#)$File: ctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $")
+#endif /* lint */
+#include <time.h>
+#include <string.h>
+
+/* ctime_r is not thread-safe anyway */
+char *
+ctime_r(const time_t *t, char *dst)
+{
+ char *p = ctime(t);
+ if (p == NULL)
+ return NULL;
+ memcpy(dst, p, 26);
+ return dst;
+}
Property changes on: trunk/contrib/file/src/ctime_r.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/der.c
===================================================================
--- trunk/contrib/file/src/der.c (rev 0)
+++ trunk/contrib/file/src/der.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,404 @@
+/*-
+ * Copyright (c) 2016 Christos Zoulas
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * DER (Distinguished Encoding Rules) Parser
+ *
+ * Sources:
+ * https://en.wikipedia.org/wiki/X.690
+ * http://fm4dd.com/openssl/certexamples.htm
+ * http://blog.engelke.com/2014/10/17/parsing-ber-and-der-encoded-asn-1-objects/
+ */
+#ifndef TEST_DER
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: der.c,v 1.12 2017/02/10 18:14:01 christos Exp $")
+#endif
+#endif
+
+#include <sys/types.h>
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#ifndef TEST_DER
+#include "magic.h"
+#include "der.h"
+#else
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <err.h>
+#endif
+
+#define DER_BAD ((uint32_t)-1)
+
+#define DER_CLASS_UNIVERSAL 0
+#define DER_CLASS_APPLICATION 1
+#define DER_CLASS_CONTEXT 2
+#define DER_CLASS_PRIVATE 3
+#ifdef DEBUG_DER
+static const char der_class[] = "UACP";
+#endif
+
+#define DER_TYPE_PRIMITIVE 0
+#define DER_TYPE_CONSTRUCTED 1
+#ifdef DEBUG_DER
+static const char der_type[] = "PC";
+#endif
+
+#define DER_TAG_EOC 0x00
+#define DER_TAG_BOOLEAN 0x01
+#define DER_TAG_INTEGER 0x02
+#define DER_TAG_BIT STRING 0x03
+#define DER_TAG_OCTET_STRING 0x04
+#define DER_TAG_NULL 0x05
+#define DER_TAG_OBJECT_IDENTIFIER 0x06
+#define DER_TAG_OBJECT_DESCRIPTOR 0x07
+#define DER_TAG_EXTERNAL 0x08
+#define DER_TAG_REAL 0x09
+#define DER_TAG_ENUMERATED 0x0a
+#define DER_TAG_EMBEDDED_PDV 0x0b
+#define DER_TAG_UTF8_STRING 0x0c
+#define DER_TAG_RELATIVE_OID 0x0d
+#define DER_TAG_RESERVED_1 0x0e
+#define DER_TAG_RESERVED_2 0x0f
+#define DER_TAG_SEQUENCE 0x10
+#define DER_TAG_SET 0x11
+#define DER_TAG_NUMERIC_STRING 0x12
+#define DER_TAG_PRINTABLE_STRING 0x13
+#define DER_TAG_T61_STRING 0x14
+#define DER_TAG_VIDEOTEX_STRING 0x15
+#define DER_TAG_IA5_STRING 0x16
+#define DER_TAG_UTCTIME 0x17
+#define DER_TAG_GENERALIZED_TIME 0x18
+#define DER_TAG_GRAPHIC_STRING 0x19
+#define DER_TAG_VISIBLE_STRING 0x1a
+#define DER_TAG_GENERAL_STRING 0x1b
+#define DER_TAG_UNIVERSAL_STRING 0x1c
+#define DER_TAG_CHARACTER_STRING 0x1d
+#define DER_TAG_BMP_STRING 0x1e
+#define DER_TAG_LONG 0x1f
+
+static const char *der__tag[] = {
+ "eoc", "bool", "int", "bit_str", "octet_str",
+ "null", "obj_id", "obj_desc", "ext", "real",
+ "enum", "embed", "utf8_str", "oid", "res1",
+ "res2", "seq", "set", "num_str", "prt_str",
+ "t61_str", "vid_str", "ia5_str", "utc_time",
+ "gen_time", "gr_str", "vis_str", "gen_str",
+ "char_str", "bmp_str", "long"
+};
+
+#ifdef DEBUG_DER
+#define DPRINTF(a) printf a
+#else
+#define DPRINTF(a)
+#endif
+
+#ifdef TEST_DER
+static uint8_t
+getclass(uint8_t c)
+{
+ return c >> 6;
+}
+
+static uint8_t
+gettype(uint8_t c)
+{
+ return (c >> 5) & 1;
+}
+#endif
+
+static uint32_t
+gettag(const uint8_t *c, size_t *p, size_t l)
+{
+ uint32_t tag;
+
+ if (*p >= l)
+ return DER_BAD;
+
+ tag = c[(*p)++] & 0x1f;
+
+ if (tag != 0x1f)
+ return tag;
+
+ if (*p >= l)
+ return DER_BAD;
+
+ while (c[*p] >= 0x80) {
+ tag = tag * 128 + c[(*p)++] - 0x80;
+ if (*p >= l)
+ return DER_BAD;
+ }
+ return tag;
+}
+
+/*
+ * Read the length of a DER tag from the input.
+ *
+ * `c` is the input, `p` is an output parameter that specifies how much of the
+ * input we consumed, and `l` is the maximum input length.
+ *
+ * Returns the length, or DER_BAD if the end of the input is reached or the
+ * length exceeds the remaining input.
+ */
+static uint32_t
+getlength(const uint8_t *c, size_t *p, size_t l)
+{
+ uint8_t digits, i;
+ size_t len;
+ int is_onebyte_result;
+
+ if (*p >= l)
+ return DER_BAD;
+
+ /*
+ * Digits can either be 0b0 followed by the result, or 0b1
+ * followed by the number of digits of the result. In either case,
+ * we verify that we can read so many bytes from the input.
+ */
+ is_onebyte_result = (c[*p] & 0x80) == 0;
+ digits = c[(*p)++] & 0x7f;
+ if (*p + digits >= l)
+ return DER_BAD;
+
+ if (is_onebyte_result)
+ return digits;
+
+ /*
+ * Decode len. We've already verified that we're allowed to read
+ * `digits` bytes.
+ */
+ len = 0;
+ for (i = 0; i < digits; i++)
+ len = (len << 8) | c[(*p)++];
+
+ if (*p + len >= l)
+ return DER_BAD;
+ return CAST(uint32_t, len);
+}
+
+static const char *
+der_tag(char *buf, size_t len, uint32_t tag)
+{
+ if (tag < DER_TAG_LONG)
+ strlcpy(buf, der__tag[tag], len);
+ else
+ snprintf(buf, len, "%#x", tag);
+ return buf;
+}
+
+#ifndef TEST_DER
+static int
+der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len)
+{
+ const uint8_t *d = CAST(const uint8_t *, q);
+ switch (tag) {
+ case DER_TAG_PRINTABLE_STRING:
+ case DER_TAG_UTF8_STRING:
+ case DER_TAG_IA5_STRING:
+ case DER_TAG_UTCTIME:
+ return snprintf(buf, blen, "%.*s", len, (const char *)q);
+ default:
+ break;
+ }
+
+ for (uint32_t i = 0; i < len; i++) {
+ uint32_t z = i << 1;
+ if (z < blen - 2)
+ snprintf(buf + z, blen - z, "%.2x", d[i]);
+ }
+ return len * 2;
+}
+
+int32_t
+der_offs(struct magic_set *ms, struct magic *m, size_t nbytes)
+{
+ const uint8_t *b = RCAST(const uint8_t *, ms->search.s);
+ size_t offs = 0, len = ms->search.s_len ? ms->search.s_len : nbytes;
+
+ if (gettag(b, &offs, len) == DER_BAD)
+ return -1;
+ DPRINTF(("%s1: %d %zu %u\n", __func__, ms->offset, offs, m->offset));
+
+ uint32_t tlen = getlength(b, &offs, len);
+ if (tlen == DER_BAD)
+ return -1;
+ DPRINTF(("%s2: %d %zu %u\n", __func__, ms->offset, offs, tlen));
+
+ offs += ms->offset + m->offset;
+ DPRINTF(("cont_level = %d\n", m->cont_level));
+#ifdef DEBUG_DER
+ for (size_t i = 0; i < m->cont_level; i++)
+ printf("cont_level[%zu] = %u\n", i, ms->c.li[i].off);
+#endif
+ if (m->cont_level != 0) {
+ if (offs + tlen > nbytes)
+ return -1;
+ ms->c.li[m->cont_level - 1].off = CAST(int, offs + tlen);
+ DPRINTF(("cont_level[%u] = %u\n", m->cont_level - 1,
+ ms->c.li[m->cont_level - 1].off));
+ }
+ return CAST(int32_t, offs);
+}
+
+int
+der_cmp(struct magic_set *ms, struct magic *m)
+{
+ const uint8_t *b = RCAST(const uint8_t *, ms->search.s);
+ const char *s = m->value.s;
+ size_t offs = 0, len = ms->search.s_len;
+ uint32_t tag, tlen;
+ char buf[128];
+
+ tag = gettag(b, &offs, len);
+ if (tag == DER_BAD)
+ return -1;
+
+ tlen = getlength(b, &offs, len);
+ if (tlen == DER_BAD)
+ return -1;
+
+ der_tag(buf, sizeof(buf), tag);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "%s: tag %p got=%s exp=%s\n", __func__, b,
+ buf, s);
+ size_t slen = strlen(buf);
+
+ if (strncmp(buf, s, slen) != 0)
+ return 0;
+
+ s += slen;
+
+again:
+ switch (*s) {
+ case '\0':
+ return 1;
+ case '=':
+ s++;
+ goto val;
+ default:
+ if (!isdigit((unsigned char)*s))
+ return 0;
+
+ slen = 0;
+ do
+ slen = slen * 10 + *s - '0';
+ while (isdigit((unsigned char)*++s));
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "%s: len %zu %u\n", __func__,
+ slen, tlen);
+ if (tlen != slen)
+ return 0;
+ goto again;
+ }
+val:
+ DPRINTF(("%s: before data %zu %u\n", __func__, offs, tlen));
+ der_data(buf, sizeof(buf), tag, b + offs, tlen);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "%s: data %s %s\n", __func__, buf, s);
+ if (strcmp(buf, s) != 0 && strcmp("x", s) != 0)
+ return 0;
+ strlcpy(ms->ms_value.s, buf, sizeof(ms->ms_value.s));
+ return 1;
+}
+#endif
+
+#ifdef TEST_DER
+static void
+printtag(uint32_t tag, const void *q, uint32_t len)
+{
+ const uint8_t *d = q;
+ switch (tag) {
+ case DER_TAG_PRINTABLE_STRING:
+ case DER_TAG_UTF8_STRING:
+ printf("%.*s\n", len, (const char *)q);
+ return;
+ default:
+ break;
+ }
+
+ for (uint32_t i = 0; i < len; i++)
+ printf("%.2x", d[i]);
+ printf("\n");
+}
+
+static void
+printdata(size_t level, const void *v, size_t x, size_t l)
+{
+ const uint8_t *p = v, *ep = p + l;
+ size_t ox;
+ char buf[128];
+
+ while (p + x < ep) {
+ const uint8_t *q;
+ uint8_t c = getclass(p[x]);
+ uint8_t t = gettype(p[x]);
+ ox = x;
+ if (x != 0)
+ printf("%.2x %.2x %.2x\n", p[x - 1], p[x], p[x + 1]);
+ uint32_t tag = gettag(p, &x, ep - p + x);
+ if (p + x >= ep)
+ break;
+ uint32_t len = getlength(p, &x, ep - p + x);
+
+ printf("%zu %zu-%zu %c,%c,%s,%u:", level, ox, x,
+ der_class[c], der_type[t],
+ der_tag(buf, sizeof(buf), tag), len);
+ q = p + x;
+ if (p + len > ep)
+ errx(EXIT_FAILURE, "corrupt der");
+ printtag(tag, q, len);
+ if (t != DER_TYPE_PRIMITIVE)
+ printdata(level + 1, p, x, len + x);
+ x += len;
+ }
+}
+
+int
+main(int argc, char *argv[])
+{
+ int fd;
+ struct stat st;
+ size_t l;
+ void *p;
+
+ if ((fd = open(argv[1], O_RDONLY)) == -1)
+ err(EXIT_FAILURE, "open `%s'", argv[1]);
+ if (fstat(fd, &st) == -1)
+ err(EXIT_FAILURE, "stat `%s'", argv[1]);
+ l = (size_t)st.st_size;
+ if ((p = mmap(NULL, l, PROT_READ, MAP_FILE, fd, 0)) == MAP_FAILED)
+ err(EXIT_FAILURE, "mmap `%s'", argv[1]);
+
+ printdata(0, p, 0, l);
+ munmap(p, l);
+ return 0;
+}
+#endif
Property changes on: trunk/contrib/file/src/der.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/der.h
===================================================================
--- trunk/contrib/file/src/der.h (rev 0)
+++ trunk/contrib/file/src/der.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,28 @@
+/*-
+ * Copyright (c) 2016 Christos Zoulas
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+extern int der_offs(struct magic_set *, struct magic *, size_t);
+extern int der_cmp(struct magic_set *, struct magic *);
Property changes on: trunk/contrib/file/src/der.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/dprintf.c
===================================================================
--- trunk/contrib/file/src/dprintf.c (rev 0)
+++ trunk/contrib/file/src/dprintf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: dprintf.c,v 1.1 2015/11/13 15:36:14 christos Exp $")
+#endif /* lint */
+
+#include <assert.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+int
+dprintf(int fd, const char *fmt, ...)
+{
+ va_list ap;
+ /* Simpler than using vasprintf() here, since we never need more */
+ char buf[1024];
+ int len;
+
+ va_start(ap, fmt);
+ len = vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
+
+ if ((size_t)len >= sizeof(buf))
+ return -1;
+
+ if (write(fd, buf, (size_t)len) != len)
+ return -1;
+
+ return len;
+}
Property changes on: trunk/contrib/file/src/dprintf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/elfclass.h
===================================================================
--- trunk/contrib/file/src/elfclass.h (rev 0)
+++ trunk/contrib/file/src/elfclass.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) Christos Zoulas 2008.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+ if (nbytes <= sizeof(elfhdr))
+ return 0;
+
+ u.l = 1;
+ (void)memcpy(&elfhdr, buf, sizeof elfhdr);
+ swap = (u.c[sizeof(int32_t) - 1] + 1) != elfhdr.e_ident[EI_DATA];
+
+ type = elf_getu16(swap, elfhdr.e_type);
+ notecount = ms->elf_notes_max;
+ switch (type) {
+#ifdef ELFCORE
+ case ET_CORE:
+ phnum = elf_getu16(swap, elfhdr.e_phnum);
+ if (phnum > ms->elf_phnum_max)
+ return toomany(ms, "program headers", phnum);
+ flags |= FLAGS_IS_CORE;
+ if (dophn_core(ms, clazz, swap, fd,
+ (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
+ (size_t)elf_getu16(swap, elfhdr.e_phentsize),
+ fsize, &flags, ¬ecount) == -1)
+ return -1;
+ break;
+#endif
+ case ET_EXEC:
+ case ET_DYN:
+ phnum = elf_getu16(swap, elfhdr.e_phnum);
+ if (phnum > ms->elf_phnum_max)
+ return toomany(ms, "program", phnum);
+ shnum = elf_getu16(swap, elfhdr.e_shnum);
+ if (shnum > ms->elf_shnum_max)
+ return toomany(ms, "section", shnum);
+ if (dophn_exec(ms, clazz, swap, fd,
+ (off_t)elf_getu(swap, elfhdr.e_phoff), phnum,
+ (size_t)elf_getu16(swap, elfhdr.e_phentsize),
+ fsize, shnum, &flags, ¬ecount) == -1)
+ return -1;
+ /*FALLTHROUGH*/
+ case ET_REL:
+ shnum = elf_getu16(swap, elfhdr.e_shnum);
+ if (shnum > ms->elf_shnum_max)
+ return toomany(ms, "section headers", shnum);
+ if (doshn(ms, clazz, swap, fd,
+ (off_t)elf_getu(swap, elfhdr.e_shoff), shnum,
+ (size_t)elf_getu16(swap, elfhdr.e_shentsize),
+ fsize, elf_getu16(swap, elfhdr.e_machine),
+ (int)elf_getu16(swap, elfhdr.e_shstrndx),
+ &flags, ¬ecount) == -1)
+ return -1;
+ break;
+
+ default:
+ break;
+ }
+ if (notecount == 0)
+ return toomany(ms, "notes", ms->elf_notes_max);
+ return 1;
Property changes on: trunk/contrib/file/src/elfclass.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/encoding.c
===================================================================
--- trunk/contrib/file/src/encoding.c (rev 0)
+++ trunk/contrib/file/src/encoding.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,529 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * Encoding -- determine the character encoding of a text file.
+ *
+ * Joerg Wunsch <joerg at freebsd.org> wrote the original support for 8-bit
+ * international characters.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: encoding.c,v 1.13 2015/06/04 19:16:28 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <string.h>
+#include <memory.h>
+#include <stdlib.h>
+
+
+private int looks_ascii(const unsigned char *, size_t, unichar *, size_t *);
+private int looks_utf8_with_BOM(const unsigned char *, size_t, unichar *,
+ size_t *);
+private int looks_utf7(const unsigned char *, size_t, unichar *, size_t *);
+private int looks_ucs16(const unsigned char *, size_t, unichar *, size_t *);
+private int looks_latin1(const unsigned char *, size_t, unichar *, size_t *);
+private int looks_extended(const unsigned char *, size_t, unichar *, size_t *);
+private void from_ebcdic(const unsigned char *, size_t, unsigned char *);
+
+#ifdef DEBUG_ENCODING
+#define DPRINTF(a) printf a
+#else
+#define DPRINTF(a)
+#endif
+
+/*
+ * Try to determine whether text is in some character code we can
+ * identify. Each of these tests, if it succeeds, will leave
+ * the text converted into one-unichar-per-character Unicode in
+ * ubuf, and the number of characters converted in ulen.
+ */
+protected int
+file_encoding(struct magic_set *ms, const unsigned char *buf, size_t nbytes, unichar **ubuf, size_t *ulen, const char **code, const char **code_mime, const char **type)
+{
+ size_t mlen;
+ int rv = 1, ucs_type;
+ unsigned char *nbuf = NULL;
+
+ *type = "text";
+ *ulen = 0;
+ *code = "unknown";
+ *code_mime = "binary";
+
+ mlen = (nbytes + 1) * sizeof((*ubuf)[0]);
+ if ((*ubuf = CAST(unichar *, calloc((size_t)1, mlen))) == NULL) {
+ file_oomem(ms, mlen);
+ goto done;
+ }
+ mlen = (nbytes + 1) * sizeof(nbuf[0]);
+ if ((nbuf = CAST(unsigned char *, calloc((size_t)1, mlen))) == NULL) {
+ file_oomem(ms, mlen);
+ goto done;
+ }
+
+ if (looks_ascii(buf, nbytes, *ubuf, ulen)) {
+ if (looks_utf7(buf, nbytes, *ubuf, ulen) > 0) {
+ DPRINTF(("utf-7 %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "UTF-7 Unicode";
+ *code_mime = "utf-7";
+ } else {
+ DPRINTF(("ascii %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "ASCII";
+ *code_mime = "us-ascii";
+ }
+ } else if (looks_utf8_with_BOM(buf, nbytes, *ubuf, ulen) > 0) {
+ DPRINTF(("utf8/bom %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "UTF-8 Unicode (with BOM)";
+ *code_mime = "utf-8";
+ } else if (file_looks_utf8(buf, nbytes, *ubuf, ulen) > 1) {
+ DPRINTF(("utf8 %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "UTF-8 Unicode";
+ *code_mime = "utf-8";
+ } else if ((ucs_type = looks_ucs16(buf, nbytes, *ubuf, ulen)) != 0) {
+ if (ucs_type == 1) {
+ *code = "Little-endian UTF-16 Unicode";
+ *code_mime = "utf-16le";
+ } else {
+ *code = "Big-endian UTF-16 Unicode";
+ *code_mime = "utf-16be";
+ }
+ DPRINTF(("ucs16 %" SIZE_T_FORMAT "u\n", *ulen));
+ } else if (looks_latin1(buf, nbytes, *ubuf, ulen)) {
+ DPRINTF(("latin1 %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "ISO-8859";
+ *code_mime = "iso-8859-1";
+ } else if (looks_extended(buf, nbytes, *ubuf, ulen)) {
+ DPRINTF(("extended %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "Non-ISO extended-ASCII";
+ *code_mime = "unknown-8bit";
+ } else {
+ from_ebcdic(buf, nbytes, nbuf);
+
+ if (looks_ascii(nbuf, nbytes, *ubuf, ulen)) {
+ DPRINTF(("ebcdic %" SIZE_T_FORMAT "u\n", *ulen));
+ *code = "EBCDIC";
+ *code_mime = "ebcdic";
+ } else if (looks_latin1(nbuf, nbytes, *ubuf, ulen)) {
+ DPRINTF(("ebcdic/international %" SIZE_T_FORMAT "u\n",
+ *ulen));
+ *code = "International EBCDIC";
+ *code_mime = "ebcdic";
+ } else { /* Doesn't look like text at all */
+ DPRINTF(("binary\n"));
+ rv = 0;
+ *type = "binary";
+ }
+ }
+
+ done:
+ free(nbuf);
+
+ return rv;
+}
+
+/*
+ * This table reflects a particular philosophy about what constitutes
+ * "text," and there is room for disagreement about it.
+ *
+ * Version 3.31 of the file command considered a file to be ASCII if
+ * each of its characters was approved by either the isascii() or
+ * isalpha() function. On most systems, this would mean that any
+ * file consisting only of characters in the range 0x00 ... 0x7F
+ * would be called ASCII text, but many systems might reasonably
+ * consider some characters outside this range to be alphabetic,
+ * so the file command would call such characters ASCII. It might
+ * have been more accurate to call this "considered textual on the
+ * local system" than "ASCII."
+ *
+ * It considered a file to be "International language text" if each
+ * of its characters was either an ASCII printing character (according
+ * to the real ASCII standard, not the above test), a character in
+ * the range 0x80 ... 0xFF, or one of the following control characters:
+ * backspace, tab, line feed, vertical tab, form feed, carriage return,
+ * escape. No attempt was made to determine the language in which files
+ * of this type were written.
+ *
+ *
+ * The table below considers a file to be ASCII if all of its characters
+ * are either ASCII printing characters (again, according to the X3.4
+ * standard, not isascii()) or any of the following controls: bell,
+ * backspace, tab, line feed, form feed, carriage return, esc, nextline.
+ *
+ * I include bell because some programs (particularly shell scripts)
+ * use it literally, even though it is rare in normal text. I exclude
+ * vertical tab because it never seems to be used in real text. I also
+ * include, with hesitation, the X3.64/ECMA-43 control nextline (0x85),
+ * because that's what the dd EBCDIC->ASCII table maps the EBCDIC newline
+ * character to. It might be more appropriate to include it in the 8859
+ * set instead of the ASCII set, but it's got to be included in *something*
+ * we recognize or EBCDIC files aren't going to be considered textual.
+ * Some old Unix source files use SO/SI (^N/^O) to shift between Greek
+ * and Latin characters, so these should possibly be allowed. But they
+ * make a real mess on VT100-style displays if they're not paired properly,
+ * so we are probably better off not calling them text.
+ *
+ * A file is considered to be ISO-8859 text if its characters are all
+ * either ASCII, according to the above definition, or printing characters
+ * from the ISO-8859 8-bit extension, characters 0xA0 ... 0xFF.
+ *
+ * Finally, a file is considered to be international text from some other
+ * character code if its characters are all either ISO-8859 (according to
+ * the above definition) or characters in the range 0x80 ... 0x9F, which
+ * ISO-8859 considers to be control characters but the IBM PC and Macintosh
+ * consider to be printing characters.
+ */
+
+#define F 0 /* character never appears in text */
+#define T 1 /* character appears in plain ASCII text */
+#define I 2 /* character appears in ISO-8859 text */
+#define X 3 /* character appears in non-ISO extended ASCII (Mac, IBM PC) */
+
+private char text_chars[256] = {
+ /* BEL BS HT LF VT FF CR */
+ F, F, F, F, F, F, F, T, T, T, T, T, T, T, F, F, /* 0x0X */
+ /* ESC */
+ F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */
+ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */
+ /* NEL */
+ X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */
+ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */
+ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */
+};
+
+private int
+looks_ascii(const unsigned char *buf, size_t nbytes, unichar *ubuf,
+ size_t *ulen)
+{
+ size_t i;
+
+ *ulen = 0;
+
+ for (i = 0; i < nbytes; i++) {
+ int t = text_chars[buf[i]];
+
+ if (t != T)
+ return 0;
+
+ ubuf[(*ulen)++] = buf[i];
+ }
+
+ return 1;
+}
+
+private int
+looks_latin1(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
+{
+ size_t i;
+
+ *ulen = 0;
+
+ for (i = 0; i < nbytes; i++) {
+ int t = text_chars[buf[i]];
+
+ if (t != T && t != I)
+ return 0;
+
+ ubuf[(*ulen)++] = buf[i];
+ }
+
+ return 1;
+}
+
+private int
+looks_extended(const unsigned char *buf, size_t nbytes, unichar *ubuf,
+ size_t *ulen)
+{
+ size_t i;
+
+ *ulen = 0;
+
+ for (i = 0; i < nbytes; i++) {
+ int t = text_chars[buf[i]];
+
+ if (t != T && t != I && t != X)
+ return 0;
+
+ ubuf[(*ulen)++] = buf[i];
+ }
+
+ return 1;
+}
+
+/*
+ * Decide whether some text looks like UTF-8. Returns:
+ *
+ * -1: invalid UTF-8
+ * 0: uses odd control characters, so doesn't look like text
+ * 1: 7-bit text
+ * 2: definitely UTF-8 text (valid high-bit set bytes)
+ *
+ * If ubuf is non-NULL on entry, text is decoded into ubuf, *ulen;
+ * ubuf must be big enough!
+ */
+protected int
+file_looks_utf8(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
+{
+ size_t i;
+ int n;
+ unichar c;
+ int gotone = 0, ctrl = 0;
+
+ if (ubuf)
+ *ulen = 0;
+
+ for (i = 0; i < nbytes; i++) {
+ if ((buf[i] & 0x80) == 0) { /* 0xxxxxxx is plain ASCII */
+ /*
+ * Even if the whole file is valid UTF-8 sequences,
+ * still reject it if it uses weird control characters.
+ */
+
+ if (text_chars[buf[i]] != T)
+ ctrl = 1;
+
+ if (ubuf)
+ ubuf[(*ulen)++] = buf[i];
+ } else if ((buf[i] & 0x40) == 0) { /* 10xxxxxx never 1st byte */
+ return -1;
+ } else { /* 11xxxxxx begins UTF-8 */
+ int following;
+
+ if ((buf[i] & 0x20) == 0) { /* 110xxxxx */
+ c = buf[i] & 0x1f;
+ following = 1;
+ } else if ((buf[i] & 0x10) == 0) { /* 1110xxxx */
+ c = buf[i] & 0x0f;
+ following = 2;
+ } else if ((buf[i] & 0x08) == 0) { /* 11110xxx */
+ c = buf[i] & 0x07;
+ following = 3;
+ } else if ((buf[i] & 0x04) == 0) { /* 111110xx */
+ c = buf[i] & 0x03;
+ following = 4;
+ } else if ((buf[i] & 0x02) == 0) { /* 1111110x */
+ c = buf[i] & 0x01;
+ following = 5;
+ } else
+ return -1;
+
+ for (n = 0; n < following; n++) {
+ i++;
+ if (i >= nbytes)
+ goto done;
+
+ if ((buf[i] & 0x80) == 0 || (buf[i] & 0x40))
+ return -1;
+
+ c = (c << 6) + (buf[i] & 0x3f);
+ }
+
+ if (ubuf)
+ ubuf[(*ulen)++] = c;
+ gotone = 1;
+ }
+ }
+done:
+ return ctrl ? 0 : (gotone ? 2 : 1);
+}
+
+/*
+ * Decide whether some text looks like UTF-8 with BOM. If there is no
+ * BOM, return -1; otherwise return the result of looks_utf8 on the
+ * rest of the text.
+ */
+private int
+looks_utf8_with_BOM(const unsigned char *buf, size_t nbytes, unichar *ubuf,
+ size_t *ulen)
+{
+ if (nbytes > 3 && buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf)
+ return file_looks_utf8(buf + 3, nbytes - 3, ubuf, ulen);
+ else
+ return -1;
+}
+
+private int
+looks_utf7(const unsigned char *buf, size_t nbytes, unichar *ubuf, size_t *ulen)
+{
+ if (nbytes > 4 && buf[0] == '+' && buf[1] == '/' && buf[2] == 'v')
+ switch (buf[3]) {
+ case '8':
+ case '9':
+ case '+':
+ case '/':
+ if (ubuf)
+ *ulen = 0;
+ return 1;
+ default:
+ return -1;
+ }
+ else
+ return -1;
+}
+
+private int
+looks_ucs16(const unsigned char *buf, size_t nbytes, unichar *ubuf,
+ size_t *ulen)
+{
+ int bigend;
+ size_t i;
+
+ if (nbytes < 2)
+ return 0;
+
+ if (buf[0] == 0xff && buf[1] == 0xfe)
+ bigend = 0;
+ else if (buf[0] == 0xfe && buf[1] == 0xff)
+ bigend = 1;
+ else
+ return 0;
+
+ *ulen = 0;
+
+ for (i = 2; i + 1 < nbytes; i += 2) {
+ /* XXX fix to properly handle chars > 65536 */
+
+ if (bigend)
+ ubuf[(*ulen)++] = buf[i + 1] + 256 * buf[i];
+ else
+ ubuf[(*ulen)++] = buf[i] + 256 * buf[i + 1];
+
+ if (ubuf[*ulen - 1] == 0xfffe)
+ return 0;
+ if (ubuf[*ulen - 1] < 128 &&
+ text_chars[(size_t)ubuf[*ulen - 1]] != T)
+ return 0;
+ }
+
+ return 1 + bigend;
+}
+
+#undef F
+#undef T
+#undef I
+#undef X
+
+/*
+ * This table maps each EBCDIC character to an (8-bit extended) ASCII
+ * character, as specified in the rationale for the dd(1) command in
+ * draft 11.2 (September, 1991) of the POSIX P1003.2 standard.
+ *
+ * Unfortunately it does not seem to correspond exactly to any of the
+ * five variants of EBCDIC documented in IBM's _Enterprise Systems
+ * Architecture/390: Principles of Operation_, SA22-7201-06, Seventh
+ * Edition, July, 1999, pp. I-1 - I-4.
+ *
+ * Fortunately, though, all versions of EBCDIC, including this one, agree
+ * on most of the printing characters that also appear in (7-bit) ASCII.
+ * Of these, only '|', '!', '~', '^', '[', and ']' are in question at all.
+ *
+ * Fortunately too, there is general agreement that codes 0x00 through
+ * 0x3F represent control characters, 0x41 a nonbreaking space, and the
+ * remainder printing characters.
+ *
+ * This is sufficient to allow us to identify EBCDIC text and to distinguish
+ * between old-style and internationalized examples of text.
+ */
+
+private unsigned char ebcdic_to_ascii[] = {
+ 0, 1, 2, 3, 156, 9, 134, 127, 151, 141, 142, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 157, 133, 8, 135, 24, 25, 146, 143, 28, 29, 30, 31,
+128, 129, 130, 131, 132, 10, 23, 27, 136, 137, 138, 139, 140, 5, 6, 7,
+144, 145, 22, 147, 148, 149, 150, 4, 152, 153, 154, 155, 20, 21, 158, 26,
+' ', 160, 161, 162, 163, 164, 165, 166, 167, 168, 213, '.', '<', '(', '+', '|',
+'&', 169, 170, 171, 172, 173, 174, 175, 176, 177, '!', '$', '*', ')', ';', '~',
+'-', '/', 178, 179, 180, 181, 182, 183, 184, 185, 203, ',', '%', '_', '>', '?',
+186, 187, 188, 189, 190, 191, 192, 193, 194, '`', ':', '#', '@', '\'','=', '"',
+195, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 196, 197, 198, 199, 200, 201,
+202, 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', '^', 204, 205, 206, 207, 208,
+209, 229, 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 210, 211, 212, '[', 214, 215,
+216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, ']', 230, 231,
+'{', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 232, 233, 234, 235, 236, 237,
+'}', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 238, 239, 240, 241, 242, 243,
+'\\',159, 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 244, 245, 246, 247, 248, 249,
+'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 250, 251, 252, 253, 254, 255
+};
+
+#ifdef notdef
+/*
+ * The following EBCDIC-to-ASCII table may relate more closely to reality,
+ * or at least to modern reality. It comes from
+ *
+ * http://ftp.s390.ibm.com/products/oe/bpxqp9.html
+ *
+ * and maps the characters of EBCDIC code page 1047 (the code used for
+ * Unix-derived software on IBM's 390 systems) to the corresponding
+ * characters from ISO 8859-1.
+ *
+ * If this table is used instead of the above one, some of the special
+ * cases for the NEL character can be taken out of the code.
+ */
+
+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,
+0x80,0x81,0x82,0x83,0x84,0x85,0x17,0x1B,0x88,0x89,0x8A,0x8B,0x8C,0x05,0x06,0x07,
+0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9A,0x9B,0x14,0x15,0x9E,0x1A,
+0x20,0xA0,0xE2,0xE4,0xE0,0xE1,0xE3,0xE5,0xE7,0xF1,0xA2,0x2E,0x3C,0x28,0x2B,0x7C,
+0x26,0xE9,0xEA,0xEB,0xE8,0xED,0xEE,0xEF,0xEC,0xDF,0x21,0x24,0x2A,0x29,0x3B,0x5E,
+0x2D,0x2F,0xC2,0xC4,0xC0,0xC1,0xC3,0xC5,0xC7,0xD1,0xA6,0x2C,0x25,0x5F,0x3E,0x3F,
+0xF8,0xC9,0xCA,0xCB,0xC8,0xCD,0xCE,0xCF,0xCC,0x60,0x3A,0x23,0x40,0x27,0x3D,0x22,
+0xD8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xAB,0xBB,0xF0,0xFD,0xFE,0xB1,
+0xB0,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0xAA,0xBA,0xE6,0xB8,0xC6,0xA4,
+0xB5,0x7E,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0xA1,0xBF,0xD0,0x5B,0xDE,0xAE,
+0xAC,0xA3,0xA5,0xB7,0xA9,0xA7,0xB6,0xBC,0xBD,0xBE,0xDD,0xA8,0xAF,0x5D,0xB4,0xD7,
+0x7B,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xAD,0xF4,0xF6,0xF2,0xF3,0xF5,
+0x7D,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0xB9,0xFB,0xFC,0xF9,0xFA,0xFF,
+0x5C,0xF7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB2,0xD4,0xD6,0xD2,0xD3,0xD5,
+0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xB3,0xDB,0xDC,0xD9,0xDA,0x9F
+};
+#endif
+
+/*
+ * Copy buf[0 ... nbytes-1] into out[], translating EBCDIC to ASCII.
+ */
+private void
+from_ebcdic(const unsigned char *buf, size_t nbytes, unsigned char *out)
+{
+ size_t i;
+
+ for (i = 0; i < nbytes; i++) {
+ out[i] = ebcdic_to_ascii[buf[i]];
+ }
+}
Property changes on: trunk/contrib/file/src/encoding.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/file.c
===================================================================
--- trunk/contrib/file/src/file.c (rev 0)
+++ trunk/contrib/file/src/file.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,633 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * file - find type of a file or files - main program.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: file.c,v 1.172 2016/10/24 15:21:07 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#ifdef RESTORE_TIME
+# if (__COHERENT__ >= 0x420)
+# include <sys/utime.h>
+# else
+# ifdef USE_UTIMES
+# include <sys/time.h>
+# else
+# include <utime.h>
+# endif
+# endif
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h> /* for read() */
+#endif
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#if defined(HAVE_GETOPT_H) && defined(HAVE_STRUCT_OPTION)
+#include <getopt.h>
+#ifndef HAVE_GETOPT_LONG
+int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex);
+#endif
+#else
+#include "mygetopt.h"
+#endif
+
+#ifdef S_IFLNK
+#define FILE_FLAGS "-bcEhikLlNnprsvzZ0"
+#else
+#define FILE_FLAGS "-bcEiklNnprsvzZ0"
+#endif
+
+# define USAGE \
+ "Usage: %s [" FILE_FLAGS \
+ "] [--apple] [--extension] [--mime-encoding] [--mime-type]\n" \
+ " [-e testname] [-F separator] [-f namefile] [-m magicfiles] " \
+ "file ...\n" \
+ " %s -C [-m magicfiles]\n" \
+ " %s [--help]\n"
+
+private int /* Global command-line options */
+ bflag = 0, /* brief output format */
+ nopad = 0, /* Don't pad output */
+ nobuffer = 0, /* Do not buffer stdout */
+ nulsep = 0; /* Append '\0' to the separator */
+
+private const char *separator = ":"; /* Default field separator */
+private const struct option long_options[] = {
+#define OPT_HELP 1
+#define OPT_APPLE 2
+#define OPT_EXTENSIONS 3
+#define OPT_MIME_TYPE 4
+#define OPT_MIME_ENCODING 5
+#define OPT(shortname, longname, opt, def, doc) \
+ {longname, opt, NULL, shortname},
+#define OPT_LONGONLY(longname, opt, def, doc, id) \
+ {longname, opt, NULL, id},
+#include "file_opts.h"
+#undef OPT
+#undef OPT_LONGONLY
+ {0, 0, NULL, 0}
+};
+#define OPTSTRING "bcCde:Ef:F:hiklLm:nNpP:rsvzZ0"
+
+private const struct {
+ const char *name;
+ int value;
+} nv[] = {
+ { "apptype", MAGIC_NO_CHECK_APPTYPE },
+ { "ascii", MAGIC_NO_CHECK_ASCII },
+ { "cdf", MAGIC_NO_CHECK_CDF },
+ { "compress", MAGIC_NO_CHECK_COMPRESS },
+ { "elf", MAGIC_NO_CHECK_ELF },
+ { "encoding", MAGIC_NO_CHECK_ENCODING },
+ { "soft", MAGIC_NO_CHECK_SOFT },
+ { "tar", MAGIC_NO_CHECK_TAR },
+ { "text", MAGIC_NO_CHECK_TEXT }, /* synonym for ascii */
+ { "tokens", MAGIC_NO_CHECK_TOKENS }, /* OBSOLETE: ignored for backwards compatibility */
+};
+
+private struct {
+ const char *name;
+ int tag;
+ size_t value;
+} pm[] = {
+ { "indir", MAGIC_PARAM_INDIR_MAX, 0 },
+ { "name", MAGIC_PARAM_NAME_MAX, 0 },
+ { "elf_phnum", MAGIC_PARAM_ELF_PHNUM_MAX, 0 },
+ { "elf_shnum", MAGIC_PARAM_ELF_SHNUM_MAX, 0 },
+ { "elf_notes", MAGIC_PARAM_ELF_NOTES_MAX, 0 },
+ { "regex", MAGIC_PARAM_REGEX_MAX, 0 },
+ { "bytes", MAGIC_PARAM_BYTES_MAX, 0 },
+};
+
+private char *progname; /* used throughout */
+private int posixly;
+
+#ifdef __dead
+__dead
+#endif
+private void usage(void);
+private void docprint(const char *, int);
+#ifdef __dead
+__dead
+#endif
+private void help(void);
+
+private int unwrap(struct magic_set *, const char *);
+private int process(struct magic_set *ms, const char *, int);
+private struct magic_set *load(const char *, int);
+private void setparam(const char *);
+private void applyparam(magic_t);
+
+
+/*
+ * main - parse arguments and handle options
+ */
+int
+main(int argc, char *argv[])
+{
+ int c;
+ size_t i;
+ int action = 0, didsomefiles = 0, errflg = 0;
+ int flags = 0, e = 0;
+ struct magic_set *magic = NULL;
+ int longindex;
+ const char *magicfile = NULL; /* where the magic is */
+
+ /* makes islower etc work for other langs */
+#ifdef HAVE_SETLOCALE
+ (void)setlocale(LC_CTYPE, "");
+#endif
+
+#ifdef __EMX__
+ /* sh-like wildcard expansion! Shouldn't hurt at least ... */
+ _wildcard(&argc, &argv);
+#endif
+
+ if ((progname = strrchr(argv[0], '/')) != NULL)
+ progname++;
+ else
+ progname = argv[0];
+
+#ifdef S_IFLNK
+ posixly = getenv("POSIXLY_CORRECT") != NULL;
+ flags |= posixly ? MAGIC_SYMLINK : 0;
+#endif
+ while ((c = getopt_long(argc, argv, OPTSTRING, long_options,
+ &longindex)) != -1)
+ switch (c) {
+ case OPT_HELP:
+ help();
+ break;
+ case OPT_APPLE:
+ flags |= MAGIC_APPLE;
+ break;
+ case OPT_EXTENSIONS:
+ flags |= MAGIC_EXTENSION;
+ break;
+ case OPT_MIME_TYPE:
+ flags |= MAGIC_MIME_TYPE;
+ break;
+ case OPT_MIME_ENCODING:
+ flags |= MAGIC_MIME_ENCODING;
+ break;
+ case '0':
+ nulsep++;
+ break;
+ case 'b':
+ bflag++;
+ break;
+ case 'c':
+ action = FILE_CHECK;
+ break;
+ case 'C':
+ action = FILE_COMPILE;
+ break;
+ case 'd':
+ flags |= MAGIC_DEBUG|MAGIC_CHECK;
+ break;
+ case 'E':
+ flags |= MAGIC_ERROR;
+ break;
+ case 'e':
+ for (i = 0; i < sizeof(nv) / sizeof(nv[0]); i++)
+ if (strcmp(nv[i].name, optarg) == 0)
+ break;
+
+ if (i == sizeof(nv) / sizeof(nv[0]))
+ errflg++;
+ else
+ flags |= nv[i].value;
+ break;
+
+ case 'f':
+ if(action)
+ usage();
+ if (magic == NULL)
+ if ((magic = load(magicfile, flags)) == NULL)
+ return 1;
+ applyparam(magic);
+ e |= unwrap(magic, optarg);
+ ++didsomefiles;
+ break;
+ case 'F':
+ separator = optarg;
+ break;
+ case 'i':
+ flags |= MAGIC_MIME;
+ break;
+ case 'k':
+ flags |= MAGIC_CONTINUE;
+ break;
+ case 'l':
+ action = FILE_LIST;
+ break;
+ case 'm':
+ magicfile = optarg;
+ break;
+ case 'n':
+ ++nobuffer;
+ break;
+ case 'N':
+ ++nopad;
+ break;
+#if defined(HAVE_UTIME) || defined(HAVE_UTIMES)
+ case 'p':
+ flags |= MAGIC_PRESERVE_ATIME;
+ break;
+#endif
+ case 'P':
+ setparam(optarg);
+ break;
+ case 'r':
+ flags |= MAGIC_RAW;
+ break;
+ case 's':
+ flags |= MAGIC_DEVICES;
+ break;
+ case 'v':
+ if (magicfile == NULL)
+ magicfile = magic_getpath(magicfile, action);
+ (void)fprintf(stdout, "%s-%s\n", progname, VERSION);
+ (void)fprintf(stdout, "magic file from %s\n",
+ magicfile);
+ return 0;
+ case 'z':
+ flags |= MAGIC_COMPRESS;
+ break;
+
+ case 'Z':
+ flags |= MAGIC_COMPRESS|MAGIC_COMPRESS_TRANSP;
+ break;
+#ifdef S_IFLNK
+ case 'L':
+ flags |= MAGIC_SYMLINK;
+ break;
+ case 'h':
+ flags &= ~MAGIC_SYMLINK;
+ break;
+#endif
+ case '?':
+ default:
+ errflg++;
+ break;
+ }
+
+ if (errflg) {
+ usage();
+ }
+ if (e)
+ return e;
+
+ if (MAGIC_VERSION != magic_version())
+ (void)fprintf(stderr, "%s: compiled magic version [%d] "
+ "does not match with shared library magic version [%d]\n",
+ progname, MAGIC_VERSION, magic_version());
+
+ switch(action) {
+ case FILE_CHECK:
+ case FILE_COMPILE:
+ case FILE_LIST:
+ /*
+ * Don't try to check/compile ~/.magic unless we explicitly
+ * ask for it.
+ */
+ magic = magic_open(flags|MAGIC_CHECK);
+ if (magic == NULL) {
+ (void)fprintf(stderr, "%s: %s\n", progname,
+ strerror(errno));
+ return 1;
+ }
+
+
+ switch(action) {
+ case FILE_CHECK:
+ c = magic_check(magic, magicfile);
+ break;
+ case FILE_COMPILE:
+ c = magic_compile(magic, magicfile);
+ break;
+ case FILE_LIST:
+ c = magic_list(magic, magicfile);
+ break;
+ default:
+ abort();
+ }
+ if (c == -1) {
+ (void)fprintf(stderr, "%s: %s\n", progname,
+ magic_error(magic));
+ e = 1;
+ goto out;
+ }
+ goto out;
+ default:
+ if (magic == NULL)
+ if ((magic = load(magicfile, flags)) == NULL)
+ return 1;
+ applyparam(magic);
+ }
+
+ if (optind == argc) {
+ if (!didsomefiles)
+ usage();
+ }
+ else {
+ size_t j, wid, nw;
+ for (wid = 0, j = (size_t)optind; j < (size_t)argc; j++) {
+ nw = file_mbswidth(argv[j]);
+ if (nw > wid)
+ wid = nw;
+ }
+ /*
+ * If bflag is only set twice, set it depending on
+ * number of files [this is undocumented, and subject to change]
+ */
+ if (bflag == 2) {
+ bflag = optind >= argc - 1;
+ }
+ for (; optind < argc; optind++)
+ e |= process(magic, argv[optind], wid);
+ }
+
+out:
+ if (magic)
+ magic_close(magic);
+ return e;
+}
+
+private void
+applyparam(magic_t magic)
+{
+ size_t i;
+
+ for (i = 0; i < __arraycount(pm); i++) {
+ if (pm[i].value == 0)
+ continue;
+ if (magic_setparam(magic, pm[i].tag, &pm[i].value) == -1) {
+ (void)fprintf(stderr, "%s: Can't set %s %s\n", progname,
+ pm[i].name, strerror(errno));
+ exit(1);
+ }
+ }
+}
+
+private void
+setparam(const char *p)
+{
+ size_t i;
+ char *s;
+
+ if ((s = strchr(p, '=')) == NULL)
+ goto badparm;
+
+ for (i = 0; i < __arraycount(pm); i++) {
+ if (strncmp(p, pm[i].name, s - p) != 0)
+ continue;
+ pm[i].value = atoi(s + 1);
+ return;
+ }
+badparm:
+ (void)fprintf(stderr, "%s: Unknown param %s\n", progname, p);
+ exit(1);
+}
+
+private struct magic_set *
+/*ARGSUSED*/
+load(const char *magicfile, int flags)
+{
+ struct magic_set *magic = magic_open(flags);
+ const char *e;
+
+ if (magic == NULL) {
+ (void)fprintf(stderr, "%s: %s\n", progname, strerror(errno));
+ return NULL;
+ }
+ if (magic_load(magic, magicfile) == -1) {
+ (void)fprintf(stderr, "%s: %s\n",
+ progname, magic_error(magic));
+ magic_close(magic);
+ return NULL;
+ }
+ if ((e = magic_error(magic)) != NULL)
+ (void)fprintf(stderr, "%s: Warning: %s\n", progname, e);
+ return magic;
+}
+
+/*
+ * unwrap -- read a file of filenames, do each one.
+ */
+private int
+unwrap(struct magic_set *ms, const char *fn)
+{
+ FILE *f;
+ ssize_t len;
+ char *line = NULL;
+ size_t llen = 0;
+ int wid = 0, cwid;
+ int e = 0;
+
+ if (strcmp("-", fn) == 0) {
+ f = stdin;
+ wid = 1;
+ } else {
+ if ((f = fopen(fn, "r")) == NULL) {
+ (void)fprintf(stderr, "%s: Cannot open `%s' (%s).\n",
+ progname, fn, strerror(errno));
+ return 1;
+ }
+
+ while ((len = getline(&line, &llen, f)) > 0) {
+ if (line[len - 1] == '\n')
+ line[len - 1] = '\0';
+ cwid = file_mbswidth(line);
+ if (cwid > wid)
+ wid = cwid;
+ }
+
+ rewind(f);
+ }
+
+ while ((len = getline(&line, &llen, f)) > 0) {
+ if (line[len - 1] == '\n')
+ line[len - 1] = '\0';
+ e |= process(ms, line, wid);
+ if(nobuffer)
+ (void)fflush(stdout);
+ }
+
+ free(line);
+ (void)fclose(f);
+ return e;
+}
+
+/*
+ * Called for each input file on the command line (or in a list of files)
+ */
+private int
+process(struct magic_set *ms, const char *inname, int wid)
+{
+ const char *type, c = nulsep > 1 ? '\0' : '\n';
+ int std_in = strcmp(inname, "-") == 0;
+
+ if (wid > 0 && !bflag) {
+ (void)printf("%s", std_in ? "/dev/stdin" : inname);
+ if (nulsep)
+ (void)putc('\0', stdout);
+ if (nulsep < 2) {
+ (void)printf("%s", separator);
+ (void)printf("%*s ",
+ (int) (nopad ? 0 : (wid - file_mbswidth(inname))),
+ "");
+ }
+ }
+
+ type = magic_file(ms, std_in ? NULL : inname);
+
+ if (type == NULL) {
+ (void)printf("ERROR: %s%c", magic_error(ms), c);
+ return 1;
+ } else {
+ (void)printf("%s%c", type, c);
+ return 0;
+ }
+}
+
+protected size_t
+file_mbswidth(const char *s)
+{
+#if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH)
+ size_t bytesconsumed, old_n, n, width = 0;
+ mbstate_t state;
+ wchar_t nextchar;
+ (void)memset(&state, 0, sizeof(mbstate_t));
+ old_n = n = strlen(s);
+
+ while (n > 0) {
+ bytesconsumed = mbrtowc(&nextchar, s, n, &state);
+ if (bytesconsumed == (size_t)(-1) ||
+ bytesconsumed == (size_t)(-2)) {
+ /* Something went wrong, return something reasonable */
+ return old_n;
+ }
+ if (s[0] == '\n') {
+ /*
+ * do what strlen() would do, so that caller
+ * is always right
+ */
+ width++;
+ } else {
+ int w = wcwidth(nextchar);
+ if (w > 0)
+ width += w;
+ }
+
+ s += bytesconsumed, n -= bytesconsumed;
+ }
+ return width;
+#else
+ return strlen(s);
+#endif
+}
+
+private void
+usage(void)
+{
+ (void)fprintf(stderr, USAGE, progname, progname, progname);
+ exit(1);
+}
+
+private void
+defprint(int def)
+{
+ if (!def)
+ return;
+ if (((def & 1) && posixly) || ((def & 2) && !posixly))
+ fprintf(stdout, " (default)");
+ fputc('\n', stdout);
+}
+
+private void
+docprint(const char *opts, int def)
+{
+ size_t i;
+ int comma;
+ char *sp, *p;
+
+ p = strstr(opts, "%o");
+ if (p == NULL) {
+ fprintf(stdout, "%s", opts);
+ defprint(def);
+ return;
+ }
+
+ for (sp = p - 1; sp > opts && *sp == ' '; sp--)
+ continue;
+
+ fprintf(stdout, "%.*s", (int)(p - opts), opts);
+
+ comma = 0;
+ for (i = 0; i < __arraycount(nv); i++) {
+ fprintf(stdout, "%s%s", comma++ ? ", " : "", nv[i].name);
+ if (i && i % 5 == 0) {
+ fprintf(stdout, ",\n%*s", (int)(p - sp - 1), "");
+ comma = 0;
+ }
+ }
+
+ fprintf(stdout, "%s", opts + (p - opts) + 2);
+}
+
+private void
+help(void)
+{
+ (void)fputs(
+"Usage: file [OPTION...] [FILE...]\n"
+"Determine type of FILEs.\n"
+"\n", stdout);
+#define OPT(shortname, longname, opt, def, doc) \
+ fprintf(stdout, " -%c, --" longname, shortname), \
+ docprint(doc, def);
+#define OPT_LONGONLY(longname, opt, def, doc, id) \
+ fprintf(stdout, " --" longname), \
+ docprint(doc, def);
+#include "file_opts.h"
+#undef OPT
+#undef OPT_LONGONLY
+ fprintf(stdout, "\nReport bugs to http://bugs.gw.com/\n");
+ exit(0);
+}
Property changes on: trunk/contrib/file/src/file.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/file.h
===================================================================
--- trunk/contrib/file/src/file.h (rev 0)
+++ trunk/contrib/file/src/file.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,618 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * file.h - definitions for file(1) program
+ * @(#)$File: file.h,v 1.183 2017/08/28 13:39:18 christos Exp $
+ */
+
+#ifndef __file_h__
+#define __file_h__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#ifdef HAVE_STDINT_H
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS
+#endif
+
+#ifdef WIN32
+ #ifdef _WIN64
+ #define SIZE_T_FORMAT "I64"
+ #else
+ #define SIZE_T_FORMAT ""
+ #endif
+ #define INT64_T_FORMAT "I64"
+ #define INTMAX_T_FORMAT "I64"
+#else
+ #define SIZE_T_FORMAT "z"
+ #define INT64_T_FORMAT "ll"
+ #define INTMAX_T_FORMAT "j"
+#endif
+#include <stdint.h>
+#endif
+
+#include <stdio.h> /* Include that here, to make sure __P gets defined */
+#include <errno.h>
+#include <fcntl.h> /* For open and flags */
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+#include <regex.h>
+#include <time.h>
+#include <sys/types.h>
+#ifndef WIN32
+#include <sys/param.h>
+#endif
+/* Do this here and now, because struct stat gets re-defined on solaris */
+#include <sys/stat.h>
+#include <stdarg.h>
+
+#define ENABLE_CONDITIONALS
+
+#ifndef MAGIC
+#define MAGIC "/etc/magic"
+#endif
+
+#if defined(__EMX__) || defined (WIN32)
+#define PATHSEP ';'
+#else
+#define PATHSEP ':'
+#endif
+
+#define private static
+
+#if HAVE_VISIBILITY && !defined(WIN32)
+#define public __attribute__ ((__visibility__("default")))
+#ifndef protected
+#define protected __attribute__ ((__visibility__("hidden")))
+#endif
+#else
+#define public
+#ifndef protected
+#define protected
+#endif
+#endif
+
+#ifndef __arraycount
+#define __arraycount(a) (sizeof(a) / sizeof(a[0]))
+#endif
+
+#ifndef __GNUC_PREREQ__
+#ifdef __GNUC__
+#define __GNUC_PREREQ__(x, y) \
+ ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \
+ (__GNUC__ > (x)))
+#else
+#define __GNUC_PREREQ__(x, y) 0
+#endif
+#endif
+
+#ifndef __GNUC__
+#ifndef __attribute__
+#define __attribute__(a)
+#endif
+#endif
+
+#ifndef MIN
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef MAX
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+
+#ifndef FILE_BYTES_MAX
+# define FILE_BYTES_MAX (1024 * 1024) /* how much of the file to look at */
+#endif
+#define MAXMAGIS 8192 /* max entries in any one magic file
+ or directory */
+#define MAXDESC 64 /* max len of text description/MIME type */
+#define MAXMIME 80 /* max len of text MIME type */
+#define MAXstring 96 /* max len of "string" types */
+
+#define MAGICNO 0xF11E041C
+#define VERSIONNO 14
+#define FILE_MAGICSIZE 344
+
+#define FILE_LOAD 0
+#define FILE_CHECK 1
+#define FILE_COMPILE 2
+#define FILE_LIST 3
+
+union VALUETYPE {
+ uint8_t b;
+ uint16_t h;
+ uint32_t l;
+ uint64_t q;
+ uint8_t hs[2]; /* 2 bytes of a fixed-endian "short" */
+ uint8_t hl[4]; /* 4 bytes of a fixed-endian "long" */
+ uint8_t hq[8]; /* 8 bytes of a fixed-endian "quad" */
+ char s[MAXstring]; /* the search string or regex pattern */
+ unsigned char us[MAXstring];
+ float f;
+ double d;
+};
+
+struct magic {
+ /* Word 1 */
+ uint16_t cont_level; /* level of ">" */
+ uint8_t flag;
+#define INDIR 0x01 /* if '(...)' appears */
+#define OFFADD 0x02 /* if '>&' or '>...(&' appears */
+#define INDIROFFADD 0x04 /* if '>&(' appears */
+#define UNSIGNED 0x08 /* comparison is unsigned */
+#define NOSPACE 0x10 /* suppress space character before output */
+#define BINTEST 0x20 /* test is for a binary type (set only
+ for top-level tests) */
+#define TEXTTEST 0x40 /* for passing to file_softmagic */
+
+ uint8_t factor;
+
+ /* Word 2 */
+ uint8_t reln; /* relation (0=eq, '>'=gt, etc) */
+ uint8_t vallen; /* length of string value, if any */
+ uint8_t type; /* comparison type (FILE_*) */
+ uint8_t in_type; /* type of indirection */
+#define FILE_INVALID 0
+#define FILE_BYTE 1
+#define FILE_SHORT 2
+#define FILE_DEFAULT 3
+#define FILE_LONG 4
+#define FILE_STRING 5
+#define FILE_DATE 6
+#define FILE_BESHORT 7
+#define FILE_BELONG 8
+#define FILE_BEDATE 9
+#define FILE_LESHORT 10
+#define FILE_LELONG 11
+#define FILE_LEDATE 12
+#define FILE_PSTRING 13
+#define FILE_LDATE 14
+#define FILE_BELDATE 15
+#define FILE_LELDATE 16
+#define FILE_REGEX 17
+#define FILE_BESTRING16 18
+#define FILE_LESTRING16 19
+#define FILE_SEARCH 20
+#define FILE_MEDATE 21
+#define FILE_MELDATE 22
+#define FILE_MELONG 23
+#define FILE_QUAD 24
+#define FILE_LEQUAD 25
+#define FILE_BEQUAD 26
+#define FILE_QDATE 27
+#define FILE_LEQDATE 28
+#define FILE_BEQDATE 29
+#define FILE_QLDATE 30
+#define FILE_LEQLDATE 31
+#define FILE_BEQLDATE 32
+#define FILE_FLOAT 33
+#define FILE_BEFLOAT 34
+#define FILE_LEFLOAT 35
+#define FILE_DOUBLE 36
+#define FILE_BEDOUBLE 37
+#define FILE_LEDOUBLE 38
+#define FILE_BEID3 39
+#define FILE_LEID3 40
+#define FILE_INDIRECT 41
+#define FILE_QWDATE 42
+#define FILE_LEQWDATE 43
+#define FILE_BEQWDATE 44
+#define FILE_NAME 45
+#define FILE_USE 46
+#define FILE_CLEAR 47
+#define FILE_DER 48
+#define FILE_NAMES_SIZE 49 /* size of array to contain all names */
+
+#define IS_STRING(t) \
+ ((t) == FILE_STRING || \
+ (t) == FILE_PSTRING || \
+ (t) == FILE_BESTRING16 || \
+ (t) == FILE_LESTRING16 || \
+ (t) == FILE_REGEX || \
+ (t) == FILE_SEARCH || \
+ (t) == FILE_INDIRECT || \
+ (t) == FILE_NAME || \
+ (t) == FILE_USE)
+
+#define FILE_FMT_NONE 0
+#define FILE_FMT_NUM 1 /* "cduxXi" */
+#define FILE_FMT_STR 2 /* "s" */
+#define FILE_FMT_QUAD 3 /* "ll" */
+#define FILE_FMT_FLOAT 4 /* "eEfFgG" */
+#define FILE_FMT_DOUBLE 5 /* "eEfFgG" */
+
+ /* Word 3 */
+ uint8_t in_op; /* operator for indirection */
+ uint8_t mask_op; /* operator for mask */
+#ifdef ENABLE_CONDITIONALS
+ uint8_t cond; /* conditional type */
+#else
+ uint8_t dummy;
+#endif
+ uint8_t factor_op;
+#define FILE_FACTOR_OP_PLUS '+'
+#define FILE_FACTOR_OP_MINUS '-'
+#define FILE_FACTOR_OP_TIMES '*'
+#define FILE_FACTOR_OP_DIV '/'
+#define FILE_FACTOR_OP_NONE '\0'
+
+#define FILE_OPS "&|^+-*/%"
+#define FILE_OPAND 0
+#define FILE_OPOR 1
+#define FILE_OPXOR 2
+#define FILE_OPADD 3
+#define FILE_OPMINUS 4
+#define FILE_OPMULTIPLY 5
+#define FILE_OPDIVIDE 6
+#define FILE_OPMODULO 7
+#define FILE_OPS_MASK 0x07 /* mask for above ops */
+#define FILE_UNUSED_1 0x08
+#define FILE_UNUSED_2 0x10
+#define FILE_OPSIGNED 0x20
+#define FILE_OPINVERSE 0x40
+#define FILE_OPINDIRECT 0x80
+
+#ifdef ENABLE_CONDITIONALS
+#define COND_NONE 0
+#define COND_IF 1
+#define COND_ELIF 2
+#define COND_ELSE 3
+#endif /* ENABLE_CONDITIONALS */
+
+ /* Word 4 */
+ uint32_t offset; /* offset to magic number */
+ /* Word 5 */
+ int32_t in_offset; /* offset from indirection */
+ /* Word 6 */
+ uint32_t lineno; /* line number in magic file */
+ /* Word 7,8 */
+ union {
+ uint64_t _mask; /* for use with numeric and date types */
+ struct {
+ uint32_t _count; /* repeat/line count */
+ uint32_t _flags; /* modifier flags */
+ } _s; /* for use with string types */
+ } _u;
+#define num_mask _u._mask
+#define str_range _u._s._count
+#define str_flags _u._s._flags
+ /* Words 9-24 */
+ union VALUETYPE value; /* either number or string */
+ /* Words 25-40 */
+ char desc[MAXDESC]; /* description */
+ /* Words 41-60 */
+ char mimetype[MAXMIME]; /* MIME type */
+ /* Words 61-62 */
+ char apple[8]; /* APPLE CREATOR/TYPE */
+ /* Words 63-78 */
+ char ext[64]; /* Popular extensions */
+};
+
+#define BIT(A) (1 << (A))
+#define STRING_COMPACT_WHITESPACE BIT(0)
+#define STRING_COMPACT_OPTIONAL_WHITESPACE BIT(1)
+#define STRING_IGNORE_LOWERCASE BIT(2)
+#define STRING_IGNORE_UPPERCASE BIT(3)
+#define REGEX_OFFSET_START BIT(4)
+#define STRING_TEXTTEST BIT(5)
+#define STRING_BINTEST BIT(6)
+#define PSTRING_1_BE BIT(7)
+#define PSTRING_1_LE BIT(7)
+#define PSTRING_2_BE BIT(8)
+#define PSTRING_2_LE BIT(9)
+#define PSTRING_4_BE BIT(10)
+#define PSTRING_4_LE BIT(11)
+#define REGEX_LINE_COUNT BIT(11)
+#define PSTRING_LEN \
+ (PSTRING_1_BE|PSTRING_2_LE|PSTRING_2_BE|PSTRING_4_LE|PSTRING_4_BE)
+#define PSTRING_LENGTH_INCLUDES_ITSELF BIT(12)
+#define STRING_TRIM BIT(13)
+#define CHAR_COMPACT_WHITESPACE 'W'
+#define CHAR_COMPACT_OPTIONAL_WHITESPACE 'w'
+#define CHAR_IGNORE_LOWERCASE 'c'
+#define CHAR_IGNORE_UPPERCASE 'C'
+#define CHAR_REGEX_OFFSET_START 's'
+#define CHAR_TEXTTEST 't'
+#define CHAR_TRIM 'T'
+#define CHAR_BINTEST 'b'
+#define CHAR_PSTRING_1_BE 'B'
+#define CHAR_PSTRING_1_LE 'B'
+#define CHAR_PSTRING_2_BE 'H'
+#define CHAR_PSTRING_2_LE 'h'
+#define CHAR_PSTRING_4_BE 'L'
+#define CHAR_PSTRING_4_LE 'l'
+#define CHAR_PSTRING_LENGTH_INCLUDES_ITSELF 'J'
+#define STRING_IGNORE_CASE (STRING_IGNORE_LOWERCASE|STRING_IGNORE_UPPERCASE)
+#define STRING_DEFAULT_RANGE 100
+
+#define INDIRECT_RELATIVE BIT(0)
+#define CHAR_INDIRECT_RELATIVE 'r'
+
+/* list of magic entries */
+struct mlist {
+ struct magic *magic; /* array of magic entries */
+ uint32_t nmagic; /* number of entries in array */
+ void *map; /* internal resources used by entry */
+ struct mlist *next, *prev;
+};
+
+#ifdef __cplusplus
+#define CAST(T, b) static_cast<T>(b)
+#define RCAST(T, b) reinterpret_cast<T>(b)
+#define CCAST(T, b) const_cast<T>(b)
+#else
+#define CAST(T, b) ((T)(b))
+#define RCAST(T, b) ((T)(b))
+#define CCAST(T, b) ((T)(uintptr_t)(b))
+#endif
+
+struct level_info {
+ int32_t off;
+ int got_match;
+#ifdef ENABLE_CONDITIONALS
+ int last_match;
+ int last_cond; /* used for error checking by parse() */
+#endif
+};
+
+#define MAGIC_SETS 2
+
+struct magic_set {
+ struct mlist *mlist[MAGIC_SETS]; /* list of regular entries */
+ struct cont {
+ size_t len;
+ struct level_info *li;
+ } c;
+ struct out {
+ char *buf; /* Accumulation buffer */
+ char *pbuf; /* Printable buffer */
+ } o;
+ uint32_t offset;
+ int error;
+ int flags; /* Control magic tests. */
+ int event_flags; /* Note things that happened. */
+#define EVENT_HAD_ERR 0x01
+ const char *file;
+ size_t line; /* current magic line number */
+
+ /* data for searches */
+ struct {
+ const char *s; /* start of search in original source */
+ size_t s_len; /* length of search region */
+ size_t offset; /* starting offset in source: XXX - should this be off_t? */
+ size_t rm_len; /* match length */
+ } search;
+
+ /* FIXME: Make the string dynamically allocated so that e.g.
+ strings matched in files can be longer than MAXstring */
+ union VALUETYPE ms_value; /* either number or string */
+ uint16_t indir_max;
+ uint16_t name_max;
+ uint16_t elf_shnum_max;
+ uint16_t elf_phnum_max;
+ uint16_t elf_notes_max;
+ uint16_t regex_max;
+ size_t bytes_max; /* number of bytes to read from file */
+#define FILE_INDIR_MAX 50
+#define FILE_NAME_MAX 30
+#define FILE_ELF_SHNUM_MAX 32768
+#define FILE_ELF_PHNUM_MAX 2048
+#define FILE_ELF_NOTES_MAX 256
+#define FILE_REGEX_MAX 8192
+};
+
+/* Type for Unicode characters */
+typedef unsigned long unichar;
+
+struct stat;
+#define FILE_T_LOCAL 1
+#define FILE_T_WINDOWS 2
+protected const char *file_fmttime(uint64_t, int, char *);
+protected struct magic_set *file_ms_alloc(int);
+protected void file_ms_free(struct magic_set *);
+protected int file_buffer(struct magic_set *, int, const char *, const void *,
+ size_t);
+protected int file_fsmagic(struct magic_set *, const char *, struct stat *);
+protected int file_pipe2file(struct magic_set *, int, const void *, size_t);
+protected int file_vprintf(struct magic_set *, const char *, va_list)
+ __attribute__((__format__(__printf__, 2, 0)));
+protected size_t file_printedlen(const struct magic_set *);
+protected int file_replace(struct magic_set *, const char *, const char *);
+protected int file_printf(struct magic_set *, const char *, ...)
+ __attribute__((__format__(__printf__, 2, 3)));
+protected int file_reset(struct magic_set *, int);
+protected int file_tryelf(struct magic_set *, int, const unsigned char *,
+ size_t);
+protected int file_trycdf(struct magic_set *, int, const unsigned char *,
+ size_t);
+#if HAVE_FORK
+protected int file_zmagic(struct magic_set *, int, const char *,
+ const unsigned char *, size_t);
+#endif
+protected int file_ascmagic(struct magic_set *, const unsigned char *, size_t,
+ int);
+protected int file_ascmagic_with_encoding(struct magic_set *,
+ const unsigned char *, size_t, unichar *, size_t, const char *,
+ const char *, int);
+protected int file_encoding(struct magic_set *, const unsigned char *, size_t,
+ unichar **, size_t *, const char **, const char **, const char **);
+protected int file_is_tar(struct magic_set *, const unsigned char *, size_t);
+protected int file_softmagic(struct magic_set *, const unsigned char *, size_t,
+ uint16_t *, uint16_t *, int, int);
+protected int file_apprentice(struct magic_set *, const char *, int);
+protected int buffer_apprentice(struct magic_set *, struct magic **,
+ size_t *, size_t);
+protected int file_magicfind(struct magic_set *, const char *, struct mlist *);
+protected uint64_t file_signextend(struct magic_set *, struct magic *,
+ uint64_t);
+protected void file_badread(struct magic_set *);
+protected void file_badseek(struct magic_set *);
+protected void file_oomem(struct magic_set *, size_t);
+protected void file_error(struct magic_set *, int, const char *, ...)
+ __attribute__((__format__(__printf__, 3, 4)));
+protected void file_magerror(struct magic_set *, const char *, ...)
+ __attribute__((__format__(__printf__, 2, 3)));
+protected void file_magwarn(struct magic_set *, const char *, ...)
+ __attribute__((__format__(__printf__, 2, 3)));
+protected void file_mdump(struct magic *);
+protected void file_showstr(FILE *, const char *, size_t);
+protected size_t file_mbswidth(const char *);
+protected const char *file_getbuffer(struct magic_set *);
+protected ssize_t sread(int, void *, size_t, int);
+protected int file_check_mem(struct magic_set *, unsigned int);
+protected int file_looks_utf8(const unsigned char *, size_t, unichar *,
+ size_t *);
+protected size_t file_pstring_length_size(const struct magic *);
+protected size_t file_pstring_get_length(const struct magic *, const char *);
+protected char * file_printable(char *, size_t, const char *);
+#ifdef __EMX__
+protected int file_os2_apptype(struct magic_set *, const char *, const void *,
+ size_t);
+#endif /* __EMX__ */
+
+#if defined(HAVE_LOCALE_H)
+#include <locale.h>
+#endif
+#if defined(HAVE_XLOCALE_H)
+#include <xlocale.h>
+#endif
+
+typedef struct {
+ const char *pat;
+#if defined(HAVE_NEWLOCALE) && defined(HAVE_USELOCALE) && defined(HAVE_FREELOCALE)
+#define USE_C_LOCALE
+ locale_t old_lc_ctype;
+ locale_t c_lc_ctype;
+#else
+ char *old_lc_ctype;
+#endif
+ int rc;
+ regex_t rx;
+} file_regex_t;
+
+protected int file_regcomp(file_regex_t *, const char *, int);
+protected int file_regexec(file_regex_t *, const char *, size_t, regmatch_t *,
+ int);
+protected void file_regfree(file_regex_t *);
+protected void file_regerror(file_regex_t *, int, struct magic_set *);
+
+typedef struct {
+ char *buf;
+ uint32_t offset;
+} file_pushbuf_t;
+
+protected file_pushbuf_t *file_push_buffer(struct magic_set *);
+protected char *file_pop_buffer(struct magic_set *, file_pushbuf_t *);
+
+#ifndef COMPILE_ONLY
+extern const char *file_names[];
+extern const size_t file_nnames;
+#endif
+
+#ifndef HAVE_STRERROR
+extern int sys_nerr;
+extern char *sys_errlist[];
+#define strerror(e) \
+ (((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
+#endif
+
+#ifndef HAVE_STRTOUL
+#define strtoul(a, b, c) strtol(a, b, c)
+#endif
+
+#ifndef HAVE_PREAD
+ssize_t pread(int, void *, size_t, off_t);
+#endif
+#ifndef HAVE_VASPRINTF
+int vasprintf(char **, const char *, va_list);
+#endif
+#ifndef HAVE_ASPRINTF
+int asprintf(char **, const char *, ...);
+#endif
+#ifndef HAVE_DPRINTF
+int dprintf(int, const char *, ...);
+#endif
+
+#ifndef HAVE_STRLCPY
+size_t strlcpy(char *, const char *, size_t);
+#endif
+#ifndef HAVE_STRLCAT
+size_t strlcat(char *, const char *, size_t);
+#endif
+#ifndef HAVE_STRCASESTR
+char *strcasestr(const char *, const char *);
+#endif
+#ifndef HAVE_GETLINE
+ssize_t getline(char **, size_t *, FILE *);
+ssize_t getdelim(char **, size_t *, int, FILE *);
+#endif
+#ifndef HAVE_CTIME_R
+char *ctime_r(const time_t *, char *);
+#endif
+#ifndef HAVE_ASCTIME_R
+char *asctime_r(const struct tm *, char *);
+#endif
+#ifndef HAVE_GMTIME_R
+struct tm *gmtime_r(const time_t *, struct tm *);
+#endif
+#ifndef HAVE_LOCALTIME_R
+struct tm *localtime_r(const time_t *, struct tm *);
+#endif
+#ifndef HAVE_FMTCHECK
+const char *fmtcheck(const char *, const char *)
+ __attribute__((__format_arg__(2)));
+#endif
+
+#if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
+#define QUICK
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#ifndef __cplusplus
+#if defined(__GNUC__) && (__GNUC__ >= 3)
+#define FILE_RCSID(id) \
+static const char rcsid[] __attribute__((__used__)) = id;
+#else
+#define FILE_RCSID(id) \
+static const char *rcsid(const char *p) { \
+ return rcsid(p = id); \
+}
+#endif
+#else
+#define FILE_RCSID(id)
+#endif
+#ifndef __RCSID
+#define __RCSID(a)
+#endif
+
+#endif /* __file_h__ */
Property changes on: trunk/contrib/file/src/file.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/file_opts.h
===================================================================
--- trunk/contrib/file/src/file_opts.h (rev 0)
+++ trunk/contrib/file/src/file_opts.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,58 @@
+/*
+ * Table of command-line options
+ *
+ * The first column specifies the short name, if any, or 0 if none.
+ * The second column specifies the long name.
+ * The third column specifies whether it takes a parameter.
+ * The fourth column is the documentation.
+ *
+ * N.B. The long options' order must correspond to the code in file.c,
+ * and OPTSTRING must be kept up-to-date with the short options.
+ * Pay particular attention to the numbers of long-only options in the
+ * switch statement!
+ */
+
+OPT_LONGONLY("help", 0, 0, " display this help and exit\n", OPT_HELP)
+OPT('v', "version", 0, 0, " output version information and exit\n")
+OPT('m', "magic-file", 1, 0, " LIST use LIST as a colon-separated list of magic\n"
+ " number files\n")
+OPT('z', "uncompress", 0, 0, " try to look inside compressed files\n")
+OPT('Z', "uncompress-noreport", 0, 0, " only print the contents of compressed files\n")
+OPT('b', "brief", 0, 0, " do not prepend filenames to output lines\n")
+OPT('c', "checking-printout", 0, 0, " print the parsed form of the magic file, use in\n"
+ " conjunction with -m to debug a new magic file\n"
+ " before installing it\n")
+OPT('e', "exclude", 1, 0, " TEST exclude TEST from the list of test to be\n"
+ " performed for file. Valid tests are:\n"
+ " %o\n")
+OPT('f', "files-from", 1, 0, " FILE read the filenames to be examined from FILE\n")
+OPT('F', "separator", 1, 0, " STRING use string as separator instead of `:'\n")
+OPT('i', "mime", 0, 0, " output MIME type strings (--mime-type and\n"
+ " --mime-encoding)\n")
+OPT_LONGONLY("apple", 0, 0, " output the Apple CREATOR/TYPE\n", OPT_APPLE)
+OPT_LONGONLY("extension", 0, 0, " output a slash-separated list of extensions\n", OPT_EXTENSIONS)
+OPT_LONGONLY("mime-type", 0, 0, " output the MIME type\n", OPT_MIME_TYPE)
+OPT_LONGONLY("mime-encoding", 0, 0, " output the MIME encoding\n", OPT_MIME_ENCODING)
+OPT('k', "keep-going", 0, 0, " don't stop at the first match\n")
+OPT('l', "list", 0, 0, " list magic strength\n")
+#ifdef S_IFLNK
+OPT('L', "dereference", 0, 1, " follow symlinks")
+OPT('h', "no-dereference", 0, 2, " don't follow symlinks")
+#endif
+OPT('n', "no-buffer", 0, 0, " do not buffer output\n")
+OPT('N', "no-pad", 0, 0, " do not pad output\n")
+OPT('0', "print0", 0, 0, " terminate filenames with ASCII NUL\n")
+#if defined(HAVE_UTIME) || defined(HAVE_UTIMES)
+OPT('p', "preserve-date", 0, 0, " preserve access times on files\n")
+#endif
+OPT('P', "parameter", 1, 0, " set file engine parameter limits\n"
+ " indir 15 recursion limit for indirection\n"
+ " name 30 use limit for name/use magic\n"
+ " elf_notes 256 max ELF notes processed\n"
+ " elf_phnum 128 max ELF prog sections processed\n"
+ " elf_shnum 32768 max ELF sections processed\n")
+OPT('r', "raw", 0, 0, " don't translate unprintable chars to \\ooo\n")
+OPT('s', "special-files", 0, 0, " treat special (block/char devices) files as\n"
+ " ordinary ones\n")
+OPT('C', "compile", 0, 0, " compile file specified by -m\n")
+OPT('d', "debug", 0, 0, " print debugging messages\n")
Property changes on: trunk/contrib/file/src/file_opts.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/fmtcheck.c
===================================================================
--- trunk/contrib/file/src/fmtcheck.c (rev 0)
+++ trunk/contrib/file/src/fmtcheck.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,251 @@
+/* $NetBSD: fmtcheck.c,v 1.8 2008/04/28 20:22:59 martin Exp $ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code was contributed to The NetBSD Foundation by Allen Briggs.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "file.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+enum __e_fmtcheck_types {
+ FMTCHECK_START,
+ FMTCHECK_SHORT,
+ FMTCHECK_INT,
+ FMTCHECK_LONG,
+ FMTCHECK_QUAD,
+ FMTCHECK_SHORTPOINTER,
+ FMTCHECK_INTPOINTER,
+ FMTCHECK_LONGPOINTER,
+ FMTCHECK_QUADPOINTER,
+ FMTCHECK_DOUBLE,
+ FMTCHECK_LONGDOUBLE,
+ FMTCHECK_STRING,
+ FMTCHECK_WIDTH,
+ FMTCHECK_PRECISION,
+ FMTCHECK_DONE,
+ FMTCHECK_UNKNOWN
+};
+typedef enum __e_fmtcheck_types EFT;
+
+#define RETURN(pf,f,r) do { \
+ *(pf) = (f); \
+ return r; \
+ } /*NOTREACHED*/ /*CONSTCOND*/ while (0)
+
+static EFT
+get_next_format_from_precision(const char **pf)
+{
+ int sh, lg, quad, longdouble;
+ const char *f;
+
+ sh = lg = quad = longdouble = 0;
+
+ f = *pf;
+ switch (*f) {
+ case 'h':
+ f++;
+ sh = 1;
+ break;
+ case 'l':
+ f++;
+ if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN);
+ if (*f == 'l') {
+ f++;
+ quad = 1;
+ } else {
+ lg = 1;
+ }
+ break;
+ case 'q':
+ f++;
+ quad = 1;
+ break;
+ case 'L':
+ f++;
+ longdouble = 1;
+ break;
+#ifdef WIN32
+ case 'I':
+ f++;
+ if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN);
+ if (*f == '3' && f[1] == '2') {
+ f += 2;
+ } else if (*f == '6' && f[1] == '4') {
+ f += 2;
+ quad = 1;
+ }
+#ifdef _WIN64
+ else {
+ quad = 1;
+ }
+#endif
+ break;
+#endif
+ default:
+ break;
+ }
+ if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN);
+ if (strchr("diouxX", *f)) {
+ if (longdouble)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ if (lg)
+ RETURN(pf,f,FMTCHECK_LONG);
+ if (quad)
+ RETURN(pf,f,FMTCHECK_QUAD);
+ RETURN(pf,f,FMTCHECK_INT);
+ }
+ if (*f == 'n') {
+ if (longdouble)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ if (sh)
+ RETURN(pf,f,FMTCHECK_SHORTPOINTER);
+ if (lg)
+ RETURN(pf,f,FMTCHECK_LONGPOINTER);
+ if (quad)
+ RETURN(pf,f,FMTCHECK_QUADPOINTER);
+ RETURN(pf,f,FMTCHECK_INTPOINTER);
+ }
+ if (strchr("DOU", *f)) {
+ if (sh + lg + quad + longdouble)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ RETURN(pf,f,FMTCHECK_LONG);
+ }
+ if (strchr("eEfg", *f)) {
+ if (longdouble)
+ RETURN(pf,f,FMTCHECK_LONGDOUBLE);
+ if (sh + lg + quad)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ RETURN(pf,f,FMTCHECK_DOUBLE);
+ }
+ if (*f == 'c') {
+ if (sh + lg + quad + longdouble)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ RETURN(pf,f,FMTCHECK_INT);
+ }
+ if (*f == 's') {
+ if (sh + lg + quad + longdouble)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ RETURN(pf,f,FMTCHECK_STRING);
+ }
+ if (*f == 'p') {
+ if (sh + lg + quad + longdouble)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ RETURN(pf,f,FMTCHECK_LONG);
+ }
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ /*NOTREACHED*/
+}
+
+static EFT
+get_next_format_from_width(const char **pf)
+{
+ const char *f;
+
+ f = *pf;
+ if (*f == '.') {
+ f++;
+ if (*f == '*') {
+ RETURN(pf,f,FMTCHECK_PRECISION);
+ }
+ /* eat any precision (empty is allowed) */
+ while (isdigit((unsigned char)*f)) f++;
+ if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN);
+ }
+ RETURN(pf,f,get_next_format_from_precision(pf));
+ /*NOTREACHED*/
+}
+
+static EFT
+get_next_format(const char **pf, EFT eft)
+{
+ int infmt;
+ const char *f;
+
+ if (eft == FMTCHECK_WIDTH) {
+ (*pf)++;
+ return get_next_format_from_width(pf);
+ } else if (eft == FMTCHECK_PRECISION) {
+ (*pf)++;
+ return get_next_format_from_precision(pf);
+ }
+
+ f = *pf;
+ infmt = 0;
+ while (!infmt) {
+ f = strchr(f, '%');
+ if (f == NULL)
+ RETURN(pf,f,FMTCHECK_DONE);
+ f++;
+ if (!*f)
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ if (*f != '%')
+ infmt = 1;
+ else
+ f++;
+ }
+
+ /* Eat any of the flags */
+ while (*f && (strchr("#0- +", *f)))
+ f++;
+
+ if (*f == '*') {
+ RETURN(pf,f,FMTCHECK_WIDTH);
+ }
+ /* eat any width */
+ while (isdigit((unsigned char)*f)) f++;
+ if (!*f) {
+ RETURN(pf,f,FMTCHECK_UNKNOWN);
+ }
+
+ RETURN(pf,f,get_next_format_from_width(pf));
+ /*NOTREACHED*/
+}
+
+const char *
+fmtcheck(const char *f1, const char *f2)
+{
+ const char *f1p, *f2p;
+ EFT f1t, f2t;
+
+ if (!f1) return f2;
+
+ f1p = f1;
+ f1t = FMTCHECK_START;
+ f2p = f2;
+ f2t = FMTCHECK_START;
+ while ((f1t = get_next_format(&f1p, f1t)) != FMTCHECK_DONE) {
+ if (f1t == FMTCHECK_UNKNOWN)
+ return f2;
+ f2t = get_next_format(&f2p, f2t);
+ if (f1t != f2t)
+ return f2;
+ }
+ return f1;
+}
Property changes on: trunk/contrib/file/src/fmtcheck.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/fsmagic.c
===================================================================
--- trunk/contrib/file/src/fsmagic.c (rev 0)
+++ trunk/contrib/file/src/fsmagic.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,416 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * fsmagic - magic based on filesystem info - directory, special files, etc.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: fsmagic.c,v 1.77 2017/05/24 19:17:50 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+/* Since major is a function on SVR4, we cannot use `ifndef major'. */
+#ifdef MAJOR_IN_MKDEV
+# include <sys/mkdev.h>
+# define HAVE_MAJOR
+#endif
+#ifdef MAJOR_IN_SYSMACROS
+# include <sys/sysmacros.h>
+# define HAVE_MAJOR
+#endif
+#ifdef major /* Might be defined in sys/types.h. */
+# define HAVE_MAJOR
+#endif
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#ifndef HAVE_MAJOR
+# define major(dev) (((dev) >> 8) & 0xff)
+# define minor(dev) ((dev) & 0xff)
+#endif
+#undef HAVE_MAJOR
+#ifdef S_IFLNK
+private int
+bad_link(struct magic_set *ms, int err, char *buf)
+{
+ int mime = ms->flags & MAGIC_MIME;
+ if ((mime & MAGIC_MIME_TYPE) &&
+ file_printf(ms, "inode/symlink")
+ == -1)
+ return -1;
+ else if (!mime) {
+ if (ms->flags & MAGIC_ERROR) {
+ file_error(ms, err,
+ "broken symbolic link to %s", buf);
+ return -1;
+ }
+ if (file_printf(ms, "broken symbolic link to %s", buf) == -1)
+ return -1;
+ }
+ return 1;
+}
+#endif
+private int
+handle_mime(struct magic_set *ms, int mime, const char *str)
+{
+ if ((mime & MAGIC_MIME_TYPE)) {
+ if (file_printf(ms, "inode/%s", str) == -1)
+ return -1;
+ if ((mime & MAGIC_MIME_ENCODING) && file_printf(ms,
+ "; charset=") == -1)
+ return -1;
+ }
+ if ((mime & MAGIC_MIME_ENCODING) && file_printf(ms, "binary") == -1)
+ return -1;
+ return 0;
+}
+
+protected int
+file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
+{
+ int ret, did = 0;
+ int mime = ms->flags & MAGIC_MIME;
+ int silent = ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION);
+#ifdef S_IFLNK
+ char buf[BUFSIZ+4];
+ ssize_t nch;
+ struct stat tstatbuf;
+#endif
+
+ if (fn == NULL)
+ return 0;
+
+#define COMMA (did++ ? ", " : "")
+ /*
+ * Fstat is cheaper but fails for files you don't have read perms on.
+ * On 4.2BSD and similar systems, use lstat() to identify symlinks.
+ */
+#ifdef S_IFLNK
+ if ((ms->flags & MAGIC_SYMLINK) == 0)
+ ret = lstat(fn, sb);
+ else
+#endif
+ ret = stat(fn, sb); /* don't merge into if; see "ret =" above */
+
+#ifdef WIN32
+ {
+ HANDLE hFile = CreateFile((LPCSTR)fn, 0, FILE_SHARE_DELETE |
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,
+ NULL);
+ if (hFile != INVALID_HANDLE_VALUE) {
+ /*
+ * Stat failed, but we can still open it - assume it's
+ * a block device, if nothing else.
+ */
+ if (ret) {
+ sb->st_mode = S_IFBLK;
+ ret = 0;
+ }
+ switch (GetFileType(hFile)) {
+ case FILE_TYPE_CHAR:
+ sb->st_mode |= S_IFCHR;
+ sb->st_mode &= ~S_IFREG;
+ break;
+ case FILE_TYPE_PIPE:
+ sb->st_mode |= S_IFIFO;
+ sb->st_mode &= ~S_IFREG;
+ break;
+ }
+ CloseHandle(hFile);
+ }
+ }
+#endif
+
+ if (ret) {
+ if (ms->flags & MAGIC_ERROR) {
+ file_error(ms, errno, "cannot stat `%s'", fn);
+ return -1;
+ }
+ if (file_printf(ms, "cannot open `%s' (%s)",
+ fn, strerror(errno)) == -1)
+ return -1;
+ return 0;
+ }
+
+ ret = 1;
+ if (!mime && !silent) {
+#ifdef S_ISUID
+ if (sb->st_mode & S_ISUID)
+ if (file_printf(ms, "%ssetuid", COMMA) == -1)
+ return -1;
+#endif
+#ifdef S_ISGID
+ if (sb->st_mode & S_ISGID)
+ if (file_printf(ms, "%ssetgid", COMMA) == -1)
+ return -1;
+#endif
+#ifdef S_ISVTX
+ if (sb->st_mode & S_ISVTX)
+ if (file_printf(ms, "%ssticky", COMMA) == -1)
+ return -1;
+#endif
+ }
+
+ switch (sb->st_mode & S_IFMT) {
+ case S_IFDIR:
+ if (mime) {
+ if (handle_mime(ms, mime, "directory") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms, "%sdirectory", COMMA) == -1)
+ return -1;
+ break;
+#ifdef S_IFCHR
+ case S_IFCHR:
+ /*
+ * If -s has been specified, treat character special files
+ * like ordinary files. Otherwise, just report that they
+ * are block special files and go on to the next file.
+ */
+ if ((ms->flags & MAGIC_DEVICES) != 0) {
+ ret = 0;
+ break;
+ }
+ if (mime) {
+ if (handle_mime(ms, mime, "chardevice") == -1)
+ return -1;
+ } else if (silent) {
+ } else {
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+# ifdef dv_unit
+ if (file_printf(ms, "%scharacter special (%d/%d/%d)",
+ COMMA, major(sb->st_rdev), dv_unit(sb->st_rdev),
+ dv_subunit(sb->st_rdev)) == -1)
+ return -1;
+# else
+ if (file_printf(ms, "%scharacter special (%ld/%ld)",
+ COMMA, (long)major(sb->st_rdev),
+ (long)minor(sb->st_rdev)) == -1)
+ return -1;
+# endif
+#else
+ if (file_printf(ms, "%scharacter special", COMMA) == -1)
+ return -1;
+#endif
+ }
+ break;
+#endif
+#ifdef S_IFBLK
+ case S_IFBLK:
+ /*
+ * If -s has been specified, treat block special files
+ * like ordinary files. Otherwise, just report that they
+ * are block special files and go on to the next file.
+ */
+ if ((ms->flags & MAGIC_DEVICES) != 0) {
+ ret = 0;
+ break;
+ }
+ if (mime) {
+ if (handle_mime(ms, mime, "blockdevice") == -1)
+ return -1;
+ } else if (silent) {
+ } else {
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+# ifdef dv_unit
+ if (file_printf(ms, "%sblock special (%d/%d/%d)",
+ COMMA, major(sb->st_rdev), dv_unit(sb->st_rdev),
+ dv_subunit(sb->st_rdev)) == -1)
+ return -1;
+# else
+ if (file_printf(ms, "%sblock special (%ld/%ld)",
+ COMMA, (long)major(sb->st_rdev),
+ (long)minor(sb->st_rdev)) == -1)
+ return -1;
+# endif
+#else
+ if (file_printf(ms, "%sblock special", COMMA) == -1)
+ return -1;
+#endif
+ }
+ break;
+#endif
+ /* TODO add code to handle V7 MUX and Blit MUX files */
+#ifdef S_IFIFO
+ case S_IFIFO:
+ if((ms->flags & MAGIC_DEVICES) != 0)
+ break;
+ if (mime) {
+ if (handle_mime(ms, mime, "fifo") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms, "%sfifo (named pipe)", COMMA) == -1)
+ return -1;
+ break;
+#endif
+#ifdef S_IFDOOR
+ case S_IFDOOR:
+ if (mime) {
+ if (handle_mime(ms, mime, "door") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms, "%sdoor", COMMA) == -1)
+ return -1;
+ break;
+#endif
+#ifdef S_IFLNK
+ case S_IFLNK:
+ if ((nch = readlink(fn, buf, BUFSIZ-1)) <= 0) {
+ if (ms->flags & MAGIC_ERROR) {
+ file_error(ms, errno, "unreadable symlink `%s'",
+ fn);
+ return -1;
+ }
+ if (mime) {
+ if (handle_mime(ms, mime, "symlink") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms,
+ "%sunreadable symlink `%s' (%s)", COMMA, fn,
+ strerror(errno)) == -1)
+ return -1;
+ break;
+ }
+ buf[nch] = '\0'; /* readlink(2) does not do this */
+
+ /* If broken symlink, say so and quit early. */
+ if (*buf == '/') {
+ if (stat(buf, &tstatbuf) < 0)
+ return bad_link(ms, errno, buf);
+ } else {
+ char *tmp;
+ char buf2[BUFSIZ+BUFSIZ+4];
+
+ if ((tmp = strrchr(fn, '/')) == NULL) {
+ tmp = buf; /* in current directory anyway */
+ } else {
+ if (tmp - fn + 1 > BUFSIZ) {
+ if (ms->flags & MAGIC_ERROR) {
+ file_error(ms, 0,
+ "path too long: `%s'", buf);
+ return -1;
+ }
+ if (mime) {
+ if (handle_mime(ms, mime,
+ "x-path-too-long") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms,
+ "%spath too long: `%s'", COMMA,
+ fn) == -1)
+ return -1;
+ break;
+ }
+ /* take dir part */
+ (void)strlcpy(buf2, fn, sizeof buf2);
+ buf2[tmp - fn + 1] = '\0';
+ /* plus (rel) link */
+ (void)strlcat(buf2, buf, sizeof buf2);
+ tmp = buf2;
+ }
+ if (stat(tmp, &tstatbuf) < 0)
+ return bad_link(ms, errno, buf);
+ }
+
+ /* Otherwise, handle it. */
+ if ((ms->flags & MAGIC_SYMLINK) != 0) {
+ const char *p;
+ ms->flags &= MAGIC_SYMLINK;
+ p = magic_file(ms, buf);
+ ms->flags |= MAGIC_SYMLINK;
+ if (p == NULL)
+ return -1;
+ } else { /* just print what it points to */
+ if (mime) {
+ if (handle_mime(ms, mime, "symlink") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms, "%ssymbolic link to %s",
+ COMMA, buf) == -1)
+ return -1;
+ }
+ break;
+#endif
+#ifdef S_IFSOCK
+#ifndef __COHERENT__
+ case S_IFSOCK:
+ if (mime) {
+ if (handle_mime(ms, mime, "socket") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms, "%ssocket", COMMA) == -1)
+ return -1;
+ break;
+#endif
+#endif
+ case S_IFREG:
+ /*
+ * regular file, check next possibility
+ *
+ * If stat() tells us the file has zero length, report here that
+ * the file is empty, so we can skip all the work of opening and
+ * reading the file.
+ * But if the -s option has been given, we skip this
+ * optimization, since on some systems, stat() reports zero
+ * size for raw disk partitions. (If the block special device
+ * really has zero length, the fact that it is empty will be
+ * detected and reported correctly when we read the file.)
+ */
+ if ((ms->flags & MAGIC_DEVICES) == 0 && sb->st_size == 0) {
+ if (mime) {
+ if (handle_mime(ms, mime, "x-empty") == -1)
+ return -1;
+ } else if (silent) {
+ } else if (file_printf(ms, "%sempty", COMMA) == -1)
+ return -1;
+ break;
+ }
+ ret = 0;
+ break;
+
+ default:
+ file_error(ms, 0, "invalid mode 0%o", sb->st_mode);
+ return -1;
+ /*NOTREACHED*/
+ }
+
+ if (!silent && !mime && did && ret == 0) {
+ if (file_printf(ms, " ") == -1)
+ return -1;
+ }
+ return ret;
+}
Property changes on: trunk/contrib/file/src/fsmagic.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/funcs.c
===================================================================
--- trunk/contrib/file/src/funcs.c (rev 0)
+++ trunk/contrib/file/src/funcs.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,603 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: funcs.c,v 1.93 2017/08/28 13:39:18 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <assert.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#if defined(HAVE_WCHAR_H)
+#include <wchar.h>
+#endif
+#if defined(HAVE_WCTYPE_H)
+#include <wctype.h>
+#endif
+#if defined(HAVE_LIMITS_H)
+#include <limits.h>
+#endif
+
+#ifndef SIZE_MAX
+#define SIZE_MAX ((size_t)~0)
+#endif
+
+/*
+ * Like printf, only we append to a buffer.
+ */
+protected int
+file_vprintf(struct magic_set *ms, const char *fmt, va_list ap)
+{
+ int len;
+ char *buf, *newstr;
+
+ if (ms->event_flags & EVENT_HAD_ERR)
+ return 0;
+ len = vasprintf(&buf, fmt, ap);
+ if (len < 0)
+ goto out;
+
+ if (ms->o.buf != NULL) {
+ len = asprintf(&newstr, "%s%s", ms->o.buf, buf);
+ free(buf);
+ if (len < 0)
+ goto out;
+ free(ms->o.buf);
+ buf = newstr;
+ }
+ ms->o.buf = buf;
+ return 0;
+out:
+ fprintf(stderr, "vasprintf failed (%s)", strerror(errno));
+ return -1;
+}
+
+protected int
+file_printf(struct magic_set *ms, const char *fmt, ...)
+{
+ int rv;
+ va_list ap;
+
+ va_start(ap, fmt);
+ rv = file_vprintf(ms, fmt, ap);
+ va_end(ap);
+ return rv;
+}
+
+/*
+ * error - print best error message possible
+ */
+/*VARARGS*/
+__attribute__((__format__(__printf__, 3, 0)))
+private void
+file_error_core(struct magic_set *ms, int error, const char *f, va_list va,
+ size_t lineno)
+{
+ /* Only the first error is ok */
+ if (ms->event_flags & EVENT_HAD_ERR)
+ return;
+ if (lineno != 0) {
+ free(ms->o.buf);
+ ms->o.buf = NULL;
+ file_printf(ms, "line %" SIZE_T_FORMAT "u:", lineno);
+ }
+ if (ms->o.buf && *ms->o.buf)
+ file_printf(ms, " ");
+ file_vprintf(ms, f, va);
+ if (error > 0)
+ file_printf(ms, " (%s)", strerror(error));
+ ms->event_flags |= EVENT_HAD_ERR;
+ ms->error = error;
+}
+
+/*VARARGS*/
+protected void
+file_error(struct magic_set *ms, int error, const char *f, ...)
+{
+ va_list va;
+ va_start(va, f);
+ file_error_core(ms, error, f, va, 0);
+ va_end(va);
+}
+
+/*
+ * Print an error with magic line number.
+ */
+/*VARARGS*/
+protected void
+file_magerror(struct magic_set *ms, const char *f, ...)
+{
+ va_list va;
+ va_start(va, f);
+ file_error_core(ms, 0, f, va, ms->line);
+ va_end(va);
+}
+
+protected void
+file_oomem(struct magic_set *ms, size_t len)
+{
+ file_error(ms, errno, "cannot allocate %" SIZE_T_FORMAT "u bytes",
+ len);
+}
+
+protected void
+file_badseek(struct magic_set *ms)
+{
+ file_error(ms, errno, "error seeking");
+}
+
+protected void
+file_badread(struct magic_set *ms)
+{
+ file_error(ms, errno, "error reading");
+}
+
+#ifndef COMPILE_ONLY
+
+static int
+checkdone(struct magic_set *ms, int *rv)
+{
+ if ((ms->flags & MAGIC_CONTINUE) == 0)
+ return 1;
+ if (file_printf(ms, "\n- ") == -1)
+ *rv = -1;
+ return 0;
+}
+
+/*ARGSUSED*/
+protected int
+file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__unused__)),
+ const void *buf, size_t nb)
+{
+ int m = 0, rv = 0, looks_text = 0;
+ const unsigned char *ubuf = CAST(const unsigned char *, buf);
+ unichar *u8buf = NULL;
+ size_t ulen;
+ const char *code = NULL;
+ const char *code_mime = "binary";
+ const char *type = "application/octet-stream";
+ const char *def = "data";
+ const char *ftype = NULL;
+
+ if (nb == 0) {
+ def = "empty";
+ type = "application/x-empty";
+ goto simple;
+ } else if (nb == 1) {
+ def = "very short file (no magic)";
+ goto simple;
+ }
+
+ if ((ms->flags & MAGIC_NO_CHECK_ENCODING) == 0) {
+ looks_text = file_encoding(ms, ubuf, nb, &u8buf, &ulen,
+ &code, &code_mime, &ftype);
+ }
+
+#ifdef __EMX__
+ if ((ms->flags & MAGIC_NO_CHECK_APPTYPE) == 0 && inname) {
+ m = file_os2_apptype(ms, inname, buf, nb);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try os2_apptype %d]\n", m);
+ switch (m) {
+ case -1:
+ return -1;
+ case 0:
+ break;
+ default:
+ return 1;
+ }
+ }
+#endif
+#if HAVE_FORK
+ /* try compression stuff */
+ if ((ms->flags & MAGIC_NO_CHECK_COMPRESS) == 0) {
+ m = file_zmagic(ms, fd, inname, ubuf, nb);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try zmagic %d]\n", m);
+ if (m) {
+ goto done_encoding;
+ }
+ }
+#endif
+ /* Check if we have a tar file */
+ if ((ms->flags & MAGIC_NO_CHECK_TAR) == 0) {
+ m = file_is_tar(ms, ubuf, nb);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try tar %d]\n", m);
+ if (m) {
+ if (checkdone(ms, &rv))
+ goto done;
+ }
+ }
+
+ /* Check if we have a CDF file */
+ if ((ms->flags & MAGIC_NO_CHECK_CDF) == 0) {
+ m = file_trycdf(ms, fd, ubuf, nb);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try cdf %d]\n", m);
+ if (m) {
+ if (checkdone(ms, &rv))
+ goto done;
+ }
+ }
+
+ /* try soft magic tests */
+ if ((ms->flags & MAGIC_NO_CHECK_SOFT) == 0) {
+ m = file_softmagic(ms, ubuf, nb, NULL, NULL, BINTEST,
+ looks_text);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try softmagic %d]\n", m);
+ if (m) {
+#ifdef BUILTIN_ELF
+ if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && m == 1 &&
+ nb > 5 && fd != -1) {
+ /*
+ * We matched something in the file, so this
+ * *might* be an ELF file, and the file is at
+ * least 5 bytes long, so if it's an ELF file
+ * it has at least one byte past the ELF magic
+ * number - try extracting information from the
+ * ELF headers that cannot easily * be
+ * extracted with rules in the magic file.
+ */
+ m = file_tryelf(ms, fd, ubuf, nb);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try elf %d]\n",
+ m);
+ }
+#endif
+ if (checkdone(ms, &rv))
+ goto done;
+ }
+ }
+
+ /* try text properties */
+ if ((ms->flags & MAGIC_NO_CHECK_TEXT) == 0) {
+
+ m = file_ascmagic(ms, ubuf, nb, looks_text);
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void)fprintf(stderr, "[try ascmagic %d]\n", m);
+ if (m) {
+ if (checkdone(ms, &rv))
+ goto done;
+ }
+ }
+
+simple:
+ /* give up */
+ m = 1;
+ if (ms->flags & MAGIC_MIME) {
+ if ((ms->flags & MAGIC_MIME_TYPE) &&
+ file_printf(ms, "%s", type) == -1)
+ rv = -1;
+ } else if (ms->flags & MAGIC_APPLE) {
+ if (file_printf(ms, "UNKNUNKN") == -1)
+ rv = -1;
+ } else if (ms->flags & MAGIC_EXTENSION) {
+ if (file_printf(ms, "???") == -1)
+ rv = -1;
+ } else {
+ if (file_printf(ms, "%s", def) == -1)
+ rv = -1;
+ }
+ done:
+ if ((ms->flags & MAGIC_MIME_ENCODING) != 0) {
+ if (ms->flags & MAGIC_MIME_TYPE)
+ if (file_printf(ms, "; charset=") == -1)
+ rv = -1;
+ if (file_printf(ms, "%s", code_mime) == -1)
+ rv = -1;
+ }
+#if HAVE_FORK
+ done_encoding:
+#endif
+ free(u8buf);
+ if (rv)
+ return rv;
+
+ return m;
+}
+#endif
+
+protected int
+file_reset(struct magic_set *ms, int checkloaded)
+{
+ if (checkloaded && ms->mlist[0] == NULL) {
+ file_error(ms, 0, "no magic files loaded");
+ return -1;
+ }
+ if (ms->o.buf) {
+ free(ms->o.buf);
+ ms->o.buf = NULL;
+ }
+ if (ms->o.pbuf) {
+ free(ms->o.pbuf);
+ ms->o.pbuf = NULL;
+ }
+ ms->event_flags &= ~EVENT_HAD_ERR;
+ ms->error = -1;
+ return 0;
+}
+
+#define OCTALIFY(n, o) \
+ /*LINTED*/ \
+ (void)(*(n)++ = '\\', \
+ *(n)++ = (((uint32_t)*(o) >> 6) & 3) + '0', \
+ *(n)++ = (((uint32_t)*(o) >> 3) & 7) + '0', \
+ *(n)++ = (((uint32_t)*(o) >> 0) & 7) + '0', \
+ (o)++)
+
+protected const char *
+file_getbuffer(struct magic_set *ms)
+{
+ char *pbuf, *op, *np;
+ size_t psize, len;
+
+ if (ms->event_flags & EVENT_HAD_ERR)
+ return NULL;
+
+ if (ms->flags & MAGIC_RAW)
+ return ms->o.buf;
+
+ if (ms->o.buf == NULL)
+ return NULL;
+
+ /* * 4 is for octal representation, + 1 is for NUL */
+ len = strlen(ms->o.buf);
+ if (len > (SIZE_MAX - 1) / 4) {
+ file_oomem(ms, len);
+ return NULL;
+ }
+ psize = len * 4 + 1;
+ if ((pbuf = CAST(char *, realloc(ms->o.pbuf, psize))) == NULL) {
+ file_oomem(ms, psize);
+ return NULL;
+ }
+ ms->o.pbuf = pbuf;
+
+#if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH)
+ {
+ mbstate_t state;
+ wchar_t nextchar;
+ int mb_conv = 1;
+ size_t bytesconsumed;
+ char *eop;
+ (void)memset(&state, 0, sizeof(mbstate_t));
+
+ np = ms->o.pbuf;
+ op = ms->o.buf;
+ eop = op + len;
+
+ while (op < eop) {
+ bytesconsumed = mbrtowc(&nextchar, op,
+ (size_t)(eop - op), &state);
+ if (bytesconsumed == (size_t)(-1) ||
+ bytesconsumed == (size_t)(-2)) {
+ mb_conv = 0;
+ break;
+ }
+
+ if (iswprint(nextchar)) {
+ (void)memcpy(np, op, bytesconsumed);
+ op += bytesconsumed;
+ np += bytesconsumed;
+ } else {
+ while (bytesconsumed-- > 0)
+ OCTALIFY(np, op);
+ }
+ }
+ *np = '\0';
+
+ /* Parsing succeeded as a multi-byte sequence */
+ if (mb_conv != 0)
+ return ms->o.pbuf;
+ }
+#endif
+
+ for (np = ms->o.pbuf, op = ms->o.buf; *op;) {
+ if (isprint((unsigned char)*op)) {
+ *np++ = *op++;
+ } else {
+ OCTALIFY(np, op);
+ }
+ }
+ *np = '\0';
+ return ms->o.pbuf;
+}
+
+protected int
+file_check_mem(struct magic_set *ms, unsigned int level)
+{
+ size_t len;
+
+ if (level >= ms->c.len) {
+ len = (ms->c.len = 20 + level) * sizeof(*ms->c.li);
+ ms->c.li = CAST(struct level_info *, (ms->c.li == NULL) ?
+ malloc(len) :
+ realloc(ms->c.li, len));
+ if (ms->c.li == NULL) {
+ file_oomem(ms, len);
+ return -1;
+ }
+ }
+ ms->c.li[level].got_match = 0;
+#ifdef ENABLE_CONDITIONALS
+ ms->c.li[level].last_match = 0;
+ ms->c.li[level].last_cond = COND_NONE;
+#endif /* ENABLE_CONDITIONALS */
+ return 0;
+}
+
+protected size_t
+file_printedlen(const struct magic_set *ms)
+{
+ return ms->o.buf == NULL ? 0 : strlen(ms->o.buf);
+}
+
+protected int
+file_replace(struct magic_set *ms, const char *pat, const char *rep)
+{
+ file_regex_t rx;
+ int rc, rv = -1;
+
+ rc = file_regcomp(&rx, pat, REG_EXTENDED);
+ if (rc) {
+ file_regerror(&rx, rc, ms);
+ } else {
+ regmatch_t rm;
+ int nm = 0;
+ while (file_regexec(&rx, ms->o.buf, 1, &rm, 0) == 0) {
+ ms->o.buf[rm.rm_so] = '\0';
+ if (file_printf(ms, "%s%s", rep,
+ rm.rm_eo != 0 ? ms->o.buf + rm.rm_eo : "") == -1)
+ goto out;
+ nm++;
+ }
+ rv = nm;
+ }
+out:
+ file_regfree(&rx);
+ return rv;
+}
+
+protected int
+file_regcomp(file_regex_t *rx, const char *pat, int flags)
+{
+#ifdef USE_C_LOCALE
+ rx->c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0);
+ assert(rx->c_lc_ctype != NULL);
+ rx->old_lc_ctype = uselocale(rx->c_lc_ctype);
+ assert(rx->old_lc_ctype != NULL);
+#else
+ rx->old_lc_ctype = setlocale(LC_CTYPE, "C");
+#endif
+ rx->pat = pat;
+
+ return rx->rc = regcomp(&rx->rx, pat, flags);
+}
+
+protected int
+file_regexec(file_regex_t *rx, const char *str, size_t nmatch,
+ regmatch_t* pmatch, int eflags)
+{
+ assert(rx->rc == 0);
+ /* XXX: force initialization because glibc does not always do this */
+ memset(pmatch, 0, nmatch * sizeof(*pmatch));
+ return regexec(&rx->rx, str, nmatch, pmatch, eflags);
+}
+
+protected void
+file_regfree(file_regex_t *rx)
+{
+ if (rx->rc == 0)
+ regfree(&rx->rx);
+#ifdef USE_C_LOCALE
+ (void)uselocale(rx->old_lc_ctype);
+ freelocale(rx->c_lc_ctype);
+#else
+ (void)setlocale(LC_CTYPE, rx->old_lc_ctype);
+#endif
+}
+
+protected void
+file_regerror(file_regex_t *rx, int rc, struct magic_set *ms)
+{
+ char errmsg[512];
+
+ (void)regerror(rc, &rx->rx, errmsg, sizeof(errmsg));
+ file_magerror(ms, "regex error %d for `%s', (%s)", rc, rx->pat,
+ errmsg);
+}
+
+protected file_pushbuf_t *
+file_push_buffer(struct magic_set *ms)
+{
+ file_pushbuf_t *pb;
+
+ if (ms->event_flags & EVENT_HAD_ERR)
+ return NULL;
+
+ if ((pb = (CAST(file_pushbuf_t *, malloc(sizeof(*pb))))) == NULL)
+ return NULL;
+
+ pb->buf = ms->o.buf;
+ pb->offset = ms->offset;
+
+ ms->o.buf = NULL;
+ ms->offset = 0;
+
+ return pb;
+}
+
+protected char *
+file_pop_buffer(struct magic_set *ms, file_pushbuf_t *pb)
+{
+ char *rbuf;
+
+ if (ms->event_flags & EVENT_HAD_ERR) {
+ free(pb->buf);
+ free(pb);
+ return NULL;
+ }
+
+ rbuf = ms->o.buf;
+
+ ms->o.buf = pb->buf;
+ ms->offset = pb->offset;
+
+ free(pb);
+ return rbuf;
+}
+
+/*
+ * convert string to ascii printable format.
+ */
+protected char *
+file_printable(char *buf, size_t bufsiz, const char *str)
+{
+ char *ptr, *eptr;
+ const unsigned char *s = (const unsigned char *)str;
+
+ for (ptr = buf, eptr = ptr + bufsiz - 1; ptr < eptr && *s; s++) {
+ if (isprint(*s)) {
+ *ptr++ = *s;
+ continue;
+ }
+ if (ptr >= eptr - 3)
+ break;
+ *ptr++ = '\\';
+ *ptr++ = ((CAST(unsigned int, *s) >> 6) & 7) + '0';
+ *ptr++ = ((CAST(unsigned int, *s) >> 3) & 7) + '0';
+ *ptr++ = ((CAST(unsigned int, *s) >> 0) & 7) + '0';
+ }
+ *ptr = '\0';
+ return buf;
+}
Property changes on: trunk/contrib/file/src/funcs.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/getline.c
===================================================================
--- trunk/contrib/file/src/getline.c (rev 0)
+++ trunk/contrib/file/src/getline.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,104 @@
+/* $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $ */
+
+/*-
+ * Copyright (c) 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "file.h"
+#if !HAVE_GETLINE
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+
+public ssize_t
+getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
+{
+ char *ptr, *eptr;
+
+
+ if (*buf == NULL || *bufsiz == 0) {
+ *bufsiz = BUFSIZ;
+ if ((*buf = malloc(*bufsiz)) == NULL)
+ return -1;
+ }
+
+ for (ptr = *buf, eptr = *buf + *bufsiz;;) {
+ int c = fgetc(fp);
+ if (c == -1) {
+ if (feof(fp)) {
+ ssize_t diff = (ssize_t)(ptr - *buf);
+ if (diff != 0) {
+ *ptr = '\0';
+ return diff;
+ }
+ }
+ return -1;
+ }
+ *ptr++ = c;
+ if (c == delimiter) {
+ *ptr = '\0';
+ return ptr - *buf;
+ }
+ if (ptr + 2 >= eptr) {
+ char *nbuf;
+ size_t nbufsiz = *bufsiz * 2;
+ ssize_t d = ptr - *buf;
+ if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
+ return -1;
+ *buf = nbuf;
+ *bufsiz = nbufsiz;
+ eptr = nbuf + nbufsiz;
+ ptr = nbuf + d;
+ }
+ }
+}
+
+public ssize_t
+getline(char **buf, size_t *bufsiz, FILE *fp)
+{
+ return getdelim(buf, bufsiz, '\n', fp);
+}
+
+#endif
+
+#ifdef TEST
+int
+main(int argc, char *argv[])
+{
+ char *p = NULL;
+ ssize_t len;
+ size_t n = 0;
+
+ while ((len = getline(&p, &n, stdin)) != -1)
+ (void)printf("%" SIZE_T_FORMAT "d %s", len, p);
+ free(p);
+ return 0;
+}
+#endif
Property changes on: trunk/contrib/file/src/getline.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/getopt_long.c
===================================================================
--- trunk/contrib/file/src/getopt_long.c (rev 0)
+++ trunk/contrib/file/src/getopt_long.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,498 @@
+/* $NetBSD: getopt_long.c,v 1.21.4.1 2008/01/09 01:34:14 matt Exp $ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: getopt_long.c,v 1.6 2009/02/13 18:48:05 christos Exp $")
+#endif /* lint */
+
+#include <assert.h>
+#ifdef HAVE_ERR_H
+#include <err.h>
+#else
+#define warnx printf
+#endif
+#include <errno.h>
+#if defined(HAVE_GETOPT_H) && defined(HAVE_STRUCT_OPTION)
+#include <getopt.h>
+#else
+#include "mygetopt.h"
+#endif
+#include <stdlib.h>
+#include <string.h>
+
+#define REPLACE_GETOPT
+
+#ifndef _DIAGASSERT
+#define _DIAGASSERT assert
+#endif
+
+#ifdef REPLACE_GETOPT
+#ifdef __weak_alias
+__weak_alias(getopt,_getopt)
+#endif
+int opterr = 1; /* if error message should be printed */
+int optind = 1; /* index into parent argv vector */
+int optopt = '?'; /* character checked for validity */
+int optreset; /* reset getopt */
+char *optarg; /* argument associated with option */
+#elif HAVE_NBTOOL_CONFIG_H && !HAVE_DECL_OPTRESET
+static int optreset;
+#endif
+
+#ifdef __weak_alias
+__weak_alias(getopt_long,_getopt_long)
+#endif
+
+#define IGNORE_FIRST (*options == '-' || *options == '+')
+#define PRINT_ERROR ((opterr) && ((*options != ':') \
+ || (IGNORE_FIRST && options[1] != ':')))
+#define IS_POSIXLY_CORRECT (getenv("POSIXLY_CORRECT") != NULL)
+#define PERMUTE (!IS_POSIXLY_CORRECT && !IGNORE_FIRST)
+/* XXX: GNU ignores PC if *options == '-' */
+#define IN_ORDER (!IS_POSIXLY_CORRECT && *options == '-')
+
+/* return values */
+#define BADCH (int)'?'
+#define BADARG ((IGNORE_FIRST && options[1] == ':') \
+ || (*options == ':') ? (int)':' : (int)'?')
+#define INORDER (int)1
+
+#define EMSG ""
+
+static int getopt_internal(int, char **, const char *);
+static int gcd(int, int);
+static void permute_args(int, int, int, char **);
+
+static const char *place = EMSG; /* option letter processing */
+
+/* XXX: set optreset to 1 rather than these two */
+static int nonopt_start = -1; /* first non option argument (for permute) */
+static int nonopt_end = -1; /* first option after non options (for permute) */
+
+/* Error messages */
+static const char recargchar[] = "option requires an argument -- %c";
+static const char recargstring[] = "option requires an argument -- %s";
+static const char ambig[] = "ambiguous option -- %.*s";
+static const char noarg[] = "option doesn't take an argument -- %.*s";
+static const char illoptchar[] = "unknown option -- %c";
+static const char illoptstring[] = "unknown option -- %s";
+
+
+/*
+ * Compute the greatest common divisor of a and b.
+ */
+static int
+gcd(a, b)
+ int a;
+ int b;
+{
+ int c;
+
+ c = a % b;
+ while (c != 0) {
+ a = b;
+ b = c;
+ c = a % b;
+ }
+
+ return b;
+}
+
+/*
+ * Exchange the block from nonopt_start to nonopt_end with the block
+ * from nonopt_end to opt_end (keeping the same order of arguments
+ * in each block).
+ */
+static void
+permute_args(panonopt_start, panonopt_end, opt_end, nargv)
+ int panonopt_start;
+ int panonopt_end;
+ int opt_end;
+ char **nargv;
+{
+ int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos;
+ char *swap;
+
+ _DIAGASSERT(nargv != NULL);
+
+ /*
+ * compute lengths of blocks and number and size of cycles
+ */
+ nnonopts = panonopt_end - panonopt_start;
+ nopts = opt_end - panonopt_end;
+ ncycle = gcd(nnonopts, nopts);
+ cyclelen = (opt_end - panonopt_start) / ncycle;
+
+ for (i = 0; i < ncycle; i++) {
+ cstart = panonopt_end+i;
+ pos = cstart;
+ for (j = 0; j < cyclelen; j++) {
+ if (pos >= panonopt_end)
+ pos -= nnonopts;
+ else
+ pos += nopts;
+ swap = nargv[pos];
+ nargv[pos] = nargv[cstart];
+ nargv[cstart] = swap;
+ }
+ }
+}
+
+/*
+ * getopt_internal --
+ * Parse argc/argv argument vector. Called by user level routines.
+ * Returns -2 if -- is found (can be long option or end of options marker).
+ */
+static int
+getopt_internal(nargc, nargv, options)
+ int nargc;
+ char **nargv;
+ const char *options;
+{
+ char *oli; /* option letter list index */
+ int optchar;
+
+ _DIAGASSERT(nargv != NULL);
+ _DIAGASSERT(options != NULL);
+
+ optarg = NULL;
+
+ /*
+ * XXX Some programs (like rsyncd) expect to be able to
+ * XXX re-initialize optind to 0 and have getopt_long(3)
+ * XXX properly function again. Work around this braindamage.
+ */
+ if (optind == 0)
+ optind = 1;
+
+ if (optreset)
+ nonopt_start = nonopt_end = -1;
+start:
+ if (optreset || !*place) { /* update scanning pointer */
+ optreset = 0;
+ if (optind >= nargc) { /* end of argument vector */
+ place = EMSG;
+ if (nonopt_end != -1) {
+ /* do permutation, if we have to */
+ permute_args(nonopt_start, nonopt_end,
+ optind, nargv);
+ optind -= nonopt_end - nonopt_start;
+ }
+ else if (nonopt_start != -1) {
+ /*
+ * If we skipped non-options, set optind
+ * to the first of them.
+ */
+ optind = nonopt_start;
+ }
+ nonopt_start = nonopt_end = -1;
+ return -1;
+ }
+ if ((*(place = nargv[optind]) != '-')
+ || (place[1] == '\0')) { /* found non-option */
+ place = EMSG;
+ if (IN_ORDER) {
+ /*
+ * GNU extension:
+ * return non-option as argument to option 1
+ */
+ optarg = nargv[optind++];
+ return INORDER;
+ }
+ if (!PERMUTE) {
+ /*
+ * if no permutation wanted, stop parsing
+ * at first non-option
+ */
+ return -1;
+ }
+ /* do permutation */
+ if (nonopt_start == -1)
+ nonopt_start = optind;
+ else if (nonopt_end != -1) {
+ permute_args(nonopt_start, nonopt_end,
+ optind, nargv);
+ nonopt_start = optind -
+ (nonopt_end - nonopt_start);
+ nonopt_end = -1;
+ }
+ optind++;
+ /* process next argument */
+ goto start;
+ }
+ if (nonopt_start != -1 && nonopt_end == -1)
+ nonopt_end = optind;
+ if (place[1] && *++place == '-') { /* found "--" */
+ place++;
+ return -2;
+ }
+ }
+ if ((optchar = (int)*place++) == (int)':' ||
+ (oli = strchr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) {
+ /* option letter unknown or ':' */
+ if (!*place)
+ ++optind;
+ if (PRINT_ERROR)
+ warnx(illoptchar, optchar);
+ optopt = optchar;
+ return BADCH;
+ }
+ if (optchar == 'W' && oli[1] == ';') { /* -W long-option */
+ /* XXX: what if no long options provided (called by getopt)? */
+ if (*place)
+ return -2;
+
+ if (++optind >= nargc) { /* no arg */
+ place = EMSG;
+ if (PRINT_ERROR)
+ warnx(recargchar, optchar);
+ optopt = optchar;
+ return BADARG;
+ } else /* white space */
+ place = nargv[optind];
+ /*
+ * Handle -W arg the same as --arg (which causes getopt to
+ * stop parsing).
+ */
+ return -2;
+ }
+ if (*++oli != ':') { /* doesn't take argument */
+ if (!*place)
+ ++optind;
+ } else { /* takes (optional) argument */
+ optarg = NULL;
+ if (*place) /* no white space */
+ optarg = (char *)place;
+ /* XXX: disable test for :: if PC? (GNU doesn't) */
+ else if (oli[1] != ':') { /* arg not optional */
+ if (++optind >= nargc) { /* no arg */
+ place = EMSG;
+ if (PRINT_ERROR)
+ warnx(recargchar, optchar);
+ optopt = optchar;
+ return BADARG;
+ } else
+ optarg = nargv[optind];
+ }
+ place = EMSG;
+ ++optind;
+ }
+ /* dump back option letter */
+ return optchar;
+}
+
+#ifdef REPLACE_GETOPT
+/*
+ * getopt --
+ * Parse argc/argv argument vector.
+ *
+ * [eventually this will replace the real getopt]
+ */
+int
+getopt(nargc, nargv, options)
+ int nargc;
+ char * const *nargv;
+ const char *options;
+{
+ int retval;
+
+ _DIAGASSERT(nargv != NULL);
+ _DIAGASSERT(options != NULL);
+
+ retval = getopt_internal(nargc, (char **)nargv, options);
+ if (retval == -2) {
+ ++optind;
+ /*
+ * We found an option (--), so if we skipped non-options,
+ * we have to permute.
+ */
+ if (nonopt_end != -1) {
+ permute_args(nonopt_start, nonopt_end, optind,
+ (char **)nargv);
+ optind -= nonopt_end - nonopt_start;
+ }
+ nonopt_start = nonopt_end = -1;
+ retval = -1;
+ }
+ return retval;
+}
+#endif
+
+/*
+ * getopt_long --
+ * Parse argc/argv argument vector.
+ */
+int
+getopt_long(nargc, nargv, options, long_options, idx)
+ int nargc;
+ char * const *nargv;
+ const char *options;
+ const struct option *long_options;
+ int *idx;
+{
+ int retval;
+
+#define IDENTICAL_INTERPRETATION(_x, _y) \
+ (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \
+ long_options[(_x)].flag == long_options[(_y)].flag && \
+ long_options[(_x)].val == long_options[(_y)].val)
+
+ _DIAGASSERT(nargv != NULL);
+ _DIAGASSERT(options != NULL);
+ _DIAGASSERT(long_options != NULL);
+ /* idx may be NULL */
+
+ retval = getopt_internal(nargc, (char **)nargv, options);
+ if (retval == -2) {
+ char *current_argv, *has_equal;
+ size_t current_argv_len;
+ int i, ambiguous, match;
+
+ current_argv = (char *)place;
+ match = -1;
+ ambiguous = 0;
+
+ optind++;
+ place = EMSG;
+
+ if (*current_argv == '\0') { /* found "--" */
+ /*
+ * We found an option (--), so if we skipped
+ * non-options, we have to permute.
+ */
+ if (nonopt_end != -1) {
+ permute_args(nonopt_start, nonopt_end,
+ optind, (char **)nargv);
+ optind -= nonopt_end - nonopt_start;
+ }
+ nonopt_start = nonopt_end = -1;
+ return -1;
+ }
+ if ((has_equal = strchr(current_argv, '=')) != NULL) {
+ /* argument found (--option=arg) */
+ current_argv_len = has_equal - current_argv;
+ has_equal++;
+ } else
+ current_argv_len = strlen(current_argv);
+
+ for (i = 0; long_options[i].name; i++) {
+ /* find matching long option */
+ if (strncmp(current_argv, long_options[i].name,
+ current_argv_len))
+ continue;
+
+ if (strlen(long_options[i].name) ==
+ (unsigned)current_argv_len) {
+ /* exact match */
+ match = i;
+ ambiguous = 0;
+ break;
+ }
+ if (match == -1) /* partial match */
+ match = i;
+ else if (!IDENTICAL_INTERPRETATION(i, match))
+ ambiguous = 1;
+ }
+ if (ambiguous) {
+ /* ambiguous abbreviation */
+ if (PRINT_ERROR)
+ warnx(ambig, (int)current_argv_len,
+ current_argv);
+ optopt = 0;
+ return BADCH;
+ }
+ if (match != -1) { /* option found */
+ if (long_options[match].has_arg == no_argument
+ && has_equal) {
+ if (PRINT_ERROR)
+ warnx(noarg, (int)current_argv_len,
+ current_argv);
+ /*
+ * XXX: GNU sets optopt to val regardless of
+ * flag
+ */
+ if (long_options[match].flag == NULL)
+ optopt = long_options[match].val;
+ else
+ optopt = 0;
+ return BADARG;
+ }
+ if (long_options[match].has_arg == required_argument ||
+ long_options[match].has_arg == optional_argument) {
+ if (has_equal)
+ optarg = has_equal;
+ else if (long_options[match].has_arg ==
+ required_argument) {
+ /*
+ * optional argument doesn't use
+ * next nargv
+ */
+ optarg = nargv[optind++];
+ }
+ }
+ if ((long_options[match].has_arg == required_argument)
+ && (optarg == NULL)) {
+ /*
+ * Missing argument; leading ':'
+ * indicates no error should be generated
+ */
+ if (PRINT_ERROR)
+ warnx(recargstring, current_argv);
+ /*
+ * XXX: GNU sets optopt to val regardless
+ * of flag
+ */
+ if (long_options[match].flag == NULL)
+ optopt = long_options[match].val;
+ else
+ optopt = 0;
+ --optind;
+ return BADARG;
+ }
+ } else { /* unknown option */
+ if (PRINT_ERROR)
+ warnx(illoptstring, current_argv);
+ optopt = 0;
+ return BADCH;
+ }
+ if (long_options[match].flag) {
+ *long_options[match].flag = long_options[match].val;
+ retval = 0;
+ } else
+ retval = long_options[match].val;
+ if (idx)
+ *idx = match;
+ }
+ return retval;
+#undef IDENTICAL_INTERPRETATION
+}
Property changes on: trunk/contrib/file/src/getopt_long.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/gmtime_r.c
===================================================================
--- trunk/contrib/file/src/gmtime_r.c (rev 0)
+++ trunk/contrib/file/src/gmtime_r.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,19 @@
+/* $File: gmtime_r.c,v 1.2 2015/07/11 14:41:37 christos Exp $ */
+
+#include "file.h"
+#ifndef lint
+FILE_RCSID("@(#)$File: gmtime_r.c,v 1.2 2015/07/11 14:41:37 christos Exp $")
+#endif /* lint */
+#include <time.h>
+#include <string.h>
+
+/* asctime_r is not thread-safe anyway */
+struct tm *
+gmtime_r(const time_t *t, struct tm *tm)
+{
+ struct tm *tmp = gmtime(t);
+ if (tmp == NULL)
+ return NULL;
+ memcpy(tm, tmp, sizeof(*tm));
+ return tmp;
+}
Property changes on: trunk/contrib/file/src/gmtime_r.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/is_tar.c
===================================================================
--- trunk/contrib/file/src/is_tar.c (rev 0)
+++ trunk/contrib/file/src/is_tar.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * is_tar() -- figure out whether file is a tar archive.
+ *
+ * Stolen (by the author!) from the public domain tar program:
+ * Public Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
+ *
+ * @(#)list.c 1.18 9/23/86 Public Domain - gnu
+ *
+ * Comments changed and some code/comments reformatted
+ * for file command by Ian Darwin.
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: is_tar.c,v 1.39 2017/03/17 20:45:01 christos Exp $")
+#endif
+
+#include "magic.h"
+#include <string.h>
+#include <ctype.h>
+#include "tar.h"
+
+#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
+
+private int is_tar(const unsigned char *, size_t);
+private int from_oct(const char *, size_t); /* Decode octal number */
+
+static const char tartype[][32] = {
+ "tar archive",
+ "POSIX tar archive",
+ "POSIX tar archive (GNU)",
+};
+
+protected int
+file_is_tar(struct magic_set *ms, const unsigned char *buf, size_t nbytes)
+{
+ /*
+ * Do the tar test first, because if the first file in the tar
+ * archive starts with a dot, we can confuse it with an nroff file.
+ */
+ int tar;
+ int mime = ms->flags & MAGIC_MIME;
+
+ if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) != 0)
+ return 0;
+
+ tar = is_tar(buf, nbytes);
+ if (tar < 1 || tar > 3)
+ return 0;
+
+ if (file_printf(ms, "%s", mime ? "application/x-tar" :
+ tartype[tar - 1]) == -1)
+ return -1;
+ return 1;
+}
+
+/*
+ * Return
+ * 0 if the checksum is bad (i.e., probably not a tar archive),
+ * 1 for old UNIX tar file,
+ * 2 for Unix Std (POSIX) tar file,
+ * 3 for GNU tar file.
+ */
+private int
+is_tar(const unsigned char *buf, size_t nbytes)
+{
+ const union record *header = (const union record *)(const void *)buf;
+ size_t i;
+ int sum, recsum;
+ const unsigned char *p, *ep;
+
+ if (nbytes < sizeof(*header))
+ return 0;
+
+ recsum = from_oct(header->header.chksum, sizeof(header->header.chksum));
+
+ sum = 0;
+ p = header->charptr;
+ ep = header->charptr + sizeof(*header);
+ while (p < ep)
+ sum += *p++;
+
+ /* Adjust checksum to count the "chksum" field as blanks. */
+ for (i = 0; i < sizeof(header->header.chksum); i++)
+ sum -= header->header.chksum[i];
+ sum += ' ' * sizeof(header->header.chksum);
+
+ if (sum != recsum)
+ return 0; /* Not a tar archive */
+
+ if (strncmp(header->header.magic, GNUTMAGIC,
+ sizeof(header->header.magic)) == 0)
+ return 3; /* GNU Unix Standard tar archive */
+
+ if (strncmp(header->header.magic, TMAGIC,
+ sizeof(header->header.magic)) == 0)
+ return 2; /* Unix Standard tar archive */
+
+ return 1; /* Old fashioned tar archive */
+}
+
+
+/*
+ * Quick and dirty octal conversion.
+ *
+ * Result is -1 if the field is invalid (all blank, or non-octal).
+ */
+private int
+from_oct(const char *where, size_t digs)
+{
+ int value;
+
+ if (digs == 0)
+ return -1;
+
+ while (isspace((unsigned char)*where)) { /* Skip spaces */
+ where++;
+ if (digs-- == 0)
+ return -1; /* All blank field */
+ }
+ value = 0;
+ while (digs > 0 && isodigit(*where)) { /* Scan til non-octal */
+ value = (value << 3) | (*where++ - '0');
+ digs--;
+ }
+
+ if (digs > 0 && *where && !isspace((unsigned char)*where))
+ return -1; /* Ended on non-(space/NUL) */
+
+ return value;
+}
Property changes on: trunk/contrib/file/src/is_tar.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/localtime_r.c
===================================================================
--- trunk/contrib/file/src/localtime_r.c (rev 0)
+++ trunk/contrib/file/src/localtime_r.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,19 @@
+/* $File: localtime_r.c,v 1.2 2015/07/11 14:41:37 christos Exp $ */
+
+#include "file.h"
+#ifndef lint
+FILE_RCSID("@(#)$File: localtime_r.c,v 1.2 2015/07/11 14:41:37 christos Exp $")
+#endif /* lint */
+#include <time.h>
+#include <string.h>
+
+/* asctime_r is not thread-safe anyway */
+struct tm *
+localtime_r(const time_t *t, struct tm *tm)
+{
+ struct tm *tmp = localtime(t);
+ if (tmp == NULL)
+ return NULL;
+ memcpy(tm, tmp, sizeof(*tm));
+ return tmp;
+}
Property changes on: trunk/contrib/file/src/localtime_r.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/magic.c
===================================================================
--- trunk/contrib/file/src/magic.c (rev 0)
+++ trunk/contrib/file/src/magic.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,658 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef WIN32
+#include <windows.h>
+#include <shlwapi.h>
+#endif
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: magic.c,v 1.102 2017/08/28 13:39:18 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#ifdef QUICK
+#include <sys/mman.h>
+#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h> /* for PIPE_BUF */
+#endif
+
+#if defined(HAVE_UTIMES)
+# include <sys/time.h>
+#elif defined(HAVE_UTIME)
+# if defined(HAVE_SYS_UTIME_H)
+# include <sys/utime.h>
+# elif defined(HAVE_UTIME_H)
+# include <utime.h>
+# endif
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h> /* for read() */
+#endif
+
+#ifndef PIPE_BUF
+/* Get the PIPE_BUF from pathconf */
+#ifdef _PC_PIPE_BUF
+#define PIPE_BUF pathconf(".", _PC_PIPE_BUF)
+#else
+#define PIPE_BUF 512
+#endif
+#endif
+
+private void close_and_restore(const struct magic_set *, const char *, int,
+ const struct stat *);
+private int unreadable_info(struct magic_set *, mode_t, const char *);
+private const char* get_default_magic(void);
+#ifndef COMPILE_ONLY
+private const char *file_or_fd(struct magic_set *, const char *, int);
+#endif
+
+#ifndef STDIN_FILENO
+#define STDIN_FILENO 0
+#endif
+
+#ifdef WIN32
+/* HINSTANCE of this shared library. Needed for get_default_magic() */
+static HINSTANCE _w32_dll_instance = NULL;
+
+static void
+_w32_append_path(char **hmagicpath, const char *fmt, ...)
+{
+ char *tmppath;
+ char *newpath;
+ va_list ap;
+
+ va_start(ap, fmt);
+ if (vasprintf(&tmppath, fmt, ap) < 0) {
+ va_end(ap);
+ return;
+ }
+ va_end(ap);
+
+ if (access(tmppath, R_OK) == -1)
+ goto out;
+
+ if (*hmagicpath == NULL) {
+ *hmagicpath = tmppath;
+ return;
+ }
+
+ if (asprintf(&newpath, "%s%c%s", *hmagicpath, PATHSEP, tmppath) < 0)
+ goto out;
+
+ free(*hmagicpath);
+ free(tmppath);
+ *hmagicpath = newpath;
+ return;
+out:
+ free(tmppath);
+}
+
+static void
+_w32_get_magic_relative_to(char **hmagicpath, HINSTANCE module)
+{
+ static const char *trypaths[] = {
+ "%s/share/misc/magic.mgc",
+ "%s/magic.mgc",
+ };
+ LPSTR dllpath;
+ size_t sp;
+
+ dllpath = calloc(MAX_PATH + 1, sizeof(*dllpath));
+
+ if (!GetModuleFileNameA(module, dllpath, MAX_PATH))
+ goto out;
+
+ PathRemoveFileSpecA(dllpath);
+
+ if (module) {
+ char exepath[MAX_PATH];
+ GetModuleFileNameA(NULL, exepath, MAX_PATH);
+ PathRemoveFileSpecA(exepath);
+ if (stricmp(exepath, dllpath) == 0)
+ goto out;
+ }
+
+ sp = strlen(dllpath);
+ if (sp > 3 && stricmp(&dllpath[sp - 3], "bin") == 0) {
+ _w32_append_path(hmagicpath,
+ "%s/../share/misc/magic.mgc", dllpath);
+ goto out;
+ }
+
+ for (sp = 0; sp < __arraycount(trypaths); sp++)
+ _w32_append_path(hmagicpath, trypaths[sp], dllpath);
+out:
+ free(dllpath);
+}
+
+/* Placate GCC by offering a sacrificial previous prototype */
+BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID);
+
+BOOL WINAPI
+DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
+ LPVOID lpvReserved __attribute__((__unused__)))
+{
+ if (fdwReason == DLL_PROCESS_ATTACH)
+ _w32_dll_instance = hinstDLL;
+ return 1;
+}
+#endif
+
+private const char *
+get_default_magic(void)
+{
+ static const char hmagic[] = "/.magic/magic.mgc";
+ static char *default_magic;
+ char *home, *hmagicpath;
+
+#ifndef WIN32
+ struct stat st;
+
+ if (default_magic) {
+ free(default_magic);
+ default_magic = NULL;
+ }
+ if ((home = getenv("HOME")) == NULL)
+ return MAGIC;
+
+ if (asprintf(&hmagicpath, "%s/.magic.mgc", home) < 0)
+ return MAGIC;
+ if (stat(hmagicpath, &st) == -1) {
+ free(hmagicpath);
+ if (asprintf(&hmagicpath, "%s/.magic", home) < 0)
+ return MAGIC;
+ if (stat(hmagicpath, &st) == -1)
+ goto out;
+ if (S_ISDIR(st.st_mode)) {
+ free(hmagicpath);
+ if (asprintf(&hmagicpath, "%s/%s", home, hmagic) < 0)
+ return MAGIC;
+ if (access(hmagicpath, R_OK) == -1)
+ goto out;
+ }
+ }
+
+ if (asprintf(&default_magic, "%s:%s", hmagicpath, MAGIC) < 0)
+ goto out;
+ free(hmagicpath);
+ return default_magic;
+out:
+ default_magic = NULL;
+ free(hmagicpath);
+ return MAGIC;
+#else
+ hmagicpath = NULL;
+
+ if (default_magic) {
+ free(default_magic);
+ default_magic = NULL;
+ }
+
+ /* First, try to get a magic file from user-application data */
+ if ((home = getenv("LOCALAPPDATA")) != NULL)
+ _w32_append_path(&hmagicpath, "%s%s", home, hmagic);
+
+ /* Second, try to get a magic file from the user profile data */
+ if ((home = getenv("USERPROFILE")) != NULL)
+ _w32_append_path(&hmagicpath,
+ "%s/Local Settings/Application Data%s", home, hmagic);
+
+ /* Third, try to get a magic file from Common Files */
+ if ((home = getenv("COMMONPROGRAMFILES")) != NULL)
+ _w32_append_path(&hmagicpath, "%s%s", home, hmagic);
+
+ /* Fourth, try to get magic file relative to exe location */
+ _w32_get_magic_relative_to(&hmagicpath, NULL);
+
+ /* Fifth, try to get magic file relative to dll location */
+ _w32_get_magic_relative_to(&hmagicpath, _w32_dll_instance);
+
+ /* Avoid MAGIC constant - it likely points to a file within MSys tree */
+ default_magic = hmagicpath;
+ return default_magic;
+#endif
+}
+
+public const char *
+magic_getpath(const char *magicfile, int action)
+{
+ if (magicfile != NULL)
+ return magicfile;
+
+ magicfile = getenv("MAGIC");
+ if (magicfile != NULL)
+ return magicfile;
+
+ return action == FILE_LOAD ? get_default_magic() : MAGIC;
+}
+
+public struct magic_set *
+magic_open(int flags)
+{
+ return file_ms_alloc(flags);
+}
+
+private int
+unreadable_info(struct magic_set *ms, mode_t md, const char *file)
+{
+ if (file) {
+ /* We cannot open it, but we were able to stat it. */
+ if (access(file, W_OK) == 0)
+ if (file_printf(ms, "writable, ") == -1)
+ return -1;
+ if (access(file, X_OK) == 0)
+ if (file_printf(ms, "executable, ") == -1)
+ return -1;
+ }
+ if (S_ISREG(md))
+ if (file_printf(ms, "regular file, ") == -1)
+ return -1;
+ if (file_printf(ms, "no read permission") == -1)
+ return -1;
+ return 0;
+}
+
+public void
+magic_close(struct magic_set *ms)
+{
+ if (ms == NULL)
+ return;
+ file_ms_free(ms);
+}
+
+/*
+ * load a magic file
+ */
+public int
+magic_load(struct magic_set *ms, const char *magicfile)
+{
+ if (ms == NULL)
+ return -1;
+ return file_apprentice(ms, magicfile, FILE_LOAD);
+}
+
+#ifndef COMPILE_ONLY
+/*
+ * Install a set of compiled magic buffers.
+ */
+public int
+magic_load_buffers(struct magic_set *ms, void **bufs, size_t *sizes,
+ size_t nbufs)
+{
+ if (ms == NULL)
+ return -1;
+ return buffer_apprentice(ms, (struct magic **)bufs, sizes, nbufs);
+}
+#endif
+
+public int
+magic_compile(struct magic_set *ms, const char *magicfile)
+{
+ if (ms == NULL)
+ return -1;
+ return file_apprentice(ms, magicfile, FILE_COMPILE);
+}
+
+public int
+magic_check(struct magic_set *ms, const char *magicfile)
+{
+ if (ms == NULL)
+ return -1;
+ return file_apprentice(ms, magicfile, FILE_CHECK);
+}
+
+public int
+magic_list(struct magic_set *ms, const char *magicfile)
+{
+ if (ms == NULL)
+ return -1;
+ return file_apprentice(ms, magicfile, FILE_LIST);
+}
+
+private void
+close_and_restore(const struct magic_set *ms, const char *name, int fd,
+ const struct stat *sb)
+{
+ if (fd == STDIN_FILENO || name == NULL)
+ return;
+ (void) close(fd);
+
+ if ((ms->flags & MAGIC_PRESERVE_ATIME) != 0) {
+ /*
+ * Try to restore access, modification times if read it.
+ * This is really *bad* because it will modify the status
+ * time of the file... And of course this will affect
+ * backup programs
+ */
+#ifdef HAVE_UTIMES
+ struct timeval utsbuf[2];
+ (void)memset(utsbuf, 0, sizeof(utsbuf));
+ utsbuf[0].tv_sec = sb->st_atime;
+ utsbuf[1].tv_sec = sb->st_mtime;
+
+ (void) utimes(name, utsbuf); /* don't care if loses */
+#elif defined(HAVE_UTIME_H) || defined(HAVE_SYS_UTIME_H)
+ struct utimbuf utbuf;
+
+ (void)memset(&utbuf, 0, sizeof(utbuf));
+ utbuf.actime = sb->st_atime;
+ utbuf.modtime = sb->st_mtime;
+ (void) utime(name, &utbuf); /* don't care if loses */
+#endif
+ }
+}
+
+#ifndef COMPILE_ONLY
+
+/*
+ * find type of descriptor
+ */
+public const char *
+magic_descriptor(struct magic_set *ms, int fd)
+{
+ if (ms == NULL)
+ return NULL;
+ return file_or_fd(ms, NULL, fd);
+}
+
+/*
+ * find type of named file
+ */
+public const char *
+magic_file(struct magic_set *ms, const char *inname)
+{
+ if (ms == NULL)
+ return NULL;
+ return file_or_fd(ms, inname, STDIN_FILENO);
+}
+
+private const char *
+file_or_fd(struct magic_set *ms, const char *inname, int fd)
+{
+ int rv = -1;
+ unsigned char *buf;
+ struct stat sb;
+ ssize_t nbytes = 0; /* number of bytes read from a datafile */
+ int ispipe = 0;
+ off_t pos = (off_t)-1;
+
+ if (file_reset(ms, 1) == -1)
+ goto out;
+
+ /*
+ * one extra for terminating '\0', and
+ * some overlapping space for matches near EOF
+ */
+#define SLOP (1 + sizeof(union VALUETYPE))
+ if ((buf = CAST(unsigned char *, malloc(ms->bytes_max + SLOP))) == NULL)
+ return NULL;
+
+ switch (file_fsmagic(ms, inname, &sb)) {
+ case -1: /* error */
+ goto done;
+ case 0: /* nothing found */
+ break;
+ default: /* matched it and printed type */
+ rv = 0;
+ goto done;
+ }
+
+#ifdef WIN32
+ /* Place stdin in binary mode, so EOF (Ctrl+Z) doesn't stop early. */
+ if (fd == STDIN_FILENO)
+ _setmode(STDIN_FILENO, O_BINARY);
+#endif
+
+ if (inname == NULL) {
+ if (fstat(fd, &sb) == 0 && S_ISFIFO(sb.st_mode))
+ ispipe = 1;
+ else
+ pos = lseek(fd, (off_t)0, SEEK_CUR);
+ } else {
+ int flags = O_RDONLY|O_BINARY;
+ int okstat = stat(inname, &sb) == 0;
+
+ if (okstat && S_ISFIFO(sb.st_mode)) {
+#ifdef O_NONBLOCK
+ flags |= O_NONBLOCK;
+#endif
+ ispipe = 1;
+ }
+
+ errno = 0;
+ if ((fd = open(inname, flags)) < 0) {
+#ifdef WIN32
+ /*
+ * Can't stat, can't open. It may have been opened in
+ * fsmagic, so if the user doesn't have read permission,
+ * allow it to say so; otherwise an error was probably
+ * displayed in fsmagic.
+ */
+ if (!okstat && errno == EACCES) {
+ sb.st_mode = S_IFBLK;
+ okstat = 1;
+ }
+#endif
+ if (okstat &&
+ unreadable_info(ms, sb.st_mode, inname) == -1)
+ goto done;
+ rv = 0;
+ goto done;
+ }
+#ifdef O_NONBLOCK
+ if ((flags = fcntl(fd, F_GETFL)) != -1) {
+ flags &= ~O_NONBLOCK;
+ (void)fcntl(fd, F_SETFL, flags);
+ }
+#endif
+ }
+
+ /*
+ * try looking at the first ms->bytes_max bytes
+ */
+ if (ispipe) {
+ ssize_t r = 0;
+
+ while ((r = sread(fd, (void *)&buf[nbytes],
+ (size_t)(ms->bytes_max - nbytes), 1)) > 0) {
+ nbytes += r;
+ if (r < PIPE_BUF) break;
+ }
+
+ if (nbytes == 0 && inname) {
+ /* We can not read it, but we were able to stat it. */
+ if (unreadable_info(ms, sb.st_mode, inname) == -1)
+ goto done;
+ rv = 0;
+ goto done;
+ }
+
+ } else {
+ /* Windows refuses to read from a big console buffer. */
+ size_t howmany =
+#if defined(WIN32)
+ _isatty(fd) ? 8 * 1024 :
+#endif
+ ms->bytes_max;
+ if ((nbytes = read(fd, (char *)buf, howmany)) == -1) {
+ if (inname == NULL && fd != STDIN_FILENO)
+ file_error(ms, errno, "cannot read fd %d", fd);
+ else
+ file_error(ms, errno, "cannot read `%s'",
+ inname == NULL ? "/dev/stdin" : inname);
+ goto done;
+ }
+ }
+
+ (void)memset(buf + nbytes, 0, SLOP); /* NUL terminate */
+ if (file_buffer(ms, fd, inname, buf, (size_t)nbytes) == -1)
+ goto done;
+ rv = 0;
+done:
+ free(buf);
+ if (fd != -1) {
+ if (pos != (off_t)-1)
+ (void)lseek(fd, pos, SEEK_SET);
+ close_and_restore(ms, inname, fd, &sb);
+ }
+out:
+ return rv == 0 ? file_getbuffer(ms) : NULL;
+}
+
+
+public const char *
+magic_buffer(struct magic_set *ms, const void *buf, size_t nb)
+{
+ if (ms == NULL)
+ return NULL;
+ if (file_reset(ms, 1) == -1)
+ return NULL;
+ /*
+ * The main work is done here!
+ * We have the file name and/or the data buffer to be identified.
+ */
+ if (file_buffer(ms, -1, NULL, buf, nb) == -1) {
+ return NULL;
+ }
+ return file_getbuffer(ms);
+}
+#endif
+
+public const char *
+magic_error(struct magic_set *ms)
+{
+ if (ms == NULL)
+ return "Magic database is not open";
+ return (ms->event_flags & EVENT_HAD_ERR) ? ms->o.buf : NULL;
+}
+
+public int
+magic_errno(struct magic_set *ms)
+{
+ if (ms == NULL)
+ return EINVAL;
+ return (ms->event_flags & EVENT_HAD_ERR) ? ms->error : 0;
+}
+
+public int
+magic_getflags(struct magic_set *ms)
+{
+ if (ms == NULL)
+ return -1;
+
+ return ms->flags;
+}
+
+public int
+magic_setflags(struct magic_set *ms, int flags)
+{
+ if (ms == NULL)
+ return -1;
+#if !defined(HAVE_UTIME) && !defined(HAVE_UTIMES)
+ if (flags & MAGIC_PRESERVE_ATIME)
+ return -1;
+#endif
+ ms->flags = flags;
+ return 0;
+}
+
+public int
+magic_version(void)
+{
+ return MAGIC_VERSION;
+}
+
+public int
+magic_setparam(struct magic_set *ms, int param, const void *val)
+{
+ switch (param) {
+ case MAGIC_PARAM_INDIR_MAX:
+ ms->indir_max = (uint16_t)*(const size_t *)val;
+ return 0;
+ case MAGIC_PARAM_NAME_MAX:
+ ms->name_max = (uint16_t)*(const size_t *)val;
+ return 0;
+ case MAGIC_PARAM_ELF_PHNUM_MAX:
+ ms->elf_phnum_max = (uint16_t)*(const size_t *)val;
+ return 0;
+ case MAGIC_PARAM_ELF_SHNUM_MAX:
+ ms->elf_shnum_max = (uint16_t)*(const size_t *)val;
+ return 0;
+ case MAGIC_PARAM_ELF_NOTES_MAX:
+ ms->elf_notes_max = (uint16_t)*(const size_t *)val;
+ return 0;
+ case MAGIC_PARAM_REGEX_MAX:
+ ms->elf_notes_max = (uint16_t)*(const size_t *)val;
+ return 0;
+ case MAGIC_PARAM_BYTES_MAX:
+ ms->bytes_max = *(const size_t *)val;
+ return 0;
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+}
+
+public int
+magic_getparam(struct magic_set *ms, int param, void *val)
+{
+ switch (param) {
+ case MAGIC_PARAM_INDIR_MAX:
+ *(size_t *)val = ms->indir_max;
+ return 0;
+ case MAGIC_PARAM_NAME_MAX:
+ *(size_t *)val = ms->name_max;
+ return 0;
+ case MAGIC_PARAM_ELF_PHNUM_MAX:
+ *(size_t *)val = ms->elf_phnum_max;
+ return 0;
+ case MAGIC_PARAM_ELF_SHNUM_MAX:
+ *(size_t *)val = ms->elf_shnum_max;
+ return 0;
+ case MAGIC_PARAM_ELF_NOTES_MAX:
+ *(size_t *)val = ms->elf_notes_max;
+ return 0;
+ case MAGIC_PARAM_REGEX_MAX:
+ *(size_t *)val = ms->regex_max;
+ return 0;
+ case MAGIC_PARAM_BYTES_MAX:
+ *(size_t *)val = ms->bytes_max;
+ return 0;
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+}
Property changes on: trunk/contrib/file/src/magic.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/magic.h.in
===================================================================
--- trunk/contrib/file/src/magic.h.in (rev 0)
+++ trunk/contrib/file/src/magic.h.in 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _MAGIC_H
+#define _MAGIC_H
+
+#include <sys/types.h>
+
+#define MAGIC_NONE 0x0000000 /* No flags */
+#define MAGIC_DEBUG 0x0000001 /* Turn on debugging */
+#define MAGIC_SYMLINK 0x0000002 /* Follow symlinks */
+#define MAGIC_COMPRESS 0x0000004 /* Check inside compressed files */
+#define MAGIC_DEVICES 0x0000008 /* Look at the contents of devices */
+#define MAGIC_MIME_TYPE 0x0000010 /* Return the MIME type */
+#define MAGIC_CONTINUE 0x0000020 /* Return all matches */
+#define MAGIC_CHECK 0x0000040 /* Print warnings to stderr */
+#define MAGIC_PRESERVE_ATIME 0x0000080 /* Restore access time on exit */
+#define MAGIC_RAW 0x0000100 /* Don't convert unprintable chars */
+#define MAGIC_ERROR 0x0000200 /* Handle ENOENT etc as real errors */
+#define MAGIC_MIME_ENCODING 0x0000400 /* Return the MIME encoding */
+#define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING)
+#define MAGIC_APPLE 0x0000800 /* Return the Apple creator/type */
+#define MAGIC_EXTENSION 0x1000000 /* Return a /-separated list of
+ * extensions */
+#define MAGIC_COMPRESS_TRANSP 0x2000000 /* Check inside compressed files
+ * but not report compression */
+#define MAGIC_NODESC (MAGIC_EXTENSION|MAGIC_MIME|MAGIC_APPLE)
+
+#define MAGIC_NO_CHECK_COMPRESS 0x0001000 /* Don't check for compressed files */
+#define MAGIC_NO_CHECK_TAR 0x0002000 /* Don't check for tar files */
+#define MAGIC_NO_CHECK_SOFT 0x0004000 /* Don't check magic entries */
+#define MAGIC_NO_CHECK_APPTYPE 0x0008000 /* Don't check application type */
+#define MAGIC_NO_CHECK_ELF 0x0010000 /* Don't check for elf details */
+#define MAGIC_NO_CHECK_TEXT 0x0020000 /* Don't check for text files */
+#define MAGIC_NO_CHECK_CDF 0x0040000 /* Don't check for cdf files */
+#define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */
+#define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */
+
+/* No built-in tests; only consult the magic file */
+#define MAGIC_NO_CHECK_BUILTIN ( \
+ MAGIC_NO_CHECK_COMPRESS | \
+ MAGIC_NO_CHECK_TAR | \
+/* MAGIC_NO_CHECK_SOFT | */ \
+ MAGIC_NO_CHECK_APPTYPE | \
+ MAGIC_NO_CHECK_ELF | \
+ MAGIC_NO_CHECK_TEXT | \
+ MAGIC_NO_CHECK_CDF | \
+ MAGIC_NO_CHECK_TOKENS | \
+ MAGIC_NO_CHECK_ENCODING | \
+ 0 \
+)
+
+#define MAGIC_SNPRINTB "\177\020\
+b\0debug\0\
+b\1symlink\0\
+b\2compress\0\
+b\3devices\0\
+b\4mime_type\0\
+b\5continue\0\
+b\6check\0\
+b\7preserve_atime\0\
+b\10raw\0\
+b\11error\0\
+b\12mime_encoding\0\
+b\13apple\0\
+b\14no_check_compress\0\
+b\15no_check_tar\0\
+b\16no_check_soft\0\
+b\17no_check_sapptype\0\
+b\20no_check_elf\0\
+b\21no_check_text\0\
+b\22no_check_cdf\0\
+b\23no_check_reserved0\0\
+b\24no_check_tokens\0\
+b\25no_check_encoding\0\
+b\26no_check_reserved1\0\
+b\27no_check_reserved2\0\
+b\30extension\0\
+b\31transp_compression\0\
+"
+
+/* Defined for backwards compatibility (renamed) */
+#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT
+
+/* Defined for backwards compatibility; do nothing */
+#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */
+#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */
+
+#define MAGIC_VERSION X.YY /* This implementation */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct magic_set *magic_t;
+magic_t magic_open(int);
+void magic_close(magic_t);
+
+const char *magic_getpath(const char *, int);
+const char *magic_file(magic_t, const char *);
+const char *magic_descriptor(magic_t, int);
+const char *magic_buffer(magic_t, const void *, size_t);
+
+const char *magic_error(magic_t);
+int magic_getflags(magic_t);
+int magic_setflags(magic_t, int);
+
+int magic_version(void);
+int magic_load(magic_t, const char *);
+int magic_load_buffers(magic_t, void **, size_t *, size_t);
+
+int magic_compile(magic_t, const char *);
+int magic_check(magic_t, const char *);
+int magic_list(magic_t, const char *);
+int magic_errno(magic_t);
+
+#define MAGIC_PARAM_INDIR_MAX 0
+#define MAGIC_PARAM_NAME_MAX 1
+#define MAGIC_PARAM_ELF_PHNUM_MAX 2
+#define MAGIC_PARAM_ELF_SHNUM_MAX 3
+#define MAGIC_PARAM_ELF_NOTES_MAX 4
+#define MAGIC_PARAM_REGEX_MAX 5
+#define MAGIC_PARAM_BYTES_MAX 6
+
+int magic_setparam(magic_t, int, const void *);
+int magic_getparam(magic_t, int, void *);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* _MAGIC_H */
Property changes on: trunk/contrib/file/src/magic.h.in
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/mygetopt.h
===================================================================
--- trunk/contrib/file/src/mygetopt.h (rev 0)
+++ trunk/contrib/file/src/mygetopt.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,68 @@
+/* $NetBSD: getopt.h,v 1.8 2007/11/06 19:21:18 christos Exp $ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _GETOPT_H_
+#define _GETOPT_H_
+
+#include <unistd.h>
+
+/*
+ * Gnu like getopt_long() and BSD4.4 getsubopt()/optreset extensions
+ */
+#define no_argument 0
+#define required_argument 1
+#define optional_argument 2
+
+struct option {
+ /* name of long option */
+ const char *name;
+ /*
+ * one of no_argument, required_argument, and optional_argument:
+ * whether option takes an argument
+ */
+ int has_arg;
+ /* if not NULL, set *flag to val when option found */
+ int *flag;
+ /* if flag not NULL, value to set *flag to; else return value */
+ int val;
+};
+
+int getopt_long(int, char * const *, const char *,
+ const struct option *, int *);
+
+#endif /* !_GETOPT_H_ */
Property changes on: trunk/contrib/file/src/mygetopt.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/pread.c
===================================================================
--- trunk/contrib/file/src/pread.c (rev 0)
+++ trunk/contrib/file/src/pread.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,23 @@
+#include "file.h"
+#ifndef lint
+FILE_RCSID("@(#)$File: pread.c,v 1.3 2014/09/15 19:11:25 christos Exp $")
+#endif /* lint */
+#include <fcntl.h>
+#include <unistd.h>
+
+ssize_t
+pread(int fd, void *buf, size_t len, off_t off) {
+ off_t old;
+ ssize_t rv;
+
+ if ((old = lseek(fd, off, SEEK_SET)) == -1)
+ return -1;
+
+ if ((rv = read(fd, buf, len)) == -1)
+ return -1;
+
+ if (lseek(fd, old, SEEK_SET) == -1)
+ return -1;
+
+ return rv;
+}
Property changes on: trunk/contrib/file/src/pread.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/print.c
===================================================================
--- trunk/contrib/file/src/print.c (rev 0)
+++ trunk/contrib/file/src/print.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * print.c - debugging printout routines
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: print.c,v 1.82 2017/02/10 18:14:01 christos Exp $")
+#endif /* lint */
+
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <time.h>
+
+#define SZOF(a) (sizeof(a) / sizeof(a[0]))
+
+#include "cdf.h"
+
+#ifndef COMPILE_ONLY
+protected void
+file_mdump(struct magic *m)
+{
+ static const char optyp[] = { FILE_OPS };
+ char tbuf[26];
+
+ (void) fprintf(stderr, "%u: %.*s %u", m->lineno,
+ (m->cont_level & 7) + 1, ">>>>>>>>", m->offset);
+
+ if (m->flag & INDIR) {
+ (void) fprintf(stderr, "(%s,",
+ /* Note: type is unsigned */
+ (m->in_type < file_nnames) ? file_names[m->in_type] :
+ "*bad in_type*");
+ if (m->in_op & FILE_OPINVERSE)
+ (void) fputc('~', stderr);
+ (void) fprintf(stderr, "%c%u),",
+ ((size_t)(m->in_op & FILE_OPS_MASK) <
+ SZOF(optyp)) ? optyp[m->in_op & FILE_OPS_MASK] : '?',
+ m->in_offset);
+ }
+ (void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
+ /* Note: type is unsigned */
+ (m->type < file_nnames) ? file_names[m->type] : "*bad type");
+ if (m->mask_op & FILE_OPINVERSE)
+ (void) fputc('~', stderr);
+
+ if (IS_STRING(m->type)) {
+ if (m->str_flags) {
+ (void) fputc('/', stderr);
+ if (m->str_flags & STRING_COMPACT_WHITESPACE)
+ (void) fputc(CHAR_COMPACT_WHITESPACE, stderr);
+ if (m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE)
+ (void) fputc(CHAR_COMPACT_OPTIONAL_WHITESPACE,
+ stderr);
+ if (m->str_flags & STRING_IGNORE_LOWERCASE)
+ (void) fputc(CHAR_IGNORE_LOWERCASE, stderr);
+ if (m->str_flags & STRING_IGNORE_UPPERCASE)
+ (void) fputc(CHAR_IGNORE_UPPERCASE, stderr);
+ if (m->str_flags & REGEX_OFFSET_START)
+ (void) fputc(CHAR_REGEX_OFFSET_START, stderr);
+ if (m->str_flags & STRING_TEXTTEST)
+ (void) fputc(CHAR_TEXTTEST, stderr);
+ if (m->str_flags & STRING_BINTEST)
+ (void) fputc(CHAR_BINTEST, stderr);
+ if (m->str_flags & PSTRING_1_BE)
+ (void) fputc(CHAR_PSTRING_1_BE, stderr);
+ if (m->str_flags & PSTRING_2_BE)
+ (void) fputc(CHAR_PSTRING_2_BE, stderr);
+ if (m->str_flags & PSTRING_2_LE)
+ (void) fputc(CHAR_PSTRING_2_LE, stderr);
+ if (m->str_flags & PSTRING_4_BE)
+ (void) fputc(CHAR_PSTRING_4_BE, stderr);
+ if (m->str_flags & PSTRING_4_LE)
+ (void) fputc(CHAR_PSTRING_4_LE, stderr);
+ if (m->str_flags & PSTRING_LENGTH_INCLUDES_ITSELF)
+ (void) fputc(
+ CHAR_PSTRING_LENGTH_INCLUDES_ITSELF,
+ stderr);
+ }
+ if (m->str_range)
+ (void) fprintf(stderr, "/%u", m->str_range);
+ }
+ else {
+ if ((size_t)(m->mask_op & FILE_OPS_MASK) < SZOF(optyp))
+ (void) fputc(optyp[m->mask_op & FILE_OPS_MASK], stderr);
+ else
+ (void) fputc('?', stderr);
+
+ if (m->num_mask) {
+ (void) fprintf(stderr, "%.8llx",
+ (unsigned long long)m->num_mask);
+ }
+ }
+ (void) fprintf(stderr, ",%c", m->reln);
+
+ if (m->reln != 'x') {
+ switch (m->type) {
+ case FILE_BYTE:
+ case FILE_SHORT:
+ case FILE_LONG:
+ case FILE_LESHORT:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ case FILE_BESHORT:
+ case FILE_BELONG:
+ case FILE_INDIRECT:
+ (void) fprintf(stderr, "%d", m->value.l);
+ break;
+ case FILE_BEQUAD:
+ case FILE_LEQUAD:
+ case FILE_QUAD:
+ (void) fprintf(stderr, "%" INT64_T_FORMAT "d",
+ (unsigned long long)m->value.q);
+ break;
+ case FILE_PSTRING:
+ case FILE_STRING:
+ case FILE_REGEX:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ case FILE_SEARCH:
+ file_showstr(stderr, m->value.s, (size_t)m->vallen);
+ break;
+ case FILE_DATE:
+ case FILE_LEDATE:
+ case FILE_BEDATE:
+ case FILE_MEDATE:
+ (void)fprintf(stderr, "%s,",
+ file_fmttime(m->value.l, 0, tbuf));
+ break;
+ case FILE_LDATE:
+ case FILE_LELDATE:
+ case FILE_BELDATE:
+ case FILE_MELDATE:
+ (void)fprintf(stderr, "%s,",
+ file_fmttime(m->value.l, FILE_T_LOCAL, tbuf));
+ break;
+ case FILE_QDATE:
+ case FILE_LEQDATE:
+ case FILE_BEQDATE:
+ (void)fprintf(stderr, "%s,",
+ file_fmttime(m->value.q, 0, tbuf));
+ break;
+ case FILE_QLDATE:
+ case FILE_LEQLDATE:
+ case FILE_BEQLDATE:
+ (void)fprintf(stderr, "%s,",
+ file_fmttime(m->value.q, FILE_T_LOCAL, tbuf));
+ break;
+ case FILE_QWDATE:
+ case FILE_LEQWDATE:
+ case FILE_BEQWDATE:
+ (void)fprintf(stderr, "%s,",
+ file_fmttime(m->value.q, FILE_T_WINDOWS, tbuf));
+ break;
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ (void) fprintf(stderr, "%G", m->value.f);
+ break;
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ (void) fprintf(stderr, "%G", m->value.d);
+ break;
+ case FILE_DEFAULT:
+ /* XXX - do anything here? */
+ break;
+ case FILE_USE:
+ case FILE_NAME:
+ case FILE_DER:
+ (void) fprintf(stderr, "'%s'", m->value.s);
+ break;
+ default:
+ (void) fprintf(stderr, "*bad type %d*", m->type);
+ break;
+ }
+ }
+ (void) fprintf(stderr, ",\"%s\"]\n", m->desc);
+}
+#endif
+
+/*VARARGS*/
+protected void
+file_magwarn(struct magic_set *ms, const char *f, ...)
+{
+ va_list va;
+
+ /* cuz we use stdout for most, stderr here */
+ (void) fflush(stdout);
+
+ if (ms->file)
+ (void) fprintf(stderr, "%s, %lu: ", ms->file,
+ (unsigned long)ms->line);
+ (void) fprintf(stderr, "Warning: ");
+ va_start(va, f);
+ (void) vfprintf(stderr, f, va);
+ va_end(va);
+ (void) fputc('\n', stderr);
+}
+
+protected const char *
+file_fmttime(uint64_t v, int flags, char *buf)
+{
+ char *pp;
+ time_t t;
+ struct tm *tm, tmz;
+
+ if (flags & FILE_T_WINDOWS) {
+ struct timespec ts;
+ cdf_timestamp_to_timespec(&ts, CAST(cdf_timestamp_t, v));
+ t = ts.tv_sec;
+ } else {
+ // XXX: perhaps detect and print something if overflow
+ // on 32 bit time_t?
+ t = (time_t)v;
+ }
+
+ if (flags & FILE_T_LOCAL) {
+ tm = localtime_r(&t, &tmz);
+ } else {
+ tm = gmtime_r(&t, &tmz);
+ }
+ if (tm == NULL)
+ goto out;
+ pp = asctime_r(tm, buf);
+
+ if (pp == NULL)
+ goto out;
+ pp[strcspn(pp, "\n")] = '\0';
+ return pp;
+out:
+ return strcpy(buf, "*Invalid time*");
+}
Property changes on: trunk/contrib/file/src/print.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/readcdf.c
===================================================================
--- trunk/contrib/file/src/readcdf.c (rev 0)
+++ trunk/contrib/file/src/readcdf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,677 @@
+/*-
+ * Copyright (c) 2008, 2016 Christos Zoulas
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: readcdf.c,v 1.65 2017/04/08 20:58:03 christos Exp $")
+#endif
+
+#include <assert.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+#include <ctype.h>
+
+#include "cdf.h"
+#include "magic.h"
+
+#ifndef __arraycount
+#define __arraycount(a) (sizeof(a) / sizeof(a[0]))
+#endif
+
+#define NOTMIME(ms) (((ms)->flags & MAGIC_MIME) == 0)
+
+static const struct nv {
+ const char *pattern;
+ const char *mime;
+} app2mime[] = {
+ { "Word", "msword", },
+ { "Excel", "vnd.ms-excel", },
+ { "Powerpoint", "vnd.ms-powerpoint", },
+ { "Crystal Reports", "x-rpt", },
+ { "Advanced Installer", "vnd.ms-msi", },
+ { "InstallShield", "vnd.ms-msi", },
+ { "Microsoft Patch Compiler", "vnd.ms-msi", },
+ { "NAnt", "vnd.ms-msi", },
+ { "Windows Installer", "vnd.ms-msi", },
+ { NULL, NULL, },
+}, name2mime[] = {
+ { "Book", "vnd.ms-excel", },
+ { "Workbook", "vnd.ms-excel", },
+ { "WordDocument", "msword", },
+ { "PowerPoint", "vnd.ms-powerpoint", },
+ { "DigitalSignature", "vnd.ms-msi", },
+ { NULL, NULL, },
+}, name2desc[] = {
+ { "Book", "Microsoft Excel", },
+ { "Workbook", "Microsoft Excel", },
+ { "WordDocument", "Microsoft Word", },
+ { "PowerPoint", "Microsoft PowerPoint", },
+ { "DigitalSignature", "Microsoft Installer", },
+ { NULL, NULL, },
+};
+
+static const struct cv {
+ uint64_t clsid[2];
+ const char *mime;
+} clsid2mime[] = {
+ {
+ { 0x00000000000c1084ULL, 0x46000000000000c0ULL },
+ "x-msi",
+ },
+ { { 0, 0 },
+ NULL,
+ },
+}, clsid2desc[] = {
+ {
+ { 0x00000000000c1084ULL, 0x46000000000000c0ULL },
+ "MSI Installer",
+ },
+ { { 0, 0 },
+ NULL,
+ },
+};
+
+private const char *
+cdf_clsid_to_mime(const uint64_t clsid[2], const struct cv *cv)
+{
+ size_t i;
+ for (i = 0; cv[i].mime != NULL; i++) {
+ if (clsid[0] == cv[i].clsid[0] && clsid[1] == cv[i].clsid[1])
+ return cv[i].mime;
+ }
+#ifdef CDF_DEBUG
+ fprintf(stderr, "unknown mime %" PRIx64 ", %" PRIx64 "\n", clsid[0],
+ clsid[1]);
+#endif
+ return NULL;
+}
+
+private const char *
+cdf_app_to_mime(const char *vbuf, const struct nv *nv)
+{
+ size_t i;
+ const char *rv = NULL;
+#ifdef USE_C_LOCALE
+ locale_t old_lc_ctype, c_lc_ctype;
+
+ c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0);
+ assert(c_lc_ctype != NULL);
+ old_lc_ctype = uselocale(c_lc_ctype);
+ assert(old_lc_ctype != NULL);
+#else
+ char *old_lc_ctype = setlocale(LC_CTYPE, "C");
+#endif
+ for (i = 0; nv[i].pattern != NULL; i++)
+ if (strcasestr(vbuf, nv[i].pattern) != NULL) {
+ rv = nv[i].mime;
+ break;
+ }
+#ifdef CDF_DEBUG
+ fprintf(stderr, "unknown app %s\n", vbuf);
+#endif
+#ifdef USE_C_LOCALE
+ (void)uselocale(old_lc_ctype);
+ freelocale(c_lc_ctype);
+#else
+ setlocale(LC_CTYPE, old_lc_ctype);
+#endif
+ return rv;
+}
+
+private int
+cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info,
+ size_t count, const cdf_directory_t *root_storage)
+{
+ size_t i;
+ cdf_timestamp_t tp;
+ struct timespec ts;
+ char buf[64];
+ const char *str = NULL;
+ const char *s, *e;
+ int len;
+
+ if (!NOTMIME(ms) && root_storage)
+ str = cdf_clsid_to_mime(root_storage->d_storage_uuid,
+ clsid2mime);
+
+ for (i = 0; i < count; i++) {
+ cdf_print_property_name(buf, sizeof(buf), info[i].pi_id);
+ switch (info[i].pi_type) {
+ case CDF_NULL:
+ break;
+ case CDF_SIGNED16:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %hd", buf,
+ info[i].pi_s16) == -1)
+ return -1;
+ break;
+ case CDF_SIGNED32:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %d", buf,
+ info[i].pi_s32) == -1)
+ return -1;
+ break;
+ case CDF_UNSIGNED32:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %u", buf,
+ info[i].pi_u32) == -1)
+ return -1;
+ break;
+ case CDF_FLOAT:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf,
+ info[i].pi_f) == -1)
+ return -1;
+ break;
+ case CDF_DOUBLE:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf,
+ info[i].pi_d) == -1)
+ return -1;
+ break;
+ case CDF_LENGTH32_STRING:
+ case CDF_LENGTH32_WSTRING:
+ len = info[i].pi_str.s_len;
+ if (len > 1) {
+ char vbuf[1024];
+ size_t j, k = 1;
+
+ if (info[i].pi_type == CDF_LENGTH32_WSTRING)
+ k++;
+ s = info[i].pi_str.s_buf;
+ e = info[i].pi_str.s_buf + len;
+ for (j = 0; s < e && j < sizeof(vbuf)
+ && len--; s += k) {
+ if (*s == '\0')
+ break;
+ if (isprint((unsigned char)*s))
+ vbuf[j++] = *s;
+ }
+ if (j == sizeof(vbuf))
+ --j;
+ vbuf[j] = '\0';
+ if (NOTMIME(ms)) {
+ if (vbuf[0]) {
+ if (file_printf(ms, ", %s: %s",
+ buf, vbuf) == -1)
+ return -1;
+ }
+ } else if (str == NULL && info[i].pi_id ==
+ CDF_PROPERTY_NAME_OF_APPLICATION) {
+ str = cdf_app_to_mime(vbuf, app2mime);
+ }
+ }
+ break;
+ case CDF_FILETIME:
+ tp = info[i].pi_tp;
+ if (tp != 0) {
+ char tbuf[64];
+ if (tp < 1000000000000000LL) {
+ cdf_print_elapsed_time(tbuf,
+ sizeof(tbuf), tp);
+ if (NOTMIME(ms) && file_printf(ms,
+ ", %s: %s", buf, tbuf) == -1)
+ return -1;
+ } else {
+ char *c, *ec;
+ cdf_timestamp_to_timespec(&ts, tp);
+ c = cdf_ctime(&ts.tv_sec, tbuf);
+ if (c != NULL &&
+ (ec = strchr(c, '\n')) != NULL)
+ *ec = '\0';
+
+ if (NOTMIME(ms) && file_printf(ms,
+ ", %s: %s", buf, c) == -1)
+ return -1;
+ }
+ }
+ break;
+ case CDF_CLIPBOARD:
+ break;
+ default:
+ return -1;
+ }
+ }
+ if (!NOTMIME(ms)) {
+ if (str == NULL)
+ return 0;
+ if (file_printf(ms, "application/%s", str) == -1)
+ return -1;
+ }
+ return 1;
+}
+
+private int
+cdf_file_catalog(struct magic_set *ms, const cdf_header_t *h,
+ const cdf_stream_t *sst)
+{
+ cdf_catalog_t *cat;
+ size_t i;
+ char buf[256];
+ cdf_catalog_entry_t *ce;
+
+ if (NOTMIME(ms)) {
+ if (file_printf(ms, "Microsoft Thumbs.db [") == -1)
+ return -1;
+ if (cdf_unpack_catalog(h, sst, &cat) == -1)
+ return -1;
+ ce = cat->cat_e;
+ /* skip first entry since it has a , or paren */
+ for (i = 1; i < cat->cat_num; i++)
+ if (file_printf(ms, "%s%s",
+ cdf_u16tos8(buf, ce[i].ce_namlen, ce[i].ce_name),
+ i == cat->cat_num - 1 ? "]" : ", ") == -1) {
+ free(cat);
+ return -1;
+ }
+ free(cat);
+ } else {
+ if (file_printf(ms, "application/CDFV2") == -1)
+ return -1;
+ }
+ return 1;
+}
+
+private int
+cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h,
+ const cdf_stream_t *sst, const cdf_directory_t *root_storage)
+{
+ cdf_summary_info_header_t si;
+ cdf_property_info_t *info;
+ size_t count;
+ int m;
+
+ if (cdf_unpack_summary_info(sst, h, &si, &info, &count) == -1)
+ return -1;
+
+ if (NOTMIME(ms)) {
+ const char *str;
+
+ if (file_printf(ms, "Composite Document File V2 Document")
+ == -1)
+ return -1;
+
+ if (file_printf(ms, ", %s Endian",
+ si.si_byte_order == 0xfffe ? "Little" : "Big") == -1)
+ return -2;
+ switch (si.si_os) {
+ case 2:
+ if (file_printf(ms, ", Os: Windows, Version %d.%d",
+ si.si_os_version & 0xff,
+ (uint32_t)si.si_os_version >> 8) == -1)
+ return -2;
+ break;
+ case 1:
+ if (file_printf(ms, ", Os: MacOS, Version %d.%d",
+ (uint32_t)si.si_os_version >> 8,
+ si.si_os_version & 0xff) == -1)
+ return -2;
+ break;
+ default:
+ if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os,
+ si.si_os_version & 0xff,
+ (uint32_t)si.si_os_version >> 8) == -1)
+ return -2;
+ break;
+ }
+ if (root_storage) {
+ str = cdf_clsid_to_mime(root_storage->d_storage_uuid,
+ clsid2desc);
+ if (str) {
+ if (file_printf(ms, ", %s", str) == -1)
+ return -2;
+ }
+ }
+ }
+
+ m = cdf_file_property_info(ms, info, count, root_storage);
+ free(info);
+
+ return m == -1 ? -2 : m;
+}
+
+#ifdef notdef
+private char *
+format_clsid(char *buf, size_t len, const uint64_t uuid[2]) {
+ snprintf(buf, len, "%.8" PRIx64 "-%.4" PRIx64 "-%.4" PRIx64 "-%.4"
+ PRIx64 "-%.12" PRIx64,
+ (uuid[0] >> 32) & (uint64_t)0x000000000ffffffffULL,
+ (uuid[0] >> 16) & (uint64_t)0x0000000000000ffffULL,
+ (uuid[0] >> 0) & (uint64_t)0x0000000000000ffffULL,
+ (uuid[1] >> 48) & (uint64_t)0x0000000000000ffffULL,
+ (uuid[1] >> 0) & (uint64_t)0x0000fffffffffffffULL);
+ return buf;
+}
+#endif
+
+private int
+cdf_file_catalog_info(struct magic_set *ms, const cdf_info_t *info,
+ const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat,
+ const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn)
+{
+ int i;
+
+ if ((i = cdf_read_user_stream(info, h, sat, ssat, sst,
+ dir, "Catalog", scn)) == -1)
+ return i;
+#ifdef CDF_DEBUG
+ cdf_dump_catalog(h, scn);
+#endif
+ if ((i = cdf_file_catalog(ms, h, scn)) == -1)
+ return -1;
+ return i;
+}
+
+private int
+cdf_check_summary_info(struct magic_set *ms, const cdf_info_t *info,
+ const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat,
+ const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn,
+ const cdf_directory_t *root_storage, const char **expn)
+{
+ int i;
+ const char *str = NULL;
+ cdf_directory_t *d;
+ char name[__arraycount(d->d_name)];
+ size_t j, k;
+
+#ifdef CDF_DEBUG
+ cdf_dump_summary_info(h, scn);
+#endif
+ if ((i = cdf_file_summary_info(ms, h, scn, root_storage)) < 0) {
+ *expn = "Can't expand summary_info";
+ return i;
+ }
+ if (i == 1)
+ return i;
+ for (j = 0; str == NULL && j < dir->dir_len; j++) {
+ d = &dir->dir_tab[j];
+ for (k = 0; k < sizeof(name); k++)
+ name[k] = (char)cdf_tole2(d->d_name[k]);
+ str = cdf_app_to_mime(name,
+ NOTMIME(ms) ? name2desc : name2mime);
+ }
+ if (NOTMIME(ms)) {
+ if (str != NULL) {
+ if (file_printf(ms, "%s", str) == -1)
+ return -1;
+ i = 1;
+ }
+ } else {
+ if (str == NULL)
+ str = "vnd.ms-office";
+ if (file_printf(ms, "application/%s", str) == -1)
+ return -1;
+ i = 1;
+ }
+ if (i <= 0) {
+ i = cdf_file_catalog_info(ms, info, h, sat, ssat, sst,
+ dir, scn);
+ }
+ return i;
+}
+
+private struct sinfo {
+ const char *name;
+ const char *mime;
+ const char *sections[5];
+ const int types[5];
+} sectioninfo[] = {
+ { "Encrypted", "encrypted",
+ {
+ "EncryptedPackage", "EncryptedSummary",
+ NULL, NULL, NULL,
+ },
+ {
+ CDF_DIR_TYPE_USER_STREAM,
+ CDF_DIR_TYPE_USER_STREAM,
+ 0, 0, 0,
+
+ },
+ },
+ { "QuickBooks", "quickbooks",
+ {
+#if 0
+ "TaxForms", "PDFTaxForms", "modulesInBackup",
+#endif
+ "mfbu_header", NULL, NULL, NULL, NULL,
+ },
+ {
+#if 0
+ CDF_DIR_TYPE_USER_STORAGE,
+ CDF_DIR_TYPE_USER_STORAGE,
+ CDF_DIR_TYPE_USER_STREAM,
+#endif
+ CDF_DIR_TYPE_USER_STREAM,
+ 0, 0, 0, 0
+ },
+ },
+ { "Microsoft Excel", "vnd.ms-excel",
+ {
+ "Book", "Workbook", NULL, NULL, NULL,
+ },
+ {
+ CDF_DIR_TYPE_USER_STREAM,
+ CDF_DIR_TYPE_USER_STREAM,
+ 0, 0, 0,
+ },
+ },
+ { "Microsoft Word", "msword",
+ {
+ "WordDocument", NULL, NULL, NULL, NULL,
+ },
+ {
+ CDF_DIR_TYPE_USER_STREAM,
+ 0, 0, 0, 0,
+ },
+ },
+ { "Microsoft PowerPoint", "vnd.ms-powerpoint",
+ {
+ "PowerPoint", NULL, NULL, NULL, NULL,
+ },
+ {
+ CDF_DIR_TYPE_USER_STREAM,
+ 0, 0, 0, 0,
+ },
+ },
+ { "Microsoft Outlook Message", "vnd.ms-outlook",
+ {
+ "__properties_version1.0",
+ "__recip_version1.0_#00000000",
+ NULL, NULL, NULL,
+ },
+ {
+ CDF_DIR_TYPE_USER_STREAM,
+ CDF_DIR_TYPE_USER_STORAGE,
+ 0, 0, 0,
+ },
+ },
+};
+
+private int
+cdf_file_dir_info(struct magic_set *ms, const cdf_dir_t *dir)
+{
+ size_t sd, j;
+
+ for (sd = 0; sd < __arraycount(sectioninfo); sd++) {
+ const struct sinfo *si = §ioninfo[sd];
+ for (j = 0; si->sections[j]; j++) {
+ if (cdf_find_stream(dir, si->sections[j], si->types[j])
+ > 0)
+ break;
+#ifdef CDF_DEBUG
+ fprintf(stderr, "Can't read %s\n", si->sections[j]);
+#endif
+ }
+ if (si->sections[j] == NULL)
+ continue;
+ if (NOTMIME(ms)) {
+ if (file_printf(ms, "CDFV2 %s", si->name) == -1)
+ return -1;
+ } else {
+ if (file_printf(ms, "application/%s", si->mime) == -1)
+ return -1;
+ }
+ return 1;
+ }
+ return -1;
+}
+
+protected int
+file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf,
+ size_t nbytes)
+{
+ cdf_info_t info;
+ cdf_header_t h;
+ cdf_sat_t sat, ssat;
+ cdf_stream_t sst, scn;
+ cdf_dir_t dir;
+ int i;
+ const char *expn = "";
+ const cdf_directory_t *root_storage;
+
+ scn.sst_tab = NULL;
+ info.i_fd = fd;
+ info.i_buf = buf;
+ info.i_len = nbytes;
+ if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))
+ return 0;
+ if (cdf_read_header(&info, &h) == -1)
+ return 0;
+#ifdef CDF_DEBUG
+ cdf_dump_header(&h);
+#endif
+
+ if ((i = cdf_read_sat(&info, &h, &sat)) == -1) {
+ expn = "Can't read SAT";
+ goto out0;
+ }
+#ifdef CDF_DEBUG
+ cdf_dump_sat("SAT", &sat, CDF_SEC_SIZE(&h));
+#endif
+
+ if ((i = cdf_read_ssat(&info, &h, &sat, &ssat)) == -1) {
+ expn = "Can't read SSAT";
+ goto out1;
+ }
+#ifdef CDF_DEBUG
+ cdf_dump_sat("SSAT", &ssat, CDF_SHORT_SEC_SIZE(&h));
+#endif
+
+ if ((i = cdf_read_dir(&info, &h, &sat, &dir)) == -1) {
+ expn = "Can't read directory";
+ goto out2;
+ }
+
+ if ((i = cdf_read_short_stream(&info, &h, &sat, &dir, &sst,
+ &root_storage)) == -1) {
+ expn = "Cannot read short stream";
+ goto out3;
+ }
+#ifdef CDF_DEBUG
+ cdf_dump_dir(&info, &h, &sat, &ssat, &sst, &dir);
+#endif
+#ifdef notdef
+ if (root_storage) {
+ if (NOTMIME(ms)) {
+ char clsbuf[128];
+ if (file_printf(ms, "CLSID %s, ",
+ format_clsid(clsbuf, sizeof(clsbuf),
+ root_storage->d_storage_uuid)) == -1)
+ return -1;
+ }
+ }
+#endif
+
+ if ((i = cdf_read_user_stream(&info, &h, &sat, &ssat, &sst, &dir,
+ "FileHeader", &scn)) != -1) {
+#define HWP5_SIGNATURE "HWP Document File"
+ if (scn.sst_len * scn.sst_ss >= sizeof(HWP5_SIGNATURE) - 1
+ && memcmp(scn.sst_tab, HWP5_SIGNATURE,
+ sizeof(HWP5_SIGNATURE) - 1) == 0) {
+ if (NOTMIME(ms)) {
+ if (file_printf(ms,
+ "Hangul (Korean) Word Processor File 5.x") == -1)
+ return -1;
+ } else {
+ if (file_printf(ms, "application/x-hwp") == -1)
+ return -1;
+ }
+ i = 1;
+ goto out5;
+ } else {
+ cdf_zero_stream(&scn);
+ }
+ }
+
+ if ((i = cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
+ &scn)) == -1) {
+ if (errno != ESRCH) {
+ expn = "Cannot read summary info";
+ }
+ } else {
+ i = cdf_check_summary_info(ms, &info, &h,
+ &sat, &ssat, &sst, &dir, &scn, root_storage, &expn);
+ cdf_zero_stream(&scn);
+ }
+ if (i <= 0) {
+ if ((i = cdf_read_doc_summary_info(&info, &h, &sat, &ssat,
+ &sst, &dir, &scn)) == -1) {
+ if (errno != ESRCH) {
+ expn = "Cannot read summary info";
+ }
+ } else {
+ i = cdf_check_summary_info(ms, &info, &h, &sat, &ssat,
+ &sst, &dir, &scn, root_storage, &expn);
+ }
+ }
+ if (i <= 0) {
+ i = cdf_file_dir_info(ms, &dir);
+ if (i < 0)
+ expn = "Cannot read section info";
+ }
+out5:
+ cdf_zero_stream(&scn);
+ cdf_zero_stream(&sst);
+out3:
+ free(dir.dir_tab);
+out2:
+ free(ssat.sat_tab);
+out1:
+ free(sat.sat_tab);
+out0:
+ if (i == -1) {
+ if (NOTMIME(ms)) {
+ if (file_printf(ms,
+ "Composite Document File V2 Document") == -1)
+ return -1;
+ if (*expn)
+ if (file_printf(ms, ", %s", expn) == -1)
+ return -1;
+ } else {
+ if (file_printf(ms, "application/CDFV2") == -1)
+ return -1;
+ }
+ i = 1;
+ }
+ return i;
+}
Property changes on: trunk/contrib/file/src/readcdf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/readelf.c
===================================================================
--- trunk/contrib/file/src/readelf.c (rev 0)
+++ trunk/contrib/file/src/readelf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,1640 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: readelf.c,v 1.138 2017/08/27 07:55:02 christos Exp $")
+#endif
+
+#ifdef BUILTIN_ELF
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "readelf.h"
+#include "magic.h"
+
+#ifdef ELFCORE
+private int dophn_core(struct magic_set *, int, int, int, off_t, int, size_t,
+ off_t, int *, uint16_t *);
+#endif
+private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t,
+ off_t, int, int *, uint16_t *);
+private int doshn(struct magic_set *, int, int, int, off_t, int, size_t,
+ off_t, int, int, int *, uint16_t *);
+private size_t donote(struct magic_set *, void *, size_t, size_t, int,
+ int, size_t, int *, uint16_t *, int, off_t, int, off_t);
+
+#define ELF_ALIGN(a) ((((a) + align - 1) / align) * align)
+
+#define isquote(c) (strchr("'\"`", (c)) != NULL)
+
+private uint16_t getu16(int, uint16_t);
+private uint32_t getu32(int, uint32_t);
+private uint64_t getu64(int, uint64_t);
+
+#define MAX_PHNUM 128
+#define MAX_SHNUM 32768
+#define SIZE_UNKNOWN ((off_t)-1)
+
+private int
+toomany(struct magic_set *ms, const char *name, uint16_t num)
+{
+ if (file_printf(ms, ", too many %s (%u)", name, num
+ ) == -1)
+ return -1;
+ return 0;
+}
+
+private uint16_t
+getu16(int swap, uint16_t value)
+{
+ union {
+ uint16_t ui;
+ char c[2];
+ } retval, tmpval;
+
+ if (swap) {
+ tmpval.ui = value;
+
+ retval.c[0] = tmpval.c[1];
+ retval.c[1] = tmpval.c[0];
+
+ return retval.ui;
+ } else
+ return value;
+}
+
+private uint32_t
+getu32(int swap, uint32_t value)
+{
+ union {
+ uint32_t ui;
+ char c[4];
+ } retval, tmpval;
+
+ if (swap) {
+ tmpval.ui = value;
+
+ retval.c[0] = tmpval.c[3];
+ retval.c[1] = tmpval.c[2];
+ retval.c[2] = tmpval.c[1];
+ retval.c[3] = tmpval.c[0];
+
+ return retval.ui;
+ } else
+ return value;
+}
+
+private uint64_t
+getu64(int swap, uint64_t value)
+{
+ union {
+ uint64_t ui;
+ char c[8];
+ } retval, tmpval;
+
+ if (swap) {
+ tmpval.ui = value;
+
+ retval.c[0] = tmpval.c[7];
+ retval.c[1] = tmpval.c[6];
+ retval.c[2] = tmpval.c[5];
+ retval.c[3] = tmpval.c[4];
+ retval.c[4] = tmpval.c[3];
+ retval.c[5] = tmpval.c[2];
+ retval.c[6] = tmpval.c[1];
+ retval.c[7] = tmpval.c[0];
+
+ return retval.ui;
+ } else
+ return value;
+}
+
+#define elf_getu16(swap, value) getu16(swap, value)
+#define elf_getu32(swap, value) getu32(swap, value)
+#define elf_getu64(swap, value) getu64(swap, value)
+
+#define xsh_addr (clazz == ELFCLASS32 \
+ ? (void *)&sh32 \
+ : (void *)&sh64)
+#define xsh_sizeof (clazz == ELFCLASS32 \
+ ? sizeof(sh32) \
+ : sizeof(sh64))
+#define xsh_size (size_t)(clazz == ELFCLASS32 \
+ ? elf_getu32(swap, sh32.sh_size) \
+ : elf_getu64(swap, sh64.sh_size))
+#define xsh_offset (off_t)(clazz == ELFCLASS32 \
+ ? elf_getu32(swap, sh32.sh_offset) \
+ : elf_getu64(swap, sh64.sh_offset))
+#define xsh_type (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, sh32.sh_type) \
+ : elf_getu32(swap, sh64.sh_type))
+#define xsh_name (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, sh32.sh_name) \
+ : elf_getu32(swap, sh64.sh_name))
+#define xph_addr (clazz == ELFCLASS32 \
+ ? (void *) &ph32 \
+ : (void *) &ph64)
+#define xph_sizeof (clazz == ELFCLASS32 \
+ ? sizeof(ph32) \
+ : sizeof(ph64))
+#define xph_type (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, ph32.p_type) \
+ : elf_getu32(swap, ph64.p_type))
+#define xph_offset (off_t)(clazz == ELFCLASS32 \
+ ? elf_getu32(swap, ph32.p_offset) \
+ : elf_getu64(swap, ph64.p_offset))
+#define xph_align (size_t)((clazz == ELFCLASS32 \
+ ? (off_t) (ph32.p_align ? \
+ elf_getu32(swap, ph32.p_align) : 4) \
+ : (off_t) (ph64.p_align ? \
+ elf_getu64(swap, ph64.p_align) : 4)))
+#define xph_vaddr (size_t)((clazz == ELFCLASS32 \
+ ? (off_t) (ph32.p_vaddr ? \
+ elf_getu32(swap, ph32.p_vaddr) : 4) \
+ : (off_t) (ph64.p_vaddr ? \
+ elf_getu64(swap, ph64.p_vaddr) : 4)))
+#define xph_filesz (size_t)((clazz == ELFCLASS32 \
+ ? elf_getu32(swap, ph32.p_filesz) \
+ : elf_getu64(swap, ph64.p_filesz)))
+#define xnh_addr (clazz == ELFCLASS32 \
+ ? (void *)&nh32 \
+ : (void *)&nh64)
+#define xph_memsz (size_t)((clazz == ELFCLASS32 \
+ ? elf_getu32(swap, ph32.p_memsz) \
+ : elf_getu64(swap, ph64.p_memsz)))
+#define xnh_sizeof (clazz == ELFCLASS32 \
+ ? sizeof(nh32) \
+ : sizeof(nh64))
+#define xnh_type (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, nh32.n_type) \
+ : elf_getu32(swap, nh64.n_type))
+#define xnh_namesz (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, nh32.n_namesz) \
+ : elf_getu32(swap, nh64.n_namesz))
+#define xnh_descsz (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, nh32.n_descsz) \
+ : elf_getu32(swap, nh64.n_descsz))
+#define prpsoffsets(i) (clazz == ELFCLASS32 \
+ ? prpsoffsets32[i] \
+ : prpsoffsets64[i])
+#define xcap_addr (clazz == ELFCLASS32 \
+ ? (void *)&cap32 \
+ : (void *)&cap64)
+#define xcap_sizeof (clazz == ELFCLASS32 \
+ ? sizeof cap32 \
+ : sizeof cap64)
+#define xcap_tag (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, cap32.c_tag) \
+ : elf_getu64(swap, cap64.c_tag))
+#define xcap_val (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, cap32.c_un.c_val) \
+ : elf_getu64(swap, cap64.c_un.c_val))
+#define xauxv_addr (clazz == ELFCLASS32 \
+ ? (void *)&auxv32 \
+ : (void *)&auxv64)
+#define xauxv_sizeof (clazz == ELFCLASS32 \
+ ? sizeof(auxv32) \
+ : sizeof(auxv64))
+#define xauxv_type (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, auxv32.a_type) \
+ : elf_getu64(swap, auxv64.a_type))
+#define xauxv_val (clazz == ELFCLASS32 \
+ ? elf_getu32(swap, auxv32.a_v) \
+ : elf_getu64(swap, auxv64.a_v))
+
+#ifdef ELFCORE
+/*
+ * Try larger offsets first to avoid false matches
+ * from earlier data that happen to look like strings.
+ */
+static const size_t prpsoffsets32[] = {
+#ifdef USE_NT_PSINFO
+ 104, /* SunOS 5.x (command line) */
+ 88, /* SunOS 5.x (short name) */
+#endif /* USE_NT_PSINFO */
+
+ 100, /* SunOS 5.x (command line) */
+ 84, /* SunOS 5.x (short name) */
+
+ 44, /* Linux (command line) */
+ 28, /* Linux 2.0.36 (short name) */
+
+ 8, /* FreeBSD */
+};
+
+static const size_t prpsoffsets64[] = {
+#ifdef USE_NT_PSINFO
+ 152, /* SunOS 5.x (command line) */
+ 136, /* SunOS 5.x (short name) */
+#endif /* USE_NT_PSINFO */
+
+ 136, /* SunOS 5.x, 64-bit (command line) */
+ 120, /* SunOS 5.x, 64-bit (short name) */
+
+ 56, /* Linux (command line) */
+ 40, /* Linux (tested on core from 2.4.x, short name) */
+
+ 16, /* FreeBSD, 64-bit */
+};
+
+#define NOFFSETS32 (sizeof prpsoffsets32 / sizeof prpsoffsets32[0])
+#define NOFFSETS64 (sizeof prpsoffsets64 / sizeof prpsoffsets64[0])
+
+#define NOFFSETS (clazz == ELFCLASS32 ? NOFFSETS32 : NOFFSETS64)
+
+/*
+ * Look through the program headers of an executable image, searching
+ * for a PT_NOTE section of type NT_PRPSINFO, with a name "CORE" or
+ * "FreeBSD"; if one is found, try looking in various places in its
+ * contents for a 16-character string containing only printable
+ * characters - if found, that string should be the name of the program
+ * that dropped core. Note: right after that 16-character string is,
+ * at least in SunOS 5.x (and possibly other SVR4-flavored systems) and
+ * Linux, a longer string (80 characters, in 5.x, probably other
+ * SVR4-flavored systems, and Linux) containing the start of the
+ * command line for that program.
+ *
+ * SunOS 5.x core files contain two PT_NOTE sections, with the types
+ * NT_PRPSINFO (old) and NT_PSINFO (new). These structs contain the
+ * same info about the command name and command line, so it probably
+ * isn't worthwhile to look for NT_PSINFO, but the offsets are provided
+ * above (see USE_NT_PSINFO), in case we ever decide to do so. The
+ * NT_PRPSINFO and NT_PSINFO sections are always in order and adjacent;
+ * the SunOS 5.x file command relies on this (and prefers the latter).
+ *
+ * The signal number probably appears in a section of type NT_PRSTATUS,
+ * but that's also rather OS-dependent, in ways that are harder to
+ * dissect with heuristics, so I'm not bothering with the signal number.
+ * (I suppose the signal number could be of interest in situations where
+ * you don't have the binary of the program that dropped core; if you
+ * *do* have that binary, the debugger will probably tell you what
+ * signal it was.)
+ */
+
+#define OS_STYLE_SVR4 0
+#define OS_STYLE_FREEBSD 1
+#define OS_STYLE_NETBSD 2
+
+private const char os_style_names[][8] = {
+ "SVR4",
+ "FreeBSD",
+ "NetBSD",
+};
+
+#define FLAGS_CORE_STYLE 0x003
+
+#define FLAGS_DID_CORE 0x004
+#define FLAGS_DID_OS_NOTE 0x008
+#define FLAGS_DID_BUILD_ID 0x010
+#define FLAGS_DID_CORE_STYLE 0x020
+#define FLAGS_DID_NETBSD_PAX 0x040
+#define FLAGS_DID_NETBSD_MARCH 0x080
+#define FLAGS_DID_NETBSD_CMODEL 0x100
+#define FLAGS_DID_NETBSD_UNKNOWN 0x200
+#define FLAGS_IS_CORE 0x400
+#define FLAGS_DID_AUXV 0x800
+
+private int
+dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
+ int num, size_t size, off_t fsize, int *flags, uint16_t *notecount)
+{
+ Elf32_Phdr ph32;
+ Elf64_Phdr ph64;
+ size_t offset, len;
+ unsigned char nbuf[BUFSIZ];
+ ssize_t bufsize;
+ off_t ph_off = off;
+ int ph_num = num;
+
+ if (size != xph_sizeof) {
+ if (file_printf(ms, ", corrupted program header size") == -1)
+ return -1;
+ return 0;
+ }
+
+ /*
+ * Loop through all the program headers.
+ */
+ for ( ; num; num--) {
+ if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) {
+ file_badread(ms);
+ return -1;
+ }
+ off += size;
+
+ if (fsize != SIZE_UNKNOWN && xph_offset > fsize) {
+ /* Perhaps warn here */
+ continue;
+ }
+
+ if (xph_type != PT_NOTE)
+ continue;
+
+ /*
+ * This is a PT_NOTE section; loop through all the notes
+ * in the section.
+ */
+ len = xph_filesz < sizeof(nbuf) ? xph_filesz : sizeof(nbuf);
+ if ((bufsize = pread(fd, nbuf, len, xph_offset)) == -1) {
+ file_badread(ms);
+ return -1;
+ }
+ offset = 0;
+ for (;;) {
+ if (offset >= (size_t)bufsize)
+ break;
+ offset = donote(ms, nbuf, offset, (size_t)bufsize,
+ clazz, swap, 4, flags, notecount, fd, ph_off,
+ ph_num, fsize);
+ if (offset == 0)
+ break;
+
+ }
+ }
+ return 0;
+}
+#endif
+
+static void
+do_note_netbsd_version(struct magic_set *ms, int swap, void *v)
+{
+ uint32_t desc;
+ (void)memcpy(&desc, v, sizeof(desc));
+ desc = elf_getu32(swap, desc);
+
+ if (file_printf(ms, ", for NetBSD") == -1)
+ return;
+ /*
+ * The version number used to be stuck as 199905, and was thus
+ * basically content-free. Newer versions of NetBSD have fixed
+ * this and now use the encoding of __NetBSD_Version__:
+ *
+ * MMmmrrpp00
+ *
+ * M = major version
+ * m = minor version
+ * r = release ["",A-Z,Z[A-Z] but numeric]
+ * p = patchlevel
+ */
+ if (desc > 100000000U) {
+ uint32_t ver_patch = (desc / 100) % 100;
+ uint32_t ver_rel = (desc / 10000) % 100;
+ uint32_t ver_min = (desc / 1000000) % 100;
+ uint32_t ver_maj = desc / 100000000;
+
+ if (file_printf(ms, " %u.%u", ver_maj, ver_min) == -1)
+ return;
+ if (ver_rel == 0 && ver_patch != 0) {
+ if (file_printf(ms, ".%u", ver_patch) == -1)
+ return;
+ } else if (ver_rel != 0) {
+ while (ver_rel > 26) {
+ if (file_printf(ms, "Z") == -1)
+ return;
+ ver_rel -= 26;
+ }
+ if (file_printf(ms, "%c", 'A' + ver_rel - 1)
+ == -1)
+ return;
+ }
+ }
+}
+
+static void
+do_note_freebsd_version(struct magic_set *ms, int swap, void *v)
+{
+ uint32_t desc;
+
+ (void)memcpy(&desc, v, sizeof(desc));
+ desc = elf_getu32(swap, desc);
+ if (file_printf(ms, ", for FreeBSD") == -1)
+ return;
+
+ /*
+ * Contents is __FreeBSD_version, whose relation to OS
+ * 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 == 460002) {
+ if (file_printf(ms, " 4.6.2") == -1)
+ return;
+ } else if (desc < 460100) {
+ if (file_printf(ms, " %d.%d", desc / 100000,
+ desc / 10000 % 10) == -1)
+ return;
+ if (desc / 1000 % 10 > 0)
+ if (file_printf(ms, ".%d", desc / 1000 % 10) == -1)
+ return;
+ if ((desc % 1000 > 0) || (desc % 100000 == 0))
+ if (file_printf(ms, " (%d)", desc) == -1)
+ return;
+ } else if (desc < 500000) {
+ if (file_printf(ms, " %d.%d", desc / 100000,
+ desc / 10000 % 10 + desc / 1000 % 10) == -1)
+ return;
+ if (desc / 100 % 10 > 0) {
+ if (file_printf(ms, " (%d)", desc) == -1)
+ return;
+ } else if (desc / 10 % 10 > 0) {
+ if (file_printf(ms, ".%d", desc / 10 % 10) == -1)
+ return;
+ }
+ } else {
+ if (file_printf(ms, " %d.%d", desc / 100000,
+ desc / 1000 % 100) == -1)
+ return;
+ if ((desc / 100 % 10 > 0) ||
+ (desc % 100000 / 100 == 0)) {
+ if (file_printf(ms, " (%d)", desc) == -1)
+ return;
+ } else if (desc / 10 % 10 > 0) {
+ if (file_printf(ms, ".%d", desc / 10 % 10) == -1)
+ return;
+ }
+ }
+}
+
+private int
+/*ARGSUSED*/
+do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
+ int swap __attribute__((__unused__)), uint32_t namesz, uint32_t descsz,
+ size_t noff, size_t doff, int *flags)
+{
+ if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
+ type == NT_GNU_BUILD_ID && (descsz >= 4 && descsz <= 20)) {
+ uint8_t desc[20];
+ const char *btype;
+ uint32_t i;
+ *flags |= FLAGS_DID_BUILD_ID;
+ switch (descsz) {
+ case 8:
+ btype = "xxHash";
+ break;
+ case 16:
+ btype = "md5/uuid";
+ break;
+ case 20:
+ btype = "sha1";
+ break;
+ default:
+ btype = "unknown";
+ break;
+ }
+ if (file_printf(ms, ", BuildID[%s]=", btype) == -1)
+ return 1;
+ (void)memcpy(desc, &nbuf[doff], descsz);
+ for (i = 0; i < descsz; i++)
+ if (file_printf(ms, "%02x", desc[i]) == -1)
+ return 1;
+ return 1;
+ }
+ return 0;
+}
+
+private int
+do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
+ int swap, uint32_t namesz, uint32_t descsz,
+ size_t noff, size_t doff, int *flags)
+{
+ if (namesz == 5 && strcmp((char *)&nbuf[noff], "SuSE") == 0 &&
+ type == NT_GNU_VERSION && descsz == 2) {
+ *flags |= FLAGS_DID_OS_NOTE;
+ file_printf(ms, ", for SuSE %d.%d", nbuf[doff], nbuf[doff + 1]);
+ return 1;
+ }
+
+ if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 &&
+ type == NT_GNU_VERSION && descsz == 16) {
+ uint32_t desc[4];
+ (void)memcpy(desc, &nbuf[doff], sizeof(desc));
+
+ *flags |= FLAGS_DID_OS_NOTE;
+ if (file_printf(ms, ", for GNU/") == -1)
+ return 1;
+ switch (elf_getu32(swap, desc[0])) {
+ case GNU_OS_LINUX:
+ if (file_printf(ms, "Linux") == -1)
+ return 1;
+ break;
+ case GNU_OS_HURD:
+ if (file_printf(ms, "Hurd") == -1)
+ return 1;
+ break;
+ case GNU_OS_SOLARIS:
+ if (file_printf(ms, "Solaris") == -1)
+ return 1;
+ break;
+ case GNU_OS_KFREEBSD:
+ if (file_printf(ms, "kFreeBSD") == -1)
+ return 1;
+ break;
+ case GNU_OS_KNETBSD:
+ if (file_printf(ms, "kNetBSD") == -1)
+ return 1;
+ break;
+ default:
+ if (file_printf(ms, "<unknown>") == -1)
+ return 1;
+ }
+ if (file_printf(ms, " %d.%d.%d", elf_getu32(swap, desc[1]),
+ elf_getu32(swap, desc[2]), elf_getu32(swap, desc[3])) == -1)
+ return 1;
+ return 1;
+ }
+
+ if (namesz == 7 && strcmp((char *)&nbuf[noff], "NetBSD") == 0) {
+ if (type == NT_NETBSD_VERSION && descsz == 4) {
+ *flags |= FLAGS_DID_OS_NOTE;
+ do_note_netbsd_version(ms, swap, &nbuf[doff]);
+ return 1;
+ }
+ }
+
+ if (namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0) {
+ if (type == NT_FREEBSD_VERSION && descsz == 4) {
+ *flags |= FLAGS_DID_OS_NOTE;
+ do_note_freebsd_version(ms, swap, &nbuf[doff]);
+ return 1;
+ }
+ }
+
+ if (namesz == 8 && strcmp((char *)&nbuf[noff], "OpenBSD") == 0 &&
+ type == NT_OPENBSD_VERSION && descsz == 4) {
+ *flags |= FLAGS_DID_OS_NOTE;
+ if (file_printf(ms, ", for OpenBSD") == -1)
+ return 1;
+ /* Content of note is always 0 */
+ return 1;
+ }
+
+ if (namesz == 10 && strcmp((char *)&nbuf[noff], "DragonFly") == 0 &&
+ type == NT_DRAGONFLY_VERSION && descsz == 4) {
+ uint32_t desc;
+ *flags |= FLAGS_DID_OS_NOTE;
+ if (file_printf(ms, ", for DragonFly") == -1)
+ return 1;
+ (void)memcpy(&desc, &nbuf[doff], sizeof(desc));
+ desc = elf_getu32(swap, desc);
+ if (file_printf(ms, " %d.%d.%d", desc / 100000,
+ desc / 10000 % 10, desc % 10000) == -1)
+ return 1;
+ return 1;
+ }
+ return 0;
+}
+
+private int
+do_pax_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
+ int swap, uint32_t namesz, uint32_t descsz,
+ size_t noff, size_t doff, int *flags)
+{
+ if (namesz == 4 && strcmp((char *)&nbuf[noff], "PaX") == 0 &&
+ type == NT_NETBSD_PAX && descsz == 4) {
+ static const char *pax[] = {
+ "+mprotect",
+ "-mprotect",
+ "+segvguard",
+ "-segvguard",
+ "+ASLR",
+ "-ASLR",
+ };
+ uint32_t desc;
+ size_t i;
+ int did = 0;
+
+ *flags |= FLAGS_DID_NETBSD_PAX;
+ (void)memcpy(&desc, &nbuf[doff], sizeof(desc));
+ desc = elf_getu32(swap, desc);
+
+ if (desc && file_printf(ms, ", PaX: ") == -1)
+ return 1;
+
+ for (i = 0; i < __arraycount(pax); i++) {
+ if (((1 << (int)i) & desc) == 0)
+ continue;
+ if (file_printf(ms, "%s%s", did++ ? "," : "",
+ pax[i]) == -1)
+ return 1;
+ }
+ return 1;
+ }
+ return 0;
+}
+
+private int
+do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
+ int swap, uint32_t namesz, uint32_t descsz,
+ size_t noff, size_t doff, int *flags, size_t size, int clazz)
+{
+#ifdef ELFCORE
+ int os_style = -1;
+ /*
+ * Sigh. The 2.0.36 kernel in Debian 2.1, at
+ * least, doesn't correctly implement name
+ * sections, in core dumps, as specified by
+ * the "Program Linking" section of "UNIX(R) System
+ * V Release 4 Programmer's Guide: ANSI C and
+ * Programming Support Tools", because my copy
+ * clearly says "The first 'namesz' bytes in 'name'
+ * contain a *null-terminated* [emphasis mine]
+ * character representation of the entry's owner
+ * or originator", but the 2.0.36 kernel code
+ * doesn't include the terminating null in the
+ * name....
+ */
+ if ((namesz == 4 && strncmp((char *)&nbuf[noff], "CORE", 4) == 0) ||
+ (namesz == 5 && strcmp((char *)&nbuf[noff], "CORE") == 0)) {
+ os_style = OS_STYLE_SVR4;
+ }
+
+ if ((namesz == 8 && strcmp((char *)&nbuf[noff], "FreeBSD") == 0)) {
+ os_style = OS_STYLE_FREEBSD;
+ }
+
+ if ((namesz >= 11 && strncmp((char *)&nbuf[noff], "NetBSD-CORE", 11)
+ == 0)) {
+ os_style = OS_STYLE_NETBSD;
+ }
+
+ if (os_style != -1 && (*flags & FLAGS_DID_CORE_STYLE) == 0) {
+ if (file_printf(ms, ", %s-style", os_style_names[os_style])
+ == -1)
+ return 1;
+ *flags |= FLAGS_DID_CORE_STYLE;
+ *flags |= os_style;
+ }
+
+ switch (os_style) {
+ case OS_STYLE_NETBSD:
+ if (type == NT_NETBSD_CORE_PROCINFO) {
+ char sbuf[512];
+ struct NetBSD_elfcore_procinfo pi;
+ memset(&pi, 0, sizeof(pi));
+ memcpy(&pi, nbuf + doff, descsz);
+
+ if (file_printf(ms, ", from '%.31s', pid=%u, uid=%u, "
+ "gid=%u, nlwps=%u, lwp=%u (signal %u/code %u)",
+ file_printable(sbuf, sizeof(sbuf),
+ CAST(char *, pi.cpi_name)),
+ elf_getu32(swap, pi.cpi_pid),
+ elf_getu32(swap, pi.cpi_euid),
+ elf_getu32(swap, pi.cpi_egid),
+ elf_getu32(swap, pi.cpi_nlwps),
+ elf_getu32(swap, pi.cpi_siglwp),
+ elf_getu32(swap, pi.cpi_signo),
+ elf_getu32(swap, pi.cpi_sigcode)) == -1)
+ return 1;
+
+ *flags |= FLAGS_DID_CORE;
+ return 1;
+ }
+ break;
+
+ default:
+ if (type == NT_PRPSINFO && *flags & FLAGS_IS_CORE) {
+ size_t i, j;
+ unsigned char c;
+ /*
+ * Extract the program name. We assume
+ * it to be 16 characters (that's what it
+ * is in SunOS 5.x and Linux).
+ *
+ * Unfortunately, it's at a different offset
+ * in various OSes, so try multiple offsets.
+ * If the characters aren't all printable,
+ * reject it.
+ */
+ for (i = 0; i < NOFFSETS; i++) {
+ unsigned char *cname, *cp;
+ size_t reloffset = prpsoffsets(i);
+ size_t noffset = doff + reloffset;
+ size_t k;
+ for (j = 0; j < 16; j++, noffset++,
+ reloffset++) {
+ /*
+ * Make sure we're not past
+ * the end of the buffer; if
+ * we are, just give up.
+ */
+ if (noffset >= size)
+ goto tryanother;
+
+ /*
+ * Make sure we're not past
+ * the end of the contents;
+ * if we are, this obviously
+ * isn't the right offset.
+ */
+ if (reloffset >= descsz)
+ goto tryanother;
+
+ c = nbuf[noffset];
+ if (c == '\0') {
+ /*
+ * A '\0' at the
+ * beginning is
+ * obviously wrong.
+ * Any other '\0'
+ * means we're done.
+ */
+ if (j == 0)
+ goto tryanother;
+ else
+ break;
+ } else {
+ /*
+ * A nonprintable
+ * character is also
+ * wrong.
+ */
+ if (!isprint(c) || isquote(c))
+ goto tryanother;
+ }
+ }
+ /*
+ * Well, that worked.
+ */
+
+ /*
+ * Try next offsets, in case this match is
+ * in the middle of a string.
+ */
+ for (k = i + 1 ; k < NOFFSETS; k++) {
+ size_t no;
+ int adjust = 1;
+ if (prpsoffsets(k) >= prpsoffsets(i))
+ continue;
+ for (no = doff + prpsoffsets(k);
+ no < doff + prpsoffsets(i); no++)
+ adjust = adjust
+ && isprint(nbuf[no]);
+ if (adjust)
+ i = k;
+ }
+
+ cname = (unsigned char *)
+ &nbuf[doff + prpsoffsets(i)];
+ for (cp = cname; *cp && isprint(*cp); cp++)
+ continue;
+ /*
+ * Linux apparently appends a space at the end
+ * of the command line: remove it.
+ */
+ while (cp > cname && isspace(cp[-1]))
+ cp--;
+ if (file_printf(ms, ", from '%.*s'",
+ (int)(cp - cname), cname) == -1)
+ return 1;
+ *flags |= FLAGS_DID_CORE;
+ return 1;
+
+ tryanother:
+ ;
+ }
+ }
+ break;
+ }
+#endif
+ return 0;
+}
+
+private off_t
+get_offset_from_virtaddr(struct magic_set *ms, int swap, int clazz, int fd,
+ off_t off, int num, off_t fsize, uint64_t virtaddr)
+{
+ Elf32_Phdr ph32;
+ Elf64_Phdr ph64;
+
+ /*
+ * Loop through all the program headers and find the header with
+ * virtual address in which the "virtaddr" belongs to.
+ */
+ for ( ; num; num--) {
+ if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) {
+ file_badread(ms);
+ return -1;
+ }
+ off += xph_sizeof;
+
+ if (fsize != SIZE_UNKNOWN && xph_offset > fsize) {
+ /* Perhaps warn here */
+ continue;
+ }
+
+ if (virtaddr >= xph_vaddr && virtaddr < xph_vaddr + xph_filesz)
+ return xph_offset + (virtaddr - xph_vaddr);
+ }
+ return 0;
+}
+
+private size_t
+get_string_on_virtaddr(struct magic_set *ms,
+ int swap, int clazz, int fd, off_t ph_off, int ph_num,
+ off_t fsize, uint64_t virtaddr, char *buf, ssize_t buflen)
+{
+ char *bptr;
+ off_t offset;
+
+ if (buflen == 0)
+ return 0;
+
+ offset = get_offset_from_virtaddr(ms, swap, clazz, fd, ph_off, ph_num,
+ fsize, virtaddr);
+ if ((buflen = pread(fd, buf, CAST(size_t, buflen), offset)) <= 0) {
+ file_badread(ms);
+ return 0;
+ }
+
+ buf[buflen - 1] = '\0';
+
+ /* We expect only printable characters, so return if buffer contains
+ * non-printable character before the '\0' or just '\0'. */
+ for (bptr = buf; *bptr && isprint((unsigned char)*bptr); bptr++)
+ continue;
+ if (*bptr != '\0')
+ return 0;
+
+ return bptr - buf;
+}
+
+
+private int
+do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
+ int swap, uint32_t namesz __attribute__((__unused__)),
+ uint32_t descsz __attribute__((__unused__)),
+ size_t noff __attribute__((__unused__)), size_t doff,
+ int *flags, size_t size __attribute__((__unused__)), int clazz,
+ int fd, off_t ph_off, int ph_num, off_t fsize)
+{
+#ifdef ELFCORE
+ Aux32Info auxv32;
+ Aux64Info auxv64;
+ size_t elsize = xauxv_sizeof;
+ const char *tag;
+ int is_string;
+ size_t nval;
+
+ if ((*flags & (FLAGS_IS_CORE|FLAGS_DID_CORE_STYLE)) !=
+ (FLAGS_IS_CORE|FLAGS_DID_CORE_STYLE))
+ return 0;
+
+ switch (*flags & FLAGS_CORE_STYLE) {
+ case OS_STYLE_SVR4:
+ if (type != NT_AUXV)
+ return 0;
+ break;
+#ifdef notyet
+ case OS_STYLE_NETBSD:
+ if (type != NT_NETBSD_CORE_AUXV)
+ return 0;
+ break;
+ case OS_STYLE_FREEBSD:
+ if (type != NT_FREEBSD_PROCSTAT_AUXV)
+ return 0;
+ break;
+#endif
+ default:
+ return 0;
+ }
+
+ *flags |= FLAGS_DID_AUXV;
+
+ nval = 0;
+ for (size_t off = 0; off + elsize <= descsz; off += elsize) {
+ (void)memcpy(xauxv_addr, &nbuf[doff + off], xauxv_sizeof);
+ /* Limit processing to 50 vector entries to prevent DoS */
+ if (nval++ >= 50) {
+ file_error(ms, 0, "Too many ELF Auxv elements");
+ return 1;
+ }
+
+ switch(xauxv_type) {
+ case AT_LINUX_EXECFN:
+ is_string = 1;
+ tag = "execfn";
+ break;
+ case AT_LINUX_PLATFORM:
+ is_string = 1;
+ tag = "platform";
+ break;
+ case AT_LINUX_UID:
+ is_string = 0;
+ tag = "real uid";
+ break;
+ case AT_LINUX_GID:
+ is_string = 0;
+ tag = "real gid";
+ break;
+ case AT_LINUX_EUID:
+ is_string = 0;
+ tag = "effective uid";
+ break;
+ case AT_LINUX_EGID:
+ is_string = 0;
+ tag = "effective gid";
+ break;
+ default:
+ is_string = 0;
+ tag = NULL;
+ break;
+ }
+
+ if (tag == NULL)
+ continue;
+
+ if (is_string) {
+ char buf[256];
+ ssize_t buflen;
+ buflen = get_string_on_virtaddr(ms, swap, clazz, fd,
+ ph_off, ph_num, fsize, xauxv_val, buf, sizeof(buf));
+
+ if (buflen == 0)
+ continue;
+
+ if (file_printf(ms, ", %s: '%s'", tag, buf) == -1)
+ return 0;
+ } else {
+ if (file_printf(ms, ", %s: %d", tag, (int) xauxv_val)
+ == -1)
+ return 0;
+ }
+ }
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+private size_t
+donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size,
+ int clazz, int swap, size_t align, int *flags, uint16_t *notecount,
+ int fd, off_t ph_off, int ph_num, off_t fsize)
+{
+ Elf32_Nhdr nh32;
+ Elf64_Nhdr nh64;
+ size_t noff, doff;
+ uint32_t namesz, descsz;
+ unsigned char *nbuf = CAST(unsigned char *, vbuf);
+
+ if (*notecount == 0)
+ return 0;
+ --*notecount;
+
+ if (xnh_sizeof + offset > size) {
+ /*
+ * We're out of note headers.
+ */
+ return xnh_sizeof + offset;
+ }
+
+ (void)memcpy(xnh_addr, &nbuf[offset], xnh_sizeof);
+ offset += xnh_sizeof;
+
+ namesz = xnh_namesz;
+ descsz = xnh_descsz;
+
+ if ((namesz == 0) && (descsz == 0)) {
+ /*
+ * We're out of note headers.
+ */
+ return (offset >= size) ? offset : size;
+ }
+
+ if (namesz & 0x80000000) {
+ (void)file_printf(ms, ", bad note name size %#lx",
+ (unsigned long)namesz);
+ return 0;
+ }
+
+ if (descsz & 0x80000000) {
+ (void)file_printf(ms, ", bad note description size %#lx",
+ (unsigned long)descsz);
+ return 0;
+ }
+
+ noff = offset;
+ doff = ELF_ALIGN(offset + namesz);
+
+ if (offset + namesz > size) {
+ /*
+ * We're past the end of the buffer.
+ */
+ return doff;
+ }
+
+ offset = ELF_ALIGN(doff + descsz);
+ if (doff + descsz > size) {
+ /*
+ * We're past the end of the buffer.
+ */
+ return (offset >= size) ? offset : size;
+ }
+
+
+ if ((*flags & FLAGS_DID_OS_NOTE) == 0) {
+ if (do_os_note(ms, nbuf, xnh_type, swap,
+ namesz, descsz, noff, doff, flags))
+ return offset;
+ }
+
+ if ((*flags & FLAGS_DID_BUILD_ID) == 0) {
+ if (do_bid_note(ms, nbuf, xnh_type, swap,
+ namesz, descsz, noff, doff, flags))
+ return offset;
+ }
+
+ if ((*flags & FLAGS_DID_NETBSD_PAX) == 0) {
+ if (do_pax_note(ms, nbuf, xnh_type, swap,
+ namesz, descsz, noff, doff, flags))
+ return offset;
+ }
+
+ if ((*flags & FLAGS_DID_CORE) == 0) {
+ if (do_core_note(ms, nbuf, xnh_type, swap,
+ namesz, descsz, noff, doff, flags, size, clazz))
+ return offset;
+ }
+
+ if ((*flags & FLAGS_DID_AUXV) == 0) {
+ if (do_auxv_note(ms, nbuf, xnh_type, swap,
+ namesz, descsz, noff, doff, flags, size, clazz,
+ fd, ph_off, ph_num, fsize))
+ return offset;
+ }
+
+ if (namesz == 7 && strcmp((char *)&nbuf[noff], "NetBSD") == 0) {
+ if (descsz > 100)
+ descsz = 100;
+ switch (xnh_type) {
+ case NT_NETBSD_VERSION:
+ return offset;
+ case NT_NETBSD_MARCH:
+ if (*flags & FLAGS_DID_NETBSD_MARCH)
+ return offset;
+ *flags |= FLAGS_DID_NETBSD_MARCH;
+ if (file_printf(ms, ", compiled for: %.*s",
+ (int)descsz, (const char *)&nbuf[doff]) == -1)
+ return offset;
+ break;
+ case NT_NETBSD_CMODEL:
+ if (*flags & FLAGS_DID_NETBSD_CMODEL)
+ return offset;
+ *flags |= FLAGS_DID_NETBSD_CMODEL;
+ if (file_printf(ms, ", compiler model: %.*s",
+ (int)descsz, (const char *)&nbuf[doff]) == -1)
+ return offset;
+ break;
+ default:
+ if (*flags & FLAGS_DID_NETBSD_UNKNOWN)
+ return offset;
+ *flags |= FLAGS_DID_NETBSD_UNKNOWN;
+ if (file_printf(ms, ", note=%u", xnh_type) == -1)
+ return offset;
+ break;
+ }
+ return offset;
+ }
+
+ return offset;
+}
+
+/* SunOS 5.x hardware capability descriptions */
+typedef struct cap_desc {
+ uint64_t cd_mask;
+ const char *cd_name;
+} cap_desc_t;
+
+static const cap_desc_t cap_desc_sparc[] = {
+ { AV_SPARC_MUL32, "MUL32" },
+ { AV_SPARC_DIV32, "DIV32" },
+ { AV_SPARC_FSMULD, "FSMULD" },
+ { AV_SPARC_V8PLUS, "V8PLUS" },
+ { AV_SPARC_POPC, "POPC" },
+ { AV_SPARC_VIS, "VIS" },
+ { AV_SPARC_VIS2, "VIS2" },
+ { AV_SPARC_ASI_BLK_INIT, "ASI_BLK_INIT" },
+ { AV_SPARC_FMAF, "FMAF" },
+ { AV_SPARC_FJFMAU, "FJFMAU" },
+ { AV_SPARC_IMA, "IMA" },
+ { 0, NULL }
+};
+
+static const cap_desc_t cap_desc_386[] = {
+ { AV_386_FPU, "FPU" },
+ { AV_386_TSC, "TSC" },
+ { AV_386_CX8, "CX8" },
+ { AV_386_SEP, "SEP" },
+ { AV_386_AMD_SYSC, "AMD_SYSC" },
+ { AV_386_CMOV, "CMOV" },
+ { AV_386_MMX, "MMX" },
+ { AV_386_AMD_MMX, "AMD_MMX" },
+ { AV_386_AMD_3DNow, "AMD_3DNow" },
+ { AV_386_AMD_3DNowx, "AMD_3DNowx" },
+ { AV_386_FXSR, "FXSR" },
+ { AV_386_SSE, "SSE" },
+ { AV_386_SSE2, "SSE2" },
+ { AV_386_PAUSE, "PAUSE" },
+ { AV_386_SSE3, "SSE3" },
+ { AV_386_MON, "MON" },
+ { AV_386_CX16, "CX16" },
+ { AV_386_AHF, "AHF" },
+ { AV_386_TSCP, "TSCP" },
+ { AV_386_AMD_SSE4A, "AMD_SSE4A" },
+ { AV_386_POPCNT, "POPCNT" },
+ { AV_386_AMD_LZCNT, "AMD_LZCNT" },
+ { AV_386_SSSE3, "SSSE3" },
+ { AV_386_SSE4_1, "SSE4.1" },
+ { AV_386_SSE4_2, "SSE4.2" },
+ { 0, NULL }
+};
+
+private int
+doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
+ size_t size, off_t fsize, int mach, int strtab, int *flags,
+ uint16_t *notecount)
+{
+ Elf32_Shdr sh32;
+ Elf64_Shdr sh64;
+ int stripped = 1, has_debug_info = 0;
+ size_t nbadcap = 0;
+ void *nbuf;
+ off_t noff, coff, name_off;
+ uint64_t cap_hw1 = 0; /* SunOS 5.x hardware capabilities */
+ uint64_t cap_sf1 = 0; /* SunOS 5.x software capabilities */
+ char name[50];
+ ssize_t namesize;
+
+ if (size != xsh_sizeof) {
+ if (file_printf(ms, ", corrupted section header size") == -1)
+ return -1;
+ return 0;
+ }
+
+ /* Read offset of name section to be able to read section names later */
+ if (pread(fd, xsh_addr, xsh_sizeof, CAST(off_t, (off + size * strtab)))
+ < (ssize_t)xsh_sizeof) {
+ if (file_printf(ms, ", missing section headers") == -1)
+ return -1;
+ return 0;
+ }
+ name_off = xsh_offset;
+
+ for ( ; num; num--) {
+ /* Read the name of this section. */
+ if ((namesize = pread(fd, name, sizeof(name) - 1, name_off + xsh_name)) == -1) {
+ file_badread(ms);
+ return -1;
+ }
+ name[namesize] = '\0';
+ if (strcmp(name, ".debug_info") == 0) {
+ has_debug_info = 1;
+ stripped = 0;
+ }
+
+ if (pread(fd, xsh_addr, xsh_sizeof, off) < (ssize_t)xsh_sizeof) {
+ file_badread(ms);
+ return -1;
+ }
+ off += size;
+
+ /* Things we can determine before we seek */
+ switch (xsh_type) {
+ case SHT_SYMTAB:
+#if 0
+ case SHT_DYNSYM:
+#endif
+ stripped = 0;
+ break;
+ default:
+ if (fsize != SIZE_UNKNOWN && xsh_offset > fsize) {
+ /* Perhaps warn here */
+ continue;
+ }
+ break;
+ }
+
+
+ /* Things we can determine when we seek */
+ switch (xsh_type) {
+ case SHT_NOTE:
+ if ((uintmax_t)(xsh_size + xsh_offset) >
+ (uintmax_t)fsize) {
+ if (file_printf(ms,
+ ", note offset/size %#" INTMAX_T_FORMAT
+ "x+%#" INTMAX_T_FORMAT "x exceeds"
+ " file size %#" INTMAX_T_FORMAT "x",
+ (uintmax_t)xsh_offset, (uintmax_t)xsh_size,
+ (uintmax_t)fsize) == -1)
+ return -1;
+ return 0;
+ }
+ if ((nbuf = malloc(xsh_size)) == NULL) {
+ file_error(ms, errno, "Cannot allocate memory"
+ " for note");
+ return -1;
+ }
+ if (pread(fd, nbuf, xsh_size, xsh_offset) <
+ (ssize_t)xsh_size) {
+ file_badread(ms);
+ free(nbuf);
+ return -1;
+ }
+
+ noff = 0;
+ for (;;) {
+ if (noff >= (off_t)xsh_size)
+ break;
+ noff = donote(ms, nbuf, (size_t)noff,
+ xsh_size, clazz, swap, 4, flags, notecount,
+ fd, 0, 0, 0);
+ if (noff == 0)
+ break;
+ }
+ free(nbuf);
+ break;
+ case SHT_SUNW_cap:
+ switch (mach) {
+ case EM_SPARC:
+ case EM_SPARCV9:
+ case EM_IA_64:
+ case EM_386:
+ case EM_AMD64:
+ break;
+ default:
+ goto skip;
+ }
+
+ if (nbadcap > 5)
+ break;
+ if (lseek(fd, xsh_offset, SEEK_SET) == (off_t)-1) {
+ file_badseek(ms);
+ return -1;
+ }
+ coff = 0;
+ for (;;) {
+ Elf32_Cap cap32;
+ Elf64_Cap cap64;
+ char cbuf[/*CONSTCOND*/
+ MAX(sizeof cap32, sizeof cap64)];
+ if ((coff += xcap_sizeof) > (off_t)xsh_size)
+ break;
+ if (read(fd, cbuf, (size_t)xcap_sizeof) !=
+ (ssize_t)xcap_sizeof) {
+ file_badread(ms);
+ return -1;
+ }
+ if (cbuf[0] == 'A') {
+#ifdef notyet
+ char *p = cbuf + 1;
+ uint32_t len, tag;
+ memcpy(&len, p, sizeof(len));
+ p += 4;
+ len = getu32(swap, len);
+ if (memcmp("gnu", p, 3) != 0) {
+ if (file_printf(ms,
+ ", unknown capability %.3s", p)
+ == -1)
+ return -1;
+ break;
+ }
+ p += strlen(p) + 1;
+ tag = *p++;
+ memcpy(&len, p, sizeof(len));
+ p += 4;
+ len = getu32(swap, len);
+ if (tag != 1) {
+ if (file_printf(ms, ", unknown gnu"
+ " capability tag %d", tag)
+ == -1)
+ return -1;
+ break;
+ }
+ // gnu attributes
+#endif
+ break;
+ }
+ (void)memcpy(xcap_addr, cbuf, xcap_sizeof);
+ switch (xcap_tag) {
+ case CA_SUNW_NULL:
+ break;
+ case CA_SUNW_HW_1:
+ cap_hw1 |= xcap_val;
+ break;
+ case CA_SUNW_SF_1:
+ cap_sf1 |= xcap_val;
+ break;
+ default:
+ if (file_printf(ms,
+ ", with unknown capability "
+ "%#" INT64_T_FORMAT "x = %#"
+ INT64_T_FORMAT "x",
+ (unsigned long long)xcap_tag,
+ (unsigned long long)xcap_val) == -1)
+ return -1;
+ if (nbadcap++ > 2)
+ coff = xsh_size;
+ break;
+ }
+ }
+ /*FALLTHROUGH*/
+ skip:
+ default:
+ break;
+ }
+ }
+
+ if (has_debug_info) {
+ if (file_printf(ms, ", with debug_info") == -1)
+ return -1;
+ }
+ if (file_printf(ms, ", %sstripped", stripped ? "" : "not ") == -1)
+ return -1;
+ if (cap_hw1) {
+ const cap_desc_t *cdp;
+ switch (mach) {
+ case EM_SPARC:
+ case EM_SPARC32PLUS:
+ case EM_SPARCV9:
+ cdp = cap_desc_sparc;
+ break;
+ case EM_386:
+ case EM_IA_64:
+ case EM_AMD64:
+ cdp = cap_desc_386;
+ break;
+ default:
+ cdp = NULL;
+ break;
+ }
+ if (file_printf(ms, ", uses") == -1)
+ return -1;
+ if (cdp) {
+ while (cdp->cd_name) {
+ if (cap_hw1 & cdp->cd_mask) {
+ if (file_printf(ms,
+ " %s", cdp->cd_name) == -1)
+ return -1;
+ cap_hw1 &= ~cdp->cd_mask;
+ }
+ ++cdp;
+ }
+ if (cap_hw1)
+ if (file_printf(ms,
+ " unknown hardware capability %#"
+ INT64_T_FORMAT "x",
+ (unsigned long long)cap_hw1) == -1)
+ return -1;
+ } else {
+ if (file_printf(ms,
+ " hardware capability %#" INT64_T_FORMAT "x",
+ (unsigned long long)cap_hw1) == -1)
+ return -1;
+ }
+ }
+ if (cap_sf1) {
+ if (cap_sf1 & SF1_SUNW_FPUSED) {
+ if (file_printf(ms,
+ (cap_sf1 & SF1_SUNW_FPKNWN)
+ ? ", uses frame pointer"
+ : ", not known to use frame pointer") == -1)
+ return -1;
+ }
+ cap_sf1 &= ~SF1_SUNW_MASK;
+ if (cap_sf1)
+ if (file_printf(ms,
+ ", with unknown software capability %#"
+ INT64_T_FORMAT "x",
+ (unsigned long long)cap_sf1) == -1)
+ return -1;
+ }
+ return 0;
+}
+
+/*
+ * Look through the program headers of an executable image, searching
+ * for a PT_INTERP section; if one is found, it's dynamically linked,
+ * otherwise it's statically linked.
+ */
+private int
+dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
+ int num, size_t size, off_t fsize, int sh_num, int *flags,
+ uint16_t *notecount)
+{
+ Elf32_Phdr ph32;
+ Elf64_Phdr ph64;
+ const char *linking_style = "statically";
+ const char *interp = "";
+ unsigned char nbuf[BUFSIZ];
+ char ibuf[BUFSIZ];
+ ssize_t bufsize;
+ size_t offset, align, len;
+
+ if (size != xph_sizeof) {
+ if (file_printf(ms, ", corrupted program header size") == -1)
+ return -1;
+ return 0;
+ }
+
+ for ( ; num; num--) {
+ if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) {
+ file_badread(ms);
+ return -1;
+ }
+
+ off += size;
+ bufsize = 0;
+ align = 4;
+
+ /* Things we can determine before we seek */
+ switch (xph_type) {
+ case PT_DYNAMIC:
+ linking_style = "dynamically";
+ break;
+ case PT_NOTE:
+ if (sh_num) /* Did this through section headers */
+ continue;
+ if (((align = xph_align) & 0x80000000UL) != 0 ||
+ align < 4) {
+ if (file_printf(ms,
+ ", invalid note alignment %#lx",
+ (unsigned long)align) == -1)
+ return -1;
+ align = 4;
+ }
+ /*FALLTHROUGH*/
+ case PT_INTERP:
+ len = xph_filesz < sizeof(nbuf) ? xph_filesz
+ : sizeof(nbuf);
+ bufsize = pread(fd, nbuf, len, xph_offset);
+ if (bufsize == -1) {
+ file_badread(ms);
+ return -1;
+ }
+ break;
+ default:
+ if (fsize != SIZE_UNKNOWN && xph_offset > fsize) {
+ /* Maybe warn here? */
+ continue;
+ }
+ break;
+ }
+
+ /* Things we can determine when we seek */
+ switch (xph_type) {
+ case PT_INTERP:
+ if (bufsize && nbuf[0]) {
+ nbuf[bufsize - 1] = '\0';
+ interp = (const char *)nbuf;
+ } else
+ interp = "*empty*";
+ break;
+ case PT_NOTE:
+ /*
+ * This is a PT_NOTE section; loop through all the notes
+ * in the section.
+ */
+ offset = 0;
+ for (;;) {
+ if (offset >= (size_t)bufsize)
+ break;
+ offset = donote(ms, nbuf, offset,
+ (size_t)bufsize, clazz, swap, align,
+ flags, notecount, fd, 0, 0, 0);
+ if (offset == 0)
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (file_printf(ms, ", %s linked", linking_style)
+ == -1)
+ return -1;
+ if (interp[0])
+ if (file_printf(ms, ", interpreter %s",
+ file_printable(ibuf, sizeof(ibuf), interp)) == -1)
+ return -1;
+ return 0;
+}
+
+
+protected int
+file_tryelf(struct magic_set *ms, int fd, const unsigned char *buf,
+ size_t nbytes)
+{
+ union {
+ int32_t l;
+ char c[sizeof (int32_t)];
+ } u;
+ int clazz;
+ int swap;
+ struct stat st;
+ off_t fsize;
+ int flags = 0;
+ Elf32_Ehdr elf32hdr;
+ Elf64_Ehdr elf64hdr;
+ uint16_t type, phnum, shnum, notecount;
+
+ if (ms->flags & (MAGIC_MIME|MAGIC_APPLE|MAGIC_EXTENSION))
+ return 0;
+ /*
+ * ELF executables have multiple section headers in arbitrary
+ * file locations and thus file(1) cannot determine it from easily.
+ * Instead we traverse thru all section headers until a symbol table
+ * one is found or else the binary is stripped.
+ * Return immediately if it's not ELF (so we avoid pipe2file unless needed).
+ */
+ if (buf[EI_MAG0] != ELFMAG0
+ || (buf[EI_MAG1] != ELFMAG1 && buf[EI_MAG1] != OLFMAG1)
+ || buf[EI_MAG2] != ELFMAG2 || buf[EI_MAG3] != ELFMAG3)
+ return 0;
+
+ /*
+ * If we cannot seek, it must be a pipe, socket or fifo.
+ */
+ if((lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) && (errno == ESPIPE))
+ fd = file_pipe2file(ms, fd, buf, nbytes);
+
+ if (fstat(fd, &st) == -1) {
+ file_badread(ms);
+ return -1;
+ }
+ if (S_ISREG(st.st_mode) || st.st_size != 0)
+ fsize = st.st_size;
+ else
+ fsize = SIZE_UNKNOWN;
+
+ clazz = buf[EI_CLASS];
+
+ switch (clazz) {
+ case ELFCLASS32:
+#undef elf_getu
+#define elf_getu(a, b) elf_getu32(a, b)
+#undef elfhdr
+#define elfhdr elf32hdr
+#include "elfclass.h"
+ case ELFCLASS64:
+#undef elf_getu
+#define elf_getu(a, b) elf_getu64(a, b)
+#undef elfhdr
+#define elfhdr elf64hdr
+#include "elfclass.h"
+ default:
+ if (file_printf(ms, ", unknown class %d", clazz) == -1)
+ return -1;
+ break;
+ }
+ return 0;
+}
+#endif
Property changes on: trunk/contrib/file/src/readelf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/readelf.h
===================================================================
--- trunk/contrib/file/src/readelf.h (rev 0)
+++ trunk/contrib/file/src/readelf.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,433 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
+ *
+ * Provide elf data structures for non-elf machines, allowing file
+ * non-elf hosts to determine if an elf binary is stripped.
+ * Note: cobbled from the linux header file, with modifications
+ */
+#ifndef __fake_elf_h__
+#define __fake_elf_h__
+
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+typedef uint32_t Elf32_Addr;
+typedef uint32_t Elf32_Off;
+typedef uint16_t Elf32_Half;
+typedef uint32_t Elf32_Word;
+typedef uint8_t Elf32_Char;
+
+typedef uint64_t Elf64_Addr;
+typedef uint64_t Elf64_Off;
+typedef uint64_t Elf64_Xword;
+typedef uint16_t Elf64_Half;
+typedef uint32_t Elf64_Word;
+typedef uint8_t Elf64_Char;
+
+#define EI_NIDENT 16
+
+typedef struct {
+ Elf32_Word a_type; /* 32-bit id */
+ Elf32_Word a_v; /* 32-bit id */
+} Aux32Info;
+
+typedef struct {
+ Elf64_Xword a_type; /* 64-bit id */
+ Elf64_Xword a_v; /* 64-bit id */
+} Aux64Info;
+
+#define AT_NULL 0 /* end of vector */
+#define AT_IGNORE 1 /* entry should be ignored */
+#define AT_EXECFD 2 /* file descriptor of program */
+#define AT_PHDR 3 /* program headers for program */
+#define AT_PHENT 4 /* size of program header entry */
+#define AT_PHNUM 5 /* number of program headers */
+#define AT_PAGESZ 6 /* system page size */
+#define AT_BASE 7 /* base address of interpreter */
+#define AT_FLAGS 8 /* flags */
+#define AT_ENTRY 9 /* entry point of program */
+#define AT_LINUX_NOTELF 10 /* program is not ELF */
+#define AT_LINUX_UID 11 /* real uid */
+#define AT_LINUX_EUID 12 /* effective uid */
+#define AT_LINUX_GID 13 /* real gid */
+#define AT_LINUX_EGID 14 /* effective gid */
+#define AT_LINUX_PLATFORM 15 /* string identifying CPU for optimizations */
+#define AT_LINUX_HWCAP 16 /* arch dependent hints at CPU capabilities */
+#define AT_LINUX_CLKTCK 17 /* frequency at which times() increments */
+/* AT_* values 18 through 22 are reserved */
+#define AT_LINUX_SECURE 23 /* secure mode boolean */
+#define AT_LINUX_BASE_PLATFORM 24 /* string identifying real platform, may
+ * differ from AT_PLATFORM. */
+#define AT_LINUX_RANDOM 25 /* address of 16 random bytes */
+#define AT_LINUX_HWCAP2 26 /* extension of AT_HWCAP */
+#define AT_LINUX_EXECFN 31 /* filename of program */
+
+typedef struct {
+ Elf32_Char e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry; /* Entry point */
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf32_Word e_flags;
+ Elf32_Half e_ehsize;
+ Elf32_Half e_phentsize;
+ Elf32_Half e_phnum;
+ Elf32_Half e_shentsize;
+ Elf32_Half e_shnum;
+ Elf32_Half e_shstrndx;
+} Elf32_Ehdr;
+
+typedef struct {
+ Elf64_Char e_ident[EI_NIDENT];
+ Elf64_Half e_type;
+ Elf64_Half e_machine;
+ Elf64_Word e_version;
+ Elf64_Addr e_entry; /* Entry point */
+ Elf64_Off e_phoff;
+ Elf64_Off e_shoff;
+ Elf64_Word e_flags;
+ Elf64_Half e_ehsize;
+ Elf64_Half e_phentsize;
+ Elf64_Half e_phnum;
+ Elf64_Half e_shentsize;
+ Elf64_Half e_shnum;
+ Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+
+/* e_type */
+#define ET_REL 1
+#define ET_EXEC 2
+#define ET_DYN 3
+#define ET_CORE 4
+
+/* e_machine (used only for SunOS 5.x hardware capabilities) */
+#define EM_SPARC 2
+#define EM_386 3
+#define EM_SPARC32PLUS 18
+#define EM_SPARCV9 43
+#define EM_IA_64 50
+#define EM_AMD64 62
+
+/* sh_type */
+#define SHT_SYMTAB 2
+#define SHT_NOTE 7
+#define SHT_DYNSYM 11
+#define SHT_SUNW_cap 0x6ffffff5 /* SunOS 5.x hw/sw capabilities */
+
+/* elf type */
+#define ELFDATANONE 0 /* e_ident[EI_DATA] */
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+
+/* elf class */
+#define ELFCLASSNONE 0
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+
+/* magic number */
+#define EI_MAG0 0 /* e_ident[] indexes */
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_PAD 7
+
+#define ELFMAG0 0x7f /* EI_MAG */
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
+#define ELFMAG "\177ELF"
+
+#define OLFMAG1 'O'
+#define OLFMAG "\177OLF"
+
+typedef struct {
+ Elf32_Word p_type;
+ Elf32_Off p_offset;
+ Elf32_Addr p_vaddr;
+ Elf32_Addr p_paddr;
+ Elf32_Word p_filesz;
+ Elf32_Word p_memsz;
+ Elf32_Word p_flags;
+ Elf32_Word p_align;
+} Elf32_Phdr;
+
+typedef struct {
+ Elf64_Word p_type;
+ Elf64_Word p_flags;
+ Elf64_Off p_offset;
+ Elf64_Addr p_vaddr;
+ Elf64_Addr p_paddr;
+ Elf64_Xword p_filesz;
+ Elf64_Xword p_memsz;
+ Elf64_Xword p_align;
+} Elf64_Phdr;
+
+#define PT_NULL 0 /* p_type */
+#define PT_LOAD 1
+#define PT_DYNAMIC 2
+#define PT_INTERP 3
+#define PT_NOTE 4
+#define PT_SHLIB 5
+#define PT_PHDR 6
+#define PT_NUM 7
+
+typedef struct {
+ Elf32_Word sh_name;
+ Elf32_Word sh_type;
+ Elf32_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf32_Word sh_size;
+ Elf32_Word sh_link;
+ Elf32_Word sh_info;
+ Elf32_Word sh_addralign;
+ Elf32_Word sh_entsize;
+} Elf32_Shdr;
+
+typedef struct {
+ Elf64_Word sh_name;
+ Elf64_Word sh_type;
+ Elf64_Off sh_flags;
+ Elf64_Addr sh_addr;
+ Elf64_Off sh_offset;
+ Elf64_Off sh_size;
+ Elf64_Word sh_link;
+ Elf64_Word sh_info;
+ Elf64_Off sh_addralign;
+ Elf64_Off sh_entsize;
+} Elf64_Shdr;
+
+#define NT_NETBSD_CORE_PROCINFO 1
+#define NT_NETBSD_CORE_AUXV 2
+
+struct NetBSD_elfcore_procinfo {
+ /* Version 1 fields start here. */
+ uint32_t cpi_version; /* our version */
+ uint32_t cpi_cpisize; /* sizeof(this struct) */
+ uint32_t cpi_signo; /* killing signal */
+ uint32_t cpi_sigcode; /* signal code */
+ uint32_t cpi_sigpend[4]; /* pending signals */
+ uint32_t cpi_sigmask[4]; /* blocked signals */
+ uint32_t cpi_sigignore[4]; /* ignored signals */
+ uint32_t cpi_sigcatch[4]; /* caught signals */
+ int32_t cpi_pid; /* process ID */
+ int32_t cpi_ppid; /* parent process ID */
+ int32_t cpi_pgrp; /* process group ID */
+ int32_t cpi_sid; /* session ID */
+ uint32_t cpi_ruid; /* real user ID */
+ uint32_t cpi_euid; /* effective user ID */
+ uint32_t cpi_svuid; /* saved user ID */
+ uint32_t cpi_rgid; /* real group ID */
+ uint32_t cpi_egid; /* effective group ID */
+ uint32_t cpi_svgid; /* saved group ID */
+ uint32_t cpi_nlwps; /* number of LWPs */
+ int8_t cpi_name[32]; /* copy of p->p_comm */
+ /* Add version 2 fields below here. */
+ int32_t cpi_siglwp; /* LWP target of killing signal */
+};
+
+/* Note header in a PT_NOTE section */
+typedef struct elf_note {
+ Elf32_Word n_namesz; /* Name size */
+ Elf32_Word n_descsz; /* Content size */
+ Elf32_Word n_type; /* Content type */
+} Elf32_Nhdr;
+
+typedef struct {
+ Elf64_Word n_namesz;
+ Elf64_Word n_descsz;
+ Elf64_Word n_type;
+} Elf64_Nhdr;
+
+/* Notes used in ET_CORE */
+#define NT_PRSTATUS 1
+#define NT_PRFPREG 2
+#define NT_PRPSINFO 3
+#define NT_PRXREG 4
+#define NT_TASKSTRUCT 4
+#define NT_PLATFORM 5
+#define NT_AUXV 6
+
+/* Note types used in executables */
+/* NetBSD executables (name = "NetBSD") */
+#define NT_NETBSD_VERSION 1
+#define NT_NETBSD_EMULATION 2
+#define NT_FREEBSD_VERSION 1
+#define NT_OPENBSD_VERSION 1
+#define NT_DRAGONFLY_VERSION 1
+/*
+ * GNU executables (name = "GNU")
+ * word[0]: GNU OS tags
+ * word[1]: major version
+ * word[2]: minor version
+ * word[3]: tiny version
+ */
+#define NT_GNU_VERSION 1
+
+/* GNU OS tags */
+#define GNU_OS_LINUX 0
+#define GNU_OS_HURD 1
+#define GNU_OS_SOLARIS 2
+#define GNU_OS_KFREEBSD 3
+#define GNU_OS_KNETBSD 4
+
+/*
+ * GNU Hardware capability information
+ * word[0]: Number of entries
+ * word[1]: Bitmask of enabled entries
+ * Followed by a byte id, and a NUL terminated string per entry
+ */
+#define NT_GNU_HWCAP 2
+
+/*
+ * GNU Build ID generated by ld
+ * 160 bit SHA1 [default]
+ * 128 bit md5 or uuid
+ */
+#define NT_GNU_BUILD_ID 3
+
+/*
+ * NetBSD-specific note type: PaX.
+ * There should be 1 NOTE per executable.
+ * name: PaX\0
+ * namesz: 4
+ * desc:
+ * word[0]: capability bitmask
+ * descsz: 4
+ */
+#define NT_NETBSD_PAX 3
+#define NT_NETBSD_PAX_MPROTECT 0x01 /* Force enable Mprotect */
+#define NT_NETBSD_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */
+#define NT_NETBSD_PAX_GUARD 0x04 /* Force enable Segvguard */
+#define NT_NETBSD_PAX_NOGUARD 0x08 /* Force disable Servguard */
+#define NT_NETBSD_PAX_ASLR 0x10 /* Force enable ASLR */
+#define NT_NETBSD_PAX_NOASLR 0x20 /* Force disable ASLR */
+
+/*
+ * NetBSD-specific note type: MACHINE_ARCH.
+ * There should be 1 NOTE per executable.
+ * name: NetBSD\0
+ * namesz: 7
+ * desc: string
+ * descsz: variable
+ */
+#define NT_NETBSD_MARCH 5
+
+/*
+ * NetBSD-specific note type: COMPILER MODEL.
+ * There should be 1 NOTE per executable.
+ * name: NetBSD\0
+ * namesz: 7
+ * desc: string
+ * descsz: variable
+ */
+#define NT_NETBSD_CMODEL 6
+
+/*
+ * FreeBSD specific notes
+ */
+#define NT_FREEBSD_PROCSTAT_AUXV 16
+
+#if !defined(ELFSIZE) && defined(ARCH_ELFSIZE)
+#define ELFSIZE ARCH_ELFSIZE
+#endif
+/* SunOS 5.x hardware/software capabilities */
+typedef struct {
+ Elf32_Word c_tag;
+ union {
+ Elf32_Word c_val;
+ Elf32_Addr c_ptr;
+ } c_un;
+} Elf32_Cap;
+
+typedef struct {
+ Elf64_Xword c_tag;
+ union {
+ Elf64_Xword c_val;
+ Elf64_Addr c_ptr;
+ } c_un;
+} Elf64_Cap;
+
+/* SunOS 5.x hardware/software capability tags */
+#define CA_SUNW_NULL 0
+#define CA_SUNW_HW_1 1
+#define CA_SUNW_SF_1 2
+
+/* SunOS 5.x software capabilities */
+#define SF1_SUNW_FPKNWN 0x01
+#define SF1_SUNW_FPUSED 0x02
+#define SF1_SUNW_MASK 0x03
+
+/* SunOS 5.x hardware capabilities: sparc */
+#define AV_SPARC_MUL32 0x0001
+#define AV_SPARC_DIV32 0x0002
+#define AV_SPARC_FSMULD 0x0004
+#define AV_SPARC_V8PLUS 0x0008
+#define AV_SPARC_POPC 0x0010
+#define AV_SPARC_VIS 0x0020
+#define AV_SPARC_VIS2 0x0040
+#define AV_SPARC_ASI_BLK_INIT 0x0080
+#define AV_SPARC_FMAF 0x0100
+#define AV_SPARC_FJFMAU 0x4000
+#define AV_SPARC_IMA 0x8000
+
+/* SunOS 5.x hardware capabilities: 386 */
+#define AV_386_FPU 0x00000001
+#define AV_386_TSC 0x00000002
+#define AV_386_CX8 0x00000004
+#define AV_386_SEP 0x00000008
+#define AV_386_AMD_SYSC 0x00000010
+#define AV_386_CMOV 0x00000020
+#define AV_386_MMX 0x00000040
+#define AV_386_AMD_MMX 0x00000080
+#define AV_386_AMD_3DNow 0x00000100
+#define AV_386_AMD_3DNowx 0x00000200
+#define AV_386_FXSR 0x00000400
+#define AV_386_SSE 0x00000800
+#define AV_386_SSE2 0x00001000
+#define AV_386_PAUSE 0x00002000
+#define AV_386_SSE3 0x00004000
+#define AV_386_MON 0x00008000
+#define AV_386_CX16 0x00010000
+#define AV_386_AHF 0x00020000
+#define AV_386_TSCP 0x00040000
+#define AV_386_AMD_SSE4A 0x00080000
+#define AV_386_POPCNT 0x00100000
+#define AV_386_AMD_LZCNT 0x00200000
+#define AV_386_SSSE3 0x00400000
+#define AV_386_SSE4_1 0x00800000
+#define AV_386_SSE4_2 0x01000000
+
+#endif
Property changes on: trunk/contrib/file/src/readelf.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/softmagic.c
===================================================================
--- trunk/contrib/file/src/softmagic.c (rev 0)
+++ trunk/contrib/file/src/softmagic.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,2076 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * softmagic - interpret variable magic from MAGIC
+ */
+
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: softmagic.c,v 1.249 2017/06/19 18:30:25 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <time.h>
+#include "der.h"
+
+private int match(struct magic_set *, struct magic *, uint32_t,
+ const unsigned char *, size_t, size_t, int, int, int, uint16_t *,
+ uint16_t *, int *, int *, int *);
+private int mget(struct magic_set *, const unsigned char *,
+ struct magic *, size_t, size_t, unsigned int, int, int, int, uint16_t *,
+ uint16_t *, int *, int *, int *);
+private int magiccheck(struct magic_set *, struct magic *);
+private int32_t mprint(struct magic_set *, struct magic *);
+private int moffset(struct magic_set *, struct magic *, size_t, int32_t *);
+private void mdebug(uint32_t, const char *, size_t);
+private int mcopy(struct magic_set *, union VALUETYPE *, int, int,
+ const unsigned char *, uint32_t, size_t, struct magic *);
+private int mconvert(struct magic_set *, struct magic *, int);
+private int print_sep(struct magic_set *, int);
+private int handle_annotation(struct magic_set *, struct magic *, int);
+private int cvt_8(union VALUETYPE *, const struct magic *);
+private int cvt_16(union VALUETYPE *, const struct magic *);
+private int cvt_32(union VALUETYPE *, const struct magic *);
+private int cvt_64(union VALUETYPE *, const struct magic *);
+
+#define OFFSET_OOB(n, o, i) ((n) < (uint32_t)(o) || (i) > ((n) - (o)))
+#define BE64(p) (((uint64_t)(p)->hq[0]<<56)|((uint64_t)(p)->hq[1]<<48)| \
+ ((uint64_t)(p)->hq[2]<<40)|((uint64_t)(p)->hq[3]<<32)| \
+ ((uint64_t)(p)->hq[4]<<24)|((uint64_t)(p)->hq[5]<<16)| \
+ ((uint64_t)(p)->hq[6]<<8)|((uint64_t)(p)->hq[7]))
+#define LE64(p) (((uint64_t)(p)->hq[7]<<56)|((uint64_t)(p)->hq[6]<<48)| \
+ ((uint64_t)(p)->hq[5]<<40)|((uint64_t)(p)->hq[4]<<32)| \
+ ((uint64_t)(p)->hq[3]<<24)|((uint64_t)(p)->hq[2]<<16)| \
+ ((uint64_t)(p)->hq[1]<<8)|((uint64_t)(p)->hq[0]))
+#define LE32(p) (((uint32_t)(p)->hl[3]<<24)|((uint32_t)(p)->hl[2]<<16)| \
+ ((uint32_t)(p)->hl[1]<<8)|((uint32_t)(p)->hl[0]))
+#define BE32(p) (((uint32_t)(p)->hl[0]<<24)|((uint32_t)(p)->hl[1]<<16)| \
+ ((uint32_t)(p)->hl[2]<<8)|((uint32_t)(p)->hl[3]))
+#define ME32(p) (((uint32_t)(p)->hl[1]<<24)|((uint32_t)(p)->hl[0]<<16)| \
+ ((uint32_t)(p)->hl[3]<<8)|((uint32_t)(p)->hl[2]))
+#define BE16(p) (((uint16_t)(p)->hs[0]<<8)|((uint16_t)(p)->hs[1]))
+#define LE16(p) (((uint16_t)(p)->hs[1]<<8)|((uint16_t)(p)->hs[0]))
+#define SEXT(s,v,p) ((s)?(intmax_t)(int##v##_t)(p):(intmax_t)(uint##v##_t)(p))
+
+/*
+ * softmagic - lookup one file in parsed, in-memory copy of database
+ * Passed the name and FILE * of one file to be typed.
+ */
+/*ARGSUSED1*/ /* nbytes passed for regularity, maybe need later */
+protected int
+file_softmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes,
+ uint16_t *indir_count, uint16_t *name_count, int mode, int text)
+{
+ struct mlist *ml;
+ int rv, printed_something = 0, need_separator = 0;
+ uint16_t nc, ic;
+
+ if (name_count == NULL) {
+ nc = 0;
+ name_count = &nc;
+ }
+ if (indir_count == NULL) {
+ ic = 0;
+ indir_count = ⁣
+ }
+
+ for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next)
+ if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes, 0, mode,
+ text, 0, indir_count, name_count,
+ &printed_something, &need_separator, NULL)) != 0)
+ return rv;
+
+ return 0;
+}
+
+#define FILE_FMTDEBUG
+#ifdef FILE_FMTDEBUG
+#define F(a, b, c) file_fmtcheck((a), (b), (c), __FILE__, __LINE__)
+
+private const char * __attribute__((__format_arg__(3)))
+file_fmtcheck(struct magic_set *ms, const struct magic *m, const char *def,
+ const char *file, size_t line)
+{
+ const char *ptr = fmtcheck(m->desc, def);
+ if (ptr == def)
+ file_magerror(ms,
+ "%s, %" SIZE_T_FORMAT "u: format `%s' does not match"
+ " with `%s'", file, line, m->desc, def);
+ return ptr;
+}
+#else
+#define F(a, b, c) fmtcheck((b)->desc, (c))
+#endif
+
+/*
+ * Go through the whole list, stopping if you find a match. Process all
+ * the continuations of that match before returning.
+ *
+ * We support multi-level continuations:
+ *
+ * At any time when processing a successful top-level match, there is a
+ * current continuation level; it represents the level of the last
+ * successfully matched continuation.
+ *
+ * Continuations above that level are skipped as, if we see one, it
+ * means that the continuation that controls them - i.e, the
+ * lower-level continuation preceding them - failed to match.
+ *
+ * Continuations below that level are processed as, if we see one,
+ * it means we've finished processing or skipping higher-level
+ * continuations under the control of a successful or unsuccessful
+ * lower-level continuation, and are now seeing the next lower-level
+ * continuation and should process it. The current continuation
+ * level reverts to the level of the one we're seeing.
+ *
+ * Continuations at the current level are processed as, if we see
+ * one, there's no lower-level continuation that may have failed.
+ *
+ * If a continuation matches, we bump the current continuation level
+ * so that higher-level continuations are processed.
+ */
+private int
+match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
+ const unsigned char *s, size_t nbytes, size_t offset, int mode, int text,
+ int flip, uint16_t *indir_count, uint16_t *name_count,
+ int *printed_something, int *need_separator, int *returnval)
+{
+ uint32_t magindex = 0;
+ unsigned int cont_level = 0;
+ int returnvalv = 0, e; /* if a match is found it is set to 1*/
+ int firstline = 1; /* a flag to print X\n X\n- X */
+ int print = (ms->flags & MAGIC_NODESC) == 0;
+
+ if (returnval == NULL)
+ returnval = &returnvalv;
+
+ if (file_check_mem(ms, cont_level) == -1)
+ return -1;
+
+ for (magindex = 0; magindex < nmagic; magindex++) {
+ int flush = 0;
+ struct magic *m = &magic[magindex];
+
+ if (m->type != FILE_NAME)
+ if ((IS_STRING(m->type) &&
+#define FLT (STRING_BINTEST | STRING_TEXTTEST)
+ ((text && (m->str_flags & FLT) == STRING_BINTEST) ||
+ (!text && (m->str_flags & FLT) == STRING_TEXTTEST))) ||
+ (m->flag & mode) != mode) {
+flush:
+ /* Skip sub-tests */
+ while (magindex < nmagic - 1 &&
+ magic[magindex + 1].cont_level != 0)
+ magindex++;
+ cont_level = 0;
+ continue; /* Skip to next top-level test*/
+ }
+
+ ms->offset = m->offset;
+ ms->line = m->lineno;
+
+ /* if main entry matches, print it... */
+ switch (mget(ms, s, m, nbytes, offset, cont_level, mode, text,
+ flip, indir_count, name_count,
+ printed_something, need_separator, returnval)) {
+ case -1:
+ return -1;
+ case 0:
+ flush = m->reln != '!';
+ break;
+ default:
+ if (m->type == FILE_INDIRECT)
+ *returnval = 1;
+
+ switch (magiccheck(ms, m)) {
+ case -1:
+ return -1;
+ case 0:
+ flush++;
+ break;
+ default:
+ flush = 0;
+ break;
+ }
+ break;
+ }
+ if (flush) {
+ /*
+ * main entry didn't match,
+ * flush its continuations
+ */
+ goto flush;
+ }
+
+ if ((e = handle_annotation(ms, m, firstline)) != 0) {
+ *need_separator = 1;
+ *printed_something = 1;
+ *returnval = 1;
+ return e;
+ }
+
+ /*
+ * If we are going to print something, we'll need to print
+ * a blank before we print something else.
+ */
+ if (*m->desc) {
+ *need_separator = 1;
+ *printed_something = 1;
+ if (print_sep(ms, firstline) == -1)
+ return -1;
+ }
+
+
+ if (print && mprint(ms, m) == -1)
+ return -1;
+
+ switch (moffset(ms, m, nbytes, &ms->c.li[cont_level].off)) {
+ case -1:
+ case 0:
+ goto flush;
+ default:
+ break;
+ }
+
+ /* and any continuations that match */
+ if (file_check_mem(ms, ++cont_level) == -1)
+ return -1;
+
+ while (magindex + 1 < nmagic &&
+ magic[magindex + 1].cont_level != 0) {
+ m = &magic[++magindex];
+ ms->line = m->lineno; /* for messages */
+
+ if (cont_level < m->cont_level)
+ continue;
+ if (cont_level > m->cont_level) {
+ /*
+ * We're at the end of the level
+ * "cont_level" continuations.
+ */
+ cont_level = m->cont_level;
+ }
+ ms->offset = m->offset;
+ if (m->flag & OFFADD) {
+ ms->offset +=
+ ms->c.li[cont_level - 1].off;
+ }
+
+#ifdef ENABLE_CONDITIONALS
+ if (m->cond == COND_ELSE ||
+ m->cond == COND_ELIF) {
+ if (ms->c.li[cont_level].last_match == 1)
+ continue;
+ }
+#endif
+ switch (mget(ms, s, m, nbytes, offset, cont_level, mode,
+ text, flip, indir_count, name_count,
+ printed_something, need_separator, returnval)) {
+ case -1:
+ return -1;
+ case 0:
+ if (m->reln != '!')
+ continue;
+ flush = 1;
+ break;
+ default:
+ if (m->type == FILE_INDIRECT)
+ *returnval = 1;
+ flush = 0;
+ break;
+ }
+
+ switch (flush ? 1 : magiccheck(ms, m)) {
+ case -1:
+ return -1;
+ case 0:
+#ifdef ENABLE_CONDITIONALS
+ ms->c.li[cont_level].last_match = 0;
+#endif
+ break;
+ default:
+#ifdef ENABLE_CONDITIONALS
+ ms->c.li[cont_level].last_match = 1;
+#endif
+ if (m->type == FILE_CLEAR)
+ ms->c.li[cont_level].got_match = 0;
+ else if (ms->c.li[cont_level].got_match) {
+ if (m->type == FILE_DEFAULT)
+ break;
+ } else
+ ms->c.li[cont_level].got_match = 1;
+
+ if ((e = handle_annotation(ms, m, firstline)) != 0) {
+ *need_separator = 1;
+ *printed_something = 1;
+ *returnval = 1;
+ return e;
+ }
+ /*
+ * If we are going to print something,
+ * make sure that we have a separator first.
+ */
+ if (*m->desc) {
+ if (!*printed_something) {
+ *printed_something = 1;
+ if (print_sep(ms, firstline)
+ == -1)
+ return -1;
+ }
+ }
+ /*
+ * This continuation matched. Print
+ * its message, with a blank before it
+ * if the previous item printed and
+ * this item isn't empty.
+ */
+ /* space if previous printed */
+ if (*need_separator
+ && ((m->flag & NOSPACE) == 0)
+ && *m->desc) {
+ if (print &&
+ file_printf(ms, " ") == -1)
+ return -1;
+ *need_separator = 0;
+ }
+ if (print && mprint(ms, m) == -1)
+ return -1;
+
+ switch (moffset(ms, m, nbytes,
+ &ms->c.li[cont_level].off)) {
+ case -1:
+ case 0:
+ flush = 1;
+ cont_level--;
+ break;
+ default:
+ break;
+ }
+
+ if (*m->desc)
+ *need_separator = 1;
+
+ /*
+ * If we see any continuations
+ * at a higher level,
+ * process them.
+ */
+ if (file_check_mem(ms, ++cont_level) == -1)
+ return -1;
+ break;
+ }
+ }
+ if (*printed_something) {
+ firstline = 0;
+ if (print)
+ *returnval = 1;
+ }
+ if ((ms->flags & MAGIC_CONTINUE) == 0 && *printed_something) {
+ return *returnval; /* don't keep searching */
+ }
+ cont_level = 0;
+ }
+ return *returnval; /* This is hit if -k is set or there is no match */
+}
+
+private int
+check_fmt(struct magic_set *ms, struct magic *m)
+{
+ file_regex_t rx;
+ int rc, rv = -1;
+
+ if (strchr(m->desc, '%') == NULL)
+ return 0;
+
+ rc = file_regcomp(&rx, "%[-0-9\\.]*s", REG_EXTENDED|REG_NOSUB);
+ if (rc) {
+ file_regerror(&rx, rc, ms);
+ } else {
+ rc = file_regexec(&rx, m->desc, 0, 0, 0);
+ rv = !rc;
+ }
+ file_regfree(&rx);
+ return rv;
+}
+
+#ifndef HAVE_STRNDUP
+char * strndup(const char *, size_t);
+
+char *
+strndup(const char *str, size_t n)
+{
+ size_t len;
+ char *copy;
+
+ for (len = 0; len < n && str[len]; len++)
+ continue;
+ if ((copy = malloc(len + 1)) == NULL)
+ return NULL;
+ (void)memcpy(copy, str, len);
+ copy[len] = '\0';
+ return copy;
+}
+#endif /* HAVE_STRNDUP */
+
+private int32_t
+mprint(struct magic_set *ms, struct magic *m)
+{
+ uint64_t v;
+ float vf;
+ double vd;
+ int64_t t = 0;
+ char buf[128], tbuf[26], sbuf[512];
+ union VALUETYPE *p = &ms->ms_value;
+
+ switch (m->type) {
+ case FILE_BYTE:
+ v = file_signextend(ms, m, (uint64_t)p->b);
+ switch (check_fmt(ms, m)) {
+ case -1:
+ return -1;
+ case 1:
+ (void)snprintf(buf, sizeof(buf), "%d",
+ (unsigned char)v);
+ if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
+ return -1;
+ break;
+ default:
+ if (file_printf(ms, F(ms, m, "%d"),
+ (unsigned char) v) == -1)
+ return -1;
+ break;
+ }
+ t = ms->offset + sizeof(char);
+ break;
+
+ case FILE_SHORT:
+ case FILE_BESHORT:
+ case FILE_LESHORT:
+ v = file_signextend(ms, m, (uint64_t)p->h);
+ switch (check_fmt(ms, m)) {
+ case -1:
+ return -1;
+ case 1:
+ (void)snprintf(buf, sizeof(buf), "%u",
+ (unsigned short)v);
+ if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
+ return -1;
+ break;
+ default:
+ if (file_printf(ms, F(ms, m, "%u"),
+ (unsigned short) v) == -1)
+ return -1;
+ break;
+ }
+ t = ms->offset + sizeof(short);
+ break;
+
+ case FILE_LONG:
+ case FILE_BELONG:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ v = file_signextend(ms, m, (uint64_t)p->l);
+ switch (check_fmt(ms, m)) {
+ case -1:
+ return -1;
+ case 1:
+ (void)snprintf(buf, sizeof(buf), "%u", (uint32_t) v);
+ if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
+ return -1;
+ break;
+ default:
+ if (file_printf(ms, F(ms, m, "%u"), (uint32_t) v) == -1)
+ return -1;
+ break;
+ }
+ t = ms->offset + sizeof(int32_t);
+ break;
+
+ case FILE_QUAD:
+ case FILE_BEQUAD:
+ case FILE_LEQUAD:
+ v = file_signextend(ms, m, p->q);
+ switch (check_fmt(ms, m)) {
+ case -1:
+ return -1;
+ case 1:
+ (void)snprintf(buf, sizeof(buf), "%" INT64_T_FORMAT "u",
+ (unsigned long long)v);
+ if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
+ return -1;
+ break;
+ default:
+ if (file_printf(ms, F(ms, m, "%" INT64_T_FORMAT "u"),
+ (unsigned long long) v) == -1)
+ return -1;
+ break;
+ }
+ t = ms->offset + sizeof(int64_t);
+ break;
+
+ case FILE_STRING:
+ case FILE_PSTRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ if (m->reln == '=' || m->reln == '!') {
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_printable(sbuf, sizeof(sbuf), m->value.s))
+ == -1)
+ return -1;
+ t = ms->offset + m->vallen;
+ }
+ else {
+ char *str = p->s;
+
+ /* compute t before we mangle the string? */
+ t = ms->offset + strlen(str);
+
+ if (*m->value.s == '\0')
+ str[strcspn(str, "\r\n")] = '\0';
+
+ if (m->str_flags & STRING_TRIM) {
+ char *last;
+ while (isspace((unsigned char)*str))
+ str++;
+ last = str;
+ while (*last)
+ last++;
+ --last;
+ while (isspace((unsigned char)*last))
+ last--;
+ *++last = '\0';
+ }
+
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_printable(sbuf, sizeof(sbuf), str)) == -1)
+ return -1;
+
+ if (m->type == FILE_PSTRING)
+ t += file_pstring_length_size(m);
+ }
+ break;
+
+ case FILE_DATE:
+ case FILE_BEDATE:
+ case FILE_LEDATE:
+ case FILE_MEDATE:
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_fmttime(p->l, 0, tbuf)) == -1)
+ return -1;
+ t = ms->offset + sizeof(uint32_t);
+ break;
+
+ case FILE_LDATE:
+ case FILE_BELDATE:
+ case FILE_LELDATE:
+ case FILE_MELDATE:
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_fmttime(p->l, FILE_T_LOCAL, tbuf)) == -1)
+ return -1;
+ t = ms->offset + sizeof(uint32_t);
+ break;
+
+ case FILE_QDATE:
+ case FILE_BEQDATE:
+ case FILE_LEQDATE:
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_fmttime(p->q, 0, tbuf)) == -1)
+ return -1;
+ t = ms->offset + sizeof(uint64_t);
+ break;
+
+ case FILE_QLDATE:
+ case FILE_BEQLDATE:
+ case FILE_LEQLDATE:
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_fmttime(p->q, FILE_T_LOCAL, tbuf)) == -1)
+ return -1;
+ t = ms->offset + sizeof(uint64_t);
+ break;
+
+ case FILE_QWDATE:
+ case FILE_BEQWDATE:
+ case FILE_LEQWDATE:
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_fmttime(p->q, FILE_T_WINDOWS, tbuf)) == -1)
+ return -1;
+ t = ms->offset + sizeof(uint64_t);
+ break;
+
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ vf = p->f;
+ switch (check_fmt(ms, m)) {
+ case -1:
+ return -1;
+ case 1:
+ (void)snprintf(buf, sizeof(buf), "%g", vf);
+ if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
+ return -1;
+ break;
+ default:
+ if (file_printf(ms, F(ms, m, "%g"), vf) == -1)
+ return -1;
+ break;
+ }
+ t = ms->offset + sizeof(float);
+ break;
+
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ vd = p->d;
+ switch (check_fmt(ms, m)) {
+ case -1:
+ return -1;
+ case 1:
+ (void)snprintf(buf, sizeof(buf), "%g", vd);
+ if (file_printf(ms, F(ms, m, "%s"), buf) == -1)
+ return -1;
+ break;
+ default:
+ if (file_printf(ms, F(ms, m, "%g"), vd) == -1)
+ return -1;
+ break;
+ }
+ t = ms->offset + sizeof(double);
+ break;
+
+ case FILE_SEARCH:
+ case FILE_REGEX: {
+ char *cp;
+ int rval;
+
+ cp = strndup((const char *)ms->search.s, ms->search.rm_len);
+ if (cp == NULL) {
+ file_oomem(ms, ms->search.rm_len);
+ return -1;
+ }
+ rval = file_printf(ms, F(ms, m, "%s"),
+ file_printable(sbuf, sizeof(sbuf), cp));
+ free(cp);
+
+ if (rval == -1)
+ return -1;
+
+ if ((m->str_flags & REGEX_OFFSET_START))
+ t = ms->search.offset;
+ else
+ t = ms->search.offset + ms->search.rm_len;
+ break;
+ }
+
+ case FILE_DEFAULT:
+ case FILE_CLEAR:
+ if (file_printf(ms, "%s", m->desc) == -1)
+ return -1;
+ t = ms->offset;
+ break;
+
+ case FILE_INDIRECT:
+ case FILE_USE:
+ case FILE_NAME:
+ t = ms->offset;
+ break;
+ case FILE_DER:
+ if (file_printf(ms, F(ms, m, "%s"),
+ file_printable(sbuf, sizeof(sbuf), ms->ms_value.s)) == -1)
+ return -1;
+ t = ms->offset;
+ break;
+ default:
+ file_magerror(ms, "invalid m->type (%d) in mprint()", m->type);
+ return -1;
+ }
+ return (int32_t)t;
+}
+
+private int
+moffset(struct magic_set *ms, struct magic *m, size_t nbytes, int32_t *op)
+{
+ int32_t o;
+
+ switch (m->type) {
+ case FILE_BYTE:
+ o = CAST(int32_t, (ms->offset + sizeof(char)));
+ break;
+
+ case FILE_SHORT:
+ case FILE_BESHORT:
+ case FILE_LESHORT:
+ o = CAST(int32_t, (ms->offset + sizeof(short)));
+ break;
+
+ case FILE_LONG:
+ case FILE_BELONG:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ o = CAST(int32_t, (ms->offset + sizeof(int32_t)));
+ break;
+
+ case FILE_QUAD:
+ case FILE_BEQUAD:
+ case FILE_LEQUAD:
+ o = CAST(int32_t, (ms->offset + sizeof(int64_t)));
+ break;
+
+ case FILE_STRING:
+ case FILE_PSTRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ if (m->reln == '=' || m->reln == '!') {
+ o = ms->offset + m->vallen;
+ } else {
+ union VALUETYPE *p = &ms->ms_value;
+
+ if (*m->value.s == '\0')
+ p->s[strcspn(p->s, "\r\n")] = '\0';
+ o = CAST(uint32_t, (ms->offset + strlen(p->s)));
+ if (m->type == FILE_PSTRING)
+ o += (uint32_t)file_pstring_length_size(m);
+ }
+ break;
+
+ case FILE_DATE:
+ case FILE_BEDATE:
+ case FILE_LEDATE:
+ case FILE_MEDATE:
+ o = CAST(int32_t, (ms->offset + sizeof(uint32_t)));
+ break;
+
+ case FILE_LDATE:
+ case FILE_BELDATE:
+ case FILE_LELDATE:
+ case FILE_MELDATE:
+ o = CAST(int32_t, (ms->offset + sizeof(uint32_t)));
+ break;
+
+ case FILE_QDATE:
+ case FILE_BEQDATE:
+ case FILE_LEQDATE:
+ o = CAST(int32_t, (ms->offset + sizeof(uint64_t)));
+ break;
+
+ case FILE_QLDATE:
+ case FILE_BEQLDATE:
+ case FILE_LEQLDATE:
+ o = CAST(int32_t, (ms->offset + sizeof(uint64_t)));
+ break;
+
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ o = CAST(int32_t, (ms->offset + sizeof(float)));
+ break;
+
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ o = CAST(int32_t, (ms->offset + sizeof(double)));
+ break;
+
+ case FILE_REGEX:
+ if ((m->str_flags & REGEX_OFFSET_START) != 0)
+ o = CAST(int32_t, ms->search.offset);
+ else
+ o = CAST(int32_t,
+ (ms->search.offset + ms->search.rm_len));
+ break;
+
+ case FILE_SEARCH:
+ if ((m->str_flags & REGEX_OFFSET_START) != 0)
+ o = CAST(int32_t, ms->search.offset);
+ else
+ o = CAST(int32_t, (ms->search.offset + m->vallen));
+ break;
+
+ case FILE_CLEAR:
+ case FILE_DEFAULT:
+ case FILE_INDIRECT:
+ o = ms->offset;
+ break;
+
+ case FILE_DER:
+ {
+ o = der_offs(ms, m, nbytes);
+ if (o == -1 || (size_t)o > nbytes) {
+ if ((ms->flags & MAGIC_DEBUG) != 0) {
+ (void)fprintf(stderr,
+ "Bad DER offset %d nbytes=%zu",
+ o, nbytes);
+ }
+ *op = 0;
+ return 0;
+ }
+ break;
+ }
+
+ default:
+ o = 0;
+ break;
+ }
+
+ if ((size_t)o > nbytes) {
+#if 0
+ file_error(ms, 0, "Offset out of range %zu > %zu",
+ (size_t)o, nbytes);
+#endif
+ return -1;
+ }
+ *op = o;
+ return 1;
+}
+
+private uint32_t
+cvt_id3(struct magic_set *ms, uint32_t v)
+{
+ v = ((((v >> 0) & 0x7f) << 0) |
+ (((v >> 8) & 0x7f) << 7) |
+ (((v >> 16) & 0x7f) << 14) |
+ (((v >> 24) & 0x7f) << 21));
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "id3 offs=%u\n", v);
+ return v;
+}
+
+private int
+cvt_flip(int type, int flip)
+{
+ if (flip == 0)
+ return type;
+ switch (type) {
+ case FILE_BESHORT:
+ return FILE_LESHORT;
+ case FILE_BELONG:
+ return FILE_LELONG;
+ case FILE_BEDATE:
+ return FILE_LEDATE;
+ case FILE_BELDATE:
+ return FILE_LELDATE;
+ case FILE_BEQUAD:
+ return FILE_LEQUAD;
+ case FILE_BEQDATE:
+ return FILE_LEQDATE;
+ case FILE_BEQLDATE:
+ return FILE_LEQLDATE;
+ case FILE_BEQWDATE:
+ return FILE_LEQWDATE;
+ case FILE_LESHORT:
+ return FILE_BESHORT;
+ case FILE_LELONG:
+ return FILE_BELONG;
+ case FILE_LEDATE:
+ return FILE_BEDATE;
+ case FILE_LELDATE:
+ return FILE_BELDATE;
+ case FILE_LEQUAD:
+ return FILE_BEQUAD;
+ case FILE_LEQDATE:
+ return FILE_BEQDATE;
+ case FILE_LEQLDATE:
+ return FILE_BEQLDATE;
+ case FILE_LEQWDATE:
+ return FILE_BEQWDATE;
+ case FILE_BEFLOAT:
+ return FILE_LEFLOAT;
+ case FILE_LEFLOAT:
+ return FILE_BEFLOAT;
+ case FILE_BEDOUBLE:
+ return FILE_LEDOUBLE;
+ case FILE_LEDOUBLE:
+ return FILE_BEDOUBLE;
+ default:
+ return type;
+ }
+}
+#define DO_CVT(fld, cast) \
+ if (m->num_mask) \
+ switch (m->mask_op & FILE_OPS_MASK) { \
+ case FILE_OPAND: \
+ p->fld &= cast m->num_mask; \
+ break; \
+ case FILE_OPOR: \
+ p->fld |= cast m->num_mask; \
+ break; \
+ case FILE_OPXOR: \
+ p->fld ^= cast m->num_mask; \
+ break; \
+ case FILE_OPADD: \
+ p->fld += cast m->num_mask; \
+ break; \
+ case FILE_OPMINUS: \
+ p->fld -= cast m->num_mask; \
+ break; \
+ case FILE_OPMULTIPLY: \
+ p->fld *= cast m->num_mask; \
+ break; \
+ case FILE_OPDIVIDE: \
+ if (cast m->num_mask == 0) \
+ return -1; \
+ p->fld /= cast m->num_mask; \
+ break; \
+ case FILE_OPMODULO: \
+ if (cast m->num_mask == 0) \
+ return -1; \
+ p->fld %= cast m->num_mask; \
+ break; \
+ } \
+ if (m->mask_op & FILE_OPINVERSE) \
+ p->fld = ~p->fld \
+
+private int
+cvt_8(union VALUETYPE *p, const struct magic *m)
+{
+ DO_CVT(b, (uint8_t));
+ return 0;
+}
+
+private int
+cvt_16(union VALUETYPE *p, const struct magic *m)
+{
+ DO_CVT(h, (uint16_t));
+ return 0;
+}
+
+private int
+cvt_32(union VALUETYPE *p, const struct magic *m)
+{
+ DO_CVT(l, (uint32_t));
+ return 0;
+}
+
+private int
+cvt_64(union VALUETYPE *p, const struct magic *m)
+{
+ DO_CVT(q, (uint64_t));
+ return 0;
+}
+
+#define DO_CVT2(fld, cast) \
+ if (m->num_mask) \
+ switch (m->mask_op & FILE_OPS_MASK) { \
+ case FILE_OPADD: \
+ p->fld += cast m->num_mask; \
+ break; \
+ case FILE_OPMINUS: \
+ p->fld -= cast m->num_mask; \
+ break; \
+ case FILE_OPMULTIPLY: \
+ p->fld *= cast m->num_mask; \
+ break; \
+ case FILE_OPDIVIDE: \
+ if (cast m->num_mask == 0) \
+ return -1; \
+ p->fld /= cast m->num_mask; \
+ break; \
+ } \
+
+private int
+cvt_float(union VALUETYPE *p, const struct magic *m)
+{
+ DO_CVT2(f, (float));
+ return 0;
+}
+
+private int
+cvt_double(union VALUETYPE *p, const struct magic *m)
+{
+ DO_CVT2(d, (double));
+ return 0;
+}
+
+/*
+ * Convert the byte order of the data we are looking at
+ * While we're here, let's apply the mask operation
+ * (unless you have a better idea)
+ */
+private int
+mconvert(struct magic_set *ms, struct magic *m, int flip)
+{
+ union VALUETYPE *p = &ms->ms_value;
+
+ switch (cvt_flip(m->type, flip)) {
+ case FILE_BYTE:
+ if (cvt_8(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_SHORT:
+ if (cvt_16(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_LONG:
+ case FILE_DATE:
+ case FILE_LDATE:
+ if (cvt_32(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_QUAD:
+ case FILE_QDATE:
+ case FILE_QLDATE:
+ case FILE_QWDATE:
+ if (cvt_64(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_STRING:
+ case FILE_BESTRING16:
+ case FILE_LESTRING16: {
+ /* Null terminate and eat *trailing* return */
+ p->s[sizeof(p->s) - 1] = '\0';
+ return 1;
+ }
+ case FILE_PSTRING: {
+ size_t sz = file_pstring_length_size(m);
+ char *ptr1 = p->s, *ptr2 = ptr1 + sz;
+ size_t len = file_pstring_get_length(m, ptr1);
+ sz = sizeof(p->s) - sz; /* maximum length of string */
+ if (len >= sz) {
+ /*
+ * The size of the pascal string length (sz)
+ * is 1, 2, or 4. We need at least 1 byte for NUL
+ * termination, but we've already truncated the
+ * string by p->s, so we need to deduct sz.
+ * Because we can use one of the bytes of the length
+ * after we shifted as NUL termination.
+ */
+ len = sz;
+ }
+ while (len--)
+ *ptr1++ = *ptr2++;
+ *ptr1 = '\0';
+ return 1;
+ }
+ case FILE_BESHORT:
+ p->h = (short)BE16(p);
+ if (cvt_16(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_BELONG:
+ case FILE_BEDATE:
+ case FILE_BELDATE:
+ p->l = (int32_t)BE32(p);
+ if (cvt_32(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_BEQUAD:
+ case FILE_BEQDATE:
+ case FILE_BEQLDATE:
+ case FILE_BEQWDATE:
+ p->q = (uint64_t)BE64(p);
+ if (cvt_64(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_LESHORT:
+ p->h = (short)LE16(p);
+ if (cvt_16(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_LELONG:
+ case FILE_LEDATE:
+ case FILE_LELDATE:
+ p->l = (int32_t)LE32(p);
+ if (cvt_32(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_LEQUAD:
+ case FILE_LEQDATE:
+ case FILE_LEQLDATE:
+ case FILE_LEQWDATE:
+ p->q = (uint64_t)LE64(p);
+ if (cvt_64(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_MELONG:
+ case FILE_MEDATE:
+ case FILE_MELDATE:
+ p->l = (int32_t)ME32(p);
+ if (cvt_32(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_FLOAT:
+ if (cvt_float(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_BEFLOAT:
+ p->l = BE32(p);
+ if (cvt_float(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_LEFLOAT:
+ p->l = LE32(p);
+ if (cvt_float(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_DOUBLE:
+ if (cvt_double(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_BEDOUBLE:
+ p->q = BE64(p);
+ if (cvt_double(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_LEDOUBLE:
+ p->q = LE64(p);
+ if (cvt_double(p, m) == -1)
+ goto out;
+ return 1;
+ case FILE_REGEX:
+ case FILE_SEARCH:
+ case FILE_DEFAULT:
+ case FILE_CLEAR:
+ case FILE_NAME:
+ case FILE_USE:
+ case FILE_DER:
+ return 1;
+ default:
+ file_magerror(ms, "invalid type %d in mconvert()", m->type);
+ return 0;
+ }
+out:
+ file_magerror(ms, "zerodivide in mconvert()");
+ return 0;
+}
+
+
+private void
+mdebug(uint32_t offset, const char *str, size_t len)
+{
+ (void) fprintf(stderr, "mget/%" SIZE_T_FORMAT "u @%d: ", len, offset);
+ file_showstr(stderr, str, len);
+ (void) fputc('\n', stderr);
+ (void) fputc('\n', stderr);
+}
+
+private int
+mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
+ const unsigned char *s, uint32_t offset, size_t nbytes, struct magic *m)
+{
+ /*
+ * Note: FILE_SEARCH and FILE_REGEX do not actually copy
+ * anything, but setup pointers into the source
+ */
+ if (indir == 0) {
+ switch (type) {
+ case FILE_DER:
+ case FILE_SEARCH:
+ if (offset > nbytes)
+ offset = CAST(uint32_t, nbytes);
+ ms->search.s = RCAST(const char *, s) + offset;
+ ms->search.s_len = nbytes - offset;
+ ms->search.offset = offset;
+ return 0;
+
+ case FILE_REGEX: {
+ const char *b;
+ const char *c;
+ const char *last; /* end of search region */
+ const char *buf; /* start of search region */
+ const char *end;
+ size_t lines, linecnt, bytecnt;
+
+ if (s == NULL || nbytes < offset) {
+ ms->search.s_len = 0;
+ ms->search.s = NULL;
+ return 0;
+ }
+
+ if (m->str_flags & REGEX_LINE_COUNT) {
+ linecnt = m->str_range;
+ bytecnt = linecnt * 80;
+ } else {
+ linecnt = 0;
+ bytecnt = m->str_range;
+ }
+
+ if (bytecnt == 0 || bytecnt > nbytes - offset)
+ bytecnt = nbytes - offset;
+ if (bytecnt > ms->regex_max)
+ bytecnt = ms->regex_max;
+
+ buf = RCAST(const char *, s) + offset;
+ end = last = RCAST(const char *, s) + bytecnt + offset;
+ /* mget() guarantees buf <= last */
+ for (lines = linecnt, b = buf; lines && b < end &&
+ ((b = CAST(const char *,
+ memchr(c = b, '\n', CAST(size_t, (end - b)))))
+ || (b = CAST(const char *,
+ memchr(c, '\r', CAST(size_t, (end - c))))));
+ lines--, b++) {
+ last = b;
+ if (b < end - 1 && b[0] == '\r' && b[1] == '\n')
+ b++;
+ }
+ if (lines)
+ last = RCAST(const char *, s) + bytecnt;
+
+ ms->search.s = buf;
+ ms->search.s_len = last - buf;
+ ms->search.offset = offset;
+ ms->search.rm_len = 0;
+ return 0;
+ }
+ case FILE_BESTRING16:
+ case FILE_LESTRING16: {
+ const unsigned char *src = s + offset;
+ const unsigned char *esrc = s + nbytes;
+ char *dst = p->s;
+ char *edst = &p->s[sizeof(p->s) - 1];
+
+ if (type == FILE_BESTRING16)
+ src++;
+
+ /* check that offset is within range */
+ if (offset >= nbytes)
+ break;
+ for (/*EMPTY*/; src < esrc; src += 2, dst++) {
+ if (dst < edst)
+ *dst = *src;
+ else
+ break;
+ if (*dst == '\0') {
+ if (type == FILE_BESTRING16 ?
+ *(src - 1) != '\0' :
+ ((src + 1 < esrc) &&
+ *(src + 1) != '\0'))
+ *dst = ' ';
+ }
+ }
+ *edst = '\0';
+ return 0;
+ }
+ case FILE_STRING: /* XXX - these two should not need */
+ case FILE_PSTRING: /* to copy anything, but do anyway. */
+ default:
+ break;
+ }
+ }
+
+ 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 *)(void *)p) + nbytes, '\0',
+ sizeof(*p) - nbytes);
+ return 0;
+}
+
+private uint32_t
+do_ops(struct magic *m, intmax_t lhs, intmax_t off)
+{
+ intmax_t offset;
+ if (off) {
+ switch (m->in_op & FILE_OPS_MASK) {
+ case FILE_OPAND:
+ offset = lhs & off;
+ break;
+ case FILE_OPOR:
+ offset = lhs | off;
+ break;
+ case FILE_OPXOR:
+ offset = lhs ^ off;
+ break;
+ case FILE_OPADD:
+ offset = lhs + off;
+ break;
+ case FILE_OPMINUS:
+ offset = lhs - off;
+ break;
+ case FILE_OPMULTIPLY:
+ offset = lhs * off;
+ break;
+ case FILE_OPDIVIDE:
+ offset = lhs / off;
+ break;
+ case FILE_OPMODULO:
+ offset = lhs % off;
+ break;
+ }
+ } else
+ offset = lhs;
+ if (m->in_op & FILE_OPINVERSE)
+ offset = ~offset;
+
+ return (uint32_t)offset;
+}
+
+private int
+mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
+ size_t nbytes, size_t o, unsigned int cont_level, int mode, int text,
+ int flip, uint16_t *indir_count, uint16_t *name_count,
+ int *printed_something, int *need_separator, int *returnval)
+{
+ uint32_t offset = ms->offset;
+ intmax_t lhs;
+ file_pushbuf_t *pb;
+ int rv, oneed_separator, in_type;
+ char *rbuf;
+ union VALUETYPE *p = &ms->ms_value;
+ struct mlist ml;
+
+ if (*indir_count >= ms->indir_max) {
+ file_error(ms, 0, "indirect count (%hu) exceeded",
+ *indir_count);
+ return -1;
+ }
+
+ if (*name_count >= ms->name_max) {
+ file_error(ms, 0, "name use count (%hu) exceeded",
+ *name_count);
+ return -1;
+ }
+
+ if (mcopy(ms, p, m->type, m->flag & INDIR, s, (uint32_t)(offset + o),
+ (uint32_t)nbytes, m) == -1)
+ return -1;
+
+ if ((ms->flags & MAGIC_DEBUG) != 0) {
+ fprintf(stderr, "mget(type=%d, flag=%#x, offset=%u, o=%"
+ SIZE_T_FORMAT "u, " "nbytes=%" SIZE_T_FORMAT
+ "u, il=%hu, nc=%hu)\n",
+ m->type, m->flag, offset, o, nbytes,
+ *indir_count, *name_count);
+ mdebug(offset, (char *)(void *)p, sizeof(union VALUETYPE));
+#ifndef COMPILE_ONLY
+ file_mdump(m);
+#endif
+ }
+
+ if (m->flag & INDIR) {
+ intmax_t off = m->in_offset;
+ const int sgn = m->in_op & FILE_OPSIGNED;
+ if (m->in_op & FILE_OPINDIRECT) {
+ const union VALUETYPE *q = CAST(const union VALUETYPE *,
+ ((const void *)(s + offset + off)));
+ if (OFFSET_OOB(nbytes, offset + off, sizeof(*q)))
+ return 0;
+ switch (cvt_flip(m->in_type, flip)) {
+ case FILE_BYTE:
+ off = SEXT(sgn,8,q->b);
+ break;
+ case FILE_SHORT:
+ off = SEXT(sgn,16,q->h);
+ break;
+ case FILE_BESHORT:
+ off = SEXT(sgn,16,BE16(q));
+ break;
+ case FILE_LESHORT:
+ off = SEXT(sgn,16,LE16(q));
+ break;
+ case FILE_LONG:
+ off = SEXT(sgn,32,q->l);
+ break;
+ case FILE_BELONG:
+ case FILE_BEID3:
+ off = SEXT(sgn,32,BE32(q));
+ break;
+ case FILE_LEID3:
+ case FILE_LELONG:
+ off = SEXT(sgn,32,LE32(q));
+ break;
+ case FILE_MELONG:
+ off = SEXT(sgn,32,ME32(q));
+ break;
+ }
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "indirect offs=%jd\n", off);
+ }
+ switch (in_type = cvt_flip(m->in_type, flip)) {
+ case FILE_BYTE:
+ if (OFFSET_OOB(nbytes, offset, 1))
+ return 0;
+ offset = do_ops(m, SEXT(sgn,8,p->b), off);
+ break;
+ case FILE_BESHORT:
+ if (OFFSET_OOB(nbytes, offset, 2))
+ return 0;
+ offset = do_ops(m, SEXT(sgn,16,BE16(p)), off);
+ break;
+ case FILE_LESHORT:
+ if (OFFSET_OOB(nbytes, offset, 2))
+ return 0;
+ offset = do_ops(m, SEXT(sgn,16,LE16(p)), off);
+ break;
+ case FILE_SHORT:
+ if (OFFSET_OOB(nbytes, offset, 2))
+ return 0;
+ offset = do_ops(m, SEXT(sgn,16,p->h), off);
+ break;
+ case FILE_BELONG:
+ case FILE_BEID3:
+ if (OFFSET_OOB(nbytes, offset, 4))
+ return 0;
+ lhs = BE32(p);
+ if (in_type == FILE_BEID3)
+ lhs = cvt_id3(ms, (uint32_t)lhs);
+ offset = do_ops(m, SEXT(sgn,32,lhs), off);
+ break;
+ case FILE_LELONG:
+ case FILE_LEID3:
+ if (OFFSET_OOB(nbytes, offset, 4))
+ return 0;
+ lhs = LE32(p);
+ if (in_type == FILE_LEID3)
+ lhs = cvt_id3(ms, (uint32_t)lhs);
+ offset = do_ops(m, SEXT(sgn,32,lhs), off);
+ break;
+ case FILE_MELONG:
+ if (OFFSET_OOB(nbytes, offset, 4))
+ return 0;
+ offset = do_ops(m, SEXT(sgn,32,ME32(p)), off);
+ break;
+ case FILE_LONG:
+ if (OFFSET_OOB(nbytes, offset, 4))
+ return 0;
+ offset = do_ops(m, SEXT(sgn,32,p->l), off);
+ break;
+ default:
+ break;
+ }
+
+ if (m->flag & INDIROFFADD) {
+ offset += ms->c.li[cont_level-1].off;
+ if (offset == 0) {
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr,
+ "indirect *zero* offset\n");
+ return 0;
+ }
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "indirect +offs=%u\n", offset);
+ }
+ if (mcopy(ms, p, m->type, 0, s, offset, nbytes, m) == -1)
+ return -1;
+ ms->offset = offset;
+
+ if ((ms->flags & MAGIC_DEBUG) != 0) {
+ mdebug(offset, (char *)(void *)p,
+ sizeof(union VALUETYPE));
+#ifndef COMPILE_ONLY
+ file_mdump(m);
+#endif
+ }
+ }
+
+ /* Verify we have enough data to match magic type */
+ switch (m->type) {
+ case FILE_BYTE:
+ if (OFFSET_OOB(nbytes, offset, 1))
+ return 0;
+ break;
+
+ case FILE_SHORT:
+ case FILE_BESHORT:
+ case FILE_LESHORT:
+ if (OFFSET_OOB(nbytes, offset, 2))
+ return 0;
+ break;
+
+ case FILE_LONG:
+ case FILE_BELONG:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ case FILE_DATE:
+ case FILE_BEDATE:
+ case FILE_LEDATE:
+ case FILE_MEDATE:
+ case FILE_LDATE:
+ case FILE_BELDATE:
+ case FILE_LELDATE:
+ case FILE_MELDATE:
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ if (OFFSET_OOB(nbytes, offset, 4))
+ return 0;
+ break;
+
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ if (OFFSET_OOB(nbytes, offset, 8))
+ return 0;
+ break;
+
+ case FILE_STRING:
+ case FILE_PSTRING:
+ case FILE_SEARCH:
+ if (OFFSET_OOB(nbytes, offset, m->vallen))
+ return 0;
+ break;
+
+ case FILE_REGEX:
+ if (nbytes < offset)
+ return 0;
+ break;
+
+ case FILE_INDIRECT:
+ if (m->str_flags & INDIRECT_RELATIVE)
+ offset += CAST(uint32_t, o);
+ if (offset == 0)
+ return 0;
+
+ if (nbytes < offset)
+ return 0;
+
+ if ((pb = file_push_buffer(ms)) == NULL)
+ return -1;
+
+ (*indir_count)++;
+ rv = file_softmagic(ms, s + offset, nbytes - offset,
+ indir_count, name_count, BINTEST, text);
+
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ fprintf(stderr, "indirect @offs=%u[%d]\n", offset, rv);
+
+ rbuf = file_pop_buffer(ms, pb);
+ if (rbuf == NULL && ms->event_flags & EVENT_HAD_ERR)
+ return -1;
+
+ if (rv == 1) {
+ if ((ms->flags & MAGIC_NODESC) == 0 &&
+ file_printf(ms, F(ms, m, "%u"), offset) == -1) {
+ free(rbuf);
+ return -1;
+ }
+ if (file_printf(ms, "%s", rbuf) == -1) {
+ free(rbuf);
+ return -1;
+ }
+ }
+ free(rbuf);
+ return rv;
+
+ case FILE_USE:
+ if (nbytes < offset)
+ return 0;
+ rbuf = m->value.s;
+ if (*rbuf == '^') {
+ rbuf++;
+ flip = !flip;
+ }
+ if (file_magicfind(ms, rbuf, &ml) == -1) {
+ file_error(ms, 0, "cannot find entry `%s'", rbuf);
+ return -1;
+ }
+ (*name_count)++;
+ oneed_separator = *need_separator;
+ if (m->flag & NOSPACE)
+ *need_separator = 0;
+ rv = match(ms, ml.magic, ml.nmagic, s, nbytes, offset + o,
+ mode, text, flip, indir_count, name_count,
+ printed_something, need_separator, returnval);
+ if (rv != 1)
+ *need_separator = oneed_separator;
+ return 1;
+
+ case FILE_NAME:
+ if (ms->flags & MAGIC_NODESC)
+ return 1;
+ if (file_printf(ms, "%s", m->desc) == -1)
+ return -1;
+ return 1;
+ case FILE_DER:
+ case FILE_DEFAULT: /* nothing to check */
+ case FILE_CLEAR:
+ default:
+ break;
+ }
+ if (!mconvert(ms, m, flip))
+ return 0;
+ return 1;
+}
+
+private uint64_t
+file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags)
+{
+ /*
+ * Convert the source args to unsigned here so that (1) the
+ * compare will be unsigned as it is in strncmp() and (2) so
+ * the ctype functions will work correctly without extra
+ * casting.
+ */
+ const unsigned char *a = (const unsigned char *)s1;
+ const unsigned char *b = (const unsigned char *)s2;
+ const unsigned char *eb = b + len;
+ uint64_t v;
+
+ /*
+ * What we want here is v = strncmp(s1, s2, len),
+ * but ignoring any nulls.
+ */
+ v = 0;
+ if (0L == flags) { /* normal string: do it fast */
+ while (len-- > 0)
+ if ((v = *b++ - *a++) != '\0')
+ break;
+ }
+ else { /* combine the others */
+ while (len-- > 0) {
+ if (b >= eb) {
+ v = 1;
+ break;
+ }
+ if ((flags & STRING_IGNORE_LOWERCASE) &&
+ islower(*a)) {
+ if ((v = tolower(*b++) - *a++) != '\0')
+ break;
+ }
+ else if ((flags & STRING_IGNORE_UPPERCASE) &&
+ isupper(*a)) {
+ if ((v = toupper(*b++) - *a++) != '\0')
+ break;
+ }
+ else if ((flags & STRING_COMPACT_WHITESPACE) &&
+ isspace(*a)) {
+ a++;
+ if (isspace(*b++)) {
+ if (!isspace(*a))
+ while (b < eb && isspace(*b))
+ b++;
+ }
+ else {
+ v = 1;
+ break;
+ }
+ }
+ else if ((flags & STRING_COMPACT_OPTIONAL_WHITESPACE) &&
+ isspace(*a)) {
+ a++;
+ while (b < eb && isspace(*b))
+ b++;
+ }
+ else {
+ if ((v = *b++ - *a++) != '\0')
+ break;
+ }
+ }
+ }
+ return v;
+}
+
+private uint64_t
+file_strncmp16(const char *a, const char *b, size_t len, uint32_t flags)
+{
+ /*
+ * XXX - The 16-bit string compare probably needs to be done
+ * differently, especially if the flags are to be supported.
+ * At the moment, I am unsure.
+ */
+ flags = 0;
+ return file_strncmp(a, b, len, flags);
+}
+
+private int
+magiccheck(struct magic_set *ms, struct magic *m)
+{
+ uint64_t l = m->value.q;
+ uint64_t v;
+ float fl, fv;
+ double dl, dv;
+ int matched;
+ union VALUETYPE *p = &ms->ms_value;
+
+ switch (m->type) {
+ case FILE_BYTE:
+ v = p->b;
+ break;
+
+ case FILE_SHORT:
+ case FILE_BESHORT:
+ case FILE_LESHORT:
+ v = p->h;
+ break;
+
+ case FILE_LONG:
+ case FILE_BELONG:
+ case FILE_LELONG:
+ case FILE_MELONG:
+ case FILE_DATE:
+ case FILE_BEDATE:
+ case FILE_LEDATE:
+ case FILE_MEDATE:
+ case FILE_LDATE:
+ case FILE_BELDATE:
+ case FILE_LELDATE:
+ case FILE_MELDATE:
+ v = p->l;
+ break;
+
+ case FILE_QUAD:
+ case FILE_LEQUAD:
+ case FILE_BEQUAD:
+ case FILE_QDATE:
+ case FILE_BEQDATE:
+ case FILE_LEQDATE:
+ case FILE_QLDATE:
+ case FILE_BEQLDATE:
+ case FILE_LEQLDATE:
+ case FILE_QWDATE:
+ case FILE_BEQWDATE:
+ case FILE_LEQWDATE:
+ v = p->q;
+ break;
+
+ case FILE_FLOAT:
+ case FILE_BEFLOAT:
+ case FILE_LEFLOAT:
+ fl = m->value.f;
+ fv = p->f;
+ switch (m->reln) {
+ case 'x':
+ matched = 1;
+ break;
+
+ case '!':
+ matched = fv != fl;
+ break;
+
+ case '=':
+ matched = fv == fl;
+ break;
+
+ case '>':
+ matched = fv > fl;
+ break;
+
+ case '<':
+ matched = fv < fl;
+ break;
+
+ default:
+ file_magerror(ms, "cannot happen with float: invalid relation `%c'",
+ m->reln);
+ return -1;
+ }
+ return matched;
+
+ case FILE_DOUBLE:
+ case FILE_BEDOUBLE:
+ case FILE_LEDOUBLE:
+ dl = m->value.d;
+ dv = p->d;
+ switch (m->reln) {
+ case 'x':
+ matched = 1;
+ break;
+
+ case '!':
+ matched = dv != dl;
+ break;
+
+ case '=':
+ matched = dv == dl;
+ break;
+
+ case '>':
+ matched = dv > dl;
+ break;
+
+ case '<':
+ matched = dv < dl;
+ break;
+
+ default:
+ file_magerror(ms, "cannot happen with double: invalid relation `%c'", m->reln);
+ return -1;
+ }
+ return matched;
+
+ case FILE_DEFAULT:
+ case FILE_CLEAR:
+ l = 0;
+ v = 0;
+ break;
+
+ case FILE_STRING:
+ case FILE_PSTRING:
+ l = 0;
+ v = file_strncmp(m->value.s, p->s, (size_t)m->vallen, m->str_flags);
+ break;
+
+ case FILE_BESTRING16:
+ case FILE_LESTRING16:
+ l = 0;
+ v = file_strncmp16(m->value.s, p->s, (size_t)m->vallen, m->str_flags);
+ break;
+
+ case FILE_SEARCH: { /* search ms->search.s for the string m->value.s */
+ size_t slen;
+ size_t idx;
+
+ if (ms->search.s == NULL)
+ return 0;
+
+ slen = MIN(m->vallen, sizeof(m->value.s));
+ l = 0;
+ v = 0;
+
+ for (idx = 0; m->str_range == 0 || idx < m->str_range; idx++) {
+ if (slen + idx > ms->search.s_len)
+ return 0;
+
+ v = file_strncmp(m->value.s, ms->search.s + idx, slen,
+ m->str_flags);
+ if (v == 0) { /* found match */
+ ms->search.offset += idx;
+ ms->search.rm_len = ms->search.s_len - idx;
+ break;
+ }
+ }
+ break;
+ }
+ case FILE_REGEX: {
+ int rc;
+ file_regex_t rx;
+ const char *search;
+
+ if (ms->search.s == NULL)
+ return 0;
+
+ l = 0;
+ rc = file_regcomp(&rx, m->value.s,
+ REG_EXTENDED|REG_NEWLINE|
+ ((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0));
+ if (rc) {
+ file_regerror(&rx, rc, ms);
+ v = (uint64_t)-1;
+ } else {
+ regmatch_t pmatch;
+ size_t slen = ms->search.s_len;
+ char *copy;
+ if (slen != 0) {
+ copy = CAST(char *, malloc(slen));
+ if (copy == NULL) {
+ file_regfree(&rx);
+ file_error(ms, errno,
+ "can't allocate %" SIZE_T_FORMAT "u bytes",
+ slen);
+ return -1;
+ }
+ memcpy(copy, ms->search.s, slen);
+ copy[--slen] = '\0';
+ search = copy;
+ } else {
+ search = CCAST(char *, "");
+ copy = NULL;
+ }
+ rc = file_regexec(&rx, (const char *)search,
+ 1, &pmatch, 0);
+ free(copy);
+ switch (rc) {
+ case 0:
+ ms->search.s += (int)pmatch.rm_so;
+ ms->search.offset += (size_t)pmatch.rm_so;
+ ms->search.rm_len =
+ (size_t)(pmatch.rm_eo - pmatch.rm_so);
+ v = 0;
+ break;
+
+ case REG_NOMATCH:
+ v = 1;
+ break;
+
+ default:
+ file_regerror(&rx, rc, ms);
+ v = (uint64_t)-1;
+ break;
+ }
+ }
+ file_regfree(&rx);
+ if (v == (uint64_t)-1)
+ return -1;
+ break;
+ }
+ case FILE_INDIRECT:
+ case FILE_USE:
+ case FILE_NAME:
+ return 1;
+ case FILE_DER:
+ matched = der_cmp(ms, m);
+ if (matched == -1) {
+ if ((ms->flags & MAGIC_DEBUG) != 0) {
+ (void) fprintf(stderr,
+ "EOF comparing DER entries");
+ }
+ return 0;
+ }
+ return matched;
+ default:
+ file_magerror(ms, "invalid type %d in magiccheck()", m->type);
+ return -1;
+ }
+
+ v = file_signextend(ms, m, v);
+
+ switch (m->reln) {
+ case 'x':
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT
+ "u == *any* = 1\n", (unsigned long long)v);
+ matched = 1;
+ break;
+
+ case '!':
+ matched = v != l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT "u != %"
+ INT64_T_FORMAT "u = %d\n", (unsigned long long)v,
+ (unsigned long long)l, matched);
+ break;
+
+ case '=':
+ matched = v == l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT "u == %"
+ INT64_T_FORMAT "u = %d\n", (unsigned long long)v,
+ (unsigned long long)l, matched);
+ break;
+
+ case '>':
+ if (m->flag & UNSIGNED) {
+ matched = v > l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT
+ "u > %" INT64_T_FORMAT "u = %d\n",
+ (unsigned long long)v,
+ (unsigned long long)l, matched);
+ }
+ else {
+ matched = (int64_t) v > (int64_t) l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT
+ "d > %" INT64_T_FORMAT "d = %d\n",
+ (long long)v, (long long)l, matched);
+ }
+ break;
+
+ case '<':
+ if (m->flag & UNSIGNED) {
+ matched = v < l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT
+ "u < %" INT64_T_FORMAT "u = %d\n",
+ (unsigned long long)v,
+ (unsigned long long)l, matched);
+ }
+ else {
+ matched = (int64_t) v < (int64_t) l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "%" INT64_T_FORMAT
+ "d < %" INT64_T_FORMAT "d = %d\n",
+ (long long)v, (long long)l, matched);
+ }
+ break;
+
+ case '&':
+ matched = (v & l) == l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %"
+ INT64_T_FORMAT "x) == %" INT64_T_FORMAT
+ "x) = %d\n", (unsigned long long)v,
+ (unsigned long long)l, (unsigned long long)l,
+ matched);
+ break;
+
+ case '^':
+ matched = (v & l) != l;
+ if ((ms->flags & MAGIC_DEBUG) != 0)
+ (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %"
+ INT64_T_FORMAT "x) != %" INT64_T_FORMAT
+ "x) = %d\n", (unsigned long long)v,
+ (unsigned long long)l, (unsigned long long)l,
+ matched);
+ break;
+
+ default:
+ file_magerror(ms, "cannot happen: invalid relation `%c'",
+ m->reln);
+ return -1;
+ }
+
+ return matched;
+}
+
+private int
+handle_annotation(struct magic_set *ms, struct magic *m, int firstline)
+{
+ if ((ms->flags & MAGIC_APPLE) && m->apple[0]) {
+ if (!firstline && file_printf(ms, "\n- ") == -1)
+ return -1;
+ if (file_printf(ms, "%.8s", m->apple) == -1)
+ return -1;
+ return 1;
+ }
+ if ((ms->flags & MAGIC_EXTENSION) && m->ext[0]) {
+ if (!firstline && file_printf(ms, "\n- ") == -1)
+ return -1;
+ if (file_printf(ms, "%s", m->ext) == -1)
+ return -1;
+ return 1;
+ }
+ if ((ms->flags & MAGIC_MIME_TYPE) && m->mimetype[0]) {
+ if (!firstline && file_printf(ms, "\n- ") == -1)
+ return -1;
+ if (file_printf(ms, "%s", m->mimetype) == -1)
+ return -1;
+ return 1;
+ }
+ return 0;
+}
+
+private int
+print_sep(struct magic_set *ms, int firstline)
+{
+// if (ms->flags & MAGIC_NODESC)
+// return 0;
+ if (firstline)
+ return 0;
+ /*
+ * we found another match
+ * put a newline and '-' to do some simple formatting
+ */
+ return file_printf(ms, "\n- ");
+}
Property changes on: trunk/contrib/file/src/softmagic.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/strcasestr.c
===================================================================
--- trunk/contrib/file/src/strcasestr.c (rev 0)
+++ trunk/contrib/file/src/strcasestr.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,84 @@
+/* $NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $ */
+
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $");
+__RCSID("$NetBSD: strncasecmp.c,v 1.2 2007/06/04 18:19:27 christos Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "file.h"
+
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+
+static int
+_strncasecmp(const char *s1, const char *s2, size_t n)
+{
+ if (n != 0) {
+ const unsigned char *us1 = (const unsigned char *)s1,
+ *us2 = (const unsigned char *)s2;
+
+ do {
+ if (tolower(*us1) != tolower(*us2++))
+ return tolower(*us1) - tolower(*--us2);
+ if (*us1++ == '\0')
+ break;
+ } while (--n != 0);
+ }
+ return 0;
+}
+
+/*
+ * Find the first occurrence of find in s, ignore case.
+ */
+char *
+strcasestr(const char *s, const char *find)
+{
+ char c, sc;
+ size_t len;
+
+ if ((c = *find++) != 0) {
+ c = tolower((unsigned char)c);
+ len = strlen(find);
+ do {
+ do {
+ if ((sc = *s++) == 0)
+ return (NULL);
+ } while ((char)tolower((unsigned char)sc) != c);
+ } while (_strncasecmp(s, find, len) != 0);
+ s--;
+ }
+ return (char *)(intptr_t)(s);
+}
Property changes on: trunk/contrib/file/src/strcasestr.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/strlcat.c
===================================================================
--- trunk/contrib/file/src/strlcat.c (rev 0)
+++ trunk/contrib/file/src/strlcat.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,58 @@
+/* $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller at courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */
+#include "file.h"
+
+#include <sys/types.h>
+#include <string.h>
+
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left). At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+size_t
+strlcat(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+ size_t dlen;
+
+ /* Find the end of dst and adjust bytes left but don't go past end */
+ while (n-- != 0 && *d != '\0')
+ d++;
+ dlen = d - dst;
+ n = siz - dlen;
+
+ if (n == 0)
+ return(dlen + strlen(s));
+ while (*s != '\0') {
+ if (n != 1) {
+ *d++ = *s;
+ n--;
+ }
+ s++;
+ }
+ *d = '\0';
+
+ return(dlen + (s - src)); /* count does not include NUL */
+}
Property changes on: trunk/contrib/file/src/strlcat.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/strlcpy.c
===================================================================
--- trunk/contrib/file/src/strlcpy.c (rev 0)
+++ trunk/contrib/file/src/strlcpy.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,54 @@
+/* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller at courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */
+#include "file.h"
+
+#include <sys/types.h>
+#include <string.h>
+
+/*
+ * Copy src to string dst of size siz. At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcpy(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+
+ /* Copy as many bytes as will fit */
+ if (n != 0 && --n != 0) {
+ do {
+ if ((*d++ = *s++) == 0)
+ break;
+ } while (--n != 0);
+ }
+
+ /* Not enough room in dst, add NUL and traverse rest of src */
+ if (n == 0) {
+ if (siz != 0)
+ *d = '\0'; /* NUL-terminate dst */
+ while (*s++)
+ ;
+ }
+
+ return(s - src - 1); /* count does not include NUL */
+}
Property changes on: trunk/contrib/file/src/strlcpy.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/tar.h
===================================================================
--- trunk/contrib/file/src/tar.h (rev 0)
+++ trunk/contrib/file/src/tar.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * Header file for public domain tar (tape archive) program.
+ *
+ * @(#)tar.h 1.20 86/10/29 Public Domain.
+ *
+ * Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu.
+ *
+ * $File: tar.h,v 1.13 2010/11/30 14:58:53 rrt Exp $ # checkin only
+ */
+
+/*
+ * Header block on tape.
+ *
+ * I'm going to use traditional DP naming conventions here.
+ * A "block" is a big chunk of stuff that we do I/O on.
+ * A "record" is a piece of info that we care about.
+ * Typically many "record"s fit into a "block".
+ */
+#define RECORDSIZE 512
+#define NAMSIZ 100
+#define TUNMLEN 32
+#define TGNMLEN 32
+
+union record {
+ unsigned char charptr[RECORDSIZE];
+ struct header {
+ char name[NAMSIZ];
+ char mode[8];
+ char uid[8];
+ char gid[8];
+ char size[12];
+ char mtime[12];
+ char chksum[8];
+ char linkflag;
+ char linkname[NAMSIZ];
+ char magic[8];
+ char uname[TUNMLEN];
+ char gname[TGNMLEN];
+ char devmajor[8];
+ char devminor[8];
+ } header;
+};
+
+/* The magic field is filled with this if uname and gname are valid. */
+#define TMAGIC "ustar" /* 5 chars and a null */
+#define GNUTMAGIC "ustar " /* 7 chars and a null */
Property changes on: trunk/contrib/file/src/tar.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/src/vasprintf.c
===================================================================
--- trunk/contrib/file/src/vasprintf.c (rev 0)
+++ trunk/contrib/file/src/vasprintf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,657 @@
+/*
+ * Copyright (c) Ian F. Darwin 1986-1995.
+ * Software written by Ian F. Darwin and others;
+ * maintained 1995-present by Christos Zoulas and others.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*###########################################################################
+ # #
+ # vasprintf #
+ # #
+ # Copyright (c) 2002-2005 David TAILLANDIER #
+ # #
+ ###########################################################################*/
+
+/*
+
+This software is distributed under the "modified BSD licence".
+
+This software is also released with GNU license (GPL) in another file (same
+source-code, only license differ).
+
+
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer. 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. 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 ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+====================
+
+Hacked from xnprintf version of 26th February 2005 to provide only
+vasprintf by Reuben Thomas <rrt at sc3d.org>.
+
+====================
+
+
+'printf' function family use the following format string:
+
+%[flag][width][.prec][modifier]type
+
+%% is the escape sequence to print a '%'
+% followed by an unknown format will print the characters without
+trying to do any interpretation
+
+flag: none + - # (blank)
+width: n 0n *
+prec: none .0 .n .*
+modifier: F N L h l ll z t ('F' and 'N' are ms-dos/16-bit specific)
+type: d i o u x X f e g E G c s p n
+
+
+The function needs to allocate memory to store the full text before to
+actually writing it. i.e if you want to fnprintf() 1000 characters, the
+functions will allocate 1000 bytes.
+This behaviour can be modified: you have to customise the code to flush the
+internal buffer (writing to screen or file) when it reach a given size. Then
+the buffer can have a shorter length. But what? If you really need to write
+HUGE string, don't use printf!
+During the process, some other memory is allocated (1024 bytes minimum)
+to handle the output of partial sprintf() calls. If you have only 10000 bytes
+free in memory, you *may* not be able to nprintf() a 8000 bytes-long text.
+
+note: if a buffer overflow occurs, exit() is called. This situation should
+never appear ... but if you want to be *really* sure, you have to modify the
+code to handle those situations (only one place to modify).
+A buffer overflow can only occur if your sprintf() do strange things or when
+you use strange formats.
+
+*/
+#include "file.h"
+
+#ifndef lint
+FILE_RCSID("@(#)$File: vasprintf.c,v 1.14 2017/08/13 00:21:47 christos Exp $")
+#endif /* lint */
+
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <ctype.h>
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+#ifdef HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+
+#define ALLOC_CHUNK 2048
+#define ALLOC_SECURITY_MARGIN 1024 /* big value because some platforms have very big 'G' exponent */
+#if ALLOC_CHUNK < ALLOC_SECURITY_MARGIN
+# error !!! ALLOC_CHUNK < ALLOC_SECURITY_MARGIN !!!
+#endif
+/* note: to have some interest, ALLOC_CHUNK should be much greater than ALLOC_SECURITY_MARGIN */
+
+/*
+ * To save a lot of push/pop, every variable are stored into this
+ * structure, which is passed among nearly every sub-functions.
+ */
+typedef struct {
+ const char * src_string; /* current position into intput string */
+ char * buffer_base; /* output buffer */
+ char * dest_string; /* current position into output string */
+ size_t buffer_len; /* length of output buffer */
+ size_t real_len; /* real current length of output text */
+ size_t pseudo_len; /* total length of output text if it were not limited in size */
+ size_t maxlen;
+ va_list vargs; /* pointer to current position into vargs */
+ char * sprintf_string;
+ FILE * fprintf_file;
+} xprintf_struct;
+
+/*
+ * Realloc buffer if needed
+ * Return value: 0 = ok
+ * EOF = not enought memory
+ */
+static int realloc_buff(xprintf_struct *s, size_t len)
+{
+ char * ptr;
+
+ if (len + ALLOC_SECURITY_MARGIN + s->real_len > s->buffer_len) {
+ len += s->real_len + ALLOC_CHUNK;
+ ptr = (char *)realloc((void *)(s->buffer_base), len);
+ if (ptr == NULL) {
+ s->buffer_base = NULL;
+ return EOF;
+ }
+
+ s->dest_string = ptr + (size_t)(s->dest_string - s->buffer_base);
+ s->buffer_base = ptr;
+ s->buffer_len = len;
+
+ (s->buffer_base)[s->buffer_len - 1] = 1; /* overflow marker */
+ }
+
+ return 0;
+}
+
+/*
+ * Prints 'usual' characters up to next '%'
+ * or up to end of text
+ */
+static int usual_char(xprintf_struct * s)
+{
+ size_t len;
+
+ len = strcspn(s->src_string, "%"); /* reachs the next '%' or end of input string */
+ /* note: 'len' is never 0 because the presence of '%' */
+ /* or end-of-line is checked in the calling function */
+
+ if (realloc_buff(s,len) == EOF)
+ return EOF;
+
+ memcpy(s->dest_string, s->src_string, len);
+ s->src_string += len;
+ s->dest_string += len;
+ s->real_len += len;
+ s->pseudo_len += len;
+
+ return 0;
+}
+
+/*
+ * Return value: 0 = ok
+ * EOF = error
+ */
+static int print_it(xprintf_struct *s, size_t approx_len,
+ const char *format_string, ...)
+{
+ va_list varg;
+ int vsprintf_len;
+ size_t len;
+
+ if (realloc_buff(s,approx_len) == EOF)
+ return EOF;
+
+ va_start(varg, format_string);
+ vsprintf_len = vsprintf(s->dest_string, format_string, varg);
+ va_end(varg);
+
+ /* Check for overflow */
+ assert((s->buffer_base)[s->buffer_len - 1] == 1);
+
+ if (vsprintf_len == EOF) /* must be done *after* overflow-check */
+ return EOF;
+
+ s->pseudo_len += vsprintf_len;
+ len = strlen(s->dest_string);
+ s->real_len += len;
+ s->dest_string += len;
+
+ return 0;
+}
+
+/*
+ * Prints a string (%s)
+ * We need special handling because:
+ * a: the length of the string is unknown
+ * b: when .prec is used, we must not access any extra byte of the
+ * string (of course, if the original sprintf() does... what the
+ * hell, not my problem)
+ *
+ * Return value: 0 = ok
+ * EOF = error
+ */
+static int type_s(xprintf_struct *s, int width, int prec,
+ const char *format_string, const char *arg_string)
+{
+ size_t string_len;
+
+ if (arg_string == NULL)
+ return print_it(s, (size_t)6, "(null)", 0);
+
+ /* hand-made strlen() whitch stops when 'prec' is reached. */
+ /* if 'prec' is -1 then it is never reached. */
+ string_len = 0;
+ while (arg_string[string_len] != 0 && (size_t)prec != string_len)
+ string_len++;
+
+ if (width != -1 && string_len < (size_t)width)
+ string_len = (size_t)width;
+
+ return print_it(s, string_len, format_string, arg_string);
+}
+
+/*
+ * Read a serie of digits. Stop when non-digit is found.
+ * Return value: the value read (between 0 and 32767).
+ * Note: no checks are made against overflow. If the string contain a big
+ * number, then the return value won't be what we want (but, in this case,
+ * the programmer don't know whatr he wants, then no problem).
+ */
+static int getint(const char **string)
+{
+ int i = 0;
+
+ while (isdigit((unsigned char)**string) != 0) {
+ i = i * 10 + (**string - '0');
+ (*string)++;
+ }
+
+ if (i < 0 || i > 32767)
+ i = 32767; /* if we have i==-10 this is not because the number is */
+ /* negative; this is because the number is big */
+ return i;
+}
+
+/*
+ * Read a part of the format string. A part is 'usual characters' (ie "blabla")
+ * or '%%' escape sequence (to print a single '%') or any combination of
+ * format specifier (ie "%i" or "%10.2d").
+ * After the current part is managed, the function returns to caller with
+ * everything ready to manage the following part.
+ * The caller must ensure than the string is not empty, i.e. the first byte
+ * is not zero.
+ *
+ * Return value: 0 = ok
+ * EOF = error
+ */
+static int dispatch(xprintf_struct *s)
+{
+ const char *initial_ptr;
+ char format_string[24]; /* max length may be something like "% +-#032768.32768Ld" */
+ char *format_ptr;
+ int flag_plus, flag_minus, flag_space, flag_sharp, flag_zero;
+ int width, prec, modifier, approx_width;
+ char type;
+ /* most of those variables are here to rewrite the format string */
+
+#define SRCTXT (s->src_string)
+#define DESTTXT (s->dest_string)
+
+ /* incoherent format string. Characters after the '%' will be printed with the next call */
+#define INCOHERENT() do {SRCTXT=initial_ptr; return 0;} while (0) /* do/while to avoid */
+#define INCOHERENT_TEST() do {if(*SRCTXT==0) INCOHERENT();} while (0) /* a null statement */
+
+ /* 'normal' text */
+ if (*SRCTXT != '%')
+ return usual_char(s);
+
+ /* we then have a '%' */
+ SRCTXT++;
+ /* don't check for end-of-string ; this is done later */
+
+ /* '%%' escape sequence */
+ if (*SRCTXT == '%') {
+ if (realloc_buff(s, (size_t)1) == EOF) /* because we can have "%%%%%%%%..." */
+ return EOF;
+ *DESTTXT = '%';
+ DESTTXT++;
+ SRCTXT++;
+ (s->real_len)++;
+ (s->pseudo_len)++;
+ return 0;
+ }
+
+ /* '%' managing */
+ initial_ptr = SRCTXT; /* save current pointer in case of incorrect */
+ /* 'decoding'. Points just after the '%' so the '%' */
+ /* won't be printed in any case, as required. */
+
+ /* flag */
+ flag_plus = flag_minus = flag_space = flag_sharp = flag_zero = 0;
+
+ for (;; SRCTXT++) {
+ if (*SRCTXT == ' ')
+ flag_space = 1;
+ else if (*SRCTXT == '+')
+ flag_plus = 1;
+ else if (*SRCTXT == '-')
+ flag_minus = 1;
+ else if (*SRCTXT == '#')
+ flag_sharp = 1;
+ else if (*SRCTXT == '0')
+ flag_zero = 1;
+ else
+ break;
+ }
+
+ INCOHERENT_TEST(); /* here is the first test for end of string */
+
+ /* width */
+ if (*SRCTXT == '*') { /* width given by next argument */
+ SRCTXT++;
+ width = va_arg(s->vargs, int);
+ if ((size_t)width > 0x3fffU) /* 'size_t' to check against negative values too */
+ width = 0x3fff;
+ } else if (isdigit((unsigned char)*SRCTXT)) /* width given as ASCII number */
+ width = getint(&SRCTXT);
+ else
+ width = -1; /* no width specified */
+
+ INCOHERENT_TEST();
+
+ /* .prec */
+ if (*SRCTXT == '.') {
+ SRCTXT++;
+ if (*SRCTXT == '*') { /* .prec given by next argument */
+ SRCTXT++;
+ prec = va_arg(s->vargs, int);
+ if ((size_t)prec >= 0x3fffU) /* 'size_t' to check against negative values too */
+ prec = 0x3fff;
+ } else { /* .prec given as ASCII number */
+ if (isdigit((unsigned char)*SRCTXT) == 0)
+ INCOHERENT();
+ prec = getint(&SRCTXT);
+ }
+ INCOHERENT_TEST();
+ } else
+ prec = -1; /* no .prec specified */
+
+ /* modifier */
+ switch (*SRCTXT) {
+ case 'L':
+ case 'h':
+ case 'l':
+ case 'z':
+ case 't':
+ modifier = *SRCTXT;
+ SRCTXT++;
+ if (modifier=='l' && *SRCTXT=='l') {
+ SRCTXT++;
+ modifier = 'L'; /* 'll' == 'L' long long == long double */
+ } /* only for compatibility ; not portable */
+ INCOHERENT_TEST();
+ break;
+ default:
+ modifier = -1; /* no modifier specified */
+ break;
+ }
+
+ /* type */
+ type = *SRCTXT;
+ if (strchr("diouxXfegEGcspn",type) == NULL)
+ INCOHERENT(); /* unknown type */
+ SRCTXT++;
+
+ /* rewrite format-string */
+ format_string[0] = '%';
+ format_ptr = &(format_string[1]);
+
+ if (flag_plus) {
+ *format_ptr = '+';
+ format_ptr++;
+ }
+ if (flag_minus) {
+ *format_ptr = '-';
+ format_ptr++;
+ }
+ if (flag_space) {
+ *format_ptr = ' ';
+ format_ptr++;
+ }
+ if (flag_sharp) {
+ *format_ptr = '#';
+ format_ptr++;
+ }
+ if (flag_zero) {
+ *format_ptr = '0';
+ format_ptr++;
+ } /* '0' *must* be the last one */
+
+ if (width != -1) {
+ sprintf(format_ptr, "%i", width);
+ format_ptr += strlen(format_ptr);
+ }
+
+ if (prec != -1) {
+ *format_ptr = '.';
+ format_ptr++;
+ sprintf(format_ptr, "%i", prec);
+ format_ptr += strlen(format_ptr);
+ }
+
+ if (modifier != -1) {
+ if (modifier == 'L' && strchr("diouxX",type) != NULL) {
+ *format_ptr = 'l';
+ format_ptr++;
+ *format_ptr = 'l';
+ format_ptr++;
+ } else {
+ *format_ptr = modifier;
+ format_ptr++;
+ }
+ }
+
+ *format_ptr = type;
+ format_ptr++;
+ *format_ptr = 0;
+
+ /* vague approximation of minimal length if width or prec are specified */
+ approx_width = width + prec;
+ if (approx_width < 0) /* because width == -1 and/or prec == -1 */
+ approx_width = 0;
+
+ switch (type) {
+ /* int */
+ case 'd':
+ case 'i':
+ case 'o':
+ case 'u':
+ case 'x':
+ case 'X':
+ switch (modifier) {
+ case -1 :
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int));
+ case 'L':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long long int));
+ case 'l':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long int));
+ case 'h':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int));
+ case 'z':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, size_t));
+ case 't':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, ptrdiff_t));
+ /* 'int' instead of 'short int' because default promotion is 'int' */
+ default:
+ INCOHERENT();
+ }
+
+ /* char */
+ case 'c':
+ if (modifier != -1)
+ INCOHERENT();
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int));
+ /* 'int' instead of 'char' because default promotion is 'int' */
+
+ /* math */
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'E':
+ case 'G':
+ switch (modifier) {
+ case -1 : /* because of default promotion, no modifier means 'l' */
+ case 'l':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, double));
+ case 'L':
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long double));
+ default:
+ INCOHERENT();
+ }
+
+ /* string */
+ case 's':
+ return type_s(s, width, prec, format_string, va_arg(s->vargs, const char*));
+
+ /* pointer */
+ case 'p':
+ if (modifier == -1)
+ return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, void *));
+ INCOHERENT();
+
+ /* store */
+ case 'n':
+ if (modifier == -1) {
+ int * p;
+ p = va_arg(s->vargs, int *);
+ if (p != NULL) {
+ *p = s->pseudo_len;
+ return 0;
+ }
+ return EOF;
+ }
+ INCOHERENT();
+
+ } /* switch */
+
+ INCOHERENT(); /* unknown type */
+
+#undef INCOHERENT
+#undef INCOHERENT_TEST
+#undef SRCTXT
+#undef DESTTXT
+}
+
+/*
+ * Return value: number of *virtually* written characters
+ * EOF = error
+ */
+static int core(xprintf_struct *s)
+{
+ size_t save_len;
+ char *dummy_base;
+
+ /* basic checks */
+ if ((int)(s->maxlen) <= 0) /* 'int' to check against some conversion */
+ return EOF; /* error for example if value is (int)-10 */
+ s->maxlen--; /* because initial maxlen counts final 0 */
+ /* note: now 'maxlen' _can_ be zero */
+
+ if (s->src_string == NULL)
+ s->src_string = "(null)";
+
+ /* struct init and memory allocation */
+ s->buffer_base = NULL;
+ s->buffer_len = 0;
+ s->real_len = 0;
+ s->pseudo_len = 0;
+ if (realloc_buff(s, (size_t)0) == EOF)
+ return EOF;
+ s->dest_string = s->buffer_base;
+
+ /* process source string */
+ for (;;) {
+ /* up to end of source string */
+ if (*(s->src_string) == 0) {
+ *(s->dest_string) = '\0'; /* final NUL */
+ break;
+ }
+
+ if (dispatch(s) == EOF)
+ goto free_EOF;
+
+ /* up to end of dest string */
+ if (s->real_len >= s->maxlen) {
+ (s->buffer_base)[s->maxlen] = '\0'; /* final NUL */
+ break;
+ }
+ }
+
+ /* for (v)asnprintf */
+ dummy_base = s->buffer_base;
+
+ dummy_base = s->buffer_base + s->real_len;
+ save_len = s->real_len;
+
+ /* process the remaining of source string to compute 'pseudo_len'. We
+ * overwrite again and again, starting at 'dummy_base' because we don't
+ * need the text, only char count. */
+ while(*(s->src_string) != 0) { /* up to end of source string */
+ s->real_len = 0;
+ s->dest_string = dummy_base;
+ if (dispatch(s) == EOF)
+ goto free_EOF;
+ }
+
+ s->buffer_base = (char *)realloc((void *)(s->buffer_base), save_len + 1);
+ if (s->buffer_base == NULL)
+ return EOF; /* should rarely happen because we shrink the buffer */
+ return s->pseudo_len;
+
+ free_EOF:
+ free(s->buffer_base);
+ return EOF;
+}
+
+int vasprintf(char **ptr, const char *format_string, va_list vargs)
+{
+ xprintf_struct s;
+ int retval;
+
+ s.src_string = format_string;
+#ifdef va_copy
+ va_copy (s.vargs, vargs);
+#else
+# ifdef __va_copy
+ __va_copy (s.vargs, vargs);
+# else
+# ifdef WIN32
+ s.vargs = vargs;
+# else
+ memcpy (&s.vargs, &vargs, sizeof (s.va_args));
+# endif /* WIN32 */
+# endif /* __va_copy */
+#endif /* va_copy */
+ s.maxlen = (size_t)INT_MAX;
+
+ retval = core(&s);
+ va_end(s.vargs);
+ if (retval == EOF) {
+ *ptr = NULL;
+ return EOF;
+ }
+
+ *ptr = s.buffer_base;
+ return retval;
+}
Property changes on: trunk/contrib/file/src/vasprintf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Deleted: trunk/contrib/file/strcasestr.c
===================================================================
--- trunk/contrib/file/strcasestr.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/strcasestr.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,84 +0,0 @@
-/* $NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $ */
-
-/*-
- * Copyright (c) 1990, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Chris Torek.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $");
-__RCSID("$NetBSD: strncasecmp.c,v 1.2 2007/06/04 18:19:27 christos Exp $");
-#endif /* LIBC_SCCS and not lint */
-
-#include "file.h"
-
-#include <assert.h>
-#include <ctype.h>
-#include <string.h>
-
-static int
-_strncasecmp(const char *s1, const char *s2, size_t n)
-{
- if (n != 0) {
- const unsigned char *us1 = (const unsigned char *)s1,
- *us2 = (const unsigned char *)s2;
-
- do {
- if (tolower(*us1) != tolower(*us2++))
- return tolower(*us1) - tolower(*--us2);
- if (*us1++ == '\0')
- break;
- } while (--n != 0);
- }
- return 0;
-}
-
-/*
- * Find the first occurrence of find in s, ignore case.
- */
-char *
-strcasestr(const char *s, const char *find)
-{
- char c, sc;
- size_t len;
-
- if ((c = *find++) != 0) {
- c = tolower((unsigned char)c);
- len = strlen(find);
- do {
- do {
- if ((sc = *s++) == 0)
- return (NULL);
- } while ((char)tolower((unsigned char)sc) != c);
- } while (_strncasecmp(s, find, len) != 0);
- s--;
- }
- return (char *)(intptr_t)(s);
-}
Deleted: trunk/contrib/file/strlcat.c
===================================================================
--- trunk/contrib/file/strlcat.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/strlcat.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,58 +0,0 @@
-/* $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */
-
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller at courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */
-#include "file.h"
-
-#include <sys/types.h>
-#include <string.h>
-
-/*
- * Appends src to string dst of size siz (unlike strncat, siz is the
- * full size of dst, not space left). At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz <= strlen(dst)).
- * Returns strlen(src) + MIN(siz, strlen(initial dst)).
- * If retval >= siz, truncation occurred.
- */
-size_t
-strlcat(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
- size_t dlen;
-
- /* Find the end of dst and adjust bytes left but don't go past end */
- while (n-- != 0 && *d != '\0')
- d++;
- dlen = d - dst;
- n = siz - dlen;
-
- if (n == 0)
- return(dlen + strlen(s));
- while (*s != '\0') {
- if (n != 1) {
- *d++ = *s;
- n--;
- }
- s++;
- }
- *d = '\0';
-
- return(dlen + (s - src)); /* count does not include NUL */
-}
Deleted: trunk/contrib/file/strlcpy.c
===================================================================
--- trunk/contrib/file/strlcpy.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/strlcpy.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,54 +0,0 @@
-/* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */
-
-/*
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller at courtesan.com>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */
-#include "file.h"
-
-#include <sys/types.h>
-#include <string.h>
-
-/*
- * Copy src to string dst of size siz. At most siz-1 characters
- * will be copied. Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-size_t
-strlcpy(char *dst, const char *src, size_t siz)
-{
- char *d = dst;
- const char *s = src;
- size_t n = siz;
-
- /* Copy as many bytes as will fit */
- if (n != 0 && --n != 0) {
- do {
- if ((*d++ = *s++) == 0)
- break;
- } while (--n != 0);
- }
-
- /* Not enough room in dst, add NUL and traverse rest of src */
- if (n == 0) {
- if (siz != 0)
- *d = '\0'; /* NUL-terminate dst */
- while (*s++)
- ;
- }
-
- return(s - src - 1); /* count does not include NUL */
-}
Deleted: trunk/contrib/file/tar.h
===================================================================
--- trunk/contrib/file/tar.h 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/tar.h 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) Ian F. Darwin 1986-1995.
- * Software written by Ian F. Darwin and others;
- * maintained 1995-present by Christos Zoulas and others.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*
- * Header file for public domain tar (tape archive) program.
- *
- * @(#)tar.h 1.20 86/10/29 Public Domain.
- *
- * Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu.
- *
- * $File: tar.h,v 1.13 2010/11/30 14:58:53 rrt Exp $ # checkin only
- */
-
-/*
- * Header block on tape.
- *
- * I'm going to use traditional DP naming conventions here.
- * A "block" is a big chunk of stuff that we do I/O on.
- * A "record" is a piece of info that we care about.
- * Typically many "record"s fit into a "block".
- */
-#define RECORDSIZE 512
-#define NAMSIZ 100
-#define TUNMLEN 32
-#define TGNMLEN 32
-
-union record {
- unsigned char charptr[RECORDSIZE];
- struct header {
- char name[NAMSIZ];
- char mode[8];
- char uid[8];
- char gid[8];
- char size[12];
- char mtime[12];
- char chksum[8];
- char linkflag;
- char linkname[NAMSIZ];
- char magic[8];
- char uname[TUNMLEN];
- char gname[TGNMLEN];
- char devmajor[8];
- char devminor[8];
- } header;
-};
-
-/* The magic field is filled with this if uname and gname are valid. */
-#define TMAGIC "ustar" /* 5 chars and a null */
-#define GNUTMAGIC "ustar " /* 7 chars and a null */
Added: trunk/contrib/file/tests/Makefile.am
===================================================================
--- trunk/contrib/file/tests/Makefile.am (rev 0)
+++ trunk/contrib/file/tests/Makefile.am 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,18 @@
+check_PROGRAMS = test
+test_LDADD = $(top_builddir)/src/libmagic.la
+test_CPPFLAGS = -I$(top_builddir)/src
+
+EXTRA_DIST = \
+escapevel.result \
+escapevel.testfile \
+gedcom.result \
+gedcom.testfile \
+hddrawcopytool.result \
+hddrawcopytool.testfile \
+issue311docx.result \
+issue311docx.testfile
+
+T = $(top_srcdir)/tests
+check-local:
+ MAGIC=$(top_builddir)/magic/magic ./test
+ set -e; for i in $T/*.testfile; do echo Running test: $$i; TZ=UTC MAGIC=$(top_builddir)/magic/magic ./test $$i $${i%%.testfile}.result; done
Property changes on: trunk/contrib/file/tests/Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/tests/Makefile.in
===================================================================
--- trunk/contrib/file/tests/Makefile.in (rev 0)
+++ trunk/contrib/file/tests/Makefile.in 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,617 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = test$(EXEEXT)
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+test_SOURCES = test.c
+test_OBJECTS = test-test.$(OBJEXT)
+test_DEPENDENCIES = $(top_builddir)/src/libmagic.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = test.c
+DIST_SOURCES = test.c
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MINGW = @MINGW@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WARNINGS = @WARNINGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+fsect = @fsect@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+test_LDADD = $(top_builddir)/src/libmagic.la
+test_CPPFLAGS = -I$(top_builddir)/src
+EXTRA_DIST = \
+escapevel.result \
+escapevel.testfile \
+gedcom.result \
+gedcom.testfile \
+hddrawcopytool.result \
+hddrawcopytool.testfile \
+issue311docx.result \
+issue311docx.testfile
+
+T = $(top_srcdir)/tests
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES)
+ @rm -f test$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-test.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+ at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+test-test.o: test.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test-test.o -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test.c' object='test-test.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c
+
+test-test.obj: test.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test-test.obj -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi`
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test.c' object='test-test.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
+ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+check-local:
+ MAGIC=$(top_builddir)/magic/magic ./test
+ set -e; for i in $T/*.testfile; do echo Running test: $$i; TZ=UTC MAGIC=$(top_builddir)/magic/magic ./test $$i $${i%%.testfile}.result; done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Property changes on: trunk/contrib/file/tests/Makefile.in
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/contrib/file/tests/README
===================================================================
--- trunk/contrib/file/tests/README (rev 0)
+++ trunk/contrib/file/tests/README 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,14 @@
+file tests
+==========
+
+This directory contains tests for file. It is highly encouraged to add
+one each time a bug is found, and each time new magic is added. Each
+test consists of two files:
+
+ TEST.testfile
+ TEST.result
+
+where TEST is the base name of the test, TEST.testfile is the input,
+and TEST.result is the desired output from file.
+
+To add a new test just add the test files to the directory.
Added: trunk/contrib/file/tests/escapevel.result
===================================================================
--- trunk/contrib/file/tests/escapevel.result (rev 0)
+++ trunk/contrib/file/tests/escapevel.result 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1 @@
+Zip data (MIME type "application/vnd.nz.gen.geek_central.ti5x"?)
\ No newline at end of file
Added: trunk/contrib/file/tests/escapevel.testfile
===================================================================
(Binary files differ)
Index: trunk/contrib/file/tests/escapevel.testfile
===================================================================
--- trunk/contrib/file/tests/escapevel.testfile 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/tests/escapevel.testfile 2018-06-15 22:27:44 UTC (rev 11008)
Property changes on: trunk/contrib/file/tests/escapevel.testfile
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/zip
\ No newline at end of property
Added: trunk/contrib/file/tests/gedcom.result
===================================================================
--- trunk/contrib/file/tests/gedcom.result (rev 0)
+++ trunk/contrib/file/tests/gedcom.result 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1 @@
+GEDCOM genealogy text version 5.5, ASCII text
\ No newline at end of file
Added: trunk/contrib/file/tests/gedcom.testfile
===================================================================
--- trunk/contrib/file/tests/gedcom.testfile (rev 0)
+++ trunk/contrib/file/tests/gedcom.testfile 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,8 @@
+0 HEAD
+1 SOUR GENJ
+2 VERS 2.x
+1 GEDC
+2 VERS 5.5
+2 FORM Lineage-Linked
+1 CHAR UNICODE
+1 LANG Italian
Added: trunk/contrib/file/tests/hddrawcopytool.result
===================================================================
--- trunk/contrib/file/tests/hddrawcopytool.result (rev 0)
+++ trunk/contrib/file/tests/hddrawcopytool.result 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1 @@
+HDD Raw Copy Tool 1.10 - HD model: ST500DM0 02-1BD142 serial: 51D20233A7C0
\ No newline at end of file
Added: trunk/contrib/file/tests/hddrawcopytool.testfile
===================================================================
(Binary files differ)
Index: trunk/contrib/file/tests/hddrawcopytool.testfile
===================================================================
--- trunk/contrib/file/tests/hddrawcopytool.testfile 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/tests/hddrawcopytool.testfile 2018-06-15 22:27:44 UTC (rev 11008)
Property changes on: trunk/contrib/file/tests/hddrawcopytool.testfile
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/contrib/file/tests/issue311docx.result
===================================================================
--- trunk/contrib/file/tests/issue311docx.result (rev 0)
+++ trunk/contrib/file/tests/issue311docx.result 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1 @@
+Microsoft Word 2007+
\ No newline at end of file
Added: trunk/contrib/file/tests/issue311docx.testfile
===================================================================
(Binary files differ)
Index: trunk/contrib/file/tests/issue311docx.testfile
===================================================================
--- trunk/contrib/file/tests/issue311docx.testfile 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/tests/issue311docx.testfile 2018-06-15 22:27:44 UTC (rev 11008)
Property changes on: trunk/contrib/file/tests/issue311docx.testfile
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/vnd.openxmlformats-officedocument.wordprocessingml.document
\ No newline at end of property
Added: trunk/contrib/file/tests/test.c
===================================================================
--- trunk/contrib/file/tests/test.c (rev 0)
+++ trunk/contrib/file/tests/test.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "magic.h"
+
+static void *
+xrealloc(void *p, size_t n)
+{
+ p = realloc(p, n);
+ if (p == NULL) {
+ (void)fprintf(stderr, "ERROR slurping file: out of memory\n");
+ exit(10);
+ }
+ return p;
+}
+
+static char *
+slurp(FILE *fp, size_t *final_len)
+{
+ size_t len = 256;
+ int c;
+ char *l = (char *)xrealloc(NULL, len), *s = l;
+
+ for (c = getc(fp); c != EOF; c = getc(fp)) {
+ if (s == l + len) {
+ l = (char *)xrealloc(l, len * 2);
+ len *= 2;
+ }
+ *s++ = c;
+ }
+ if (s == l + len)
+ l = (char *)xrealloc(l, len + 1);
+ *s++ = '\0';
+
+ *final_len = s - l;
+ l = (char *)xrealloc(l, s - l);
+ return l;
+}
+
+int
+main(int argc, char **argv)
+{
+ struct magic_set *ms;
+ const char *result;
+ char *desired;
+ size_t desired_len;
+ int i;
+ FILE *fp;
+
+ ms = magic_open(MAGIC_NONE);
+ if (ms == NULL) {
+ (void)fprintf(stderr, "ERROR opening MAGIC_NONE: out of memory\n");
+ return 10;
+ }
+ if (magic_load(ms, NULL) == -1) {
+ (void)fprintf(stderr, "ERROR loading with NULL file: %s\n",
+ magic_error(ms));
+ return 11;
+ }
+
+ if (argc > 1) {
+ if (argc != 3) {
+ (void)fprintf(stderr, "Usage: test TEST-FILE RESULT\n");
+ } else {
+ if ((result = magic_file(ms, argv[1])) == NULL) {
+ (void)fprintf(stderr, "ERROR loading file %s: %s\n", argv[1], magic_error(ms));
+ return 12;
+ } else {
+ fp = fopen(argv[2], "r");
+ if (fp == NULL) {
+ (void)fprintf(stderr, "ERROR opening `%s': ", argv[2]);
+ perror(NULL);
+ return 13;
+ }
+ desired = slurp(fp, &desired_len);
+ fclose(fp);
+ (void)printf("%s: %s\n", argv[1], result);
+ if (strcmp(result, desired) != 0) {
+ (void)fprintf(stderr, "Error: result was\n%s\nexpected:\n%s\n", result, desired);
+ return 1;
+ }
+ }
+ }
+ }
+
+ magic_close(ms);
+ return 0;
+}
Property changes on: trunk/contrib/file/tests/test.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Deleted: trunk/contrib/file/vasprintf.c
===================================================================
--- trunk/contrib/file/vasprintf.c 2018-06-15 22:23:57 UTC (rev 11007)
+++ trunk/contrib/file/vasprintf.c 2018-06-15 22:27:44 UTC (rev 11008)
@@ -1,653 +0,0 @@
-/*
- * Copyright (c) Ian F. Darwin 1986-1995.
- * Software written by Ian F. Darwin and others;
- * maintained 1995-present by Christos Zoulas and others.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice immediately at the beginning of the file, without modification,
- * this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/*###########################################################################
- # #
- # vasprintf #
- # #
- # Copyright (c) 2002-2005 David TAILLANDIER #
- # #
- ###########################################################################*/
-
-/*
-
-This software is distributed under the "modified BSD licence".
-
-This software is also released with GNU license (GPL) in another file (same
-source-code, only license differ).
-
-
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer. 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. 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 ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-====================
-
-Hacked from xnprintf version of 26th February 2005 to provide only
-vasprintf by Reuben Thomas <rrt at sc3d.org>.
-
-====================
-
-
-'printf' function family use the following format string:
-
-%[flag][width][.prec][modifier]type
-
-%% is the escape sequence to print a '%'
-% followed by an unknown format will print the characters without
-trying to do any interpretation
-
-flag: none + - # (blank)
-width: n 0n *
-prec: none .0 .n .*
-modifier: F N L h l ll z t ('F' and 'N' are ms-dos/16-bit specific)
-type: d i o u x X f e g E G c s p n
-
-
-The function needs to allocate memory to store the full text before to
-actually writting it. i.e if you want to fnprintf() 1000 characters, the
-functions will allocate 1000 bytes.
-This behaviour can be modified: you have to customise the code to flush the
-internal buffer (writing to screen or file) when it reach a given size. Then
-the buffer can have a shorter length. But what? If you really need to write
-HUGE string, don't use printf!
-During the process, some other memory is allocated (1024 bytes minimum)
-to handle the output of partial sprintf() calls. If you have only 10000 bytes
-free in memory, you *may* not be able to nprintf() a 8000 bytes-long text.
-
-note: if a buffer overflow occurs, exit() is called. This situation should
-never appear ... but if you want to be *really* sure, you have to modify the
-code to handle those situations (only one place to modify).
-A buffer overflow can only occur if your sprintf() do strange things or when
-you use strange formats.
-
-*/
-#include "file.h"
-
-#ifndef lint
-FILE_RCSID("@(#)$File: vasprintf.c,v 1.12 2014/05/14 23:09:21 christos Exp $")
-#endif /* lint */
-
-#include <assert.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <ctype.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#define ALLOC_CHUNK 2048
-#define ALLOC_SECURITY_MARGIN 1024 /* big value because some platforms have very big 'G' exponent */
-#if ALLOC_CHUNK < ALLOC_SECURITY_MARGIN
-# error !!! ALLOC_CHUNK < ALLOC_SECURITY_MARGIN !!!
-#endif
-/* note: to have some interest, ALLOC_CHUNK should be much greater than ALLOC_SECURITY_MARGIN */
-
-/*
- * To save a lot of push/pop, every variable are stored into this
- * structure, which is passed among nearly every sub-functions.
- */
-typedef struct {
- const char * src_string; /* current position into intput string */
- char * buffer_base; /* output buffer */
- char * dest_string; /* current position into output string */
- size_t buffer_len; /* length of output buffer */
- size_t real_len; /* real current length of output text */
- size_t pseudo_len; /* total length of output text if it were not limited in size */
- size_t maxlen;
- va_list vargs; /* pointer to current position into vargs */
- char * sprintf_string;
- FILE * fprintf_file;
-} xprintf_struct;
-
-/*
- * Realloc buffer if needed
- * Return value: 0 = ok
- * EOF = not enought memory
- */
-static int realloc_buff(xprintf_struct *s, size_t len)
-{
- char * ptr;
-
- if (len + ALLOC_SECURITY_MARGIN + s->real_len > s->buffer_len) {
- len += s->real_len + ALLOC_CHUNK;
- ptr = (char *)realloc((void *)(s->buffer_base), len);
- if (ptr == NULL) {
- s->buffer_base = NULL;
- return EOF;
- }
-
- s->dest_string = ptr + (size_t)(s->dest_string - s->buffer_base);
- s->buffer_base = ptr;
- s->buffer_len = len;
-
- (s->buffer_base)[s->buffer_len - 1] = 1; /* overflow marker */
- }
-
- return 0;
-}
-
-/*
- * Prints 'usual' characters up to next '%'
- * or up to end of text
- */
-static int usual_char(xprintf_struct * s)
-{
- size_t len;
-
- len = strcspn(s->src_string, "%"); /* reachs the next '%' or end of input string */
- /* note: 'len' is never 0 because the presence of '%' */
- /* or end-of-line is checked in the calling function */
-
- if (realloc_buff(s,len) == EOF)
- return EOF;
-
- memcpy(s->dest_string, s->src_string, len);
- s->src_string += len;
- s->dest_string += len;
- s->real_len += len;
- s->pseudo_len += len;
-
- return 0;
-}
-
-/*
- * Return value: 0 = ok
- * EOF = error
- */
-static int print_it(xprintf_struct *s, size_t approx_len,
- const char *format_string, ...)
-{
- va_list varg;
- int vsprintf_len;
- size_t len;
-
- if (realloc_buff(s,approx_len) == EOF)
- return EOF;
-
- va_start(varg, format_string);
- vsprintf_len = vsprintf(s->dest_string, format_string, varg);
- va_end(varg);
-
- /* Check for overflow */
- assert((s->buffer_base)[s->buffer_len - 1] == 1);
-
- if (vsprintf_len == EOF) /* must be done *after* overflow-check */
- return EOF;
-
- s->pseudo_len += vsprintf_len;
- len = strlen(s->dest_string);
- s->real_len += len;
- s->dest_string += len;
-
- return 0;
-}
-
-/*
- * Prints a string (%s)
- * We need special handling because:
- * a: the length of the string is unknown
- * b: when .prec is used, we must not access any extra byte of the
- * string (of course, if the original sprintf() does... what the
- * hell, not my problem)
- *
- * Return value: 0 = ok
- * EOF = error
- */
-static int type_s(xprintf_struct *s, int width, int prec,
- const char *format_string, const char *arg_string)
-{
- size_t string_len;
-
- if (arg_string == NULL)
- return print_it(s, (size_t)6, "(null)", 0);
-
- /* hand-made strlen() whitch stops when 'prec' is reached. */
- /* if 'prec' is -1 then it is never reached. */
- string_len = 0;
- while (arg_string[string_len] != 0 && (size_t)prec != string_len)
- string_len++;
-
- if (width != -1 && string_len < (size_t)width)
- string_len = (size_t)width;
-
- return print_it(s, string_len, format_string, arg_string);
-}
-
-/*
- * Read a serie of digits. Stop when non-digit is found.
- * Return value: the value read (between 0 and 32767).
- * Note: no checks are made against overflow. If the string contain a big
- * number, then the return value won't be what we want (but, in this case,
- * the programmer don't know whatr he wants, then no problem).
- */
-static int getint(const char **string)
-{
- int i = 0;
-
- while (isdigit((unsigned char)**string) != 0) {
- i = i * 10 + (**string - '0');
- (*string)++;
- }
-
- if (i < 0 || i > 32767)
- i = 32767; /* if we have i==-10 this is not because the number is */
- /* negative; this is because the number is big */
- return i;
-}
-
-/*
- * Read a part of the format string. A part is 'usual characters' (ie "blabla")
- * or '%%' escape sequence (to print a single '%') or any combination of
- * format specifier (ie "%i" or "%10.2d").
- * After the current part is managed, the function returns to caller with
- * everything ready to manage the following part.
- * The caller must ensure than the string is not empty, i.e. the first byte
- * is not zero.
- *
- * Return value: 0 = ok
- * EOF = error
- */
-static int dispatch(xprintf_struct *s)
-{
- const char *initial_ptr;
- char format_string[24]; /* max length may be something like "% +-#032768.32768Ld" */
- char *format_ptr;
- int flag_plus, flag_minus, flag_space, flag_sharp, flag_zero;
- int width, prec, modifier, approx_width;
- char type;
- /* most of those variables are here to rewrite the format string */
-
-#define SRCTXT (s->src_string)
-#define DESTTXT (s->dest_string)
-
- /* incoherent format string. Characters after the '%' will be printed with the next call */
-#define INCOHERENT() do {SRCTXT=initial_ptr; return 0;} while (0) /* do/while to avoid */
-#define INCOHERENT_TEST() do {if(*SRCTXT==0) INCOHERENT();} while (0) /* a null statement */
-
- /* 'normal' text */
- if (*SRCTXT != '%')
- return usual_char(s);
-
- /* we then have a '%' */
- SRCTXT++;
- /* don't check for end-of-string ; this is done later */
-
- /* '%%' escape sequence */
- if (*SRCTXT == '%') {
- if (realloc_buff(s, (size_t)1) == EOF) /* because we can have "%%%%%%%%..." */
- return EOF;
- *DESTTXT = '%';
- DESTTXT++;
- SRCTXT++;
- (s->real_len)++;
- (s->pseudo_len)++;
- return 0;
- }
-
- /* '%' managing */
- initial_ptr = SRCTXT; /* save current pointer in case of incorrect */
- /* 'decoding'. Points just after the '%' so the '%' */
- /* won't be printed in any case, as required. */
-
- /* flag */
- flag_plus = flag_minus = flag_space = flag_sharp = flag_zero = 0;
-
- for (;; SRCTXT++) {
- if (*SRCTXT == ' ')
- flag_space = 1;
- else if (*SRCTXT == '+')
- flag_plus = 1;
- else if (*SRCTXT == '-')
- flag_minus = 1;
- else if (*SRCTXT == '#')
- flag_sharp = 1;
- else if (*SRCTXT == '0')
- flag_zero = 1;
- else
- break;
- }
-
- INCOHERENT_TEST(); /* here is the first test for end of string */
-
- /* width */
- if (*SRCTXT == '*') { /* width given by next argument */
- SRCTXT++;
- width = va_arg(s->vargs, int);
- if ((size_t)width > 0x3fffU) /* 'size_t' to check against negative values too */
- width = 0x3fff;
- } else if (isdigit((unsigned char)*SRCTXT)) /* width given as ASCII number */
- width = getint(&SRCTXT);
- else
- width = -1; /* no width specified */
-
- INCOHERENT_TEST();
-
- /* .prec */
- if (*SRCTXT == '.') {
- SRCTXT++;
- if (*SRCTXT == '*') { /* .prec given by next argument */
- SRCTXT++;
- prec = va_arg(s->vargs, int);
- if ((size_t)prec >= 0x3fffU) /* 'size_t' to check against negative values too */
- prec = 0x3fff;
- } else { /* .prec given as ASCII number */
- if (isdigit((unsigned char)*SRCTXT) == 0)
- INCOHERENT();
- prec = getint(&SRCTXT);
- }
- INCOHERENT_TEST();
- } else
- prec = -1; /* no .prec specified */
-
- /* modifier */
- switch (*SRCTXT) {
- case 'L':
- case 'h':
- case 'l':
- case 'z':
- case 't':
- modifier = *SRCTXT;
- SRCTXT++;
- if (modifier=='l' && *SRCTXT=='l') {
- SRCTXT++;
- modifier = 'L'; /* 'll' == 'L' long long == long double */
- } /* only for compatibility ; not portable */
- INCOHERENT_TEST();
- break;
- default:
- modifier = -1; /* no modifier specified */
- break;
- }
-
- /* type */
- type = *SRCTXT;
- if (strchr("diouxXfegEGcspn",type) == NULL)
- INCOHERENT(); /* unknown type */
- SRCTXT++;
-
- /* rewrite format-string */
- format_string[0] = '%';
- format_ptr = &(format_string[1]);
-
- if (flag_plus) {
- *format_ptr = '+';
- format_ptr++;
- }
- if (flag_minus) {
- *format_ptr = '-';
- format_ptr++;
- }
- if (flag_space) {
- *format_ptr = ' ';
- format_ptr++;
- }
- if (flag_sharp) {
- *format_ptr = '#';
- format_ptr++;
- }
- if (flag_zero) {
- *format_ptr = '0';
- format_ptr++;
- } /* '0' *must* be the last one */
-
- if (width != -1) {
- sprintf(format_ptr, "%i", width);
- format_ptr += strlen(format_ptr);
- }
-
- if (prec != -1) {
- *format_ptr = '.';
- format_ptr++;
- sprintf(format_ptr, "%i", prec);
- format_ptr += strlen(format_ptr);
- }
-
- if (modifier != -1) {
- if (modifier == 'L' && strchr("diouxX",type) != NULL) {
- *format_ptr = 'l';
- format_ptr++;
- *format_ptr = 'l';
- format_ptr++;
- } else {
- *format_ptr = modifier;
- format_ptr++;
- }
- }
-
- *format_ptr = type;
- format_ptr++;
- *format_ptr = 0;
-
- /* vague approximation of minimal length if width or prec are specified */
- approx_width = width + prec;
- if (approx_width < 0) /* because width == -1 and/or prec == -1 */
- approx_width = 0;
-
- switch (type) {
- /* int */
- case 'd':
- case 'i':
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- switch (modifier) {
- case -1 :
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int));
- case 'L':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long long int));
- case 'l':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long int));
- case 'h':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int));
- case 'z':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, size_t));
- case 't':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, ptrdiff_t));
- /* 'int' instead of 'short int' because default promotion is 'int' */
- default:
- INCOHERENT();
- }
-
- /* char */
- case 'c':
- if (modifier != -1)
- INCOHERENT();
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int));
- /* 'int' instead of 'char' because default promotion is 'int' */
-
- /* math */
- case 'e':
- case 'f':
- case 'g':
- case 'E':
- case 'G':
- switch (modifier) {
- case -1 : /* because of default promotion, no modifier means 'l' */
- case 'l':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, double));
- case 'L':
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long double));
- default:
- INCOHERENT();
- }
-
- /* string */
- case 's':
- return type_s(s, width, prec, format_string, va_arg(s->vargs, const char*));
-
- /* pointer */
- case 'p':
- if (modifier == -1)
- return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, void *));
- INCOHERENT();
-
- /* store */
- case 'n':
- if (modifier == -1) {
- int * p;
- p = va_arg(s->vargs, int *);
- if (p != NULL) {
- *p = s->pseudo_len;
- return 0;
- }
- return EOF;
- }
- INCOHERENT();
-
- } /* switch */
-
- INCOHERENT(); /* unknown type */
-
-#undef INCOHERENT
-#undef INCOHERENT_TEST
-#undef SRCTXT
-#undef DESTTXT
-}
-
-/*
- * Return value: number of *virtually* written characters
- * EOF = error
- */
-static int core(xprintf_struct *s)
-{
- size_t save_len;
- char *dummy_base;
-
- /* basic checks */
- if ((int)(s->maxlen) <= 0) /* 'int' to check against some conversion */
- return EOF; /* error for example if value is (int)-10 */
- s->maxlen--; /* because initial maxlen counts final 0 */
- /* note: now 'maxlen' _can_ be zero */
-
- if (s->src_string == NULL)
- s->src_string = "(null)";
-
- /* struct init and memory allocation */
- s->buffer_base = NULL;
- s->buffer_len = 0;
- s->real_len = 0;
- s->pseudo_len = 0;
- if (realloc_buff(s, (size_t)0) == EOF)
- return EOF;
- s->dest_string = s->buffer_base;
-
- /* process source string */
- for (;;) {
- /* up to end of source string */
- if (*(s->src_string) == 0) {
- *(s->dest_string) = '\0'; /* final NUL */
- break;
- }
-
- if (dispatch(s) == EOF)
- goto free_EOF;
-
- /* up to end of dest string */
- if (s->real_len >= s->maxlen) {
- (s->buffer_base)[s->maxlen] = '\0'; /* final NUL */
- break;
- }
- }
-
- /* for (v)asnprintf */
- dummy_base = s->buffer_base;
-
- dummy_base = s->buffer_base + s->real_len;
- save_len = s->real_len;
-
- /* process the remaining of source string to compute 'pseudo_len'. We
- * overwrite again and again, starting at 'dummy_base' because we don't
- * need the text, only char count. */
- while(*(s->src_string) != 0) { /* up to end of source string */
- s->real_len = 0;
- s->dest_string = dummy_base;
- if (dispatch(s) == EOF)
- goto free_EOF;
- }
-
- s->buffer_base = (char *)realloc((void *)(s->buffer_base), save_len + 1);
- if (s->buffer_base == NULL)
- return EOF; /* should rarely happen because we shrink the buffer */
- return s->pseudo_len;
-
- free_EOF:
- free(s->buffer_base);
- return EOF;
-}
-
-int vasprintf(char **ptr, const char *format_string, va_list vargs)
-{
- xprintf_struct s;
- int retval;
-
- s.src_string = format_string;
-#ifdef va_copy
- va_copy (s.vargs, vargs);
-#else
-#ifdef __va_copy
- __va_copy (s.vargs, vargs);
-#else
- memcpy (&s.vargs, &vargs, sizeof (s.va_args));
-#endif /* __va_copy */
-#endif /* va_copy */
- s.maxlen = (size_t)INT_MAX;
-
- retval = core(&s);
- va_end(s.vargs);
- if (retval == EOF) {
- *ptr = NULL;
- return EOF;
- }
-
- *ptr = s.buffer_base;
- return retval;
-}
More information about the Midnightbsd-cvs
mailing list