welcome to file-5.20

This commit is contained in:
christos 2014-10-10 20:15:01 +00:00
parent ebfd11214d
commit 58b7f19951
22 changed files with 534 additions and 252 deletions

View File

@ -44,6 +44,9 @@
/* Define to 1 if you have the `fork' function. */
#undef HAVE_FORK
/* Define to 1 if you have the `freelocale' function. */
#undef HAVE_FREELOCALE
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#undef HAVE_FSEEKO
@ -95,6 +98,9 @@
/* Define to 1 if you have a working `mmap' system call. */
#undef HAVE_MMAP
/* Define to 1 if you have the `newlocale' function. */
#undef HAVE_NEWLOCALE
/* Define to 1 if you have the `pread' function. */
#undef HAVE_PREAD
@ -182,6 +188,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `uselocale' function. */
#undef HAVE_USELOCALE
/* Define to 1 if you have the `utime' function. */
#undef HAVE_UTIME

View File

@ -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.20.
#
# Report bugs to <christos@astron.com>.
#
@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='file'
PACKAGE_TARNAME='file'
PACKAGE_VERSION='5.19'
PACKAGE_STRING='file 5.19'
PACKAGE_VERSION='5.20'
PACKAGE_STRING='file 5.20'
PACKAGE_BUGREPORT='christos@astron.com'
PACKAGE_URL=''
@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then
# 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.20 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1401,7 +1401,7 @@ fi
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.20:";;
esac
cat <<\_ACEOF
@ -1514,7 +1514,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
file configure 5.19
file configure 5.20
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -2170,7 +2170,7 @@ cat >config.log <<_ACEOF
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.20, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -3036,7 +3036,7 @@ fi
# Define the identity of the package.
PACKAGE='file'
VERSION='5.19'
VERSION='5.20'
cat >>confdefs.h <<_ACEOF
@ -14221,7 +14221,7 @@ fi
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
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"
@ -15032,7 +15032,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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.20, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -15098,7 +15098,7 @@ _ACEOF
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.20
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT([file],[5.19],[christos@astron.com])
AC_INIT([file],[5.20],[christos@astron.com])
AM_INIT_AUTOMAKE([subdir-objects foreign])
AM_MAINTAINER_MODE(disable)
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
@ -139,7 +139,7 @@ else
fi])
dnl Checks for functions
AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof)
AC_CHECK_FUNCS(strerror strndup strtoul mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale)
dnl Provide implementation of some required functions if necessary
AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r pread strcasestr fmtcheck)

View File

@ -1,4 +1,4 @@
.\" $NetBSD: file.1,v 1.14 2014/06/13 02:08:06 christos Exp $
.\" $NetBSD: file.1,v 1.15 2014/10/10 20:15:01 christos Exp $
.\"
.\" $File: file.man,v 1.106 2014/03/07 23:11:51 christos Exp $
.Dd January 30, 2014
@ -26,7 +26,7 @@
.Nm
.Op Fl Fl help
.Sh DESCRIPTION
This manual page documents version 5.19 of the
This manual page documents version 5.20 of the
.Nm
command.
.Pp

View File

@ -1,6 +1,6 @@
.\" $NetBSD: libmagic.3,v 1.12 2014/06/13 02:08:06 christos Exp $
.\" $NetBSD: libmagic.3,v 1.13 2014/10/10 20:15:01 christos Exp $
.\"
.\" $File: libmagic.man,v 1.28 2014/03/02 14:47:16 christos Exp $
.\" $File: libmagic.man,v 1.29 2014/08/04 06:19:44 christos Exp $
.\"
.\" Copyright (c) Christos Zoulas 2003.
.\" All Rights Reserved.
@ -27,7 +27,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd January 6, 2012
.Dd August 4, 2014
.Dt LIBMAGIC 3
.Os
.Sh NAME
@ -73,6 +73,8 @@
.Ft int
.Fn magic_load "magic_t cookie" "const char *filename"
.Ft int
.Fn magic_load_buffers "magic_t cookie" "void **buffers" "size_t *sizes" "size_t nbuffers"
.Ft int
.Fn magic_version "void"
.Sh DESCRIPTION
These functions
@ -256,6 +258,19 @@ adds
to the database filename as appropriate.
.Pp
The
.Fn magic_load_buffers
function takes an array of size
.Fa nbuffers
of
.Fa buffers
with a respective size for each in the array of
.Fa sizes
loaded with the contents of the magic databases from the filesystem.
This function can be used in environment where the magic library does
not have direct access to the filesystem, but can access the magic
database via shared memory or other IPC means.
.Pp
The
.Fn magic_version
command returns the version number of this library which is compiled into
the shared library using the constant

