Browse Source

Import upstream version 3.28

Christos Zoulas 24 years ago
parent
commit
83e702bf6f
56 changed files with 3375 additions and 875 deletions
  1. 29 26
      LEGAL.NOTICE
  2. 7 4
      Magdir/amanda
  3. 77 1
      Magdir/animation
  4. 0 1
      Magdir/apple
  5. 14 0
      Magdir/archive
  6. 11 2
      Magdir/audio
  7. 3 3
      Magdir/compress
  8. 56 5
      Magdir/database
  9. 5 0
      Magdir/diff
  10. 28 3
      Magdir/elf
  11. 16 0
      Magdir/filesystems
  12. 7 3
      Magdir/gimp
  13. 20 0
      Magdir/grace
  14. 28 28
      Magdir/hp
  15. 14 14
      Magdir/images
  16. 61 0
      Magdir/jpeg
  17. 1 1
      Magdir/karma
  18. 7 2
      Magdir/mach
  19. 31 0
      Magdir/mcrypt
  20. 11 3
      Magdir/msdos
  21. 25 4
      Magdir/netbsd
  22. 24 0
      Magdir/os2
  23. 15 0
      Magdir/palm
  24. 2 0
      Magdir/printer
  25. 21 14
      Magdir/sgml
  26. 18 12
      Magdir/sniffer
  27. 28 0
      Magdir/spectrum
  28. 5 1
      Magdir/varied.out
  29. 68 0
      Makefile.am
  30. 497 172
      Makefile.in
  31. 2 2
      Makefile.std
  32. 0 76
      PORTING
  33. 42 0
      acconfig.h
  34. 79 0
      acinclude.m4
  35. 216 0
      aclocal.m4
  36. 10 3
      apprentice.c
  37. 4 2
      ascmagic.c
  38. 7 5
      compress.c
  39. 55 0
      config.h.in
  40. 1305 259
      configure
  41. 58 3
      configure.in
  42. 29 9
      file.c
  43. 14 19
      file.h
  44. 60 13
      file.man
  45. 75 19
      fsmagic.c
  46. 6 10
      is_tar.c
  47. 0 0
      missing
  48. 0 0
      mkinstalldirs
  49. 1 2
      names.h
  50. 14 2
      patchlevel.h
  51. 16 15
      print.c
  52. 217 109
      readelf.c
  53. 33 19
      readelf.h
  54. 1 4
      softmagic.c
  55. 1 0
      stamp-h.in
  56. 1 5
      tar.h

+ 29 - 26
LEGAL.NOTICE

@@ -1,31 +1,34 @@
+$Id: LEGAL.NOTICE,v 1.11 1999/01/14 16:30:12 christos Exp $
 Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
 Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
-Software written by Ian F. Darwin and others; maintained by Christos Zoulas.
-$Id: LEGAL.NOTICE,v 1.9 1995/10/27 23:14:20 christos Exp $
-
-This software (or derivative software) may not be made subject to any 
-license which denies anyone permission to alter it and redistribute it 
-freely.  Derivative software must also still fall under this license.
+Software written by Ian F. Darwin and others;
+maintained 1994-1999 Christos Zoulas.
 
 
 This software is not subject to any export provision of the United States
 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.
 Department of Commerce, and may be exported to any country or planet.
 
 
-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.
-   Derivative works must also be marked as such, and credits must appear
-   in the documentation.
-
-4. This notice may not be removed or altered.
-
-
+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.

+ 7 - 4
Magdir/amanda

@@ -1,7 +1,10 @@
 #------------------------------------------------------------------------------
 #------------------------------------------------------------------------------
 # amanda:  file(1) magic for amanda file format
 # amanda:  file(1) magic for amanda file format
 #
 #
-0       string          AMANDA:\ TAPESTART\ DATE     AMANDA dump header file,
->23     string          X
->>25    string          >\                           Unused %s
->23     string          >\                           DATE %s
+0	string	AMANDA:\ 		AMANDA 
+>8	string	TAPESTART\ DATE		tape header file,
+>>23	string	X
+>>>25	string	>\ 			Unused %s
+>>23	string	>\ 			DATE %s
+>8	string	FILE\ 			dump file,
+>>13	string	>\ 			DATE %s

+ 77 - 1
Magdir/animation

@@ -11,7 +11,83 @@
 #>4	beshort&0xfff0	x			(%d x
 #>4	beshort&0xfff0	x			(%d x
 #>5	beshort&0x0fff  x			%d)
 #>5	beshort&0x0fff  x			%d)
 0	belong		0x000001ba		MPEG system stream data
 0	belong		0x000001ba		MPEG system stream data
-0	beshort&0xfff0	0xfff0			MPEG audio stream data
+# MPEG Audio (*.mpx)
+# from dreesen@math.fu-berlin.de
+0       beshort         &0xfff0         MP
+# MPEG 1.0
+>1      byte&0x08       =0x08           \b
+# Layer 3
+>>1     byte            &0x02           \b3
+>>>2    byte&0xf0       =0x10           \b,  32 kBits
+>>>2    byte&0xf0       =0x20           \b,  40 kBits
+>>>2    byte&0xf0       =0x30           \b,  48 kBits
+>>>2    byte&0xf0       =0x40           \b,  56 kBits
+>>>2    byte&0xf0       =0x50           \b,  64 kBits
+>>>2    byte&0xf0       =0x60           \b,  80 kBits
+>>>2    byte&0xf0       =0x70           \b,  96 kBits
+>>>2    byte&0xf0       =0x80           \b, 112 kBits
+>>>2    byte&0xf0       =0x90           \b, 128 kBits
+>>>2    byte&0xf0       =0xA0           \b, 160 kBits
+>>>2    byte&0xf0       =0xB0           \b, 192 kBits
+>>>2    byte&0xf0       =0xC0           \b, 224 kBits
+>>>2    byte&0xf0       =0xD0           \b, 256 kBits
+>>>2    byte&0xf0       =0xE0           \b, 320 kBits
+# Layer 2
+>>1     byte            &0x04           \b2
+>>>2    byte&0xf0       =0x10           \b,  32 kBits
+>>>2    byte&0xf0       =0x20           \b,  48 kBits
+>>>2    byte&0xf0       =0x30           \b,  56 kBits
+>>>2    byte&0xf0       =0x40           \b,  64 kBits
+>>>2    byte&0xf0       =0x50           \b,  80 kBits
+>>>2    byte&0xf0       =0x60           \b,  96 kBits
+>>>2    byte&0xf0       =0x70           \b, 112 kBits
+>>>2    byte&0xf0       =0x80           \b, 128 kBits
+>>>2    byte&0xf0       =0x90           \b, 160 kBits
+>>>2    byte&0xf0       =0xA0           \b, 192 kBits
+>>>2    byte&0xf0       =0xB0           \b, 224 kBits
+>>>2    byte&0xf0       =0xC0           \b, 256 kBits
+>>>2    byte&0xf0       =0xD0           \b, 320 kBits
+>>>2    byte&0xf0       =0xE0           \b, 384 kBits
+# freq
+>>2     byte&0x0C       =0x00           \b, 44.1 kHz
+>>2     byte&0x0C       =0x04           \b, 48 kHz
+>>2     byte&0x0C       =0x08           \b, 32 kHz
+# MPEG 2.0
+>1      byte&0x08       =0x00           \b
+# Layer 3
+>>1     byte            &0x02           \b3
+# Layer 2
+>>1     byte            &0x04           \b2
+>>2     byte&0xf0       =0x10           \b,   8 kBits
+>>2     byte&0xf0       =0x20           \b,  16 kBits
+>>2     byte&0xf0       =0x30           \b,  24 kBits
+>>2     byte&0xf0       =0x40           \b,  32 kBits
+>>2     byte&0xf0       =0x50           \b,  40 kBits
+>>2     byte&0xf0       =0x60           \b,  48 kBits
+>>2     byte&0xf0       =0x70           \b,  56 kBits
+>>2     byte&0xf0       =0x80           \b,  64 kBits
+>>2     byte&0xf0       =0x90           \b,  80 kBits
+>>2     byte&0xf0       =0xA0           \b,  96 kBits
+>>2     byte&0xf0       =0xB0           \b, 112 kBits
+>>2     byte&0xf0       =0xC0           \b, 128 kBits
+>>2     byte&0xf0       =0xD0           \b, 144 kBits
+>>2     byte&0xf0       =0xE0           \b, 160 kBits
+# freq
+>>2     byte&0x0C       =0x00           \b, 22.05 kHz
+>>2     byte&0x0C       =0x04           \b, 24 kHz
+>>2     byte&0x0C       =0x08           \b, 16 kHz
+# misc
+>3      byte&0xC0       =0x00           \b, Stereo
+>3      byte&0xC0       =0x40           \b, JStereo
+>3      byte&0xC0       =0x80           \b, Dual-Ch
+>3      byte&0xC0       =0xC0           \b, Mono
+#>1     byte&0x01       =0x00           \b, Error Protection
+#>2     byte&0x02       =0x02           \b, Padding
+#>2     byte&0x01       =0x01           \b, Private
+#>3     byte&0x08       =0x08           \b, Copyright
+#>3     byte&0x04       =0x04           \b, Original
+#>3     byte&0x03       1               \b, Emphasis 5
+#>3     byte&0x03       3               \b, Emphasis c
 
 
 # FLI animation format
 # FLI animation format
 4	leshort		0xAF11			FLI file
 4	leshort		0xAF11			FLI file

+ 0 - 1
Magdir/apple

@@ -4,7 +4,6 @@
 #
 #
 0	string		FiLeStArTfIlEsTaRt	binscii (apple ][) text
 0	string		FiLeStArTfIlEsTaRt	binscii (apple ][) text
 0	string		\x0aGL			Binary II (apple ][) data
 0	string		\x0aGL			Binary II (apple ][) data
-0	string		\x76\xff		Squeezed (apple ][) data
 0	string		NuFile			NuFile archive (apple ][) data
 0	string		NuFile			NuFile archive (apple ][) data
 0	string		N\xf5F\xe9l\xe5		NuFile archive (apple ][) data
 0	string		N\xf5F\xe9l\xe5		NuFile archive (apple ][) data
 0	belong		0x00051600		AppleSingle encoded Macintosh file
 0	belong		0x00051600		AppleSingle encoded Macintosh file

+ 14 - 0
Magdir/archive

@@ -214,3 +214,17 @@
 
 
 # Shell archives
 # Shell archives
 10	string		#\ This\ is\ a\ shell\ archive	shell archive text
 10	string		#\ This\ is\ a\ shell\ archive	shell archive text
+
+#
+# LBR. NB: May conflict with the questionable 
+#          "binary Computer Graphics Metafile" format.
+#
+0       string  \0\ \ \ \ \ \ \ \ \ \ \ \0\0    LBR archive data
+#
+# PMA (CP/M derivative of LHA)
+#
+2       string          -pm0-           PMarc archive data [pm0]
+2       string          -pm1-           PMarc archive data [pm1]
+2       string          -pm2-           PMarc archive data [pm2]
+2       string          -pms-           PMarc SFX archive (CP/M, DOS)
+5       string          -pc1-           PopCom compressed executable (CP/M)

+ 11 - 2
Magdir/audio

@@ -67,12 +67,13 @@
 >83	byte		1		(song)
 >83	byte		1		(song)
 
 
 # Real Audio (Magic .ra\0375)
 # Real Audio (Magic .ra\0375)
-0	belong		0x2e7261fd	realaudio sound file
+0	belong		0x2e7261fd	RealAudio sound file
+0	string		.RMF		RealMedia file
 
 
 # MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
 # MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
 # Oct 31, 1995
 # Oct 31, 1995
 0	string		MTM		MultiTracker Module sound file
 0	string		MTM		MultiTracker Module sound file
-0	string		if		Composer 669 Module sound data
+#0	string		if		Composer 669 Module sound data
 0	string		FAR		Module sound data
 0	string		FAR		Module sound data
 0	string		MAS_U		ULT(imate) Module sound data
 0	string		MAS_U		ULT(imate) Module sound data
 0x2c	string		SCRM		ScreamTracker III Module sound data
 0x2c	string		SCRM		ScreamTracker III Module sound data
@@ -109,3 +110,11 @@
 # TOC sound files -Trevor Johnson <trevor@jpj.net>
 # TOC sound files -Trevor Johnson <trevor@jpj.net>
 #
 #
 0       string          TOC             TOC sound file
 0       string          TOC             TOC sound file
+
+# sidfiles <pooka@iki.fi>
+0	string		SIDPLAY\ INFOFILE	Sidplay info file
+0	string		PSID			PlaySID v2.2+ (AMIGA) sidtune
+>4	beshort		>0			w/ header v%d,
+>14	beshort		=1			single song,
+>14	beshort		>1			%d songs,
+>16	beshort		>0			default song: %d

+ 3 - 3
Magdir/compress

@@ -61,11 +61,11 @@
 
 
 # squeeze and crunch
 # squeeze and crunch
 # Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
 # Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
-0	leshort		0xFF76		squeezed data,
+0	beshort		0x76FF		squeezed data,
 >4	string		x		original name %s
 >4	string		x		original name %s
-0	leshort		0xFE76		crunched data,
+0	beshort		0x76FE		crunched data,
 >2	string		x		original name %s
 >2	string		x		original name %s
-0	leshort		0xFD76		LZH compressed data,
+0	beshort		0x76FD		LZH compressed data,
 >2	string		x		original name %s
 >2	string		x		original name %s
 
 
 # Freeze
 # Freeze

+ 56 - 5
Magdir/database

@@ -12,10 +12,12 @@
 0	lelong	0x13579ace	GNU dbm 1.x or ndbm database, little endian
 0	lelong	0x13579ace	GNU dbm 1.x or ndbm database, little endian
 0	string	GDBM		GNU dbm 2.x database
 0	string	GDBM		GNU dbm 2.x database
 #
 #
-0	belong	0x061561	Berkeley DB Hash file
+0	belong	0x061561	Berkeley DB
+>4	belong	>2		1.86
+>4	belong	<3		1.85
+>8	belong	4321		Hash/Big Endian
+>8	belong	1234		Hash/Little Endian
 >4	belong	>0		(Version %d,
 >4	belong	>0		(Version %d,
->8	belong	1234		Little Endian,
->8	belong	4321		Big Endian,
 >12	belong	x		Bucket Size %d,
 >12	belong	x		Bucket Size %d,
 >16	belong	x		Bucket Shift %d,
 >16	belong	x		Bucket Shift %d,
 >20	belong	x		Directory Size %d,
 >20	belong	x		Directory Size %d,
@@ -30,15 +32,64 @@
 >56	belong	x		Number of Keys %d)
 >56	belong	x		Number of Keys %d)
 #
 #
 #
 #
-0	belong	0x053162	Berkeley DB Btree file/Big Endian
+0	belong	0x053162	Berkeley DB 1.85/1.86 Btree/Big Endian
 >4	belong	>0		(Version %d,
 >4	belong	>0		(Version %d,
 >8	belong	x		Page Size %d,
 >8	belong	x		Page Size %d,
 >12	belong	x		Free Page %d,
 >12	belong	x		Free Page %d,
 >16	belong	x		Number of Records %d,
 >16	belong	x		Number of Records %d,
 >20	belong	x		Flags 0x%x)
 >20	belong	x		Flags 0x%x)
-0	lelong	0x053162	Berkeley DB Btree file/Little Endian
+0	lelong	0x053162	Berkeley DB 1.85/1.86 Btree/Little Endian
 >4	lelong	>0		(Version %d,
 >4	lelong	>0		(Version %d,
 >8	lelong	x		Page Size %d,
 >8	lelong	x		Page Size %d,
 >12	lelong	x		Free Page %d,
 >12	lelong	x		Free Page %d,
 >16	lelong	x		Number of Records %d,
 >16	lelong	x		Number of Records %d,
 >20	lelong	x		Flags 0x%x)
 >20	lelong	x		Flags 0x%x)
