mport 4.26
This commit is contained in:
parent
495a4a6c9f
commit
85e225d6b9
1
dist/file/AUTHORS
vendored
Normal file
1
dist/file/AUTHORS
vendored
Normal file
@ -0,0 +1 @@
|
||||
See COPYING.
|
29
dist/file/COPYING
vendored
Normal file
29
dist/file/COPYING
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
$File: COPYING,v 1.1 2008/02/05 19:08:11 christos Exp $
|
||||
Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
|
||||
Software written by Ian F. Darwin and others;
|
||||
maintained 1994- Christos Zoulas.
|
||||
|
||||
This software is not subject to any export provision of the United States
|
||||
Department of Commerce, and may be exported to any country or planet.
|
||||
|
||||
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.
|
330
dist/file/ChangeLog
vendored
330
dist/file/ChangeLog
vendored
@ -1,35 +1,247 @@
|
||||
2007-05-24 10:00 Christos Zoulas <christos@zoulas.com>
|
||||
2008-08-30 12:54 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Don't eat trailing \n in magic enties.
|
||||
|
||||
* Cast defines to allow compilation using a c++ compiler.
|
||||
|
||||
2008-07-26 00:59 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* Add MIME types for special files.
|
||||
|
||||
* Use access to give more accurate information for files that
|
||||
can't be opened.
|
||||
|
||||
* Add a TODO list.
|
||||
|
||||
2008-07-02 11:15 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* add !:strength op to adjust magic strength (experimental)
|
||||
|
||||
2008-06-16 21:41 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* Fix automake error in configure.ac.
|
||||
|
||||
* Add MIME type for Psion Sketch files.
|
||||
|
||||
2008-06-05 08:59 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Don't print warnings about bad namesize in stripped
|
||||
binaries with PT_NOTE is still there, and the actual
|
||||
note is gone (Jakub Jelinek)
|
||||
|
||||
2008-05-28 15:12 Robert Byrnes <byrnes@wildpumpkin.net>
|
||||
|
||||
* magic/Magdir/elf:
|
||||
Note invalid byte order for little-endian SPARC32PLUS.
|
||||
Add SPARC V9 vendor extensions and memory model.
|
||||
|
||||
* src/elfclass.h:
|
||||
Pass target machine to doshn (for Solaris hardware capabilities).
|
||||
|
||||
* src/readelf.c (doshn):
|
||||
Add support for Solaris hardware/software capabilities.
|
||||
|
||||
* src/readelf.h:
|
||||
Ditto.
|
||||
|
||||
* src/vasprintf.c (dispatch):
|
||||
Add support for ll modifier.
|
||||
|
||||
2008-05-16 10:25 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Fix compiler warnings.
|
||||
|
||||
* remove stray printf, and fix a vprintf bug. (Martin Dorey)
|
||||
|
||||
2008-05-06 00:13 Robert Byrnes <byrnes@wildpumpkin.net>
|
||||
|
||||
* src/Makefile.am:
|
||||
Ensure that getopt_long and [v]asprintf are included in libmagic,
|
||||
as needed.
|
||||
|
||||
Remove unnecessary EXTRA_DIST.
|
||||
|
||||
* src/Makefile.in:
|
||||
Rerun automake.
|
||||
|
||||
* src/vasprintf.c (dispatch):
|
||||
Fix variable precision bug: be sure to step past '*'.
|
||||
|
||||
* src/vasprintf.c (core):
|
||||
Remove unreachable code.
|
||||
|
||||
* src/apprentice.c (set_test_type):
|
||||
Add cast to avoid compiler warning.
|
||||
|
||||
2008-04-22 23:45 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Add magic submission guidelines (Abel Cheung)
|
||||
|
||||
* split msdos and windows magic (Abel Cheung)
|
||||
|
||||
2008-04-04 11:00 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* >= <= is not supported, so fix the magic and warn about it.
|
||||
reported by: Thien-Thi Nguyen <ttn@gnuvola.org>
|
||||
|
||||
2008-03-27 16:16 Robert Byrnes <byrnes@wildpumpkin.net>
|
||||
|
||||
* src/readelf.c (donote):
|
||||
ELF core file command name/line bug fixes and enhancements:
|
||||
|
||||
Try larger offsets first to avoid false matches
|
||||
from earlier data that happen to look like strings;
|
||||
this primarily affected SunOS 5.x 32-bit Intel core files.
|
||||
|
||||
Add support for command line (instead of just short name)
|
||||
for SunOS 5.x.
|
||||
|
||||
Add information about NT_PSINFO for SunOS 5.x.
|
||||
|
||||
Only trim whitespace from end of command line.
|
||||
|
||||
2007-02-11 01:36 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* Change strength of ! from MULT to 0, as it matches almost
|
||||
anything (Reuben Thomas)
|
||||
|
||||
* Debian fixes (Reuben Thomas)
|
||||
|
||||
2007-02-11 00:17 Reuben Thomas <rrt@sc3d.org>
|
||||
|
||||
* Clarify UTF-8 BOM message (Reuben Thomas)
|
||||
|
||||
* Add HTML comment to token list in names.h
|
||||
|
||||
2007-02-04 15:50 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Debian fixes (Reuben Thomas)
|
||||
|
||||
2007-02-04 11:31 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* !:mime annotations in magic files (Reuben Thomas)
|
||||
|
||||
2007-01-29 15:35 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* zero out utime/utimes structs (Gavin Atkinson)
|
||||
|
||||
2007-01-26 13:45 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* reduce writable data from Diego "Flameeyes" Petten
|
||||
|
||||
2007-12-28 15:06 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* strtof detection
|
||||
|
||||
* remove bogus regex magic that could cause a DoS
|
||||
|
||||
* better mismatch version message
|
||||
|
||||
2007-12-27 11:35 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* bring back some fixes from OpenBSD
|
||||
|
||||
* treat ELF dynamic objects as executables
|
||||
|
||||
* fix gcc warnings
|
||||
|
||||
2007-12-01 19:55 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* make sure we have zlib.h and libz to compile the builtin
|
||||
decompress code
|
||||
|
||||
2007-10-28 20:48 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* float and double magic support (Behan Webster)
|
||||
|
||||
2007-10-28 20:48 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Convert fortran to a soft test (Reuben Thomas)
|
||||
|
||||
2007-10-23 5:25 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Add --with-filename, and --no-filename (Reuben Thomas)
|
||||
|
||||
2007-10-23 3:59 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Rest of the mime split (Reuben Thomas)
|
||||
|
||||
* Make usage message generated from the flags so that
|
||||
they stay consistent (Reuben Thomas)
|
||||
|
||||
2007-10-20 3:06 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* typo in comment, missing ifdef QUICK, remove unneeded code
|
||||
(Charles Longeau)
|
||||
|
||||
2007-10-17 3:33 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Fix problem printing -\012 in some entries
|
||||
|
||||
* Separate magic type and encoding flags (Reuben Thomas)
|
||||
|
||||
2007-10-09 3:55 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* configure fix for int64 and strndup (Reuben Thomas)
|
||||
|
||||
2007-09-26 4:45 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Add magic_descriptor() function.
|
||||
|
||||
* Fix regression in elf reading code where the core name was
|
||||
not being printed.
|
||||
|
||||
* Don't convert NUL's to spaces in {l,b}estring16 (Daniel Dawson)
|
||||
|
||||
2007-08-19 6:30 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Make mime format consistent so that it can
|
||||
be easily parsed:
|
||||
mimetype [charset=character-set] [encoding=encoding-mime-type]
|
||||
|
||||
Remove spurious extra text from some MIME type printouts
|
||||
(mostly in is_tar).
|
||||
|
||||
Fix one case where -i produced nothing at all (for a 1-byte file,
|
||||
which is now classed as application/octet-stream).
|
||||
|
||||
Remove 7/8bit classifications, since they were arbitrary
|
||||
and not based on the file data.
|
||||
|
||||
This work was done by Reuben Thomas
|
||||
|
||||
2007-05-24 10:00 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Fix another integer overflow (Colin Percival)
|
||||
|
||||
2007-03-26 13:58 Christos Zoulas <christos@zoulas.com>
|
||||
2007-03-26 13:58 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* make sure that all of struct magic_set is initialized appropriately
|
||||
(Brett)
|
||||
|
||||
2007-03-25 17:44 Christos Zoulas <christos@zoulas.com>
|
||||
2007-03-25 17:44 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* reset left bytes in the buffer (Dmitry V. Levin)
|
||||
|
||||
* compilation failed with COMPILE_ONLY and ENABLE_CONDITIONALS
|
||||
(Peter Avalos)
|
||||
|
||||
2007-03-15 10:51 Christos Zoulas <christos@zoulas.com>
|
||||
2007-03-15 10:51 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix fortran and nroff reversed tests (Dmitry V. Levin)
|
||||
|
||||
* fix exclude option (Dmitry V. Levin)
|
||||
|
||||
2007-02-08 17:30 Christos Zoulas <christos@zoulas.com>
|
||||
2007-02-08 17:30 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix integer underflow in file_printf which can lead to
|
||||
to exploitable heap overflow (Jean-Sebastien Guay-Lero)
|
||||
|
||||
2007-02-05 11:35 Christos Zoulas <christos@zoulas.com>
|
||||
2007-02-05 11:35 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* make socket/pipe reading more robust
|
||||
|
||||
2007-01-25 16:01 Christos Zoulas <christos@zoulas.com>
|
||||
2007-01-25 16:01 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Centralize all the tests in file_buffer.
|
||||
|
||||
@ -103,7 +315,7 @@
|
||||
|
||||
* make file.c compile with gcc warnings and pass lint
|
||||
|
||||
2006-12-11 16:49 Christos Zoulas <christos@zoulas.com>
|
||||
2006-12-11 16:49 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix byteswapping issue
|
||||
|
||||
@ -112,7 +324,7 @@
|
||||
|
||||
* add a few missed cases in the strength routine
|
||||
|
||||
2006-12-08 16:32 Christos Zoulas <christos@zoulas.com>
|
||||
2006-12-08 16:32 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* store and print the line number of the magic
|
||||
entry for debugging.
|
||||
@ -129,7 +341,7 @@
|
||||
* propagate the error return from match to
|
||||
file_softmagic.
|
||||
|
||||
2006-11-25 13:35 Christos Zoulas <christos@zoulas.com>
|
||||
2006-11-25 13:35 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Don't store the current offset in the magic
|
||||
struct, because it needs to be restored and
|
||||
@ -140,12 +352,12 @@
|
||||
print it as an additional separator; print
|
||||
it as the only separator.
|
||||
|
||||
2006-11-17 10:51 Christos Zoulas <christos@zoulas.com>
|
||||
2006-11-17 10:51 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Added a -0 option to print a '\0' separator
|
||||
Etienne Buira <etienne.buira@free.fr>
|
||||
|
||||
2006-10-31 15:14 Christos Zoulas <christos@zoulas.com>
|
||||
2006-10-31 15:14 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Check offset before copying (Mike Frysinger)
|
||||
|
||||
@ -161,7 +373,7 @@
|
||||
|
||||
* use calloc to initialize the ascii buffers (Jos van den Oever)
|
||||
|
||||
2006-06-08 11:11 Christos Zoulas <christos@zoulas.com>
|
||||
2006-06-08 11:11 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* QNX fixes (Mike Gorchak)
|
||||
|
||||
@ -175,7 +387,7 @@
|
||||
|
||||
* Magic format function improvent (Karl Chen)
|
||||
|
||||
2006-05-03 11:11 Christos Zoulas <christos@zoulas.com>
|
||||
2006-05-03 11:11 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Pick up some elf changes and some constant fixes from SUSE
|
||||
|
||||
@ -183,13 +395,13 @@
|
||||
|
||||
* When keep going, don't print spurious newlines (Radek Vokál)
|
||||
|
||||
2006-04-01 12:02 Christos Zoulas <christos@zoulas.com>
|
||||
2006-04-01 12:02 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Use calloc instead of malloc (Mike Frysinger)
|
||||
|
||||
* Fix configure script to detect wctypes.h (Mike Frysinger)
|
||||
|
||||
2006-03-02 16:06 Christos Zoulas <christos@zoulas.com>
|
||||
2006-03-02 16:06 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Print empty if the file is (Mike Frysinger)
|
||||
|
||||
@ -197,21 +409,21 @@
|
||||
|
||||
* Sort magic entries by strength [experimental]
|
||||
|
||||
2005-11-29 13:26 Christos Zoulas <christos@zoulas.com>
|
||||
2005-11-29 13:26 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Use iswprint() to convert the output string.
|
||||
(Bastien Nocera)
|
||||
|
||||
2005-10-31 8:54 Christos Zoulas <christos@zoulas.com>
|
||||
2005-10-31 8:54 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Fix regression where the core info was not completely processed
|
||||
(Radek Vokál)
|
||||
|
||||
2005-10-20 11:15 Christos Zoulas <christos@zoulas.com>
|
||||
2005-10-20 11:15 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Middle Endian magic (Diomidis Spinellis)
|
||||
|
||||
2005-10-17 11:15 Christos Zoulas <christos@zoulas.com>
|
||||
2005-10-17 11:15 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Open with O_BINARY for CYGWIN (Corinna Vinschen)
|
||||
|
||||
@ -219,39 +431,39 @@
|
||||
|
||||
* Look for note sections in non executables.
|
||||
|
||||
2005-09-20 13:33 Christos Zoulas <christos@zoulas.com>
|
||||
2005-09-20 13:33 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Don't print SVR4 Style in core files multiple times
|
||||
(Radek Vokál)
|
||||
|
||||
2005-08-27 04:09 Christos Zoulas <christos@zoulas.com>
|
||||
2005-08-27 04:09 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Cygwin changes Corinna Vinschen
|
||||
|
||||
2005-08-18 09:53 Christos Zoulas <christos@zoulas.com>
|
||||
2005-08-18 09:53 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Remove erroreous mention of /etc/magic in the file man page
|
||||
This is gentoo bug 101639. (Mike Frysinger)
|
||||
|
||||
* Cross-compile support and detection (Mike Frysinger)
|
||||
|
||||
2005-08-12 10:17 Christos Zoulas <christos@zoulas.com>
|
||||
2005-08-12 10:17 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Add -h flag and dereference symlinks if POSIXLY_CORRECT
|
||||
is set.
|
||||
|
||||
2005-07-29 13:57 Christos Zoulas <christos@zoulas.com>
|
||||
2005-07-29 13:57 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Avoid search and regex buffer overflows (Kelledin)
|
||||
|
||||
2005-07-12 11:48 Christos Zoulas <christos@zoulas.com>
|
||||
2005-07-12 11:48 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Provide stub implementations for {v,}nsprintf() for older
|
||||
OS's that don't have them.
|
||||
* Change mbstate_t autoconf detection macro from AC_MBSTATE_T
|
||||
to AC_TYPE_MBSTATE_T.
|
||||
|
||||
2005-06-25 11:48 Christos Zoulas <christos@zoulas.com>
|
||||
2005-06-25 11:48 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Dynamically allocate the string buffers and make the
|
||||
default read size 256K.
|
||||
@ -280,43 +492,43 @@
|
||||
With CRLF, the line length was not computed correctly, and even
|
||||
lines of length MAXLINELEN - 1 were treated as ``very long''.
|
||||
|
||||
2004-12-07 14:15 Christos Zoulas <christos@zoulas.com>
|
||||
2004-12-07 14:15 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* bzip2 needs a lot of input buffer space on some files
|
||||
before it can begin uncompressing. This makes file -z
|
||||
fail on some bz2 files. Fix it by giving it a copy of
|
||||
the file descriptor to read as much as it wants if we
|
||||
have access to it. <christos@zoulas.com>
|
||||
have access to it. <christos@astron.com>
|
||||
|
||||
2004-11-24 12:39 Christos Zoulas <christos@zoulas.com>
|
||||
2004-11-24 12:39 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Stack smash fix, and ELF more conservative reading.
|
||||
Jakub Bogusz <qboosh@pld-linux.org>
|
||||
|
||||
2004-11-20 18:50 Christos Zoulas <christos@zoulas.com>
|
||||
2004-11-20 18:50 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* New FreeBSD version parsing code:
|
||||
Jon Noack <noackjr@alumni.rice.edu>
|
||||
|
||||
* Hackish support for ucs16 strings <christos@zoulas.com>
|
||||
* Hackish support for ucs16 strings <christos@astron.com>
|
||||
|
||||
2004-11-13 03:07 Christos Zoulas <christos@zoulas.com>
|
||||
2004-11-13 03:07 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* print the file name and line number in syntax errors.
|
||||
|
||||
2004 10-12 10:50 Christos Zoulas <christos@zoulas.com>
|
||||
2004 10-12 10:50 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Fix stack overwriting on 0 length strings: Tim Waugh
|
||||
<twaugh@redhat.com> Ned Ludd <solar@gentoo.org>
|
||||
|
||||
2004-09-27 11:30 Christos Zoulas <christos@zoulas.com>
|
||||
2004-09-27 11:30 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Remove 3rd and 4th copyright clause; approved by Ian Darwin.
|
||||
|
||||
* Fix small memory leaks; caught by: Tamas Sarlos
|
||||
<stamas@csillag.ilab.sztaki.hu>
|
||||
|
||||
2004-07-24 16:33 Christos Zoulas <christos@zoulas.com>
|
||||
2004-07-24 16:33 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* magic.mime update Danny Milosavljevic <danny.milo@gmx.net>
|
||||
|
||||
@ -326,19 +538,19 @@
|
||||
|
||||
* errors reading elf magic Jakub Bogusz <qboosh@pld-linux.org>
|
||||
|
||||
2004-04-12 10:55 Christos Zoulas <christos@zoulas.com>
|
||||
2004-04-12 10:55 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* make sure that magic formats match magic types during compilation
|
||||
|
||||
* fix broken sgi magic file
|
||||
|
||||
2004-04-06 20:36 Christos Zoulas <christos@zoulas.com>
|
||||
2004-04-06 20:36 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* detect present of mbstate_t Petter Reinholdtsen <pere@hungry.com>
|
||||
|
||||
* magic fixes
|
||||
|
||||
2004-03-22 15:25 Christos Zoulas <christos@zoulas.com>
|
||||
2004-03-22 15:25 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Lots of mime fixes
|
||||
(Joerg Ostertag) <ostertag@rechengilde.de>
|
||||
@ -347,7 +559,7 @@
|
||||
(Edwin Groothuis) <edwin@mavetju.org>
|
||||
|
||||
* correct cleanup in all cases; don't just close the file.
|
||||
(Christos Zoulas) <christos@zoulas.com>
|
||||
(Christos Zoulas) <christos@astron.com>
|
||||
|
||||
* add gettext message catalogue support
|
||||
(Michael Piefel) <piefel@debian.org>
|
||||
@ -365,37 +577,37 @@
|
||||
or name and description note sizes. Reported by
|
||||
(Mikael Magnusson) <mmikael@comhem.se>
|
||||
|
||||
2004-03-09 13:55 Christos Zoulas <christos@zoulas.com>
|
||||
2004-03-09 13:55 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Fix possible memory leak on error and add missing regfree
|
||||
(Dmitry V. Levin) <ldv@altlinux.org>
|
||||
|
||||
2003-12-23 12:12 Christos Zoulas <christos@zoulas.com>
|
||||
2003-12-23 12:12 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix -k flag (Maciej W. Rozycki)
|
||||
|
||||
2003-11-18 14:10 Christos Zoulas <christos@zoulas.com>
|
||||
2003-11-18 14:10 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Try to give us much info as possible on corrupt elf files.
|
||||
(Willy Tarreau) <willy@w.ods.org>
|
||||
* Updated python bindings (Brett Funderburg)
|
||||
<brettf@deepfile.com>
|
||||
|
||||
2003-11-11 15:03 Christos Zoulas <christos@zoulas.com>
|
||||
2003-11-11 15:03 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Include file.h first, because it includes config.h
|
||||
breaks largefile test macros otherwise.
|
||||
(Paul Eggert <eggert@CS.UCLA.EDU> via
|
||||
Lars Hecking <lhecking@nmrc.ie>)
|
||||
|
||||
2003-10-14 21:39 Christos Zoulas <christos@zoulas.com>
|
||||
2003-10-14 21:39 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Python bindings (Brett Funderburg) <brettf@deepfile.com>
|
||||
* Don't lookup past the end of the buffer
|
||||
(Chad Hanson) <chanson@tcs-sec.com>
|
||||
* Add MAGIC_ERROR and api on magic_errno()
|
||||
|
||||
2003-10-08 12:40 Christos Zoulas <christos@zoulas.com>
|
||||
2003-10-08 12:40 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* handle error conditions from compile as fatal
|
||||
(Antti Kantee) <pooka@netbsd.org>
|
||||
@ -405,32 +617,32 @@
|
||||
* describe magic file handling
|
||||
(Bryan Henderson) <bryanh@giraffe-data.com>
|
||||
|
||||
2003-09-12 15:09 Christos Zoulas <christos@zoulas.com>
|
||||
2003-09-12 15:09 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* update magic files.
|
||||
* remove largefile support from file.h; it breaks things on most OS's
|
||||
|
||||
2003-08-10 10:25 Christos Zoulas <christos@zoulas.com>
|
||||
2003-08-10 10:25 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix unmapping'ing of mmaped files.
|
||||
|
||||
2003-07-10 12:03 Christos Zoulas <christos@zoulas.com>
|
||||
2003-07-10 12:03 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* don't exit with -1 on error; always exit 1 (Marty Leisner)
|
||||
* restore utimes code.
|
||||
|
||||
2003-06-10 17:03 Christos Zoulas <christos@zoulas.com>
|
||||
2003-06-10 17:03 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* make sure we don't access uninitialized memory.
|
||||
* pass lint
|
||||
* #ifdef __cplusplus in magic.h
|
||||
|
||||
2003-05-25 19:23 Christos Zoulas <christos@zoulas.com>
|
||||
2003-05-25 19:23 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* rename cvs magic file to revision to deal with
|
||||
case insensitive filesystems.
|
||||
|
||||
2003-05-23 17:03 Christos Zoulas <christos@zoulas.com>
|
||||
2003-05-23 17:03 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* documentation fixes from Michael Piefel <piefel@debian.org>
|
||||
* magic fixes (various)
|
||||
@ -440,30 +652,30 @@
|
||||
close files
|
||||
Maciej W. Rozycki <macro@ds2.pg.gda.pl
|
||||
|
||||
2003-04-21 20:12 Christos Zoulas <christos@zoulas.com>
|
||||
2003-04-21 20:12 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix zsh magic
|
||||
|
||||
2003-04-04 16:59 Christos Zoulas <christos@zoulas.com>
|
||||
2003-04-04 16:59 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* fix operand sort order in string.
|
||||
|
||||
2003-04-02 17:30 Christos Zoulas <christos@zoulas.com>
|
||||
2003-04-02 17:30 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* cleanup namespace in magic.h
|
||||
|
||||
2003-04-02 13:50 Christos Zoulas <christos@zoulas.com>
|
||||
2003-04-02 13:50 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Magic additions (Alex Ott)
|
||||
* Fix bug that broke VPATH compilation (Peter Breitenlohner)
|
||||
|
||||
2003-03-28 16:03 Christos Zoulas <christos@zoulas.com>
|
||||
2003-03-28 16:03 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* remove packed attribute from magic struct.
|
||||
* make the magic struct properly aligned.
|
||||
* bump version number of compiled files to 2.
|
||||
|
||||
2003-03-27 13:10 Christos Zoulas <christos@zoulas.com>
|
||||
2003-03-27 13:10 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* separate tar detection and run it before softmagic.
|
||||
* fix reversed symlink test.
|
||||
@ -471,7 +683,7 @@
|
||||
* make separator a string instead of a char.
|
||||
* update manual page and sort options.
|
||||
|
||||
2003-03-26 11:00 Christos Zoulas <christos@zoulas.com>
|
||||
2003-03-26 11:00 Christos Zoulas <christos@astron.com>
|
||||
|
||||
* Pass lint
|
||||
* make NULL in magic_file mean stdin
|
||||
|
234
dist/file/INSTALL
vendored
Normal file
234
dist/file/INSTALL
vendored
Normal file
@ -0,0 +1,234 @@
|
||||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
|
||||
2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is free documentation; the Free Software Foundation gives
|
||||
unlimited permission to copy, distribute and modify it.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
Briefly, the shell commands `./configure; make; make install' should
|
||||
configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the `README' file for
|
||||
instructions specific to this package.
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file `config.log' containing compiler output (useful mainly for
|
||||
debugging `configure').
|
||||
|
||||
It can also use an optional file (typically called `config.cache'
|
||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
|
||||
the results of its tests to speed up reconfiguring. Caching is
|
||||
disabled by default to prevent problems with accidental use of stale
|
||||
cache files.
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point `config.cache' contains results you don't want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The file `configure.ac' (or `configure.in') is used to create
|
||||
`configure' by a program called `autoconf'. You need `configure.ac' if
|
||||
you want to change it or regenerate `configure' using a newer version
|
||||
of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system.
|
||||
|
||||
Running `configure' might take a while. While running, it prints
|
||||
some messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that the
|
||||
`configure' script does not know about. Run `./configure --help' for
|
||||
details on some of the pertinent environment variables.
|
||||
|
||||
You can give `configure' initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here
|
||||
is an example:
|
||||
|
||||
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||
|
||||
*Note Defining Variables::, for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you can use GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
With a non-GNU `make', it is safer to compile the package for one
|
||||
architecture at a time in the source code directory. After you have
|
||||
installed the package for one architecture, use `make distclean' before
|
||||
reconfiguring for another architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' installs the package's commands under
|
||||
`/usr/local/bin', include files under `/usr/local/include', etc. You
|
||||
can specify an installation prefix other than `/usr/local' by giving
|
||||
`configure' the option `--prefix=PREFIX'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like `--bindir=DIR' to specify different values for particular
|
||||
kinds of files. Run `configure --help' for a list of the directories
|
||||
you can set and what kinds of files go in them.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' cannot figure out automatically,
|
||||
but needs to determine by the type of machine the package will run on.
|
||||
Usually, assuming the package is built to be run on the _same_
|
||||
architectures, `configure' can figure that out, but if it prints a
|
||||
message saying it cannot guess the machine type, give it the
|
||||
`--build=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name which has the form:
|
||||
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
where SYSTEM can have one of these forms:
|
||||
|
||||
OS KERNEL-OS
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the machine type.
|
||||
|
||||
If you are _building_ compiler tools for cross-compiling, you should
|
||||
use the option `--target=TYPE' to select the type of system they will
|
||||
produce code for.
|
||||
|
||||
If you want to _use_ a cross compiler, that generates code for a
|
||||
platform different from the build platform, you should specify the
|
||||
"host" platform (i.e., that on which the generated programs will
|
||||
eventually be run) with `--host=TYPE'.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share, you
|
||||
can create a site shell script called `config.site' that gives default
|
||||
values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to `configure'. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the `configure' command line, using `VAR=value'. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified `gcc' to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
|
||||
an Autoconf bug. Until the bug is fixed you can use this workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
`configure' Invocation
|
||||
======================
|
||||
|
||||
`configure' recognizes the following options to control how it operates.
|
||||
|
||||
`--help'
|
||||
`-h'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--version'
|
||||
`-V'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally `config.cache'. FILE defaults to `/dev/null' to
|
||||
disable caching.
|
||||
|
||||
`--config-cache'
|
||||
`-C'
|
||||
Alias for `--cache-file=config.cache'.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to `/dev/null' (any error
|
||||
messages will still be shown).
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options. Run
|
||||
`configure --help' for more details.
|
||||
|
1
dist/file/NEWS
vendored
Normal file
1
dist/file/NEWS
vendored
Normal file
@ -0,0 +1 @@
|
||||
See ChangeLog.
|
9
dist/file/TODO
vendored
Normal file
9
dist/file/TODO
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
Continue to squash all magic bugs. See Debian BTS for a good source.
|
||||
|
||||
Store arbitrarily long strings, for example for %s patterns, so that
|
||||
they can be printed out. Fixes Debian bug #271672.
|
||||
|
||||
Add syntax for other sorts of counted string (Debian bug #466032). Use
|
||||
to fix bug #283760.
|
||||
|
||||
Add syntax for relative offsets after current level (Debian bug #466037).
|
244
dist/file/acinclude.m4
vendored
244
dist/file/acinclude.m4
vendored
@ -1,19 +1,3 @@
|
||||
dnl cloned from autoconf 2.13 acspecific.m4
|
||||
AC_DEFUN([AC_C_LONG_LONG],
|
||||
[AC_CACHE_CHECK(for long long, ac_cv_c_long_long,
|
||||
[if test "$GCC" = yes; then
|
||||
ac_cv_c_long_long=yes
|
||||
else
|
||||
AC_TRY_RUN([int main() {
|
||||
long long foo = 0;
|
||||
exit(sizeof(long long) < sizeof(long)); }],
|
||||
ac_cv_c_long_long=yes, ac_cv_c_long_long=no)
|
||||
fi])
|
||||
if test $ac_cv_c_long_long = yes; then
|
||||
AC_DEFINE(HAVE_LONG_LONG)
|
||||
fi
|
||||
])
|
||||
|
||||
dnl from autoconf 2.13 acspecific.m4, with changes to check for daylight
|
||||
|
||||
AC_DEFUN([AC_STRUCT_TIMEZONE_DAYLIGHT],
|
||||
@ -43,7 +27,7 @@ AC_CACHE_CHECK([for tm_isdst in struct tm], ac_cv_struct_tm_isdst,
|
||||
#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_isdst;],
|
||||
ac_cv_struct_tm_isdst=yes, ac_cv_struct_tm_isdst=no)])
|
||||
if test "$ac_cv_struct_tm_isdst" = yes; then
|
||||
AC_DEFINE(HAVE_TM_ISDST)
|
||||
AC_DEFINE(HAVE_TM_ISDST,1,[HAVE_TM_ISDST])
|
||||
fi
|
||||
AC_CACHE_CHECK(for daylight, ac_cv_var_daylight,
|
||||
[AC_TRY_LINK(
|
||||
@ -55,230 +39,6 @@ extern int daylight;
|
||||
changequote([, ])dnl
|
||||
[atoi(daylight);], ac_cv_var_daylight=yes, ac_cv_var_daylight=no)])
|
||||
if test $ac_cv_var_daylight = yes; then
|
||||
AC_DEFINE(HAVE_DAYLIGHT)
|
||||
AC_DEFINE(HAVE_DAYLIGHT,1,[HAVE_DAYLIGHT])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl from autoconf 2.13 acgeneral.m4, with patch:
|
||||
dnl Date: Fri, 15 Jan 1999 05:52:41 -0800
|
||||
dnl Message-ID: <199901151352.FAA18237@shade.twinsun.com>
|
||||
dnl From: eggert@twinsun.com (Paul Eggert)
|
||||
dnl Subject: autoconf 2.13 AC_CHECK_TYPE doesn't allow shell vars
|
||||
dnl Newsgroups: gnu.utils.bug
|
||||
dnl
|
||||
dnl now include <stdint.h> if available
|
||||
|
||||
dnl AC_CHECK_TYPE2_STDC(TYPE, DEFAULT)
|
||||
AC_DEFUN([AC_CHECK_TYPE2_STDC],
|
||||
[AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||
AC_REQUIRE([AC_HEADER_STDINT])dnl
|
||||
AC_MSG_CHECKING(for $1)
|
||||
AC_CACHE_VAL(ac_cv_type_$1,
|
||||
[AC_EGREP_CPP(dnl
|
||||
[(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]],
|
||||
[#if HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#if STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#endif], eval "ac_cv_type_$1=yes", eval "ac_cv_type_$1=no")])dnl
|
||||
if eval "test \"`echo '$ac_cv_type_'$1`\" = yes"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
AC_DEFINE_UNQUOTED($1, $2)
|
||||
fi
|
||||
])
|
||||
|
||||
dnl from autoconf 2.13 acgeneral.m4, with additional third argument
|
||||
dnl AC_CHECK_SIZEOF_INCLUDES(TYPE [, CROSS-SIZE [, INCLUDES]])
|
||||
AC_DEFUN([AC_CHECK_SIZEOF_INCLUDES],
|
||||
[dnl The name to #define.
|
||||
define([AC_TYPE_NAME], translit(sizeof_$1, [[[a-z *]]], [[[A-Z_P]]]))dnl
|
||||
dnl The cache variable name.
|
||||
define([AC_CV_NAME], translit(ac_cv_sizeof_$1, [[[ *]]], [[[_p]]]))dnl
|
||||
AC_MSG_CHECKING(size of $1)
|
||||
AC_CACHE_VAL(AC_CV_NAME,
|
||||
[AC_TRY_RUN([$3
|
||||
#include <stdio.h>
|
||||
main()
|
||||
{
|
||||
FILE *f=fopen("conftestval", "w");
|
||||
if (!f) exit(1);
|
||||
fprintf(f, "%d\n", sizeof($1));
|
||||
exit(0);
|
||||
}], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=0, ifelse([$2], , , AC_CV_NAME=$2))])dnl
|
||||
AC_MSG_RESULT($AC_CV_NAME)
|
||||
AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
|
||||
undefine([AC_TYPE_NAME])dnl
|
||||
undefine([AC_CV_NAME])dnl
|
||||
])
|
||||
|
||||
dnl AC_CHECK_SIZEOF_STDC_HEADERS(TYPE [, CROSS_SIZE])
|
||||
AC_DEFUN([AC_CHECK_SIZEOF_STDC_HEADERS],
|
||||
[AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||
AC_REQUIRE([AC_HEADER_STDINT])dnl
|
||||
AC_CHECK_SIZEOF_INCLUDES($1, $2,
|
||||
[#if HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#ifdef STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
dnl AC_CHECK_TYPE_STDC(TYPE, DEFAULT)
|
||||
AC_DEFUN([AC_CHECK_TYPE_STDC],
|
||||
[AC_REQUIRE([AC_HEADER_STDC])dnl
|
||||
AC_REQUIRE([AC_HEADER_STDINT])dnl
|
||||
AC_MSG_CHECKING(for $1)
|
||||
AC_CACHE_VAL(ac_cv_type_$1,
|
||||
[AC_EGREP_CPP(dnl
|
||||
[(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]],
|
||||
[#if HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#if STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl
|
||||
AC_MSG_RESULT($ac_cv_type_$1)
|
||||
if test $ac_cv_type_$1 = no; then
|
||||
AC_DEFINE($1, $2)
|
||||
fi
|
||||
])
|
||||
|
||||
dnl AC_HEADER_STDINT
|
||||
AC_DEFUN([AC_HEADER_STDINT], [AC_CHECK_HEADERS(stdint.h)])
|
||||
|
||||
#serial 19
|
||||
|
||||
dnl By default, many hosts won't let programs access large files;
|
||||
dnl one must use special compiler options to get large-file access to work.
|
||||
dnl For more details about this brain damage please see:
|
||||
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
|
||||
|
||||
dnl Written by Paul Eggert <eggert@twinsun.com>.
|
||||
|
||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
||||
dnl AC_SYS_LARGEFILE_TEST_INCLUDES
|
||||
AC_DEFUN([AC_SYS_LARGEFILE_TEST_INCLUDES],
|
||||
[[#include <sys/types.h>
|
||||
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||
We can't simply "#define LARGE_OFF_T 9223372036854775807",
|
||||
since some C++ compilers masquerading as C compilers
|
||||
incorrectly reject 9223372036854775807. */
|
||||
# define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||
&& LARGE_OFF_T % 2147483647 == 1)
|
||||
? 1 : -1];
|
||||
]])
|
||||
|
||||
dnl Internal subroutine of AC_SYS_LARGEFILE.
|
||||
dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, CACHE-VAR, COMMENT, INCLU=
|
||||
DES, FUNCTION-BODY)
|
||||
AC_DEFUN([AC_SYS_LARGEFILE_MACRO_VALUE],
|
||||
[AC_CACHE_CHECK([for $1 value needed for large files], $3,
|
||||
[$3=no
|
||||
AC_TRY_COMPILE([$5],
|
||||
[$6],
|
||||
,
|
||||
[AC_TRY_COMPILE([#define $1 $2]
|
||||
[$5]
|
||||
,
|
||||
[$6],
|
||||
[$3=$2])])])
|
||||
if test "[$]$3" != no; then
|
||||
AC_DEFINE_UNQUOTED([$1], [$]$3, [$4])
|
||||
fi])
|
||||
|
||||
AC_DEFUN([AC_SYS_LARGEFILE],
|
||||
[AC_REQUIRE([AC_PROG_CC])
|
||||
AC_ARG_ENABLE(largefile,
|
||||
[ --disable-largefile omit support for large files])
|
||||
if test "$enable_largefile" != no; then
|
||||
|
||||
AC_CACHE_CHECK([for special C compiler options needed for large files=
|
||||
],
|
||||
ac_cv_sys_largefile_CC,
|
||||
[ac_cv_sys_largefile_CC=no
|
||||
if test "$GCC" != yes; then
|
||||
# IRIX 6.2 and later do not support large files by default,
|
||||
# so use the C compiler's -n32 option if that helps.
|
||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, , ,
|
||||
[ac_save_CC="$CC"
|
||||
CC="$CC -n32"
|
||||
AC_TRY_COMPILE(AC_SYS_LARGEFILE_TEST_INCLUDES, ,
|
||||
ac_cv_sys_largefile_CC=' -n32')
|
||||
CC="$ac_save_CC"])
|
||||
fi])
|
||||
if test "$ac_cv_sys_largefile_CC" != no; then
|
||||
CC="$CC$ac_cv_sys_largefile_CC"
|
||||
fi
|
||||
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
|
||||
ac_cv_sys_file_offset_bits,
|
||||
[Number of bits in a file offset, on hosts where this is settable.],
|
||||
AC_SYS_LARGEFILE_TEST_INCLUDES)
|
||||
AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
|
||||
ac_cv_sys_large_files,
|
||||
[Define for large files, on AIX-style hosts.],
|
||||
AC_SYS_LARGEFILE_TEST_INCLUDES)
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([AC_FUNC_FSEEKO],
|
||||
[AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1,
|
||||
ac_cv_sys_largefile_source,
|
||||
[Define to make fseeko visible on some hosts (e.g. glibc 2.2).],
|
||||
[#include <stdio.h>], [return !fseeko;])
|
||||
# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
|
||||
# in glibc 2.1.3, but that breaks too many other things.
|
||||
# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
|
||||
|
||||
AC_CACHE_CHECK([for fseeko], ac_cv_func_fseeko,
|
||||
[ac_cv_func_fseeko=no
|
||||
AC_TRY_LINK([#include <stdio.h>],
|
||||
[return fseeko && fseeko (stdin, 0, 0);],
|
||||
[ac_cv_func_fseeko=yes])])
|
||||
if test $ac_cv_func_fseeko != no; then
|
||||
AC_DEFINE(HAVE_FSEEKO, 1,
|
||||
[Define if fseeko (and presumably ftello) exists and is declared.])
|
||||
fi])
|
||||
|
||||
# serial 9
|
||||
|
||||
# From Paul Eggert.
|
||||
|
||||
# BeOS 5 has <wchar.h> but does not define mbstate_t,
|
||||
# so you can't declare an object of that type.
|
||||
# Check for this incompatibility with Standard C.
|
||||
|
||||
# Include stdlib.h first, because otherwise this test would fail on Linux
|
||||
# (at least glibc-2.1.3) because the "_XOPEN_SOURCE 500" definition elicits
|
||||
# a syntax error in wchar.h due to the use of undefined __int32_t.
|
||||
AC_DEFUN([AC_MBSTATE_T],
|
||||
[
|
||||
AC_CHECK_HEADERS(stdlib.h)
|
||||
|
||||
AC_CACHE_CHECK([for mbstate_t], ac_cv_type_mbstate_t,
|
||||
[AC_TRY_COMPILE([
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
#include <wchar.h>],
|
||||
[mbstate_t x; return sizeof x;],
|
||||
ac_cv_type_mbstate_t=yes,
|
||||
ac_cv_type_mbstate_t=no)])
|
||||
if test $ac_cv_type_mbstate_t = no; then
|
||||
AC_DEFINE(mbstate_t, int,
|
||||
[Define to a type if <wchar.h> does not define.])
|
||||
fi])
|
||||
|
||||
|
||||
|
142
dist/file/compile
vendored
Executable file
142
dist/file/compile
vendored
Executable file
@ -0,0 +1,142 @@
|
||||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# 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, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# 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.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand `-c -o'.
|
||||
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file `INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
eat=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we strip `-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# 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:
|
151
dist/file/configure.ac
vendored
Normal file
151
dist/file/configure.ac
vendored
Normal file
@ -0,0 +1,151 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(file, 4.26, christos@astron.com)
|
||||
AM_INIT_AUTOMAKE
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
AC_MSG_CHECKING(for builtin ELF support)
|
||||
AC_ARG_ENABLE(elf,
|
||||
[ --disable-elf disable builtin ELF support],
|
||||
[if test "${enableval}" = yes; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([BUILTIN_ELF], 1, [Define if built-in ELF support is used])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi], [
|
||||
# enable by default
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([BUILTIN_ELF], 1, [Define in built-in ELF support is used])
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING(for ELF core file support)
|
||||
AC_ARG_ENABLE(elf-core,
|
||||
[ --disable-elf-core disable ELF core file support],
|
||||
[if test "${enableval}" = yes; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([ELFCORE], 1, [Define for ELF core file support])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi], [
|
||||
# enable by default
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([ELFCORE], 1, [Define for ELF core file support])
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING(for file formats in man section 5)
|
||||
AC_ARG_ENABLE(fsect-man5,
|
||||
[ --enable-fsect-man5 enable file formats in man section 5],
|
||||
[if test "${enableval}" = yes; then
|
||||
AC_MSG_RESULT(yes)
|
||||
fsect=5
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fsect=4
|
||||
fi], [
|
||||
# disable by default
|
||||
AC_MSG_RESULT(no)
|
||||
fsect=4
|
||||
])
|
||||
|
||||
AC_SUBST(fsect)
|
||||
AM_CONDITIONAL(FSECT5, test x$fsect = x5)
|
||||
|
||||
AC_SUBST(WARNINGS)
|
||||
AC_GNU_SOURCE
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
dnl Checks for headers
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_MAJOR
|
||||
AC_HEADER_SYS_WAIT
|
||||
AC_CHECK_HEADERS(stdint.h fcntl.h locale.h stdint.h inttypes.h unistd.h)
|
||||
AC_CHECK_HEADERS(utime.h wchar.h wctype.h limits.h)
|
||||
AC_CHECK_HEADERS(getopt.h err.h)
|
||||
AC_CHECK_HEADERS(sys/mman.h sys/stat.h sys/types.h sys/utime.h sys/time.h)
|
||||
AC_CHECK_HEADERS(zlib.h)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_TYPE_OFF_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_CHECK_MEMBERS([struct stat.st_rdev])
|
||||
|
||||
AC_STRUCT_TIMEZONE_DAYLIGHT
|
||||
AC_SYS_LARGEFILE
|
||||
AC_FUNC_FSEEKO
|
||||
AC_TYPE_MBSTATE_T
|
||||
|
||||
AC_CHECK_TYPES([uint8_t, uint16_t, uint32_t, int32_t, uint64_t, int64_t])
|
||||
AC_CHECK_SIZEOF(long long)
|
||||
AH_BOTTOM([
|
||||
#ifndef HAVE_UINT8_T
|
||||
typedef unsigned char uint8_t;
|
||||
#endif
|
||||
#ifndef HAVE_UINT16_T
|
||||
typedef unsigned short uint16_t;
|
||||
#endif
|
||||
#ifndef HAVE_UINT32_T
|
||||
typedef unsigned int uint32_t;
|
||||
#endif
|
||||
#ifndef HAVE_INT32_T
|
||||
typedef int int32_t;
|
||||
#endif
|
||||
#ifndef HAVE_UINT64_T
|
||||
#if SIZEOF_LONG_LONG == 8
|
||||
typedef unsigned long long uint64_t;
|
||||
#else
|
||||
typedef unsigned long uint64_t;
|
||||
#endif
|
||||
#endif
|
||||
#ifndef HAVE_INT64_T
|
||||
#if SIZEOF_LONG_LONG == 8
|
||||
typedef long long int64_t;
|
||||
#else
|
||||
typedef long int64_t;
|
||||
#endif
|
||||
#endif
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING(for gcc compiler warnings)
|
||||
AC_ARG_ENABLE(warnings,
|
||||
[ --disable-warnings disable compiler warnings],
|
||||
[if test "${enableval}" = no -o $GCC = no; then
|
||||
AC_MSG_RESULT(no)
|
||||
WARNINGS=
|
||||
else
|
||||
AC_MSG_RESULT(yes)
|
||||
WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
|
||||
-Wmissing-declarations -Wredundant-decls -Wnested-externs \
|
||||
-Wsign-compare -Wreturn-type -Wswitch -Wshadow \
|
||||
-Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter"
|
||||
fi], [
|
||||
if test $GCC = no; then
|
||||
WARNINGS=
|
||||
AC_MSG_RESULT(no)
|
||||
else
|
||||
AC_MSG_RESULT(yes)
|
||||
WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \
|
||||
-Wmissing-declarations -Wredundant-decls -Wnested-externs \
|
||||
-Wsign-compare -Wreturn-type -Wswitch -Wshadow \
|
||||
-Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter"
|
||||
fi])
|
||||
|
||||
dnl Checks for functions
|
||||
AC_CHECK_FUNCS(mmap strerror strndup strtoul mbrtowc mkstemp utimes utime wcwidth strtof)
|
||||
|
||||
dnl Provide implementation of some required functions if necessary
|
||||
AC_REPLACE_FUNCS(getopt_long asprintf vasprintf)
|
||||
|
||||
dnl Checks for libraries
|
||||
AC_CHECK_LIB(z,gzopen)
|
||||
|
||||
dnl See if we are cross-compiling
|
||||
AM_CONDITIONAL(IS_CROSS_COMPILE, test "$cross_compiling" = yes)
|
||||
|
||||
AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile])
|
||||
AC_OUTPUT
|
550
dist/file/doc/file.man
vendored
Normal file
550
dist/file/doc/file.man
vendored
Normal file
@ -0,0 +1,550 @@
|
||||
.\" $File: file.man,v 1.73 2008/02/19 17:58:00 rrt Exp $
|
||||
.Dd February 19, 2008
|
||||
.Dt FILE __CSECTION__
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm file
|
||||
.Nd determine file type
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl bchikLnNprsvz
|
||||
.Op Fl -mime-type
|
||||
.Op Fl -mime-encoding
|
||||
.Op Fl f Ar namefile
|
||||
.Op Fl F Ar separator
|
||||
.Op Fl m Ar magicfiles
|
||||
.Ar file
|
||||
.Nm
|
||||
.Fl C
|
||||
.Op Fl m Ar magicfile
|
||||
.Nm
|
||||
.Op Fl -help
|
||||
.Sh DESCRIPTION
|
||||
This manual page documents version __VERSION__ of the
|
||||
.Nm
|
||||
command.
|
||||
.Pp
|
||||
.Nm
|
||||
tests each argument in an attempt to classify it.
|
||||
There are three sets of tests, performed in this order:
|
||||
filesystem tests, magic tests, and language tests.
|
||||
The
|
||||
.Em first
|
||||
test that succeeds causes the file type to be printed.
|
||||
.Pp
|
||||
The type printed will usually contain one of the words
|
||||
.Em text
|
||||
(the file contains only
|
||||
printing characters and a few common control
|
||||
characters and is probably safe to read on an
|
||||
.Dv ASCII
|
||||
terminal),
|
||||
.Em executable
|
||||
(the file contains the result of compiling a program
|
||||
in a form understandable to some
|
||||
.Dv UNIX
|
||||
kernel or another),
|
||||
or
|
||||
.Em data
|
||||
meaning anything else (data is usually
|
||||
.Sq binary
|
||||
or non-printable).
|
||||
Exceptions are well-known file formats (core files, tar archives)
|
||||
that are known to contain binary data.
|
||||
When modifying magic files or the program itself, make sure to
|
||||
.Em "preserve these keywords" .
|
||||
Users depend on knowing that all the readable files in a directory
|
||||
have the word
|
||||
.Dq text
|
||||
printed.
|
||||
Don't do as Berkeley did and change
|
||||
.Dq shell commands text
|
||||
to
|
||||
.Dq shell script .
|
||||
.Pp
|
||||
The filesystem tests are based on examining the return from a
|
||||
.Xr stat 2
|
||||
system call.
|
||||
The program checks to see if the file is empty,
|
||||
or if it's some sort of special file.
|
||||
Any known file types appropriate to the system you are running on
|
||||
(sockets, symbolic links, or named pipes (FIFOs) on those systems that
|
||||
implement them)
|
||||
are intuited if they are defined in
|
||||
the system header file
|
||||
.In sys/stat.h .
|
||||
.Pp
|
||||
The magic tests are used to check for files with data in
|
||||
particular fixed formats.
|
||||
The canonical example of this is a binary executable (compiled program)
|
||||
.Dv a.out
|
||||
file, whose format is defined in
|
||||
.In elf.h ,
|
||||
.In a.out.h
|
||||
and possibly
|
||||
.In exec.h
|
||||
in the standard include directory.
|
||||
These files have a
|
||||
.Sq "magic number"
|
||||
stored in a particular place
|
||||
near the beginning of the file that tells the
|
||||
.Dv UNIX operating system
|
||||
that the file is a binary executable, and which of several types thereof.
|
||||
The concept of a
|
||||
.Sq "magic"
|
||||
has been applied by extension to data files.
|
||||
Any file with some invariant identifier at a small fixed
|
||||
offset into the file can usually be described in this way.
|
||||
The information identifying these files is read from the compiled
|
||||
magic file
|
||||
.Pa __MAGIC__.mgc ,
|
||||
or the files in the directory
|
||||
.Pa __MAGIC__
|
||||
if the compiled file does not exist. In addition, if
|
||||
.Pa $HOME/.magic.mgc
|
||||
or
|
||||
.Pa $HOME/.magic
|
||||
exists, it will be used in preference to the system magic files.
|
||||
.Pp
|
||||
If a file does not match any of the entries in the magic file,
|
||||
it is examined to see if it seems to be a text file.
|
||||
ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets
|
||||
(such as those used on Macintosh and IBM PC systems),
|
||||
UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC
|
||||
character sets can be distinguished by the different
|
||||
ranges and sequences of bytes that constitute printable text
|
||||
in each set.
|
||||
If a file passes any of these tests, its character set is reported.
|
||||
ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are identified
|
||||
as
|
||||
.Dq text
|
||||
because they will be mostly readable on nearly any terminal;
|
||||
UTF-16 and EBCDIC are only
|
||||
.Dq character data
|
||||
because, while
|
||||
they contain text, it is text that will require translation
|
||||
before it can be read.
|
||||
In addition,
|
||||
.Nm
|
||||
will attempt to determine other characteristics of text-type files.
|
||||
If the lines of a file are terminated by CR, CRLF, or NEL, instead
|
||||
of the Unix-standard LF, this will be reported.
|
||||
Files that contain embedded escape sequences or overstriking
|
||||
will also be identified.
|
||||
.Pp
|
||||
Once
|
||||
.Nm
|
||||
has determined the character set used in a text-type file,
|
||||
it will
|
||||
attempt to determine in what language the file is written.
|
||||
The language tests look for particular strings (cf.
|
||||
.In names.h
|
||||
) that can appear anywhere in the first few blocks of a file.
|
||||
For example, the keyword
|
||||
.Em .br
|
||||
indicates that the file is most likely a
|
||||
.Xr troff 1
|
||||
input file, just as the keyword
|
||||
.Em struct
|
||||
indicates a C program.
|
||||
These tests are less reliable than the previous
|
||||
two groups, so they are performed last.
|
||||
The language test routines also test for some miscellany
|
||||
(such as
|
||||
.Xr tar 1
|
||||
archives).
|
||||
.Pp
|
||||
Any file that cannot be identified as having been written
|
||||
in any of the character sets listed above is simply said to be
|
||||
.Dq data .
|
||||
.Sh OPTIONS
|
||||
.Bl -tag -width indent
|
||||
.It Fl b , -brief
|
||||
Do not prepend filenames to output lines (brief mode).
|
||||
.It Fl c , -checking-printout
|
||||
Cause a checking printout of the parsed form of the magic file.
|
||||
This is usually used in conjunction with the
|
||||
.Fl m
|
||||
flag to debug a new magic file before installing it.
|
||||
.It Fl C , -compile
|
||||
Write a
|
||||
.Pa magic.mgc
|
||||
output file that contains a pre-parsed version of the magic file or directory.
|
||||
.It Fl e , -exclude Ar testname
|
||||
Exclude the test named in
|
||||
.Ar testname
|
||||
from the list of tests made to determine the file type. Valid test names
|
||||
are:
|
||||
.Bl -tag -width
|
||||
.It apptype
|
||||
Check for
|
||||
.Dv EMX
|
||||
application type (only on EMX).
|
||||
.It ascii
|
||||
Check for various types of ascii files.
|
||||
.It compress
|
||||
Don't look for, or inside compressed files.
|
||||
.It elf
|
||||
Don't print elf details.
|
||||
.It fortran
|
||||
Don't look for fortran sequences inside ascii files.
|
||||
.It soft
|
||||
Don't consult magic files.
|
||||
.It tar
|
||||
Don't examine tar files.
|
||||
.It token
|
||||
Don't look for known tokens inside ascii files.
|
||||
.It troff
|
||||
Don't look for troff sequences inside ascii files.
|
||||
.El
|
||||
.It Fl f , -files-from Ar namefile
|
||||
Read the names of the files to be examined from
|
||||
.Ar namefile
|
||||
(one per line)
|
||||
before the argument list.
|
||||
Either
|
||||
.Ar namefile
|
||||
or at least one filename argument must be present;
|
||||
to test the standard input, use
|
||||
.Sq -
|
||||
as a filename argument.
|
||||
.It Fl F , -separator Ar separator
|
||||
Use the specified string as the separator between the filename and the
|
||||
file result returned. Defaults to
|
||||
.Sq \&: .
|
||||
.It Fl h , -no-dereference
|
||||
option causes symlinks not to be followed
|
||||
(on systems that support symbolic links). This is the default if the
|
||||
environment variable
|
||||
.Dv POSIXLY_CORRECT
|
||||
is not defined.
|
||||
.It Fl i , -mime
|
||||
Causes the file command to output mime type strings rather than the more
|
||||
traditional human readable ones. Thus it may say
|
||||
.Dq text/plain charset=us-ascii
|
||||
rather than
|
||||
.Dq ASCII text .
|
||||
In order for this option to work, file changes the way
|
||||
it handles files recognized by the command itself (such as many of the
|
||||
text file types, directories etc), and makes use of an alternative
|
||||
.Dq magic
|
||||
file.
|
||||
(See
|
||||
.Dq FILES
|
||||
section, below).
|
||||
.It Fl -mime-type , -mime-encoding
|
||||
Like
|
||||
.Fl i ,
|
||||
but print only the specified element(s).
|
||||
.It Fl k , -keep-going
|
||||
Don't stop at the first match, keep going. Subsequent matches will be
|
||||
have the string
|
||||
.Dq "\[rs]012\- "
|
||||
prepended.
|
||||
(If you want a newline, see the
|
||||
.Dq "\-r"
|
||||
option.)
|
||||
.It Fl L , -dereference
|
||||
option causes symlinks to be followed, as the like-named option in
|
||||
.Xr ls 1
|
||||
(on systems that support symbolic links).
|
||||
This is the default if the environment variable
|
||||
.Dv POSIXLY_CORRECT
|
||||
is defined.
|
||||
.It Fl m , -magic-file Ar list
|
||||
Specify an alternate list of files and directories containing magic.
|
||||
This can be a single item, or a colon-separated list.
|
||||
If a compiled magic file is found alongside a file or directory, it will be used instead.
|
||||
.It Fl n , -no-buffer
|
||||
Force stdout to be flushed after checking each file.
|
||||
This is only useful if checking a list of files.
|
||||
It is intended to be used by programs that want filetype output from a pipe.
|
||||
.It Fl N , -no-pad
|
||||
Don't pad filenames so that they align in the output.
|
||||
.It Fl p , -preserve-date
|
||||
On systems that support
|
||||
.Xr utime 2
|
||||
or
|
||||
.Xr utimes 2 ,
|
||||
attempt to preserve the access time of files analyzed, to pretend that
|
||||
.Nm
|
||||
never read them.
|
||||
.It Fl r , -raw
|
||||
Don't translate unprintable characters to \eooo.
|
||||
Normally
|
||||
.Nm
|
||||
translates unprintable characters to their octal representation.
|
||||
.It Fl s , -special-files
|
||||
Normally,
|
||||
.Nm
|
||||
only attempts to read and determine the type of argument files which
|
||||
.Xr stat 2
|
||||
reports are ordinary files.
|
||||
This prevents problems, because reading special files may have peculiar
|
||||
consequences.
|
||||
Specifying the
|
||||
.Fl s
|
||||
option causes
|
||||
.Nm
|
||||
to also read argument files which are block or character special files.
|
||||
This is useful for determining the filesystem types of the data in raw
|
||||
disk partitions, which are block special files.
|
||||
This option also causes
|
||||
.Nm
|
||||
to disregard the file size as reported by
|
||||
.Xr stat 2
|
||||
since on some systems it reports a zero size for raw disk partitions.
|
||||
.It Fl v , -version
|
||||
Print the version of the program and exit.
|
||||
.It Fl z , -uncompress
|
||||
Try to look inside compressed files.
|
||||
.It Fl 0 , -print0
|
||||
Output a null character
|
||||
.Sq \e0
|
||||
after the end of the filename. Nice to
|
||||
.Xr cut 1
|
||||
the output. This does not affect the separator which is still printed.
|
||||
.It Fl -help
|
||||
Print a help message and exit.
|
||||
.El
|
||||
.Sh FILES
|
||||
.Bl -tag -width __MAGIC__.mgc -compact
|
||||
.It Pa __MAGIC__.mgc
|
||||
Default compiled list of magic.
|
||||
.It Pa __MAGIC__
|
||||
Directory containing default magic files.
|
||||
.El
|
||||
.Sh ENVIRONMENT
|
||||
The environment variable
|
||||
.Dv MAGIC
|
||||
can be used to set the default magic file name.
|
||||
If that variable is set, then
|
||||
.Nm
|
||||
will not attempt to open
|
||||
.Pa $HOME/.magic .
|
||||
.Nm
|
||||
adds
|
||||
.Dq .mgc
|
||||
to the value of this variable as appropriate.
|
||||
The environment variable
|
||||
.Dv POSIXLY_CORRECT
|
||||
controls (on systems that support symbolic links), whether
|
||||
.Nm
|
||||
will attempt to follow symlinks or not. If set, then
|
||||
.Nm
|
||||
follows symlink, otherwise it does not. This is also controlled
|
||||
by the
|
||||
.Fl L
|
||||
and
|
||||
.Fl h
|
||||
options.
|
||||
.Sh SEE ALSO
|
||||
.Xr magic __FSECTION__ ,
|
||||
.Xr strings 1 ,
|
||||
.Xr od 1 ,
|
||||
.Xr hexdump 1,
|
||||
.Xr file 1posix
|
||||
.Sh STANDARDS CONFORMANCE
|
||||
This program is believed to exceed the System V Interface Definition
|
||||
of FILE(CMD), as near as one can determine from the vague language
|
||||
contained therein.
|
||||
Its behavior is mostly compatible with the System V program of the same name.
|
||||
This version knows more magic, however, so it will produce
|
||||
different (albeit more accurate) output in many cases.
|
||||
.\" URL: http://www.opengroup.org/onlinepubs/009695399/utilities/file.html
|
||||
.Pp
|
||||
The one significant difference
|
||||
between this version and System V
|
||||
is that this version treats any white space
|
||||
as a delimiter, so that spaces in pattern strings must be escaped.
|
||||
For example,
|
||||
.Bd -literal -offset indent
|
||||
>10 string language impress\ (imPRESS data)
|
||||
.Ed
|
||||
.Pp
|
||||
in an existing magic file would have to be changed to
|
||||
.Bd -literal -offset indent
|
||||
>10 string language\e impress (imPRESS data)
|
||||
.Ed
|
||||
.Pp
|
||||
In addition, in this version, if a pattern string contains a backslash,
|
||||
it must be escaped.
|
||||
For example
|
||||
.Bd -literal -offset indent
|
||||
0 string \ebegindata Andrew Toolkit document
|
||||
.Ed
|
||||
.Pp
|
||||
in an existing magic file would have to be changed to
|
||||
.Bd -literal -offset indent
|
||||
0 string \e\ebegindata Andrew Toolkit document
|
||||
.Ed
|
||||
.Pp
|
||||
SunOS releases 3.2 and later from Sun Microsystems include a
|
||||
.Nm
|
||||
command derived from the System V one, but with some extensions.
|
||||
My version differs from Sun's only in minor ways.
|
||||
It includes the extension of the
|
||||
.Sq &
|
||||
operator, used as,
|
||||
for example,
|
||||
.Bd -literal -offset indent
|
||||
>16 long&0x7fffffff >0 not stripped
|
||||
.Ed
|
||||
.Sh MAGIC DIRECTORY
|
||||
The magic file entries have been collected from various sources,
|
||||
mainly USENET, and contributed by various authors.
|
||||
Christos Zoulas (address below) will collect additional
|
||||
or corrected magic file entries.
|
||||
A consolidation of magic file entries
|
||||
will be distributed periodically.
|
||||
.Pp
|
||||
The order of entries in the magic file is significant.
|
||||
Depending on what system you are using, the order that
|
||||
they are put together may be incorrect.
|
||||
If your old
|
||||
.Nm
|
||||
command uses a magic file,
|
||||
keep the old magic file around for comparison purposes
|
||||
(rename it to
|
||||
.Pa __MAGIC__.orig ).
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal -offset indent
|
||||
$ file file.c file /dev/{wd0a,hda}
|
||||
file.c: C program text
|
||||
file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
|
||||
dynamically linked (uses shared libs), stripped
|
||||
/dev/wd0a: block special (0/0)
|
||||
/dev/hda: block special (3/0)
|
||||
|
||||
$ file -s /dev/wd0{b,d}
|
||||
/dev/wd0b: data
|
||||
/dev/wd0d: x86 boot sector
|
||||
|
||||
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
|
||||
/dev/hda: x86 boot sector
|
||||
/dev/hda1: Linux/i386 ext2 filesystem
|
||||
/dev/hda2: x86 boot sector
|
||||
/dev/hda3: x86 boot sector, extended partition table
|
||||
/dev/hda4: Linux/i386 ext2 filesystem
|
||||
/dev/hda5: Linux/i386 swap file
|
||||
/dev/hda6: Linux/i386 swap file
|
||||
/dev/hda7: Linux/i386 swap file
|
||||
/dev/hda8: Linux/i386 swap file
|
||||
/dev/hda9: empty
|
||||
/dev/hda10: empty
|
||||
|
||||
$ file -i file.c file /dev/{wd0a,hda}
|
||||
file.c: text/x-c
|
||||
file: application/x-executable
|
||||
/dev/hda: application/x-not-regular-file
|
||||
/dev/wd0a: application/x-not-regular-file
|
||||
|
||||
.Ed
|
||||
.Sh HISTORY
|
||||
There has been a
|
||||
.Nm
|
||||
command in every
|
||||
.Dv UNIX since at least Research Version 4
|
||||
(man page dated November, 1973).
|
||||
The System V version introduced one significant major change:
|
||||
the external list of magic types.
|
||||
This slowed the program down slightly but made it a lot more flexible.
|
||||
.Pp
|
||||
This program, based on the System V version,
|
||||
was written by Ian Darwin <ian@darwinsys.com>
|
||||
without looking at anybody else's source code.
|
||||
.Pp
|
||||
John Gilmore revised the code extensively, making it better than
|
||||
the first version.
|
||||
Geoff Collyer found several inadequacies
|
||||
and provided some magic file entries.
|
||||
Contributions by the `&' operator by Rob McMahon, cudcv@warwick.ac.uk, 1989.
|
||||
.Pp
|
||||
Guy Harris, guy@netapp.com, made many changes from 1993 to the present.
|
||||
.Pp
|
||||
Primary development and maintenance from 1990 to the present by
|
||||
Christos Zoulas (christos@astron.com).
|
||||
.Pp
|
||||
Altered by Chris Lowth, chris@lowth.com, 2000:
|
||||
Handle the
|
||||
.Fl i
|
||||
option to output mime type strings, using an alternative
|
||||
magic file and internal logic.
|
||||
.Pp
|
||||
Altered by Eric Fischer (enf@pobox.com), July, 2000,
|
||||
to identify character codes and attempt to identify the languages
|
||||
of non-ASCII files.
|
||||
.Pp
|
||||
Altered by Reuben Thomas (rrt@sc3d.org), 2007 to 2008, to improve MIME
|
||||
support and merge MIME and non-MIME magic, support directories as well
|
||||
as files of magic, apply many bug fixes and improve the build system.
|
||||
.Pp
|
||||
The list of contributors to the
|
||||
.Dq magic
|
||||
directory (magic files)
|
||||
is too long to include here.
|
||||
You know who you are; thank you.
|
||||
Many contributors are listed in the source files.
|
||||
.Sh LEGAL NOTICE
|
||||
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999.
|
||||
Covered by the standard Berkeley Software Distribution copyright; see the file
|
||||
LEGAL.NOTICE in the source distribution.
|
||||
.Pp
|
||||
The files
|
||||
.Dv tar.h
|
||||
and
|
||||
.Dv is_tar.c
|
||||
were written by John Gilmore from his public-domain
|
||||
.Xr tar 1
|
||||
program, and are not covered by the above license.
|
||||
.Sh BUGS
|
||||
.Pp
|
||||
There must be a better way to automate the construction of the Magic
|
||||
file from all the glop in Magdir.
|
||||
What is it?
|
||||
.Pp
|
||||
.Nm
|
||||
uses several algorithms that favor speed over accuracy,
|
||||
thus it can be misled about the contents of
|
||||
text
|
||||
files.
|
||||
.Pp
|
||||
The support for text files (primarily for programming languages)
|
||||
is simplistic, inefficient and requires recompilation to update.
|
||||
.Pp
|
||||
The list of keywords in
|
||||
.Dv ascmagic
|
||||
probably belongs in the Magic file.
|
||||
This could be done by using some keyword like
|
||||
.Sq *
|
||||
for the offset value.
|
||||
.Pp
|
||||
Complain about conflicts in the magic file entries.
|
||||
Make a rule that the magic entries sort based on file offset rather
|
||||
than position within the magic file?
|
||||
.Pp
|
||||
The program should provide a way to give an estimate
|
||||
of
|
||||
.Dq how good
|
||||
a guess is.
|
||||
We end up removing guesses (e.g.
|
||||
.Dq From\
|
||||
as first 5 chars of file) because
|
||||
they are not as good as other guesses (e.g.
|
||||
.Dq Newsgroups:
|
||||
versus
|
||||
.Dq Return-Path:
|
||||
).
|
||||
Still, if the others don't pan out, it should be possible to use the
|
||||
first guess.
|
||||
.Pp
|
||||
This manual page, and particularly this section, is too long.
|
||||
.Sh RETURN CODE
|
||||
.Nm
|
||||
returns 0 on success, and non-zero on error.
|
||||
.Sh AVAILABILITY
|
||||
You can obtain the original author's latest version by anonymous FTP
|
||||
on
|
||||
.Dv ftp.astron.com
|
||||
in the directory
|
||||
.Dv /pub/file/file-X.YZ.tar.gz
|
256
dist/file/doc/libmagic.man
vendored
Normal file
256
dist/file/doc/libmagic.man
vendored
Normal file
@ -0,0 +1,256 @@
|
||||
.\" $File: libmagic.man,v 1.18 2008/02/28 22:24:46 rrt Exp $
|
||||
.\"
|
||||
.\" 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.
|
||||
.\"
|
||||
.Dd November 15, 2006
|
||||
.Dt MAGIC 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm magic_open ,
|
||||
.Nm magic_close ,
|
||||
.Nm magic_error ,
|
||||
.Nm magic_file ,
|
||||
.Nm magic_buffer ,
|
||||
.Nm magic_setflags ,
|
||||
.Nm magic_check ,
|
||||
.Nm magic_compile ,
|
||||
.Nm magic_load
|
||||
.Nd Magic number recognition library.
|
||||
.Sh LIBRARY
|
||||
.Lb libmagic
|
||||
.Sh SYNOPSIS
|
||||
.In magic.h
|
||||
.Ft magic_t
|
||||
.Fn magic_open "int flags"
|
||||
.Ft void
|
||||
.Fn magic_close "magic_t cookie"
|
||||
.Ft const char *
|
||||
.Fn magic_error "magic_t cookie"
|
||||
.Ft int
|
||||
.Fn magic_errno "magic_t cookie"
|
||||
.Ft const char *
|
||||
.Fn magic_file "magic_t cookie, const char *filename"
|
||||
.Ft const char *
|
||||
.Fn magic_buffer "magic_t cookie, const void *buffer, size_t length"
|
||||
.Ft int
|
||||
.Fn magic_setflags "magic_t cookie, int flags"
|
||||
.Ft int
|
||||
.Fn magic_check "magic_t cookie, const char *filename"
|
||||
.Ft int
|
||||
.Fn magic_compile "magic_t cookie, const char *filename"
|
||||
.Ft int
|
||||
.Fn magic_load "magic_t cookie, const char *filename"
|
||||
.Sh DESCRIPTION
|
||||
These functions
|
||||
operate on the magic database file
|
||||
which is described
|
||||
in
|
||||
.Xr magic __FSECTION__ .
|
||||
.Pp
|
||||
The function
|
||||
.Fn magic_open
|
||||
creates a magic cookie pointer and returns it. It returns NULL if
|
||||
there was an error allocating the magic cookie. The
|
||||
.Ar flags
|
||||
argument specifies how the other magic functions should behave:
|
||||
.Bl -tag -width MAGIC_COMPRESS
|
||||
.It Dv MAGIC_NONE
|
||||
No special handling.
|
||||
.It Dv MAGIC_DEBUG
|
||||
Print debugging messages to stderr.
|
||||
.It Dv MAGIC_SYMLINK
|
||||
If the file queried is a symlink, follow it.
|
||||
.It Dv MAGIC_COMPRESS
|
||||
If the file is compressed, unpack it and look at the contents.
|
||||
.It Dv MAGIC_DEVICES
|
||||
If the file is a block or character special device, then open the device
|
||||
and try to look in its contents.
|
||||
.It Dv MAGIC_MIME_TYPE
|
||||
Return a MIME type string, instead of a textual description.
|
||||
.It Dv MAGIC_MIME_ENCODING
|
||||
Return a MIME encoding, instead of a textual description.
|
||||
.It Dv MAGIC_CONTINUE
|
||||
Return all matches, not just the first.
|
||||
.It Dv MAGIC_CHECK
|
||||
Check the magic database for consistency and print warnings to stderr.
|
||||
.It Dv MAGIC_PRESERVE_ATIME
|
||||
On systems that support
|
||||
.Xr utime 2
|
||||
or
|
||||
.Xr utimes 2 ,
|
||||
attempt to preserve the access time of files analyzed.
|
||||
.It Dv MAGIC_RAW
|
||||
Don't translate unprintable characters to a \eooo octal representation.
|
||||
.It Dv MAGIC_ERROR
|
||||
Treat operating system errors while trying to open files and follow symlinks
|
||||
as real errors, instead of printing them in the magic buffer.
|
||||
.It Dv MAGIC_NO_CHECK_APPTYPE
|
||||
Check for
|
||||
.Dv EMX
|
||||
application type (only on EMX).
|
||||
.It Dv MAGIC_NO_CHECK_ASCII
|
||||
Check for various types of ascii files.
|
||||
.It Dv MAGIC_NO_CHECK_COMPRESS
|
||||
Don't look for, or inside compressed files.
|
||||
.It Dv MAGIC_NO_CHECK_ELF
|
||||
Don't print elf details.
|
||||
.It Dv MAGIC_NO_CHECK_FORTRAN
|
||||
Don't look for fortran sequences inside ascii files.
|
||||
.It Dv MAGIC_NO_CHECK_SOFT
|
||||
Don't consult magic files.
|
||||
.It Dv MAGIC_NO_CHECK_TAR
|
||||
Don't examine tar files.
|
||||
.It Dv MAGIC_NO_CHECK_TOKENS
|
||||
Don't look for known tokens inside ascii files.
|
||||
.It Dv MAGIC_NO_CHECK_TROFF
|
||||
Don't look for troff sequences inside ascii files.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_close
|
||||
function closes the
|
||||
.Xr magic __FSECTION__
|
||||
database and deallocates any resources used.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_error
|
||||
function returns a textual explanation of the last error, or NULL if there was
|
||||
no error.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_errno
|
||||
function returns the last operating system error number
|
||||
.Pq Xr errno 2
|
||||
that was encountered by a system call.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_file
|
||||
function returns a textual description of the contents of the
|
||||
.Ar filename
|
||||
argument, or NULL if an error occurred.
|
||||
If the
|
||||
.Ar filename
|
||||
is NULL, then stdin is used.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_buffer
|
||||
function returns a textual description of the contents of the
|
||||
.Ar buffer
|
||||
argument with
|
||||
.Ar length
|
||||
bytes size.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_setflags
|
||||
function sets the
|
||||
.Ar flags
|
||||
described above. Note that using both MIME flags together can also
|
||||
return extra information on the charset.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_check
|
||||
function can be used to check the validity of entries in the colon
|
||||
separated database files passed in as
|
||||
.Ar filename ,
|
||||
or NULL for the default database. It returns 0 on success and -1 on
|
||||
failure.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_compile
|
||||
function can be used to compile the the colon
|
||||
separated list of database files passed in as
|
||||
.Ar filename ,
|
||||
or NULL for the default database. It returns 0 on success and -1 on
|
||||
failure. The compiled files created are named from the
|
||||
.Xr basename 1
|
||||
of each file argument with
|
||||
.Dq .mgc
|
||||
appended to it.
|
||||
.Pp
|
||||
The
|
||||
.Fn magic_load
|
||||
function must be used to load the the colon
|
||||
separated list of database files passed in as
|
||||
.Ar filename ,
|
||||
or NULL for the default database file
|
||||
before any magic queries can performed.
|
||||
.Pp
|
||||
The default database file is named by the MAGIC environment variable. If
|
||||
that variable is not set, the default database file name is __MAGIC__.
|
||||
.Pp
|
||||
.Fn magic_load
|
||||
adds
|
||||
.Dq .mime
|
||||
and/or
|
||||
.Dq .mgc
|
||||
to the database filename as appropriate.
|
||||
.Sh RETURN VALUES
|
||||
The function
|
||||
.Fn magic_open
|
||||
returns a magic cookie on success and NULL on failure setting errno to
|
||||
an appropriate value. It will set errno to EINVAL if an unsupported
|
||||
value for flags was given.
|
||||
The
|
||||
.Fn magic_load ,
|
||||
.Fn magic_compile ,
|
||||
and
|
||||
.Fn magic_check
|
||||
functions return 0 on success and -1 on failure.
|
||||
The
|
||||
.Fn magic_file ,
|
||||
and
|
||||
.Fn magic_buffer
|
||||
functions return a string on success and NULL on failure. The
|
||||
.Fn magic_error
|
||||
function returns a textual description of the errors of the above
|
||||
functions, or NULL if there was no error.
|
||||
Finally,
|
||||
.Fn magic_setflags
|
||||
returns -1 on systems that don't support
|
||||
.Xr utime 2 ,
|
||||
or
|
||||
.Xr utimes 2
|
||||
when
|
||||
.Dv MAGIC_PRESERVE_ATIME
|
||||
is set.
|
||||
.Sh FILES
|
||||
.Bl -tag -width __MAGIC__.mime.mgc -compact
|
||||
.It Pa __MAGIC__.mime
|
||||
The non-compiled default magic mime database.
|
||||
.It Pa __MAGIC__.mime.mgc
|
||||
The compiled default magic mime database.
|
||||
.It Pa __MAGIC__
|
||||
The non-compiled default magic database.
|
||||
.It Pa __MAGIC__.mgc
|
||||
The compiled default magic database.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr file __CSECTION__ ,
|
||||
.Xr magic __FSECTION__
|
||||
.Sh AUTHORS
|
||||
Måns Rullgård Initial libmagic implementation,
|
||||
and configuration.
|
||||
Christos Zoulas API cleanup, error code and allocation handling.
|
510
dist/file/doc/magic.man
vendored
Normal file
510
dist/file/doc/magic.man
vendored
Normal file
@ -0,0 +1,510 @@
|
||||
.\" $File: magic.man,v 1.57 2008/08/30 09:50:20 christos Exp $
|
||||
.Dd August 30, 2008
|
||||
.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 /[Bbc]*.
|
||||
The
|
||||
.Dq B
|
||||
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 b
|
||||
flag treats every blank in the target as an optional blank.
|
||||
Finally the
|
||||
.Dq c
|
||||
flag, specifies case insensitive matching: lowercase
|
||||
characters in the magic match both lower and upper case characters in the
|
||||
target, whereas upper case characters in the magic only match uppercase
|
||||
characters in the target.
|
||||
.It Dv pstring
|
||||
A Pascal-style string where the first byte is interpreted as the an
|
||||
unsigned length.
|
||||
The string is not NUL terminated.
|
||||
.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 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 bestring16
|
||||
A two-byte unicode (UCS16) string in big-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 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 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 type specification can be optionally
|
||||
followed by
|
||||
.Dv /[c][s] .
|
||||
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 regular expression is tested against line
|
||||
.Dv N + 1
|
||||
onwards, where
|
||||
.Dv N
|
||||
is the given offset.
|
||||
Line endings are assumed to be in the machine's native format.
|
||||
.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 modifier flags
|
||||
(if any) must be followed by
|
||||
.Dv /number
|
||||
the range, 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 offset works as for regex.
|
||||
.It Dv default
|
||||
This is intended to be used with the test
|
||||
.Em x
|
||||
(which is always true) and a message that is to be used if there are
|
||||
no other matches.
|
||||
.El
|
||||
.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
|
||||
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
|
||||
The special test
|
||||
.Em x
|
||||
always evaluates to true.
|
||||
.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
|
||||
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 a 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, untile 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 [.[bslBSL]][+\-][ y ]) .
|
||||
The value of
|
||||
.Em x
|
||||
is used as an offset in the file.
|
||||
A byte, short or long is read at that offset depending on the
|
||||
.Em [bslBSLm]
|
||||
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
|
||||
Finally, 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
|
||||
.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 ,
|
||||
.Dv leshort ,
|
||||
.Dv date ,
|
||||
.Dv bedate ,
|
||||
.Dv medate ,
|
||||
.Dv ledate ,
|
||||
.Dv beldate ,
|
||||
.Dv leldate ,
|
||||
and
|
||||
.Dv meldate
|
||||
are system-dependent; perhaps they should be specified as a number
|
||||
of bytes (2B, 4B, etc),
|
||||
since the files being recognized typically come from
|
||||
a system on which the lengths are invariant.
|
||||
.\"
|
||||
.\" From: guy@sun.uucp (Guy Harris)
|
||||
.\" Newsgroups: net.bugs.usg
|
||||
.\" Subject: /etc/magic's format isn't well documented
|
||||
.\" Message-ID: <2752@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.
|
433
dist/file/magic/Makefile.am
vendored
433
dist/file/magic/Makefile.am
vendored
@ -1,217 +1,236 @@
|
||||
pkgdata_DATA = magic magic.mime magic.mgc magic.mime.mgc
|
||||
#
|
||||
# $File: Makefile.am,v 1.43 2008/08/08 08:24:06 christos Exp $
|
||||
#
|
||||
MAGIC_FRAGMENT_BASE = Magdir
|
||||
MAGIC_FRAGMENT_DIR = $(top_srcdir)/magic/$(MAGIC_FRAGMENT_BASE)
|
||||
|
||||
EXTRA_DIST = magic2mime Localstuff Header magic.mime $(magic_FRAGMENTS)
|
||||
pkgdata_DATA = magic.mgc
|
||||
|
||||
CLEANFILES = magic magic.mgc magic.mime.mgc
|
||||
EXTRA_DIST = Header Localstuff \
|
||||
$(MAGIC_FRAGMENT_DIR)/acorn \
|
||||
$(MAGIC_FRAGMENT_DIR)/adi \
|
||||
$(MAGIC_FRAGMENT_DIR)/adventure \
|
||||
$(MAGIC_FRAGMENT_DIR)/allegro \
|
||||
$(MAGIC_FRAGMENT_DIR)/alliant \
|
||||
$(MAGIC_FRAGMENT_DIR)/alpha \
|
||||
$(MAGIC_FRAGMENT_DIR)/amanda \
|
||||
$(MAGIC_FRAGMENT_DIR)/amigaos \
|
||||
$(MAGIC_FRAGMENT_DIR)/animation \
|
||||
$(MAGIC_FRAGMENT_DIR)/apl \
|
||||
$(MAGIC_FRAGMENT_DIR)/apple \
|
||||
$(MAGIC_FRAGMENT_DIR)/applix \
|
||||
$(MAGIC_FRAGMENT_DIR)/archive \
|
||||
$(MAGIC_FRAGMENT_DIR)/asterix \
|
||||
$(MAGIC_FRAGMENT_DIR)/att3b \
|
||||
$(MAGIC_FRAGMENT_DIR)/audio \
|
||||
$(MAGIC_FRAGMENT_DIR)/basis \
|
||||
$(MAGIC_FRAGMENT_DIR)/bflt \
|
||||
$(MAGIC_FRAGMENT_DIR)/blender \
|
||||
$(MAGIC_FRAGMENT_DIR)/blit \
|
||||
$(MAGIC_FRAGMENT_DIR)/bout \
|
||||
$(MAGIC_FRAGMENT_DIR)/bsdi \
|
||||
$(MAGIC_FRAGMENT_DIR)/btsnoop \
|
||||
$(MAGIC_FRAGMENT_DIR)/c-lang \
|
||||
$(MAGIC_FRAGMENT_DIR)/c64 \
|
||||
$(MAGIC_FRAGMENT_DIR)/cad \
|
||||
$(MAGIC_FRAGMENT_DIR)/cafebabe \
|
||||
$(MAGIC_FRAGMENT_DIR)/cddb \
|
||||
$(MAGIC_FRAGMENT_DIR)/chord \
|
||||
$(MAGIC_FRAGMENT_DIR)/cisco \
|
||||
$(MAGIC_FRAGMENT_DIR)/citrus \
|
||||
$(MAGIC_FRAGMENT_DIR)/clarion \
|
||||
$(MAGIC_FRAGMENT_DIR)/claris \
|
||||
$(MAGIC_FRAGMENT_DIR)/clipper \
|
||||
$(MAGIC_FRAGMENT_DIR)/commands \
|
||||
$(MAGIC_FRAGMENT_DIR)/communications \
|
||||
$(MAGIC_FRAGMENT_DIR)/compress \
|
||||
$(MAGIC_FRAGMENT_DIR)/console \
|
||||
$(MAGIC_FRAGMENT_DIR)/convex \
|
||||
$(MAGIC_FRAGMENT_DIR)/cracklib \
|
||||
$(MAGIC_FRAGMENT_DIR)/ctags \
|
||||
$(MAGIC_FRAGMENT_DIR)/dact \
|
||||
$(MAGIC_FRAGMENT_DIR)/database \
|
||||
$(MAGIC_FRAGMENT_DIR)/diamond \
|
||||
$(MAGIC_FRAGMENT_DIR)/diff \
|
||||
$(MAGIC_FRAGMENT_DIR)/digital \
|
||||
$(MAGIC_FRAGMENT_DIR)/dolby \
|
||||
$(MAGIC_FRAGMENT_DIR)/dump \
|
||||
$(MAGIC_FRAGMENT_DIR)/dyadic \
|
||||
$(MAGIC_FRAGMENT_DIR)/editors \
|
||||
$(MAGIC_FRAGMENT_DIR)/efi \
|
||||
$(MAGIC_FRAGMENT_DIR)/elf \
|
||||
$(MAGIC_FRAGMENT_DIR)/encore \
|
||||
$(MAGIC_FRAGMENT_DIR)/epoc \
|
||||
$(MAGIC_FRAGMENT_DIR)/erlang \
|
||||
$(MAGIC_FRAGMENT_DIR)/esri \
|
||||
$(MAGIC_FRAGMENT_DIR)/fcs \
|
||||
$(MAGIC_FRAGMENT_DIR)/filesystems \
|
||||
$(MAGIC_FRAGMENT_DIR)/flash \
|
||||
$(MAGIC_FRAGMENT_DIR)/fonts \
|
||||
$(MAGIC_FRAGMENT_DIR)/fortran \
|
||||
$(MAGIC_FRAGMENT_DIR)/frame \
|
||||
$(MAGIC_FRAGMENT_DIR)/freebsd \
|
||||
$(MAGIC_FRAGMENT_DIR)/fsav \
|
||||
$(MAGIC_FRAGMENT_DIR)/games \
|
||||
$(MAGIC_FRAGMENT_DIR)/gcc \
|
||||
$(MAGIC_FRAGMENT_DIR)/geos \
|
||||
$(MAGIC_FRAGMENT_DIR)/gimp \
|
||||
$(MAGIC_FRAGMENT_DIR)/gnome-keyring \
|
||||
$(MAGIC_FRAGMENT_DIR)/gnu \
|
||||
$(MAGIC_FRAGMENT_DIR)/gnumeric \
|
||||
$(MAGIC_FRAGMENT_DIR)/grace \
|
||||
$(MAGIC_FRAGMENT_DIR)/graphviz \
|
||||
$(MAGIC_FRAGMENT_DIR)/gringotts \
|
||||
$(MAGIC_FRAGMENT_DIR)/hitachi-sh \
|
||||
$(MAGIC_FRAGMENT_DIR)/hp \
|
||||
$(MAGIC_FRAGMENT_DIR)/human68k \
|
||||
$(MAGIC_FRAGMENT_DIR)/ibm370 \
|
||||
$(MAGIC_FRAGMENT_DIR)/ibm6000 \
|
||||
$(MAGIC_FRAGMENT_DIR)/iff \
|
||||
$(MAGIC_FRAGMENT_DIR)/images \
|
||||
$(MAGIC_FRAGMENT_DIR)/inform \
|
||||
$(MAGIC_FRAGMENT_DIR)/intel \
|
||||
$(MAGIC_FRAGMENT_DIR)/interleaf \
|
||||
$(MAGIC_FRAGMENT_DIR)/island \
|
||||
$(MAGIC_FRAGMENT_DIR)/ispell \
|
||||
$(MAGIC_FRAGMENT_DIR)/java \
|
||||
$(MAGIC_FRAGMENT_DIR)/jpeg \
|
||||
$(MAGIC_FRAGMENT_DIR)/karma \
|
||||
$(MAGIC_FRAGMENT_DIR)/kde \
|
||||
$(MAGIC_FRAGMENT_DIR)/lecter \
|
||||
$(MAGIC_FRAGMENT_DIR)/lex \
|
||||
$(MAGIC_FRAGMENT_DIR)/lif \
|
||||
$(MAGIC_FRAGMENT_DIR)/linux \
|
||||
$(MAGIC_FRAGMENT_DIR)/lisp \
|
||||
$(MAGIC_FRAGMENT_DIR)/llvm \
|
||||
$(MAGIC_FRAGMENT_DIR)/lua \
|
||||
$(MAGIC_FRAGMENT_DIR)/luks \
|
||||
$(MAGIC_FRAGMENT_DIR)/mach \
|
||||
$(MAGIC_FRAGMENT_DIR)/macintosh \
|
||||
$(MAGIC_FRAGMENT_DIR)/magic \
|
||||
$(MAGIC_FRAGMENT_DIR)/mail.news \
|
||||
$(MAGIC_FRAGMENT_DIR)/maple \
|
||||
$(MAGIC_FRAGMENT_DIR)/mathcad \
|
||||
$(MAGIC_FRAGMENT_DIR)/mathematica \
|
||||
$(MAGIC_FRAGMENT_DIR)/matroska \
|
||||
$(MAGIC_FRAGMENT_DIR)/mcrypt \
|
||||
$(MAGIC_FRAGMENT_DIR)/mercurial \
|
||||
$(MAGIC_FRAGMENT_DIR)/mime \
|
||||
$(MAGIC_FRAGMENT_DIR)/mips \
|
||||
$(MAGIC_FRAGMENT_DIR)/mirage \
|
||||
$(MAGIC_FRAGMENT_DIR)/misctools \
|
||||
$(MAGIC_FRAGMENT_DIR)/mkid \
|
||||
$(MAGIC_FRAGMENT_DIR)/mlssa \
|
||||
$(MAGIC_FRAGMENT_DIR)/mmdf \
|
||||
$(MAGIC_FRAGMENT_DIR)/modem \
|
||||
$(MAGIC_FRAGMENT_DIR)/motorola \
|
||||
$(MAGIC_FRAGMENT_DIR)/mozilla \
|
||||
$(MAGIC_FRAGMENT_DIR)/msdos \
|
||||
$(MAGIC_FRAGMENT_DIR)/msvc \
|
||||
$(MAGIC_FRAGMENT_DIR)/mup \
|
||||
$(MAGIC_FRAGMENT_DIR)/natinst \
|
||||
$(MAGIC_FRAGMENT_DIR)/ncr \
|
||||
$(MAGIC_FRAGMENT_DIR)/netbsd \
|
||||
$(MAGIC_FRAGMENT_DIR)/netscape \
|
||||
$(MAGIC_FRAGMENT_DIR)/netware \
|
||||
$(MAGIC_FRAGMENT_DIR)/news \
|
||||
$(MAGIC_FRAGMENT_DIR)/nitpicker \
|
||||
$(MAGIC_FRAGMENT_DIR)/ocaml \
|
||||
$(MAGIC_FRAGMENT_DIR)/octave \
|
||||
$(MAGIC_FRAGMENT_DIR)/ole2compounddocs \
|
||||
$(MAGIC_FRAGMENT_DIR)/olf \
|
||||
$(MAGIC_FRAGMENT_DIR)/os2 \
|
||||
$(MAGIC_FRAGMENT_DIR)/os400 \
|
||||
$(MAGIC_FRAGMENT_DIR)/os9 \
|
||||
$(MAGIC_FRAGMENT_DIR)/osf1 \
|
||||
$(MAGIC_FRAGMENT_DIR)/palm \
|
||||
$(MAGIC_FRAGMENT_DIR)/parix \
|
||||
$(MAGIC_FRAGMENT_DIR)/pbm \
|
||||
$(MAGIC_FRAGMENT_DIR)/pdf \
|
||||
$(MAGIC_FRAGMENT_DIR)/pdp \
|
||||
$(MAGIC_FRAGMENT_DIR)/perl \
|
||||
$(MAGIC_FRAGMENT_DIR)/pgp \
|
||||
$(MAGIC_FRAGMENT_DIR)/pkgadd \
|
||||
$(MAGIC_FRAGMENT_DIR)/plan9 \
|
||||
$(MAGIC_FRAGMENT_DIR)/plus5 \
|
||||
$(MAGIC_FRAGMENT_DIR)/printer \
|
||||
$(MAGIC_FRAGMENT_DIR)/project \
|
||||
$(MAGIC_FRAGMENT_DIR)/psdbms \
|
||||
$(MAGIC_FRAGMENT_DIR)/psion \
|
||||
$(MAGIC_FRAGMENT_DIR)/pulsar \
|
||||
$(MAGIC_FRAGMENT_DIR)/pyramid \
|
||||
$(MAGIC_FRAGMENT_DIR)/python \
|
||||
$(MAGIC_FRAGMENT_DIR)/revision \
|
||||
$(MAGIC_FRAGMENT_DIR)/riff \
|
||||
$(MAGIC_FRAGMENT_DIR)/rpm \
|
||||
$(MAGIC_FRAGMENT_DIR)/rtf \
|
||||
$(MAGIC_FRAGMENT_DIR)/ruby \
|
||||
$(MAGIC_FRAGMENT_DIR)/sc \
|
||||
$(MAGIC_FRAGMENT_DIR)/sccs \
|
||||
$(MAGIC_FRAGMENT_DIR)/scientific \
|
||||
$(MAGIC_FRAGMENT_DIR)/securitycerts \
|
||||
$(MAGIC_FRAGMENT_DIR)/sendmail \
|
||||
$(MAGIC_FRAGMENT_DIR)/sequent \
|
||||
$(MAGIC_FRAGMENT_DIR)/sgi \
|
||||
$(MAGIC_FRAGMENT_DIR)/sgml \
|
||||
$(MAGIC_FRAGMENT_DIR)/sharc \
|
||||
$(MAGIC_FRAGMENT_DIR)/sinclair \
|
||||
$(MAGIC_FRAGMENT_DIR)/sketch \
|
||||
$(MAGIC_FRAGMENT_DIR)/smalltalk \
|
||||
$(MAGIC_FRAGMENT_DIR)/sniffer \
|
||||
$(MAGIC_FRAGMENT_DIR)/softquad \
|
||||
$(MAGIC_FRAGMENT_DIR)/spec \
|
||||
$(MAGIC_FRAGMENT_DIR)/spectrum \
|
||||
$(MAGIC_FRAGMENT_DIR)/sql \
|
||||
$(MAGIC_FRAGMENT_DIR)/sun \
|
||||
$(MAGIC_FRAGMENT_DIR)/sysex \
|
||||
$(MAGIC_FRAGMENT_DIR)/teapot \
|
||||
$(MAGIC_FRAGMENT_DIR)/terminfo \
|
||||
$(MAGIC_FRAGMENT_DIR)/tex \
|
||||
$(MAGIC_FRAGMENT_DIR)/tgif \
|
||||
$(MAGIC_FRAGMENT_DIR)/ti-8x \
|
||||
$(MAGIC_FRAGMENT_DIR)/timezone \
|
||||
$(MAGIC_FRAGMENT_DIR)/troff \
|
||||
$(MAGIC_FRAGMENT_DIR)/tuxedo \
|
||||
$(MAGIC_FRAGMENT_DIR)/typeset \
|
||||
$(MAGIC_FRAGMENT_DIR)/unicode \
|
||||
$(MAGIC_FRAGMENT_DIR)/unknown \
|
||||
$(MAGIC_FRAGMENT_DIR)/uuencode \
|
||||
$(MAGIC_FRAGMENT_DIR)/varied.out \
|
||||
$(MAGIC_FRAGMENT_DIR)/varied.script \
|
||||
$(MAGIC_FRAGMENT_DIR)/vax \
|
||||
$(MAGIC_FRAGMENT_DIR)/vicar \
|
||||
$(MAGIC_FRAGMENT_DIR)/virtutech \
|
||||
$(MAGIC_FRAGMENT_DIR)/visx \
|
||||
$(MAGIC_FRAGMENT_DIR)/vms \
|
||||
$(MAGIC_FRAGMENT_DIR)/vmware \
|
||||
$(MAGIC_FRAGMENT_DIR)/vorbis \
|
||||
$(MAGIC_FRAGMENT_DIR)/vxl \
|
||||
$(MAGIC_FRAGMENT_DIR)/warc \
|
||||
$(MAGIC_FRAGMENT_DIR)/weak \
|
||||
$(MAGIC_FRAGMENT_DIR)/windows \
|
||||
$(MAGIC_FRAGMENT_DIR)/wordprocessors \
|
||||
$(MAGIC_FRAGMENT_DIR)/xdelta \
|
||||
$(MAGIC_FRAGMENT_DIR)/xenix \
|
||||
$(MAGIC_FRAGMENT_DIR)/xilinx \
|
||||
$(MAGIC_FRAGMENT_DIR)/xo65 \
|
||||
$(MAGIC_FRAGMENT_DIR)/xwindows \
|
||||
$(MAGIC_FRAGMENT_DIR)/zilog \
|
||||
$(MAGIC_FRAGMENT_DIR)/zyxel
|
||||
|
||||
magic: Header Localstuff $(magic_FRAGMENTS)
|
||||
cat $(srcdir)/Header $(srcdir)/Localstuff > $@
|
||||
for frag in $(magic_FRAGMENTS); do \
|
||||
if test -f $(srcdir)/$$frag; then \
|
||||
f=$(srcdir)/$$frag; \
|
||||
else \
|
||||
f=$$frag; \
|
||||
fi; \
|
||||
cat $$f; \
|
||||
done >> $@
|
||||
MAGIC = magic.mgc
|
||||
CLEANFILES = ${MAGIC}
|
||||
|
||||
# FIXME: Build file natively as well so that it can be used to compile
|
||||
# the target's magic file
|
||||
if IS_CROSS_COMPILE
|
||||
FILE_COMPILE = file
|
||||
FILE_COMPILE_DEP =
|
||||
else
|
||||
FILE_COMPILE = $(top_builddir)/src/file
|
||||
FILE_COMPILE_DEP = $(FILE_COMPILE)
|
||||
endif
|
||||
|
||||
magic.mgc: magic
|
||||
$(FILE_COMPILE) -C -m magic
|
||||
|
||||
magic.mime.mgc: magic.mime
|
||||
$(FILE_COMPILE) -C -m $(srcdir)/magic.mime
|
||||
|
||||
magic_FRAGMENTS = \
|
||||
Magdir/acorn \
|
||||
Magdir/adi \
|
||||
Magdir/adventure \
|
||||
Magdir/allegro \
|
||||
Magdir/alliant \
|
||||
Magdir/alpha \
|
||||
Magdir/amanda \
|
||||
Magdir/amigaos \
|
||||
Magdir/animation \
|
||||
Magdir/apl \
|
||||
Magdir/apple \
|
||||
Magdir/applix \
|
||||
Magdir/archive \
|
||||
Magdir/asterix \
|
||||
Magdir/att3b \
|
||||
Magdir/audio \
|
||||
Magdir/basis \
|
||||
Magdir/bflt \
|
||||
Magdir/blender \
|
||||
Magdir/blit \
|
||||
Magdir/bout \
|
||||
Magdir/bsdi \
|
||||
Magdir/btsnoop \
|
||||
Magdir/cad \
|
||||
Magdir/cafebabe \
|
||||
Magdir/c-lang \
|
||||
Magdir/c64 \
|
||||
Magdir/cddb \
|
||||
Magdir/chord \
|
||||
Magdir/cisco \
|
||||
Magdir/citrus \
|
||||
Magdir/claris \
|
||||
Magdir/clipper \
|
||||
Magdir/cracklib \
|
||||
Magdir/spec \
|
||||
Magdir/commands \
|
||||
Magdir/communications \
|
||||
Magdir/compress \
|
||||
Magdir/console \
|
||||
Magdir/convex \
|
||||
Magdir/ctags \
|
||||
Magdir/dact \
|
||||
Magdir/database \
|
||||
Magdir/diamond \
|
||||
Magdir/diff \
|
||||
Magdir/digital \
|
||||
Magdir/dolby \
|
||||
Magdir/dump \
|
||||
Magdir/editors \
|
||||
Magdir/elf \
|
||||
Magdir/encore \
|
||||
Magdir/epoc \
|
||||
Magdir/esri \
|
||||
Magdir/fcs \
|
||||
Magdir/filesystems \
|
||||
Magdir/flash \
|
||||
Magdir/fonts \
|
||||
Magdir/frame \
|
||||
Magdir/freebsd \
|
||||
Magdir/fsav \
|
||||
Magdir/games \
|
||||
Magdir/geos \
|
||||
Magdir/gcc \
|
||||
Magdir/gimp \
|
||||
Magdir/gnu \
|
||||
Magdir/grace \
|
||||
Magdir/gringotts \
|
||||
Magdir/hitachi-sh \
|
||||
Magdir/hp \
|
||||
Magdir/human68k \
|
||||
Magdir/ibm370 \
|
||||
Magdir/ibm6000 \
|
||||
Magdir/iff \
|
||||
Magdir/images \
|
||||
Magdir/intel \
|
||||
Magdir/interleaf \
|
||||
Magdir/island \
|
||||
Magdir/ispell \
|
||||
Magdir/java \
|
||||
Magdir/jpeg \
|
||||
Magdir/karma \
|
||||
Magdir/lecter \
|
||||
Magdir/lex \
|
||||
Magdir/lif \
|
||||
Magdir/linux \
|
||||
Magdir/lisp \
|
||||
Magdir/mach \
|
||||
Magdir/macintosh \
|
||||
Magdir/magic \
|
||||
Magdir/mail.news \
|
||||
Magdir/maple \
|
||||
Magdir/mathematica \
|
||||
Magdir/matroska \
|
||||
Magdir/mcrypt \
|
||||
Magdir/mime \
|
||||
Magdir/mips \
|
||||
Magdir/mirage \
|
||||
Magdir/misctools \
|
||||
Magdir/mkid \
|
||||
Magdir/mlssa \
|
||||
Magdir/mmdf \
|
||||
Magdir/modem \
|
||||
Magdir/motorola \
|
||||
Magdir/msdos \
|
||||
Magdir/msvc \
|
||||
Magdir/mup \
|
||||
Magdir/natinst \
|
||||
Magdir/ncr \
|
||||
Magdir/netbsd \
|
||||
Magdir/netscape \
|
||||
Magdir/news \
|
||||
Magdir/nitpicker \
|
||||
Magdir/ocaml \
|
||||
Magdir/octave \
|
||||
Magdir/olf \
|
||||
Magdir/os2 \
|
||||
Magdir/os400 \
|
||||
Magdir/os9 \
|
||||
Magdir/osf1 \
|
||||
Magdir/palm \
|
||||
Magdir/parix \
|
||||
Magdir/pbm \
|
||||
Magdir/pdf \
|
||||
Magdir/pdp \
|
||||
Magdir/perl \
|
||||
Magdir/pgp \
|
||||
Magdir/pkgadd \
|
||||
Magdir/plan9 \
|
||||
Magdir/plus5 \
|
||||
Magdir/printer \
|
||||
Magdir/project \
|
||||
Magdir/psdbms \
|
||||
Magdir/psion \
|
||||
Magdir/pulsar \
|
||||
Magdir/pyramid \
|
||||
Magdir/python \
|
||||
Magdir/revision \
|
||||
Magdir/riff \
|
||||
Magdir/rpm \
|
||||
Magdir/rtf \
|
||||
Magdir/sc \
|
||||
Magdir/sccs \
|
||||
Magdir/sendmail \
|
||||
Magdir/sequent \
|
||||
Magdir/sgi \
|
||||
Magdir/sgml \
|
||||
Magdir/sharc \
|
||||
Magdir/sinclair \
|
||||
Magdir/sketch \
|
||||
Magdir/smalltalk \
|
||||
Magdir/sniffer \
|
||||
Magdir/dyadic \
|
||||
Magdir/scientific \
|
||||
Magdir/softquad \
|
||||
Magdir/spectrum \
|
||||
Magdir/sql \
|
||||
Magdir/sun \
|
||||
Magdir/sysex \
|
||||
Magdir/teapot \
|
||||
Magdir/terminfo \
|
||||
Magdir/tex \
|
||||
Magdir/tgif \
|
||||
Magdir/ti-8x \
|
||||
Magdir/timezone \
|
||||
Magdir/troff \
|
||||
Magdir/tuxedo \
|
||||
Magdir/typeset \
|
||||
Magdir/unknown \
|
||||
Magdir/unicode \
|
||||
Magdir/uuencode \
|
||||
Magdir/varied.out \
|
||||
Magdir/varied.script \
|
||||
Magdir/vax \
|
||||
Magdir/vicar \
|
||||
Magdir/virtutech \
|
||||
Magdir/visx \
|
||||
Magdir/vms \
|
||||
Magdir/vmware \
|
||||
Magdir/vorbis \
|
||||
Magdir/vxl \
|
||||
Magdir/wordprocessors \
|
||||
Magdir/xdelta \
|
||||
Magdir/xenix \
|
||||
Magdir/xo65 \
|
||||
Magdir/xwindows \
|
||||
Magdir/zilog \
|
||||
Magdir/zyxel
|
||||
${MAGIC}: $(EXTRA_DIST) $(FILE_COMPILE_DEP)
|
||||
$(FILE_COMPILE) -C -m $(MAGIC_FRAGMENT_DIR)
|
||||
@mv $(MAGIC_FRAGMENT_BASE).mgc $@
|
||||
|
107
dist/file/python/Makefile.in
vendored
107
dist/file/python/Makefile.in
vendored
@ -1,8 +1,8 @@
|
||||
# Makefile.in generated by automake 1.9.6 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.10 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# 2003, 2004, 2005, 2006 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.
|
||||
@ -13,15 +13,11 @@
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
@ -39,18 +35,16 @@ subdir = python
|
||||
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
@ -77,24 +71,20 @@ EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FSECT5_FALSE = @FSECT5_FALSE@
|
||||
FSECT5_TRUE = @FSECT5_TRUE@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IS_CROSS_COMPILE_FALSE = @IS_CROSS_COMPILE_FALSE@
|
||||
IS_CROSS_COMPILE_TRUE = @IS_CROSS_COMPILE_TRUE@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
@ -108,16 +98,14 @@ SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
WARNINGS = @WARNINGS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
@ -129,7 +117,11 @@ 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@
|
||||
@ -137,26 +129,33 @@ 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_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
EXTRA_DIST = README example.py py_magic.c py_magic.h setup.py
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -181,9 +180,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
@ -191,10 +190,6 @@ mostlyclean-libtool:
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
@ -203,22 +198,21 @@ CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
@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; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
@ -263,7 +257,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
@ -277,12 +271,20 @@ info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
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
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
@ -301,17 +303,20 @@ ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
distclean distclean-generic distclean-libtool distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
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 uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
|
||||
|
||||
# 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.
|
||||
|
2
dist/file/python/py_magic.c
vendored
2
dist/file/python/py_magic.c
vendored
@ -1,5 +1,3 @@
|
||||
/* $NetBSD: py_magic.c,v 1.1.1.1 2005/02/21 15:16:06 pooka Exp $ */
|
||||
|
||||
/*
|
||||
Python wrappers for magic functions.
|
||||
|
||||
|
2
dist/file/python/py_magic.h
vendored
2
dist/file/python/py_magic.h
vendored
@ -1,5 +1,3 @@
|
||||
/* $NetBSD: py_magic.h,v 1.1.1.1 2005/02/21 15:16:06 pooka Exp $ */
|
||||
|
||||
/*
|
||||
Python wrappers for magic functions.
|
||||
|
||||
|
8
dist/file/src/Makefile.am
vendored
8
dist/file/src/Makefile.am
vendored
@ -1,16 +1,18 @@
|
||||
MAGIC = $(pkgdatadir)/magic
|
||||
MAGIC = $(pkgdatadir)/magic
|
||||
lib_LTLIBRARIES = libmagic.la
|
||||
include_HEADERS = magic.h
|
||||
EXTRA_DIST = test.c
|
||||
|
||||
bin_PROGRAMS = file
|
||||
|
||||
AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"'
|
||||
AM_CFLAGS = @WARNINGS@
|
||||
|
||||
libmagic_la_SOURCES = magic.c apprentice.c softmagic.c ascmagic.c \
|
||||
compress.c is_tar.c readelf.c print.c fsmagic.c \
|
||||
funcs.c file.h names.h patchlevel.h readelf.h tar.h apptype.c
|
||||
funcs.c file.h names.h patchlevel.h readelf.h tar.h apptype.c \
|
||||
file_opts.h elfclass.h mygetopt.h
|
||||
libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0
|
||||
libmagic_la_LIBADD = $(LTLIBOBJS)
|
||||
|
||||
file_SOURCES = file.c
|
||||
file_LDADD = libmagic.la
|
||||
|
6
dist/file/src/apptype.c
vendored
6
dist/file/src/apptype.c
vendored
@ -1,5 +1,3 @@
|
||||
/* $NetBSD: apptype.c,v 1.1.1.7 2007/03/04 14:54:52 pooka Exp $ */
|
||||
|
||||
/*
|
||||
* Adapted from: apptype.c, Written by Eberhard Mattes and put into the
|
||||
* public domain
|
||||
@ -34,11 +32,7 @@
|
||||
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
FILE_RCSID("@(#)$File: apptype.c,v 1.7 2007/01/12 17:38:27 christos Exp $")
|
||||
#else
|
||||
__RCSID("$NetBSD: apptype.c,v 1.1.1.7 2007/03/04 14:54:52 pooka Exp $");
|
||||
#endif
|
||||
#endif /* lint */
|
||||
|
||||
#ifdef __EMX__
|
||||
|
43
dist/file/src/asprintf.c
vendored
Normal file
43
dist/file/src/asprintf.c
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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 <stdarg.h>
|
||||
|
||||
int vasprintf(char **ptr, const char *format_string, va_list vargs);
|
||||
|
||||
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;
|
||||
}
|
69
dist/file/src/elfclass.h
vendored
Normal file
69
dist/file/src/elfclass.h
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* 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);
|
||||
switch (type) {
|
||||
#ifdef ELFCORE
|
||||
case ET_CORE:
|
||||
if (dophn_core(ms, clazz, swap, fd,
|
||||
(off_t)elf_getu(swap, elfhdr.e_phoff),
|
||||
elf_getu16(swap, elfhdr.e_phnum),
|
||||
(size_t)elf_getu16(swap, elfhdr.e_phentsize),
|
||||
fsize, &flags) == -1)
|
||||
return -1;
|
||||
break;
|
||||
#endif
|
||||
case ET_EXEC:
|
||||
case ET_DYN:
|
||||
if (dophn_exec(ms, clazz, swap, fd,
|
||||
(off_t)elf_getu(swap, elfhdr.e_phoff),
|
||||
elf_getu16(swap, elfhdr.e_phnum),
|
||||
(size_t)elf_getu16(swap, elfhdr.e_phentsize),
|
||||
fsize, &flags, elf_getu16(swap, elfhdr.e_shnum))
|
||||
== -1)
|
||||
return -1;
|
||||
/*FALLTHROUGH*/
|
||||
case ET_REL:
|
||||
if (doshn(ms, clazz, swap, fd,
|
||||
(off_t)elf_getu(swap, elfhdr.e_shoff),
|
||||
elf_getu16(swap, elfhdr.e_shnum),
|
||||
(size_t)elf_getu16(swap, elfhdr.e_shentsize),
|
||||
&flags,
|
||||
elf_getu16(swap, elfhdr.e_machine)) == -1)
|
||||
return -1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 1;
|
48
dist/file/src/file_opts.h
vendored
Normal file
48
dist/file/src/file_opts.h
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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, " display this help and exit\n")
|
||||
OPT('v', "version", 0, " output version information and exit\n")
|
||||
OPT('m', "magic-file", 1, " LIST use LIST as a colon-separated list of magic\n"
|
||||
" number files\n")
|
||||
OPT('z', "uncompress", 0, " try to look inside compressed files\n")
|
||||
OPT('b', "brief", 0, " do not prepend filenames to output lines\n")
|
||||
OPT('c', "checking-printout", 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, " TEST exclude TEST from the list of test to be\n"
|
||||
" performed for file. Valid tests are:\n"
|
||||
" ascii, apptype, compress, elf, soft, tar, tokens, troff\n")
|
||||
OPT('f', "files-from", 1, " FILE read the filenames to be examined from FILE\n")
|
||||
OPT('F', "separator", 1, " STRING use string as separator instead of `:'\n")
|
||||
OPT('i', "mime", 0, " output MIME type strings (--mime-type and\n"
|
||||
" --mime-encoding)\n")
|
||||
OPT_LONGONLY("mime-type", 0, " output the MIME type\n")
|
||||
OPT_LONGONLY("mime-encoding", 0, " output the MIME encoding\n")
|
||||
OPT('k', "keep-going", 0, " don't stop at the first match\n")
|
||||
#ifdef S_IFLNK
|
||||
OPT('L', "dereference", 0, " follow symlinks (default)\n")
|
||||
OPT('h', "no-dereference", 0, " don't follow symlinks\n")
|
||||
#endif
|
||||
OPT('n', "no-buffer", 0, " do not buffer output\n")
|
||||
OPT('N', "no-pad", 0, " do not pad output\n")
|
||||
OPT('0', "print0", 0, " terminate filenames with ASCII NUL\n")
|
||||
#if defined(HAVE_UTIME) || defined(HAVE_UTIMES)
|
||||
OPT('p', "preserve-date", 0, " preserve access times on files\n")
|
||||
#endif
|
||||
OPT('r', "raw", 0, " don't translate unprintable chars to \\ooo\n")
|
||||
OPT('s', "special-files", 0, " treat special (block/char devices) files as\n"
|
||||
" ordinary ones\n")
|
||||
OPT('C', "compile", 0, " compile file specified by -m\n")
|
||||
OPT('d', "debug", 0, " print debugging messages\n")
|
496
dist/file/src/getopt_long.c
vendored
Normal file
496
dist/file/src/getopt_long.c
vendored
Normal file
@ -0,0 +1,496 @@
|
||||
/* $NetBSD: getopt_long.c,v 1.1.1.1 2008/08/30 11:00:56 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include <assert.h>
|
||||
#ifdef HAVE_ERR_H
|
||||
#include <err.h>
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#define warnx printf
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#ifdef HAVE_GETOPT_H
|
||||
#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
|
||||
}
|
68
dist/file/src/mygetopt.h
vendored
Normal file
68
dist/file/src/mygetopt.h
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
/* $NetBSD: mygetopt.h,v 1.1.1.1 2008/08/30 11:01:06 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_ */
|
641
dist/file/src/vasprintf.c
vendored
Normal file
641
dist/file/src/vasprintf.c
vendored
Normal file
@ -0,0 +1,641 @@
|
||||
/*
|
||||
* 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@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 ('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.
|
||||
|
||||
*/
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
#ifdef HAVE_LIMITS_H
|
||||
#include <limits.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 */
|
||||
if (*SRCTXT == 'L' || *SRCTXT == 'h' || *SRCTXT == 'l') {
|
||||
modifier = *SRCTXT;
|
||||
SRCTXT++;
|
||||
if (modifier=='l' && *SRCTXT=='l') {
|
||||
SRCTXT++;
|
||||
modifier = 'L'; /* 'll' == 'L' long long == long double */
|
||||
} /* only for compatibility ; not portable */
|
||||
INCOHERENT_TEST();
|
||||
} else
|
||||
modifier = -1; /* no modifier specified */
|
||||
|
||||
/* 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));
|
||||
/* '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 len, 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 0 */
|
||||
len = s->real_len + 1;
|
||||
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 0 */
|
||||
len = s->maxlen + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* for (v)asnprintf */
|
||||
dummy_base = s->buffer_base;
|
||||
save_len = 0; /* just to avoid a compiler warning */
|
||||
|
||||
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:
|
||||
if (s->buffer_base != NULL)
|
||||
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 (va_list));
|
||||
#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;
|
||||
}
|
11
dist/file/tests/Makefile.am
vendored
Normal file
11
dist/file/tests/Makefile.am
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
check_PROGRAMS = test
|
||||
test_LDADD = $(top_builddir)/src/libmagic.la
|
||||
test_CPPFLAGS = -I$(top_builddir)/src
|
||||
|
||||
EXTRA_DIST = \
|
||||
gedcom.magic gedcom.testfile gedcom.result
|
||||
|
||||
T = $(top_srcdir)/tests
|
||||
check-local:
|
||||
MAGIC=$(top_builddir)/magic/magic ./test
|
||||
for i in $T/*.testfile; do MAGIC=$T/$${i%%.testfile}.magic $(top_builddir)/tests/test $T/$$i $T/$${i%%.testfile}.result; done
|
455
dist/file/tests/Makefile.in
vendored
Normal file
455
dist/file/tests/Makefile.in
vendored
Normal file
@ -0,0 +1,455 @@
|
||||
# Makefile.in generated by automake 1.10 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006 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.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@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
|
||||
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
test_SOURCES = test.c
|
||||
test_OBJECTS = test-test.$(OBJEXT)
|
||||
test_DEPENDENCIES = $(top_builddir)/src/libmagic.la
|
||||
DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
SOURCES = test.c
|
||||
DIST_SOURCES = test.c
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
RANLIB = @RANLIB@
|
||||
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_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
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_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
test_LDADD = $(top_builddir)/src/libmagic.la
|
||||
test_CPPFLAGS = -I$(top_builddir)/src
|
||||
EXTRA_DIST = \
|
||||
gedcom.magic gedcom.testfile gedcom.result
|
||||
|
||||
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 \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu tests/Makefile
|
||||
.PRECIOUS: 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
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
@list='$(check_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f $$p $$f"; \
|
||||
rm -f $$p $$f ; \
|
||||
done
|
||||
test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES)
|
||||
@rm -f test$(EXEEXT)
|
||||
$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
test-test.o: test.c
|
||||
@am__fastdepCC_TRUE@ $(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
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test.c' object='test-test.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(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
|
||||
@am__fastdepCC_TRUE@ $(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`
|
||||
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='test.c' object='test-test.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(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: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
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 $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$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:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
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
|
||||
|
||||
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: install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
|
||||
clean-checkPROGRAMS clean-generic clean-libtool ctags \
|
||||
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 uninstall uninstall-am
|
||||
|
||||
check-local:
|
||||
MAGIC=$(top_builddir)/magic/magic ./test
|
||||
for i in $T/*.testfile; do MAGIC=$T/$${i%%.testfile}.magic $(top_builddir)/tests/test $T/$$i $T/$${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:
|
17
dist/file/tests/README
vendored
Normal file
17
dist/file/tests/README
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
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 three files:
|
||||
|
||||
TEST.magic
|
||||
TEST.testfile
|
||||
TEST.result
|
||||
|
||||
where TEST is the base name of the test, TEST.magic contains the magic
|
||||
used, TEST.testfile is the input, and TEST.result is the desired
|
||||
output from file.
|
||||
|
||||
It suffices to add a triplet of test files to the directory to have
|
||||
them included in "make check".
|
6
dist/file/tests/gedcom.magic
vendored
Normal file
6
dist/file/tests/gedcom.magic
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
# GEDCOM Genealogy file
|
||||
|
||||
0 string/c 0\ HEAD GEDCOM genealogy data
|
||||
>&0 search 1\ GEDC
|
||||
>>&0 search 2\ VERS version
|
||||
>>>&1 string >\0 %s
|
1
dist/file/tests/gedcom.result
vendored
Normal file
1
dist/file/tests/gedcom.result
vendored
Normal file
@ -0,0 +1 @@
|
||||
GEDCOM genealogy data version 5.5
|
8
dist/file/tests/gedcom.testfile
vendored
Normal file
8
dist/file/tests/gedcom.testfile
vendored
Normal file
@ -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
|
114
dist/file/tests/test.c
vendored
Normal file
114
dist/file/tests/test.c
vendored
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user