View File

@ -1,4 +1,4 @@
.\" $NetBSD: magic.5,v 1.12 2014/06/13 02:08:06 christos Exp $
.\" $NetBSD: magic.5,v 1.13 2014/10/10 20:15:01 christos Exp $
.\"
.\" $File: magic.man,v 1.84 2014/06/03 19:01:34 christos Exp $
.Dd June 3, 2014
@ -12,7 +12,7 @@
This manual page documents the format of the magic file as
used by the
.Xr file 1
command, version 5.19.
command, version 5.20.
The
.Xr file 1
command identifies the type of a file using,

View File

@ -1,5 +1,5 @@
#
# $File: Makefile.am,v 1.98 2014/06/03 18:22:34 christos Exp $
# $File: Makefile.am,v 1.99 2014/08/04 06:26:16 christos Exp $
#
MAGIC_FRAGMENT_BASE = magdir
MAGIC_DIR = $(top_srcdir)/magic
@ -142,6 +142,7 @@ $(MAGIC_FRAGMENT_DIR)/matroska \
$(MAGIC_FRAGMENT_DIR)/mcrypt \
$(MAGIC_FRAGMENT_DIR)/mercurial \
$(MAGIC_FRAGMENT_DIR)/metastore \
$(MAGIC_FRAGMENT_DIR)/meteorological \
$(MAGIC_FRAGMENT_DIR)/mime \
$(MAGIC_FRAGMENT_DIR)/mips \
$(MAGIC_FRAGMENT_DIR)/mirage \
@ -198,7 +199,6 @@ $(MAGIC_FRAGMENT_DIR)/pyramid \
$(MAGIC_FRAGMENT_DIR)/python \
$(MAGIC_FRAGMENT_DIR)/revision \
$(MAGIC_FRAGMENT_DIR)/riff \
$(MAGIC_FRAGMENT_DIR)/rinex \
$(MAGIC_FRAGMENT_DIR)/rpm \
$(MAGIC_FRAGMENT_DIR)/rtf \
$(MAGIC_FRAGMENT_DIR)/ruby \

View File

@ -263,7 +263,7 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
#
# $File: Makefile.am,v 1.98 2014/06/03 18:22:34 christos Exp $
# $File: Makefile.am,v 1.99 2014/08/04 06:26:16 christos Exp $
#
MAGIC_FRAGMENT_BASE = magdir
MAGIC_DIR = $(top_srcdir)/magic
@ -404,6 +404,7 @@ $(MAGIC_FRAGMENT_DIR)/matroska \
$(MAGIC_FRAGMENT_DIR)/mcrypt \
$(MAGIC_FRAGMENT_DIR)/mercurial \
$(MAGIC_FRAGMENT_DIR)/metastore \
$(MAGIC_FRAGMENT_DIR)/meteorological \
$(MAGIC_FRAGMENT_DIR)/mime \
$(MAGIC_FRAGMENT_DIR)/mips \
$(MAGIC_FRAGMENT_DIR)/mirage \
@ -460,7 +461,6 @@ $(MAGIC_FRAGMENT_DIR)/pyramid \
$(MAGIC_FRAGMENT_DIR)/python \
$(MAGIC_FRAGMENT_DIR)/revision \
$(MAGIC_FRAGMENT_DIR)/riff \
$(MAGIC_FRAGMENT_DIR)/rinex \
$(MAGIC_FRAGMENT_DIR)/rpm \
$(MAGIC_FRAGMENT_DIR)/rtf \
$(MAGIC_FRAGMENT_DIR)/ruby \

View File

@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
# $File: archive,v 1.87 2014/06/03 19:15:58 christos Exp $
# $File: archive,v 1.88 2014/08/16 10:42:17 christos Exp $
# archive: file(1) magic for archive formats (see also "msdos" for self-
# extracting compressed archives)
#
@ -954,34 +954,3 @@
>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

View File

@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
# $File: elf,v 1.67 2014/06/12 13:52:48 christos Exp $
# $File: elf,v 1.68 2014/09/19 19:05:57 christos Exp $
# elf: file(1) magic for ELF executables
#
# We have to check the byte order flag to see what byte order all the
@ -257,7 +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 243 UCB RISC-V,
>18 leshort 0x1057 AVR (unofficial),
>18 leshort 0x1059 MSP430 (unofficial),
>18 leshort 0x1223 Adapteva Epiphany (unofficial),

