LINT = splint
EXTRA_DIST = LEGAL.NOTICE MAINT Makefile.std magic2mime magic.mime \
- Localstuff Header $(magic_FRAGMENTS) file.man magic.man
+ Localstuff Header $(magic_FRAGMENTS)
BUILT_SOURCES = listobjs $(man_MANS) magic magic.mgc magic.mime.mgc
+SUBDIRS = doc
+
noinst_HEADERS = debug.h names.h patchlevel.h readelf.h system.h tar.h \
file.h
file_LDFLAGS = -all-static
file_LDADD = libfmagic.la
-man_MAGIC = magic.@fsect@
-#man_MANS = file.1 $(man_MAGIC)
-noinst_MANS = file.1 $(man_MAGIC)
-
#MAGIC = @datadir@/magic
#data_DATA = magic magic.mime magic.mgc magic.mime.mgc
MAGIC = $(pkglibdir)/magic
CPPFLAGS = -DMAGIC='"$(MAGIC)"'
-fsect = @fsect@
-
magic: Header Localstuff $(magic_FRAGMENTS)
cat $(srcdir)/Header $(srcdir)/Localstuff > $@
for frag in $(magic_FRAGMENTS); do \
magic.mime.mgc: magic.mime file
./file -C -m $(srcdir)/magic.mime
-file.1: Makefile file.man
- @rm -f $@
- sed -e s@__CSECTION__@1@g \
- -e s@__FSECTION__@${fsect}@g \
- -e s@__VERSION__@${VERSION}@g \
- -e s@__MAGIC__@${MAGIC}@g $(srcdir)/file.man > $@
-
-magic.${fsect}: Makefile magic.man
- @rm -f $@
- sed -e s@__CSECTION__@1@g \
- -e s@__FSECTION__@${fsect}@g \
- -e s@__VERSION__@${VERSION}@g \
- -e s@__MAGIC__@${MAGIC}@g $(srcdir)/magic.man > $@
-
magic_FRAGMENTS = \
Magdir/acorn \
Magdir/adi \
/*
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Ian F. Darwin and others.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
* apprentice - make one pass through /etc/magic, learning its secrets.
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources,
- * credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users
- * ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
*/
#include "system.h"
#include "file.h"
#include "debug.h"
-FILE_RCSID("@(#)Id: apprentice.c,v 1.49 2002/07/03 19:00:41 christos Exp ")
+FILE_RCSID("@(#)Id: apprentice.c,v 1.57 2003/03/28 21:02:03 christos Exp ")
/*@access fmagic @*/
break;
default:
file_magwarn("can't happen: m->type=%d\n", m->type);
- return -1;
+ return ~0U;
}
return v;
}
AC_CHECK_LIB(z, gzopen)
dnl AC_CHECK_LIB(bz2, BZ2_bzReadOpen)
-AC_OUTPUT(Makefile)
+AC_OUTPUT(Makefile doc/Makefile)
+++ /dev/null
-.TH FILE __CSECTION__ "Copyright but distributable"
-.\" Id: file.man,v 1.39 2001/04/27 22:48:33 christos Exp
-.SH NAME
-file
-\- determine file type
-.SH SYNOPSIS
-.B file
-[
-.B \-bciknsvzL
-]
-[
-.B \-f
-.I namefile
-]
-[
-.B \-m
-.I magicfiles
-]
-.I file
-\&...
-.br
-.B file
-.B -C
-[
-.B \-m
-magicfile ]
-.SH DESCRIPTION
-This manual page documents version __VERSION__ of the
-.B file
-command.
-.PP
-.B File
-tests each argument in an attempt to classify it.
-There are three sets of tests, performed in this order:
-filesystem tests, magic number tests, and language tests.
-The
-.I first
-test that succeeds causes the file type to be printed.
-.PP
-The type printed will usually contain one of the words
-.B text
-(the file contains only
-printing characters and a few common control
-characters and is probably safe to read on an
-.SM ASCII
-terminal),
-.B executable
-(the file contains the result of compiling a program
-in a form understandable to some \s-1UNIX\s0 kernel or another),
-or
-.B data
-meaning anything else (data is usually `binary' or non-printable).
-Exceptions are well-known file formats (core files, tar archives)
-that are known to contain binary data.
-When modifying the file
-.I __MAGIC__
-or the program itself,
-.B "preserve these keywords" .
-People depend on knowing that all the readable files in a directory
-have the word ``text'' printed.
-Don't do as Berkeley did and change ``shell commands text''
-to ``shell script''.
-Note that the file
-.I __MAGIC__
-is built mechanically from a large number of small files in
-the subdirectory
-.I Magdir
-in the source distribution of this program.
-.PP
-The filesystem tests are based on examining the return from a
-.BR 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
-.IR <sys/stat.h> .
-.PP
-The magic number tests are used to check for files with data in
-particular fixed formats.
-The canonical example of this is a binary executable (compiled program)
-.I a.out
-file, whose format is defined in
-.I a.out.h
-and possibly
-.I exec.h
-in the standard include directory.
-These files have a `magic number' stored in a particular place
-near the beginning of the file that tells the \s-1UNIX\s0 operating system
-that the file is a binary executable, and which of several types thereof.
-The concept of `magic number' 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
-.I __MAGIC__.mgc ,
-or
-.I __MAGIC__
-if the compile file does not exist.
-.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 ``text'' because they will be mostly readable on nearly any terminal;
-UTF-16 and EBCDIC are only ``character data'' because, while
-they contain text, it is text that will require translation
-before it can be read.
-In addition,
-.B file
-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
-.B file
-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
-.IR names.h )
-that can appear anywhere in the first few blocks of a file.
-For example, the keyword
-.B .br
-indicates that the file is most likely a
-.BR troff (1)
-input file, just as the keyword
-.B 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
-.BR 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 ``data''.
-.SH OPTIONS
-.TP 8
-.B \-b
-Do not prepend filenames to output lines (brief mode).
-.TP 8
-.B \-c
-Cause a checking printout of the parsed form of the magic file.
-This is usually used in conjunction with
-.B \-m
-to debug a new magic file before installing it.
-.TP 8
-.B \-C
-Write a magic.mgc output file that contains a pre-parsed version of
-file.
-.TP 8
-.BI \-f " namefile"
-Read the names of the files to be examined from
-.I namefile
-(one per line)
-before the argument list.
-Either
-.I namefile
-or at least one filename argument must be present;
-to test the standard input, use ``\-'' as a filename argument.
-.TP 8
-.B \-i
-Causes the file command to output mime type strings rather than the more
-traditional human readable ones. Thus it may say
-``text/plain; charset=us-ascii''
-rather
-than ``ASCII text''. In order for this option to work, file changes the way
-it handles files recognised by the command itself (such as many of the
-text file types, directories etc), and makes use of an alternative
-``magic'' file.
-(See ``FILES'' section, below).
-.TP 8
-.B \-k
-Don't stop at the first match, keep going.
-.TP 8
-.BI \-m " list"
-Specify an alternate list of files containing magic numbers.
-This can be a single file, or a colon-separated list of files.
-.TP 8
-.B \-n
-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.
-.TP 8
-.B \-v
-Print the version of the program and exit.
-.TP 8
-.B \-z
-Try to look inside compressed files.
-.TP 8
-.B \-L
-option causes symlinks to be followed, as the like-named option in
-.BR ls (1).
-(on systems that support symbolic links).
-.TP 8
-.B \-s
-Normally,
-.B file
-only attempts to read and determine the type of argument files which
-.BR stat (2)
-reports are ordinary files.
-This prevents problems, because reading special files may have peculiar
-consequences.
-Specifying the
-.BR \-s
-option causes
-.B file
-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
-.B file
-to disregard the file size as reported by
-.BR stat (2)
-since on some systems it reports a zero size for raw disk partitions.
-.SH FILES
-.I __MAGIC__.mgc
-\- defaults compiled list of magic numbers
-.PP
-.I __MAGIC__
-\- default list of magic numbers
-.PP
-.I __MAGIC__.mime
-\- default list of magic numbers, used to output mime types when the -i option
-is specified.
-
-.SH ENVIRONMENT
-The environment variable
-.B MAGIC
-can be used to set the default magic number files.
-.SH SEE ALSO
-.BR magic (__FSECTION__)
-\- description of magic file format.
-.br
-.BR strings (1), " od" (1), " hexdump(1)"
-\- tools for examining non-textfiles.
-.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 behaviour 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.
-.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,
-.br
->10 string language impress\ (imPRESS data)
-.br
-in an existing magic file would have to be changed to
-.br
->10 string language\e impress (imPRESS data)
-.br
-In addition, in this version, if a pattern string contains a backslash,
-it must be escaped. For example
-.br
-0 string \ebegindata Andrew Toolkit document
-.br
-in an existing magic file would have to be changed to
-.br
-0 string \e\ebegindata Andrew Toolkit document
-.br
-.PP
-SunOS releases 3.2 and later from Sun Microsystems include a
-.BR file (1)
-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 `&' operator, used as,
-for example,
-.br
->16 long&0x7fffffff >0 not stripped
-.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
-.B file
-command uses a magic file,
-keep the old magic file around for comparison purposes
-(rename it to
-.IR __MAGIC__.orig ).
-.SH EXAMPLES
-.nf
-$ file file.c file /dev/hda
-file.c: C program text
-file: ELF 32-bit LSB executable, Intel 80386, version 1,
- dynamically linked, not stripped
-/dev/hda: block special
-
-$ 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/hda
-file.c: text/x-c
-file: application/x-executable, dynamically linked (uses shared libs), not stripped
-/dev/hda: application/x-not-regular-file
-
-.fi
-.SH HISTORY
-There has been a
-.B file
-command in every \s-1UNIX\s0 since at least Research Version 6
-(man page dated January 16, 1975).
-The System V version introduced one significant major change:
-the external list of magic number 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 ``-i'' option to output mime type strings and 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
-The list of contributors to the "Magdir" directory (source for the
-/etc/magic
-file) is too long to include here. You know who you are; thank you.
-.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
-.I tar.h
-and
-.I is_tar.c
-were written by John Gilmore from his public-domain
-.B tar
-program, and are not covered by the above license.
-.SH BUGS
-There must be a better way to automate the construction of the Magic
-file from all the glop in Magdir. What is it?
-Better yet, the magic file should be compiled into binary (say,
-.BR ndbm (3)
-or, better yet, fixed-length
-.SM ASCII
-strings for use in heterogenous network environments) for faster startup.
-Then the program would run as fast as the Version 7 program of the same name,
-with the flexibility of the System V version.
-.PP
-.B File
-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
-There should be an ``else'' clause to follow a series of continuation lines.
-.PP
-The magic file and keywords should have regular expression support.
-Their use of
-.SM "ASCII TAB"
-as a field delimiter is ugly and makes
-it hard to edit the files, but is entrenched.
-.PP
-It might be advisable to allow upper-case letters in keywords
-for e.g.,
-.BR troff (1)
-commands vs man page macros.
-Regular expression support would make this easy.
-.PP
-The program doesn't grok \s-2FORTRAN\s0.
-It should be able to figure \s-2FORTRAN\s0 by seeing some keywords which
-appear indented at the start of line.
-Regular expression support would make this easy.
-.PP
-The list of keywords in
-.I ascmagic
-probably belongs in the Magic file.
-This could be done by using some keyword like `*' for the offset value.
-.PP
-Another optimisation would be to sort
-the magic file so that we can just run down all the
-tests for the first byte, first word, first long, etc, once we
-have fetched it. 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 ``how good'' a guess is.
-We end up removing guesses (e.g. ``From '' as first 5 chars of file) because
-they are not as good as other guesses (e.g. ``Newsgroups:'' versus
-``Return-Path:''). Still, if the others don't pan out, it should be
-possible to use the first guess.
-.PP
-This program is slower than some vendors' file commands.
-The new support for multiple character codes makes it even slower.
-.PP
-This manual page, and particularly this section, is too long.
-.SH AVAILABILITY
-You can obtain the original author's latest version by anonymous FTP
-on
-.B ftp.astron.com
-in the directory
-.I /pub/file/file-X.YY.tar.gz
+++ /dev/null
-.TH MAGIC __FSECTION__ "Public Domain"
-.\" install as magic.4 on USG, magic.5 on V7 or Berkeley systems.
-.SH NAME
-magic \- file command's magic number file
-.SH DESCRIPTION
-This manual page documents the format of the magic file as
-used by the
-.BR file (__CSECTION__)
-command, version __VERSION__. The
-.B file
-command identifies the type of a file using,
-among other tests,
-a test for whether the file begins with a certain
-.IR "magic number" .
-The file
-.I __MAGIC__
-specifies what magic numbers are to be tested for,
-what message to print if a particular magic number 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 1-byte, 2-byte, or 4-byte numeric value or
-a string. If the test succeeds, a message is printed.
-The line consists of the following fields:
-.IP offset \w'message'u+2n
-A number specifying the offset, in bytes, into the file of the data
-which is to be tested.
-.IP type
-The type of the data to be tested. The possible values are:
-.RS
-.IP byte \w'message'u+2n
-A one-byte value.
-.IP short
-A two-byte value (on most systems) in this machine's native byte order.
-.IP long
-A four-byte value (on most systems) in this machine's native byte order.
-.IP string
-A string of bytes. The string type specification can be optionally followed
-by /[Bbc]*. The ``B'' flag compacts whitespace in the target, which must
-contain at least one whitespace character. If the magic has "n" consecutive
-blanks, the target needs at least "n" consecutive blanks to match. The ``b''
-flag treats every blank in the target as an optional blank. Finally the ``c''
-flag, specifies case insensitive matching: lowercase characters in the magic
-match both lower and upper case characters in the targer, whereas upper case
-characters in the magic, only much uppercase characters in the target.
-.IP date
-A four-byte value interpreted as a UNIX date.
-.IP ldate
-A four-byte value interpreted as a UNIX-style date, but interpreted as
-local time rather than UTC.
-.IP beshort
-A two-byte value (on most systems) in big-endian byte order.
-.IP belong
-A four-byte value (on most systems) in big-endian byte order.
-.IP bedate
-A four-byte value (on most systems) in big-endian byte order,
-interpreted as a unix date.
-.IP leshort
-A two-byte value (on most systems) in little-endian byte order.
-.IP lelong
-A four-byte value (on most systems) in little-endian byte order.
-.IP ledate
-A four-byte value (on most systems) in little-endian byte order,
-interpreted as a UNIX date.
-.IP leldate
-A four-byte value (on most systems) in little-endian byte order,
-interpreted as a UNIX-style date, but interpreted as local time rather
-than UTC.
-.RE
-.PP
-The numeric types may optionally be followed by
-.B &
-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
-.B u
-to the type indicates that ordered comparisons should be unsigned.
-.IP 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).
-.IP
-Numeric values
-may be preceded by a character indicating the operation to be performed.
-It may be
-.BR = ,
-to specify that the value from the file must equal the specified value,
-.BR < ,
-to specify that the value from the file must be less than the specified
-value,
-.BR > ,
-to specify that the value from the file must be greater than the specified
-value,
-.BR & ,
-to specify that the value from the file must have set all of the bits
-that are set in the specified value,
-.BR ^ ,
-to specify that the value from the file must have clear any of the bits
-that are set in the specified value, or
-.BR x ,
-to specify that any value will match. If the character is omitted,
-it is assumed to be
-.BR = .
-.IP
-Numeric values are specified in C form; e.g.
-.B 13
-is decimal,
-.B 013
-is octal, and
-.B 0x13
-is hexadecimal.
-.IP
-For string values, the byte string from the
-file must match the specified byte string.
-The operators
-.BR = ,
-.B <
-and
-.B >
-(but not
-.BR & )
-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 string, and
-then presumably print that string, by doing
-.B >\e0
-(because all strings are greater than the null string).
-.IP message
-The message to be printed if the comparison succeeds. If the string
-contains a
-.BR printf (3S)
-format specification, the value from the file (with any specified masking
-performed) is printed using the message as the format string.
-.PP
-Some file formats contain additional information which is to be printed
-along with the file type. A line which begins with the character
-.B >
-indicates additional tests and messages to be printed. The number of
-.B >
-on the line indicates the level of the test; a line with no
-.B >
-at the beginning is considered to be at level 0.
-Each line at level
-.IB n \(pl1
-is under the control of the line at level
-.IB n
-most closely preceding it in the magic file.
-If the test on a line at level
-.I n
-succeeds, the tests specified in all the subsequent lines at level
-.IB n \(pl1
-are performed, and the messages printed if the tests succeed. The next
-line at level
-.I n
-terminates this.
-If the first character following the last
-.B >
-is a
-.B (
-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:
-.BI (( x [.[bslBSL]][+-][ y ]).
-The value of
-.I x
-is used as an offset in the file. A byte, short or long is read at that offset
-depending on the
-.B [bslBSL]
-type specifier. The capitalized types interpret the number as a big endian
-value, whereas the small letter versions interpet the number as a little
-endian value. To that number the value of
-.I 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
-Sometimes you do not know the exact offset as this depends on the length of
-preceding fields. You can specify an offset relative to the end of the
-last uplevel field (of course this may only be done for sublevel tests, i.e.
-test beginning with
-.B >
-). Such a relative offset is specified using
-.B &
-as a prefix to the offset.
-.SH BUGS
-The formats
-.IR long ,
-.IR belong ,
-.IR lelong ,
-.IR short ,
-.IR beshort ,
-.IR leshort ,
-.IR date ,
-.IR bedate ,
-and
-.I ledate
-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.
-.PP
-There is (currently) no support for specified-endian data to be used in
-indirect offsets.
-.SH SEE ALSO
-.BR file (__CSECTION__)
-\- the command that reads this file.
-.\"
-.\" 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.
-.\" @(#)Id: magic.man,v 1.17 2001/08/07 15:38:42 christos Exp
/*
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Ian F. Darwin and others.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
* softmagic - interpret variable magic from MAGIC
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources,
- * credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users
- * ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
*/
#include "system.h"
#include "file.h"
#include "debug.h"
-FILE_RCSID("@(#)Id: softmagic.c,v 1.51 2002/07/03 18:26:38 christos Exp ")
+FILE_RCSID("@(#)Id: softmagic.c,v 1.58 2003/03/26 15:35:30 christos Exp ")
/*@access fmagic @*/
LINT = splint
EXTRA_DIST = LEGAL.NOTICE MAINT Makefile.std magic2mime magic.mime \
- Localstuff Header file.man
+ Localstuff Header
BUILT_SOURCES = listobjs $(man_MANS)
file_LDFLAGS = -all-static
file_LDADD = libfmagic.la
-#man_MANS = file.1 $(man_MAGIC)
-noinst_MANS = file.1
-
pkglibdir = @prefix@/lib/rpm
MAGIC = $(pkglibdir)/magic
CPPFLAGS = -DMAGIC='"$(MAGIC)"'
-fsect = @fsect@
-
-file.1: Makefile file.man
- @rm -f $@
- sed -e s@__CSECTION__@1@g \
- -e s@__FSECTION__@${fsect}@g \
- -e s@__VERSION__@${VERSION}@g \
- -e s@__MAGIC__@${MAGIC}@g $(srcdir)/file.man > $@
-
listobjs:
@echo $(libfmagic_la_SOURCES:.c=.lo) > $@
/*
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Ian F. Darwin and others.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
* softmagic - interpret variable magic from MAGIC
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources,
- * credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users
- * ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
*/
#include "system.h"
#include "file.h"
#include "debug.h"
-FILE_RCSID("@(#)Id: softmagic.c,v 1.51 2002/07/03 18:26:38 christos Exp ")
+FILE_RCSID("@(#)Id: softmagic.c,v 1.58 2003/03/26 15:35:30 christos Exp ")
/*@access fmagic @*/