+#
+#
+12	belong	0x061561	Berkeley DB 2.X Hash/Big Endian
+>16	belong	>0		(Version %d,
+>0	belong  x		Logical sequence number: file - %d,
+>4	belong  x		offset - %d,
+>20	belong	x		Bucket Size %d,
+>24	belong	x		Overflow Point %d,
+>28	belong	x		Last Freed %d,
+>32	belong	x		Max Bucket %d,
+>36	belong	x		High Mask 0x%x,
+>40	belong	x		Low Mask 0x%x,
+>44	belong	x		Fill Factor %d,
+>48	belong	x		Number of Keys %d)
+#
+# DB2.X formats from Khimenko Victor <khim@sch57.msk.ru>
+#
+12	lelong	0x061561	Berkeley DB 2.X Hash/Little Endian
+>16	lelong	>0		(Version %d,
+>0	lelong  x		Logical sequence number: file - %d,
+>4	lelong  x		offset - %d,
+>20	lelong	x		Bucket Size %d,
+>24	lelong	x		Overflow Point %d,
+>28	lelong	x		Last Freed %d,
+>32	lelong	x		Max Bucket %d,
+>36	lelong	x		High Mask 0x%x,
+>40	lelong	x		Low Mask 0x%x,
+>44	lelong	x		Fill Factor %d,
+>48	lelong	x		Number of Keys %d)
+#
+#
+12	belong	0x053162	Berkeley DB 2.X Btree/Big Endian
+>16	belong	>0		(Version %d, 
+>0	belong  x		Logical sequence number: file - %d,
+>4	belong  x		offset - %d,
+>20	belong	x		Page Size %d,
+>24	belong	x		Maxkey %d,
+>28	belong	x		Minkey %d,
+>32	belong	x		Free Page %d)
+#
+#
+12	lelong	0x053162	Berkeley DB 2.X Btree/Little Endian
+>16	lelong	>0		(Version %d,
+>0	lelong  x		Logical sequence number: file - %d,
+>4	lelong  x		offset - %d,
+>20	lelong	x		Page Size %d,
+>24	lelong	x		Maxkey %d,
+>28	lelong	x		Minkey %d,
+>32	lelong	x		Free Page %d)

+ 5 - 0
Magdir/diff

@@ -6,3 +6,8 @@
 0	string		***\ 		'diff' output text
 0	string		***\ 		'diff' output text
 0	string		Only\ in\ 	'diff' output text
 0	string		Only\ in\ 	'diff' output text
 0	string		Common\ subdirectories:\ 	'diff' output text
 0	string		Common\ subdirectories:\ 	'diff' output text
+
+# xdelta is like diff(1) for binary files (works for text, too).
+# Available from: ftp://ftp.xcf.berkeley.edu/pub/xdelta/
+0       string          %XDZ            xdelta diff file
+>4      string          >%              version %.3s

+ 28 - 3
Magdir/elf

@@ -12,6 +12,9 @@
 0	string		\177ELF		ELF
 0	string		\177ELF		ELF
 >4	byte		0		invalid class
 >4	byte		0		invalid class
 >4	byte		1		32-bit
 >4	byte		1		32-bit
+# only for MIPS R3000_BE
+>>18	beshort		8
+>>>36   belong          &0x20           N32
 >4	byte		2		64-bit
 >4	byte		2		64-bit
 >5	byte		0		invalid byte order
 >5	byte		0		invalid byte order
 >5	byte		1		LSB
 >5	byte		1		LSB
@@ -56,7 +59,7 @@
 >>18	leshort		47		Hitachi H8/300H,
 >>18	leshort		47		Hitachi H8/300H,
 >>18	leshort		48		Hitachi H8S,
 >>18	leshort		48		Hitachi H8S,
 >>18	leshort		49		Hitachi H8/500,
 >>18	leshort		49		Hitachi H8/500,
->>18	leshort		50		Intel Merced Processor,
+>>18	leshort		50		IA-64 (Intel 64 bit architecture)
 >>18	leshort		51		Stanford MIPS-X,
 >>18	leshort		51		Stanford MIPS-X,
 >>18	leshort		52		Motorola Coldfire,
 >>18	leshort		52		Motorola Coldfire,
 >>18	leshort		53		Motorola M68HC12,
 >>18	leshort		53		Motorola M68HC12,
@@ -66,6 +69,24 @@
 >>36	lelong		1		MathCoPro/FPU/MAU Required
 >>36	lelong		1		MathCoPro/FPU/MAU Required
 >8	string		>\0		(%s)
 >8	string		>\0		(%s)
 >5	byte		2		MSB
 >5	byte		2		MSB
+# only for MIPS R3000_BE
+>>18    beshort		8
+# only for 32-bit
+>>>4	byte		1
+>>>>36  belong&0xf0000000       0x00000000      mips-1
+>>>>36  belong&0xf0000000       0x10000000      mips-2
+>>>>36  belong&0xf0000000       0x20000000      mips-3
+>>>>36  belong&0xf0000000       0x30000000      mips-4
+>>>>36  belong&0xf0000000       0x40000000      mips-5
+>>>>36  belong&0xf0000000       0x50000000      mips-6
+# only for 64-bit
+>>>4	byte		2
+>>>>48  belong&0xf0000000       0x00000000      mips-1
+>>>>48  belong&0xf0000000       0x10000000      mips-2
+>>>>48  belong&0xf0000000       0x20000000      mips-3
+>>>>48  belong&0xf0000000       0x30000000      mips-4
+>>>>48  belong&0xf0000000       0x40000000      mips-5
+>>>>48  belong&0xf0000000       0x50000000      mips-6
 >>16	beshort		0		no file type,
 >>16	beshort		0		no file type,
 >>16	beshort		1		relocatable,
 >>16	beshort		1		relocatable,
 >>16	beshort		2		executable,
 >>16	beshort		2		executable,
@@ -90,6 +111,10 @@
 >>18	beshort		16		nCUBE,
 >>18	beshort		16		nCUBE,
 >>18	beshort		17		Fujitsu VPP500,
 >>18	beshort		17		Fujitsu VPP500,
 >>18	beshort		18		SPARC32PLUS,
 >>18	beshort		18		SPARC32PLUS,
+>>>36	belong&0xffff00	&0x000100	V8+ Required,
+>>>36	belong&0xffff00	&0x000200	Sun UltraSPARC1 Extensions Required,
+>>>36	belong&0xffff00	&0x000400	HaL R1 Extensions Required,
+>>>36	belong&0xffff00	&0x000800	Sun UltraSPARC3 Extensions Required,
 >>18	beshort		20		PowerPC or cisco 4500,
 >>18	beshort		20		PowerPC or cisco 4500,
 >>18	beshort		21		cisco 7500,
 >>18	beshort		21		cisco 7500,
 >>18	beshort		24		cisco SVIP,
 >>18	beshort		24		cisco SVIP,
@@ -100,8 +125,8 @@
 >>18	beshort		39		Motorola RCE,
 >>18	beshort		39		Motorola RCE,
 >>18	beshort		40		Advanced RISC Machines ARM,
 >>18	beshort		40		Advanced RISC Machines ARM,
 >>18	beshort		41		Alpha,
 >>18	beshort		41		Alpha,
->>18	leshort		42		Hitachi SH,
->>18	beshort		43		SPARC V9 - invalid byte order,
+>>18	beshort		42		Hitachi SH,
+>>18	beshort		43		SPARC V9,
 >>18	beshort		44		Siemens Tricore Embedded Processor,
 >>18	beshort		44		Siemens Tricore Embedded Processor,
 >>18	beshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
 >>18	beshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
 >>18	beshort		46		Hitachi H8/300,
 >>18	beshort		46		Hitachi H8/300,

+ 16 - 0
Magdir/filesystems

@@ -33,6 +33,7 @@
 >>0x36	string	FAT			\b, %s
 >>0x36	string	FAT			\b, %s
 >>>0x39	string	12			(%s bit)
 >>>0x39	string	12			(%s bit)
 >>>0x39	string	16			(%s bit)
 >>>0x39	string	16			(%s bit)
+>0x52	string	FAT32			\b, FAT (32 bit)
 >>>43	string		>NO\ NAME	label: %.11s,
 >>>43	string		>NO\ NAME	label: %.11s,
 >>>43	string		<NO\ NAME	label: %.11s,
 >>>43	string		<NO\ NAME	label: %.11s,
 >>>43	string		NO\ NAME	unlabeled,
 >>>43	string		NO\ NAME	unlabeled,
@@ -60,3 +61,18 @@
 >4	lelong&0xFFFFFF00	!0	unknown mode
 >4	lelong&0xFFFFFF00	!0	unknown mode
 
 
 0x18b	string	OS/2	OS/2 Boot Manager
 0x18b	string	OS/2	OS/2 Boot Manager
+
+9564	lelong		0x00011954	Unix Fast File system,
+>8404	string		x		last mounted on %s,
+>9504	ledate		x		last checkd at %s,
+>8224	ledate		x		last writen at %s,
+>8228	lelong		x		number of blocks %d,
+>8232	lelong		x		number of data blocks %d,
+>8236	lelong		x		number of cylinder groups %d,
+>8240	lelong		x		number of basic blocks %d,
+>8244	lelong		x		number of fragment blocks %d,
+>8248	lelong		x		minimum percentage of free blocks %d,
+>8252	lelong		x		rotational delay %dms,
+>8256	lelong		x		disk rotational speed %drps,
+>8320	lelong		0		TIME optimization
+>8320	lelong		1		SPACE optimization

+ 7 - 3
Magdir/gimp

@@ -9,12 +9,16 @@
 #       by Spencer Kimball and Peter Mattis
 #       by Spencer Kimball and Peter Mattis
 #       ('Bucky' LaDieu, nega@vt.edu)
 #       ('Bucky' LaDieu, nega@vt.edu)
 
 
-0       string          gimp\ xcf\ file GIMP XCF image data,
->14     belong          x               %ld x
->18     belong          x               %ld,
+0	string		gimp\ xcf	GIMP XCF image data,
+>9	string		file		version 0,
+>9	string		v		version
+>>10	string		>\0		%s,
+>14	belong		x		%lu x
+>18	belong		x		%lu,
 >22     belong          0               RGB Color
 >22     belong          0               RGB Color
 >22     belong          1               Greyscale
 >22     belong          1               Greyscale
 >22     belong          2               Indexed Color
 >22     belong          2               Indexed Color
+>22	belong		>2		Unknown Image Type.
 
 
 #------------------------------------------------------------------------------
 #------------------------------------------------------------------------------
 # XCF:  file(1) magic for the patterns used in the GIMP, developed
 # XCF:  file(1) magic for the patterns used in the GIMP, developed

+ 20 - 0
Magdir/grace

@@ -0,0 +1,20 @@
+
+#------------------------------------------------------------------------------
+# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
+#
+# ACE/gr binary
+0	string	\000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003		old ACE/gr binary file
+>39	byte	>0			- version %c
+# ACE/gr ascii
+0	string	#\ xvgr\ parameter\ file	ACE/gr ascii file
+0	string	#\ xmgr\ parameter\ file	ACE/gr ascii file
+0	string	#\ ACE/gr\ parameter\ file	ACE/gr ascii file
+# Grace projects
+0	string	#\ Grace\ project\ file		Grace project file
+>23	string	@version\  			(version
+>>32	byte	>0 				%c
+>>33	string	>\0 				\b.%.2s
+>>35	string	>\0 				\b.%.2s)
+# ACE/gr fit description files
+0	string	#\ ACE/gr\ fit\ description\ 	ACE/gr fit description file
+# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE

+ 28 - 28
Magdir/hp

@@ -51,7 +51,7 @@
 #### PA-RISC 1.1
 #### PA-RISC 1.1
 0	belong 		0x02100106	PA-RISC1.1 relocatable object
 0	belong 		0x02100106	PA-RISC1.1 relocatable object
 0	belong 		0x02100107	PA-RISC1.1 executable
 0	belong 		0x02100107	PA-RISC1.1 executable
->168	belong		&=0x00000004	dynamically linked
+>168	belong		&0x00000004	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >96	belong		>0		- not stripped
 >96	belong		>0		- not stripped
 
 
@@ -75,17 +75,17 @@
 0	belong		0x02140106	PA-RISC2.0 relocatable object
 0	belong		0x02140106	PA-RISC2.0 relocatable object
 
 
 0       belong		0x02140107	PA-RISC2.0 executable
 0       belong		0x02140107	PA-RISC2.0 executable
->168	belong		&=0x00000004	dynamically linked
+>168	belong		&0x00000004	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >96	belong		>0		- not stripped
 >96	belong		>0		- not stripped
 
 
 0       belong		0x02140108	PA-RISC2.0 shared executable
 0       belong		0x02140108	PA-RISC2.0 shared executable
->168	belong		&=0x00000004	dynamically linked
+>168	belong		&0x00000004	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >96	belong		>0		- not stripped
 >96	belong		>0		- not stripped
 
 
 0       belong		0x0214010b	PA-RISC2.0 demand-load executable
 0       belong		0x0214010b	PA-RISC2.0 demand-load executable
->168	belong		&=0x00000004	dynamically linked
+>168	belong		&0x00000004	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >(144)	belong		0x054ef630	dynamically linked
 >96	belong		>0		- not stripped
 >96	belong		>0		- not stripped
 
 
@@ -205,30 +205,30 @@
 # addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92
 # addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92
 0	string		HPHP48-		HP48 binary
 0	string		HPHP48-		HP48 binary
 >7	byte		>0		- Rev %c
 >7	byte		>0		- Rev %c
->8	short		0x1129		(ADR)
->8	short		0x3329		(REAL)
->8	short		0x5529		(LREAL)
->8	short		0x7729		(COMPLX)
->8	short		0x9d29		(LCOMPLX)
->8	short		0xbf29		(CHAR)
->8	short		0xe829		(ARRAY)
->8	short		0x0a2a		(LNKARRAY)
->8	short		0x2c2a		(STRING)
->8	short		0x4e2a		(HXS)
->8	short		0x742a		(LIST)
->8	short		0x962a		(DIR)
->8	short		0xb82a		(ALG)
->8	short		0xda2a		(UNIT)
->8	short		0xfc2a		(TAGGED)
->8	short		0x1e2b		(GROB)
->8	short		0x402b		(LIB)
->8	short		0x622b		(BACKUP)
->8	short		0x882b		(LIBDATA)
->8	short		0x9d2d		(PROG)
->8	short		0xcc2d		(CODE)
->8	short		0x482e		(GNAME)
->8	short		0x6d2e		(LNAME)
->8	short		0x922e		(XLIB)
+>8	beshort		0x1129		(ADR)
+>8	beshort		0x3329		(REAL)
+>8	beshort		0x5529		(LREAL)
+>8	beshort		0x7729		(COMPLX)
+>8	beshort		0x9d29		(LCOMPLX)
+>8	beshort		0xbf29		(CHAR)
+>8	beshort		0xe829		(ARRAY)
+>8	beshort		0x0a2a		(LNKARRAY)
+>8	beshort		0x2c2a		(STRING)
+>8	beshort		0x4e2a		(HXS)
+>8	beshort		0x742a		(LIST)
+>8	beshort		0x962a		(DIR)
+>8	beshort		0xb82a		(ALG)
+>8	beshort		0xda2a		(UNIT)
+>8	beshort		0xfc2a		(TAGGED)
+>8	beshort		0x1e2b		(GROB)
+>8	beshort		0x402b		(LIB)
+>8	beshort		0x622b		(BACKUP)
+>8	beshort		0x882b		(LIBDATA)
+>8	beshort		0x9d2d		(PROG)
+>8	beshort		0xcc2d		(CODE)
+>8	beshort		0x482e		(GNAME)
+>8	beshort		0x6d2e		(LNAME)
+>8	beshort		0x922e		(XLIB)
 0	string		%%HP:		HP48 text
 0	string		%%HP:		HP48 text
 >6	string		T(0)		- T(0)
 >6	string		T(0)		- T(0)
 >6	string		T(1)		- T(1)
 >6	string		T(1)		- T(1)

+ 14 - 14
Magdir/images

@@ -7,7 +7,20 @@
 # merging several one- and two-line files into here.
 # merging several one- and two-line files into here.
 #
 #
 # little magic: PCX (first byte is 0x0a)
 # little magic: PCX (first byte is 0x0a)
-# no magic: Targa
+
+# Targa - matches `povray', `ppmtotga' and `xv' outputs
+# by Philippe De Muyter <phdm@macqel.be>
+# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
+# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
+# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
+# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
+# `tgatoppm' recognizes a superset (Index may be anything)
+1	belong&0xfff7ffff	0x01010000	Targa image data - Map
+>2	byte&8			8		- RLE
+1	belong&0xfff7ffff	0x00020000	Targa image data - RGB
+>2	byte&8			8		- RLE
+1	belong&0xfff7ffff	0x00030000	Targa image data - Mono
+>2	byte&8			8		- RLE
 
 
 # PBMPLUS images
 # PBMPLUS images
 # The next byte following the magic is always whitespace.
 # The next byte following the magic is always whitespace.
@@ -118,19 +131,6 @@
 >29	byte		0		\b, normal resolution (204x98 DPI)
 >29	byte		0		\b, normal resolution (204x98 DPI)
 >29	byte		1		\b, fine resolution (204x196 DPI)
 >29	byte		1		\b, fine resolution (204x196 DPI)
 
 
-# JPEG images
-# SunOS 5.5.1 had
-#
-#	0	string		\377\330\377\340	JPEG file
-#	0	string		\377\330\377\356	JPG file
-#
-# both of which turn into "JPEG image data" here.
-#
-0	beshort		0xffd8		JPEG image data
->6	string		JFIF		\b, JFIF standard
-# HSI is Handmade Software's proprietary JPEG encoding scheme
-0	string		hsi1		JPEG image data, HSI proprietary
-
 # PC bitmaps (OS/2, Windoze BMP files)  (Greg Roelofs, newt@uchicago.edu)
 # PC bitmaps (OS/2, Windoze BMP files)  (Greg Roelofs, newt@uchicago.edu)
 0	string		BM		PC bitmap data
 0	string		BM		PC bitmap data
 >14	leshort		12		\b, OS/2 1.x format
 >14	leshort		12		\b, OS/2 1.x format