View File

@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
# $File: filesystems,v 1.95 2014/06/03 19:17:27 christos Exp $
# $File: filesystems,v 1.103 2014/09/11 15:09:34 christos Exp $
# filesystems: file(1) magic for different filesystems
#
0 name partid
@ -254,7 +254,7 @@
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.s-2) uleshort 0xAA55 DOS/MBR boot sector
@ -265,8 +265,8 @@
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
!:strength +70
>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
@ -1353,18 +1353,18 @@
# 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
# 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&0x001f 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
>>>>>>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 +1373,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)
@ -1399,24 +1400,29 @@
>>>>>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
# 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)
# FAT<32 bit specific
>>>>>>>82 string !FAT32
>>>>>>>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 !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 =0x29
>>>>>>>>38 ubyte&0xFE =0x28
>>>>>>>>>39 ulelong x \b, serial number 0x%x
>>>>>>>>38 ubyte =0x29
>>>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
>>>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
>>>>>>>>>43 string =NO\ NAME \b, unlabeled
@ -1426,11 +1432,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,9 +1473,12 @@
>>>>>>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
# 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 uleshort <6 \b, Backup boot sector %u
>>>>>>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
@ -1881,11 +1914,19 @@
#>>>>>0x162 use 2xDOS-filename
# CDROM Filesystems
# https://en.wikipedia.org/wiki/ISO_9660
# Modified for UDF by gerardo.cacciari@gmail.com
32769 string CD001 #
!:mime application/x-iso9660-image
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)
# does not work
#!:strength +33
>38913 string !NSR0 ISO 9660 CD-ROM filesystem data
!:mime application/x-iso9660-image
>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)
@ -2131,7 +2172,6 @@
# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari@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
@ -2266,14 +2306,31 @@
# 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@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

View File

@ -1,44 +0,0 @@
#------------------------------------------------------------------------------
# $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

View File

@ -81,9 +81,9 @@ build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = file$(EXEEXT)
subdir = src
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am fmtcheck.c \
pread.c strlcpy.c vasprintf.c strcasestr.c getline.c \
asctime_r.c getopt_long.c ctime_r.c strlcat.c asprintf.c \
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am asctime_r.c \
pread.c ctime_r.c getline.c strlcat.c vasprintf.c strcasestr.c \
asprintf.c getopt_long.c strlcpy.c fmtcheck.c \
$(top_srcdir)/depcomp $(include_HEADERS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \

View File

@ -1,4 +1,4 @@
/* $NetBSD: apprentice.c,v 1.11 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: apprentice.c,v 1.12 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Ian F. Darwin 1986-1995.
* Software written by Ian F. Darwin and others;
@ -34,9 +34,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: apprentice.c,v 1.211 2014/06/03 19:01:34 christos Exp $")
FILE_RCSID("@(#)$File: apprentice.c,v 1.216 2014/09/24 19:49:07 christos Exp $")
#else
__RCSID("$NetBSD: apprentice.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: apprentice.c,v 1.12 2014/10/10 20:15:02 christos Exp $");
#endif
#endif /* lint */
@ -91,6 +91,10 @@ __RCSID("$NetBSD: apprentice.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
#define ALLOC_CHUNK (size_t)10
#define ALLOC_INCR (size_t)200
#define MAP_TYPE_MMAP 0
#define MAP_TYPE_MALLOC 1
#define MAP_TYPE_USER 2
struct magic_entry {
struct magic *mp;
uint32_t cont_count;
@ -106,6 +110,7 @@ struct magic_entry_set {
struct magic_map {
void *p;
size_t len;
int type;
struct magic *magic[MAGIC_SETS];
uint32_t nmagic[MAGIC_SETS];
};
@ -136,7 +141,10 @@ 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 *);
@ -421,9 +429,11 @@ add_mlist(struct mlist *mlp, struct magic_map *map, size_t idx)
private int
apprentice_1(struct magic_set *ms, const char *fn, int action)
{
struct mlist *ml;
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",
@ -459,15 +469,15 @@ apprentice_1(struct magic_set *ms, const char *fn, int action)
if (action == FILE_LIST) {
for (i = 0; i < MAGIC_SETS; i++) {
printf("Set %zu:\nBinary patterns:\n", 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;
#endif /* COMPILE_ONLY */
return 0;
}
protected void
@ -522,9 +532,9 @@ apprentice_unmap(struct magic_map *map)
{
if (map == NULL)
return;
if (map->p != NULL) {
if (map->p != NULL && map->type != MAP_TYPE_USER) {
#ifdef QUICK
if (map->len)
if (map->type == MAP_TYPE_MMAP)
(void)munmap(map->p, map->len);
else
#endif
@ -566,6 +576,56 @@ mlist_free(struct mlist *mlist)
free(ml);
}
#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;
struct mlist *ml;
struct magic_map *map;
if (nbufs == 0)
return -1;
if (ms->mlist[0] != NULL)
file_reset(ms);
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]));
if (i != 0) {
--i;
do
mlist_free(ms->mlist[i]);
while (i != 0);
}
return -1;
}
}
for (i = 0; i < nbufs; i++) {
map = apprentice_buf(ms, bufs[i], sizes[i]);
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));
apprentice_unmap(map);
return -1;
}
}
}
return 0;
}
#endif
/* const char *fn: list of magic files and directories */
protected int
file_apprentice(struct magic_set *ms, const char *fn, int action)
@ -2069,9 +2129,15 @@ out:
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, int nt)
off_t off, size_t len, const char *name, const char *extra, int nt)
{
size_t i;
const char *l = line;
@ -2092,9 +2158,7 @@ parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line,
}
EATAB;
for (i = 0; *l && ((isascii((unsigned char)*l) &&
isalnum((unsigned char)*l)) || strchr("-+/.", *l)) &&
i < len; buf[i++] = *l++)
for (i = 0; *l && i < len && goodchar(*l, extra); buf[i++] = *l++)
continue;
if (i == len && *l) {
@ -2104,14 +2168,18 @@ parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line,
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;
else
return -1;
file_magerror(ms, "Bad magic entry '%s'", line);
return -1;
}
/*
@ -2124,7 +2192,7 @@ 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, offsetof(struct magic, apple),
sizeof(m->apple), "APPLE", 0);
sizeof(m->apple), "APPLE", "!+-./", 0);
}
/*
@ -2137,7 +2205,7 @@ 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, offsetof(struct magic, mimetype),
sizeof(m->mimetype), "MIME", 1);
sizeof(m->mimetype), "MIME", "+-/.", 1);
}
private int
@ -2697,6 +2765,28 @@ eatsize(const char **p)
*p = l;
}
/*
* handle a buffer containging 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.
*/
@ -2706,12 +2796,8 @@ apprentice_map(struct magic_set *ms, const char *fn)
{
int fd;
struct stat st;
uint32_t *ptr;
uint32_t version, entries, nentries;
int needsbyteswap;
char *dbname = NULL;
struct magic_map *map;
size_t i;
fd = -1;
if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
@ -2743,6 +2829,7 @@ apprentice_map(struct magic_set *ms, const char *fn)
file_error(ms, errno, "cannot map `%s'", dbname);
goto error;
}
map->type = MAP_TYPE_MMAP;
#else
if ((map->p = CAST(void *, malloc(map->len))) == NULL) {
file_oomem(ms, map->len);
@ -2752,16 +2839,39 @@ apprentice_map(struct magic_set *ms, const char *fn)
file_badread(ms);
goto error;
}
map->len = 0;
map->type = MAP_TYPE_MALLOC;
#define RET 1
#endif
(void)close(fd);
fd = -1;
if (check_buffer(ms, map, dbname) != 0)
goto error;
free(dbname);
return map;
error:
if (fd != -1)
(void)close(fd);
apprentice_unmap(map);
free(dbname);
return NULL;
}
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);
goto error;
return -1;
}
needsbyteswap = 1;
} else
@ -2774,15 +2884,14 @@ apprentice_map(struct magic_set *ms, const char *fn)
file_error(ms, 0, "File %s supports only version %d magic "
"files. `%s' is version %d", VERSION,
VERSIONNO, dbname, version);
goto error;
return -1;
}
entries = (uint32_t)(st.st_size / sizeof(struct magic));
if ((off_t)(entries * sizeof(struct magic)) != st.st_size) {
file_error(ms, 0, "Size of `%s' %" INT64_T_FORMAT "u is not "
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, (unsigned long long)st.st_size,
sizeof(struct magic));
goto error;
dbname, map->len, sizeof(struct magic));
return -1;
}
map->magic[0] = CAST(struct magic *, map->p) + 1;
nentries = 0;
@ -2798,20 +2907,12 @@ apprentice_map(struct magic_set *ms, const char *fn)
if (entries != nentries + 1) {
file_error(ms, 0, "Inconsistent entries in `%s' %u != %u",
dbname, entries, nentries + 1);
goto error;
return -1;
}
if (needsbyteswap)
for (i = 0; i < MAGIC_SETS; i++)
byteswap(map->magic[i], map->nmagic[i]);
free(dbname);
return map;
error:
if (fd != -1)
(void)close(fd);
apprentice_unmap(map);
free(dbname);
return NULL;
return 0;
}
/*

View File

@ -1,4 +1,4 @@
/* $NetBSD: cdf.c,v 1.9 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: cdf.c,v 1.10 2014/10/10 20:15:02 christos Exp $ */
/*-
* Copyright (c) 2008 Christos Zoulas
* All rights reserved.
@ -37,9 +37,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: cdf.c,v 1.63 2014/06/09 13:04:37 christos Exp $")
FILE_RCSID("@(#)$File: cdf.c,v 1.67 2014/09/24 19:49:07 christos Exp $")
#else
__RCSID("$NetBSD: cdf.c,v 1.9 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: cdf.c,v 1.10 2014/10/10 20:15:02 christos Exp $");
#endif
#endif
@ -78,6 +78,8 @@ static union {
#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) (sizeof(x) == 2 ? CDF_TOLE2(x) : (sizeof(x) == 4 ? \
CDF_TOLE4(x) : CDF_TOLE8(x)))
#define CDF_GETUINT32(x, y) cdf_getuint32(x, y)
@ -829,6 +831,10 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h,
q = (const uint8_t *)(const void *)
((const char *)(const void *)p + ofs
- 2 * sizeof(uint32_t));
if (q < p) {
DPRINTF(("Wrapped around %p < %p\n", q, p));
goto out;
}
if (q > e) {
DPRINTF(("Ran of the end %p > %p\n", q, e));
goto out;
@ -990,6 +996,54 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
}
#define extract_catalog_field(f, l) \
memcpy(&ce[i].f, b + (l), sizeof(ce[i].f)); \
ce[i].f = CDF_TOLE(ce[i].f)
int
cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst,
cdf_catalog_t **cat)
{
size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
const char *b = CAST(const char *, sst->sst_tab);
const char *eb = b + ss * sst->sst_len;
size_t nr, i, k;
cdf_catalog_entry_t *ce;
uint16_t reclen;
const uint16_t *np;
for (nr = 0; b < eb; nr++) {
memcpy(&reclen, b, sizeof(reclen));
reclen = CDF_TOLE2(reclen);
if (reclen == 0)
break;
b += reclen;
}
*cat = CAST(cdf_catalog_t *,
malloc(sizeof(cdf_catalog_t) + nr * sizeof(*ce)));
(*cat)->cat_num = nr;
ce = (*cat)->cat_e;
b = CAST(const char *, sst->sst_tab);
for (i = 0; i < nr; i++) {
extract_catalog_field(ce_namlen, 0);
extract_catalog_field(ce_num, 2);
extract_catalog_field(ce_timestamp, 6);
reclen = ce[i].ce_namlen;
ce[i].ce_namlen =
sizeof(ce[i].ce_name) / sizeof(ce[i].ce_name[0]) - 1;
if (ce[i].ce_namlen > reclen - 14)
ce[i].ce_namlen = reclen - 14;
np = CAST(const uint16_t *, (b + 16));
for (k = 0; k < ce[i].ce_namlen; k++) {
ce[i].ce_name[k] = np[k];
CDF_TOLE2(ce[i].ce_name[k]);
}
ce[i].ce_name[ce[i].ce_namlen] = 0;
b += reclen;
}
return 0;
}
int
cdf_print_classid(char *buf, size_t buflen, const cdf_classid_t *id)
@ -1073,6 +1127,15 @@ cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts)
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
@ -1098,7 +1161,7 @@ cdf_dump_header(const cdf_header_t *h)
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[%.3zu] = %d\n",
(void)fprintf(stderr, "%35.35s[%.3" SIZE_T_FORMAT "u] = %d\n",
"master_sat", i, h->h_master_sat[i]);
}
}
@ -1293,7 +1356,7 @@ cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst)
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);
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);
@ -1302,6 +1365,27 @@ cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst)
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
@ -1314,6 +1398,7 @@ main(int argc, char *argv[])
cdf_stream_t sst, scn;
cdf_dir_t dir;
cdf_info_t info;
const cdf_directory_t *root;
if (argc < 2) {
(void)fprintf(stderr, "Usage: %s <filename>\n", getprogname());
@ -1347,7 +1432,8 @@ main(int argc, char *argv[])
if (cdf_read_dir(&info, &h, &sat, &dir) == -1)
err(1, "Cannot read dir");
if (cdf_read_short_stream(&info, &h, &sat, &dir, &sst) == -1)
if (cdf_read_short_stream(&info, &h, &sat, &dir, &sst, &root)
== -1)
err(1, "Cannot read short stream");
#ifdef CDF_DEBUG
cdf_dump_stream(&h, &sst);
@ -1360,9 +1446,17 @@ main(int argc, char *argv[])
if (cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
&scn) == -1)
err(1, "Cannot read summary info");
warn("Cannot read summary info");
#ifdef CDF_DEBUG
cdf_dump_summary_info(&h, &scn);
else
cdf_dump_summary_info(&h, &scn);
#endif
if (cdf_read_catalog(&info, &h, &sat, &ssat, &sst, &dir,
&scn) == -1)
warn("Cannot read catalog");
#ifdef CDF_DEBUG
else
cdf_dump_catalog(&h, &scn);
#endif
(void)close(info.i_fd);

View File

@ -1,4 +1,4 @@
/* $NetBSD: encoding.c,v 1.2 2014/09/11 13:30:04 christos Exp $ */
/* $NetBSD: encoding.c,v 1.3 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Ian F. Darwin 1986-1995.
* Software written by Ian F. Darwin and others;
@ -37,9 +37,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: encoding.c,v 1.9 2013/11/19 20:45:50 christos Exp $")
FILE_RCSID("@(#)$File: encoding.c,v 1.10 2014/09/11 12:08:52 christos Exp $")
#else
__RCSID("$NetBSD: encoding.c,v 1.2 2014/09/11 13:30:04 christos Exp $");
__RCSID("$NetBSD: encoding.c,v 1.3 2014/10/10 20:15:02 christos Exp $");
#endif
#endif /* lint */