+ 61 - 0
Magdir/jpeg

@@ -0,0 +1,61 @@
+
+#------------------------------------------------------------------------------
+# JPEG images
+# SunOS 5.5.1 had
+#
+#	0	string		\377\330\377\340	JPEG file
+#	0	string		\377\330\377\356	JPG file
+#
+# both of which turn into "JPEG image data" here.
+#
+0	beshort		0xffd8		JPEG image data
+>6	string		JFIF		\b, JFIF standard
+
+# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
+# in a vain attempt to add image size reporting for JFIF.  Note that these
+# tests are not fool-proof since some perfectly valid JPEGs are currently
+# impossible to specify in magic(4) format.
+# First, a little JFIF version info:
+>11	byte		x		\b %d.
+>12	byte		x		\b%02d
+# Next, the resolution or aspect ratio of the image:
+>13	byte		0		\b, aspect ratio
+>13	byte		1		\b, resolution (DPI)
+>13	byte		2		\b, resolution (DPCM)
+>14	beshort		x		\b X%d:
+>16	beshort		x		\bY%d
+#>4	beshort		x		\b, segment length %d
+# Next, show thumbnail info, if it exists:
+>18	byte		!0		\b, thumbnail %dx
+>>19	byte		x		\b%d
+# Here things get sticky.  We can do ONE MORE marker segment with
+# indirect addressing, and that's all.  It would be great if we could
+# do pointer arithemetic like in an assembler language.  Christos?
+# And if there was some sort of looping construct to do searches, plus a few
+# named accumulators, it would be even more effective...
+# At least we can show a comment if no other segments got inserted before:
+>(4.S+5)	byte		0xFE
+>>(4.S+8)	string		>\0		\b, "%s"
+#>(4.S+5)	byte		0xFE		\b, comment
+#>>(4.S+6)	beshort		x		\b length=%d
+#>>(4.S+8)	string		>\0		\b, "%s"
+# Or, we can show the encoding type (I've included only the three most common)
+# and image dimensions if we are lucky and the SOFn (image segment) is here:
+>(4.S+5)	byte		0xC0		\b, baseline
+>>(4.S+6)	byte		x		\b, precision %d
+>>(4.S+7)	beshort		x		\b, %dx
+>>(4.S+9)	beshort		x		\b%d
+>(4.S+5)	byte		0xC1		\b, extended sequential
+>>(4.S+6)	byte		x		\b, precision %d
+>>(4.S+7)	beshort		x		\b, %dx
+>>(4.S+9)	beshort		x		\b%d
+>(4.S+5)	byte		0xC2		\b, progressive
+>>(4.S+6)	byte		x		\b, precision %d
+>>(4.S+7)	beshort		x		\b, %dx
+>>(4.S+9)	beshort		x		\b%d
+# I've commented-out quantisation table reporting.  I doubt anyone cares yet.
+#>(4.S+5)	byte		0xDB		\b, quantisation table
+#>>(4.S+6)	beshort		x		\b length=%d
+
+# HSI is Handmade Software's proprietary JPEG encoding scheme
+0	string		hsi1		JPEG image data, HSI proprietary

+ 1 - 1
Magdir/karma

@@ -5,4 +5,4 @@
 # From <rgooch@atnf.csiro.au>
 # From <rgooch@atnf.csiro.au>
 
 
 0	string		KarmaRHD Version	Karma Data Structure Version
 0	string		KarmaRHD Version	Karma Data Structure Version
->16	long		x		%lu
+>16	belong		x		%lu

+ 7 - 2
Magdir/mach

@@ -1,12 +1,12 @@
 #------------------------------------------------------------------------------
 #------------------------------------------------------------------------------
 # mach file description
 # mach file description
 #
 #
-0	belong		0xcafebabe	mach-o fat file
+0	belong		0xcafebabe	Mach-O fat file
 >4	belong		1		with 1 architecture
 >4	belong		1		with 1 architecture
 >4	belong		>1
 >4	belong		>1
 >>4	belong		x		with %ld architectures		
 >>4	belong		x		with %ld architectures		
 #
 #
-0	belong		0xfeedface	mach-o
+0	belong		0xfeedface	Mach-O
 >12	belong		1		object
 >12	belong		1		object
 >12	belong		2		executable
 >12	belong		2		executable
 >12	belong		3		shared library
 >12	belong		3		shared library
@@ -22,6 +22,11 @@
 >4	belong		4		ns32032
 >4	belong		4		ns32032
 >4	belong		5		ns32332
 >4	belong		5		ns32332
 >4	belong		6		for m68k architecture
 >4	belong		6		for m68k architecture
+# from NeXTstep 3.0 <mach/machine.h>
+# i.e. mc680x0_all, ignore
+# >>8	belong		1		(mc68030)
+>>8	belong		2		(mc68040)
+>>8	belong		3		(mc68030 only)
 >4	belong		7		i386
 >4	belong		7		i386
 >4	belong		8		mips
 >4	belong		8		mips
 >4	belong		9		ns32532
 >4	belong		9		ns32532

+ 31 - 0
Magdir/mcrypt

@@ -0,0 +1,31 @@
+#------------------------------------------------------------------------------
+# Mavroyanopoulos Nikos <nmav@hellug.gr>
+# mcrypt:   file(1) magic for mcrypt 2.2.x;
+0      string          \0m\2           mcrypt 2.2 encrypted data,
+>3     byte            0               algorithm: blowfish-448,
+>3     byte            1               algorithm: DES,
+>3     byte            2               algorithm: 3DES,
+>3     byte            3               algorithm: 3-WAY,
+>3     byte            4               algorithm: GOST,
+>3     byte            6               algorithm: SAFER-SK64,
+>3     byte            7               algorithm: SAFER-SK128,
+>3     byte            8               algorithm: CAST-128,
+>3     byte            9               algorithm: xTEA,
+>3     byte            10              algorithm: TWOFISH-128,
+>3     byte            11              algorithm: RC2,
+>3     byte            12              algorithm: TWOFISH-192,
+>3     byte            13              algorithm: TWOFISH-256,
+>3     byte            14              algorithm: blowfish-128,
+>3     byte            15              algorithm: blowfish-192,
+>3     byte            16              algorithm: blowfish-256,
+>3     byte            100             algorithm: RC6,
+>3     byte            101             algorithm: IDEA,
+>4     byte            0               mode: CBC,
+>4     byte            1               mode: ECB,
+>4     byte            2               mode: CFB,
+>4     byte            3               mode: OFB,
+>4     byte            4               mode: nOFB,
+>5     byte            0               keymode: 8bit
+>5     byte            1               keymode: 4bit
+>5     byte            2               keymode: SHA-1 hash
+>5     byte            3               keymode: MD5 hash

+ 11 - 3
Magdir/msdos

@@ -87,6 +87,7 @@
 >24	string	@		\b, OS/2 or MS Windows
 >24	string	@		\b, OS/2 or MS Windows
 >>0xe7	string	LH/2\ Self-Extract	\b, %s
 >>0xe7	string	LH/2\ Self-Extract	\b, %s
 >>0xe9	string	PKSFX2		\b, %s
 >>0xe9	string	PKSFX2		\b, %s
+>>122	string	Windows\ self-extracting\ ZIP	\b, %s
 >0x1c	string	RJSX\xff\xff	\b, ARJ SFX
 >0x1c	string	RJSX\xff\xff	\b, ARJ SFX
 >0x1c	string	diet\xf9\x9c	\b, diet compressed
 >0x1c	string	diet\xf9\x9c	\b, diet compressed
 >0x1e	string	Copyright\ 1989-1990\ PKWARE\ Inc.	\b, PKSFX
 >0x1e	string	Copyright\ 1989-1990\ PKWARE\ Inc.	\b, PKSFX
@@ -149,11 +150,15 @@
 2080	string	Microsoft\ Word\ 6.0\ Document	%s
 2080	string	Microsoft\ Word\ 6.0\ Document	%s
 2080	string	Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
 2080	string	Documento\ Microsoft\ Word\ 6 Spanish Microsoft Word 6 document data
 # Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
 # Pawel Wiecek <coven@i17linuxb.ists.pwr.wroc.pl> (for polish Word)
-2112	string	MSWordDoc	Microsoft Word document data
+2112	string	MSWordDoc			Microsoft Word document data
 #
 #
-0	belong	0x31be0000	Microsoft Word Document
+0	belong	0x31be0000			Microsoft Word Document
 #
 #
-0       string  PO^Q`           Microsoft Word 6.0 Document
+0       string  PO^Q`				Microsoft Word 6.0 Document
+#
+0	string	\376\067\0\043			Microsoft Office Document
+0	string	\320\317\021\340\241\261	Microsoft Office Document
+0	string	\333\245-\0\0\0			Microsoft Office Document
 #
 #
 2080	string	Microsoft\ Excel\ 5.0\ Worksheet	%s
 2080	string	Microsoft\ Excel\ 5.0\ Worksheet	%s
 #
 #
@@ -176,3 +181,6 @@
 
 
 # Help files
 # Help files
 0	string	?_\3\0		MS Windows Help Data
 0	string	?_\3\0		MS Windows Help Data
+
+# Microsoft CAB distribution format  Dale Worley <root@dworley.ny.mediaone.net>
+0	string		MSCF\000\000\000\000	Microsoft CAB file

+ 25 - 4
Magdir/netbsd

@@ -136,25 +136,46 @@
 0	belong&0377777777	042600507	NetBSD/pmax core
 0	belong&0377777777	042600507	NetBSD/pmax core
 >12	string			>\0		from '%s'
 >12	string			>\0		from '%s'
 
 
-0	belong&0377777777	043000413	NetBSD/vax demand paged
+0	belong&0377777777	043000413	NetBSD/vax 1k demand paged
 >0	byte			&0x80		
 >0	byte			&0x80		
 >>20	lelong			<4096		shared library
 >>20	lelong			<4096		shared library
 >>20	lelong			=4096		dynamically linked executable
 >>20	lelong			=4096		dynamically linked executable
 >>20	lelong			>4096		dynamically linked executable
 >>20	lelong			>4096		dynamically linked executable
 >0	byte			^0x80		executable
 >0	byte			^0x80		executable
 >16	lelong			>0		not stripped
 >16	lelong			>0		not stripped
-0	belong&0377777777	043000410	NetBSD/vax pure
+0	belong&0377777777	043000410	NetBSD/vax 1k pure
 >0	byte			&0x80		dynamically linked executable
 >0	byte			&0x80		dynamically linked executable
 >0	byte			^0x80		executable
 >0	byte			^0x80		executable
 >16	lelong			>0		not stripped
 >16	lelong			>0		not stripped
-0	belong&0377777777	043000407	NetBSD/vax
+0	belong&0377777777	043000407	NetBSD/vax 1k
 >0	byte			&0x80		dynamically linked executable
 >0	byte			&0x80		dynamically linked executable
 >0	byte			^0x80
 >0	byte			^0x80
 >>0	byte			&0x40		position independent
 >>0	byte			&0x40		position independent
 >>20	lelong			!0		executable
 >>20	lelong			!0		executable
 >>20	lelong			=0		object file
 >>20	lelong			=0		object file
 >16	lelong			>0		not stripped
 >16	lelong			>0		not stripped
-0	belong&0377777777	043000507	NetBSD/vax core
+0	belong&0377777777	043000507	NetBSD/vax 1k core
+>12	string			>\0		from '%s'
+
+0	belong&0377777777	045400413	NetBSD/vax 4k demand paged
+>0	byte			&0x80		
+>>20	lelong			<4096		shared library
+>>20	lelong			=4096		dynamically linked executable
+>>20	lelong			>4096		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	045400410	NetBSD/vax 4k pure
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80		executable
+>16	lelong			>0		not stripped
+0	belong&0377777777	045400407	NetBSD/vax 4k
+>0	byte			&0x80		dynamically linked executable
+>0	byte			^0x80
+>>0	byte			&0x40		position independent
+>>20	lelong			!0		executable
+>>20	lelong			=0		object file
+>16	lelong			>0		not stripped
+0	belong&0377777777	045400507	NetBSD/vax 4k core
 >12	string			>\0		from '%s'
 >12	string			>\0		from '%s'
 
 
 # NetBSD/alpha does not support (and has never supported) a.out objects,
 # NetBSD/alpha does not support (and has never supported) a.out objects,

+ 24 - 0
Magdir/os2

@@ -21,3 +21,27 @@
 >4	string	>\			(FTP) <ftp:%s>
 >4	string	>\			(FTP) <ftp:%s>
 0	string	file:			OS/2 URL object text
 0	string	file:			OS/2 URL object text
 >5	string	>\			(Local file) <%s>
 >5	string	>\			(Local file) <%s>
+
+# >>>>> OS/2 INF/HLP <<<<<  (source: Daniel Dissett ddissett@netcom.com)
+# Carl Hauser (chauser.parc@xerox.com) and 
+# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)
+# list the following header format in inf02a.doc:
+#
+#  int16 ID;           // ID magic word (5348h = "HS")
+#  int8  unknown1;     // unknown purpose, could be third letter of ID
+#  int8  flags;        // probably a flag word...
+#                      //  bit 0: set if INF style file
+#                      //  bit 4: set if HLP style file
+#                      // patching this byte allows reading HLP files
+#                      // using the VIEW command, while help files 
+#                      // seem to work with INF settings here as well.
+#  int16 hdrsize;      // total size of header
+#  int16 unknown2;     // unknown purpose
+# 
+0   string  HSP\x01\x9b\x00 OS/2 INF
+>107 string >0                      (%s)
+0   string  HSP\x10\x9b\x00     OS/2 HLP
+>107 string >0                      (%s)
+
+# OS/2 INI (this is a guess)
+0  string   \xff\xff\xff\xff\x14\0\0\0  OS/2 INI

+ 15 - 0
Magdir/palm

@@ -0,0 +1,15 @@
+
+#------------------------------------------------------------------------------
+# palm:  file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
+#
+# Brian Lalor <blalor@hcirisc.cs.binghamton.edu>
+
+# appl
+60      belong                  0x6170706c      PalmOS application
+>0      string                  >\0             "%s"
+# TEXt
+60      belong                  0x54455874      AportisDoc file
+>0      string                  >\0             "%s"
+# HACK
+60      belong                  0x4841434b      HackMaster hack
+>0      string                  >\0             "%s"

+ 2 - 0
Magdir/printer

@@ -17,6 +17,8 @@
 >>>16	string		EPS		- type %s
 >>>16	string		EPS		- type %s
 >>>16	string		Query		- type %s
 >>>16	string		Query		- type %s
 >>>16	string		ExitServer	- type %s
 >>>16	string		ExitServer	- type %s
+0	string		\033%-12345X%!PS	PostScript document
+
 
 
 # DOS EPS Binary File Header
 # DOS EPS Binary File Header
 # From: Ed Sznyter <ews@Black.Market.NET>
 # From: Ed Sznyter <ews@Black.Market.NET>

+ 21 - 14
Magdir/sgml

@@ -1,21 +1,28 @@
 
 
 #------------------------------------------------------------------------------
 #------------------------------------------------------------------------------
 # sgml:  file(1) magic for Standard Generalized Markup Language
 # sgml:  file(1) magic for Standard Generalized Markup Language
-
 # HyperText Markup Language (HTML) is an SGML document type,
 # HyperText Markup Language (HTML) is an SGML document type,
 # from Daniel Quinlan (quinlan@yggdrasil.com)
 # from Daniel Quinlan (quinlan@yggdrasil.com)
-0	string		\<!DOCTYPE\ HTML	HTML document text
-0	string		\<!doctype\ html	HTML document text
-0	string		\<HEAD		HTML document text
-0	string		\<head		HTML document text
-0	string		\<TITLE		HTML document text
-0	string		\<title		HTML document text
-0	string		\<html		HTML document text
-0	string		\<HTML		HTML document text
+0   string      \<!DOCTYPE\ HTML    HTML document text
+0   string      \<!doctype\ html    HTML document text
+0   string      \<HEAD      HTML document text
+0   string      \<head      HTML document text
+0   string      \<TITLE     HTML document text
+0   string      \<title     HTML document text
+0   string      \<html      HTML document text
+0   string      \<HTML      HTML document text
+
+# Extensible markup language (XML), a subset of SGML
+# from Marc Prud'hommeaux (marc@apocalypse.org)
+0       string          \<?xml          XML document text
+0       string          \<?XML          XML document text
+0       string          \<?Xml          XML document text
 
 
 # SGML, mostly from rph@sq
 # SGML, mostly from rph@sq