View File

@ -1,4 +1,4 @@
/* $NetBSD: file.c,v 1.4 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: file.c,v 1.5 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Ian F. Darwin 1986-1995.
* Software written by Ian F. Darwin and others;
@ -34,9 +34,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: file.c,v 1.153 2014/02/11 15:41:04 christos Exp $")
FILE_RCSID("@(#)$File: file.c,v 1.154 2014/09/10 18:41:51 christos Exp $")
#else
__RCSID("$NetBSD: file.c,v 1.4 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: file.c,v 1.5 2014/10/10 20:15:02 christos Exp $");
#endif
#endif /* lint */
@ -59,9 +59,6 @@ __RCSID("$NetBSD: file.c,v 1.4 2014/06/13 02:08:06 christos Exp $");
#ifdef HAVE_UNISTD_H
#include <unistd.h> /* for read() */
#endif
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
#ifdef HAVE_WCHAR_H
#include <wchar.h>
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: file.h,v 1.11 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: file.h,v 1.12 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Ian F. Darwin 1986-1995.
* Software written by Ian F. Darwin and others;
@ -28,7 +28,7 @@
*/
/*
* file.h - definitions for file(1) program
* @(#)$File: file.h,v 1.152 2014/06/03 19:01:34 christos Exp $
* @(#)$File: file.h,v 1.154 2014/09/10 18:41:51 christos Exp $
*/
#ifndef __file_h__
@ -443,6 +443,8 @@ 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,
size_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);
@ -470,9 +472,17 @@ 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
typedef struct {
const char *pat;
char *old_lc_ctype;
#if defined(HAVE_NEWLOCALE) && defined(HAVE_USELOCALE) && defined(HAVE_FREELOCALE)
#define USE_C_LOCALE
locale_t old_lc_ctype;
locale_t c_lc_ctype;
#endif
int rc;
regex_t rx;
} file_regex_t;

View File

@ -1,4 +1,4 @@
/* $NetBSD: funcs.c,v 1.8 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: funcs.c,v 1.9 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Christos Zoulas 2003.
* All Rights Reserved.
@ -29,9 +29,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: funcs.c,v 1.72 2014/05/14 23:15:42 christos Exp $")
FILE_RCSID("@(#)$File: funcs.c,v 1.73 2014/09/10 18:41:51 christos Exp $")
#else
__RCSID("$NetBSD: funcs.c,v 1.8 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: funcs.c,v 1.9 2014/10/10 20:15:02 christos Exp $");
#endif
#endif /* lint */
@ -50,9 +50,6 @@ __RCSID("$NetBSD: funcs.c,v 1.8 2014/06/13 02:08:06 christos Exp $");
#if defined(HAVE_LIMITS_H)
#include <limits.h>
#endif
#if defined(HAVE_LOCALE_H)
#include <locale.h>
#endif
#ifndef SIZE_MAX
#define SIZE_MAX ((size_t)~0)
@ -461,13 +458,14 @@ out:
protected int
file_regcomp(file_regex_t *rx, const char *pat, int flags)
{
rx->old_lc_ctype = setlocale(LC_CTYPE, NULL);
assert(rx->old_lc_ctype != NULL);
rx->old_lc_ctype = strdup(rx->old_lc_ctype);
#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);
#endif
rx->pat = pat;
(void)setlocale(LC_CTYPE, "C");
return rx->rc = regcomp(&rx->rx, pat, flags);
}
@ -484,8 +482,10 @@ file_regfree(file_regex_t *rx)
{
if (rx->rc == 0)
regfree(&rx->rx);
(void)setlocale(LC_CTYPE, rx->old_lc_ctype);
free(rx->old_lc_ctype);
#ifdef USE_C_LOCALE
(void)uselocale(rx->old_lc_ctype);
freelocale(rx->c_lc_ctype);
#endif
}
protected void