-0	string		\<!DOCTYPE	exported SGML document text
-0	string		\<!doctype	exported SGML document text
-0	string		\<!SUBDOC	exported SGML subdocument text
-0	string		\<!subdoc	exported SGML subdocument text
-0	string		\<!--		exported SGML document text
+0   string      \<!DOCTYPE  exported SGML document text
+0   string      \<!doctype  exported SGML document text
+0   string      \<!SUBDOC   exported SGML subdocument text
+0   string      \<!subdoc   exported SGML subdocument text
+0   string      \<!--       exported SGML document text
+
+

+ 18 - 12
Magdir/sniffer

@@ -1,10 +1,10 @@
 
 
 #------------------------------------------------------------------------------
 #------------------------------------------------------------------------------
-# sniffer:  file(1) magic for packet captured files
+# sniffer:  file(1) magic for packet capture files
 #
 #
 # From: guy@netapp.com (Guy Harris)
 # From: guy@netapp.com (Guy Harris)
 #
 #
-# Microsoft NetMon (packet capture/display program) capture files.
+# Microsoft Network Monitor capture files.
 #
 #
 0	string		RTSS		NetMon capture file
 0	string		RTSS		NetMon capture file
 >4	byte		x		- version %d
 >4	byte		x		- version %d
@@ -16,28 +16,34 @@
 
 
 #
 #
 # Network General Sniffer capture files.
 # Network General Sniffer capture files.
+# Sorry, make that "Network Associates Sniffer capture files."
 #
 #
 0	string		TRSNIFF\ data\ \ \ \ \032	Sniffer capture file
 0	string		TRSNIFF\ data\ \ \ \ \032	Sniffer capture file
+>33	byte		2		(compressed)
 >23	leshort		x		- version %d
 >23	leshort		x		- version %d
 >25	leshort		x		\b.%d
 >25	leshort		x		\b.%d
->33	byte		x		(Format %d,
->32	byte		0		Token ring)
->32	byte		1		Ethernet)
->32	byte		2		ARCNET)
->32	byte		3		StarLAN)
->32	byte		4		PC Network broadband)
->32	byte		5		LocalTalk)
->32	byte		6		Znet)
+>32	byte		0		(Token Ring)
+>32	byte		1		(Ethernet)
+>32	byte		2		(ARCNET)
+>32	byte		3		(StarLAN)
+>32	byte		4		(PC Network broadband)
+>32	byte		5		(LocalTalk)
+>32	byte		6		(Znet)
+>32	byte		7		(Internetwork Analyzer)
+>32	byte		9		(FDDI)
+>32	byte		10		(ATM)
 #
 #
 # Cinco Networks NetXRay capture files.
 # Cinco Networks NetXRay capture files.
+# Sorry, make that "Network General Sniffer Basic capture files."
+# Sorry, make that "Network Associates Sniffer Basic capture files."
 #
 #
 0	string		XCP\0		NetXRay capture file
 0	string		XCP\0		NetXRay capture file
 >4	string		>\0		- version %s
 >4	string		>\0		- version %s
 #
 #
 # "libpcap" capture files.
 # "libpcap" capture files.
 # (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
 # (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
-# the main program that uses that format, but there's also "tcpview",
-# and there may be others in the future.)
+# the main program that uses that format, but there are other programs
+# that use "libpcap", or that use the same capture file format.)
 #
 #
 0	ubelong		0xa1b2c3d4	tcpdump capture file (big-endian)
 0	ubelong		0xa1b2c3d4	tcpdump capture file (big-endian)
 >4	beshort		x		- version %d
 >4	beshort		x		- version %d

+ 28 - 0
Magdir/spectrum

@@ -0,0 +1,28 @@
+
+#------------------------------------------------------------------------------
+# spectrum:  file(1) magic for Spectrum emulator files.
+#
+# John Elliott <jce@seasip.demon.co.uk>
+
+#
+# Spectrum +3DOS header
+#
+0       string          PLUS3DOS\032    Spectrum +3 data
+>15     byte            0               - BASIC program
+>15     byte            1               - number array
+>15     byte            2               - character array
+>15     byte            3               - memory block
+>>16    belong          0x001B0040      (screen)
+>15     byte            4               - Tasword document
+>15     string          TAPEFILE        - ZXT tapefile
+#
+# Tape file. This assumes the .TAP starts with a Spectrum-format header,
+# which nearly all will.
+#
+0       string          \023\000\000    Spectrum .TAP data
+>4      string          x               "%-10.10s"
+>3      byte            0               - BASIC program
+>3      byte            1               - number array
+>3      byte            2               - character array
+>3      byte            3               - memory block
+>>14    belong          0x001B0040      (screen)

+ 5 - 1
Magdir/varied.out

@@ -15,7 +15,11 @@
 6	beshort		0407		unicos (cray) executable
 6	beshort		0407		unicos (cray) executable
 # Ultrix 4.3
 # Ultrix 4.3
 596	string		\130\337\377\377	Ultrix core file
 596	string		\130\337\377\377	Ultrix core file
->600	string		>\0	'%s'
+>600	string		>\0		from '%s'
 # BeOS and MAcOS PEF executables
 # BeOS and MAcOS PEF executables
 # From: hplus@zilker.net (Jon Watte)
 # From: hplus@zilker.net (Jon Watte)
 0	string		Joy!peffpwpc	header for PowerPC PEF executable
 0	string		Joy!peffpwpc	header for PowerPC PEF executable
+#
+# ava assembler/linker Uros Platise <uros.platise@ijs.si>
+0       string          avaobj  AVR assembler object code
+>7      string          >\0     version '%s'

+ 68 - 0
Makefile.am

@@ -0,0 +1,68 @@
+# don't enforce GNU packaging standards
+AUTOMAKE_OPTIONS = foreign no-dependencies
+
+bin_PROGRAMS = file
+
+data_DATA = magic
+
+MAGIC	 = @datadir@/magic
+CPPFLAGS = -DMAGIC='"$(MAGIC)"'
+
+man_MANS = file.1 magic.4
+
+file_SOURCES = file.c apprentice.c fsmagic.c softmagic.c ascmagic.c \
+	compress.c is_tar.c readelf.c internat.c print.c \
+	file.h names.h patchlevel.h readelf.h tar.h
+
+EXTRA_DIST = LEGAL.NOTICE MAINT PORTING Makefile.std magic2mime \
+	Localstuff Header $(magic_FRAGMENTS) file.man magic.man
+
+CLEANFILES = $(man_MANS) magic
+
+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 >> $@
+
+file.1:	Makefile file.man
+	@rm -f $@
+	sed -e s@__CSECTION__@1@g \
+	    -e s@__FSECTION__@4@g \
+	    -e s@__VERSION__@${VERSION}@g \
+	    -e s@__MAGIC__@${MAGIC}@g $(srcdir)/file.man > $@
+
+magic.4: Makefile magic.man
+	@rm -f $@
+	sed -e s@__CSECTION__@1@g \
+	    -e s@__FSECTION__@4@g \
+	    -e s@__VERSION__@${VERSION}@g \
+	    -e s@__MAGIC__@${MAGIC}@g $(srcdir)/magic.man > $@
+
+magic_FRAGMENTS = Magdir/adventure 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/blit \
+Magdir/bsdi Magdir/c-lang Magdir/chi Magdir/cisco Magdir/clipper \
+Magdir/commands Magdir/compress Magdir/convex Magdir/database \
+Magdir/diamond Magdir/diff Magdir/digital Magdir/dump Magdir/elf \
+Magdir/encore Magdir/filesystems Magdir/flash Magdir/fonts Magdir/frame \
+Magdir/freebsd Magdir/gimp Magdir/gnu Magdir/hp Magdir/ibm370 \
+Magdir/ibm6000 Magdir/iff Magdir/images Magdir/intel Magdir/interleaf \
+Magdir/island Magdir/ispell Magdir/java Magdir/karma Magdir/lecter \
+Magdir/lex Magdir/lif Magdir/linux Magdir/lisp Magdir/mach Magdir/macintosh \
+Magdir/magic Magdir/mail.news Magdir/mime Magdir/mirage Magdir/mkid \
+Magdir/mmdf Magdir/modem Magdir/motorola Magdir/msdos Magdir/ncr \
+Magdir/netbsd Magdir/news Magdir/octave Magdir/olf Magdir/os2 Magdir/os9 \
+Magdir/osf1 Magdir/pbm Magdir/pdf Magdir/pdp Magdir/pgp Magdir/pkgadd \
+Magdir/plus5 Magdir/printer Magdir/psdbms Magdir/pyramid Magdir/riff \
+Magdir/rpm Magdir/rtf Magdir/sc Magdir/sccs Magdir/sendmail Magdir/sequent \
+Magdir/sgi Magdir/sgml Magdir/sniffer Magdir/softquad Magdir/sun \
+Magdir/teapot Magdir/terminfo Magdir/tex Magdir/ti-8x Magdir/timezone \
+Magdir/troff Magdir/typeset Magdir/unknown Magdir/uuencode \
+Magdir/varied.out Magdir/vax Magdir/vicar Magdir/visx Magdir/vms \
+Magdir/wordperfect Magdir/xenix Magdir/zilog Magdir/zyxel

File diff suppressed because it is too large
+ 497 - 172
Makefile.in


+ 2 - 2
Makefile.std

@@ -1,6 +1,6 @@
 # Makefile for file(1) cmd. 
 # Makefile for file(1) cmd. 
 # Copyright (c) Ian F. Darwin 86/09/01 - see LEGAL.NOTICE.
 # Copyright (c) Ian F. Darwin 86/09/01 - see LEGAL.NOTICE.
-# @(#)$Id: Makefile.std,v 1.5 1998/09/12 13:17:52 christos Exp $
+# @(#)$Id: Makefile.std,v 1.6 1999/02/14 17:21:38 christos Exp $
 #
 #
 # This software is not subject to any license of the American Telephone
 # This software is not subject to any license of the American Telephone
 # and Telegraph Company or of the Regents of the University of California.
 # and Telegraph Company or of the Regents of the University of California.
@@ -21,7 +21,7 @@
 #    ever read sources, credits must appear in the documentation.
 #    ever read sources, credits must appear in the documentation.
 #
 #
 # 4. This notice may not be removed or altered.
 # 4. This notice may not be removed or altered.
-VERSION	= 3.26
+VERSION	= 3.27
 SHELL	= /bin/sh
 SHELL	= /bin/sh
 #MAGIC	= /etc/magic
 #MAGIC	= /etc/magic
 MAGIC	= /usr/local/etc/magic
 MAGIC	= /usr/local/etc/magic

+ 0 - 76
PORTING

@@ -1,76 +0,0 @@
-Portability of the new file(1) command.
-@(#) $Id: PORTING,v 1.11 1993/09/23 21:47:23 christos Exp $
-
-Read this file only if the program doesn't compile on your system.
-
-This release has been around UNIX; it has been compiled and tested
-in the following environments:
-
-SunOS sqarc 4.1.1 8 sun4
-	No problems.
-ULTRIX squint 4.2 0 RISC
-	No problems.
-A/UX sqmac 3.0a9 SVR22 mc68020
-	No problems.
-AIX sqibm 2 3 000XXXXXX100
-	Had weird "make" problems making "magic" file automatically; just
-	built it by hand. Your mileage may vary.
-SCO sqwang 3.2 2 i386
-	Compiles fine; their weird make can't handle "[a-z]*" as a dependancy,
-	so build magic by hand. Runs fine.
-sqzme sqzme 3.1.1 3 3B2
-	The 3B2 SVR3 needed a few tweaks as well as COPTS = -Ilocalinc
-	in order to compile.
-
-This version, reluctanly, includes <stdlib.h>, which won't exist
-on older systems or those that aren't even close to the ANSI C
-standard. There is a null "stdlib.h", and some other bogus headers,
-in subdirectory "localinc"; if you get complaints about missing
-stdlib.h and others, uncomment the line with COPTS=-Ilocalinc
-in the Makefile, and try again.
-
-You must have either <stdarg.h> or the older <varargs.h>, otherwise you'll
-have to butcher some routines in print.c.
-
-Beyond that, I have tried to make a program that doesn't need any
-command-line defines (-D) to specify what version of UNIX is in use,
-by using the definitions available in the system #include
-files. For example, the lstat(2) call is normally found in
-4BSD systems, but might be grafted into some other variant
-of UNIX. If it's done right (ie., using the same definitions),
-my program will compile and work correctly. Look at the #ifdefs
-to see how it's done. 
-
-I've also tried to include source for all the non-portable library routines
-I used (getopt, str*).   Non-portable here means `not in every
-reasonably standard UNIX out there: V7, System V, 4BSD'.
-These are in subdirectory "localsrc", and not used unless you
-need them; again, see the Makefile.
-
-There is one area that just might cause problems. On System
-V, they moved the definition of major() and minor() out of
-<sys/types.h> into <sys/sysmacros.h>.  Hence, if major isn't
-defined after including types.h, I automatically include sys/sysmacros.h.
-This will work for 99% of the systems out there. ONLY if you
-have a system in which  neither types.h nor sysmacros.h defines
-`major' will this automatic include fail (I hope). On such
-systems, you will get a compilation error in trying to compile
-a warning message. Please do the following: 
-
-	1) change the appropriate #include at the start of fsmagic.c
-and	2) let me know the name of the system, the release number,
-	   and the name of the header file that *does* include
-	   this "standard" definition.
-
-If you are running the old Ritchie PDP-11 C compiler or
-some other compiler that doesn't know about `void', you will have
-to include `-Dvoid=int' in the variable COPTS in the Makefile.
-
-Other than this, there should be no portability problems,
-but one never knows these days. Please let me know of any
-other problems you find porting to a UNIX system. I don't much
-care about non-UNIX systems but will collect widely-used magic 
-numbers for them as well as for UNIX systems.
-
-Mark Moraes and Christos Zoulas
-(address in README)

+ 42 - 0
acconfig.h

@@ -0,0 +1,42 @@
+/* Autoheader needs me */
+#define PACKAGE "file"
+
+/* Autoheader needs me */
+#define VERSION "3.27"
+
+/* Define if builtin ELF support is enabled.  */
+#undef BUILTIN_ELF
+
+/* Define if ELF core file support is enabled.  */
+#undef ELFCORE
+
+/* Define if the `long long' type works.  */
+#undef HAVE_LONG_LONG
+
+/* Define to `unsigned char' if standard headers don't define.  */
+#undef uint8_t
+
+/* Define to `unsigned short' if standard headers don't define.  */
+#undef uint16_t
+
+/* Define to `unsigned int' if standard headers don't define.  */
+#undef uint32_t
+
+/* Define to `unsigned long long', if available, or `unsigned long', if
+   standard headers don't define.  */
+#undef uint64_t
+
+/* FIXME: These have to be added manually because autoheader doesn't know
+   about AC_CHECK_SIZEOF_INCLUDES.  */
+
+/* The number of bytes in a uint8_t.  */
+#define SIZEOF_UINT8_T 0
+
+/* The number of bytes in a uint16_t.  */
+#define SIZEOF_UINT16_T 0
+
+/* The number of bytes in a uint32_t.  */
+#define SIZEOF_UINT32_T 0
+
+/* The number of bytes in a uint64_t.  */
+#define SIZEOF_UINT64_T 0

+ 79 - 0
acinclude.m4

@@ -0,0 +1,79 @@
+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 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 AC_CHECK_TYPE2(TYPE, DEFAULT)
+AC_DEFUN(AC_CHECK_TYPE2,
+[AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(ac_cv_type_$1,
+[AC_EGREP_CPP(dnl
+changequote(<<,>>)dnl
+<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
+changequote([,]), [#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,
+[changequote(<<, >>)dnl
+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
+changequote([, ])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_CHECK_SIZEOF_INCLUDES($1, $2,
+[#include <sys/types.h>
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#endif
+])
+])

+ 216 - 0
aclocal.m4

@@ -0,0 +1,216 @@
+dnl aclocal.m4 generated automatically by aclocal 1.3
+
+dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+dnl This Makefile.in is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+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 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 AC_CHECK_TYPE2(TYPE, DEFAULT)
+AC_DEFUN(AC_CHECK_TYPE2,
+[AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(ac_cv_type_$1,
+[AC_EGREP_CPP(dnl
+changequote(<<,>>)dnl
+<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl
+changequote([,]), [#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,
+[changequote(<<, >>)dnl
+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
+changequote([, ])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_CHECK_SIZEOF_INCLUDES($1, $2,
+[#include <sys/types.h>
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#endif
+])
+])
+
+# Do all the work for Automake.  This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AM_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION"))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+
+# serial 1
+
+AC_DEFUN(AM_PROG_INSTALL,
+[AC_REQUIRE([AC_PROG_INSTALL])
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+AC_SUBST(INSTALL_SCRIPT)dnl
+])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "[$]*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "[$]*" != "X $srcdir/configure conftestfile" \
+      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "[$]2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+   $1=$2
+   AC_MSG_RESULT(found)
+else
+   $1="$3/missing $2"
+   AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated.  We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+  case " <<$>>CONFIG_HEADERS " in
+  *" <<$>>am_file "*<<)>>
+    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+    ;;
+  esac
+  am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+

+ 10 - 3
apprentice.c

@@ -33,7 +33,7 @@
 #include "file.h"
 #include "file.h"
 
 
 #ifndef	lint
 #ifndef	lint
-FILE_RCSID("@(#)$Id: apprentice.c,v 1.28 1998/09/12 13:17:52 christos Exp $")
+FILE_RCSID("@(#)$Id: apprentice.c,v 1.29 1999/10/31 22:23:03 christos Exp $")
 #endif	/* lint */
 #endif	/* lint */
 
 
 #define	EATAB {while (isascii((unsigned char) *l) && \
 #define	EATAB {while (isascii((unsigned char) *l) && \
@@ -182,7 +182,7 @@ int *ndx, check;
 	struct magic *m;
 	struct magic *m;
 	char *t, *s;
 	char *t, *s;
 
 
-#define ALLOC_INCR	20
+#define ALLOC_INCR	200
 	if (nd+1 >= maxmagic){
 	if (nd+1 >= maxmagic){
 	    maxmagic += ALLOC_INCR;
 	    maxmagic += ALLOC_INCR;
 	    if ((magic = (struct magic *) realloc(magic, 
 	    if ((magic = (struct magic *) realloc(magic, 
@@ -291,7 +291,10 @@ int *ndx, check;
 	}
 	}
 
 
 	/* get type, skip it */
 	/* get type, skip it */
-	if (strncmp(l, "byte", NBYTE)==0) {
+	if (strncmp(l, "char", NBYTE)==0) {	/* HP/UX compat */
+		m->type = BYTE;
+		l += NBYTE;
+	} else if (strncmp(l, "byte", NBYTE)==0) {
 		m->type = BYTE;
 		m->type = BYTE;
 		l += NBYTE;
 		l += NBYTE;
 	} else if (strncmp(l, "short", NSHORT)==0) {
 	} else if (strncmp(l, "short", NSHORT)==0) {
@@ -346,6 +349,10 @@ int *ndx, check;
 	case '=':
 	case '=':
   		m->reln = *l;
   		m->reln = *l;
   		++l;
   		++l;
+		if (*l == '=') {
+		   /* HP compat: ignore &= etc. */
+		   ++l;
+		}
 		break;
 		break;
 	case '!':
 	case '!':
 		if (m->type != STRING) {
 		if (m->type != STRING) {

+ 4 - 2
ascmagic.c

@@ -26,17 +26,19 @@
  * 4. This notice may not be removed or altered.
  * 4. This notice may not be removed or altered.
  */
  */
 
 
+#include "file.h"
 #include <stdio.h>
 #include <stdio.h>
 #include <string.h>
 #include <string.h>
 #include <memory.h>
 #include <memory.h>
 #include <ctype.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <stdlib.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <unistd.h>
-#include "file.h"
+#endif
 #include "names.h"
 #include "names.h"
 
 
 #ifndef	lint
 #ifndef	lint
-FILE_RCSID("@(#)$Id: ascmagic.c,v 1.23 1998/06/27 13:23:39 christos Exp $");
+FILE_RCSID("@(#)$Id: ascmagic.c,v 1.24 1999/02/14 17:16:00 christos Exp $")
 #endif	/* lint */
 #endif	/* lint */
 
 
 			/* an optimisation over plain strcmp() */
 			/* an optimisation over plain strcmp() */

+ 7 - 5
compress.c

@@ -5,19 +5,21 @@
  *	uncompress(method, old, n, newch) - uncompress old into new, 
  *	uncompress(method, old, n, newch) - uncompress old into new, 
  *					    using method, return sizeof new
  *					    using method, return sizeof new
  */
  */
+#include "file.h"
+#ifdef __CYGWIN__
+#include <errno.h>
+#endif
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <unistd.h>
-#include <string.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
 #endif
 #endif
+#include <string.h>
 #ifdef HAVE_SYS_WAIT_H
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
 #include <sys/wait.h>
 #endif
 #endif
-#include "file.h"
 #ifndef lint
 #ifndef lint
-FILE_RCSID("@(#)$Id: compress.c,v 1.12 1998/06/27 13:57:23 christos Exp $")
+FILE_RCSID("@(#)$Id: compress.c,v 1.14 1999/10/31 22:23:03 christos Exp $")
 #endif
 #endif
 
 
 
 

+ 55 - 0
config.h.in

@@ -9,6 +9,12 @@
 /* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
 /* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
 #undef HAVE_SYS_WAIT_H
 #undef HAVE_SYS_WAIT_H
 
 
+/* Define if major, minor, and makedev are declared in <mkdev.h>.  */
+#undef MAJOR_IN_MKDEV
+
+/* Define if major, minor, and makedev are declared in <sysmacros.h>.  */
+#undef MAJOR_IN_SYSMACROS
+
 /* Define to `long' if <sys/types.h> doesn't define.  */
 /* Define to `long' if <sys/types.h> doesn't define.  */
 #undef off_t
 #undef off_t
 
 
@@ -17,3 +23,52 @@
 
 
 /* Define if you have the ANSI C header files.  */
 /* Define if you have the ANSI C header files.  */
 #undef STDC_HEADERS
 #undef STDC_HEADERS
+
+/* Autoheader needs me */
+#define PACKAGE "file"
+
+/* Autoheader needs me */
+#define VERSION "3.27"
+
+/* Define if builtin ELF support is enabled.  */
+#undef BUILTIN_ELF
+
+/* Define if ELF core file support is enabled.  */
+#undef ELFCORE
+
+/* Define if the `long long' type works.  */
+#undef HAVE_LONG_LONG
+
+/* Define to `unsigned char' if standard headers don't define.  */
+#undef uint8_t
+
+/* Define to `unsigned short' if standard headers don't define.  */
+#undef uint16_t
+
+/* Define to `unsigned int' if standard headers don't define.  */
+#undef uint32_t
+
+/* Define to `unsigned long long', if available, or `unsigned long', if
+   standard headers don't define.  */
+#undef uint64_t
+
+/* The number of bytes in a uint8_t.  */
+#define SIZEOF_UINT8_T 0
+
+/* The number of bytes in a uint16_t.  */
+#define SIZEOF_UINT16_T 0
+
+/* The number of bytes in a uint32_t.  */
+#define SIZEOF_UINT32_T 0
+
+/* The number of bytes in a uint64_t.  */
+#define SIZEOF_UINT64_T 0
+
+/* Define if you have the strerror function.  */
+#undef HAVE_STRERROR
+
+/* Define if you have the strtoul function.  */
+#undef HAVE_STRTOUL
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H

File diff suppressed because it is too large
+ 1305 - 259
configure


+ 58 - 3
configure.in

@@ -1,18 +1,73 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(file.c)
 AC_INIT(file.c)
+AM_INIT_AUTOMAKE(file, 3.27)
+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)
+else
+  AC_MSG_RESULT(no)
+fi], [
+  # enable by default
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(BUILTIN_ELF)
+])
+
+AC_MSG_CHECKING(for ELF core file support)
+AC_ARG_ENABLE(elf-core,
+[  --disable-elf-core       disable ELF core file support],
+[if test "${enableval}" = yes; then
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(ELFCORE)
+else
+  AC_MSG_RESULT(no)
+fi], [
+  # enable by default
+  AC_MSG_RESULT(yes)
+  AC_DEFINE(ELFCORE)
+])
 
 
 dnl Checks for programs.
 dnl Checks for programs.
 AC_PROG_CC
 AC_PROG_CC
 AC_PROG_INSTALL
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_LN_S
 
 
+dnl Checks for headers
+AC_HEADER_STDC
+AC_HEADER_MAJOR
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(unistd.h)
+
 dnl Checks for typedefs, structures, and compiler characteristics.
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 AC_C_CONST
 AC_TYPE_OFF_T
 AC_TYPE_OFF_T
 AC_TYPE_SIZE_T
 AC_TYPE_SIZE_T
 AC_STRUCT_ST_RDEV
 AC_STRUCT_ST_RDEV
 
 
-dnl Checks for headers
-AC_HEADER_SYS_WAIT
+dnl FIXME: only found in standard headers!
+AC_CHECK_TYPE(uint8_t, unsigned char)
+AC_CHECK_TYPE(uint16_t, unsigned short)
+AC_CHECK_TYPE(uint32_t, unsigned int)
+
+AC_C_LONG_LONG
+if test $ac_cv_c_long_long = yes; then
+  long64='unsigned long long';
+else
+  long64='unsigned long';
+fi
+dnl This needs a patch to autoconf 2.13 acgeneral.m4
+AC_CHECK_TYPE2(uint64_t, $long64)
+
+AC_CHECK_SIZEOF_STDC_HEADERS(uint8_t, 0)
+AC_CHECK_SIZEOF_STDC_HEADERS(uint16_t, 0)
+AC_CHECK_SIZEOF_STDC_HEADERS(uint32_t, 0)
+AC_CHECK_SIZEOF_STDC_HEADERS(uint64_t, 0)
+
+dnl Checks for functions
+AC_CHECK_FUNCS(strerror strtoul)
 
 
-AC_OUTPUT(Makefile config.h)
+AC_OUTPUT(Makefile)

+ 29 - 9
file.c

@@ -24,6 +24,10 @@
  *
  *
  * 4. This notice may not be removed or altered.
  * 4. This notice may not be removed or altered.
  */
  */
+#include "file.h"
+#ifdef __CYGWIN__
+#include <errno.h>
+#endif
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
 #include <string.h>
 #include <string.h>
@@ -42,34 +46,40 @@
 #  endif
 #  endif
 # endif
 # endif
 #endif
 #endif
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>	/* for read() */
 #include <unistd.h>	/* for read() */
+#endif
 
 
 #include <netinet/in.h>		/* for byte swapping */
 #include <netinet/in.h>		/* for byte swapping */
 
 
 #include "patchlevel.h"
 #include "patchlevel.h"
-#include "file.h"
 
 
 #ifndef	lint
 #ifndef	lint
-FILE_RCSID("@(#)$Id: file.c,v 1.42 1998/09/12 13:17:52 christos Exp $")
+FILE_RCSID("@(#)$Id: file.c,v 1.47 1999/10/31 22:23:03 christos Exp $")
 #endif	/* lint */
 #endif	/* lint */
 
 
 
 
 #ifdef S_IFLNK
 #ifdef S_IFLNK
-# define USAGE  "Usage: %s [-vbczL] [-f namefile] [-m magicfiles] file...\n"
+# define USAGE  "Usage: %s [-bcnvzL] [-f namefile] [-m magicfiles] file...\n"
 #else
 #else
-# define USAGE  "Usage: %s [-vbcz] [-f namefile] [-m magicfiles] file...\n"
+# define USAGE  "Usage: %s [-bcnvz] [-f namefile] [-m magicfiles] file...\n"
 #endif
 #endif
 
 
 #ifndef MAGIC
 #ifndef MAGIC
 # define MAGIC "/etc/magic"
 # define MAGIC "/etc/magic"
 #endif
 #endif
 
 
+#ifndef MAXPATHLEN
+#define	MAXPATHLEN	512
+#endif
+
 int 			/* Global command-line options 		*/
 int 			/* Global command-line options 		*/
 	debug = 0, 	/* debugging 				*/
 	debug = 0, 	/* debugging 				*/
 	lflag = 0,	/* follow Symlinks (BSD only) 		*/
 	lflag = 0,	/* follow Symlinks (BSD only) 		*/
 	bflag = 0,	/* brief output format	 		*/
 	bflag = 0,	/* brief output format	 		*/
-	zflag = 0;	/* follow (uncompress) compressed files */
-
+	zflag = 0,	/* follow (uncompress) compressed files */
+	sflag = 0,	/* read block special files		*/
+	nobuffer = 0;   /* Do not buffer stdout */
 int			/* Misc globals				*/
 int			/* Misc globals				*/
 	nmagic = 0;	/* number of valid magic[]s 		*/
 	nmagic = 0;	/* number of valid magic[]s 		*/
 
 
@@ -94,8 +104,8 @@ int main __P((int, char *[]));
  */
  */
 int
 int
 main(argc, argv)
 main(argc, argv)
-int argc;
-char *argv[];
+	int argc;
+	char *argv[];
 {
 {
 	int c;
 	int c;
 	int check = 0, didsomefiles = 0, errflg = 0, ret = 0, app = 0;
 	int check = 0, didsomefiles = 0, errflg = 0, ret = 0, app = 0;
@@ -108,11 +118,13 @@ char *argv[];
 	if (!(magicfile = getenv("MAGIC")))
 	if (!(magicfile = getenv("MAGIC")))
 		magicfile = MAGIC;
 		magicfile = MAGIC;
 
 
-	while ((c = getopt(argc, argv, "vbcdf:Lm:z")) != EOF)
+	while ((c = getopt(argc, argv, "bcdnf:m:svzL")) != EOF)
 		switch (c) {
 		switch (c) {
 		case 'v':
 		case 'v':
 			(void) fprintf(stdout, "%s-%d.%d\n", progname,
 			(void) fprintf(stdout, "%s-%d.%d\n", progname,
 				       FILE_VERSION_MAJOR, patchlevel);
 				       FILE_VERSION_MAJOR, patchlevel);
+			(void) fprintf(stdout, "magic file from %s\n",
+				       magicfile);
 			return 1;
 			return 1;
 		case 'b':
 		case 'b':
 			++bflag;
 			++bflag;
@@ -120,6 +132,9 @@ char *argv[];
 		case 'c':
 		case 'c':
 			++check;
 			++check;
 			break;
 			break;
+		case 'n':
+			++nobuffer;
+			break;
 		case 'd':
 		case 'd':
 			++debug;
 			++debug;
 			break;
 			break;
@@ -144,6 +159,9 @@ char *argv[];
 		case 'z':
 		case 'z':
 			zflag++;
 			zflag++;
 			break;
 			break;
+		case 's':
+			sflag++;
+			break;
 		case '?':
 		case '?':
 		default:
 		default:
 			errflg++;
 			errflg++;
@@ -215,6 +233,8 @@ char *fn;
 	while (fgets(buf, MAXPATHLEN, f) != NULL) {
 	while (fgets(buf, MAXPATHLEN, f) != NULL) {
 		buf[strlen(buf)-1] = '\0';
 		buf[strlen(buf)-1] = '\0';
 		process(buf, wid);
 		process(buf, wid);
+		if(nobuffer)
+			(void) fflush(stdout);
 	}
 	}
 
 
 	(void) fclose(f);
 	(void) fclose(f);

+ 14 - 19
file.h

@@ -1,6 +1,6 @@
 /*
 /*
  * file.h - definitions for file(1) program
  * file.h - definitions for file(1) program
- * @(#)$Id: file.h,v 1.27 1998/06/27 13:57:23 christos Exp $
+ * @(#)$Id: file.h,v 1.29 1999/02/14 17:16:06 christos Exp $
  *
  *
  * Copyright (c) Ian F. Darwin, 1987.
  * Copyright (c) Ian F. Darwin, 1987.
  * Written by Ian F. Darwin.
  * Written by Ian F. Darwin.
@@ -29,11 +29,15 @@
 #ifndef __file_h__
 #ifndef __file_h__
 #define __file_h__
 #define __file_h__
 
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 typedef int int32;
 typedef int int32;
 typedef unsigned int uint32;
 typedef unsigned int uint32;
 
 
 #ifndef HOWMANY
 #ifndef HOWMANY
-# define HOWMANY 8192		/* how much of the file to look at */
+# define HOWMANY 16384		/* how much of the file to look at */
 #endif
 #endif
 #define MAXMAGIS 1000		/* max entries in /etc/magic */
 #define MAXMAGIS 1000		/* max entries in /etc/magic */
 #define MAXDESC	50		/* max leng of text description */
 #define MAXDESC	50		/* max leng of text description */
@@ -46,12 +50,12 @@ struct magic {
 #define ADD	4		/* if '>&' appears,  */
 #define ADD	4		/* if '>&' appears,  */
 	short cont_level;	/* level of ">" */
 	short cont_level;	/* level of ">" */
 	struct {
 	struct {
-		char type;	/* byte short long */
+		unsigned char type;	/* byte short long */
 		int32 offset;	/* offset from indirection */
 		int32 offset;	/* offset from indirection */
 	} in;
 	} in;
 	int32 offset;		/* offset to magic number */
 	int32 offset;		/* offset to magic number */
 	unsigned char reln;	/* relation (0=eq, '>'=gt, etc) */
 	unsigned char reln;	/* relation (0=eq, '>'=gt, etc) */
-	char type;		/* int, short, long or string. */
+	unsigned char type;	/* int, short, long or string. */
 	char vallen;		/* length of string value, if any */
 	char vallen;		/* length of string value, if any */
 #define 			BYTE	1
 #define 			BYTE	1
 #define				SHORT	2
 #define				SHORT	2
@@ -80,7 +84,7 @@ struct magic {
 #include <stdio.h>	/* Include that here, to make sure __P gets defined */
 #include <stdio.h>	/* Include that here, to make sure __P gets defined */
 
 
 #ifndef __P
 #ifndef __P
-# if __STDC__ || __cplusplus
+# if defined(__STDC__) || defined(__cplusplus)
 #  define __P(a) a
 #  define __P(a) a
 # else
 # else
 #  define __P(a) ()
 #  define __P(a) ()
@@ -106,7 +110,7 @@ extern int   zmagic		__P((unsigned char *, int));
 extern void  ckfprintf		__P((FILE *, const char *, ...));
 extern void  ckfprintf		__P((FILE *, const char *, ...));
 extern uint32 signextend	__P((struct magic *, unsigned int32));
 extern uint32 signextend	__P((struct magic *, unsigned int32));
 extern int internatmagic	__P((unsigned char *, int));
 extern int internatmagic	__P((unsigned char *, int));
-extern void tryelf		__P((int, char *, int));
+extern void tryelf		__P((int, unsigned char *, int));
 
 
 
 
 extern int errno;		/* Some unixes don't define this..	*/
 extern int errno;		/* Some unixes don't define this..	*/
@@ -122,29 +126,20 @@ extern int nmagic;		/* number of valid magic[]s 		*/
 extern int debug;		/* enable debugging?			*/
 extern int debug;		/* enable debugging?			*/
 extern int zflag;		/* process compressed files?		*/
 extern int zflag;		/* process compressed files?		*/
 extern int lflag;		/* follow symbolic links?		*/
 extern int lflag;		/* follow symbolic links?		*/
+extern int sflag;		/* read/analyze block special files?	*/
 
 
 extern int optind;		/* From getopt(3)			*/
 extern int optind;		/* From getopt(3)			*/
 extern char *optarg;
 extern char *optarg;
 
 
-#if defined(sun) || defined(__sun__) || defined (__sun)
-# if defined(__svr4) || defined (__SVR4) || defined(__svr4__)
-#  define SOLARIS
-# else
-#  define SUNOS
-# endif
-#endif
-
-
-#if !defined(__STDC__) || defined(SUNOS) || defined(__convex__)
+#ifndef HAVE_STRERROR
 extern int sys_nerr;
 extern int sys_nerr;
 extern char *sys_errlist[];
 extern char *sys_errlist[];
 #define strerror(e) \
 #define strerror(e) \
 	(((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
 	(((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
-#define strtoul(a, b, c)	strtol(a, b, c)
 #endif
 #endif
 
 
-#ifndef MAXPATHLEN
-#define	MAXPATHLEN	512
+#ifndef HAVE_STRTOUL
+#define strtoul(a, b, c)	strtol(a, b, c)
 #endif
 #endif
 
 
 #ifdef __STDC__
 #ifdef __STDC__

+ 60 - 13
file.man

@@ -1,12 +1,12 @@
 .TH FILE __CSECTION__ "Copyright but distributable"
 .TH FILE __CSECTION__ "Copyright but distributable"
-.\" $Id: file.man,v 1.31 1998/02/15 23:18:53 christos Exp $
+.\" $Id: file.man,v 1.33 1999/02/14 17:16:07 christos Exp $
 .SH NAME
 .SH NAME
 file
 file
 \- determine file type
 \- determine file type
 .SH SYNOPSIS
 .SH SYNOPSIS
 .B file
 .B file
 [
 [
-.B \-vbczL
+.B \-bcnsvzL
 ]
 ]
 [
 [
 .B \-f
 .B \-f
@@ -105,16 +105,6 @@ archives) and determine whether an unknown file should be
 labelled as `ascii text' or `data'. 
 labelled as `ascii text' or `data'. 
 .SH OPTIONS
 .SH OPTIONS
 .TP 8
 .TP 8
-.B \-v
-Print the version of the program and exit.
-.TP 8
-.B \-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 \-z
-Try to look inside compressed files.
-.TP 8
 .B \-b
 .B \-b
 Do not prepend filenames to output lines (brief mode).
 Do not prepend filenames to output lines (brief mode).
 .TP 8
 .TP 8
@@ -134,10 +124,46 @@ Either
 or at least one filename argument must be present;
 or at least one filename argument must be present;
 to test the standard input, use ``-'' as a filename argument.
 to test the standard input, use ``-'' as a filename argument.
 .TP 8
 .TP 8
+.B \-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 check a file. This is only useful if
+checking a list of files. It is intended to be used by programs 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
 .B \-L
 option causes symlinks to be followed, as the like-named option in
 option causes symlinks to be followed, as the like-named option in
 .BR ls (1).
 .BR ls (1).
 (on systems that support symbolic links).
 (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
 .SH FILES
 .I __MAGIC__
 .I __MAGIC__
 \- default list of magic numbers
 \- default list of magic numbers
@@ -206,6 +232,27 @@ command uses a magic file,
 keep the old magic file around for comparison purposes
 keep the old magic file around for comparison purposes
 (rename it to 
 (rename it to 
 .IR __MAGIC__.orig ).
 .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
+.fi
 .SH HISTORY
 .SH HISTORY
 There has been a 
 There has been a 
 .B file
 .B file
@@ -251,7 +298,7 @@ the process running
 .RE
 .RE
 .PP
 .PP
 Changes by Ian Darwin and various authors including
 Changes by Ian Darwin and various authors including
-Christos Zoulas (christos@astron.com), 1990-1997.
+Christos Zoulas (christos@astron.com), 1990-1999.
 .SH LEGAL NOTICE
 .SH LEGAL NOTICE
 Copyright (c) Ian F. Darwin, Toronto, Canada,
 Copyright (c) Ian F. Darwin, Toronto, Canada,
 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.
 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.

+ 75 - 19
fsmagic.c

@@ -25,35 +25,39 @@
  * 4. This notice may not be removed or altered.
  * 4. This notice may not be removed or altered.
  */
  */
 
 
+#include "file.h"
+#ifdef __CYGWIN__
+#include <errno.h>
+#endif
 #include <stdio.h>
 #include <stdio.h>
 #include <string.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <unistd.h>
+#endif
 #include <stdlib.h>
 #include <stdlib.h>
-#ifdef HAVE_CONFIG_H
-#include "config.h"
+/* Since major is a function on SVR4, we can't use `ifndef major'.  */
+#ifdef MAJOR_IN_MKDEV
+# include <sys/mkdev.h>
+# define HAVE_MAJOR
 #endif
 #endif
-#ifndef major
-# if defined(__SVR4) || defined(_SVR4_SOURCE)
-#  include <sys/mkdev.h>
-# endif
+#ifdef MAJOR_IN_SYSMACROS
+# include <sys/sysmacros.h>
+# define HAVE_MAJOR
 #endif
 #endif
-#ifndef	major			/* if `major' not defined in types.h, */
-#include <sys/sysmacros.h>	/* try this one. */
+#ifdef major			/* Might be defined in sys/types.h.  */
+# define HAVE_MAJOR
 #endif
 #endif
-#ifndef	major	/* still not defined? give up, manual intervention needed */
-		/* If cc tries to compile this, read and act on it. */
-		/* On most systems cpp will discard it automatically */
-		Congratulations, you have found a portability bug.
-		Please grep /usr/include/sys and edit the above #include 
-		to point at the file that defines the "major" macro.
-#endif	/*major*/
-
-#include "file.h"
+  
+#ifndef HAVE_MAJOR
+# define major(dev)  (((dev) >> 8) & 0xff)
+# define minor(dev)  ((dev) & 0xff)
+#endif
+#undef HAVE_MAJOR
 
 
 #ifndef	lint
 #ifndef	lint
-FILE_RCSID("@(#)$Id: fsmagic.c,v 1.27 1998/06/27 13:23:39 christos Exp $")
+FILE_RCSID("@(#)$Id: fsmagic.c,v 1.30 1999/10/31 22:23:03 christos Exp $")
 #endif	/* lint */
 #endif	/* lint */
 
 
 int
 int
@@ -82,36 +86,79 @@ struct stat *sb;
 		return 1;
 		return 1;
 	}
 	}
 
 
+#ifdef S_ISUID
 	if (sb->st_mode & S_ISUID) ckfputs("setuid ", stdout);
 	if (sb->st_mode & S_ISUID) ckfputs("setuid ", stdout);
+#endif
+#ifdef S_ISGID
 	if (sb->st_mode & S_ISGID) ckfputs("setgid ", stdout);
 	if (sb->st_mode & S_ISGID) ckfputs("setgid ", stdout);
+#endif
+#ifdef S_ISVTX
 	if (sb->st_mode & S_ISVTX) ckfputs("sticky ", stdout);
 	if (sb->st_mode & S_ISVTX) ckfputs("sticky ", stdout);
+#endif
 	
 	
 	switch (sb->st_mode & S_IFMT) {
 	switch (sb->st_mode & S_IFMT) {
 	case S_IFDIR:
 	case S_IFDIR:
 		ckfputs("directory", stdout);
 		ckfputs("directory", stdout);
 		return 1;
 		return 1;
+#ifdef S_IFCHR
 	case S_IFCHR:
 	case S_IFCHR:
+		/* 
+		 * If -s has been specified, treat character special files
+		 * like ordinary files.  Otherwise, just report that they
+		 * are block special files and go on to the next file.
+		 */
+		if (sflag)
+			break;
 #ifdef HAVE_ST_RDEV
 #ifdef HAVE_ST_RDEV
+# ifdef dv_unit
+		(void) printf("character special (%d/%d/%d)",
+			major(sb->st_rdev),
+			dv_unit(sb->st_rdev),
+			dv_subunit(sb->st_rdev));
+# else
 		(void) printf("character special (%ld/%ld)",
 		(void) printf("character special (%ld/%ld)",
 			(long) major(sb->st_rdev), (long) minor(sb->st_rdev));
 			(long) major(sb->st_rdev), (long) minor(sb->st_rdev));
+# endif
 #else
 #else
 		(void) printf("character special");
 		(void) printf("character special");
 #endif
 #endif
 		return 1;
 		return 1;
+#endif
+#ifdef S_IFBLK
 	case S_IFBLK:
 	case S_IFBLK:
+		/* 
+		 * If -s has been specified, treat block special files
+		 * like ordinary files.  Otherwise, just report that they
+		 * are block special files and go on to the next file.
+		 */
+		if (sflag)
+			break;
 #ifdef HAVE_ST_RDEV
 #ifdef HAVE_ST_RDEV
+# ifdef dv_unit
+		(void) printf("block special (%d/%d/%d)",
+			major(sb->st_rdev),
+			dv_unit(sb->st_rdev),
+			dv_subunit(sb->st_rdev));
+# else
 		(void) printf("block special (%ld/%ld)",
 		(void) printf("block special (%ld/%ld)",
 			(long) major(sb->st_rdev), (long) minor(sb->st_rdev));
 			(long) major(sb->st_rdev), (long) minor(sb->st_rdev));
+# endif
 #else
 #else
 		(void) printf("block special");
 		(void) printf("block special");
 #endif
 #endif
 		return 1;
 		return 1;
+#endif
 	/* TODO add code to handle V7 MUX and Blit MUX files */
 	/* TODO add code to handle V7 MUX and Blit MUX files */
 #ifdef	S_IFIFO
 #ifdef	S_IFIFO
 	case S_IFIFO:
 	case S_IFIFO:
 		ckfputs("fifo (named pipe)", stdout);
 		ckfputs("fifo (named pipe)", stdout);
 		return 1;
 		return 1;
 #endif
 #endif
+#ifdef	S_IFDOOR
+	case S_IFDOOR:
+		ckfputs("door", stdout);
+		return 1;
+#endif
 #ifdef	S_IFLNK
 #ifdef	S_IFLNK
 	case S_IFLNK:
 	case S_IFLNK:
 		{
 		{
@@ -181,8 +228,17 @@ struct stat *sb;
 
 
 	/*
 	/*
 	 * regular file, check next possibility
 	 * regular file, check next possibility
+	 *
+	 * If stat() tells us the file has zero length, report here that
+	 * the file is empty, so we can skip all the work of opening and 
+	 * reading the file.
+	 * But if the -s option has been given, we skip this optimization,
+	 * since on some systems, stat() reports zero size for raw disk
+	 * partitions.  (If the block special device really has zero length,
+	 * the fact that it is empty will be detected and reported correctly
+	 * when we read the file.)
 	 */
 	 */
-	if (sb->st_size == 0) {
+	if (!sflag && sb->st_size == 0) {
 		ckfputs("empty", stdout);
 		ckfputs("empty", stdout);
 		return 1;
 		return 1;
 	}
 	}

+ 6 - 10
is_tar.c

@@ -2,10 +2,10 @@
  * is_tar() -- figure out whether file is a tar archive.
  * is_tar() -- figure out whether file is a tar archive.
  *
  *
  * Stolen (by the author!) from the public domain tar program:
  * Stolen (by the author!) from the public domain tar program:
- * Pubic Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
+ * Public Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
  *
  *
  * @(#)list.c 1.18 9/23/86 Public Domain - gnu
  * @(#)list.c 1.18 9/23/86 Public Domain - gnu
- * $Id: is_tar.c,v 1.10 1998/06/27 13:23:39 christos Exp $
+ * $Id: is_tar.c,v 1.12 1999/02/14 17:16:08 christos Exp $
  *
  *
  * Comments changed and some code/comments reformatted
  * Comments changed and some code/comments reformatted
  * for file command by Ian Darwin.
  * for file command by Ian Darwin.
@@ -18,16 +18,12 @@
 #include "file.h"
 #include "file.h"
 
 
 #ifndef lint
 #ifndef lint
-FILE_RCSID("@(#)$Id: is_tar.c,v 1.10 1998/06/27 13:23:39 christos Exp $")
+FILE_RCSID("@(#)$Id: is_tar.c,v 1.12 1999/02/14 17:16:08 christos Exp $")
 #endif
 #endif
 
 
 #define	isodigit(c)	( ((c) >= '0') && ((c) <= '7') )
 #define	isodigit(c)	( ((c) >= '0') && ((c) <= '7') )
 
 
-#if	defined(__STDC__) || defined(__cplusplus)
-static int from_oct(int, char*);	/* Decode octal number */
-#else
-static int from_oct();
-#endif
+static int from_oct __P((int, char *));	/* Decode octal number */
 
 
 /*
 /*
  * Return 
  * Return 
@@ -87,7 +83,7 @@ from_oct(digs, where)
 {
 {
 	register int	value;
 	register int	value;
 
 
-	while (isspace(*where)) {		/* Skip spaces */
+	while (isspace((unsigned char)*where)) {		/* Skip spaces */
 		where++;
 		where++;
 		if (--digs <= 0)
 		if (--digs <= 0)
 			return -1;		/* All blank field */
 			return -1;		/* All blank field */
@@ -98,7 +94,7 @@ from_oct(digs, where)
 		--digs;
 		--digs;
 	}
 	}
 
 
-	if (digs > 0 && *where && !isspace(*where))
+	if (digs > 0 && *where && !isspace((unsigned char)*where))
 		return -1;			/* Ended on non-space/nul */
 		return -1;			/* Ended on non-space/nul */
 
 
 	return value;
 	return value;

+ 0 - 0
missing


+ 0 - 0
mkinstalldirs


+ 1 - 2
names.h

@@ -10,7 +10,7 @@
  *
  *
  * See LEGAL.NOTICE
  * See LEGAL.NOTICE
  *
  *
- * $Id: names.h,v 1.15 1998/09/12 13:17:52 christos Exp $
+ * $Id: names.h,v 1.16 1999/01/13 15:44:08 christos Exp $
  */
  */
 
 
 /* these types are used to index the table 'types': keep em in sync! */
 /* these types are used to index the table 'types': keep em in sync! */
@@ -104,7 +104,6 @@ static struct names {
 	{"double",	L_C},
 	{"double",	L_C},
 	{"extern",	L_C},
 	{"extern",	L_C},
 	{"float",	L_C},
 	{"float",	L_C},
-	{"real",	L_C},
 	{"struct",	L_C},
 	{"struct",	L_C},
 	{"union",	L_C},
 	{"union",	L_C},
 	{"CFLAGS",	L_MAKE},
 	{"CFLAGS",	L_MAKE},

+ 14 - 2
patchlevel.h

@@ -1,11 +1,23 @@
 #define	FILE_VERSION_MAJOR	3
 #define	FILE_VERSION_MAJOR	3
-#define	patchlevel		26
+#define	patchlevel		28
 
 
 /*
 /*
  * Patchlevel file for Ian Darwin's MAGIC command.
  * Patchlevel file for Ian Darwin's MAGIC command.
- * $Id: patchlevel.h,v 1.26 1998/09/12 13:19:39 christos Exp $
+ * $Id: patchlevel.h,v 1.28 1999/10/31 22:11:48 christos Exp $
  *
  *
  * $Log: patchlevel.h,v $
  * $Log: patchlevel.h,v $
+ * Revision 1.28  1999/10/31 22:11:48  christos
+ * - add "char" type for compatibility with HP/UX
+ * - recognize HP/UX syntax &=n etc.
+ * - include errno.h for CYGWIN
+ * - conditionalize the S_IS* macros
+ * - revert the SHT_DYNSYM test that broke the linux stripped binaries test
+ * - lots of Magdir changes
+ *
+ * Revision 1.27  1999/02/14 17:21:41  christos
+ * Automake support and misc cleanups from Rainer Orth
+ * Enable reading character and block special files from Dale R. Worley
+ *
  * Revision 1.26  1998/09/12 13:19:39  christos
  * Revision 1.26  1998/09/12 13:19:39  christos
  * - add support for bi-endian indirect offsets (Richard Verhoeven)
  * - add support for bi-endian indirect offsets (Richard Verhoeven)
  * - add recognition for bcpl (Joseph Myers)
  * - add recognition for bcpl (Joseph Myers)

+ 16 - 15
print.c

@@ -25,21 +25,23 @@
  * 4. This notice may not be removed or altered.
  * 4. This notice may not be removed or altered.
  */
  */
 
 
+#include "file.h"
 #include <stdio.h>
 #include <stdio.h>
 #include <errno.h>
 #include <errno.h>
 #include <string.h>
 #include <string.h>
-#if __STDC__
+#ifdef __STDC__
 # include <stdarg.h>
 # include <stdarg.h>
 #else
 #else
 # include <varargs.h>
 # include <varargs.h>
 #endif
 #endif
 #include <stdlib.h>
 #include <stdlib.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <unistd.h>
+#endif
 #include <time.h>
 #include <time.h>
-#include "file.h"
 
 
 #ifndef lint
 #ifndef lint
-FILE_RCSID("@(#)$Id: print.c,v 1.26 1998/06/27 13:57:23 christos Exp $")
+FILE_RCSID("@(#)$Id: print.c,v 1.29 1999/10/31 22:23:04 christos Exp $")
 #endif  /* lint */
 #endif  /* lint */
 
 
 #define SZOF(a)	(sizeof(a) / sizeof(a[0]))
 #define SZOF(a)	(sizeof(a) / sizeof(a[0]))
@@ -58,15 +60,14 @@ struct magic *m;
 
 
 	if (m->flag & INDIR)
 	if (m->flag & INDIR)
 		(void) fprintf(stderr, "(%s,%d),",
 		(void) fprintf(stderr, "(%s,%d),",
-			       (m->in.type >= 0 && m->in.type < SZOF(typ)) ? 
-					typ[(unsigned char) m->in.type] :
-					"*bad*",
+			       /* Note: in.type is unsigned */
+			       (m->in.type < SZOF(typ)) ? 
+					typ[m->in.type] : "*bad*",
 			       m->in.offset);
 			       m->in.offset);
 
 
 	(void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
 	(void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
-		       (m->type >= 0 && m->type < SZOF(typ)) ? 
-				typ[(unsigned char) m->type] : 
-				"*bad*");
+		       /* Note: type is unsigned */
+		       (m->type < SZOF(typ)) ? typ[m->type] : "*bad*");
 	if (m->mask != ~((uint32)0))
 	if (m->mask != ~((uint32)0))
 		(void) fprintf(stderr, " & %.8x", m->mask);
 		(void) fprintf(stderr, " & %.8x", m->mask);
 
 
@@ -123,7 +124,7 @@ ckfputs(str, fil)
 
 
 /*VARARGS*/
 /*VARARGS*/
 void
 void
-#if __STDC__
+#ifdef __STDC__
 ckfprintf(FILE *f, const char *fmt, ...)
 ckfprintf(FILE *f, const char *fmt, ...)
 #else
 #else
 ckfprintf(va_alist)
 ckfprintf(va_alist)
@@ -131,7 +132,7 @@ ckfprintf(va_alist)
 #endif
 #endif
 {
 {
 	va_list va;
 	va_list va;
-#if __STDC__
+#ifdef __STDC__
 	va_start(va, fmt);
 	va_start(va, fmt);
 #else
 #else
 	FILE *f;
 	FILE *f;
@@ -151,7 +152,7 @@ ckfprintf(va_alist)
  */
  */
 /*VARARGS*/
 /*VARARGS*/
 void
 void
-#if __STDC__
+#ifdef __STDC__
 error(const char *f, ...)
 error(const char *f, ...)
 #else
 #else
 error(va_alist)
 error(va_alist)
@@ -159,7 +160,7 @@ error(va_alist)
 #endif
 #endif
 {
 {
 	va_list va;
 	va_list va;
-#if __STDC__
+#ifdef __STDC__
 	va_start(va, f);
 	va_start(va, f);
 #else
 #else
 	const char *f;
 	const char *f;
@@ -178,7 +179,7 @@ error(va_alist)
 
 
 /*VARARGS*/
 /*VARARGS*/
 void
 void
-#if __STDC__
+#ifdef __STDC__
 magwarn(const char *f, ...)
 magwarn(const char *f, ...)
 #else
 #else
 magwarn(va_alist)
 magwarn(va_alist)
@@ -186,7 +187,7 @@ magwarn(va_alist)
 #endif
 #endif
 {
 {
 	va_list va;
 	va_list va;
-#if __STDC__
+#ifdef __STDC__
 	va_start(va, f);
 	va_start(va, f);
 #else
 #else
 	const char *f;
 	const char *f;

+ 217 - 109
readelf.c

@@ -1,3 +1,4 @@
+#include "file.h"
 
 
 #ifdef BUILTIN_ELF
 #ifdef BUILTIN_ELF
 #include <sys/types.h>
 #include <sys/types.h>
@@ -5,50 +6,148 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <ctype.h>
 #include <ctype.h>
 #include <stdlib.h>
 #include <stdlib.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #include <unistd.h>
+#endif
 #include <errno.h>
 #include <errno.h>
 
 
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
 #include "readelf.h"
 #include "readelf.h"
-#include "file.h"
 
 
 #ifndef lint
 #ifndef lint
-FILE_RCSID("@(#)$Id: readelf.c,v 1.9 1998/09/12 13:21:01 christos Exp $")
+FILE_RCSID("@(#)$Id: readelf.c,v 1.11 1999/10/31 22:23:04 christos Exp $")
 #endif
 #endif
 
 
 #ifdef	ELFCORE
 #ifdef	ELFCORE
-static void dophn_core __P((int, off_t, int, size_t, char *));
+static void dophn_core __P((int, int, int, off_t, int, size_t));
 #endif
 #endif
-static void dophn_exec __P((int, off_t, int, size_t, char *));
-static void doshn __P((int, off_t, int, size_t, char *));
+static void dophn_exec __P((int, int, int, off_t, int, size_t));
+static void doshn __P((int, int, int, off_t, int, size_t));
+
+static uint16_t getu16 __P((int, int));
+static uint32_t getu32 __P((int, uint32_t));
+static uint64_t getu64 __P((int, uint64_t));
+
+static uint16_t
+getu16(swap, value)
+	int swap;
+	uint16_t value;
+{
+	union {
+		uint16_t ui;
+		char c[2];
+	} retval, tmpval;
+
+	if (swap) {
+		tmpval.ui = value;
+
+		retval.c[0] = tmpval.c[1];
+		retval.c[1] = tmpval.c[0];
+		
+		return retval.ui;
+	} else
+		return value;
+}
+
+static uint32_t
+getu32(swap, value)
+	int swap;
+	uint32_t value;
+{
+	union {
+		uint32_t ui;
+		char c[4];
+	} retval, tmpval;
+
+	if (swap) {
+		tmpval.ui = value;
+
+		retval.c[0] = tmpval.c[3];
+		retval.c[1] = tmpval.c[2];
+		retval.c[2] = tmpval.c[1];
+		retval.c[3] = tmpval.c[0];
+		
+		return retval.ui;
+	} else
+		return value;
+}
+
+static uint64_t
+getu64(swap, value)
+	int swap;
+	uint64_t value;
+{
+	union {
+		uint64_t ui;
+		char c[8];
+	} retval, tmpval;
+
+	if (swap) {
+		tmpval.ui = value;
+
+		retval.c[0] = tmpval.c[7];
+		retval.c[1] = tmpval.c[6];
+		retval.c[2] = tmpval.c[5];
+		retval.c[3] = tmpval.c[4];
+		retval.c[4] = tmpval.c[3];
+		retval.c[5] = tmpval.c[2];
+		retval.c[6] = tmpval.c[1];
+		retval.c[7] = tmpval.c[0];
+		
+		return retval.ui;
+	} else
+		return value;
+}
+
+#define sh_addr		(class == ELFCLASS32		\
+			 ? (void *) &sh32		\
+			 : (void *) &sh64)
+#define shs_type	(class == ELFCLASS32		\
+			 ? getu32(swap, sh32.sh_type)	\
+			 : getu32(swap, sh64.sh_type))
+#define ph_addr		(class == ELFCLASS32		\
+			 ? (void *) &ph32		\
+			 : (void *) &ph64)
+#define ph_type		(class == ELFCLASS32		\
+			 ? getu32(swap, ph32.p_type)	\
+			 : getu32(swap, ph64.p_type))
+#define ph_offset	(class == ELFCLASS32		\
+			 ? getu32(swap, ph32.p_offset)	\
+			 : getu64(swap, ph64.p_offset))
+#define nh_size		(class == ELFCLASS32		\
+			 ? sizeof *nh32			\
+			 : sizeof *nh64)
+#define nh_type		(class == ELFCLASS32		\
+			 ? getu32(swap, nh32->n_type)	\
+			 : getu32(swap, nh64->n_type))
+#define nh_namesz	(class == ELFCLASS32		\
+			 ? getu32(swap, nh32->n_namesz)	\
+			 : getu32(swap, nh64->n_namesz))
+#define nh_descsz	(class == ELFCLASS32		\
+			 ? getu32(swap, nh32->n_descsz)	\
+			 : getu32(swap, nh64->n_descsz))
+#define prpsoffsets(i)	(class == ELFCLASS32		\
+			 ? prpsoffsets32[i]		\
+			 : prpsoffsets64[i])
 
 
 static void
 static void
-doshn(fd, off, num, size, buf)
+doshn(class, swap, fd, off, num, size)
+	int class;
+	int swap;
 	int fd;
 	int fd;
 	off_t off;
 	off_t off;
 	int num;
 	int num;
 	size_t size;
 	size_t size;
-	char *buf;
 {
 {
-	/*
-	 * This works for both 32-bit and 64-bit ELF formats,
-	 * because it looks only at the "sh_type" field, which is
-	 * always 32 bits, and is preceded only by the "sh_name"
-	 * field which is also always 32 bits, and because it uses
-	 * the shdr size from the ELF header rather than using
-	 * the size of an "Elf32_Shdr".
-	 */
-	Elf32_Shdr *sh = (Elf32_Shdr *) buf;
+	Elf32_Shdr sh32;
+	Elf64_Shdr sh64;
 
 
 	if (lseek(fd, off, SEEK_SET) == -1)
 	if (lseek(fd, off, SEEK_SET) == -1)
 		error("lseek failed (%s).\n", strerror(errno));
 		error("lseek failed (%s).\n", strerror(errno));
 
 
 	for ( ; num; num--) {
 	for ( ; num; num--) {
-		if (read(fd, buf, size) == -1)
+		if (read(fd, sh_addr, size) == -1)
 			error("read failed (%s).\n", strerror(errno));
 			error("read failed (%s).\n", strerror(errno));
-		if (sh->sh_type == SHT_SYMTAB) {
+		if (shs_type == SHT_SYMTAB /* || shs_type == SHT_DYNSYM */) {
 			(void) printf (", not stripped");
 			(void) printf (", not stripped");
 			return;
 			return;
 		}
 		}
@@ -62,15 +161,16 @@ doshn(fd, off, num, size, buf)
  * otherwise it's statically linked.
  * otherwise it's statically linked.
  */
  */
 static void
 static void
-dophn_exec(fd, off, num, size, buf)
+dophn_exec(class, swap, fd, off, num, size)
+	int class;
+	int swap;
 	int fd;
 	int fd;
 	off_t off;
 	off_t off;
 	int num;
 	int num;
 	size_t size;
 	size_t size;
-	char *buf;
 {
 {
-	/* I am not sure if this works for 64 bit elf formats */
-	Elf32_Phdr *ph = (Elf32_Phdr *) buf;
+	Elf32_Phdr ph32;
+	Elf64_Phdr ph64;
 	char *linking_style = "statically";
 	char *linking_style = "statically";
 	char *shared_libraries = "";
 	char *shared_libraries = "";
 
 
@@ -78,10 +178,10 @@ dophn_exec(fd, off, num, size, buf)
 		error("lseek failed (%s).\n", strerror(errno));
 		error("lseek failed (%s).\n", strerror(errno));
 
 
   	for ( ; num; num--) {
   	for ( ; num; num--) {
-  		if (read(fd, buf, size) == -1)
+  		if (read(fd, ph_addr, size) == -1)
   			error("read failed (%s).\n", strerror(errno));
   			error("read failed (%s).\n", strerror(errno));
 
 
-		switch (ph->p_type) {
+		switch (ph_type) {
 		case PT_DYNAMIC:
 		case PT_DYNAMIC:
 			linking_style = "dynamically";
 			linking_style = "dynamically";
 			break;
 			break;
@@ -94,12 +194,19 @@ dophn_exec(fd, off, num, size, buf)
 }
 }
 
 
 #ifdef ELFCORE
 #ifdef ELFCORE
-size_t	prpsoffsets[] = {
+size_t	prpsoffsets32[] = {
 	84,		/* SunOS 5.x */
 	84,		/* SunOS 5.x */
 	32,		/* Linux */
 	32,		/* Linux */
 };
 };
 
 
-#define	NOFFSETS	(sizeof prpsoffsets / sizeof prpsoffsets[0])
+size_t	prpsoffsets64[] = {
+       120,		/* SunOS 5.x, 64-bit */
+};
+
+#define	NOFFSETS32	(sizeof prpsoffsets32 / sizeof prpsoffsets32[0])
+#define NOFFSETS64	(sizeof prpsoffsets64 / sizeof prpsoffsets64[0])
+
+#define NOFFSETS	(class == ELFCLASS32 ? NOFFSETS32 : NOFFSETS64)
 
 
 /*
 /*
  * Look through the program headers of an executable image, searching
  * Look through the program headers of an executable image, searching
@@ -113,19 +220,18 @@ size_t	prpsoffsets[] = {
  * containing the start of the command line for that program.
  * containing the start of the command line for that program.
  */
  */
 static void
 static void
-dophn_core(fd, off, num, size, buf)
+dophn_core(class, swap, fd, off, num, size)
+	int class;
+	int swap;
 	int fd;
 	int fd;
 	off_t off;
 	off_t off;
 	int num;
 	int num;
 	size_t size;
 	size_t size;
-	char *buf;
 {
 {
-	/*
-	 * This doesn't work for 64-bit ELF, as the "p_offset" field is
-	 * 64 bits in 64-bit ELF.
-	 */
-	Elf32_Phdr *ph = (Elf32_Phdr *) buf;
-	Elf32_Nhdr *nh;
+	Elf32_Phdr ph32;
+	Elf32_Nhdr *nh32;
+	Elf64_Phdr ph64;
+	Elf64_Nhdr *nh64;
 	size_t offset, noffset, reloffset;
 	size_t offset, noffset, reloffset;
 	unsigned char c;
 	unsigned char c;
 	int i, j;
 	int i, j;
@@ -135,12 +241,12 @@ dophn_core(fd, off, num, size, buf)
 	for ( ; num; num--) {
 	for ( ; num; num--) {
 		if (lseek(fd, off, SEEK_SET) == -1)
 		if (lseek(fd, off, SEEK_SET) == -1)
 			error("lseek failed (%s).\n", strerror(errno));
 			error("lseek failed (%s).\n", strerror(errno));
-		if (read(fd, buf, size) == -1)
+		if (read(fd, ph_addr, size) == -1)
 			error("read failed (%s).\n", strerror(errno));
 			error("read failed (%s).\n", strerror(errno));
 		off += size;
 		off += size;
-		if (ph->p_type != PT_NOTE)
+		if (ph_type != PT_NOTE)
 			continue;
 			continue;
-		if (lseek(fd, ph->p_offset, SEEK_SET) == -1)
+		if (lseek(fd, (off_t) ph_offset, SEEK_SET) == -1)
 			error("lseek failed (%s).\n", strerror(errno));
 			error("lseek failed (%s).\n", strerror(errno));
 		bufsize = read(fd, nbuf, BUFSIZ);
 		bufsize = read(fd, nbuf, BUFSIZ);
 		if (bufsize == -1)
 		if (bufsize == -1)
@@ -149,17 +255,20 @@ dophn_core(fd, off, num, size, buf)
 		for (;;) {
 		for (;;) {
 			if (offset >= bufsize)
 			if (offset >= bufsize)
 				break;
 				break;
-			nh = (Elf32_Nhdr *)&nbuf[offset];
-			offset += sizeof *nh;
+			if (class == ELFCLASS32)
+				nh32 = (Elf32_Nhdr *)&nbuf[offset];
+			else
+				nh64 = (Elf64_Nhdr *)&nbuf[offset];
+			offset += nh_size;
 
 
 			/*
 			/*
 			 * If this note isn't an NT_PRPSINFO note, it's
 			 * If this note isn't an NT_PRPSINFO note, it's
 			 * not what we're looking for.
 			 * not what we're looking for.
 			 */
 			 */
-			if (nh->n_type != NT_PRPSINFO) {
-				offset += nh->n_namesz;
+			if (nh_type != NT_PRPSINFO) {
+				offset += nh_namesz;
 				offset = ((offset + 3)/4)*4;
 				offset = ((offset + 3)/4)*4;
-				offset += nh->n_descsz;
+				offset += nh_descsz;
 				offset = ((offset + 3)/4)*4;
 				offset = ((offset + 3)/4)*4;
 				continue;
 				continue;
 			}
 			}
@@ -167,16 +276,16 @@ dophn_core(fd, off, num, size, buf)
 			/*
 			/*
 			 * Make sure this note has the name "CORE".
 			 * Make sure this note has the name "CORE".
 			 */
 			 */
-			if (offset + nh->n_namesz >= bufsize) {
+			if (offset + nh_namesz >= bufsize) {
 				/*
 				/*
 				 * We're past the end of the buffer.
 				 * We're past the end of the buffer.
 				 */
 				 */
 				break;
 				break;
 			}
 			}
-			if (nh->n_namesz != 5
+			if (nh_namesz != 5
 			    || strcmp(&nbuf[offset], "CORE") != 0)
 			    || strcmp(&nbuf[offset], "CORE") != 0)
 				continue;
 				continue;
-			offset += nh->n_namesz;
+			offset += nh_namesz;
 			offset = ((offset + 3)/4)*4;
 			offset = ((offset + 3)/4)*4;
 
 
 			/*
 			/*
@@ -190,7 +299,7 @@ dophn_core(fd, off, num, size, buf)
 			 * it.
 			 * it.
 			 */
 			 */
 			for (i = 0; i < NOFFSETS; i++) {
 			for (i = 0; i < NOFFSETS; i++) {
-				reloffset = prpsoffsets[i];
+				reloffset = prpsoffsets(i);
 				noffset = offset + reloffset;
 				noffset = offset + reloffset;
 				for (j = 0; j < 16;
 				for (j = 0; j < 16;
 				    j++, noffset++, reloffset++) {
 				    j++, noffset++, reloffset++) {
@@ -208,7 +317,7 @@ dophn_core(fd, off, num, size, buf)
 					 * are, this obviously isn't
 					 * are, this obviously isn't
 					 * the right offset.
 					 * the right offset.
 					 */
 					 */
-					if (reloffset >= nh->n_descsz)
+					if (reloffset >= nh_descsz)
 						goto tryanother;
 						goto tryanother;
 
 
 					c = nbuf[noffset];
 					c = nbuf[noffset];
@@ -220,13 +329,13 @@ dophn_core(fd, off, num, size, buf)
 				 * Well, that worked.
 				 * Well, that worked.
 				 */
 				 */
 				printf(", from '%.16s'",
 				printf(", from '%.16s'",
-				    &nbuf[offset + prpsoffsets[i]]);
+				    &nbuf[offset + prpsoffsets(i)]);
 				return;
 				return;
 
 
 			tryanother:
 			tryanother:
 				;
 				;
 			}
 			}
-			offset += nh->n_descsz;
+			offset += nh_descsz;
 			offset = ((offset + 3)/4)*4;
 			offset = ((offset + 3)/4)*4;
 		}
 		}
 	}
 	}
@@ -236,13 +345,15 @@ dophn_core(fd, off, num, size, buf)
 void
 void
 tryelf(fd, buf, nbytes)
 tryelf(fd, buf, nbytes)
 	int fd;
 	int fd;
-	char *buf;
+	unsigned char *buf;
 	int nbytes;
 	int nbytes;
 {
 {
 	union {
 	union {
 		int32 l;
 		int32 l;
 		char c[sizeof (int32)];
 		char c[sizeof (int32)];
 	} u;
 	} u;
+	int class;
+	int swap;
 
 
 	/*
 	/*
 	 * ELF executables have multiple section headers in arbitrary
 	 * ELF executables have multiple section headers in arbitrary
@@ -256,7 +367,9 @@ tryelf(fd, buf, nbytes)
 	    return;
 	    return;
 
 
 
 
-	if (buf[4] == ELFCLASS32) {
+	class = buf[4];
+
+	if (class == ELFCLASS32) {
 		Elf32_Ehdr elfhdr;
 		Elf32_Ehdr elfhdr;
 		if (nbytes <= sizeof (Elf32_Ehdr))
 		if (nbytes <= sizeof (Elf32_Ehdr))
 			return;
 			return;
@@ -264,36 +377,36 @@ tryelf(fd, buf, nbytes)
 
 
 		u.l = 1;
 		u.l = 1;
 		(void) memcpy(&elfhdr, buf, sizeof elfhdr);
 		(void) memcpy(&elfhdr, buf, sizeof elfhdr);
-		/*
-		 * If the system byteorder does not equal the
-		 * object byteorder then don't test.
-		 * XXX - we could conceivably fix up the "dophn_XXX()" and
-		 * "doshn()" routines to extract stuff in the right
-		 * byte order....
-		 */
-		if ((u.c[sizeof(long) - 1] + 1) == elfhdr.e_ident[5]) {
-			if (elfhdr.e_type == ET_CORE) 
+		swap = (u.c[sizeof(long) - 1] + 1) != elfhdr.e_ident[5];
+
+		if (getu16(swap, elfhdr.e_type) == ET_CORE) 
 #ifdef ELFCORE
 #ifdef ELFCORE
-				dophn_core(fd, elfhdr.e_phoff, elfhdr.e_phnum, 
-				      elfhdr.e_phentsize, buf);
+			dophn_core(class, swap,
+				   fd,
+				   getu32(swap, elfhdr.e_phoff),
+				   getu16(swap, elfhdr.e_phnum), 
+				   getu16(swap, elfhdr.e_phentsize));
 #else
 #else
-				;
+			;
 #endif
 #endif
-			else {
-				if (elfhdr.e_type == ET_EXEC) {
-					dophn_exec(fd,
-						   elfhdr.e_phoff,
-						   elfhdr.e_phnum, 
-						   elfhdr.e_phentsize, buf);
-				}
-				doshn(fd, elfhdr.e_shoff, elfhdr.e_shnum,
-				      elfhdr.e_shentsize, buf);
+		else {
+			if (getu16(swap, elfhdr.e_type) == ET_EXEC) {
+				dophn_exec(class, swap,
+					   fd,
+					   getu32(swap, elfhdr.e_phoff),
+					   getu16(swap, elfhdr.e_phnum), 
+					   getu16(swap, elfhdr.e_phentsize));
 			}
 			}
+			doshn(class, swap,
+			      fd,
+			      getu32(swap, elfhdr.e_shoff),
+			      getu16(swap, elfhdr.e_shnum),
+			      getu16(swap, elfhdr.e_shentsize));
 		}
 		}
 		return;
 		return;
 	}
 	}
 
 
-        if (buf[4] == ELFCLASS64) {
+        if (class == ELFCLASS64) {
 		Elf64_Ehdr elfhdr;
 		Elf64_Ehdr elfhdr;
 		if (nbytes <= sizeof (Elf64_Ehdr))
 		if (nbytes <= sizeof (Elf64_Ehdr))
 			return;
 			return;
@@ -301,49 +414,44 @@ tryelf(fd, buf, nbytes)
 
 
 		u.l = 1;
 		u.l = 1;
 		(void) memcpy(&elfhdr, buf, sizeof elfhdr);
 		(void) memcpy(&elfhdr, buf, sizeof elfhdr);
+		swap = (u.c[sizeof(long) - 1] + 1) != elfhdr.e_ident[5];
 
 
-		/*
-		 * If the system byteorder does not equal the
-		 * object byteorder then don't test.
-		 * XXX - we could conceivably fix up the "dophn_XXX()" and
-		 * "doshn()" routines to extract stuff in the right
-		 * byte order....
-		 */
-		if ((u.c[sizeof(long) - 1] + 1) == elfhdr.e_ident[5]) {
-			if (elfhdr.e_type == ET_CORE) 
+		if (getu16(swap, elfhdr.e_type) == ET_CORE) 
 #ifdef ELFCORE
 #ifdef ELFCORE
-				dophn_core(fd,
-#ifndef __GNUC__
-					   elfhdr.e_phoff[1],
+			dophn_core(class, swap,
+				   fd,
+#ifdef USE_ARRAY_FOR_64BIT_TYPES
+				   getu32(swap, elfhdr.e_phoff[1]),
 #else
 #else
-					   elfhdr.e_phoff,
+				   getu64(swap, elfhdr.e_phoff),
 #endif
 #endif
-					   elfhdr.e_phnum, 
-					   elfhdr.e_phentsize, buf);
+				   getu16(swap, elfhdr.e_phnum), 
+				   getu16(swap, elfhdr.e_phentsize));
 #else
 #else
-				;
+			;
 #endif
 #endif
-			else
-			{
-				if (elfhdr.e_type == ET_EXEC) {
-					dophn_exec(fd,
-#ifndef __GNUC__
-						   elfhdr.e_phoff[1],
+		else
+		{
+			if (getu16(swap, elfhdr.e_type) == ET_EXEC) {
+				dophn_exec(class, swap,
+					   fd,
+#ifdef USE_ARRAY_FOR_64BIT_TYPES
+					   getu32(swap, elfhdr.e_phoff[1]),
 #else
 #else
-						   elfhdr.e_phoff,
+					   getu64(swap, elfhdr.e_phoff),
 #endif
 #endif
-						   elfhdr.e_phnum, 
-						   elfhdr.e_phentsize, buf);
-				}
-				doshn(fd,
-#ifndef __GNUC__
-				      elfhdr.e_shoff[1],
+					   getu16(swap, elfhdr.e_phnum), 
+					   getu16(swap, elfhdr.e_phentsize));
+			}
+			doshn(class, swap,
+			      fd,
+#ifdef USE_ARRAY_FOR_64BIT_TYPES
+			      getu32(swap, elfhdr.e_shoff[1]),
 #else
 #else
-				      elfhdr.e_shoff,
+			      getu64(swap, elfhdr.e_shoff),
 #endif
 #endif
-				      elfhdr.e_shnum,
-				      elfhdr.e_shentsize, buf);
-			}
+			      getu16(swap, elfhdr.e_shnum),
+			      getu16(swap, elfhdr.e_shentsize));
 		}
 		}
 		return;
 		return;
 	}
 	}

+ 33 - 19
readelf.h

@@ -1,6 +1,6 @@
 /*
 /*
  * readelf.h 
  * readelf.h 
- * @(#)$Id: readelf.h,v 1.6 1998/09/12 13:21:01 christos Exp $
+ * @(#)$Id: readelf.h,v 1.7 1999/02/14 17:16:11 christos Exp $
  *
  *
  * Provide elf data structures for non-elf machines, allowing file
  * Provide elf data structures for non-elf machines, allowing file
  * non-elf hosts to determine if an elf binary is stripped.
  * non-elf hosts to determine if an elf binary is stripped.
@@ -9,23 +9,25 @@
 #ifndef __fake_elf_h__
 #ifndef __fake_elf_h__
 #define __fake_elf_h__
 #define __fake_elf_h__
 
 
-typedef unsigned int	Elf32_Addr;
-typedef unsigned int	Elf32_Off;
-typedef unsigned short	Elf32_Half;
-typedef unsigned int	Elf32_Word;
-typedef unsigned char	Elf32_Char;
-
-#ifdef __GNUC__
-typedef	unsigned long long Elf64_Addr;
-typedef	unsigned long long Elf64_Off;
+typedef uint32_t	Elf32_Addr;
+typedef uint32_t	Elf32_Off;
+typedef uint16_t	Elf32_Half;
+typedef uint32_t	Elf32_Word;
+typedef uint8_t		Elf32_Char;
+
+#if SIZEOF_UINT64_T != 8
+#define USE_ARRAY_FOR_64BIT_TYPES
+typedef	uint32_t 	Elf64_Addr[2];
+typedef	uint32_t 	Elf64_Off[2];
+typedef uint32_t 	Elf64_Xword[2];
 #else
 #else
-/* XXX: We need 64 bit numbers here */
-typedef unsigned int	Elf64_Addr[2];
-typedef unsigned int	Elf64_Off[2];
+typedef	uint64_t 	Elf64_Addr;
+typedef	uint64_t 	Elf64_Off;
+typedef uint64_t 	Elf64_Xword;
 #endif
 #endif
-typedef unsigned short	Elf64_Half;
-typedef unsigned int	Elf64_Word;
-typedef unsigned char	Elf64_Char;
+typedef uint16_t	Elf64_Half;
+typedef uint32_t	Elf64_Word;
+typedef uint8_t		Elf64_Char;
 
 
 #define EI_NIDENT	16
 #define EI_NIDENT	16
 
 
@@ -70,6 +72,7 @@ typedef struct {
 /* sh_type */
 /* sh_type */
 #define SHT_SYMTAB	2
 #define SHT_SYMTAB	2
 #define SHT_NOTE	7
 #define SHT_NOTE	7
+#define SHT_DYNSYM	11
 
 
 /* elf type */
 /* elf type */
 #define ELFDATANONE	0		/* e_ident[EI_DATA] */
 #define ELFDATANONE	0		/* e_ident[EI_DATA] */
@@ -111,6 +114,17 @@ typedef struct {
     Elf32_Word	p_align;
     Elf32_Word	p_align;
 } Elf32_Phdr;
 } Elf32_Phdr;
 
 
+typedef struct {
+    Elf64_Word	p_type;
+    Elf64_Word	p_flags;
+    Elf64_Off	p_offset;
+    Elf64_Addr	p_vaddr;
+    Elf64_Addr	p_paddr;
+    Elf64_Xword	p_filesz;
+    Elf64_Xword	p_memsz;
+    Elf64_Xword	p_align;
+} Elf64_Phdr;
+
 #define	PT_NULL		0		/* p_type */
 #define	PT_NULL		0		/* p_type */
 #define	PT_LOAD		1
 #define	PT_LOAD		1
 #define	PT_DYNAMIC	2
 #define	PT_DYNAMIC	2
@@ -154,9 +168,9 @@ typedef struct {
 
 
 /* Note header in a PT_NOTE section */
 /* Note header in a PT_NOTE section */
 typedef struct elf_note {
 typedef struct elf_note {
-  Elf32_Word	n_namesz;	/* Name size */
-  Elf32_Word	n_descsz;	/* Content size */
-  Elf32_Word	n_type;		/* Content type */
+    Elf32_Word	n_namesz;	/* Name size */
+    Elf32_Word	n_descsz;	/* Content size */
+    Elf32_Word	n_type;		/* Content type */
 } Elf32_Nhdr;
 } Elf32_Nhdr;
 
 
 typedef struct {
 typedef struct {

+ 1 - 4
softmagic.c

@@ -31,13 +31,10 @@
 #include <time.h>
 #include <time.h>
 #include <sys/types.h>
 #include <sys/types.h>
 
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
 #include "file.h"
 #include "file.h"
 
 
 #ifndef	lint
 #ifndef	lint
-FILE_RCSID("@(#)$Id: softmagic.c,v 1.38 1998/09/12 13:21:01 christos Exp $")
+FILE_RCSID("@(#)$Id: softmagic.c,v 1.39 1999/02/14 17:16:12 christos Exp $")
 #endif	/* lint */
 #endif	/* lint */
 
 
 static int match	__P((unsigned char *, int));
 static int match	__P((unsigned char *, int));

+ 1 - 0
stamp-h.in

@@ -0,0 +1 @@
+timestamp

+ 1 - 5
tar.h

@@ -5,7 +5,7 @@
  *
  *
  * Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu.
  * Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu.
  *
  *
- * $Id: tar.h,v 1.4 1998/06/27 13:57:23 christos Exp $ # checkin only
+ * $Id: tar.h,v 1.5 1999/01/13 15:44:10 christos Exp $ # checkin only
  */
  */
 
 
 /*
 /*
@@ -172,10 +172,6 @@ TAR_EXTERN char		read_error_flag;
  * Declarations of functions available to the world.
  * Declarations of functions available to the world.
  */
  */
 /*LINTLIBRARY*/
 /*LINTLIBRARY*/
-union record *findrec();
-void userec();
-union record *endofrecs();
-void anno();
 #define	 annorec(stream, msg)	anno(stream, msg, 0)	/* Cur rec */
 #define	 annorec(stream, msg)	anno(stream, msg, 0)	/* Cur rec */
 #define	annofile(stream, msg)	anno(stream, msg, 1)	/* Saved rec */
 #define	annofile(stream, msg)	anno(stream, msg, 1)	/* Saved rec */
 #endif
 #endif