View File

@ -1,4 +1,4 @@
/* $NetBSD: magic.c,v 1.8 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: magic.c,v 1.9 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Christos Zoulas 2003.
* All Rights Reserved.
@ -35,9 +35,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: magic.c,v 1.84 2014/05/14 23:15:42 christos Exp $")
FILE_RCSID("@(#)$File: magic.c,v 1.85 2014/08/04 06:19:44 christos Exp $")
#else
__RCSID("$NetBSD: magic.c,v 1.8 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: magic.c,v 1.9 2014/10/10 20:15:02 christos Exp $");
#endif
#endif /* lint */
@ -262,6 +262,20 @@ magic_load(struct magic_set *ms, const char *magicfile)
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)
{

View File

@ -1,4 +1,4 @@
/* $NetBSD: readcdf.c,v 1.10 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: readcdf.c,v 1.11 2014/10/10 20:15:02 christos Exp $ */
/*-
* Copyright (c) 2008 Christos Zoulas
* All rights reserved.
@ -28,9 +28,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: readcdf.c,v 1.44 2014/05/14 23:22:48 christos Exp $")
FILE_RCSID("@(#)$File: readcdf.c,v 1.48 2014/09/10 18:41:51 christos Exp $")
#else
__RCSID("$NetBSD: readcdf.c,v 1.10 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: readcdf.c,v 1.11 2014/10/10 20:15:02 christos Exp $");
#endif
#endif
@ -40,9 +40,6 @@ __RCSID("$NetBSD: readcdf.c,v 1.10 2014/06/13 02:08:06 christos Exp $");
#include <string.h>
#include <time.h>
#include <ctype.h>
#if defined(HAVE_LOCALE_H)
#include <locale.h>
#endif
#include "cdf.h"
#include "magic.h"
@ -116,20 +113,23 @@ cdf_app_to_mime(const char *vbuf, const struct nv *nv)
{
size_t i;
const char *rv = NULL;
char *old_lc_ctype;
#ifdef USE_C_LOCALE
locale_t old_lc_ctype, c_lc_ctype;
old_lc_ctype = setlocale(LC_CTYPE, NULL);
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);
old_lc_ctype = strdup(old_lc_ctype);
assert(old_lc_ctype != NULL);
(void)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;
}
(void)setlocale(LC_CTYPE, old_lc_ctype);
free(old_lc_ctype);
#ifdef USE_C_LOCALE
(void)uselocale(old_lc_ctype);
freelocale(c_lc_ctype);
#endif
return rv;
}
@ -249,6 +249,37 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info,
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)
@ -294,11 +325,12 @@ cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h,
if (root_storage) {
str = cdf_clsid_to_mime(root_storage->d_storage_uuid,
clsid2desc);
if (str)
if (str) {
if (file_printf(ms, ", %s", str) == -1)
return -2;
}
}
}
m = cdf_file_property_info(ms, info, count, root_storage);
free(info);
@ -413,8 +445,24 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf,
if ((i = cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
&scn)) == -1) {
if (errno == ESRCH) {
corrupt = expn;
expn = "No summary info";
if ((i = cdf_read_catalog(&info, &h, &sat, &ssat, &sst,
&dir, &scn)) == -1) {
corrupt = expn;
if ((i = cdf_read_encrypted_package(&info, &h,
&sat, &ssat, &sst, &dir, &scn)) == -1)
expn = "No summary info";
else {
expn = "Encrypted";
i = -1;
}
goto out4;
}
#ifdef CDF_DEBUG
cdf_dump_catalog(&h, &scn);
#endif
if ((i = cdf_file_catalog(ms, &h, &scn))
< 0)
expn = "Can't expand catalog";
} else {
expn = "Cannot read summary info";
}
@ -473,7 +521,8 @@ out0:
if (file_printf(ms, ", %s%s", corrupt, expn) == -1)
return -1;
} else {
if (file_printf(ms, "application/CDFV2-corrupt") == -1)
if (file_printf(ms, "application/CDFV2-%s",
*corrupt ? "corrupt" : "encrypted") == -1)
return -1;
}
i = 1;

View File

@ -1,4 +1,4 @@
/* $NetBSD: softmagic.c,v 1.11 2014/06/13 02:08:06 christos Exp $ */
/* $NetBSD: softmagic.c,v 1.12 2014/10/10 20:15:02 christos Exp $ */
/*
* Copyright (c) Ian F. Darwin 1986-1995.
* Software written by Ian F. Darwin and others;
@ -34,9 +34,9 @@
#ifndef lint
#if 0
FILE_RCSID("@(#)$File: softmagic.c,v 1.191 2014/06/04 17:36:34 christos Exp $")
FILE_RCSID("@(#)$File: softmagic.c,v 1.195 2014/09/24 19:49:07 christos Exp $")
#else
__RCSID("$NetBSD: softmagic.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
__RCSID("$NetBSD: softmagic.c,v 1.12 2014/10/10 20:15:02 christos Exp $");
#endif
#endif /* lint */
@ -46,10 +46,6 @@ __RCSID("$NetBSD: softmagic.c,v 1.11 2014/06/13 02:08:06 christos Exp $");
#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 *,
@ -83,6 +79,7 @@ file_softmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes,
{
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,
@ -103,8 +100,8 @@ file_fmtcheck(struct magic_set *ms, const struct magic *m, const char *def,
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);
"%s, %" SIZE_T_FORMAT "u: format `%s' does not match"
" with `%s'", file, line, m->desc, def);
return ptr;
}
#else
@ -240,9 +237,9 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
if (file_check_mem(ms, ++cont_level) == -1)
return -1;
while (++magindex < nmagic &&
magic[magindex].cont_level != 0) {
m = &magic[magindex];
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)
@ -1065,7 +1062,7 @@ mconvert(struct magic_set *ms, struct magic *m, int flip)
private void
mdebug(uint32_t offset, const char *str, size_t len)
{
(void) fprintf(stderr, "mget/%zu @%d: ", len, offset);
(void) fprintf(stderr, "mget/%" SIZE_T_FORMAT "u @%d: ", len, offset);
file_showstr(stderr, str, len);
(void) fputc('\n', stderr);
(void) fputc('\n', stderr);
@ -1215,8 +1212,9 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
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);
fprintf(stderr, "mget(type=%d, flag=%x, offset=%u, o=%"
SIZE_T_FORMAT "u, " "nbytes=%" SIZE_T_FORMAT "u)\n",
m->type, m->flag, offset, o, nbytes);
mdebug(offset, (char *)(void *)p, sizeof(union VALUETYPE));
#ifndef COMPILE_ONLY
file_mdump(m);
@ -1949,6 +1947,7 @@ magiccheck(struct magic_set *ms, struct magic *m)
case FILE_REGEX: {
int rc;
file_regex_t rx;
const char *search;
if (ms->search.s == NULL)
return 0;
@ -1965,19 +1964,31 @@ magiccheck(struct magic_set *ms, struct magic *m)
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';
char *copy;
if (slen != 0) {
copy = malloc(slen);
if (copy == NULL) {
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 = ms->search.s;
copy = NULL;
}
#else
search = ms->search.s;
pmatch[0].rm_so = 0;
pmatch[0].rm_eo = slen;
#endif
rc = file_regexec(&rx, (const char *)ms->search.s,
rc = file_regexec(&rx, (const char *)search,
1, pmatch, REG_STARTEND);
#if REG_STARTEND == 0
((char *)(intptr_t)ms->search.s)[l] = c;
free(copy);
#endif
switch (rc) {
case 0: