]> git.saurik.com Git - apple/file_cmds.git/commitdiff
file_cmds-82.tar.gz mac-os-x-103 mac-os-x-1031 mac-os-x-1032 mac-os-x-1033 mac-os-x-1034 mac-os-x-1035 mac-os-x-1036 mac-os-x-1037 mac-os-x-1038 mac-os-x-1039 v82
authorApple <opensource@apple.com>
Fri, 24 Oct 2003 22:47:55 +0000 (22:47 +0000)
committerApple <opensource@apple.com>
Fri, 24 Oct 2003 22:47:55 +0000 (22:47 +0000)
189 files changed:
Makefile
chflags/Makefile.preamble
chflags/chflags.1
chflags/chflags.c
chmod/chmod.1
chmod/chmod.c
chown/chgrp.1
chown/chown.8
chown/chown.c
cp/cp.1
cp/cp.c
cp/extern.h
cp/utils.c
csh/strpct.c [deleted file]
df/Makefile
df/Makefile.preamble
df/df.1
df/df.c
df/vfslist.c [new file with mode: 0644]
du/du.1
du/du.c
file/LEGAL.NOTICE [deleted file]
file/MAINT [deleted file]
file/Makefile [deleted file]
file/Makefile.postamble [deleted file]
file/Makefile.preamble [deleted file]
file/PB.project [deleted file]
file/PORTING [deleted file]
file/README [deleted file]
file/apprentice.c [deleted file]
file/ascmagic.c [deleted file]
file/compress.c [deleted file]
file/file.1 [deleted file]
file/file.c [deleted file]
file/file.h [deleted file]
file/fsmagic.c [deleted file]
file/internat.c [deleted file]
file/is_tar.c [deleted file]
file/magdir/386bsd [deleted file]
file/magdir/Header [deleted file]
file/magdir/Localstuff [deleted file]
file/magdir/OpenBSD [deleted file]
file/magdir/adventure [deleted file]
file/magdir/alliant [deleted file]
file/magdir/alpha [deleted file]
file/magdir/amanda [deleted file]
file/magdir/amigaos [deleted file]
file/magdir/animation [deleted file]
file/magdir/apl [deleted file]
file/magdir/apple [deleted file]
file/magdir/applix [deleted file]
file/magdir/archive [deleted file]
file/magdir/asterix [deleted file]
file/magdir/att3b [deleted file]
file/magdir/audio [deleted file]
file/magdir/blit [deleted file]
file/magdir/bsdi [deleted file]
file/magdir/c-lang [deleted file]
file/magdir/chi [deleted file]
file/magdir/cisco [deleted file]
file/magdir/clipper [deleted file]
file/magdir/commands [deleted file]
file/magdir/compress [deleted file]
file/magdir/convex [deleted file]
file/magdir/database [deleted file]
file/magdir/diamond [deleted file]
file/magdir/diff [deleted file]
file/magdir/digital [deleted file]
file/magdir/dump [deleted file]
file/magdir/elf [deleted file]
file/magdir/encore [deleted file]
file/magdir/filesystems [deleted file]
file/magdir/flash [deleted file]
file/magdir/fonts [deleted file]
file/magdir/frame [deleted file]
file/magdir/freebsd [deleted file]
file/magdir/gimp [deleted file]
file/magdir/gnu [deleted file]
file/magdir/hp [deleted file]
file/magdir/ibm370 [deleted file]
file/magdir/ibm6000 [deleted file]
file/magdir/iff [deleted file]
file/magdir/images [deleted file]
file/magdir/intel [deleted file]
file/magdir/interleaf [deleted file]
file/magdir/island [deleted file]
file/magdir/ispell [deleted file]
file/magdir/java [deleted file]
file/magdir/karma [deleted file]
file/magdir/lecter [deleted file]
file/magdir/lex [deleted file]
file/magdir/lif [deleted file]
file/magdir/linux [deleted file]
file/magdir/lisp [deleted file]
file/magdir/mach [deleted file]
file/magdir/macintosh [deleted file]
file/magdir/magic [deleted file]
file/magdir/mail.news [deleted file]
file/magdir/microsoft [deleted file]
file/magdir/mime [deleted file]
file/magdir/mirage [deleted file]
file/magdir/mkid [deleted file]
file/magdir/mmdf [deleted file]
file/magdir/modem [deleted file]
file/magdir/motorola [deleted file]
file/magdir/msdos [deleted file]
file/magdir/ncr [deleted file]
file/magdir/netbsd [deleted file]
file/magdir/news [deleted file]
file/magdir/octave [deleted file]
file/magdir/olf [deleted file]
file/magdir/os2 [deleted file]
file/magdir/os9 [deleted file]
file/magdir/osf1 [deleted file]
file/magdir/pbm [deleted file]
file/magdir/pdf [deleted file]
file/magdir/pdp [deleted file]
file/magdir/pgp [deleted file]
file/magdir/pkgadd [deleted file]
file/magdir/plus5 [deleted file]
file/magdir/printer [deleted file]
file/magdir/psdbms [deleted file]
file/magdir/pyramid [deleted file]
file/magdir/riff [deleted file]
file/magdir/rpm [deleted file]
file/magdir/rtf [deleted file]
file/magdir/sc [deleted file]
file/magdir/sccs [deleted file]
file/magdir/sendmail [deleted file]
file/magdir/sequent [deleted file]
file/magdir/sgi [deleted file]
file/magdir/sgml [deleted file]
file/magdir/sniffer [deleted file]
file/magdir/softquad [deleted file]
file/magdir/sun [deleted file]
file/magdir/teapot [deleted file]
file/magdir/terminfo [deleted file]
file/magdir/tex [deleted file]
file/magdir/ti-8x [deleted file]
file/magdir/timezone [deleted file]
file/magdir/troff [deleted file]
file/magdir/typeset [deleted file]
file/magdir/unknown [deleted file]
file/magdir/uuencode [deleted file]
file/magdir/varied.out [deleted file]
file/magdir/vax [deleted file]
file/magdir/vicar [deleted file]
file/magdir/visx [deleted file]
file/magdir/vms [deleted file]
file/magdir/wordperfect [deleted file]
file/magdir/xenix [deleted file]
file/magdir/zilog [deleted file]
file/magdir/zyxel [deleted file]
file/magic.5 [deleted file]
file/names.h [deleted file]
file/patchlevel.h [deleted file]
file/print.c [deleted file]
file/readelf.c [deleted file]
file/readelf.h [deleted file]
file/readfat.c [deleted file]
file/softmagic.c [deleted file]
file/tar.h [deleted file]
ln/ln.1
ln/ln.c
ln/symlink.7
ls/Makefile
ls/cmp.c
ls/extern.h
ls/ls.1
ls/ls.c
ls/ls.h
ls/print.c
ls/util.c
mkdir/mkdir.1
mkdir/mkdir.c
mknod/mknod.c
mv/mv.1
mv/mv.c
mv/pathnames.h
pax/Makefile
pax/Makefile.postamble
pax/PB.project
pax/tar.1 [deleted file]
rm/rm.1
rm/rm.c
rmdir/rmdir.1
rmdir/rmdir.c
touch/touch.1
touch/touch.c

index 532053650ba9d0324180f16b5ddd91bce17bdb76..cd9ede3e4299a9840f23e006012add552075ccd2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ PROJECT_TYPE = Aggregate
 
 TOOLS = chflags chmod chown compress cp dd df du install ln ls\
         mkdir mkfifo mknod mtree mv pax rm rmdir rmt shar tcopy\
-        touch file
+        touch
 
 OTHERSRCS = PROJECT Makefile.preamble Makefile Makefile.postamble
 
index 7a86fc278fcc7f23773c82df843fecdd2395bbb3..9e10e90bb6746d84796f702e9cf6b6039454678d 100644 (file)
@@ -1,5 +1 @@
-vpath stat_flags.c ../ls
-
-CFILES += stat_flags.c
-
 include $(CoreOSMakefiles)/ProjectBuilder/Makefile.Preamble.Common
index c7ab4bc3c92c7d563f4b8872aaa122cfa0fd2998..3205110cb277810bd8ff90bf0f00adcd3d3e1288 100644 (file)
@@ -1,5 +1,3 @@
-.\"    $NetBSD: chflags.1,v 1.6 1997/10/18 12:39:50 lukem Exp $
-.\"
 .\" Copyright (c) 1989, 1990, 1993, 1994
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -35,6 +33,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)chflags.1   8.4 (Berkeley) 5/2/95
+.\" $FreeBSD: src/usr.bin/chflags/chflags.1,v 1.14 2001/08/15 09:09:39 ru Exp $
 .\"
 .Dd May 2, 1995
 .Dt CHFLAGS 1
@@ -49,7 +48,7 @@
 .Op Fl H | Fl L | Fl P
 .Oc
 .Ar flags
-.Ar file ...
+.Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -59,7 +58,7 @@ as specified by the
 operand.
 .Pp
 The options are as follows:
-.Bl -tag -width Ds
+.Bl -tag -width indent
 .It Fl H
 If the
 .Fl R
@@ -73,30 +72,50 @@ option is specified, all symbolic links are followed.
 If the
 .Fl R
 option is specified, no symbolic links are followed.
+This is the default.
 .It Fl R
 Change the file flags for the file hierarchies rooted
 in the files instead of just the files themselves.
 .El
 .Pp
-Flags are a comma separated list of keywords.
+The flags are specified as an octal number or a comma separated list
+of keywords.
 The following keywords are currently defined:
-.Bd -literal -offset indent compact
-arch   set the archived flag (super-user only)
-opaque set the opaque flag (owner or super-user only)
-nodump set the nodump flag (owner or super-user only)
-sappnd set the system append-only flag (super-user only)
-schg   set the system immutable flag (super-user only)
-uappnd set the user append-only flag (owner or super-user only)
-uchg   set the user immutable flag (owner or super-user only)
-.Ed
+.Pp
+.Bl -tag -offset indent -width "opaque" -compact
+.It Ar arch
+set the archived flag (super-user only)
+.It Ar opaque
+set the opaque flag (owner or super-user only)
+.It Ar nodump
+set the nodump flag (owner or super-user only)
+.It Ar sappnd
+set the system append-only flag (super-user only)
+.It Ar schg
+set the system immutable flag (super-user only)
+.It Ar sunlnk
+set the system undeletable flag (super-user only)
+.It Ar uappnd
+set the user append-only flag (owner or super-user only)
+.It Ar uchg
+set the user immutable flag (owner or super-user only)
+.It Ar uunlnk
+set the user undeletable flag (owner or super-user only)
+.It Ar archived , sappend , schange , Xo
+.Ar simmutable , uappend , uchange , uimmutable ,
+.Ar sunlink , uunlink
+.Xc
+aliases for the above
+.El
 .Pp
 Putting the letters
-.Dq no
+.Dq Ar no
 before an option causes the flag to be turned off.
 For example:
-.Bd -literal -offset indent compact
-nouchg the immutable bit should be cleared
-.Ed
+.Bl -tag -offset indent -width "nouchg"
+.It Ar nouchg
+the immutable bit should be cleared
+.El
 .Pp
 Symbolic links do not have flags, so unless the
 .Fl H
@@ -116,11 +135,17 @@ option is specified.
 In addition, these options override each other and the
 command's actions are determined by the last one specified.
 .Pp
-The
-.Nm
-utility exits 0 on success, and >0 if an error occurs.
+You can use "ls -lo" to see the flags of existing files.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh SEE ALSO
+.Xr ls 1 ,
 .Xr chflags 2 ,
 .Xr stat 2 ,
 .Xr fts 3 ,
 .Xr symlink 7
+.Sh HISTORY
+The
+.Nm
+command first appeared in
+.Bx 4.4 .
index 54d1bc35559e2ca5d50f2595ccf829465bcb382f..a7777cb7aad3a2f67b1394d1e0f330730de8698f 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: chflags.c,v 1.5 1997/10/18 12:39:54 lukem Exp $        */
-
 /*
  * Copyright (c) 1992, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1992, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
-#endif /* not lint */
+static const char copyright[] =
+"@(#) Copyright (c) 1992, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
+#endif
 
-#ifndef lint
 #if 0
-static char sccsid[] = "from: @(#)chflags.c    8.5 (Berkeley) 4/1/94";
-#else
-__RCSID("$NetBSD: chflags.c,v 1.5 1997/10/18 12:39:54 lukem Exp $");
+#ifndef lint
+static char sccsid[] = "@(#)chflags.c  8.5 (Berkeley) 4/1/94";
 #endif
-#endif /* not lint */
+#endif
+
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/usr.bin/chflags/chflags.c,v 1.16 2002/09/04 23:28:58 dwmalone Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -58,14 +57,10 @@ __RCSID("$NetBSD: chflags.c,v 1.5 1997/10/18 12:39:54 lukem Exp $");
 #include <string.h>
 #include <unistd.h>
 
-int    main __P((int, char **));
-u_long string_to_flags __P((char **, u_long *, u_long *));
-void   usage __P((void));
+void   usage(void);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        FTS *ftsp;
        FTSENT *p;
@@ -102,15 +97,16 @@ main(argc, argv)
        if (argc < 2)
                usage();
 
-       fts_options = FTS_PHYSICAL;
        if (Rflag) {
+               fts_options = FTS_PHYSICAL;
                if (Hflag)
                        fts_options |= FTS_COMFOLLOW;
                if (Lflag) {
                        fts_options &= ~FTS_PHYSICAL;
                        fts_options |= FTS_LOGICAL;
                }
-       }
+       } else
+               fts_options = FTS_LOGICAL;
 
        flags = *argv;
        if (*flags >= '0' && *flags <= '7') {
@@ -125,14 +121,14 @@ main(argc, argv)
                set = val;
                 oct = 1;
        } else {
-               if (string_to_flags(&flags, &set, &clear))
+               if (strtofflags(&flags, &set, &clear))
                         errx(1, "invalid flag: %s", flags);
                clear = ~clear;
                oct = 0;
        }
 
        if ((ftsp = fts_open(++argv, fts_options , 0)) == NULL)
-               err(1, "fts_open `%s'", argv[0]); 
+               err(1, NULL);
 
        for (rval = 0; (p = fts_read(ftsp)) != NULL;) {
                switch (p->fts_info) {
@@ -167,7 +163,7 @@ main(argc, argv)
                } else {
                        p->fts_statp->st_flags |= set;
                        p->fts_statp->st_flags &= clear;
-                       if (!chflags(p->fts_accpath, p->fts_statp->st_flags))
+                       if (!chflags(p->fts_accpath, (u_long)p->fts_statp->st_flags))
                                continue;
                }
                warn("%s", p->fts_path);
@@ -179,7 +175,7 @@ main(argc, argv)
 }
 
 void
-usage()
+usage(void)
 {
        (void)fprintf(stderr,
            "usage: chflags [-R [-H | -L | -P]] flags file ...\n");
index 6a52eb64e6d7c1a5c3bbbf55932452580135ddbe..8e5de74b39c6e980436d278b7ceb507afae6bfb5 100644 (file)
@@ -1,5 +1,3 @@
-.\"    $NetBSD: chmod.1,v 1.11 1997/10/20 08:51:10 enami Exp $
-.\"
 .\" Copyright (c) 1989, 1990, 1993, 1994
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -35,6 +33,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)chmod.1     8.4 (Berkeley) 3/31/94
+.\" $FreeBSD: src/bin/chmod/chmod.1,v 1.33 2002/10/01 20:32:59 trhodes Exp $
 .\"
 .Dd March 31, 1994
 .Dt CHMOD 1
 .Nd change file modes
 .Sh SYNOPSIS
 .Nm
-.Oo
-.Fl R
-.Op Fl H | Fl L | Fl P
-.Oc
-.Op Fl h
+.Op Fl fhv
+.Op Fl R Op Fl H | L | P
 .Ar mode
-.Ar file ...
+.Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -65,7 +61,8 @@ The options are as follows:
 If the
 .Fl R
 option is specified, symbolic links on the command line are followed.
-(Symbolic links encountered in the tree traversal are not followed.)
+(Symbolic links encountered in the tree traversal are not followed by
+default.)
 .It Fl L
 If the
 .Fl R
@@ -74,25 +71,28 @@ option is specified, all symbolic links are followed.
 If the
 .Fl R
 option is specified, no symbolic links are followed.
+This is the default.
 .It Fl R
 Change the modes of the file hierarchies rooted in the files
 instead of just the files themselves.
-.\" .It Fl h
-.\" If
-.\" .Ar file
-.\" is symbolic link, the mode of the link is changed.
+.It Fl f
+Do not display a diagnostic message if
+.Nm
+could not modify the mode for
+.Va file .
+.It Fl h
+If the file is a symbolic link, change the mode of the link itself
+rather than the file that the link points to.
+.It Fl v
+Cause
+.Nm
+to be verbose, showing filenames as the mode is modified.
+If the
+.Fl v
+flag is specified more than once, the old and new modes of the file
+will also be printed, in both octal and symbolic notation.
 .El
 .Pp
-.\" If the option
-.\" .Fl h
-.\" is not given,
-Unless the
-.Fl H
-or
-.Fl L
-option is set,
-.Nm
-on a symbolic link always succeeds and has no effect.
 The
 .Fl H ,
 .Fl L
@@ -106,45 +106,71 @@ command's actions are determined by the last one specified.
 .Pp
 Only the owner of a file or the super-user is permitted to change
 the mode of a file.
-.Pp
-The
-.Nm
-utility exits 0 on success, and >0 if an error occurs.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh MODES
 Modes may be absolute or symbolic.
-An absolute mode is an octal number constructed by
-.Ar or-ing
-the following values:
+An absolute mode is an octal number constructed from the sum of
+one or more of the following values:
 .Pp
 .Bl -tag -width 6n -compact -offset indent
 .It Li 4000
-set-user-ID-on-execution
+(the set-user-ID-on-execution bit) Executable files with this bit set
+will run with effective uid set to the uid of the file owner.
+Directories with the set-user-id bit set will force all files and
+sub-directories created in them to be owned by the directory owner
+and not by the uid of the creating process, if the underlying file
+system supports this feature: see
+.Xr chmod 2
+and the
+.Ar suiddir
+option to
+.Xr mount 8 .
 .It Li 2000
-set-group-ID-on-execution
+(the set-group-ID-on-execution bit) Executable files with this bit set
+will run with effective gid set to the gid of the file owner.
 .It Li 1000
-sticky bit, see
+(the sticky bit)
+See
 .Xr chmod 2
+and
+.Xr sticky 8 .
 .It Li 0400
-read by owner
+Allow read by owner.
 .It Li 0200
-write by owner
+Allow write by owner.
 .It Li 0100
-execute (or search for directories) by owner
-.It Li 0070
-read, write, execute/search by group
-.It Li 0007
-read, write, execute/search by others
+For files, allow execution by owner.
+For directories, allow the owner to
+search in the directory.
+.It Li 0040
+Allow read by group members.
+.It Li 0020
+Allow write by group members.
+.It Li 0010
+For files, allow execution by group members.
+For directories, allow
+group members to search in the directory.
+.It Li 0004
+Allow read by others.
+.It Li 0002
+Allow write by others.
+.It Li 0001
+For files, allow execution by others.
+For directories allow others to
+search in the directory.
 .El
 .Pp
-The read, write, and execute/search values for group and others
-are encoded as described for owner.
+For example, the absolute mode that permits read, write and execute by
+the owner, read and execute by group members, read and execute by
+others, and no set-uid or set-gid behaviour is 755
+(400+200+100+040+010+004+001).
 .Pp
 The symbolic mode is described by the following grammar:
 .Bd -literal -offset indent
 mode         ::= clause [, clause ...]
-clause       ::= [who ...] [action ...] last_action
+clause       ::= [who ...] [action ...] action
 action       ::= op [perm ...]
-last_action  ::= op [perm ...]
 who          ::= a | u | g | o
 op           ::= + | \- | =
 perm         ::= r | s | t | w | x | X | u | g | o
@@ -158,7 +184,6 @@ The
 .Ar who
 symbol ``a'' is equivalent to ``ugo''.
 .Pp
-.ne 1i
 The
 .Ar perm
 symbols represent the portions of the mode bits as follows:
@@ -183,11 +208,11 @@ symbol ``X'' are only meaningful in conjunction with the
 .Ar op
 symbol ``+'', and are ignored in all other cases.
 .It u
-The user permission bits in the mode of the original file.
+The user permission bits in the original mode of the file.
 .It g
-The group permission bits in the mode of the original file.
+The group permission bits in the original mode of the file.
 .It o
-The other permission bits in the mode of the original file.
+The other permission bits in the original mode of the file.
 .El
 .Pp
 The
@@ -283,7 +308,12 @@ set the group bits equal to the user bits, but clear the group write bit.
 There's no
 .Ar perm
 option for the naughty bits.
+.Sh COMPATIBILITY
+The
+.Fl v
+option is non-standard and its use in scripts is not recommended.
 .Sh SEE ALSO
+.Xr chflags 1 ,
 .Xr install 1 ,
 .Xr chmod 2 ,
 .Xr stat 2 ,
@@ -291,7 +321,9 @@ option for the naughty bits.
 .Xr fts 3 ,
 .Xr setmode 3 ,
 .Xr symlink 7 ,
-.Xr chown 8
+.Xr chown 8 ,
+.Xr mount 8 ,
+.Xr sticky 8
 .Sh STANDARDS
 The
 .Nm
@@ -299,8 +331,11 @@ utility is expected to be
 .St -p1003.2
 compatible with the exception of the
 .Ar perm
-symbols
+symbol
 .Dq t
-and
-.Dq X
-which are not included in that standard.
+which is not included in that standard.
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v1 .
index 4dae785bb260e19b18a3f238df44737610ba2863..c38286d1aaa698beab5281e54b05129742967f77 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: chmod.c,v 1.20 1998/07/28 05:31:22 mycroft Exp $       */
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT(
+static char const copyright[] =
 "@(#) Copyright (c) 1989, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)chmod.c    8.8 (Berkeley) 4/1/94";
-#else
-__RCSID("$NetBSD: chmod.c,v 1.20 1998/07/28 05:31:22 mycroft Exp $");
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/chmod/chmod.c,v 1.27 2002/08/04 05:29:13 obrien Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -54,37 +51,33 @@ __RCSID("$NetBSD: chmod.c,v 1.20 1998/07/28 05:31:22 mycroft Exp $");
 #include <err.h>
 #include <errno.h>
 #include <fts.h>
-#include <locale.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <limits.h>
 
-int main __P((int, char *[]));
-void usage __P((void));
+int main(int, char *[]);
+void usage(void);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        FTS *ftsp;
        FTSENT *p;
        mode_t *set;
        long val;
-       int oct, omode;
+       int oct;
        int Hflag, Lflag, Rflag, ch, fflag, fts_options, hflag, rval;
+       int vflag;
        char *ep, *mode;
-       int (*change_mode) __P((const char *, mode_t));
-
-       set = NULL;     /* XXX gcc -Wuninitialized */
-       omode = 0;      /* XXX gcc -Wuninitialized */
+       mode_t newmode, omode;
+       int (*change_mode)(const char *, mode_t);
 
-       (void)setlocale(LC_ALL, "");
-
-       Hflag = Lflag = Rflag = fflag = hflag = 0;
-       while ((ch = getopt(argc, argv, "HLPRXfghorstuwx")) != -1)
+       set = NULL;
+       omode = 0;
+       Hflag = Lflag = Rflag = fflag = hflag = vflag = 0;
+       while ((ch = getopt(argc, argv, "HLPRXfghorstuvwx")) != -1)
                switch (ch) {
                case 'H':
                        Hflag = 1;
@@ -100,7 +93,7 @@ main(argc, argv)
                case 'R':
                        Rflag = 1;
                        break;
-               case 'f':               /* XXX: undocumented. */
+               case 'f':
                        fflag = 1;
                        break;
 #ifndef __APPLE__
@@ -109,13 +102,13 @@ main(argc, argv)
                         * In System V (and probably POSIX.2) the -h option
                         * causes chmod to change the mode of the symbolic
                         * link.  4.4BSD's symbolic links didn't have modes,
-                        * so it was an undocumented noop.  In NetBSD 1.3,
+                        * so it was an undocumented noop.  In FreeBSD 3.0,
                         * lchmod(2) is introduced and this option does real
                         * work.
                         */
                        hflag = 1;
                        break;
-#endif
+#endif /* __APPLE__ */
                /*
                 * XXX
                 * "-[rwx]" are valid mode commands.  If they are the entire
@@ -129,6 +122,9 @@ main(argc, argv)
                            argv[optind - 1][2] == '\0')
                                --optind;
                        goto done;
+               case 'v':
+                       vflag++;
+                       break;
                case '?':
                default:
                        usage();
@@ -139,8 +135,8 @@ done:       argv += optind;
        if (argc < 2)
                usage();
 
-       fts_options = FTS_PHYSICAL;
        if (Rflag) {
+               fts_options = FTS_PHYSICAL;
                if (hflag)
                        errx(1,
                "the -R and -h options may not be specified together.");
@@ -150,27 +146,29 @@ done:     argv += optind;
                        fts_options &= ~FTS_PHYSICAL;
                        fts_options |= FTS_LOGICAL;
                }
-       }
+       } else
+               fts_options = hflag ? FTS_PHYSICAL : FTS_LOGICAL;
+
 #ifndef __APPLE__
        if (hflag)
                change_mode = lchmod;
        else
-            change_mode = chmod;
+               change_mode = chmod;
 #else
-        change_mode = chmod;
-#endif
+       change_mode = chmod;
+#endif /* __APPLE__ */
 
        mode = *argv;
        if (*mode >= '0' && *mode <= '7') {
                errno = 0;
                val = strtol(mode, &ep, 8);
-               if (val > INT_MAX || val < 0)
+               if (val > USHRT_MAX || val < 0)
                        errno = ERANGE;
                if (errno)
                        err(1, "invalid file mode: %s", mode);
                if (*ep)
                        errx(1, "invalid file mode: %s", mode);
-               omode = val;
+               omode = (mode_t)val;
                oct = 1;
        } else {
                if ((set = setmode(mode)) == NULL)
@@ -179,19 +177,17 @@ done:     argv += optind;
        }
 
        if ((ftsp = fts_open(++argv, fts_options, 0)) == NULL)
-               err(1, argv[0]);
+               err(1, "fts_open");
        for (rval = 0; (p = fts_read(ftsp)) != NULL;) {
                switch (p->fts_info) {
-               case FTS_D:
+               case FTS_D:                     /* Change it at FTS_DP. */
                        if (!Rflag)
-                               (void)fts_set(ftsp, p, FTS_SKIP);
-                       break;
+                               fts_set(ftsp, p, FTS_SKIP);
+                       continue;
                case FTS_DNR:                   /* Warn, chmod, continue. */
                        warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
                        rval = 1;
                        break;
-               case FTS_DP:                    /* Already changed at FTS_D. */
-                       continue;
                case FTS_ERR:                   /* Warn, continue. */
                case FTS_NS:
                        warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
@@ -204,39 +200,55 @@ done:     argv += optind;
                         * don't point to anything and ones that we found
                         * doing a physical walk.
                         */
-#ifndef __APPLE__
                        if (!hflag)
                                continue;
                        /* else */
                        /* FALLTHROUGH */
-#else
-                       continue;
-#endif
                default:
                        break;
                }
-               if ((*change_mode)(p->fts_accpath, oct ? omode :
-                   getmode(set, p->fts_statp->st_mode)) && !fflag) {
+               newmode = oct ? omode : getmode(set, p->fts_statp->st_mode);
+               if ((newmode & ALLPERMS) == (p->fts_statp->st_mode & ALLPERMS))
+                       continue;
+               if ((*change_mode)(p->fts_accpath, newmode) && !fflag) {
                        warn("%s", p->fts_path);
                        rval = 1;
+               } else {
+                       if (vflag) {
+                               (void)printf("%s", p->fts_accpath);
+
+                               if (vflag > 1) {
+                                       char m1[12], m2[12];
+
+                                       strmode(p->fts_statp->st_mode, m1);
+                                       strmode((p->fts_statp->st_mode &
+                                           S_IFMT) | newmode, m2);
+
+                                       (void)printf(": 0%o [%s] -> 0%o [%s]",
+                                           p->fts_statp->st_mode, m1,
+                                           (p->fts_statp->st_mode & S_IFMT) |
+                                           newmode, m2);
+                               }
+                               (void)printf("\n");
+                       }
+
                }
        }
        if (errno)
                err(1, "fts_read");
+       free(set);
        exit(rval);
-       /* NOTREACHED */
 }
 
 void
-usage()
+usage(void)
 {
-#ifndef __APPLE__
+#ifdef __APPLE__
        (void)fprintf(stderr,
-           "usage: chmod [-R [-H | -L | -P]] [-h] mode file ...\n");
+           "usage: chmod [-fv] [-R [-H | -L | -P]] mode file ...\n");
 #else
        (void)fprintf(stderr,
-           "usage: chmod [-R [-H | -L | -P]] mode file ...\n");
-#endif
+           "usage: chmod [-fhv] [-R [-H | -L | -P]] mode file ...\n");
+#endif /* __APPLE__ */
        exit(1);
-       /* NOTREACHED */
 }
index 379a94d58136731de77ef8135dc5879836da04c4..9407995f29385dac6e6a1e47ebfe2db7dc51dd6d 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"     from: @(#)chgrp.1      8.3 (Berkeley) 3/31/94
-.\"    $NetBSD: chgrp.1,v 1.10 1997/12/21 18:11:19 kleink Exp $
+.\"     @(#)chgrp.1    8.3 (Berkeley) 3/31/94
+.\" $FreeBSD: src/usr.sbin/chown/chgrp.1,v 1.13 2001/08/15 09:09:46 ru Exp $
 .\"
 .Dd March 31, 1994
 .Dt CHGRP 1
-.Os BSD 4.2
+.Os
 .Sh NAME
 .Nm chgrp
 .Nd change group
 .Sh SYNOPSIS
 .Nm
+.Op Fl fhv
 .Oo
 .Fl R
 .Op Fl H | Fl L | Fl P
 .Oc
-.Op Fl fh
 .Ar group
-.Ar files ...
+.Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -59,13 +59,13 @@ operand to the
 .Ar group
 ID specified by the group operand.
 .Pp
-Options:
-.Bl -tag -width Ds
+The following options are available:
+.Bl -tag -width indent
 .It Fl H
 If the
 .Fl R
 option is specified, symbolic links on the command line are followed.
-(Symbolic links encountered in the tree traversal are not followed.)
+(Symbolic links encountered in the tree traversal are not followed).
 .It Fl L
 If the
 .Fl R
@@ -74,6 +74,7 @@ option is specified, all symbolic links are followed.
 If the
 .Fl R
 option is specified, no symbolic links are followed.
+This is the default.
 .It Fl R
 Change the group ID for the file hierarchies rooted
 in the files instead of just the files themselves.
@@ -81,20 +82,14 @@ in the files instead of just the files themselves.
 The force option ignores errors, except for usage errors and doesn't
 query about strange modes (unless the user does not have proper permissions).
 .It Fl h
-If
-.Ar file
-is a symbolic link, the group of the link is changed.
+If the file is a symbolic link, the group ID of the link itself is changed
+rather than the file that is pointed to.
+.It Fl v
+Cause
+.Nm
+to be verbose, showing files as the group is modified.
 .El
 .Pp
-If
-.Fl h
-is not given, unless the 
-.Fl H
-or
-.Fl L
-option is set,
-.Nm
-on a symbolic link always succeeds and has no effect.
 The
 .Fl H ,
 .Fl L
@@ -117,24 +112,21 @@ The user invoking
 .Nm
 must belong to the specified group and be the owner of the file,
 or be the super-user.
-.Pp
-Unless invoked by the super-user,
-.Nm
-clears the set-user-id and set-group-id bits on a file to prevent
-accidental or mischievous creation of set-user-id or set-group-id
-programs.
+.Sh DIAGNOSTICS
+.Ex -std
+.Sh COMPATIBILITY
+In previous versions of this system, symbolic links did not have groups.
 .Pp
 The
-.Nm
-utility exits 0 on success, and >0 if an error occurs.
+.Fl v
+option is non-standard and its use in scripts is not recommended.
 .Sh FILES
 .Bl -tag -width /etc/group -compact
 .It Pa /etc/group
-Group ID file
+group ID file
 .El
 .Sh SEE ALSO
 .Xr chown 2 ,
-.Xr lchown 2 ,
 .Xr fts 3 ,
 .Xr group 5 ,
 .Xr passwd 5 ,
@@ -143,4 +135,6 @@ Group ID file
 .Sh STANDARDS
 The
 .Nm
-utility is expected to be POSIX 1003.2 compatible.
+utility is expected to be
+.St -p1003.2
+compatible.
index 6e8065e2e9d317459884fd8e912a1b24c804d498..18d467ddd347eb6ac4cf1680799021c3d8c4a31a 100644 (file)
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"     from: @(#)chown.8      8.3 (Berkeley) 3/31/94
-.\"    $NetBSD: chown.8,v 1.11 1998/10/05 21:37:38 kim Exp $
+.\"     @(#)chown.8    8.3 (Berkeley) 3/31/94
+.\" $FreeBSD: src/usr.sbin/chown/chown.8,v 1.20 2002/07/14 14:42:43 charnier Exp $
 .\"
 .Dd March 31, 1994
 .Dt CHOWN 8
-.Os BSD 4
+.Os
 .Sh NAME
 .Nm chown
 .Nd change file owner and group
 .Sh SYNOPSIS
 .Nm
+.Op Fl fhv
 .Oo
 .Fl R
 .Op Fl H | Fl L | Fl P
 .Oc
-.Op Fl fh
-.Ar owner Op Ar :group
-.Ar file ...
-.Nm ""
+.Ar owner Ns Op : Ns Ar group
+.Ar
+.Nm
+.Op Fl fhv
 .Oo
 .Fl R
 .Op Fl H | Fl L | Fl P
 .Oc
-.Op Fl fh
-.Ar :group
-.Ar file ...
+.No : Ns Ar group
+.Ar
 .Sh DESCRIPTION
+The
 .Nm
-sets the user ID and/or the group ID of the specified files.
+utility changes the user ID and/or the group ID of the specified files.
+Symbolic links named by arguments are silently left unchanged unless
+.Fl h
+is used.
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
@@ -74,6 +78,7 @@ option is specified, all symbolic links are followed.
 If the
 .Fl R
 option is specified, no symbolic links are followed.
+This is the default.
 .It Fl R
 Change the user ID and/or the group ID for the file hierarchies rooted
 in the files instead of just the files themselves.
@@ -81,9 +86,12 @@ in the files instead of just the files themselves.
 Don't report any failure to change file owner or group, nor modify
 the exit status to reflect such failures.
 .It Fl h
-If
-.Ar file
-is a symbolic link, the owner and/or group of the link is changed.
+If the file is a symbolic link, change the user ID and/or the
+group ID of the link itself.
+.It Fl v
+Cause
+.Nm
+to be verbose, showing files as the owner is modified.
 .El
 .Pp
 The
@@ -98,12 +106,6 @@ In addition, these options override each other and the
 command's actions are determined by the last one specified.
 .Pp
 The
-.Fl L
-option cannot be used together with the
-.Fl h
-option.
-.Pp
-The
 .Ar owner
 and
 .Ar group
@@ -125,30 +127,35 @@ group name.
 .Pp
 The ownership of a file may only be altered by a super-user for
 obvious security reasons.
-.Pp
-Unless invoked by the super-user,
-.Nm
-clears the set-user-id and set-group-id bits on a file to prevent
-accidental or mischievous creation of set-user-id and set-group-id
-programs.
-.Pp
-The
-.Nm
-utility exits 0 on success, and >0 if an error occurs.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh COMPATIBILITY
 Previous versions of the
 .Nm
 utility used the dot (``.'') character to distinguish the group name.
 This has been changed to be a colon (``:'') character so that user and
 group names may contain the dot character.
+.Pp
+On previous versions of this system, symbolic links did not have
+owners.
+.Pp
+The
+.Fl v
+option is non-standard and its use in scripts is not recommended.
 .Sh SEE ALSO
 .Xr chgrp 1 ,
 .Xr find 1 ,
 .Xr chown 2 ,
-.Xr lchown 2 ,
 .Xr fts 3 ,
 .Xr symlink 7
 .Sh STANDARDS
 The
 .Nm
-command is expected to be POSIX 1003.2 compliant.
+utility is expected to be
+.St -p1003.2
+compliant.
+.Sh HISTORY
+A
+.Nm
+utility appeared in
+.At v1 .
index 3598ecc8f7b64f87789bd24c37d4c42b7a667a4c..464bf230f81965af983c3ad58c52415b0f84f235 100644 (file)
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1988, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static const char copyright[] =
+"@(#) Copyright (c) 1988, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)chown.c    8.8 (Berkeley) 4/4/94";
-#else
-__RCSID("$NetBSD: chown.c,v 1.15 1998/10/05 21:37:39 kim Exp $");
 #endif
 #endif /* not lint */
 
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/usr.sbin/chown/chown.c,v 1.24 2002/07/17 16:22:24 dwmalone Exp $");
+
 #include <sys/param.h>
 #include <sys/stat.h>
 
-#include <ctype.h>
-#include <dirent.h>
 #include <err.h>
 #include <errno.h>
-#include <locale.h>
 #include <fts.h>
 #include <grp.h>
 #include <pwd.h>
@@ -61,47 +59,42 @@ __RCSID("$NetBSD: chown.c,v 1.15 1998/10/05 21:37:39 kim Exp $");
 #include <string.h>
 #include <unistd.h>
 
-void   a_gid __P((char *));
-void   a_uid __P((char *));
-void   chownerr __P((char *));
-u_long id __P((char *, char *));
-int    main __P((int, char **));
-void   usage __P((void));
+void   a_gid(const char *);
+void   a_uid(const char *);
+void   chownerr(const char *);
+u_long id(const char *, const char *);
+void   usage(void);
 
 uid_t uid;
 gid_t gid;
-int Rflag, ischown, fflag;
-char *gname, *myname;
+int ischown;
+const char *gname;
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char **argv)
 {
        FTS *ftsp;
        FTSENT *p;
-       int Hflag, Lflag, Pflag, ch, fts_options, hflag, rval;
+       int Hflag, Lflag, Rflag, fflag, hflag, vflag;
+       int ch, fts_options, rval;
        char *cp;
-       int (*change_owner) __P((const char *, uid_t, gid_t));
-       
-       setlocale(LC_ALL, "");
 
-       myname = (cp = strrchr(*argv, '/')) ? cp + 1 : *argv;
-       ischown = myname[2] == 'o';
-       
-       Hflag = Lflag = Pflag = hflag = 0;
-       while ((ch = getopt(argc, argv, "HLPRfh")) != -1)
+       cp = strrchr(argv[0], '/');
+       cp = (cp != NULL) ? cp + 1 : argv[0];
+       ischown = (strcmp(cp, "chown") == 0);
+
+       Hflag = Lflag = Rflag = fflag = hflag = vflag = 0;
+       while ((ch = getopt(argc, argv, "HLPRfhv")) != -1)
                switch (ch) {
                case 'H':
                        Hflag = 1;
-                       Lflag = Pflag = 0;
+                       Lflag = 0;
                        break;
                case 'L':
                        Lflag = 1;
-                       Hflag = Pflag = 0;
+                       Hflag = 0;
                        break;
                case 'P':
-                       Pflag = 1;
                        Hflag = Lflag = 0;
                        break;
                case 'R':
@@ -111,15 +104,11 @@ main(argc, argv)
                        fflag = 1;
                        break;
                case 'h':
-                       /*
-                        * In System V the -h option causes chown/chgrp to
-                        * change the owner/group of the symbolic link.
-                        * 4.4BSD's symbolic links didn't have owners/groups,
-                        * so it was an undocumented noop.
-                        * In NetBSD 1.3, lchown(2) is introduced.
-                        */
                        hflag = 1;
                        break;
+               case 'v':
+                       vflag = 1;
+                       break;
                case '?':
                default:
                        usage();
@@ -130,27 +119,22 @@ main(argc, argv)
        if (argc < 2)
                usage();
 
-       fts_options = FTS_PHYSICAL;
        if (Rflag) {
+               fts_options = FTS_PHYSICAL;
+               if (hflag && (Hflag || Lflag))
+                       errx(1, "the -R%c and -h options may not be "
+                           "specified together", Hflag ? 'H' : 'L');
                if (Hflag)
                        fts_options |= FTS_COMFOLLOW;
-               if (Lflag) {
-                       if (hflag)
-                               errx(1, "the -L and -h options may not be specified together.");
+               else if (Lflag) {
                        fts_options &= ~FTS_PHYSICAL;
                        fts_options |= FTS_LOGICAL;
                }
-       }
-#ifndef __APPLE__
-        if (hflag)
-               change_owner = lchown;
-       else
-            change_owner = chown;
-#else
-        change_owner = chown;
-#endif
+       } else
+               fts_options = hflag ? FTS_PHYSICAL : FTS_LOGICAL;
 
-       uid = gid = -1;
+       uid = (uid_t)-1;
+       gid = (gid_t)-1;
        if (ischown) {
                if ((cp = strchr(*argv, ':')) != NULL) {
                        *cp++ = '\0';
@@ -158,24 +142,25 @@ main(argc, argv)
                }
 #ifdef SUPPORT_DOT
                else if ((cp = strchr(*argv, '.')) != NULL) {
+                       warnx("separation of user and group with a period is deprecated");
                        *cp++ = '\0';
                        a_gid(cp);
                }
 #endif
                a_uid(*argv);
-       } else 
+       } else
                a_gid(*argv);
 
        if ((ftsp = fts_open(++argv, fts_options, 0)) == NULL)
-               err(1, "%s", "");
+               err(1, NULL);
 
        for (rval = 0; (p = fts_read(ftsp)) != NULL;) {
                switch (p->fts_info) {
-               case FTS_D:
-                       if (!Rflag)             /* Change it at FTS_DP. */
+               case FTS_D:                     /* Change it at FTS_DP. */
+                       if (!Rflag)
                                fts_set(ftsp, p, FTS_SKIP);
                        continue;
-               case FTS_DNR:                   /* Warn, chown, continue. */
+               case FTS_DNR:                   /* Warn, chown. */
                        warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
                        rval = 1;
                        break;
@@ -184,28 +169,35 @@ main(argc, argv)
                        warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
                        rval = 1;
                        continue;
-               case FTS_SL:                    /* Ignore. */
+               case FTS_SL:
                case FTS_SLNONE:
                        /*
                         * The only symlinks that end up here are ones that
                         * don't point to anything and ones that we found
                         * doing a physical walk.
                         */
-#ifndef __APPLE__
-                    if (!hflag)
-                        continue;
-#else
-                    continue;
-#endif
-                        /* else */
-                       /* FALLTHROUGH */
+                       if (hflag)
+                               break;
+                       else
+                               continue;
                default:
                        break;
                }
-
-               if ((*change_owner)(p->fts_accpath, uid, gid) && !fflag) {
-                       warn("%s", p->fts_path);
-                       rval = 1;
+               if ((uid == (uid_t)-1 || uid == p->fts_statp->st_uid) &&
+                   (gid == (gid_t)-1 || gid == p->fts_statp->st_gid))
+                       continue;
+#ifndef __APPLE__
+               if ((hflag ? lchown : chown)(p->fts_accpath, uid, gid) == -1) {
+#else
+               if (chown(p->fts_accpath, uid, gid) == -1) {
+#endif /* __APPLE__ */
+                       if (!fflag) {
+                               chownerr(p->fts_path);
+                               rval = 1;
+                       }
+               } else {
+                       if (vflag)
+                               printf("%s\n", p->fts_path);
                }
        }
        if (errno)
@@ -214,31 +206,28 @@ main(argc, argv)
 }
 
 void
-a_gid(s)
-       char *s;
+a_gid(const char *s)
 {
        struct group *gr;
 
        if (*s == '\0')                 /* Argument was "uid[:.]". */
                return;
        gname = s;
-       gid = ((gr = getgrnam(s)) == NULL) ? id(s, "group") : gr->gr_gid;
+       gid = ((gr = getgrnam(s)) != NULL) ? gr->gr_gid : id(s, "group");
 }
 
 void
-a_uid(s)
-       char *s;
+a_uid(const char *s)
 {
        struct passwd *pw;
 
        if (*s == '\0')                 /* Argument was "[:.]gid". */
                return;
-       uid = ((pw = getpwnam(s)) == NULL) ? id(s, "user") : pw->pw_uid;
+       uid = ((pw = getpwnam(s)) != NULL) ? pw->pw_uid : id(s, "user");
 }
 
 u_long
-id(name, type)
-       char *name, *type;
+id(const char *name, const char *type)
 {
        u_long val;
        char *ep;
@@ -252,15 +241,48 @@ id(name, type)
        if (errno)
                err(1, "%s", name);
        if (*ep != '\0')
-               errx(1, "%s: invalid %s name", name, type);
+               errx(1, "%s: illegal %s name", name, type);
        return (val);
 }
 
 void
-usage()
+chownerr(const char *file)
 {
-       (void)fprintf(stderr,
-           "usage: %s [-R [-H | -L | -P]] [-fh] %s file ...\n",
-           myname, ischown ? "[owner][:group]" : "group");
+       static uid_t euid = -1;
+       static int ngroups = -1;
+       gid_t groups[NGROUPS_MAX];
+
+       /* Check for chown without being root. */
+       if (errno != EPERM || (uid != (uid_t)-1 &&
+           euid == (uid_t)-1 && (euid = geteuid()) != 0)) {
+               warn("%s", file);
+               return;
+       }
+
+       /* Check group membership; kernel just returns EPERM. */
+       if (gid != (gid_t)-1 && ngroups == -1 &&
+           euid == (uid_t)-1 && (euid = geteuid()) != 0) {
+               ngroups = getgroups(NGROUPS_MAX, groups);
+               while (--ngroups >= 0 && gid != groups[ngroups]);
+               if (ngroups < 0) {
+                       warnx("you are not a member of group %s", gname);
+                       return;
+               }
+       }
+       warn("%s", file);
+}
+
+void
+usage(void)
+{
+
+       if (ischown)
+               (void)fprintf(stderr, "%s\n%s\n",
+                   "usage: chown [-fhv] [-R [-H | -L | -P]] owner[:group]"
+                   " file ...",
+                   "       chown [-fhv] [-R [-H | -L | -P]] :group file ...");
+       else
+               (void)fprintf(stderr, "%s\n",
+                   "usage: chgrp [-fhv] [-R [-H | -L | -P]] group file ...");
        exit(1);
 }
diff --git a/cp/cp.1 b/cp/cp.1
index f0333604ba05f274225ceb4ad1f1e844b6fe56ce..26e247ff4539c57b701ef6c93207581c102d0576 100644 (file)
--- a/cp/cp.1
+++ b/cp/cp.1
@@ -1,5 +1,3 @@
-.\"    $NetBSD: cp.1,v 1.12 1997/10/11 02:14:42 enami Exp $
-.\"
 .\" Copyright (c) 1989, 1990, 1993, 1994
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)cp.1        8.3 (Berkeley) 4/18/94
+.\" $FreeBSD: src/bin/cp/cp.1,v 1.25 2002/08/16 03:13:59 johan Exp $
 .\"
-.Dd April 18, 1994
+.Dd July 23, 2002
 .Dt CP 1
-.Os BSD 4
+.Os
 .Sh NAME
 .Nm cp
 .Nd copy files
 .Fl R
 .Op Fl H | Fl L | Fl P
 .Oc
-.Op Fl f | i
-.Op Fl p
+.Op Fl f | i | n
+.Op Fl pv
 .Ar source_file target_file
-.Nm cp
+.Nm
 .Oo
 .Fl R
 .Op Fl H | Fl L | Fl P
 .Oc
-.Op Fl f | i
-.Op Fl p
+.Op Fl f | i | n
+.Op Fl pv
 .Ar source_file ... target_directory
 .Sh DESCRIPTION
 In the first synopsis form, the
@@ -91,6 +90,7 @@ option is specified, all symbolic links are followed.
 If the
 .Fl R
 option is specified, no symbolic links are followed.
+This is the default.
 .It Fl R
 If
 .Ar source_file
@@ -103,25 +103,55 @@ indirected through, and for
 to create special files rather than copying them as normal files.
 Created directories have the same mode as the corresponding source
 directory, unmodified by the process' umask.
+.Pp
+Note that
+.Nm
+copies hard linked files as separate files.
+If you need to preserve hard links, consider using
+.Xr tar 1 ,
+.Xr cpio 1 ,
+or
+.Xr pax 1
+instead.
 .It Fl f
-For each existing destination pathname, attempt to overwrite it. If permissions
-do not allow copy to succeed, remove it and create a new file, without
-prompting for confirmation.
+For each existing destination pathname, remove it and
+create a new file, without prompting for confirmation
+regardless of its permissions.
 (The
-.Fl i
-option is ignored if the
 .Fl f
-option is specified.)
+option overrides any previous
+.Fl i
+or
+.Fl n
+options.)
 .It Fl i
-Causes
+Cause
 .Nm
 to write a prompt to the standard error output before copying a file
 that would overwrite an existing file.
 If the response from the standard input begins with the character
-.Sq Li y ,
+.Sq Li y
+or
+.Sq Li Y ,
 the file copy is attempted.
+(The
+.Fl i
+option overrides any previous
+.Fl f
+or
+.Fl n
+options.)
+.It Fl n
+Do not overwrite an existing file.
+(The
+.Fl n
+option overrides any previous
+.Fl f
+or
+.Fl i
+options.)
 .It Fl p
-Causes
+Cause
 .Nm
 to preserve in the copy as many of the modification time, access time,
 file flags, file mode, user ID, and group ID as allowed by permissions.
@@ -137,20 +167,26 @@ be preserved, the set group ID bit is not preserved
 in the copy's permissions.
 If the source file has both its set user ID and set group ID bits on,
 and either the user ID or group ID cannot be preserved, neither
-the set user ID or set group ID bits are preserved in the copy's
+the set user ID nor set group ID bits are preserved in the copy's
 permissions.
+.It Fl v
+Cause
+.Nm
+to be verbose, showing files as they are copied.
 .El
 .Pp
 For each destination file that already exists, its contents are
-overwritten if permissions allow, but its mode, user ID, and group
-ID are unchanged.
+overwritten if permissions allow.  Its mode, user ID, and group
+ID are unchanged unless the
+.Fl p
+option was specified.
 .Pp
-In the second synopsis form, 
-.Ar target_directory 
+In the second synopsis form,
+.Ar target_directory
 must exist unless there is only one named
 .Ar source_file
-which is a directory and the 
-.Fl R 
+which is a directory and the
+.Fl R
 flag is specified.
 .Pp
 If the destination file does not exist, the mode of the source file is
@@ -169,12 +205,12 @@ conditions must be fulfilled or both bits are removed.
 .Pp
 Appropriate permissions are required for file creation or overwriting.
 .Pp
-Symbolic links are always followed unless the 
-.Fl R 
+Symbolic links are always followed unless the
+.Fl R
 flag is set, in which case symbolic links are not followed, by default.
 The
 .Fl H
-or 
+or
 .Fl L
 flags (in conjunction with the
 .Fl R
@@ -189,9 +225,8 @@ options are ignored unless the
 option is specified.
 In addition, these options override each other and the
 command's actions are determined by the last one specified.
-.Pp
-.Nm
-exits 0 on success, >0 if an error occurred.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh COMPATIBILITY
 Historic versions of the
 .Nm
@@ -201,15 +236,26 @@ option.
 This implementation supports that option, however, its use is strongly
 discouraged, as it does not correctly copy special files, symbolic links
 or fifo's.
+.Pp
+The
+.Fl v
+and
+.Fl n
+options are non-standard and their use in scripts is not recommended.
 .Sh SEE ALSO
 .Xr mv 1 ,
 .Xr rcp 1 ,
-.Xr umask 2 , 
+.Xr umask 2 ,
 .Xr fts 3 ,
 .Xr symlink 7
 .Sh STANDARDS
 The
 .Nm
-utility is expected to be
+command is expected to be
 .St -p1003.2
 compatible.
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v1 .
diff --git a/cp/cp.c b/cp/cp.c
index 55377bcd68cacde960981f1de3e3127eae1dadce..6272d8eec85f143356ba95f1dcf2a8f747bb5972 100644 (file)
--- a/cp/cp.c
+++ b/cp/cp.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: cp.c,v 1.24 1998/08/19 01:29:11 thorpej Exp $  */
-
 /*
  * Copyright (c) 1988, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT(
+static char const copyright[] =
 "@(#) Copyright (c) 1988, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
-static char sccsid[] = "@(#)cp.c       8.5 (Berkeley) 4/29/95";
-#else
-__RCSID("$NetBSD: cp.c,v 1.24 1998/08/19 01:29:11 thorpej Exp $");
+static char sccsid[] = "@(#)cp.c       8.2 (Berkeley) 4/1/94";
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/cp/cp.c,v 1.42 2002/09/22 11:15:56 mckay Exp $");
 
 /*
  * Cp copies source files to target files.
- * 
+ *
  * The global PATH_T structure "to" always contains the path to the
  * current target file.  Since fts(3) does not change directories,
  * this path can be either absolute or dot-relative.
- * 
+ *
  * The basic algorithm is to initialize "to" and use fts(3) to traverse
  * the file hierarchy rooted in the argument list.  A trivial case is the
  * case of 'cp file1 file2'.  The more interesting case is the case of
@@ -68,14 +65,11 @@ __RCSID("$NetBSD: cp.c,v 1.24 1998/08/19 01:29:11 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/time.h>
 
-#include <dirent.h>
 #include <err.h>
 #include <errno.h>
-#include <fcntl.h>
 #include <fts.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -88,30 +82,28 @@ __RCSID("$NetBSD: cp.c,v 1.24 1998/08/19 01:29:11 thorpej Exp $");
                 *--(p).p_end = 0;                                      \
 }
 
-PATH_T to = { to.p_path, "" };
+static char emptystring[] = "";
+
+PATH_T to = { to.p_path, emptystring, "" };
 
-uid_t myuid;
-int Rflag, iflag, pflag, rflag, fflag;
-mode_t myumask;
+int fflag, iflag, nflag, pflag, vflag;
+static int Rflag, rflag;
 
 enum op { FILE_TO_FILE, FILE_TO_DIR, DIR_TO_DNE };
 
-int main __P((int, char *[]));
-int copy __P((char *[], enum op, int));
-int mastercmp __P((const FTSENT **, const FTSENT **));
+static int copy(char *[], enum op, int);
+static int mastercmp(const FTSENT * const *, const FTSENT * const *);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        struct stat to_stat, tmp_stat;
        enum op type;
-       int Hflag, Lflag, Pflag, ch, fts_options, r;
+       int Hflag, Lflag, Pflag, ch, fts_options, r, have_trailing_slash;
        char *target;
 
-       Hflag = Lflag = Pflag = Rflag = 0;
-       while ((ch = getopt(argc, argv, "HLPRfipr")) != -1) 
+       Hflag = Lflag = Pflag = 0;
+       while ((ch = getopt(argc, argv, "HLPRfinprv")) != -1)
                switch (ch) {
                case 'H':
                        Hflag = 1;
@@ -130,11 +122,15 @@ main(argc, argv)
                        break;
                case 'f':
                        fflag = 1;
-                       iflag = 0;
+                       iflag = nflag = 0;
                        break;
                case 'i':
-                       iflag = isatty(fileno(stdin));
-                       fflag = 0;
+                       iflag = 1;
+                       fflag = nflag = 0;
+                       break;
+               case 'n':
+                       nflag = 1;
+                       fflag = iflag = 0;
                        break;
                case 'p':
                        pflag = 1;
@@ -142,7 +138,9 @@ main(argc, argv)
                case 'r':
                        rflag = 1;
                        break;
-               case '?':
+               case 'v':
+                       vflag = 1;
+                       break;
                default:
                        usage();
                        break;
@@ -173,31 +171,26 @@ main(argc, argv)
                }
        } else {
                fts_options &= ~FTS_PHYSICAL;
-               fts_options |= FTS_LOGICAL;
+               fts_options |= FTS_LOGICAL | FTS_COMFOLLOW;
        }
 
-       myuid = getuid();
-
-       /* Copy the umask for explicit mode setting. */
-       myumask = umask(0);
-       (void)umask(myumask);
-
        /* Save the target base in "to". */
        target = argv[--argc];
-       if (strlen(target) > MAXPATHLEN)
+       if (strlcpy(to.p_path, target, sizeof(to.p_path)) >= sizeof(to.p_path))
                errx(1, "%s: name too long", target);
-       (void)strcpy(to.p_path, target);
        to.p_end = to.p_path + strlen(to.p_path);
         if (to.p_path == to.p_end) {
                *to.p_end++ = '.';
                *to.p_end = 0;
        }
-        STRIP_TRAILING_SLASH(to);
+       have_trailing_slash = (to.p_end[-1] == '/');
+       if (have_trailing_slash)
+               STRIP_TRAILING_SLASH(to);
        to.target_end = to.p_end;
 
        /* Set end of argument list for fts(3). */
-       argv[argc] = NULL;     
-       
+       argv[argc] = NULL;
+
        /*
         * Cp has two distinct cases:
         *
@@ -218,7 +211,7 @@ main(argc, argv)
        if (r == -1 || !S_ISDIR(to_stat.st_mode)) {
                /*
                 * Case (1).  Target is not a directory.
-                */ 
+                */
                if (argc > 1) {
                        usage();
                        exit(1);
@@ -232,72 +225,75 @@ main(argc, argv)
                 */
                if (r == -1) {
                        if (rflag || (Rflag && (Lflag || Hflag)))
-                               r = stat(*argv, &tmp_stat);
+                               stat(*argv, &tmp_stat);
                        else
-                               r = lstat(*argv, &tmp_stat);
-                       if (r == -1)
-                               err(1, "%s", *argv);
-                       
+                               lstat(*argv, &tmp_stat);
+
                        if (S_ISDIR(tmp_stat.st_mode) && (Rflag || rflag))
                                type = DIR_TO_DNE;
                        else
                                type = FILE_TO_FILE;
                } else
                        type = FILE_TO_FILE;
-       } else {
+
+               if (have_trailing_slash && type == FILE_TO_FILE) {
+                       if (r == -1)
+                               errx(1, "directory %s does not exist",
+                                    to.p_path);
+                       else
+                               errx(1, "%s is not a directory", to.p_path);
+               }
+       } else
                /*
                 * Case (2).  Target is a directory.
                 */
                type = FILE_TO_DIR;
-       }
 
        exit (copy(argv, type, fts_options));
-       /* NOTREACHED */
 }
 
 int
-copy(argv, type, fts_options)
-       char *argv[];
-       enum op type;
-       int fts_options;
+copy(char *argv[], enum op type, int fts_options)
 {
        struct stat to_stat;
        FTS *ftsp;
        FTSENT *curr;
-       int base, dne, nlen, rval;
-       char *p, *tmp;
+       int base = 0, dne, badcp, rval;
+       size_t nlen;
+       char *p, *target_mid;
+       mode_t mask, mode;
 
-       base = 0;       /* XXX gcc -Wuninitialized (see comment below) */
+       /*
+        * Keep an inverted copy of the umask, for use in correcting
+        * permissions on created directories when not using -p.
+        */
+       mask = ~umask(0777);
+       umask(~mask);
 
        if ((ftsp = fts_open(argv, fts_options, mastercmp)) == NULL)
-               err(1, argv[0]);
-       for (rval = 0; (curr = fts_read(ftsp)) != NULL;) {
+               err(1, "fts_open");
+       for (badcp = rval = 0; (curr = fts_read(ftsp)) != NULL; badcp = 0) {
                switch (curr->fts_info) {
                case FTS_NS:
+               case FTS_DNR:
                case FTS_ERR:
                        warnx("%s: %s",
                            curr->fts_path, strerror(curr->fts_errno));
-                       rval = 1;
+                       badcp = rval = 1;
                        continue;
                case FTS_DC:                    /* Warn, continue. */
                        warnx("%s: directory causes a cycle", curr->fts_path);
-                       rval = 1;
+                       badcp = rval = 1;
                        continue;
+               default:
+                       ;
                }
 
                /*
-                * If we are in case (2) or (3) above, we need to append the 
-                 * source name to the target name.  
+                * If we are in case (2) or (3) above, we need to append the
+                 * source name to the target name.
                  */
                if (type != FILE_TO_FILE) {
-                       if ((curr->fts_namelen +
-                           to.target_end - to.p_path + 1) > MAXPATHLEN) {
-                               warnx("%s/%s: name too long (not copied)", 
-                                   to.p_path, curr->fts_name);
-                               rval = 1;
-                               continue;
-                       }
-
                        /*
                         * Need to remember the roots of traversals to create
                         * correct pathnames.  If there's a directory being
@@ -308,7 +304,7 @@ copy(argv, type, fts_options)
                         * is the case where the target exists.
                         *
                         * Also, check for "..".  This is for correct path
-                        * concatentation for paths ending in "..", e.g.
+                        * concatenation for paths ending in "..", e.g.
                         *      cp -R .. /tmp
                         * Paths ending in ".." are changed to ".".  This is
                         * tricky, but seems the easiest way to fix the problem.
@@ -320,10 +316,10 @@ copy(argv, type, fts_options)
                        if (curr->fts_level == FTS_ROOTLEVEL) {
                                if (type != DIR_TO_DNE) {
                                        p = strrchr(curr->fts_path, '/');
-                                       base = (p == NULL) ? 0 : 
+                                       base = (p == NULL) ? 0 :
                                            (int)(p - curr->fts_path + 1);
 
-                                       if (!strcmp(&curr->fts_path[base], 
+                                       if (!strcmp(&curr->fts_path[base],
                                            ".."))
                                                base += 1;
                                } else
@@ -332,18 +328,54 @@ copy(argv, type, fts_options)
 
                        p = &curr->fts_path[base];
                        nlen = curr->fts_pathlen - base;
-
-                       tmp = to.target_end;
-                       if (*p != '/' && *(tmp - 1) != '/')
-                               *tmp++ = '/';
-                       *tmp = 0;
-
-                       (void)strncat(tmp, p, nlen);
-                       to.p_end = tmp + nlen;
+                       target_mid = to.target_end;
+                       if (*p != '/' && target_mid[-1] != '/')
+                               *target_mid++ = '/';
+                       *target_mid = 0;
+                       if (target_mid - to.p_path + nlen >= PATH_MAX) {
+                               warnx("%s%s: name too long (not copied)",
+                                   to.p_path, p);
+                               badcp = rval = 1;
+                               continue;
+                       }
+                       (void)strncat(target_mid, p, nlen);
+                       to.p_end = target_mid + nlen;
                        *to.p_end = 0;
                        STRIP_TRAILING_SLASH(to);
                }
 
+               if (curr->fts_info == FTS_DP) {
+                       /*
+                        * We are nearly finished with this directory.  If we
+                        * didn't actually copy it, or otherwise don't need to
+                        * change its attributes, then we are done.
+                        */
+                       if (!curr->fts_number)
+                               continue;
+                       /*
+                        * If -p is in effect, set all the attributes.
+                        * Otherwise, set the correct permissions, limited
+                        * by the umask.  Optimise by avoiding a chmod()
+                        * if possible (which is usually the case if we
+                        * made the directory).  Note that mkdir() does not
+                        * honour setuid, setgid and sticky bits, but we
+                        * normally want to preserve them on directories.
+                        */
+                       if (pflag) {
+                               if (setfile(curr->fts_statp, 0))
+                                   rval = 1;
+                       } else {
+                               mode = curr->fts_statp->st_mode;
+                               if ((mode & (S_ISUID | S_ISGID | S_ISTXT)) ||
+                                   ((mode | S_IRWXU) & mask) != (mode & mask))
+                                       if (chmod(to.p_path, mode & mask) != 0){
+                                               warn("chmod: %s", to.p_path);
+                                               rval = 1;
+                                       }
+                       }
+                       continue;
+               }
+
                /* Not an error but need to remember it happened */
                if (stat(to.p_path, &to_stat) == -1)
                        dne = 1;
@@ -352,16 +384,17 @@ copy(argv, type, fts_options)
                            to_stat.st_ino == curr->fts_statp->st_ino) {
                                warnx("%s and %s are identical (not copied).",
                                    to.p_path, curr->fts_path);
-                               rval = 1;
+                               badcp = rval = 1;
                                if (S_ISDIR(curr->fts_statp->st_mode))
                                        (void)fts_set(ftsp, curr, FTS_SKIP);
                                continue;
                        }
                        if (!S_ISDIR(curr->fts_statp->st_mode) &&
                            S_ISDIR(to_stat.st_mode)) {
-               warnx("cannot overwrite directory %s with non-directory %s",
+                               warnx("cannot overwrite directory %s with "
+                                   "non-directory %s",
                                    to.p_path, curr->fts_path);
-                               rval = 1;
+                               badcp = rval = 1;
                                continue;
                        }
                        dne = 0;
@@ -369,8 +402,16 @@ copy(argv, type, fts_options)
 
                switch (curr->fts_statp->st_mode & S_IFMT) {
                case S_IFLNK:
-                       if (copy_link(curr, !dne))
-                               rval = 1;
+                       /* Catch special case of a non-dangling symlink */
+                       if ((fts_options & FTS_LOGICAL) ||
+                           ((fts_options & FTS_COMFOLLOW) &&
+                           curr->fts_level == 0)) {
+                               if (copy_file(curr, dne))
+                                       badcp = rval = 1;
+                       } else {        
+                               if (copy_link(curr, !dne))
+                                       badcp = rval = 1;
+                       }
                        break;
                case S_IFDIR:
                        if (!Rflag && !rflag) {
@@ -378,78 +419,58 @@ copy(argv, type, fts_options)
                                        warnx("%s is a directory (not copied).",
                                            curr->fts_path);
                                (void)fts_set(ftsp, curr, FTS_SKIP);
-                               rval = 1;
+                               badcp = rval = 1;
                                break;
                        }
-
-                        /*
-                         * Directories get noticed twice:
-                         *  In the first pass, create it if needed.
-                         *  In the second pass, after the children have been copied, set the permissions.
-                         */
-                       if (curr->fts_info == FTS_D) /* First pass */
-                       {
-                               /*
-                                * If the directory doesn't exist, create the new
-                                * one with the from file mode plus owner RWX bits,
-                                * modified by the umask.  Trade-off between being
-                                * able to write the directory (if from directory is
-                                * 555) and not causing a permissions race.  If the
-                                * umask blocks owner writes, we fail..
-                                */
-                               if (dne) {
-                                       if (mkdir(to.p_path, 
-                                           curr->fts_statp->st_mode | S_IRWXU) < 0)
-                                               err(1, "%s", to.p_path);
-                               } else if (!S_ISDIR(to_stat.st_mode)) {
-                                       errno = ENOTDIR;
+                       /*
+                        * If the directory doesn't exist, create the new
+                        * one with the from file mode plus owner RWX bits,
+                        * modified by the umask.  Trade-off between being
+                        * able to write the directory (if from directory is
+                        * 555) and not causing a permissions race.  If the
+                        * umask blocks owner writes, we fail..
+                        */
+                       if (dne) {
+                               if (mkdir(to.p_path,
+                                   curr->fts_statp->st_mode | S_IRWXU) < 0)
                                        err(1, "%s", to.p_path);
-                               }
-                       }
-                       else if (curr->fts_info == FTS_DP) /* Second pass */
-                       {
-                               /*
-                                * If not -p and directory didn't exist, set it to be
-                                * the same as the from directory, umodified by the 
-                                * umask; arguably wrong, but it's been that way 
-                                * forever.
-                                */
-                               if (pflag && setfile(curr->fts_statp, 0))
-                                       rval = 1;
-                               else if (dne)
-                                       (void)chmod(to.p_path, 
-                                           curr->fts_statp->st_mode);
+                       } else if (!S_ISDIR(to_stat.st_mode)) {
+                               errno = ENOTDIR;
+                               err(1, "%s", to.p_path);
                        }
-                       else
-                        {
-                               warnx("directory %s encountered when not expected.", curr->fts_path);
-                               rval = 1;
-                                break;
-                        }
-
+                       /*
+                        * Arrange to correct directory attributes later
+                        * (in the post-order phase) if this is a new
+                        * directory, or if the -p flag is in effect.
+                        */
+                       curr->fts_number = pflag || dne;
                        break;
                case S_IFBLK:
                case S_IFCHR:
                        if (Rflag) {
                                if (copy_special(curr->fts_statp, !dne))
-                                       rval = 1;
-                       } else
+                                       badcp = rval = 1;
+                       } else {
                                if (copy_file(curr, dne))
-                                       rval = 1;
+                                       badcp = rval = 1;
+                       }
                        break;
                case S_IFIFO:
                        if (Rflag) {
                                if (copy_fifo(curr->fts_statp, !dne))
-                                       rval = 1;
-                       } else 
+                                       badcp = rval = 1;
+                       } else {
                                if (copy_file(curr, dne))
-                                       rval = 1;
+                                       badcp = rval = 1;
+                       }
                        break;
                default:
                        if (copy_file(curr, dne))
-                               rval = 1;
+                               badcp = rval = 1;
                        break;
                }
+               if (vflag && !badcp)
+                       (void)printf("%s -> %s\n", curr->fts_path, to.p_path);
        }
        if (errno)
                err(1, "fts_read");
@@ -465,8 +486,7 @@ copy(argv, type, fts_options)
  *     files first reduces seeking.
  */
 int
-mastercmp(a, b)
-       const FTSENT **a, **b;
+mastercmp(const FTSENT * const *a, const FTSENT * const *b)
 {
        int a_info, b_info;
 
index 7ae079ed04782571788b8d9faf8e947f38bb8028..66fea9947db77ecde3dfa79884bc8f623c9b5501 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: extern.h,v 1.4 1998/07/28 03:47:14 mycroft Exp $       */
-
 /*-
  * Copyright (c) 1991, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  *
  *     @(#)extern.h    8.2 (Berkeley) 4/1/94
+ * $FreeBSD: src/bin/cp/extern.h,v 1.15 2002/07/23 00:42:56 johan Exp $
  */
 
 typedef struct {
-       char *p_end;                    /* pointer to NULL at end of path */
-       char *target_end;               /* pointer to end of target base */
-       char p_path[MAXPATHLEN + 1];    /* pointer to the start of a path */
+       char    *p_end;                 /* pointer to NULL at end of path */
+       char    *target_end;            /* pointer to end of target base */
+       char    p_path[PATH_MAX];       /* pointer to the start of a path */
 } PATH_T;
 
 extern PATH_T to;
-extern uid_t myuid;
-extern int iflag, pflag, fflag;
-extern mode_t myumask;
-
-#include <sys/cdefs.h>
+extern int fflag, iflag, nflag, pflag, vflag;
 
 __BEGIN_DECLS
-int    copy_fifo __P((struct stat *, int));
-int    copy_file __P((FTSENT *, int));
-int    copy_link __P((FTSENT *, int));
-int    copy_special __P((struct stat *, int));
-int    set_utimes __P((const char *, struct stat *));
-int    setfile __P((struct stat *, int));
-void   usage __P((void));
+int    copy_fifo(struct stat *, int);
+int    copy_file(FTSENT *, int);
+int    copy_link(FTSENT *, int);
+int    copy_special(struct stat *, int);
+int    setfile(struct stat *, int);
+void   usage(void);
 __END_DECLS
index 5a61282110d88f1f29e7d164aca26fb9c2b24f9b..b55bbc909103e94bb49f8cb8439280b396fcf0e3 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: utils.c,v 1.15 1998/08/19 01:29:11 thorpej Exp $       */
-
 /*-
  * Copyright (c) 1991, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)utils.c    8.3 (Berkeley) 4/1/94";
-#else
-__RCSID("$NetBSD: utils.c,v 1.15 1998/08/19 01:29:11 thorpej Exp $");
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/cp/utils.c,v 1.38 2002/07/31 16:52:16 markm Exp $");
 
 #include <sys/param.h>
 #include <sys/stat.h>
+#ifdef VM_AND_BUFFER_CACHE_SYNCHRONIZED
 #include <sys/mman.h>
-#include <sys/time.h>
+#endif
 
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <fts.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
 
 #include "extern.h"
 
 int
-set_utimes(file, fs)
-       const char * file;
-       struct stat * fs;
-{
-    static struct timeval tv[2];
-
-    TIMESPEC_TO_TIMEVAL(&tv[0], &fs->st_atimespec);
-    TIMESPEC_TO_TIMEVAL(&tv[1], &fs->st_mtimespec);
-
-    if (utimes(file, tv)) {
-       warn("utimes: %s", file);
-       return (1);
-    }
-    return (0);
-}
-
-int
-copy_file(entp, dne)
-       FTSENT *entp;
-       int dne;
+copy_file(FTSENT *entp, int dne)
 {
        static char buf[MAXBSIZE];
-       struct stat to_stat, *fs;
-       int ch, checkch, from_fd, rcount, rval, to_fd, wcount;
+       struct stat *fs;
+       int ch, checkch, from_fd, rcount, rval, to_fd;
+       ssize_t wcount;
+       size_t wresid;
+       char *bufp;
 #ifdef VM_AND_BUFFER_CACHE_SYNCHRONIZED
        char *p;
 #endif
-       
+
        if ((from_fd = open(entp->fts_path, O_RDONLY, 0)) == -1) {
                warn("%s", entp->fts_path);
                return (1);
@@ -103,149 +86,136 @@ copy_file(entp, dne)
         * modified by the umask.)
         */
        if (!dne) {
-               if (iflag) {
-                       (void)fprintf(stderr, "overwrite %s? ", to.p_path);
+#define YESNO "(y/n [n]) "
+               if (nflag) {
+                       if (vflag)
+                               printf("%s not overwritten\n", to.p_path);
+                       return (0);
+               } else if (iflag) {
+                       (void)fprintf(stderr, "overwrite %s? %s", 
+                                       to.p_path, YESNO);
                        checkch = ch = getchar();
                        while (ch != '\n' && ch != EOF)
                                ch = getchar();
                        if (checkch != 'y' && checkch != 'Y') {
                                (void)close(from_fd);
-                               return (0);
+                               (void)fprintf(stderr, "not overwritten\n");
+                               return (1);
                        }
                }
-               /* overwrite existing destination file name */
-               to_fd = open(to.p_path, O_WRONLY | O_TRUNC, 0);
+               
+               if (fflag) {
+                   /* remove existing destination file name, 
+                    * create a new file  */
+                   (void)unlink(to.p_path);
+                   to_fd = open(to.p_path, O_WRONLY | O_TRUNC | O_CREAT,
+                                fs->st_mode & ~(S_ISUID | S_ISGID));
+               } else 
+                   /* overwrite existing destination file name */
+                   to_fd = open(to.p_path, O_WRONLY | O_TRUNC, 0);
        } else
                to_fd = open(to.p_path, O_WRONLY | O_TRUNC | O_CREAT,
                    fs->st_mode & ~(S_ISUID | S_ISGID));
 
-       if (to_fd == -1 && fflag) {
-               /*
-                * attempt to remove existing destination file name and
-                * create a new file
-                */
-               (void)unlink(to.p_path);
-               to_fd = open(to.p_path, O_WRONLY | O_TRUNC | O_CREAT,
-                            fs->st_mode & ~(S_ISUID | S_ISGID));
-       }
-
        if (to_fd == -1) {
                warn("%s", to.p_path);
                (void)close(from_fd);
-               return (1);;
+               return (1);
        }
 
        rval = 0;
 
        /*
-        * There's no reason to do anything other than close the file
-        * now if it's empty, so let's not bother.
+        * Mmap and write if less than 8M (the limit is so we don't totally
+        * trash memory on big files.  This is really a minor hack, but it
+        * wins some CPU back.
         */
-       if (fs->st_size > 0) {
-               /*
-                * Mmap and write if less than 8M (the limit is so we don't totally
-                * trash memory on big files).  This is really a minor hack, but it
-                * wins some CPU back.
-                */
 #ifdef VM_AND_BUFFER_CACHE_SYNCHRONIZED
-               if (fs->st_size <= 8 * 1048576) {
-                       if ((p = mmap(NULL, (size_t)fs->st_size, PROT_READ,
-                           MAP_FILE|MAP_SHARED, from_fd, (off_t)0)) == (char *)-1) {
+       if (S_ISREG(fs->st_mode) && fs->st_size <= 8 * 1048576) {
+               if ((p = mmap(NULL, (size_t)fs->st_size, PROT_READ,
+                   MAP_SHARED, from_fd, (off_t)0)) == MAP_FAILED) {
+                       warn("%s", entp->fts_path);
+                       rval = 1;
+               } else {
+                       for (bufp = p, wresid = fs->st_size; ;
+                           bufp += wcount, wresid -= (size_t)wcount) {
+                               wcount = write(to_fd, bufp, wresid);
+                               if (wcount >= (ssize_t)wresid || wcount <= 0)
+                                       break;
+                       }
+                       if (wcount != (ssize_t)wresid) {
+                               warn("%s", to.p_path);
+                               rval = 1;
+                       }
+                       /* Some systems don't unmap on close(2). */
+                       if (munmap(p, fs->st_size) < 0) {
                                warn("%s", entp->fts_path);
                                rval = 1;
-                       } else {
-                               if (write(to_fd, p, fs->st_size) != fs->st_size) {
-                                       warn("%s", to.p_path);
-                                       rval = 1;
-                               }
-                               /* Some systems don't unmap on close(2). */
-                               if (munmap(p, fs->st_size) < 0) {
-                                       warn("%s", entp->fts_path);
-                                       rval = 1;
-                               }
                        }
-               } else
+               }
+       } else
 #endif
-               {
-                       while ((rcount = read(from_fd, buf, MAXBSIZE)) > 0) {
-                               wcount = write(to_fd, buf, rcount);
-                               if (rcount != wcount || wcount == -1) {
-                                       warn("%s", to.p_path);
-                                       rval = 1;
+       {
+               while ((rcount = read(from_fd, buf, MAXBSIZE)) > 0) {
+                       for (bufp = buf, wresid = rcount; ;
+                           bufp += wcount, wresid -= wcount) {
+                               wcount = write(to_fd, bufp, wresid);
+                               if (wcount >= (ssize_t)wresid || wcount <= 0)
                                        break;
-                               }
                        }
-                       if (rcount < 0) {
-                               warn("%s", entp->fts_path);
+                       if (wcount != (ssize_t)wresid) {
+                               warn("%s", to.p_path);
                                rval = 1;
+                               break;
                        }
                }
+               if (rcount < 0) {
+                       warn("%s", entp->fts_path);
+                       rval = 1;
+               }
        }
 
-       if (rval == 1) {
-               (void)close(from_fd);
-               (void)close(to_fd);
-               return (1);
-       }
+       /*
+        * Don't remove the target even after an error.  The target might
+        * not be a regular file, or its attributes might be important,
+        * or its contents might be irreplaceable.  It would only be safe
+        * to remove it if we created it and its length is 0.
+        */
 
        if (pflag && setfile(fs, to_fd))
                rval = 1;
-       /*
-        * If the source was setuid or setgid, lose the bits unless the
-        * copy is owned by the same user and group.
-        */
-#define        RETAINBITS \
-       (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
-       else if (fs->st_mode & (S_ISUID | S_ISGID) && fs->st_uid == myuid) {
-               if (fstat(to_fd, &to_stat)) {
-                       warn("%s", to.p_path);
-                       rval = 1;
-               } else if (fs->st_gid == to_stat.st_gid &&
-                   fchmod(to_fd, fs->st_mode & RETAINBITS & ~myumask)) {
-                       warn("%s", to.p_path);
-                       rval = 1;
-               }
-       }
        (void)close(from_fd);
        if (close(to_fd)) {
                warn("%s", to.p_path);
                rval = 1;
        }
-       /* set the mod/access times now after close of the fd */
-       if (pflag && set_utimes(to.p_path, fs)) { 
-           rval = 1;
-       }
        return (rval);
 }
 
 int
-copy_link(p, exists)
-       FTSENT *p;
-       int exists;
+copy_link(FTSENT *p, int exists)
 {
        int len;
-       char target[MAXPATHLEN];
+       char llink[PATH_MAX];
 
-       if ((len = readlink(p->fts_path, target, sizeof(target))) == -1) {
+       if ((len = readlink(p->fts_path, llink, sizeof(llink) - 1)) == -1) {
                warn("readlink: %s", p->fts_path);
                return (1);
        }
-       target[len] = '\0';
+       llink[len] = '\0';
        if (exists && unlink(to.p_path)) {
                warn("unlink: %s", to.p_path);
                return (1);
        }
-       if (symlink(target, to.p_path)) {
-               warn("symlink: %s", target);
+       if (symlink(llink, to.p_path)) {
+               warn("symlink: %s", llink);
                return (1);
        }
-       return (pflag ? setfile(p->fts_statp, 0) : 0);
+       return (0);
 }
 
 int
-copy_fifo(from_stat, exists)
-       struct stat *from_stat;
-       int exists;
+copy_fifo(struct stat *from_stat, int exists)
 {
        if (exists && unlink(to.p_path)) {
                warn("unlink: %s", to.p_path);
@@ -259,9 +229,7 @@ copy_fifo(from_stat, exists)
 }
 
 int
-copy_special(from_stat, exists)
-       struct stat *from_stat;
-       int exists;
+copy_special(struct stat *from_stat, int exists)
 {
        if (exists && unlink(to.p_path)) {
                warn("unlink: %s", to.p_path);
@@ -274,83 +242,69 @@ copy_special(from_stat, exists)
        return (pflag ? setfile(from_stat, 0) : 0);
 }
 
-
-/*
- * Function: setfile
- *
- * Purpose:
- *   Set the owner/group/permissions for the "to" file to the information
- *   in the stat structure.  If fd is zero, also call set_utimes() to set
- *   the mod/access times.  If fd is non-zero, the caller must do a utimes
- *   itself after close(fd).
- */
 int
-setfile(fs, fd)
-       struct stat *fs;
-       int fd;
+setfile(struct stat *fs, int fd)
 {
-       int rval, islink;
+       static struct timeval tv[2];
+       struct stat ts;
+       int rval;
+       int gotstat;
 
        rval = 0;
-       islink = S_ISLNK(fs->st_mode);
-       fs->st_mode &= S_ISUID | S_ISGID | S_IRWXU | S_IRWXG | S_IRWXO;
+       fs->st_mode &= S_ISUID | S_ISGID | S_ISVTX |
+                      S_IRWXU | S_IRWXG | S_IRWXO;
 
+       TIMESPEC_TO_TIMEVAL(&tv[0], &fs->st_atimespec);
+       TIMESPEC_TO_TIMEVAL(&tv[1], &fs->st_mtimespec);
+       if (utimes(to.p_path, tv)) {
+               warn("utimes: %s", to.p_path);
+               rval = 1;
+       }
+       if (fd ? fstat(fd, &ts) : stat(to.p_path, &ts))
+               gotstat = 0;
+       else {
+               gotstat = 1;
+               ts.st_mode &= S_ISUID | S_ISGID | S_ISVTX |
+                             S_IRWXU | S_IRWXG | S_IRWXO;
+       }
        /*
         * Changing the ownership probably won't succeed, unless we're root
         * or POSIX_CHOWN_RESTRICTED is not set.  Set uid/gid before setting
         * the mode; current BSD behavior is to remove all setuid bits on
         * chown.  If chown fails, lose setuid/setgid bits.
         */
-       if (fd ? fchown(fd, fs->st_uid, fs->st_gid) :
-#ifdef __APPLE__
-           chown(to.p_path, fs->st_uid, fs->st_gid)) {
-#else
-           lchown(to.p_path, fs->st_uid, fs->st_gid)) {
-#endif
-               if (errno != EPERM) {
-                       warn("chown: %s", to.p_path);
+       if (!gotstat || fs->st_uid != ts.st_uid || fs->st_gid != ts.st_gid)
+               if (fd ? fchown(fd, fs->st_uid, fs->st_gid) :
+                   chown(to.p_path, fs->st_uid, fs->st_gid)) {
+                       if (errno != EPERM) {
+                               warn("chown: %s", to.p_path);
+                               rval = 1;
+                       }
+                       fs->st_mode &= ~(S_ISUID | S_ISGID);
+               }
+
+       if (!gotstat || fs->st_mode != ts.st_mode)
+               if (fd ? fchmod(fd, fs->st_mode) : chmod(to.p_path, fs->st_mode)) {
+                       warn("chmod: %s", to.p_path);
+                       rval = 1;
+               }
+
+       if (!gotstat || fs->st_flags != ts.st_flags)
+               if (fd ?
+                   fchflags(fd, fs->st_flags) : chflags(to.p_path, fs->st_flags)) {
+                       warn("chflags: %s", to.p_path);
                        rval = 1;
                }
-               fs->st_mode &= ~(S_ISUID | S_ISGID);
-       }
-#ifdef __APPLE__
-       if (fd ? fchmod(fd, fs->st_mode) : chmod(to.p_path, fs->st_mode)) {
-#else
-       if (fd ? fchmod(fd, fs->st_mode) : lchmod(to.p_path, fs->st_mode)) {
-#endif
-               warn("chmod: %s", to.p_path);
-               rval = 1;
-       }
 
-       if (!islink) {
-               /*
-                * XXX
-                * NFS doesn't support chflags; ignore errors unless
-                * there's reason to believe we're losing bits.
-                * (Note, this still won't be right if the server
-                * supports flags and we were trying to *remove* flags
-                * on a file that we copied, i.e., that we didn't create.)
-                */
-               errno = 0;
-               if (fd ? fchflags(fd, fs->st_flags) :
-                   chflags(to.p_path, fs->st_flags))
-                       if (errno != EOPNOTSUPP || fs->st_flags != 0) {
-                               warn("chflags: %s", to.p_path);
-                               rval = 1;
-                       }
-       }
-       /* if fd is non-zero, caller must call set_utimes() after close() */
-       if (fd == 0 && set_utimes(to.p_path, fs))
-           rval = 1;
        return (rval);
 }
 
 void
-usage()
+usage(void)
 {
+
        (void)fprintf(stderr, "%s\n%s\n",
-           "usage: cp [-R [-H | -L | -P]] [-f | -i] [-p] src target",
-           "       cp [-R [-H | -L | -P]] [-f | -i] [-p] src1 ... srcN directory");
-       exit(1);
-       /* NOTREACHED */
+"usage: cp [-R [-H | -L | -P]] [-f | -i | -n] [-pv] src target",
+"       cp [-R [-H | -L | -P]] [-f | -i | -n] [-pv] src1 ... srcN directory");
+       exit(EX_USAGE);
 }
diff --git a/csh/strpct.c b/csh/strpct.c
deleted file mode 100644 (file)
index ac3b32d..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*     $NetBSD: strpct.c,v 1.2 1998/05/08 18:43:54 fair Exp $  */
-
-/*-
- * Copyright (c) 1998 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Erik E. Fair
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Calculate a percentage without resorting to floating point
- * and return a pointer to a string
- *
- * "digits" is the number of digits past the decimal place you want
- * (zero being the straight percentage with no decimals)
- *
- * Erik E. Fair <fair@clock.org>, May 8, 1997
- */
-
-#include <sys/types.h>
-#include <machine/limits.h>
-
-#include <stdio.h>
-
-char * strpct __P((u_long, u_long, u_int));
-
-char *
-strpct(numerator, denominator, digits)
-       u_long  numerator, denominator;
-       u_int   digits;
-{
-        int i;
-        u_long result, factor;
-        static char     percent[32];
-
-        /* I should check for digit overflow here, too XXX */
-       factor = 100L;
-        for(i = 0; i < digits; i++) {
-                factor *= 10;
-        }
-
-        /* watch out for overflow! */
-        if (numerator < (ULONG_MAX / factor)) {
-                numerator *= factor;
-        } else {
-                /* toss some of the bits of lesser significance */
-                denominator /= factor;
-        }
-
-        if (denominator == 0L)
-                denominator = 1L;
-
-        result = numerator / denominator;
-
-        if (digits == 0) {
-                (void) snprintf(percent, sizeof(percent), "%lu%%", result);
-        } else {
-                char    fmt[32];
-
-                /* indirection to produce the right output format */
-                (void) snprintf(fmt, sizeof(fmt), "%%lu.%%0%ulu%%%%", digits);
-
-                factor /= 100L;         /* undo initialization */
-
-                (void) snprintf(percent, sizeof(percent),
-                        fmt, result / factor, result % factor);
-        }       
-
-        return(percent);
-}
index 154ddffce0f78a8d0fe610bfb2d6d5378f6f4f7c..cbcac45500f5b758e2b224293c55f2fe22442ab4 100644 (file)
@@ -12,7 +12,7 @@ NAME = df
 PROJECTVERSION = 2.8
 PROJECT_TYPE = Tool
 
-CFILES = df.c
+CFILES = df.c vfslist.c
 
 OTHERSRCS = Makefile Makefile.preamble Makefile.postamble df.1
 
index 7782dbfc88154267fa917627b0a4bdf8039629dc..6fcac4eb83019117824b697db69ab2f076732e77 100644 (file)
@@ -1,5 +1,3 @@
 vpath strpct.c ../csh
 
-CFILES += strpct.c
-
 include $(CoreOSMakefiles)/ProjectBuilder/Makefile.Preamble.Common
diff --git a/df/df.1 b/df/df.1
index ccedb98b1b766df425b6cad8dd506a174b8323cb..99e4c1cdf2ba04ba22502c9fa80f96783ad19bd1 100644 (file)
--- a/df/df.1
+++ b/df/df.1
@@ -1,5 +1,3 @@
-.\"    $NetBSD: df.1,v 1.14 1997/10/20 08:51:31 enami Exp $
-.\"
 .\" Copyright (c) 1989, 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    @(#)df.1        8.2 (Berkeley) 1/13/92
+.\"     @(#)df.1       8.3 (Berkeley) 5/8/95
+.\" $FreeBSD: src/bin/df/df.1,v 1.18.2.7 2002/04/22 22:17:36 keramida Exp $
 .\"
-.Dd January 13, 1994
+.Dd May 8, 1995
 .Dt DF 1
-.Os BSD 4
+.Os
 .Sh NAME
 .Nm df
 .Nd display free disk space
 .Sh SYNOPSIS
 .Nm
-.Op Fl ikln
+.Oo
+.Fl b | h | H | k |
+.Fl m | P
+.Oc
+.Op Fl ailn
 .Op Fl t Ar type
-.Op Ar file | Ar file_system ...
+.Op Ar file | filesystem ...
 .Sh DESCRIPTION
+The
 .Nm
+utility
 displays statistics about the amount of free disk space on the specified
-.Ar file_system
-or on the file system of which
+.Ar filesystem
+or on the filesystem of which
 .Ar file
 is a part.
-Values are displayed in 512-byte per block block counts.
-If neither a file or a
-.Ar file_system
-operand is specified,
-statistics for all mounted file systems are displayed
+Values are displayed in 512-byte per block counts.
+If neither a file or a filesystem operand is specified,
+statistics for all mounted filesystems are displayed
 (subject to the
-.Fl l
-and
 .Fl t
-options below).
+option below).
 .Pp
 The following options are available:
 .Bl -tag -width Ds
+.It Fl a
+Show all mount points, including those that were mounted with the MNT_IGNORE
+flag.
+.It Fl b
+Use 512-byte blocks rather than the default.  Note that
+this overrides the
+.Ev BLOCKSIZE
+specification from the environment.
+.It Fl g
+Use 1073741824-byte (1-Gbyte) blocks rather than the default.  Note that
+this overrides the
+.Ev BLOCKSIZE
+specification from the environment.
+.It Fl H
+"Human-readable" output.  Use unit suffixes: Byte, Kilobyte, Megabyte,
+Gigabyte, Terabyte and Petabyte in order to reduce the number of
+digits to three or less using base 10 for sizes.
+.It Fl h
+"Human-readable" output.  Use unit suffixes: Byte, Kilobyte, Megabyte,
+Gigabyte, Terabyte and Petabyte in order to reduce the number of
+digits to three or less using base 2 for sizes.
 .It Fl i
 Include statistics on the number of free inodes.
 .It Fl k
-By default, all sizes are reported in 512-byte block counts.
-The
-.Fl k
-option causes the numbers to be reported in kilobyte counts.
+Use 1024-byte (1-Kbyte) blocks rather than the default.  Note that
+this overrides the
+.Ev BLOCKSIZE
+specification from the environment.
 .It Fl l
-Display statistics only about mounted file systems with the MNT_LOCAL
-flag set.  If a non-local file system is given as an argument, a
-warning is issued and no information is given on that file system.
+Only display information about locally-mounted filesystems.
+.It Fl m
+Use 1048576-byte (1-Mbyte) blocks rather than the default.  Note that
+this overrides the
+.Ev BLOCKSIZE
+specification from the environment.
 .It Fl n
-Print out the previously obtained statistics from the file systems.
+Print out the previously obtained statistics from the filesystems.
 This option should be used if it is possible that one or more
-file systems are in a state such that they will not be able to provide
+filesystems are in a state such that they will not be able to provide
 statistics without a long delay.
 When this option is specified,
 .Nm
-will not request new statistics from the file systems, but will respond
+will not request new statistics from the filesystems, but will respond
 with the possibly stale statistics that were previously obtained.
-.It Fl t Ar type
-Is used to indicate the actions should only be taken on
-filesystems of the specified type.
+.It Fl P
+Use POSIX compliant output of 512-byte blocks rather than the default.
+Note that this overrides the
+.Ev BLOCKSIZE
+specification from the environment.
+.It Fl t
+Only print out statistics for filesystems of the specified types.
 More than one type may be specified in a comma separated list.
 The list of filesystem types can be prefixed with
 .Dq no
 to specify the filesystem types for which action should
 .Em not
-be taken.  If a file system is given on the command line that is not of
-the specified type, a warning is issued and no information is given on
-that file system.
+be taken.
+For example, the
+.Nm
+command:
+.Bd -literal -offset indent
+df -t nonfs,mfs
+.Ed
+.Pp
+lists all filesystems except those of type
+.Tn NFS
+and
+.Tn MFS .
+The
+.Xr lsvfs 1
+command can be used to find out the types of filesystems
+that are available on the system.
 .El
-.Sh ENVIRONMENT VARIABLES
+.Sh ENVIRONMENT
 .Bl -tag -width BLOCKSIZE
 .It Ev BLOCKSIZE
 If the environment variable
 .Ev BLOCKSIZE
-is set, and the
-.Fl k
-option is not specified, the block counts will be displayed in units of that
-size block.
+is set, the block counts will be displayed in units of that size block.
 .El
+.Sh BUGS
+The
+.Fl n
+and
+.Fl t
+flags are ignored if a file or filesystem is specified.
 .Sh SEE ALSO
+.Xr lsvfs 1 ,
 .Xr quota 1 ,
-.Xr statfs 2 ,
 .Xr fstatfs 2 ,
 .Xr getfsstat 2 ,
+.Xr statfs 2 ,
 .Xr getmntinfo 3 ,
 .Xr fstab 5 ,
 .Xr mount 8 ,
@@ -118,5 +164,5 @@ size block.
 .Sh HISTORY
 A
 .Nm
-utility appeared in
-.At v6 .
+command appeared in
+.At v1 .
diff --git a/df/df.c b/df/df.c
index 0a1caddb5e540133a7af4bb0b226c9cad6d71dd2..fa104d2b64381b542afac53951e0596af414defc 100644 (file)
--- a/df/df.c
+++ b/df/df.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: df.c,v 1.30 1998/07/28 05:31:24 mycroft Exp $  */
-
 /*
  * Copyright (c) 1980, 1990, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT(
+static const char copyright[] =
 "@(#) Copyright (c) 1980, 1990, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
-static char sccsid[] = "@(#)df.c       8.7 (Berkeley) 4/2/94";
+static char sccsid[] = "@(#)df.c       8.9 (Berkeley) 5/8/95";
 #else
-__RCSID("$NetBSD: df.c,v 1.30 1998/07/28 05:31:24 mycroft Exp $");
+static const char rcsid[] =
+  "$FreeBSD: src/bin/df/df.c,v 1.23.2.9 2002/07/01 00:14:24 iedowse Exp $";
 #endif
 #endif /* not lint */
 
+#ifdef __APPLE__
+#define MNT_IGNORE 0
+#include <sys/types.h> 
+typedef int32_t ufs_daddr_t;
+#endif
+
+#include <sys/cdefs.h>
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
-
+#include <sys/sysctl.h>
 #include <ufs/ufs/ufsmount.h>
-
-#ifdef __APPLE__
-#define MOUNT_FFS "ffs"
-#endif
+#include <ufs/ffs/fs.h>
 
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <fstab.h>
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
 
-extern char * strpct __P((u_long num, u_long denom, u_int digits));
-
-int     main __P((int, char *[]));
-int     bread __P((off_t, void *, int));
-char   *getmntpt __P((char *));
-void    prtstat __P((struct statfs *, int));
-int     ufs_df __P((char *, struct statfs *));
-int     selected __P((const char *));
-void    maketypelist __P((char *));
-long    regetmntinfo __P((struct statfs **, long));
-void    usage __P((void));
-
-int    iflag, kflag, lflag, nflag;
-char   **typelist = NULL;
+#define UNITS_SI 1
+#define UNITS_2 2
+
+#define KILO_SZ(n) (n)
+#define MEGA_SZ(n) ((n) * (n))
+#define GIGA_SZ(n) ((n) * (n) * (n))
+#define TERA_SZ(n) ((n) * (n) * (n) * (n))
+#define PETA_SZ(n) ((n) * (n) * (n) * (n) * (n))
+
+#define KILO_2_SZ (KILO_SZ(1024ULL))
+#define MEGA_2_SZ (MEGA_SZ(1024ULL))
+#define GIGA_2_SZ (GIGA_SZ(1024ULL))
+#define TERA_2_SZ (TERA_SZ(1024ULL))
+#define PETA_2_SZ (PETA_SZ(1024ULL))
+
+#define KILO_SI_SZ (KILO_SZ(1000ULL))
+#define MEGA_SI_SZ (MEGA_SZ(1000ULL))
+#define GIGA_SI_SZ (GIGA_SZ(1000ULL))
+#define TERA_SI_SZ (TERA_SZ(1000ULL))
+#define PETA_SI_SZ (PETA_SZ(1000ULL))
+
+/* Maximum widths of various fields. */
+struct maxwidths {
+       int mntfrom;
+       int total;
+       int used;
+       int avail;
+       int iused;
+       int ifree;
+};
+
+unsigned long long vals_si [] = {1, KILO_SI_SZ, MEGA_SI_SZ, GIGA_SI_SZ, TERA_SI_SZ, PETA_SI_SZ};
+unsigned long long vals_base2[] = {1, KILO_2_SZ, MEGA_2_SZ, GIGA_2_SZ, TERA_2_SZ, PETA_2_SZ};
+unsigned long long *valp;
+
+typedef enum { NONE, KILO, MEGA, GIGA, TERA, PETA, UNIT_MAX } unit_t;
+
+unit_t unitp [] = { NONE, KILO, MEGA, GIGA, TERA, PETA };
+
+int      bread(off_t, void *, int);
+int      checkvfsname(const char *, char **);
+char    *getmntpt(char *);
+int      longwidth(long long);
+char    *makenetvfslist(void);
+char   **makevfslist(char *);
+void     prthuman(struct statfs *, long);
+void     prthumanval(double);
+void     prtstat(struct statfs *, struct maxwidths *);
+long     regetmntinfo(struct statfs **, long, char **);
+int      ufs_df(char *, struct maxwidths *);
+unit_t   unit_adjust(double *);
+void     update_maxwidths(struct maxwidths *, struct statfs *);
+void     usage(void);
+
+int    aflag = 0, hflag, iflag, nflag;
 struct ufs_args mdev;
 
+static __inline int imax(int a, int b)
+{
+       return (a > b ? a : b);
+}
+
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        struct stat stbuf;
-       struct statfs *mntbuf;
+       struct statfs statfsbuf, *mntbuf;
+       struct maxwidths maxwidths;
+       const char *fstype;
+       char *mntpath, *mntpt, **vfslist;
        long mntsize;
-       int ch, i, maxwidth, width;
-       char *mntpt;
+       int ch, i, rv, tflag = 0;
 
-       while ((ch = getopt(argc, argv, "iklnt:")) != -1)
+       fstype = "ufs";
+
+       vfslist = NULL;
+       while ((ch = getopt(argc, argv, "abgHhiklmnPt:")) != -1)
                switch (ch) {
+               case 'a':
+                       aflag = 1;
+                       break;
+               case 'b':
+                               /* FALLTHROUGH */
+               case 'P':
+                       putenv("BLOCKSIZE=512");
+                       hflag = 0;
+                       break;
+               case 'g':
+                       putenv("BLOCKSIZE=1g");
+                       hflag = 0;
+                       break;
+               case 'H':
+                       hflag = UNITS_SI;
+                       valp = vals_si;
+                       break;
+               case 'h':
+                       hflag = UNITS_2;
+                       valp = vals_base2;
+                       break;
                case 'i':
                        iflag = 1;
                        break;
                case 'k':
-                       kflag = 1;
+                       putenv("BLOCKSIZE=1k");
+                       hflag = 0;
                        break;
                case 'l':
-                       lflag = 1;
+                       if (tflag)
+                               errx(1, "-l and -t are mutually exclusive.");
+                       if (vfslist != NULL)
+                               break;
+                       vfslist = makevfslist(makenetvfslist());
+                       break;
+               case 'm':
+                       putenv("BLOCKSIZE=1m");
+                       hflag = 0;
                        break;
                case 'n':
                        nflag = 1;
                        break;
                case 't':
-                       if (typelist != NULL)
-                               errx(1, "only one -t option may be specified.");
-                       maketypelist(optarg);
+                       if (vfslist != NULL) {
+                               if (tflag)
+                                       errx(1, "only one -t option may be specified");
+                               else
+                                       errx(1, "-l and -t are mutually exclusive.");
+                       }
+                       tflag++;
+                       fstype = optarg;
+                       vfslist = makevfslist(optarg);
                        break;
                case '?':
                default:
@@ -125,95 +215,95 @@ main(argc, argv)
        argv += optind;
 
        mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
-       if (mntsize == 0)
-               err(1, "retrieving information on mounted file systems");
+       bzero(&maxwidths, sizeof(maxwidths));
+       for (i = 0; i < mntsize; i++)
+               update_maxwidths(&maxwidths, &mntbuf[i]);
 
+       rv = 0;
        if (!*argv) {
-               mntsize = regetmntinfo(&mntbuf, mntsize);
-       } else {
-               mntbuf = malloc(argc * sizeof(struct statfs));
-               mntsize = 0;
-               for (; *argv; argv++) {
-                       if (stat(*argv, &stbuf) < 0) {
-                               if ((mntpt = getmntpt(*argv)) == 0) {
-                                       warn("%s", *argv);
+               mntsize = regetmntinfo(&mntbuf, mntsize, vfslist);
+               bzero(&maxwidths, sizeof(maxwidths));
+               for (i = 0; i < mntsize; i++)
+                       update_maxwidths(&maxwidths, &mntbuf[i]);
+               for (i = 0; i < mntsize; i++) {
+                       if (aflag || (mntbuf[i].f_flags & MNT_IGNORE) == 0)
+                               prtstat(&mntbuf[i], &maxwidths);
+               }
+               exit(rv);
+       }
+
+       for (; *argv; argv++) {
+               if (stat(*argv, &stbuf) < 0) {
+                       if ((mntpt = getmntpt(*argv)) == 0) {
+                               warn("%s", *argv);
+                               rv = 1;
+                               continue;
+                       }
+               } else if (S_ISCHR(stbuf.st_mode)) {
+                       if ((mntpt = getmntpt(*argv)) == 0) {
+                               mdev.fspec = *argv;
+                               mntpath = strdup("/tmp/df.XXXXXX");
+                               if (mntpath == NULL) {
+                                       warn("strdup failed");
+                                       rv = 1;
                                        continue;
                                }
-                       } else if (S_ISCHR(stbuf.st_mode)) {
-                               if (!ufs_df(*argv, &mntbuf[mntsize]))
-                                       ++mntsize;
-                               continue;
-                       } else if (S_ISBLK(stbuf.st_mode)) {
-                               if ((mntpt = getmntpt(*argv)) == 0) {
-#ifdef __APPLE__ /* We lack mkdtemp() */
-                                       mntpt = mktemp(strdup("/tmp/df.XXXXXX"));
-                                       mdev.fspec = *argv;
-                                       if (mkdir(mntpt, DEFFILEMODE) != 0) {
-#else
-                                       mntpt = strdup("/tmp/df.XXXXXX");
-                                       if (!mkdtemp(mntpt)) {
-#endif
-                                               warn("%s", mntpt);
-                                               continue;
-                                       }
-                                       mdev.fspec = *argv;
-                                       if (mount(MOUNT_FFS, mntpt, MNT_RDONLY,
-                                           &mdev) != 0) {
-                                               (void)rmdir(mntpt);
-                                               if (!ufs_df(*argv,
-                                                   &mntbuf[mntsize]))
-                                                       ++mntsize;
-                                               continue;
-                                       } else if (!statfs(mntpt,
-                                           &mntbuf[mntsize])) {
-                                               mntbuf[mntsize].f_mntonname[0] =
-                                                   '\0';
-                                               ++mntsize;
-                                       } else
-                                               warn("%s", *argv);
-                                       (void)unmount(mntpt, 0);
+                               mntpt = mkdtemp(mntpath);
+                               if (mntpt == NULL) {
+                                       warn("mkdtemp(\"%s\") failed", mntpath);
+                                       rv = 1;
+                                       free(mntpath);
+                                       continue;
+                               }
+                               if (mount(fstype, mntpt, MNT_RDONLY,
+                                   &mdev) != 0) {
+                                       rv = ufs_df(*argv, &maxwidths) || rv;
                                        (void)rmdir(mntpt);
+                                       free(mntpath);
                                        continue;
+                               } else if (statfs(mntpt, &statfsbuf) == 0) {
+                                       statfsbuf.f_mntonname[0] = '\0';
+                                       prtstat(&statfsbuf, &maxwidths);
+                               } else {
+                                       warn("%s", *argv);
+                                       rv = 1;
                                }
-                       } else
-                               mntpt = *argv;
-                       /*
-                        * Statfs does not take a `wait' flag, so we cannot
-                        * implement nflag here.
-                        */
-                       if (!statfs(mntpt, &mntbuf[mntsize]))
-                               if (lflag &&
-                                   (mntbuf[mntsize].f_flags & MNT_LOCAL) == 0)
-                                       warnx("Warning: %s is not a local %s",
-                                           *argv, "file system");
-                               else if
-                                   (!selected(mntbuf[mntsize].f_fstypename))
-                                       warnx("Warning: %s mounted as a %s %s",
-                                           *argv,
-                                           mntbuf[mntsize].f_fstypename,
-                                           "file system");
-                               else
-                                       ++mntsize;
-                       else
-                               warn("%s", *argv);
+                               (void)unmount(mntpt, 0);
+                               (void)rmdir(mntpt);
+                               free(mntpath);
+                               continue;
+                       }
+               } else
+                       mntpt = *argv;
+               /*
+                * Statfs does not take a `wait' flag, so we cannot
+                * implement nflag here.
+                */
+               if (statfs(mntpt, &statfsbuf) < 0) {
+                       warn("%s", mntpt);
+                       rv = 1;
+                       continue;
                }
+               /* Check to make sure the arguments we've been
+                * given are satisfied.  Return an error if we
+                * have been asked to list a mount point that does
+                * not match the other args we've been given (-l, -t, etc.)
+                */
+               if (checkvfsname(statfsbuf.f_fstypename, vfslist)) {
+                       rv++;
+                       continue;
+               }
+               if (argc == 1) {
+                       bzero(&maxwidths, sizeof(maxwidths));
+                       update_maxwidths(&maxwidths, &statfsbuf);
+               }
+               prtstat(&statfsbuf, &maxwidths);
        }
-
-       maxwidth = 0;
-       for (i = 0; i < mntsize; i++) {
-               width = strlen(mntbuf[i].f_mntfromname);
-               if (width > maxwidth)
-                       maxwidth = width;
-       }
-       for (i = 0; i < mntsize; i++)
-               prtstat(&mntbuf[i], maxwidth);
-       exit(0);
-       /* NOTREACHED */
+       return (rv);
 }
 
 char *
-getmntpt(name)
-       char *name;
+getmntpt(char *name)
 {
        long mntsize, i;
        struct statfs *mntbuf;
@@ -226,158 +316,201 @@ getmntpt(name)
        return (0);
 }
 
-static enum { IN_LIST, NOT_IN_LIST } which;
-
-int
-selected(type)
-       const char *type;
-{
-       char **av;
-
-       /* If no type specified, it's always selected. */
-       if (typelist == NULL)
-               return (1);
-       for (av = typelist; *av != NULL; ++av)
-               if (!strncmp(type, *av, MFSNAMELEN))
-                       return (which == IN_LIST ? 1 : 0);
-       return (which == IN_LIST ? 0 : 1);
-}
-
-void
-maketypelist(fslist)
-       char *fslist;
-{
-       int i;
-       char *nextcp, **av;
-
-       if ((fslist == NULL) || (fslist[0] == '\0'))
-               errx(1, "empty type list");
-
-       /*
-        * XXX
-        * Note: the syntax is "noxxx,yyy" for no xxx's and
-        * no yyy's, not the more intuitive "noyyy,noyyy".
-        */
-       if (fslist[0] == 'n' && fslist[1] == 'o') {
-               fslist += 2;
-               which = NOT_IN_LIST;
-       } else
-               which = IN_LIST;
-
-       /* Count the number of types. */
-       for (i = 1, nextcp = fslist;
-           (nextcp = strchr(nextcp, ',')) != NULL; i++)
-               ++nextcp;
-
-       /* Build an array of that many types. */
-       if ((av = typelist = malloc((i + 1) * sizeof(char *))) == NULL)
-               err(1, "can't allocate type array");
-       av[0] = fslist;
-       for (i = 1, nextcp = fslist;
-           (nextcp = strchr(nextcp, ',')) != NULL; i++) {
-               *nextcp = '\0';
-               av[i] = ++nextcp;
-       }
-       /* Terminate the array. */
-       av[i] = NULL;
-}
-
 /*
  * Make a pass over the filesystem info in ``mntbuf'' filtering out
- * filesystem types not in ``fsmask'' and possibly re-stating to get
+ * filesystem types not in vfslist and possibly re-stating to get
  * current (not cached) info.  Returns the new count of valid statfs bufs.
  */
 long
-regetmntinfo(mntbufp, mntsize)
-       struct statfs **mntbufp;
-       long mntsize;
+regetmntinfo(struct statfs **mntbufp, long mntsize, char **vfslist)
 {
        int i, j;
        struct statfs *mntbuf;
 
-       if (!lflag && typelist == NULL)
+       if (vfslist == NULL)
                return (nflag ? mntsize : getmntinfo(mntbufp, MNT_WAIT));
 
        mntbuf = *mntbufp;
-       j = 0;
-       for (i = 0; i < mntsize; i++) {
-               if (lflag && (mntbuf[i].f_flags & MNT_LOCAL) == 0)
-                       continue;
-               if (!selected(mntbuf[i].f_fstypename))
+       for (j = 0, i = 0; i < mntsize; i++) {
+               if (checkvfsname(mntbuf[i].f_fstypename, vfslist))
                        continue;
-               if (nflag)
+               if (!nflag)
+                       (void)statfs(mntbuf[i].f_mntonname,&mntbuf[j]);
+               else if (i != j)
                        mntbuf[j] = mntbuf[i];
-               else
-                       (void)statfs(mntbuf[i].f_mntonname, &mntbuf[j]);
                j++;
        }
        return (j);
 }
 
+/*
+ * Output in "human-readable" format.  Uses 3 digits max and puts
+ * unit suffixes at the end.  Makes output compact and easy to read,
+ * especially on huge disks.
+ *
+ */
+unit_t
+unit_adjust(double *val)
+{
+       double abval;
+       unit_t unit;
+       unsigned int unit_sz;
+
+       abval = fabs(*val);
+
+       unit_sz = abval ? ilogb(abval) / 10 : 0;
+
+       if (unit_sz >= UNIT_MAX) {
+               unit = NONE;
+       } else {
+               unit = unitp[unit_sz];
+               *val /= (double)valp[unit_sz];
+       }
+
+       return (unit);
+}
+
+void
+prthuman(struct statfs *sfsp, long used)
+{
+
+       prthumanval((double)sfsp->f_blocks * (double)sfsp->f_bsize);
+       prthumanval((double)used * (double)sfsp->f_bsize);
+       prthumanval((double)sfsp->f_bavail * (double)sfsp->f_bsize);
+}
+
+void
+prthumanval(double bytes)
+{
+
+       unit_t unit;
+       unit = unit_adjust(&bytes);
+
+       if (bytes == 0)
+               (void)printf("     0B");
+       else if (bytes > 10)
+               (void)printf(" %5.0f%c", bytes, "BKMGTPE"[unit]);
+       else
+               (void)printf(" %5.1f%c", bytes, "BKMGTPE"[unit]);
+}
+
 /*
  * Convert statfs returned filesystem size into BLOCKSIZE units.
  * Attempts to avoid overflow for large filesystems.
  */
 #define fsbtoblk(num, fsbs, bs) \
-        ((long int) ((((float) fsbs) != 0 && ((float) fsbs) < ((float) bs)) ? \
-                ((float) num) / (((float) bs) / ((float) fsbs)) : ((float) num) * (((float) fsbs) / ((float) bs))))
+       (((fsbs) != 0 && (fsbs) < (bs)) ? \
+               ((off_t)((unsigned)num)) / ((unsigned)(bs) / ((off_t)((unsigned)fsbs))) : ((off_t)((unsigned)num)) * ((off_t)((unsigned)fsbs)) / (bs))
 
 /*
  * Print out status about a filesystem.
  */
 void
-prtstat(sfsp, maxwidth)
-       struct statfs *sfsp;
-       int maxwidth;
+prtstat(struct statfs *sfsp, struct maxwidths *mwp)
 {
        static long blocksize;
        static int headerlen, timesthrough;
-       static char *header;
-       long used, availblks, inodes;
-       static char     *full = "100%";
+       static const char *header;
+       unsigned long used, availblks, inodes;
 
-       if (maxwidth < 11)
-               maxwidth = 11;
        if (++timesthrough == 1) {
-               if (kflag) {
-                       blocksize = 1024;
-                       header = "1K-blocks";
-                       headerlen = strlen(header);
-               } else
+               mwp->mntfrom = imax(mwp->mntfrom, strlen("Filesystem"));
+               if (hflag) {
+                       header = "  Size";
+                       mwp->total = mwp->used = mwp->avail = strlen(header);
+               } else {
                        header = getbsize(&headerlen, &blocksize);
-               (void)printf("%-*.*s %s     Used    Avail Capacity",
-                   maxwidth, maxwidth, "Filesystem", header);
-               if (iflag)
-                       (void)printf(" iused   ifree  %%iused");
+                       mwp->total = imax(mwp->total, headerlen);
+               }
+               mwp->used = imax(mwp->used, strlen("Used"));
+               mwp->avail = imax(mwp->avail, strlen("Avail"));
+
+               (void)printf("%-*s %-*s %*s %*s Capacity", mwp->mntfrom,
+                   "Filesystem", mwp->total, header, mwp->used, "Used",
+                   mwp->avail, "Avail");
+               if (iflag) {
+                       mwp->iused = imax(mwp->iused, strlen("  iused"));
+                       mwp->ifree = imax(mwp->ifree, strlen("ifree"));
+                       (void)printf(" %*s %*s %%iused", mwp->iused - 2,
+                           "iused", mwp->ifree, "ifree");
+               }
                (void)printf("  Mounted on\n");
        }
-       (void)printf("%-*.*s", maxwidth, maxwidth, sfsp->f_mntfromname);
-       used = sfsp->f_blocks - sfsp->f_bfree;
+
+       (void)printf("%-*s", mwp->mntfrom, sfsp->f_mntfromname);
+       used = (off_t)((unsigned)sfsp->f_blocks) - (off_t)((unsigned)sfsp->f_bfree);
        availblks = sfsp->f_bavail + used;
-       (void)printf(" %*ld %8ld %8ld", headerlen,
-           fsbtoblk(sfsp->f_blocks, sfsp->f_bsize, blocksize),
-           fsbtoblk(used, sfsp->f_bsize, blocksize),
-           fsbtoblk(sfsp->f_bavail, sfsp->f_bsize, blocksize));
-       (void)printf(" %6s",
-           availblks == 0 ? full : strpct((u_long)used, (u_long)availblks, 0));
+       if (hflag) {
+               prthuman(sfsp, used);
+       } else {
+               (void)printf(" %*lld %*lld %*lld", mwp->total,
+                   fsbtoblk(sfsp->f_blocks, sfsp->f_bsize, blocksize),
+                   mwp->used, fsbtoblk(used, sfsp->f_bsize, blocksize),
+                   mwp->avail, fsbtoblk(sfsp->f_bavail, sfsp->f_bsize,
+                   blocksize));
+       }
+       (void)printf(" %5.0f%%",
+           availblks == 0 ? 100.0 : (double)used / (double)availblks * 100.0);
        if (iflag) {
-               inodes = sfsp->f_files;
+               inodes = (unsigned)sfsp->f_files;
                used = inodes - sfsp->f_ffree;
-               (void)printf(" %7ld %7ld %6s ", used, sfsp->f_ffree,
-                  inodes == 0 ? full : strpct((u_long)used, (u_long)inodes, 0));
-       } else 
+               (void)printf(" %*lu %*lu %4.0f%% ", mwp->iused, used,
+                   mwp->ifree, (unsigned long)sfsp->f_ffree, inodes == 0 ? 100.0 :
+                   (double)used / (double)inodes * 100.0);
+       } else
                (void)printf("  ");
        (void)printf("  %s\n", sfsp->f_mntonname);
 }
 
+/*
+ * Update the maximum field-width information in `mwp' based on
+ * the filesystem specified by `sfsp'.
+ */
+void
+update_maxwidths(struct maxwidths *mwp, struct statfs *sfsp)
+{
+       static long blocksize;
+       int dummy;
+
+       if (blocksize == 0)
+               getbsize(&dummy, &blocksize);
+
+       mwp->mntfrom = imax(mwp->mntfrom, strlen(sfsp->f_mntfromname));
+       mwp->total = imax(mwp->total, longwidth(fsbtoblk(sfsp->f_blocks,
+           sfsp->f_bsize, blocksize)));
+       mwp->used = imax(mwp->used, longwidth(fsbtoblk(sfsp->f_blocks -
+           sfsp->f_bfree, sfsp->f_bsize, blocksize)));
+       mwp->avail = imax(mwp->avail, longwidth(fsbtoblk(sfsp->f_bavail,
+           sfsp->f_bsize, blocksize)));
+       mwp->iused = imax(mwp->iused, longwidth((unsigned)(sfsp->f_files -
+           sfsp->f_ffree)));
+       mwp->ifree = imax(mwp->ifree, longwidth((unsigned)(sfsp->f_ffree)));
+}
+
+/* Return the width in characters of the specified long. */
+int
+longwidth(long long val)
+{
+       int len;
+
+       len = 0;
+       /* Negative or zero values require one extra digit. */
+       if (val <= 0) {
+               val = -val;
+               len++;
+       }
+       while (val > 0) {
+               len++;
+               val /= 10;
+       }
+
+       return (len);
+}
+
 /*
  * This code constitutes the pre-system call Berkeley df code for extracting
  * information from filesystem superblocks.
  */
-#include <ufs/ufs/dinode.h>
-#include <ufs/ffs/fs.h>
-#include <errno.h>
-#include <fstab.h>
 
 union {
        struct fs iu_fs;
@@ -388,11 +521,11 @@ union {
 int    rfd;
 
 int
-ufs_df(file, sfsp)
-       char *file;
-       struct statfs *sfsp;
+ufs_df(char *file, struct maxwidths *mwp)
 {
-       char *mntpt;
+       struct statfs statfsbuf;
+       struct statfs *sfsp;
+       const char *mntpt;
        static int synced;
 
        if (synced++ == 0)
@@ -400,13 +533,15 @@ ufs_df(file, sfsp)
 
        if ((rfd = open(file, O_RDONLY)) < 0) {
                warn("%s", file);
-               return (-1);
+               return (1);
        }
        if (bread((off_t)SBOFF, &sblock, SBSIZE) == 0) {
                (void)close(rfd);
-               return (-1);
+               return (1);
        }
-       sfsp->f_type = 0;
+       sfsp = &statfsbuf;
+       sfsp->f_type = 1;
+       strcpy(sfsp->f_fstypename, "ufs");
        sfsp->f_flags = 0;
        sfsp->f_bsize = sblock.fs_fsize;
        sfsp->f_iosize = sblock.fs_bsize;
@@ -420,26 +555,23 @@ ufs_df(file, sfsp)
        sfsp->f_fsid.val[1] = 0;
        if ((mntpt = getmntpt(file)) == 0)
                mntpt = "";
-       (void)memmove(&sfsp->f_mntonname[0], mntpt, MNAMELEN);
-       (void)memmove(&sfsp->f_mntfromname[0], file, MNAMELEN);
-       (void)strncpy(sfsp->f_fstypename, MOUNT_FFS, MFSNAMELEN);
+       memmove(&sfsp->f_mntonname[0], mntpt, (size_t)MNAMELEN);
+       memmove(&sfsp->f_mntfromname[0], file, (size_t)MNAMELEN);
+       prtstat(sfsp, mwp);
        (void)close(rfd);
        return (0);
 }
 
 int
-bread(off, buf, cnt)
-       off_t off;
-       void *buf;
-       int cnt;
+bread(off_t off, void *buf, int cnt)
 {
-       int nr;
+       ssize_t nr;
 
        (void)lseek(rfd, off, SEEK_SET);
-       if ((nr = read(rfd, buf, cnt)) != cnt) {
+       if ((nr = read(rfd, buf, (size_t)cnt)) != (ssize_t)cnt) {
                /* Probably a dismounted disk if errno == EIO. */
                if (errno != EIO)
-                       (void)fprintf(stderr, "\ndf: %qd: %s\n",
+                       (void)fprintf(stderr, "\ndf: %lld: %s\n",
                            (long long)off, strerror(nr > 0 ? EIO : errno));
                return (0);
        }
@@ -447,9 +579,84 @@ bread(off, buf, cnt)
 }
 
 void
-usage()
+usage(void)
+{
+
+       (void)fprintf(stderr,
+           "usage: df [-b | -H | -h | -k | -m | -P] [-ailn] [-t type] [file | filesystem ...]\n");
+       exit(EX_USAGE);
+}
+
+char *
+makenetvfslist(void)
 {
-       (void)fprintf(stderr, "usage: df [-ikln] [-t type] [file | file_system ...]\n");
-       exit(1);
-       /* NOTREACHED */
+       char *str, *strptr, **listptr;
+#ifndef __APPLE__
+       int mib[3], maxvfsconf, cnt=0, i;
+       size_t miblen;
+       struct ovfsconf *ptr;
+#else
+       int mib[4], maxvfsconf, cnt=0, i;
+       size_t miblen;
+       struct vfsconf vfc;
+#endif
+
+       mib[0] = CTL_VFS; mib[1] = VFS_GENERIC; mib[2] = VFS_MAXTYPENUM;
+       miblen=sizeof(maxvfsconf);
+       if (sysctl(mib, (unsigned int)(sizeof(mib) / sizeof(mib[0])),
+           &maxvfsconf, &miblen, NULL, 0)) {
+               warnx("sysctl failed");
+               return (NULL);
+       }
+
+       if ((listptr = malloc(sizeof(char*) * maxvfsconf)) == NULL) {
+               warnx("malloc failed");
+               return (NULL);
+       }
+
+#ifndef __APPLE__
+       for (ptr = getvfsent(); ptr; ptr = getvfsent())
+               if (ptr->vfc_flags & VFCF_NETWORK) {
+                       listptr[cnt++] = strdup(ptr->vfc_name);
+                       if (listptr[cnt-1] == NULL) {
+                               warnx("malloc failed");
+                               return (NULL);
+                       }
+               }
+#else
+       miblen = sizeof (struct vfsconf);
+       mib[2] = VFS_CONF;
+        for (i = 0; i < maxvfsconf; i++) {
+               mib[3] = i;
+               if (sysctl(mib, 4, &vfc, &miblen, NULL, 0) == 0) {
+                       if (!(vfc.vfc_flags & MNT_LOCAL)) {
+                               listptr[cnt++] = strdup(vfc.vfc_name);
+                               if (listptr[cnt-1] == NULL) {
+                                       warnx("malloc failed");
+                                       return (NULL);
+                               }
+                       }
+               }
+       }
+#endif
+
+       if (cnt == 0 ||
+           (str = malloc(sizeof(char) * (32 * cnt + cnt + 2))) == NULL) {
+               if (cnt > 0)
+                       warnx("malloc failed");
+               free(listptr);
+               return (NULL);
+       }
+
+       *str = 'n'; *(str + 1) = 'o';
+       for (i = 0, strptr = str + 2; i < cnt; i++, strptr++) {
+               strncpy(strptr, listptr[i], 32);
+               strptr += strlen(listptr[i]);
+               *strptr = ',';
+               free(listptr[i]);
+       }
+       *(--strptr) = NULL;
+
+       free(listptr);
+       return (str);
 }
diff --git a/df/vfslist.c b/df/vfslist.c
new file mode 100644 (file)
index 0000000..c53ffe7
--- /dev/null
@@ -0,0 +1,98 @@
+/*-
+ * Copyright (c) 1995
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)vfslist.c  8.1 (Berkeley) 5/8/95";
+#endif
+static const char rcsid[] =
+  "$FreeBSD: src/sbin/mount/vfslist.c,v 1.4 1999/08/28 00:13:27 peter Exp $";
+#endif /* not lint */
+
+#include <err.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef __APPLE__
+#include "extern.h"
+#endif
+
+static int       skipvfs;
+
+int
+checkvfsname(vfsname, vfslist)
+       const char *vfsname;
+       const char **vfslist;
+{
+
+       if (vfslist == NULL)
+               return (0);
+       while (*vfslist != NULL) {
+               if (strcmp(vfsname, *vfslist) == 0)
+                       return (skipvfs);
+               ++vfslist;
+       }
+       return (!skipvfs);
+}
+
+const char **
+makevfslist(fslist)
+       char *fslist;
+{
+       const char **av;
+       int i;
+       char *nextcp;
+
+       if (fslist == NULL)
+               return (NULL);
+       if (fslist[0] == 'n' && fslist[1] == 'o') {
+               fslist += 2;
+               skipvfs = 1;
+       }
+       for (i = 0, nextcp = fslist; *nextcp; nextcp++)
+               if (*nextcp == ',')
+                       i++;
+       if ((av = malloc((size_t)(i + 2) * sizeof(char *))) == NULL) {
+               warnx("malloc failed");
+               return (NULL);
+       }
+       nextcp = fslist;
+       i = 0;
+       av[i++] = nextcp;
+       while ((nextcp = strchr(nextcp, ',')) != NULL) {
+               *nextcp++ = '\0';
+               av[i++] = nextcp;
+       }
+       av[i++] = NULL;
+       return (av);
+}
diff --git a/du/du.1 b/du/du.1
index 6c5ca9c23ec5c6cb454f0b9b3ec584cadd2f7b59..39fe7bdef0a8f8a6aa85562e0a81fe6abb707bce 100644 (file)
--- a/du/du.1
+++ b/du/du.1
@@ -1,5 +1,3 @@
-.\"    $NetBSD: du.1,v 1.8 1998/02/15 17:08:17 kleink Exp $
-.\"
 .\" Copyright (c) 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -32,8 +30,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)du.1        8.2 (Berkeley) 4/1/94
+.\" $FreeBSD: src/usr.bin/du/du.1,v 1.25 2002/12/12 17:26:00 ru Exp $
 .\"
-.Dd October 4, 1996
+.Dd April 1, 1994
 .Dt DU 1
 .Os
 .Sh NAME
 .Nd display disk usage statistics
 .Sh SYNOPSIS
 .Nm
-.Op Fl H | Fl L | Fl P
-.Op Fl a | Fl s
-.Op Fl ckrx
-.Op Ar file ...
+.Op Fl H | L | P
+.Op Fl I Ar mask
+.Op Fl a | s | d Ar depth
+.Op Fl c
+.Op Fl h | k
+.Op Fl x
+.Op Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -53,74 +55,86 @@ and for each directory in the file hierarchy rooted in each directory
 argument.
 If no file is specified, the block usage of the hierarchy rooted in
 the current directory is displayed.
+If the
+.Fl k
+flag is specified, the number of 1024-byte
+blocks used by the file is displayed, otherwise
+.Xr getbsize 3
+is used to determine the preferred block size.
+Partial numbers of blocks are rounded up.
 .Pp
 The options are as follows:
-.Bl -tag -width Ds
+.Bl -tag -width indent
 .It Fl H
-Symbolic links on the command line are followed.
-(Symbolic links encountered in the tree traversal are not followed.)
+Symbolic links on the command line are followed, symbolic links in file
+hierarchies are not followed.
 .It Fl L
-All symbolic links are followed.
+Symbolic links on the command line and in file hierarchies are followed.
+.It Fl I Ar mask
+Ignore files and directories matching the specified
+.Ar mask .
 .It Fl P
 No symbolic links are followed.
+This is the default.
 .It Fl a
-Display an entry for each file in the file hierarchy.
-.It Fl k
-By default,
-.Nm
-displays the number of blocks as returned by the
-.Xr stat  2
-system call, i.e. 512-byte blocks.
-If the
-.Fl k
-flag is specified, the number displayed is the number of 1024-byte
-blocks.
-Partial numbers of blocks are rounded up.
-.It Fl c
-Display the grand total after all the arguments have been processed.
+Display an entry for each file in a file hierarchy.
+.It Fl h
+"Human-readable" output.  Use unit suffixes: Byte, Kilobyte, Megabyte,
+Gigabyte, Terabyte and Petabyte
 .It Fl r
-Generate warning messages about directories that cannot be read.
-This is the default behaviour.
+Generate messages about directories that cannot be read, files
+that cannot be opened, and so on.  This is the default case.
+This option exists solely for conformance with
+.St -xpg4 .
 .It Fl s
-Display only the grand total for the specified files.
+Display an entry for each specified file.
+(Equivalent to
+.Fl d Li 0 )
+.It Fl d Ar depth
+Display an entry for all files and directories
+.Ar depth
+directories deep.
+.It Fl c
+Display a grand total.
+.It Fl k
+Display block counts in 1024-byte (1-Kbyte) blocks.
 .It Fl x
-Filesystem mount points are not traversed.
+File system mount points are not traversed.
 .El
 .Pp
+The
 .Nm
-counts the storage used by symbolic links and not the files they
+utility counts the storage used by symbolic links and not the files they
 reference unless the
 .Fl H
-or 
-.Fl L 
-option is specified.  
+or
+.Fl L
+option is specified.
 If either the
 .Fl H
 or
 .Fl L
 options are specified, storage used by any symbolic links which are
 followed is not counted or displayed.
-The
-.Fl H ,
-.Fl L
-and
-.Fl P
-options override each other and the command's actions are determined
-by the last one specified.
 .Pp
 Files having multiple hard links are counted (and displayed) a single
 time per
 .Nm
 execution.
-.Sh ENVIRONMENT VARIABLES
+.Sh ENVIRONMENT
 .Bl -tag -width BLOCKSIZE
 .It Ev BLOCKSIZE
 If the environment variable
 .Ev BLOCKSIZE
-is set, and the 
+is set, and the
 .Fl k
 option is not specified, the block counts will be displayed in units of that
 size block.
+If
+.Ev BLOCKSIZE
+is not set, and the
+.Fl k
+option is not specified, the block counts will be displayed in 512-byte blocks.
 .El
 .Sh SEE ALSO
 .Xr df 1 ,
@@ -131,4 +145,4 @@ size block.
 A
 .Nm
 command appeared in
-.At v6 .
+.At v1 .
diff --git a/du/du.c b/du/du.c
index 3d6914f59c1f826f7c4b9085ab33e74ba6d01735..813ac737e84cb6c15a3f15ee75d1d33c59c1f255 100644 (file)
--- a/du/du.c
+++ b/du/du.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: du.c,v 1.14 1998/02/15 17:08:18 kleink Exp $   */
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static const char copyright[] =
+"@(#) Copyright (c) 1989, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
-static char sccsid[] = "@(#)du.c       8.5 (Berkeley) 5/4/95";
-#else
-__RCSID("$NetBSD: du.c,v 1.14 1998/02/15 17:08:18 kleink Exp $");
+static const char sccsid[] = "@(#)du.c 8.5 (Berkeley) 5/4/95";
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/usr.bin/du/du.c,v 1.28 2002/12/30 18:13:07 mike Exp $");
 
-#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/queue.h>
 #include <sys/stat.h>
 
-#include <dirent.h>
 #include <err.h>
 #include <errno.h>
+#include <fnmatch.h>
 #include <fts.h>
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
 
-int    linkchk __P((FTSENT *));
-int    main __P((int, char **));
-void   usage __P((void));
+#define        KILO_SZ(n) (n)
+#define        MEGA_SZ(n) ((n) * (n))
+#define        GIGA_SZ(n) ((n) * (n) * (n))
+#define        TERA_SZ(n) ((n) * (n) * (n) * (n))
+#define        PETA_SZ(n) ((n) * (n) * (n) * (n) * (n))
+
+#define        KILO_2_SZ (KILO_SZ(1024ULL))
+#define        MEGA_2_SZ (MEGA_SZ(1024ULL))
+#define        GIGA_2_SZ (GIGA_SZ(1024ULL))
+#define        TERA_2_SZ (TERA_SZ(1024ULL))
+#define        PETA_2_SZ (PETA_SZ(1024ULL))
+
+#define        KILO_SI_SZ (KILO_SZ(1000ULL))
+#define        MEGA_SI_SZ (MEGA_SZ(1000ULL))
+#define        GIGA_SI_SZ (GIGA_SZ(1000ULL))
+#define        TERA_SI_SZ (TERA_SZ(1000ULL))
+#define        PETA_SI_SZ (PETA_SZ(1000ULL))
+
+#define TWO_TB  (2LL * 1024LL * 1024LL * 1024LL * 1024LL)
+
+unsigned long long vals_si [] = {1, KILO_SI_SZ, MEGA_SI_SZ, GIGA_SI_SZ, TERA_SI_SZ, PETA_SI_SZ};
+unsigned long long vals_base2[] = {1, KILO_2_SZ, MEGA_2_SZ, GIGA_2_SZ, TERA_2_SZ, PETA_2_SZ};
+unsigned long long *valp;
+
+typedef enum { NONE, KILO, MEGA, GIGA, TERA, PETA, UNIT_MAX } unit_t;
+
+int unitp [] = { NONE, KILO, MEGA, GIGA, TERA, PETA };
+
+SLIST_HEAD(ignhead, ignentry) ignores;
+struct ignentry {
+       char                    *mask;
+       SLIST_ENTRY(ignentry)   next;
+};
+
+int            linkchk(FTSENT *);
+static void    usage(void);
+void           prthumanval(double);
+unit_t         unit_adjust(double *);
+void           ignoreadd(const char *);
+void           ignoreclean(void);
+int            ignorep(FTSENT *);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
-       FTS *fts;
-       FTSENT *p;
-       long blocksize, totalblocks;
-       int ftsoptions, listdirs, listfiles;
-       int Hflag, Lflag, Pflag, aflag, ch, cflag, kflag, notused, rval, sflag;
-       char **save;
+       FTS             *fts;
+       FTSENT          *p;
+       long            blocksize;
+       int             ftsoptions;
+       int             listall;
+       int             depth;
+       int             Hflag, Lflag, Pflag, aflag, sflag, dflag, cflag, hflag, ch, notused, rval;
+       char            **save;
+       static char     dot[] = ".";
+       off_t           *ftsnum, *ftsparnum, savednumber = 0;
 
+       Hflag = Lflag = Pflag = aflag = sflag = dflag = cflag = hflag = 0;
+       
        save = argv;
-       Hflag = Lflag = Pflag = aflag = cflag = kflag = sflag = 0;
-       totalblocks = 0;
-       ftsoptions = FTS_PHYSICAL;
-       while ((ch = getopt(argc, argv, "HLPackrsx")) != -1)
+       ftsoptions = 0;
+       depth = INT_MAX;
+       SLIST_INIT(&ignores);
+       
+       while ((ch = getopt(argc, argv, "HI:LPasd:chkrx")) != -1)
                switch (ch) {
-               case 'H':
-                       Hflag = 1;
-                       Lflag = Pflag = 0;
-                       break;
-               case 'L':
-                       Lflag = 1;
-                       Hflag = Pflag = 0;
-                       break;
-               case 'P':
-                       Pflag = 1;
-                       Hflag = Lflag = 0;
-                       break;
-               case 'a':
-                       aflag = 1;
-                       break;
-               case 'c':
-                       cflag = 1;
-                       break;
-               case 'k':
-                       blocksize = 1024;
-                       kflag = 1;
-                       break;
-               case 'r':
-                       break;
-               case 's':
-                       sflag = 1;
-                       break;
-               case 'x':
-                       ftsoptions |= FTS_XDEV;
-                       break;
-               case '?':
-               default:
-                       usage();
+                       case 'H':
+                               Hflag = 1;
+                               break;
+                       case 'I':
+                               ignoreadd(optarg);
+                               break;
+                       case 'L':
+                               if (Pflag)
+                                       usage();
+                               Lflag = 1;
+                               break;
+                       case 'P':
+                               if (Lflag)
+                                       usage();
+                               Pflag = 1;
+                               break;
+                       case 'a':
+                               aflag = 1;
+                               break;
+                       case 's':
+                               sflag = 1;
+                               break;
+                       case 'd':
+                               dflag = 1;
+                               errno = 0;
+                               depth = atoi(optarg);
+                               if (errno == ERANGE || depth < 0) {
+                                       warnx("invalid argument to option d: %s", optarg);
+                                       usage();
+                               }
+                               break;
+                       case 'c':
+                               cflag = 1;
+                               break;
+                       case 'h':
+                               putenv("BLOCKSIZE=512");
+                               hflag = 1;
+                               valp = vals_base2;
+                               break;
+                       case 'k':
+                               if (!hflag)
+                                       putenv("BLOCKSIZE=1024");
+                               break;
+                       case 'r':                /* Compatibility. */
+                               break;
+                       case 'x':
+                               ftsoptions |= FTS_XDEV;
+                               break;
+                       case '?':
+                       default:
+                               usage();
                }
+
        argc -= optind;
        argv += optind;
 
@@ -133,95 +196,150 @@ main(argc, argv)
         * very nasty, very fast.  The bottom line is that it's documented in
         * the man page, so it's a feature.
         */
+
+       if (Hflag + Lflag + Pflag > 1)
+               usage();
+
+       if (Hflag + Lflag + Pflag == 0)
+               Pflag = 1;                      /* -P (physical) is default */
+
        if (Hflag)
                ftsoptions |= FTS_COMFOLLOW;
-       if (Lflag) {
-               ftsoptions &= ~FTS_PHYSICAL;
+
+       if (Lflag)
                ftsoptions |= FTS_LOGICAL;
-       }
+
+       if (Pflag)
+               ftsoptions |= FTS_PHYSICAL;
+
+       listall = 0;
 
        if (aflag) {
-               if (sflag)
+               if (sflag || dflag)
+                       usage();
+               listall = 1;
+       } else if (sflag) {
+               if (dflag)
                        usage();
-               listdirs = listfiles = 1;
-       } else if (sflag)
-               listdirs = listfiles = 0;
-       else {
-               listfiles = 0;
-               listdirs = 1;
+               depth = 0;
        }
 
        if (!*argv) {
                argv = save;
-               argv[0] = ".";
+               argv[0] = dot;
                argv[1] = NULL;
        }
 
-       if (!kflag)
-               (void)getbsize(&notused, &blocksize);
+       (void) getbsize(&notused, &blocksize);
        blocksize /= 512;
 
+       rval = 0;
+       
        if ((fts = fts_open(argv, ftsoptions, NULL)) == NULL)
-               err(1, "fts_open `%s'", *argv);
+               err(1, "fts_open");
 
-       for (rval = 0; (p = fts_read(fts)) != NULL;)
+       while ((p = fts_read(fts)) != NULL) {
                switch (p->fts_info) {
-               case FTS_D:                     /* Ignore. */
-                       break;
-               case FTS_DP:
-                       p->fts_parent->fts_number += 
-                           p->fts_number += p->fts_statp->st_blocks;
-                       if (cflag)
-                               totalblocks += p->fts_statp->st_blocks;
-                       /*
-                        * If listing each directory, or not listing files
-                        * or directories and this is post-order of the
-                        * root of a traversal, display the total.
-                        */
-                       if (listdirs || (!listfiles && !p->fts_level))
-                               (void)printf("%ld\t%s\n",
-                                   howmany(p->fts_number, blocksize),
-                                   p->fts_path);
-                       break;
-               case FTS_DC:                    /* Ignore. */
-                       break;
-               case FTS_DNR:                   /* Warn, continue. */
-               case FTS_ERR:
-               case FTS_NS:
-                       warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
-                       rval = 1;
-                       break;
-               default:
-                       if (p->fts_statp->st_nlink > 1 && linkchk(p))
-                               break;
-                       /*
-                        * If listing each file, or a non-directory file was
-                        * the root of a traversal, display the total.
-                        */
-                       if (listfiles || !p->fts_level)
-                               (void)printf("%qd\t%s\n", (long long)
-                                   howmany(p->fts_statp->st_blocks, blocksize),
-                                   p->fts_path);
-                       p->fts_parent->fts_number += p->fts_statp->st_blocks;
-                       if (cflag)
-                               totalblocks += p->fts_statp->st_blocks;
+                       case FTS_D:                     /* Ignore. */
+                               if (ignorep(p))
+                                       fts_set(fts, p, FTS_SKIP);
+                               break;
+                       case FTS_DP:
+                               if (ignorep(p))
+                                       break;
+
+                               ftsparnum = (off_t *)&p->fts_parent->fts_number;
+                               ftsnum = (off_t *)&p->fts_number;
+                               if (p->fts_statp->st_size < TWO_TB) {
+                                   ftsparnum[0] += ftsnum[0] += p->fts_statp->st_blocks;
+                               } else {
+                                   ftsparnum[0] += ftsnum[0] += howmany(p->fts_statp->st_size, 512LL);
+                               }
+                               
+                               if (p->fts_level <= depth) {
+                                       if (hflag) {
+                                               (void) prthumanval(howmany(*ftsnum, blocksize));
+                                               (void) printf("\t%s\n", p->fts_path);
+                                       } else {
+                                       (void) printf("%lld\t%s\n",
+                                           howmany(*ftsnum, blocksize),
+                                           p->fts_path);
+                                       }
+                               }
+                               break;
+                       case FTS_DC:                    /* Ignore. */
+                               break;
+                       case FTS_DNR:                   /* Warn, continue. */
+                       case FTS_ERR:
+                       case FTS_NS:
+                               warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
+                               rval = 1;
+                               break;
+                       default:
+                               if (ignorep(p))
+                                       break;
+
+                               if (p->fts_statp->st_nlink > 1 && linkchk(p))
+                                       break;
+                               
+                               if (listall || p->fts_level == 0) {
+                                       if (hflag) {
+                                           if (p->fts_statp->st_size < TWO_TB) {
+                                               (void) prthumanval(howmany(p->fts_statp->st_blocks,
+                                                       blocksize));
+                                           } else {
+                                               (void) prthumanval(howmany(howmany(p->fts_statp->st_size, 512LL),
+                                                       blocksize));
+                                           }
+                                               (void) printf("\t%s\n", p->fts_path);
+                                       } else {
+                                           if (p->fts_statp->st_size < TWO_TB) {
+                                               (void) printf("%qd\t%s\n",
+                                                       (long long)howmany(p->fts_statp->st_blocks, blocksize),
+                                                       p->fts_path);
+                                           } else {
+                                               (void) printf("%qd\t%s\n",
+                                                       (long long)howmany(howmany(p->fts_statp->st_size, 512LL), blocksize),
+                                                       p->fts_path);
+                                           }
+                                       }
+                               }
+
+                               ftsparnum = (off_t *)&p->fts_parent->fts_number;
+                               if (p->fts_statp->st_size < TWO_TB) {
+                                   ftsparnum[0] += p->fts_statp->st_blocks;
+                               } else {
+                                   ftsparnum[0] += p->fts_statp->st_size / 512LL;
+                               }
                }
+               savednumber = ((off_t *)&p->fts_parent->fts_number)[0];
+       }
+
        if (errno)
                err(1, "fts_read");
-       if (cflag)
-               (void)printf("%ld\ttotal\n",
-                   howmany(totalblocks, blocksize));
-       exit(0);
+
+       if (cflag) {
+               if (hflag) {
+                       (void) prthumanval(howmany(savednumber, blocksize));
+                       (void) printf("\ttotal\n");
+               } else {
+                       (void) printf("%lld\ttotal\n", howmany(savednumber, blocksize));
+               }
+       }
+
+       ignoreclean();
+       exit(rval);
 }
 
+
 typedef struct _ID {
        dev_t   dev;
        ino_t   inode;
 } ID;
 
+
 int
-linkchk(p)
-       FTSENT *p;
+linkchk(FTSENT *p)
 {
        static ID *files;
        static int maxfiles, nfiles;
@@ -238,18 +356,98 @@ linkchk(p)
 
        if (nfiles == maxfiles && (files = realloc((char *)files,
            (u_int)(sizeof(ID) * (maxfiles += 128)))) == NULL)
-               err(1, "realloc");
+               errx(1, "can't allocate memory");
        files[nfiles].inode = ino;
        files[nfiles].dev = dev;
        ++nfiles;
        return (0);
 }
 
+/*
+ * Output in "human-readable" format.  Uses 3 digits max and puts
+ * unit suffixes at the end.  Makes output compact and easy to read,
+ * especially on huge disks.
+ *
+ */
+unit_t
+unit_adjust(double *val)
+{
+       double abval;
+       unit_t unit;
+       unsigned int unit_sz;
+
+       abval = fabs(*val);
+
+       unit_sz = abval ? ilogb(abval) / 10 : 0;
+
+       if (unit_sz >= UNIT_MAX) {
+               unit = NONE;
+       } else {
+               unit = unitp[unit_sz];
+               *val /= (double)valp[unit_sz];
+       }
+
+       return (unit);
+}
+
 void
-usage()
+prthumanval(double bytes)
 {
+       unit_t unit;
 
+       bytes *= 512;
+       unit = unit_adjust(&bytes);
+
+       if (bytes == 0)
+               (void)printf("  0B");
+       else if (bytes > 10)
+               (void)printf("%3.0f%c", bytes, "BKMGTPE"[unit]);
+       else
+               (void)printf("%3.1f%c", bytes, "BKMGTPE"[unit]);
+}
+
+static void
+usage(void)
+{
        (void)fprintf(stderr,
-               "usage: du [-H | -L | -P] [-a | -s] [-ckx] [file ...]\n");
-       exit(1);
+               "usage: du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k] [-x] [-I mask] [file ...]\n");
+       exit(EX_USAGE);
+}
+
+void
+ignoreadd(const char *mask)
+{
+       struct ignentry *ign;
+
+       ign = calloc(1, sizeof(*ign));
+       if (ign == NULL)
+               errx(1, "cannot allocate memory");
+       ign->mask = strdup(mask);
+       if (ign->mask == NULL)
+               errx(1, "cannot allocate memory");
+       SLIST_INSERT_HEAD(&ignores, ign, next);
+}
+
+void
+ignoreclean(void)
+{
+       struct ignentry *ign;
+       
+       while (!SLIST_EMPTY(&ignores)) {
+               ign = SLIST_FIRST(&ignores);
+               SLIST_REMOVE_HEAD(&ignores, next);
+               free(ign->mask);
+               free(ign);
+       }
+}
+
+int
+ignorep(FTSENT *ent)
+{
+       struct ignentry *ign;
+
+       SLIST_FOREACH(ign, &ignores, next)
+               if (fnmatch(ign->mask, ent->fts_name, 0) != FNM_NOMATCH)
+                       return 1;
+       return 0;
 }
diff --git a/file/LEGAL.NOTICE b/file/LEGAL.NOTICE
deleted file mode 100644 (file)
index c3cf57f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-$NetBSD: LEGAL.NOTICE,v 1.7 1998/09/24 12:50:27 christos Exp $
-Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995.
-Software written by Ian F. Darwin and others;
-maintained 1994-1995 Christos Zoulas.
-
-This software is not subject to any export provision of the United States
-Department of Commerce, and may be exported to any country or planet.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice immediately at the beginning of the file, without modification,
-   this list of conditions, and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-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.
-
diff --git a/file/MAINT b/file/MAINT
deleted file mode 100644 (file)
index 6b9bf2e..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-$NetBSD: MAINT,v 1.4 1998/09/20 15:27:15 christos Exp $
-Id: MAINT,v 1.3 1997/11/05 16:03:18 christos Exp 
-
-Maintenance notes:
-
-I am continuing to maintain the file command. I welcome your help,
-but to make my life easier I'd like to request the following:
-
-- Don't change the version numbers!
-
-If your changes are extensive, I will have to work hard to 
-integrate them into my version.  If you check it into SCCS locally,
-the version numbers will likely be kept. IF you check it into RCS
-or CVS locally, please use -k to keep the version numbers, and
-please use branch deltas (1.21.1, 1.21.2, ...).  If you don't do
-this, I will likely be unable to use your changes; life's just too
-short.
-
-- Do not distribute changed versions.
-
-People trying to be helpful occasionally put up their hacked versions
-of the file command for FTP, then the "archie" server finds and publishes
-the hacked version, and people all over the world get copies of it.
-Within a day or two I am getting email from around the world
-asking me why "my" file command won't compile!!! Needless to say this
-detracts from the limited time I have available to work on the actual
-software.  Therefore I ask you again to please NOT distribute
-your changed version.
-
-
-Thank you for your assistance and cooperation.
-
-Mark Moraes            Christos Zoulas
-moraes@deshaw.com      christos@astron.com
diff --git a/file/Makefile b/file/Makefile
deleted file mode 100644 (file)
index 9c4b273..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-#
-# Generated by the NeXT Project Builder.
-#
-# NOTE: Do NOT change this file -- Project Builder maintains it.
-#
-# Put all of your customizations in files called Makefile.preamble
-# and Makefile.postamble (both optional), and Makefile will include them.
-#
-
-NAME = file
-
-PROJECTVERSION = 2.6
-PROJECT_TYPE = Tool
-LANGUAGE = English
-
-HFILES = file.h names.h patchlevel.h readelf.h tar.h
-
-CFILES = apprentice.c ascmagic.c compress.c file.c fsmagic.c\
-         internat.c is_tar.c print.c readelf.c softmagic.c readfat.c
-
-OTHERSRCS = Makefile Makefile.preamble Makefile.postamble file.1\
-            LEGAL.NOTICE magic.5 MAINT PORTING README \
-magdir/386bsd \
-magdir/Header \
-magdir/Localstuff \
-magdir/OpenBSD \
-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/microsoft \
-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 
-
-MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
-CODE_GEN_STYLE = DYNAMIC
-MAKEFILE = tool.make
-NEXTSTEP_INSTALLDIR = /usr/bin
-LIBS = 
-DEBUG_LIBS = $(LIBS)
-PROF_LIBS = $(LIBS)
-
-
-
-
-NEXTSTEP_BUILD_OUTPUT_DIR = /tmp/developer_cmds/Build
-
-include $(MAKEFILEDIR)/platform.make
-
--include Makefile.preamble
-
-include $(MAKEFILEDIR)/$(MAKEFILE)
-
--include Makefile.postamble
-
--include Makefile.dependencies
diff --git a/file/Makefile.postamble b/file/Makefile.postamble
deleted file mode 100644 (file)
index 425fb45..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-include $(CoreOSMakefiles)/ProjectBuilder/Makefile.Postamble.Common
-
-MAGFILES = $(SRCROOT)/file/magdir/Header \
-           $(SRCROOT)/file/magdir/Localstuff \
-           $(SRCROOT)/file/magdir/OpenBSD \
-           $(SRCROOT)/file/magdir/[a-z]*
-after_install:
-       mkdir -p $(DSTROOT)/private/etc/
-       cat $(MAGFILES) > $(DSTROOT)/private/etc/magic
diff --git a/file/Makefile.preamble b/file/Makefile.preamble
deleted file mode 100644 (file)
index 826bcb1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-include $(CoreOSMakefiles)/ProjectBuilder/Makefile.Preamble.Common
-OTHER_CFLAGS = -DBUILTIN_FAT
diff --git a/file/PB.project b/file/PB.project
deleted file mode 100644 (file)
index 1cdae9f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-    DYNAMIC_CODE_GEN = YES; 
-    FILESTABLE = {
-        FRAMEWORKS = (); 
-        H_FILES = (file.h, names.h, patchlevel.h, readelf.h, tar.h); 
-        OTHER_LINKED = (
-            apprentice.c, 
-            ascmagic.c, 
-            compress.c, 
-            file.c, 
-            fsmagic.c, 
-            internat.c, 
-            is_tar.c, 
-            print.c, 
-            readelf.c, 
-            softmagic.c
-        ); 
-        OTHER_SOURCES = (
-            Makefile, 
-            Makefile.preamble, 
-            Makefile.postamble, 
-            file.1, 
-            LEGAL.NOTICE, 
-            magic.5, 
-            MAINT, 
-            PORTING, 
-            README
-        ); 
-    }; 
-    LANGUAGE = English; 
-    LOCALIZABLE_FILES = {}; 
-    MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; 
-    NEXTSTEP_BUILDDIR = /tmp/developer_cmds/Build; 
-    NEXTSTEP_BUILDTOOL = /bin/gnumake; 
-    NEXTSTEP_INSTALLDIR = /usr/bin; 
-    PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; 
-    PROJECTNAME = file; 
-    PROJECTTYPE = Tool; 
-    PROJECTVERSION = 2.6; 
-    WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; 
-}
diff --git a/file/PORTING b/file/PORTING
deleted file mode 100644 (file)
index b873e3c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-$NetBSD: PORTING,v 1.5 1998/09/20 15:27:15 christos Exp $
-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)
diff --git a/file/README b/file/README
deleted file mode 100644 (file)
index 834cd68..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-$NetBSD: README,v 1.6 1998/09/20 15:27:15 christos Exp $
-** README for file(1) Command **
-@(#) Id: README,v 1.22 1997/11/05 16:03:18 christos Exp 
-
-This is Release 3.x of Ian Darwin's (copyright but distributable)
-file(1) command. This version is the standard "file" command for Linux,
-*BSD, and other systems. (See "patchlevel.h" for the exact release number).
-
-UNIX is a trademark of UNIX System Laboratories.
-
-The prime contributor to Release 3.8 was Guy Harris, who put in megachanges
-including byte-order independance.
-
-The prime contributor to Release 3.0 was Christos Zoulas, who put
-in hundreds of lines of source code changes, including his own
-ANSIfication of the code (I liked my own ANSIfication better, but
-his (__P()) is the "Berkeley standard" way of doing it, and I wanted UCB
-to include the code...), his HP-like "indirection" (a feature of
-the HP file command, I think), and his mods that finally got the
-uncompress (-z) mode finished and working.
-
-This release has compiled in numerous environments; see PORTING
-for a list and problems.
-
-This fine freeware file(1) follows the USG (System V) model of the file
-command, rather than the Research (V7) version or the V7-derived 4.[23]
-Berkeley one. That is, the file /etc/magic contains much of the ritual
-information that is the source of this program's power. My version
-knows a little more magic (including tar archives) than System V; the
-/etc/magic parsing seems to be compatible with the (poorly documented)
-System V /etc/magic format (with one exception; see the man page).
-
-In addition, the /etc/magic file is built from a subdirectory
-for easier(?) maintenance.  I will act as a clearinghouse for
-magic numbers assigned to all sorts of data files that
-are in reasonable circulation. Send your magic numbers,
-in magic(4) format please, to the maintainer, Christos Zoulas.
-
-LEGAL.NOTICE - read this first.
-README - read this second (you are currently reading this file).
-PORTING - read this only if the program won't compile.
-Makefile - read this next, adapt it as needed (particularly
-       the location of the old existing file command and
-       the man page layouts), type "make" to compile, 
-       "make try" to try it out against your old version.
-       Expect some diffs, particularly since your original
-       file(1) may not grok the imbedded-space ("\ ") in
-       the current magic file, or may even not use the
-       magic file.
-apprentice.c - parses /etc/magic to learn magic
-ascmagic.c - third & last set of tests, based on hardwired assumptions.
-core - not included in distribution due to mailer limitations.
-debug.c - includes -c printout routine
-file.1 - man page for the command
-magic.4 - man page for the magic file, courtesy Guy Harris.
-       Install as magic.4 on USG and magic.5 on V7 or Berkeley; cf Makefile.
-file.c - main program
-file.h - header file
-fsmagic.c - first set of tests the program runs, based on filesystem info
-is_tar.c, tar.h - knows about tarchives (courtesy John Gilmore).
-magdir - directory of /etc/magic pieces
-       magdir/Makefile - ADJUST THIS FOR YOUR CONFIGURATION
-names.h - header file for ascmagic.c
-softmagic.c - 2nd set of tests, based on /etc/magic
-readelf.[ch] - Standalone elf parsing code.
-compress.c - on-the-fly decompression.
-internat.c - recognize international `text' files.
-print.c - print results, errors, warnings.
-
-If your gzip sometimes fails to decompress things complaining about a short
-file, apply this patch [which is going to be in the next version of gzip]:
-*** -   Tue Oct 29 02:06:35 1996
---- util.c      Sun Jul 21 21:51:38 1996
-*** 106,111 ****
---- 108,114 ----
-  
-      if (insize == 0) {
-        if (eof_ok) return EOF;
-+       flush_window();
-        read_error();
-      }
-      bytes_in += (ulg)insize;
-
-E-mail: christos@astron.com, moraes@deshaw.com
-
-Phone: Do not even think of telephoning me about this program. Send cash first!
-
-Parts of this software were developed at SoftQuad Inc., 56 Aberfoyle
-Cres, # 810, Toronto, Ontario CANADA M8X 2W4.  Phone: 416-239-4801 or
-800-387-2777. Email: mail@sq.com.  Call for information on SGML editing
-and browsing, Unix text processing, and customised products on Unix,
-DOS and Mac.
diff --git a/file/apprentice.c b/file/apprentice.c
deleted file mode 100644 (file)
index 435a3d8..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: apprentice.c,v 1.4 1997/02/09 23:58:16 millert Exp $  */
-
-/*
- * apprentice - make one pass through /etc/magic, learning its secrets.
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include "file.h"
-
-#ifndef        lint
-#if 0
-static char *moduleid = "$OpenBSD: apprentice.c,v 1.4 1997/02/09 23:58:16 millert Exp $";
-#endif
-#endif /* lint */
-
-#define        EATAB {while (isascii((unsigned char) *l) && \
-                     isspace((unsigned char) *l))  ++l;}
-#define LOWCASE(l) (isupper((unsigned char) (l)) ? \
-                       tolower((unsigned char) (l)) : (l))
-
-
-static int getvalue    __P((struct magic *, char **));
-static int hextoint    __P((int));
-static char *getstr    __P((char *, char *, int, int *));
-static int parse       __P((char *, int *, int));
-static void eatsize    __P((char **));
-
-static int maxmagic = 0;
-
-static int apprentice_1        __P((char *, int));
-
-int
-apprentice(fn, check)
-char *fn;                      /* list of magic files */
-int check;                     /* non-zero? checking-only run. */
-{
-       char *p, *mfn;
-       int file_err, errs = -1;
-
-        maxmagic = MAXMAGIS;
-       magic = (struct magic *) calloc(sizeof(struct magic), maxmagic);
-       mfn = malloc(strlen(fn)+1);
-       if (magic == NULL || mfn == NULL) {
-               (void) fprintf(stderr, "%s: Out of memory.\n", progname);
-               if (check)
-                       return -1;
-               else
-                       exit(1);
-       }
-       fn = strcpy(mfn, fn);
-  
-       while (fn) {
-               p = strchr(fn, ':');
-               if (p)
-                       *p++ = '\0';
-               file_err = apprentice_1(fn, check);
-               if (file_err > errs)
-                       errs = file_err;
-               fn = p;
-       }
-       if (errs == -1)
-               (void) fprintf(stderr, "%s: couldn't find any magic files!\n",
-                              progname);
-       if (!check && errs)
-               exit(1);
-
-       free(mfn);
-       return errs;
-}
-
-static int
-apprentice_1(fn, check)
-char *fn;                      /* name of magic file */
-int check;                     /* non-zero? checking-only run. */
-{
-       static const char hdr[] =
-               "cont\toffset\ttype\topcode\tmask\tvalue\tdesc";
-       FILE *f;
-       char line[BUFSIZ+1];
-       int errs = 0;
-
-       f = fopen(fn, "r");
-       if (f==NULL) {
-               if (errno != ENOENT)
-                       (void) fprintf(stderr,
-                       "%s: can't read magic file %s (%s)\n", 
-                       progname, fn, strerror(errno));
-               return -1;
-       }
-
-       /* parse it */
-       if (check)      /* print silly verbose header for USG compat. */
-               (void) printf("%s\n", hdr);
-
-       for (lineno = 1;fgets(line, BUFSIZ, f) != NULL; lineno++) {
-               if (line[0]=='#')       /* comment, do not parse */
-                       continue;
-               if (strlen(line) <= (unsigned)1) /* null line, garbage, etc */
-                       continue;
-               line[strlen(line)-1] = '\0'; /* delete newline */
-               if (parse(line, &nmagic, check) != 0)
-                       errs = 1;
-       }
-
-       (void) fclose(f);
-       return errs;
-}
-
-/*
- * extend the sign bit if the comparison is to be signed
- */
-uint32
-signextend(m, v)
-struct magic *m;
-uint32 v;
-{
-       if (!(m->flag & UNSIGNED))
-               switch(m->type) {
-               /*
-                * Do not remove the casts below.  They are
-                * vital.  When later compared with the data,
-                * the sign extension must have happened.
-                */
-               case BYTE:
-                       v = (char) v;
-                       break;
-               case SHORT:
-               case BESHORT:
-               case LESHORT:
-                       v = (short) v;
-                       break;
-               case DATE:
-               case BEDATE:
-               case LEDATE:
-               case LONG:
-               case BELONG:
-               case LELONG:
-                       v = (int32) v;
-                       break;
-               case STRING:
-                       break;
-               default:
-                       magwarn("can't happen: m->type=%d\n",
-                               m->type);
-                       return -1;
-               }
-       return v;
-}
-
-/*
- * parse one line from magic file, put into magic[index++] if valid
- */
-static int
-parse(l, ndx, check)
-char *l;
-int *ndx, check;
-{
-       int i = 0, nd = *ndx;
-       struct magic *m;
-       char *t, *s;
-
-#define ALLOC_INCR     20
-       if (nd+1 >= maxmagic){
-           maxmagic += ALLOC_INCR;
-           if ((magic = (struct magic *) realloc(magic, 
-                                                 sizeof(struct magic) * 
-                                                 maxmagic)) == NULL) {
-               (void) fprintf(stderr, "%s: Out of memory.\n", progname);
-               if (check)
-                       return -1;
-               else
-                       exit(1);
-           }
-           memset(&magic[*ndx], 0, sizeof(struct magic) * ALLOC_INCR);
-       }
-       m = &magic[*ndx];
-       m->flag = 0;
-       m->cont_level = 0;
-
-       while (*l == '>') {
-               ++l;            /* step over */
-               m->cont_level++; 
-       }
-
-       if (m->cont_level != 0 && *l == '(') {
-               ++l;            /* step over */
-               m->flag |= INDIR;
-       }
-       if (m->cont_level != 0 && *l == '&') {
-                ++l;            /* step over */
-                m->flag |= ADD;
-        }
-
-       /* get offset, then skip over it */
-       m->offset = (int) strtoul(l,&t,0);
-        if (l == t)
-               magwarn("offset %s invalid", l);
-        l = t;
-
-       if (m->flag & INDIR) {
-               m->in.type = LONG;
-               m->in.offset = 0;
-               /*
-                * read [.lbs][+-]nnnnn)
-                */
-               if (*l == '.') {
-                       l++;
-                       switch (LOWCASE(*l)) {
-                       case 'l':
-                               m->in.type = LONG;
-                               break;
-                       case 'h':
-                       case 's':
-                               m->in.type = SHORT;
-                               break;
-                       case 'c':
-                       case 'b':
-                               m->in.type = BYTE;
-                               break;
-                       default:
-                               magwarn("indirect offset type %c invalid", *l);
-                               break;
-                       }
-                       l++;
-               }
-               s = l;
-               if (*l == '+' || *l == '-') l++;
-               if (isdigit((unsigned char)*l)) {
-                       m->in.offset = strtoul(l, &t, 0);
-                       if (*s == '-') m->in.offset = - m->in.offset;
-               }
-               else
-                       t = l;
-               if (*t++ != ')') 
-                       magwarn("missing ')' in indirect offset");
-               l = t;
-       }
-
-
-       while (isascii((unsigned char)*l) && isdigit((unsigned char)*l))
-               ++l;
-       EATAB;
-
-#define NBYTE          4
-#define NSHORT         5
-#define NLONG          4
-#define NSTRING        6
-#define NDATE          4
-#define NBESHORT       7
-#define NBELONG                6
-#define NBEDATE                6
-#define NLESHORT       7
-#define NLELONG                6
-#define NLEDATE                6
-
-       if (*l == 'u') {
-               ++l;
-               m->flag |= UNSIGNED;
-       }
-
-       /* get type, skip it */
-       if (strncmp(l, "byte", NBYTE)==0) {
-               m->type = BYTE;
-               l += NBYTE;
-       } else if (strncmp(l, "short", NSHORT)==0) {
-               m->type = SHORT;
-               l += NSHORT;
-       } else if (strncmp(l, "long", NLONG)==0) {
-               m->type = LONG;
-               l += NLONG;
-       } else if (strncmp(l, "string", NSTRING)==0) {
-               m->type = STRING;
-               l += NSTRING;
-       } else if (strncmp(l, "date", NDATE)==0) {
-               m->type = DATE;
-               l += NDATE;
-       } else if (strncmp(l, "beshort", NBESHORT)==0) {
-               m->type = BESHORT;
-               l += NBESHORT;
-       } else if (strncmp(l, "belong", NBELONG)==0) {
-               m->type = BELONG;
-               l += NBELONG;
-       } else if (strncmp(l, "bedate", NBEDATE)==0) {
-               m->type = BEDATE;
-               l += NBEDATE;
-       } else if (strncmp(l, "leshort", NLESHORT)==0) {
-               m->type = LESHORT;
-               l += NLESHORT;
-       } else if (strncmp(l, "lelong", NLELONG)==0) {
-               m->type = LELONG;
-               l += NLELONG;
-       } else if (strncmp(l, "ledate", NLEDATE)==0) {
-               m->type = LEDATE;
-               l += NLEDATE;
-       } else {
-               magwarn("type %s invalid", l);
-               return -1;
-       }
-       /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
-       if (*l == '&') {
-               ++l;
-               m->mask = signextend(m, strtoul(l, &l, 0));
-               eatsize(&l);
-       } else
-               m->mask = ~0L;
-       EATAB;
-  
-       switch (*l) {
-       case '>':
-       case '<':
-       /* Old-style anding: "0 byte &0x80 dynamically linked" */
-       case '&':
-       case '^':
-       case '=':
-               m->reln = *l;
-               ++l;
-               break;
-       case '!':
-               if (m->type != STRING) {
-                       m->reln = *l;
-                       ++l;
-                       break;
-               }
-               /* FALL THROUGH */
-       default:
-               if (*l == 'x' && isascii((unsigned char)l[1]) && 
-                   isspace((unsigned char)l[1])) {
-                       m->reln = *l;
-                       ++l;
-                       goto GetDesc;   /* Bill The Cat */
-               }
-               m->reln = '=';
-               break;
-       }
-       EATAB;
-  
-       if (getvalue(m, &l))
-               return -1;
-       /*
-        * TODO finish this macro and start using it!
-        * #define offsetcheck {if (offset > HOWMANY-1) 
-        *      magwarn("offset too big"); }
-        */
-
-       /*
-        * now get last part - the description
-        */
-GetDesc:
-       EATAB;
-       if (l[0] == '\b') {
-               ++l;
-               m->nospflag = 1;
-       } else if ((l[0] == '\\') && (l[1] == 'b')) {
-               ++l;
-               ++l;
-               m->nospflag = 1;
-       } else
-               m->nospflag = 0;
-       while ((m->desc[i++] = *l++) != '\0' && i<MAXDESC)
-               /* NULLBODY */;
-
-       if (check) {
-               mdump(m);
-       }
-       ++(*ndx);               /* make room for next */
-       return 0;
-}
-
-/* 
- * Read a numeric value from a pointer, into the value union of a magic 
- * pointer, according to the magic type.  Update the string pointer to point 
- * just after the number read.  Return 0 for success, non-zero for failure.
- */
-static int
-getvalue(m, p)
-struct magic *m;
-char **p;
-{
-       int slen;
-
-       if (m->type == STRING) {
-               *p = getstr(*p, m->value.s, sizeof(m->value.s), &slen);
-               m->vallen = slen;
-       } else
-               if (m->reln != 'x') {
-                       m->value.l = signextend(m, strtoul(*p, p, 0));
-                       eatsize(p);
-               }
-       return 0;
-}
-
-/*
- * Convert a string containing C character escapes.  Stop at an unescaped
- * space or tab.
- * Copy the converted version to "p", returning its length in *slen.
- * Return updated scan pointer as function result.
- */
-static char *
-getstr(s, p, plen, slen)
-register char  *s;
-register char  *p;
-int    plen, *slen;
-{
-       char    *origs = s, *origp = p;
-       char    *pmax = p + plen - 1;
-       register int    c;
-       register int    val;
-
-       while ((c = *s++) != '\0') {
-               if (isspace((unsigned char) c))
-                       break;
-               if (p >= pmax) {
-                       fprintf(stderr, "String too long: %s\n", origs);
-                       break;
-               }
-               if(c == '\\') {
-                       switch(c = *s++) {
-
-                       case '\0':
-                               goto out;
-
-                       default:
-                               *p++ = (char) c;
-                               break;
-
-                       case 'n':
-                               *p++ = '\n';
-                               break;
-
-                       case 'r':
-                               *p++ = '\r';
-                               break;
-
-                       case 'b':
-                               *p++ = '\b';
-                               break;
-
-                       case 't':
-                               *p++ = '\t';
-                               break;
-
-                       case 'f':
-                               *p++ = '\f';
-                               break;
-
-                       case 'v':
-                               *p++ = '\v';
-                               break;
-
-                       /* \ and up to 3 octal digits */
-                       case '0':
-                       case '1':
-                       case '2':
-                       case '3':
-                       case '4':
-                       case '5':
-                       case '6':
-                       case '7':
-                               val = c - '0';
-                               c = *s++;  /* try for 2 */
-                               if(c >= '0' && c <= '7') {
-                                       val = (val<<3) | (c - '0');
-                                       c = *s++;  /* try for 3 */
-                                       if(c >= '0' && c <= '7')
-                                               val = (val<<3) | (c-'0');
-                                       else
-                                               --s;
-                               }
-                               else
-                                       --s;
-                               *p++ = (char)val;
-                               break;
-
-                       /* \x and up to 2 hex digits */
-                       case 'x':
-                               val = 'x';      /* Default if no digits */
-                               c = hextoint(*s++);     /* Get next char */
-                               if (c >= 0) {
-                                       val = c;
-                                       c = hextoint(*s++);
-                                       if (c >= 0)
-                                               val = (val << 4) + c;
-                                       else
-                                               --s;
-                               } else
-                                       --s;
-                               *p++ = (char)val;
-                               break;
-                       }
-               } else
-                       *p++ = (char)c;
-       }
-out:
-       *p = '\0';
-       *slen = p - origp;
-       return s;
-}
-
-
-/* Single hex char to int; -1 if not a hex char. */
-static int
-hextoint(c)
-int c;
-{
-       if (!isascii((unsigned char) c))        return -1;
-       if (isdigit((unsigned char) c))         return c - '0';
-       if ((c>='a')&&(c<='f')) return c + 10 - 'a';
-       if ((c>='A')&&(c<='F')) return c + 10 - 'A';
-                               return -1;
-}
-
-
-/*
- * Print a string containing C character escapes.
- */
-void
-showstr(fp, s, len)
-FILE *fp;
-const char *s;
-int len;
-{
-       register char   c;
-
-       for (;;) {
-               c = *s++;
-               if (len == -1) {
-                       if (c == '\0')
-                               break;
-               }
-               else  {
-                       if (len-- == 0)
-                               break;
-               }
-               if(c >= 040 && c <= 0176)       /* TODO isprint && !iscntrl */
-                       (void) fputc(c, fp);
-               else {
-                       (void) fputc('\\', fp);
-                       switch (c) {
-                       
-                       case '\n':
-                               (void) fputc('n', fp);
-                               break;
-
-                       case '\r':
-                               (void) fputc('r', fp);
-                               break;
-
-                       case '\b':
-                               (void) fputc('b', fp);
-                               break;
-
-                       case '\t':
-                               (void) fputc('t', fp);
-                               break;
-
-                       case '\f':
-                               (void) fputc('f', fp);
-                               break;
-
-                       case '\v':
-                               (void) fputc('v', fp);
-                               break;
-
-                       default:
-                               (void) fprintf(fp, "%.3o", c & 0377);
-                               break;
-                       }
-               }
-       }
-}
-
-/*
- * eatsize(): Eat the size spec from a number [eg. 10UL]
- */
-static void
-eatsize(p)
-char **p;
-{
-       char *l = *p;
-
-       if (LOWCASE(*l) == 'u') 
-               l++;
-
-       switch (LOWCASE(*l)) {
-       case 'l':    /* long */
-       case 's':    /* short */
-       case 'h':    /* short */
-       case 'b':    /* char/byte */
-       case 'c':    /* char/byte */
-               l++;
-               /*FALLTHROUGH*/
-       default:
-               break;
-       }
-
-       *p = l;
-}
diff --git a/file/ascmagic.c b/file/ascmagic.c
deleted file mode 100644 (file)
index ef4c484..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: ascmagic.c,v 1.3 1997/02/09 23:58:18 millert Exp $    */
-
-/*
- * ASCII magic -- file types that we know based on keywords
- * that can appear anywhere in the file.
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include "file.h"
-#include "names.h"
-
-#ifndef        lint
-#if 0
-static char *moduleid = "$OpenBSD: ascmagic.c,v 1.3 1997/02/09 23:58:18 millert Exp $";
-#endif
-#endif /* lint */
-
-                       /* an optimisation over plain strcmp() */
-#define        STREQ(a, b)     (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-int
-ascmagic(buf, nbytes)
-unsigned char *buf;
-int nbytes;    /* size actually read */
-{
-       int i, has_escapes = 0;
-       unsigned char *s;
-       char nbuf[HOWMANY+1];   /* one extra for terminating '\0' */
-       char *token;
-       register struct names *p;
-
-       /*
-        * Do the tar test first, because if the first file in the tar
-        * archive starts with a dot, we can confuse it with an nroff file.
-        */
-       switch (is_tar(buf, nbytes)) {
-       case 1:
-               ckfputs("tar archive", stdout);
-               return 1;
-       case 2:
-               ckfputs("POSIX tar archive", stdout);
-               return 1;
-       }
-
-       /*
-        * for troff, look for . + letter + letter or .\";
-        * this must be done to disambiguate tar archives' ./file
-        * and other trash from real troff input.
-        */
-       if (*buf == '.') {
-               unsigned char *tp = buf + 1;
-
-               while (isascii(*tp) && isspace(*tp))
-                       ++tp;   /* skip leading whitespace */
-               if ((isascii(*tp) && (isalnum(*tp) || *tp=='\\') &&
-                   isascii(tp[1]) && (isalnum(tp[1]) || tp[1] == '"'))) {
-                       ckfputs("troff or preprocessor input text", stdout);
-                       return 1;
-               }
-       }
-       if ((*buf == 'c' || *buf == 'C') && 
-           isascii(buf[1]) && isspace(buf[1])) {
-               ckfputs("fortran program text", stdout);
-               return 1;
-       }
-
-
-       /* Make sure we are dealing with ascii text before looking for tokens */
-       for (i = 0; i < nbytes; i++) {
-               if (!isascii(buf[i]))
-                       return 0;       /* not all ASCII */
-       }
-
-       /* look for tokens from names.h - this is expensive! */
-       /* make a copy of the buffer here because strtok() will destroy it */
-       s = (unsigned char*) memcpy(nbuf, buf, nbytes);
-       s[nbytes] = '\0';
-       has_escapes = (memchr(s, '\033', nbytes) != NULL);
-       while ((token = strtok((char *) s, " \t\n\r\f")) != NULL) {
-               s = NULL;       /* make strtok() keep on tokin' */
-               for (p = names; p < names + NNAMES; p++) {
-                       if (STREQ(p->name, token)) {
-                               ckfputs(types[p->type], stdout);
-                               if (has_escapes)
-                                       ckfputs(" (with escape sequences)", 
-                                               stdout);
-                               return 1;
-                       }
-               }
-       }
-
-       /* all else fails, but it is ASCII... */
-       ckfputs("ASCII text", stdout);
-       if (has_escapes) {
-               ckfputs(" (with escape sequences)", stdout);
-       }
-       return 1;
-}
-
-
diff --git a/file/compress.c b/file/compress.c
deleted file mode 100644 (file)
index 4088f2d..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: compress.c,v 1.3 1997/02/09 23:58:19 millert Exp $    */
-
-/*
- * compress routines:
- *     zmagic() - returns 0 if not recognized, uncompresses and prints
- *                information if recognized
- *     uncompress(method, old, n, newch) - uncompress old into new, 
- *                                         using method, return sizeof new
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include "file.h"
-
-static struct {
-   char *magic;
-   int   maglen;
-   char *argv[3];
-   int  silent;
-} compr[] = {
-    { "\037\235", 2, { "uncompress", "-c", NULL }, 0 },        /* compressed */
-    { "\037\213", 2, { "gzip", "-cdq", NULL }, 1 },    /* gzipped */
-    { "\037\236", 2, { "gzip", "-cdq", NULL }, 1 },    /* frozen */
-    { "\037\240", 2, { "gzip", "-cdq", NULL }, 1 },    /* SCO LZH */
-    /* the standard pack utilities do not accept standard input */
-    { "\037\036", 2, { "gzip", "-cdq", NULL }, 0 },    /* packed */
-};
-
-static int ncompr = sizeof(compr) / sizeof(compr[0]);
-
-
-static int uncompress __P((int, const unsigned char *, unsigned char **, int));
-
-int
-zmagic(buf, nbytes)
-unsigned char *buf;
-int nbytes;
-{
-       unsigned char *newbuf;
-       int newsize;
-       int i;
-
-       for (i = 0; i < ncompr; i++) {
-               if (nbytes < compr[i].maglen)
-                       continue;
-               if (memcmp(buf, compr[i].magic,  compr[i].maglen) == 0)
-                       break;
-       }
-
-       if (i == ncompr)
-               return 0;
-
-       if ((newsize = uncompress(i, buf, &newbuf, nbytes)) != 0) {
-               tryit(newbuf, newsize, 1);
-               free(newbuf);
-               printf(" (");
-               tryit(buf, nbytes, 0);
-               printf(")");
-       }
-       return 1;
-}
-
-
-static int
-uncompress(method, old, newch, n)
-int method;
-const unsigned char *old;
-unsigned char **newch;
-int n;
-{
-       int fdin[2], fdout[2];
-
-       if (pipe(fdin) == -1 || pipe(fdout) == -1) {
-               error("cannot create pipe (%s).\n", strerror(errno));   
-               /*NOTREACHED*/
-       }
-       switch (fork()) {
-       case 0: /* child */
-               (void) close(0);
-               (void) dup(fdin[0]);
-               (void) close(fdin[0]);
-               (void) close(fdin[1]);
-
-               (void) close(1);
-               (void) dup(fdout[1]);
-               (void) close(fdout[0]);
-               (void) close(fdout[1]);
-               if (compr[method].silent)
-                   (void) close(2);
-
-               execvp(compr[method].argv[0], compr[method].argv);
-               error("could not execute `%s' (%s).\n", 
-                     compr[method].argv[0], strerror(errno));
-               /*NOTREACHED*/
-       case -1:
-               error("could not fork (%s).\n", strerror(errno));
-               /*NOTREACHED*/
-
-       default: /* parent */
-               (void) close(fdin[0]);
-               (void) close(fdout[1]);
-               if (write(fdin[1], old, n) != n) {
-                       error("write failed (%s).\n", strerror(errno));
-                       /*NOTREACHED*/
-               }
-               (void) close(fdin[1]);
-               if ((*newch = (unsigned char *) malloc(n)) == NULL) {
-                       error("out of memory.\n");
-                       /*NOTREACHED*/
-               }
-               if ((n = read(fdout[0], *newch, n)) <= 0) {
-                       free(*newch);
-                       error("read failed (%s).\n", strerror(errno));
-                       /*NOTREACHED*/
-               }
-               (void) close(fdout[0]);
-               (void) wait(NULL);
-               return n;
-       }
-}
diff --git a/file/file.1 b/file/file.1
deleted file mode 100644 (file)
index 35e9b77..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-.\" $OpenBSD: file.1,v 1.4 1997/02/09 23:58:20 millert Exp $
-.TH FILE 1 "Copyrighted but distributable"
-.SH NAME
-file
-\- determine file type
-.SH SYNOPSIS
-.B file
-[
-.B \-vczL
-]
-[
-.B \-f
-namefile ]
-[
-.B \-m 
-magicfiles ]
-file ...
-.SH DESCRIPTION
-This manual page documents version 3.22 of the
-.B file
-command.
-.B File
-tests each argument in an attempt to classify it.
-There are three sets of tests, performed in this order:
-filesystem tests, magic number tests, and language tests.
-The
-.I first
-test that succeeds causes the file type to be printed.
-.PP
-The type printed will usually contain one of the words
-.B text
-(the file contains only
-.SM ASCII
-characters and is probably safe to read on an
-.SM ASCII
-terminal),
-.B executable
-(the file contains the result of compiling a program
-in a form understandable to some \s-1UNIX\s0 kernel or another),
-or
-.B data
-meaning anything else (data is usually `binary' or non-printable).
-Exceptions are well-known file formats (core files, tar archives)
-that are known to contain binary data.
-When modifying the file
-.I /etc/magic
-or the program itself, 
-.B "preserve these keywords" .
-People depend on knowing that all the readable files in a directory
-have the word ``text'' printed.
-Don't do as Berkeley did \- change ``shell commands text''
-to ``shell script''.
-.PP
-The filesystem tests are based on examining the return from a
-.BR stat (2)
-system call.
-The program checks to see if the file is empty,
-or if it's some sort of special file.
-Any known file types appropriate to the system you are running on
-(sockets, symbolic links, or named pipes (FIFOs) on those systems that
-implement them)
-are intuited if they are defined in
-the system header file
-.IR sys/stat.h  .
-.PP
-The magic number tests are used to check for files with data in
-particular fixed formats.
-The canonical example of this is a binary executable (compiled program)
-.I a.out
-file, whose format is defined in 
-.I a.out.h
-and possibly
-.I exec.h
-in the standard include directory.
-These files have a `magic number' stored in a particular place
-near the beginning of the file that tells the \s-1UNIX\s0 operating system
-that the file is a binary executable, and which of several types thereof.
-The concept of `magic number' has been applied by extension to data files.
-Any file with some invariant identifier at a small fixed
-offset into the file can usually be described in this way.
-The information in these files is read from the magic file
-.I /etc/magic.
-.PP
-If an argument appears to be an
-.SM ASCII 
-file,
-.B file
-attempts to guess its language.
-The language tests look for particular strings (cf
-.IR names.h )
-that can appear anywhere in the first few blocks of a file.
-For example, the keyword
-.B .br
-indicates that the file is most likely a
-.BR troff (1)
-input file, just as the keyword 
-.B struct
-indicates a C program.
-These tests are less reliable than the previous
-two groups, so they are performed last.
-The language test routines also test for some miscellany
-(such as 
-.BR tar (1)
-archives) and determine whether an unknown file should be
-labelled as `ascii text' or `data'. 
-.SH OPTIONS
-.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 \-c
-Cause a checking printout of the parsed form of the magic file.
-This is usually used in conjunction with 
-.B \-m
-to debug a new magic file before installing it.
-.TP 8
-.B \-f namefile
-Read the names of the files to be examined from 
-.I namefile
-(one per line) 
-before the argument list.
-Either 
-.I namefile
-or at least one filename argument must be present;
-to test the standard input, use ``-'' as a filename argument.
-.TP 8
-.B \-L
-option causes symlinks to be followed, as the like-named option in
-.BR ls (1).
-(on systems that support symbolic links).
-.SH FILES
-.I /etc/magic
-\- default list of magic numbers
-.SH ENVIRONMENT
-The environment variable
-.B MAGIC
-can be used to set the default magic number files.
-.SH SEE ALSO
-.BR magic (5)
-\- description of magic file format.
-.br
-.BR strings (1), " od" (1)
-\- tools for examining non-textfiles.
-.SH STANDARDS CONFORMANCE
-This program is believed to exceed the System V Interface Definition
-of FILE(CMD), as near as one can determine from the vague language
-contained therein. 
-Its behaviour is mostly compatible with the System V program of the same name.
-This version knows more magic, however, so it will produce
-different (albeit more accurate) output in many cases. 
-.PP
-The one significant difference 
-between this version and System V
-is that this version treats any white space
-as a delimiter, so that spaces in pattern strings must be escaped.
-For example,
-.br
->10    string  language impress\       (imPRESS data)
-.br
-in an existing magic file would have to be changed to
-.br
->10    string  language\e impress      (imPRESS data)
-.br
-In addition, in this version, if a pattern string contains a backslash,
-it must be escaped.  For example
-.br
-0      string          \ebegindata     Andrew Toolkit document
-.br
-in an existing magic file would have to be changed to
-.br
-0      string          \e\ebegindata   Andrew Toolkit document
-.br
-.PP
-SunOS releases 3.2 and later from Sun Microsystems include a
-.BR file (1)
-command derived from the System V one, but with some extensions.
-My version differs from Sun's only in minor ways.
-It includes the extension of the `&' operator, used as,
-for example,
-.br
->16    long&0x7fffffff >0              not stripped
-.SH MAGIC DIRECTORY
-The magic file entries have been collected from various sources,
-mainly USENET, and contributed by various authors.
-Christos Zoulas (address below) will collect additional
-or corrected magic file entries.
-A consolidation of magic file entries 
-will be distributed periodically.
-.PP
-The order of entries in the magic file is significant.
-Depending on what system you are using, the order that
-they are put together may be incorrect.
-If your old
-.B file
-command uses a magic file,
-keep the old magic file around for comparison purposes
-(rename it to 
-.IR /etc/magic.orig ).
-.SH HISTORY
-There has been a 
-.B file
-command in every \s-1UNIX\s0 since at least Research Version 6
-(man page dated January, 1975).
-The System V version introduced one significant major change:
-the external list of magic number types.
-This slowed the program down slightly but made it a lot more flexible.
-.PP
-This program, based on the System V version,
-was written by Ian Darwin without looking at anybody else's source code.
-.PP
-John Gilmore revised the code extensively, making it better than
-the first version.
-Geoff Collyer found several inadequacies
-and provided some magic file entries.
-The program has undergone continued evolution since.
-.SH AUTHOR
-Written by Ian F. Darwin, UUCP address {utzoo | ihnp4}!darwin!ian,
-Internet address ian@sq.com,
-postal address: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.
-.PP
-Altered by Rob McMahon, cudcv@warwick.ac.uk, 1989, to extend the `&' operator
-from simple `x&y != 0' to `x&y op z'.
-.PP
-Altered by Guy Harris, guy@auspex.com, 1993, to:
-.RS
-.PP
-put the ``old-style'' `&'
-operator back the way it was, because 1) Rob McMahon's change broke the
-previous style of usage, 2) the SunOS ``new-style'' `&' operator,
-which this version of
-.B file
-supports, also handles `x&y op z', and 3) Rob's change wasn't documented
-in any case;
-.PP
-put in multiple levels of `>';
-.PP
-put in ``beshort'', ``leshort'', etc. keywords to look at numbers in the
-file in a specific byte order, rather than in the native byte order of
-the process running
-.BR file .
-.RE
-.PP
-Changes by Ian Darwin and various authors including
-Christos Zoulas (christos@deshaw.com), 1990-1997.
-.SH LEGAL NOTICE
-Copyright (c) Ian F. Darwin, Toronto, Canada,
-1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.
-.PP
-This software is not subject to and may not be made subject to any
-license of the American Telephone and Telegraph Company, Sun
-Microsystems Inc., Digital Equipment Inc., Lotus Development Inc., the
-Regents of the University of California, The X Consortium or MIT, or
-The Free Software Foundation.
-.PP
-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.
-.PP
-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:
-.PP 
-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.
-.PP
-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.
-.PP
-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.
-.PP
-4. This notice may not be removed or altered.
-.PP
-A few support files (\fIgetopt\fP, \fIstrtok\fP)
-distributed with this package
-are by Henry Spencer and are subject to the same terms as above.
-.PP
-A few simple support files (\fIstrtol\fP, \fIstrchr\fP)
-distributed with this package
-are in the public domain; they are so marked.
-.PP
-The files
-.I tar.h
-and
-.I is_tar.c
-were written by John Gilmore from his public-domain
-.B tar
-program, and are not covered by the above restrictions.
-.SH BUGS
-There must be a better way to automate the construction of the Magic
-file from all the glop in Magdir. What is it?
-Better yet, the magic file should be compiled into binary (say,
-.BR ndbm (3)
-or, better yet, fixed-length
-.SM ASCII
-strings for use in heterogenous network environments) for faster startup.
-Then the program would run as fast as the Version 7 program of the same name,
-with the flexibility of the System V version.
-.PP
-.B File
-uses several algorithms that favor speed over accuracy,
-thus it can be misled about the contents of
-.SM ASCII
-files.
-.PP
-The support for
-.SM ASCII
-files (primarily for programming languages)
-is simplistic, inefficient and requires recompilation to update.
-.PP
-There should be an ``else'' clause to follow a series of continuation lines.
-.PP
-The magic file and keywords should have regular expression support.
-Their use of
-.SM "ASCII TAB"
-as a field delimiter is ugly and makes
-it hard to edit the files, but is entrenched.
-.PP
-It might be advisable to allow upper-case letters in keywords
-for e.g.,
-.BR troff (1)
-commands vs man page macros.
-Regular expression support would make this easy.
-.PP
-The program doesn't grok \s-2FORTRAN\s0.
-It should be able to figure \s-2FORTRAN\s0 by seeing some keywords which 
-appear indented at the start of line.
-Regular expression support would make this easy.
-.PP
-The list of keywords in 
-.I ascmagic
-probably belongs in the Magic file.
-This could be done by using some keyword like `*' for the offset value.
-.PP
-Another optimisation would be to sort
-the magic file so that we can just run down all the
-tests for the first byte, first word, first long, etc, once we
-have fetched it.  Complain about conflicts in the magic file entries.
-Make a rule that the magic entries sort based on file offset rather
-than position within the magic file?
-.PP
-The program should provide a way to give an estimate 
-of ``how good'' a guess is.
-We end up removing guesses (e.g. ``From '' as first 5 chars of file) because
-they are not as good as other guesses (e.g. ``Newsgroups:'' versus
-"Return-Path:").  Still, if the others don't pan out, it should be
-possible to use the first guess.  
-.PP
-This program is slower than some vendors' file commands.
-.PP
-This manual page, and particularly this section, is too long.
-.SH AVAILABILITY
-You can obtain the original author's latest version by anonymous FTP
-on
-.B ftp.deshaw.com
-in the directory
-.I /pub/file/file-X.YY.tar.gz
diff --git a/file/file.c b/file/file.c
deleted file mode 100644 (file)
index bb0007e..0000000
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: file.c,v 1.5 1997/02/09 23:58:22 millert Exp $        */
-
-/*
- * file - find type of a file or files - main program.
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-#ifndef        lint
-#if 0
-static char *moduleid = "$OpenBSD: file.c,v 1.5 1997/02/09 23:58:22 millert Exp $";
-#endif
-#endif /* lint */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/param.h> /* for MAXPATHLEN */
-#include <sys/stat.h>
-#include <fcntl.h>     /* for open() */
-#if (__COHERENT__ >= 0x420)
-# include <sys/utime.h>
-#else
-# ifdef USE_UTIMES
-#  include <sys/time.h>
-# else
-#  include <utime.h>
-# endif
-#endif
-#include <unistd.h>    /* for read() */
-
-#include <netinet/in.h>                /* for byte swapping */
-
-#include "patchlevel.h"
-#include "file.h"
-
-#ifdef BUILTIN_FAT
-#include <mach-o/fat.h>
-#endif /* BUILTIN_FAT */
-
-#ifdef S_IFLNK
-# define USAGE  "Usage: %s [-vczL] [-f namefile] [-m magicfiles] file...\n"
-#else
-# define USAGE  "Usage: %s [-vcz] [-f namefile] [-m magicfiles] file...\n"
-#endif
-
-#ifndef MAGIC
-# define MAGIC "/etc/magic"
-#endif
-
-int                    /* Global command-line options          */
-       debug = 0,      /* debugging                            */
-       lflag = 0,      /* follow Symlinks (BSD only)           */
-       zflag = 0;      /* follow (uncompress) compressed files */
-
-int                    /* Misc globals                         */
-       nmagic = 0;     /* number of valid magic[]s             */
-
-struct  magic *magic;  /* array of magic entries               */
-
-char *magicfile;       /* where magic be found                 */
-
-char *progname;                /* used throughout                      */
-int lineno;            /* line number in the magic file        */
-
-
-static void    unwrap          __P((char *fn));
-#if 0
-static int     byteconv4       __P((int, int, int));
-static short   byteconv2       __P((int, int, int));
-#endif
-
-/*
- * main - parse arguments and handle options
- */
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
-       int c;
-       int check = 0, didsomefiles = 0, errflg = 0, ret = 0, app = 0;
-
-       if ((progname = strrchr(argv[0], '/')) != NULL)
-               progname++;
-       else
-               progname = argv[0];
-
-       if (!(magicfile = getenv("MAGIC")))
-               magicfile = MAGIC;
-
-       while ((c = getopt(argc, argv, "vcdf:Lm:z")) != -1)
-               switch (c) {
-               case 'v':
-                       (void) fprintf(stdout, "%s-%d.%d\n", progname,
-                                      FILE_VERSION_MAJOR, patchlevel);
-                       return 1;
-               case 'c':
-                       ++check;
-                       break;
-               case 'd':
-                       ++debug;
-                       break;
-               case 'f':
-                       if (!app) {
-                               ret = apprentice(magicfile, check);
-                               if (check)
-                                       exit(ret);
-                               app = 1;
-                       }
-                       unwrap(optarg);
-                       ++didsomefiles;
-                       break;
-#ifdef S_IFLNK
-               case 'L':
-                       ++lflag;
-                       break;
-#endif
-               case 'm':
-                       magicfile = optarg;
-                       break;
-               case 'z':
-                       zflag++;
-                       break;
-               case '?':
-               default:
-                       errflg++;
-                       break;
-               }
-
-       if (errflg) {
-               (void) fprintf(stderr, USAGE, progname);
-               exit(2);
-       }
-
-       if (!app) {
-               ret = apprentice(magicfile, check);
-               if (check)
-                       exit(ret);
-               app = 1;
-       }
-
-       if (optind == argc) {
-               if (!didsomefiles) {
-                       (void)fprintf(stderr, USAGE, progname);
-                       exit(2);
-               }
-       }
-       else {
-               int i, wid, nw;
-               for (wid = 0, i = optind; i < argc; i++) {
-                       nw = strlen(argv[i]);
-                       if (nw > wid)
-                               wid = nw;
-               }
-               for (; optind < argc; optind++)
-                       process(argv[optind], wid);
-       }
-
-       return 0;
-}
-
-
-/*
- * unwrap -- read a file of filenames, do each one.
- */
-static void
-unwrap(fn)
-char *fn;
-{
-       char buf[MAXPATHLEN];
-       FILE *f;
-       int wid = 0, cwid;
-
-       if (strcmp("-", fn) == 0) {
-               f = stdin;
-               wid = 1;
-       } else {
-               if ((f = fopen(fn, "r")) == NULL) {
-                       error("Cannot open `%s' (%s).\n", fn, strerror(errno));
-                       /*NOTREACHED*/
-               }
-
-               while (fgets(buf, sizeof(buf), f) != NULL) {
-                       cwid = strlen(buf) - 1;
-                       if (cwid > wid)
-                               wid = cwid;
-               }
-
-               rewind(f);
-       }
-
-       while (fgets(buf, sizeof(buf), f) != NULL) {
-               buf[strlen(buf)-1] = '\0';
-               process(buf, wid);
-       }
-
-       (void) fclose(f);
-}
-
-
-#if 0
-/*
- * byteconv4
- * Input:
- *     from            4 byte quantity to convert
- *     same            whether to perform byte swapping
- *     big_endian      whether we are a big endian host
- */
-static int
-byteconv4(from, same, big_endian)
-    int from;
-    int same;
-    int big_endian;
-{
-  if (same)
-    return from;
-  else if (big_endian)         /* lsb -> msb conversion on msb */
-  {
-    union {
-      int i;
-      char c[4];
-    } retval, tmpval;
-
-    tmpval.i = from;
-    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.i;
-  }
-  else
-    return ntohl(from);                /* msb -> lsb conversion on lsb */
-}
-
-/*
- * byteconv2
- * Same as byteconv4, but for shorts
- */
-static short
-byteconv2(from, same, big_endian)
-       int from;
-       int same;
-       int big_endian;
-{
-  if (same)
-    return from;
-  else if (big_endian)         /* lsb -> msb conversion on msb */
-  {
-    union {
-      short s;
-      char c[2];
-    } retval, tmpval;
-
-    tmpval.s = (short) from;
-    retval.c[0] = tmpval.c[1];
-    retval.c[1] = tmpval.c[0];
-
-    return retval.s;
-  }
-  else
-    return ntohs(from);                /* msb -> lsb conversion on lsb */
-}
-#endif
-
-/*
- * process - process input file
- */
-void
-process(inname, wid)
-const char     *inname;
-int wid;
-{
-       int     fd = 0;
-       static  const char stdname[] = "standard input";
-       unsigned char   buf[HOWMANY+1]; /* one extra for terminating '\0' */
-       struct stat     sb;
-       int nbytes = 0; /* number of bytes read from a datafile */
-       char match = '\0';
-#ifdef BUILTIN_FAT
-       unsigned magic;
-#endif /* BUILTIN_FAT */
-
-       if (strcmp("-", inname) == 0) {
-               if (fstat(0, &sb)<0) {
-                       error("cannot fstat `%s' (%s).\n", stdname,
-                             strerror(errno));
-                       /*NOTREACHED*/
-               }
-               inname = stdname;
-       }
-
-       if (wid > 0)
-            (void) printf("%s:%*s ", inname, 
-                          (int) (wid - strlen(inname)), "");
-
-       if (inname != stdname) {
-           /*
-            * first try judging the file based on its filesystem status
-            */
-           if (fsmagic(inname, &sb) != 0) {
-                   putchar('\n');
-                   return;
-           }
-
-           if ((fd = open(inname, O_RDONLY)) < 0) {
-                   /* We can't open it, but we were able to stat it. */
-                   if (sb.st_mode & 0002) ckfputs("writeable, ", stdout);
-                   if (sb.st_mode & 0111) ckfputs("executable, ", stdout);
-                   ckfprintf(stdout, "can't read `%s' (%s).\n",
-                       inname, strerror(errno));
-                   return;
-           }
-       }
-
-
-       /*
-        * try looking at the first HOWMANY bytes
-        */
-       if ((nbytes = read(fd, (char *)buf, HOWMANY)) == -1) {
-               error("read failed (%s).\n", strerror(errno));
-               /*NOTREACHED*/
-       }
-
-       if (nbytes == 0)
-               ckfputs("empty", stdout);
-       else {
-               buf[nbytes++] = '\0';   /* null-terminate it */
-               match = tryit(buf, nbytes, zflag);
-       }
-
-#ifdef BUILTIN_ELF
-       if (match == 's' && nbytes > 5)
-               tryelf(fd, buf, nbytes);
-#endif
-
-       if (inname != stdname) {
-#ifdef RESTORE_TIME
-               /*
-                * Try to restore access, modification times if read it.
-                */
-# ifdef USE_UTIMES
-               struct timeval  utsbuf[2];
-               utsbuf[0].tv_sec = sb.st_atime;
-               utsbuf[1].tv_sec = sb.st_mtime;
-
-               (void) utimes(inname, utsbuf); /* don't care if loses */
-# else
-               struct utimbuf  utbuf;
-
-               utbuf.actime = sb.st_atime;
-               utbuf.modtime = sb.st_mtime;
-               (void) utime(inname, &utbuf); /* don't care if loses */
-# endif
-#endif
-
-#ifdef BUILTIN_FAT
-               memcpy(&magic, buf, sizeof(unsigned long));
-#ifdef __BIG_ENDIAN__
-               if(nbytes >= sizeof(unsigned long) && magic == FAT_MAGIC)
-#endif /* __BIG_ENDIAN__ */
-#ifdef __LITTLE_ENDIAN__
-               if(nbytes >= sizeof(unsigned long) && magic == FAT_CIGAM)
-#endif /* __LITTLE_ENDIAN__ */
-                       tryfat(inname, fd, (char *)buf, nbytes);
-#endif /* BUILTIN_FAT */
-
-               (void) close(fd);
-       }
-       (void) putchar('\n');
-}
-
-
-int
-tryit(buf, nb, zflag)
-unsigned char *buf;
-int nb, zflag;
-{
-       /* try compression stuff */
-       if (zflag && zmagic(buf, nb))
-               return 'z';
-
-       /* try tests in /etc/magic (or surrogate magic file) */
-       if (softmagic(buf, nb))
-               return 's';
-
-       /* try known keywords, check whether it is ASCII */
-       if (ascmagic(buf, nb))
-               return 'a';
-
-       /* see if it's international language text */
-       if (internatmagic(buf, nb))
-               return 'i';
-
-       /* abandon hope, all ye who remain here */
-       ckfputs("data", stdout);
-               return '\0';
-}
diff --git a/file/file.h b/file/file.h
deleted file mode 100644 (file)
index 02e6965..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: file.h,v 1.3 1997/02/09 23:58:23 millert Exp $        */
-
-/*
- * file.h - definitions for file(1) program
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-
-#ifndef __file_h__
-#define __file_h__
-
-typedef int32_t int32;
-typedef u_int32_t uint32;
-
-#ifndef HOWMANY
-# define HOWMANY 8192          /* how much of the file to look at */
-#endif
-#define MAXMAGIS 1000          /* max entries in /etc/magic */
-#define MAXDESC        50              /* max leng of text description */
-#define MAXstring 32           /* max leng of "string" types */
-
-struct magic {
-       short flag;             
-#define INDIR  1               /* if '>(...)' appears,  */
-#define        UNSIGNED 2              /* comparison is unsigned */
-#define ADD    4               /* if '>&' appears,  */
-       short cont_level;       /* level of ">" */
-       struct {
-               char type;      /* byte short long */
-               int32 offset;   /* offset from indirection */
-       } in;
-       int32 offset;           /* offset to magic number */
-       unsigned char reln;     /* relation (0=eq, '>'=gt, etc) */
-       char type;              /* int, short, long or string. */
-       char vallen;            /* length of string value, if any */
-#define                        BYTE    1
-#define                                SHORT   2
-#define                                LONG    4
-#define                                STRING  5
-#define                                DATE    6
-#define                                BESHORT 7
-#define                                BELONG  8
-#define                                BEDATE  9
-#define                                LESHORT 10
-#define                                LELONG  11
-#define                                LEDATE  12
-       union VALUETYPE {
-               unsigned char b;
-               unsigned short h;
-               uint32 l;
-               char s[MAXstring];
-               unsigned char hs[2];    /* 2 bytes of a fixed-endian "short" */
-               unsigned char hl[4];    /* 2 bytes of a fixed-endian "long" */
-       } value;                /* either number or string */
-       uint32 mask;    /* mask before comparison with value */
-       char nospflag;          /* supress space character */
-       char desc[MAXDESC];     /* description */
-};
-
-#include <stdio.h>     /* Include that here, to make sure __P gets defined */
-
-#ifndef __P
-# if __STDC__ || __cplusplus
-#  define __P(a) a
-# else
-#  define __P(a) ()
-#  define const
-# endif
-#endif
-
-extern int   apprentice                __P((char *, int));
-extern int   ascmagic          __P((unsigned char *, int));
-extern void  error             __P((const char *, ...));
-extern void  ckfputs           __P((const char *, FILE *));
-struct stat;
-extern int   fsmagic           __P((const char *, struct stat *));
-extern int   is_compress       __P((const unsigned char *, int *));
-extern int   is_tar            __P((unsigned char *, int));
-extern void  magwarn           __P((const char *, ...));
-extern void  mdump             __P((struct magic *));
-extern void  process           __P((const char *, int));
-extern void  showstr           __P((FILE *, const char *, int));
-extern int   softmagic         __P((unsigned char *, int));
-extern int   tryit             __P((unsigned char *, int, int));
-extern int   zmagic            __P((unsigned char *, int));
-extern void  ckfprintf         __P((FILE *, const char *, ...));
-extern uint32 signextend       __P((struct magic *, unsigned int32));
-extern int internatmagic       __P((unsigned char *, int));
-extern void tryelf             __P((int, char *, int));
-extern void tryfat             __P((const char *, int, char *, int));
-
-
-extern int errno;              /* Some unixes don't define this..      */
-
-extern char *progname;         /* the program name                     */
-extern char *magicfile;                /* name of the magic file               */
-extern int lineno;             /* current line number in magic file    */
-
-extern struct magic *magic;    /* array of magic entries               */
-extern int nmagic;             /* number of valid magic[]s             */
-
-
-extern int debug;              /* enable debugging?                    */
-extern int zflag;              /* process compressed files?            */
-extern int lflag;              /* follow symbolic links?               */
-
-extern int optind;             /* From getopt(3)                       */
-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__)
-extern int sys_nerr;
-extern char *sys_errlist[];
-#define strerror(e) \
-       (((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
-#define strtoul(a, b, c)       strtol(a, b, c)
-#endif
-
-#ifndef MAXPATHLEN
-#define        MAXPATHLEN      512
-#endif
-
-#endif /* __file_h__ */
diff --git a/file/fsmagic.c b/file/fsmagic.c
deleted file mode 100644 (file)
index 758c570..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: fsmagic.c,v 1.3 1997/02/09 23:58:24 millert Exp $     */
-
-/*
- * fsmagic - magic based on filesystem info - directory, special files, etc.
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <stdlib.h>
-#ifndef major
-# if defined(__SVR4) || defined(_SVR4_SOURCE)
-#  include <sys/mkdev.h>
-# endif
-#endif
-#ifndef        major                   /* if `major' not defined in types.h, */
-#include <sys/sysmacros.h>     /* try this one. */
-#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        lint
-#if 0
-static char *moduleid = "$OpenBSD: fsmagic.c,v 1.3 1997/02/09 23:58:24 millert Exp $";
-#endif
-#endif /* lint */
-
-int
-fsmagic(fn, sb)
-const char *fn;
-struct stat *sb;
-{
-       int ret = 0;
-
-       /*
-        * Fstat is cheaper but fails for files you don't have read perms on.
-        * On 4.2BSD and similar systems, use lstat() to identify symlinks.
-        */
-#ifdef S_IFLNK
-       if (!lflag)
-               ret = lstat(fn, sb);
-       else
-#endif
-       ret = stat(fn, sb);     /* don't merge into if; see "ret =" above */
-
-       if (ret) {
-               ckfprintf(stdout,
-                       /* Yes, I do mean stdout. */
-                       /* No \n, caller will provide. */
-                       "can't stat `%s' (%s).", fn, strerror(errno));
-               return 1;
-       }
-
-       if (sb->st_mode & S_ISUID) ckfputs("setuid ", stdout);
-       if (sb->st_mode & S_ISGID) ckfputs("setgid ", stdout);
-       if (sb->st_mode & S_ISVTX) ckfputs("sticky ", stdout);
-       
-       switch (sb->st_mode & S_IFMT) {
-       case S_IFDIR:
-               ckfputs("directory", stdout);
-               return 1;
-       case S_IFCHR:
-               (void) printf("character special (%ld/%ld)",
-                       (long) major(sb->st_rdev), (long) minor(sb->st_rdev));
-               return 1;
-       case S_IFBLK:
-               (void) printf("block special (%ld/%ld)",
-                       (long) major(sb->st_rdev), (long) minor(sb->st_rdev));
-               return 1;
-       /* TODO add code to handle V7 MUX and Blit MUX files */
-#ifdef S_IFIFO
-       case S_IFIFO:
-               ckfputs("fifo (named pipe)", stdout);
-               return 1;
-#endif
-#ifdef S_IFLNK
-       case S_IFLNK:
-               {
-                       char buf[BUFSIZ+4];
-                       register int nch;
-                       struct stat tstatbuf;
-
-                       if ((nch = readlink(fn, buf, BUFSIZ-1)) <= 0) {
-                               ckfprintf(stdout, "unreadable symlink (%s).", 
-                                     strerror(errno));
-                               return 1;
-                       }
-                       buf[nch] = '\0';        /* readlink(2) forgets this */
-
-                       /* If broken symlink, say so and quit early. */
-                       if (*buf == '/') {
-                           if (stat(buf, &tstatbuf) < 0) {
-                               ckfprintf(stdout,
-                                       "broken symbolic link to %s", buf);
-                               return 1;
-                           }
-                       }
-                       else {
-                           char *tmp;
-                           char buf2[BUFSIZ+BUFSIZ+4];
-
-                           if ((tmp = strrchr(fn,  '/')) == NULL) {
-                               tmp = buf; /* in current directory anyway */
-                           }
-                           else {
-                               strcpy (buf2, fn);  /* take directory part */
-                               buf2[tmp-fn+1] = '\0';
-                               strcat (buf2, buf); /* plus (relative) symlink */
-                               tmp = buf2;
-                           }
-                           if (stat(tmp, &tstatbuf) < 0) {
-                               ckfprintf(stdout,
-                                       "broken symbolic link to %s", buf);
-                               return 1;
-                           }
-                        }
-
-                       /* Otherwise, handle it. */
-                       if (lflag) {
-                               process(buf, strlen(buf));
-                               return 1;
-                       } else { /* just print what it points to */
-                               ckfputs("symbolic link to ", stdout);
-                               ckfputs(buf, stdout);
-                       }
-               }
-               return 1;
-#endif
-#ifdef S_IFSOCK
-#ifndef __COHERENT__
-       case S_IFSOCK:
-               ckfputs("socket", stdout);
-               return 1;
-#endif
-#endif
-       case S_IFREG:
-               break;
-       default:
-               error("invalid mode 0%o.\n", sb->st_mode);
-               /*NOTREACHED*/
-       }
-
-       /*
-        * regular file, check next possibility
-        */
-       if (sb->st_size == 0) {
-               ckfputs("empty", stdout);
-               return 1;
-       }
-       return 0;
-}
-
diff --git a/file/internat.c b/file/internat.c
deleted file mode 100644 (file)
index 3609fdd..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: internat.c,v 1.1 1997/02/09 23:58:26 millert Exp $    */
-
-#include <string.h>
-#include <sys/types.h>
-
-#include "file.h"
-
-#define F 0
-#define T 1
-
-/*
- * List of characters that look "reasonable" in international
- * language texts.  That's almost all characters :), except a
- * few in the control range of ASCII (all the known international
- * charactersets share the bottom half with ASCII).
- */
-static char maybe_internat[256] = {
-       F, F, F, F, F, F, F, F, T, T, T, T, T, T, F, F,  /* 0x0X */
-       F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F,  /* 0x1X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x2X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x3X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x4X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x5X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x6X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F,  /* 0x7X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x8X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x9X */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0xaX */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0xbX */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0xcX */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0xdX */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0xeX */
-       T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T   /* 0xfX */
-};
-
-/* Maximal length of a line we consider "reasonable". */
-#define MAXLINELEN 300
-
-int
-internatmagic(buf, nbytes)
-       unsigned char *buf;
-       int nbytes;
-{
-       int i;
-       unsigned char *cp;
-
-       nbytes--;
-
-       /* First, look whether there are "unreasonable" characters. */
-       for (i = 0, cp = buf; i < nbytes; i++, cp++)
-               if (!maybe_internat[*cp])
-                       return 0;
-
-       /*
-        * Now, look whether the file consists of lines of
-        * "reasonable" length.
-        */
-
-       for (i = 0; i < nbytes;) {
-               cp = memchr(buf, '\n', nbytes - i);
-               if (cp == NULL) {
-                       /* Don't fail if we hit the end of buffer. */
-                       if (i + MAXLINELEN >= nbytes)
-                               break;
-                       else
-                               return 0;
-               }
-               if (cp - buf > MAXLINELEN)
-                       return 0;
-               i += (cp - buf + 1);
-               buf = cp + 1;
-       }
-       ckfputs("International language text", stdout);
-       return 1;
-}
diff --git a/file/is_tar.c b/file/is_tar.c
deleted file mode 100644 (file)
index 5efe88c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: is_tar.c,v 1.3 1997/02/09 23:58:27 millert Exp $      */
-
-/*
- * is_tar() -- figure out whether file is a tar archive.
- *
- * Stolen (by the author!) from the public domain tar program:
- * Pubic Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu).
- *
- * @(#)list.c 1.18 9/23/86 Public Domain - gnu
- *
- * Comments changed and some code/comments reformatted
- * for file command by Ian Darwin.
- */
-
-#include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include "tar.h"
-
-#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
-
-/*
- * Return 
- *     0 if the checksum is bad (i.e., probably not a tar archive), 
- *     1 for old UNIX tar file,
- *     2 for Unix Std (POSIX) tar file.
- */
-int
-is_tar(buf, nbytes)
-unsigned char *buf;
-int nbytes;
-{
-       register union record *header = (union record *)buf;
-       register int    i;
-       register int    sum, recsum;
-       register char   *p;
-
-       if (nbytes < sizeof(union record))
-               return 0;
-
-       recsum = from_oct(8,  header->header.chksum);
-
-       sum = 0;
-       p = header->charptr;
-       for (i = sizeof(union record); --i >= 0;) {
-               /*
-                * We can't use unsigned char here because of old compilers,
-                * e.g. V7.
-                */
-               sum += 0xFF & *p++;
-       }
-
-       /* Adjust checksum to count the "chksum" field as blanks. */
-       for (i = sizeof(header->header.chksum); --i >= 0;)
-               sum -= 0xFF & header->header.chksum[i];
-       sum += ' '* sizeof header->header.chksum;       
-
-       if (sum != recsum)
-               return 0;       /* Not a tar archive */
-       
-       if (0==strcmp(header->header.magic, TMAGIC)) 
-               return 2;               /* Unix Standard tar archive */
-
-       return 1;                       /* Old fashioned tar archive */
-}
-
-
-/*
- * Quick and dirty octal conversion.
- *
- * Result is -1 if the field is invalid (all blank, or nonoctal).
- */
-static int
-from_oct(digs, where)
-       register int    digs;
-       register char   *where;
-{
-       register int    value;
-
-       while (isspace(*where)) {               /* Skip spaces */
-               where++;
-               if (--digs <= 0)
-                       return -1;              /* All blank field */
-       }
-       value = 0;
-       while (digs > 0 && isodigit(*where)) {  /* Scan til nonoctal */
-               value = (value << 3) | (*where++ - '0');
-               --digs;
-       }
-
-       if (digs > 0 && *where && !isspace(*where))
-               return -1;                      /* Ended on non-space/nul */
-
-       return value;
-}
diff --git a/file/magdir/386bsd b/file/magdir/386bsd
deleted file mode 100644 (file)
index 77bbe9e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#------------------------------------------------------------------------------
-# 386bsd:  file(1) magic for 386BSD objects
-#
-0      lelong                  000000413       386BSD demand paged executable
->16    lelong                  >0              not stripped
diff --git a/file/magdir/Header b/file/magdir/Header
deleted file mode 100644 (file)
index 5a4f3ce..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#! file
-#      $OpenBSD: Header,v 1.2 1996/06/26 05:33:03 deraadt Exp $
-
-# Magic data for file(1) command.
-# Machine-genererated from src/cmd/file/magdir/*; edit there only!
-# Format is described in magic(files), where:
-# files is 4 on V7 and BSD, 4 on SV, and ?? in the SVID.
diff --git a/file/magdir/Localstuff b/file/magdir/Localstuff
deleted file mode 100644 (file)
index c20418c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#------------------------------------------------------------------------------
-# Localstuff:  file(1) magic for locally observed files
-#
-# $OpenBSD: Localstuff,v 1.3 1997/02/09 23:58:40 millert Exp $
-# Add any locally observed files here.  Remember:
-# text if readable, executable if runnable binary, data if unreadable.
diff --git a/file/magdir/OpenBSD b/file/magdir/OpenBSD
deleted file mode 100644 (file)
index 34b51ea..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-
-#------------------------------------------------------------------------------
-# OpenBSD:  file(1) magic for OpenBSD objects
-#
-# All new-style magic numbers are in network byte order.
-#
-
-0      lelong                  000000407       OpenBSD little-endian object file
->16    lelong                  >0              not stripped
-0      belong                  000000407       OpenBSD big-endian object file
->16    belong                  >0              not stripped
-
-0      belong&0377777777       041400413       OpenBSD/i386 demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       041400410       OpenBSD/i386 pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       041400407       OpenBSD/i386
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       041400507       OpenBSD/i386 core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       041600413       OpenBSD/m68k demand paged
->0     byte                    &0x80           
->>20   belong                  <8192           shared library
->>20   belong                  =8192           dynamically linked executable
->>20   belong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       041600410       OpenBSD/m68k pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       041600407       OpenBSD/m68k
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       041600507       OpenBSD/m68k core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042000413       OpenBSD/m68k4k demand paged
->0     byte                    &0x80           
->>20   belong                  <4096           shared library
->>20   belong                  =4096           dynamically linked executable
->>20   belong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042000410       OpenBSD/m68k4k pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042000407       OpenBSD/m68k4k
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       042000507       OpenBSD/m68k4k core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042200413       OpenBSD/ns32532 demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042200410       OpenBSD/ns32532 pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042200407       OpenBSD/ns32532
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       042200507       OpenBSD/ns32532 core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042400413       OpenBSD/sparc demand paged
->0     byte                    &0x80           
->>20   belong                  <8192           shared library
->>20   belong                  =8192           dynamically linked executable
->>20   belong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042400410       OpenBSD/sparc pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042400407       OpenBSD/sparc
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       042400507       OpenBSD/sparc core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042600413       OpenBSD/pmax demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042600410       OpenBSD/pmax pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042600407       OpenBSD/pmax
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       042600507       OpenBSD/pmax core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       043000413       OpenBSD/vax demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043000410       OpenBSD/vax pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043000407       OpenBSD/vax
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       043000507       OpenBSD/vax core
->12    string                  >\0             from '%s'
-
-# OpenBSD/alpha does not support (and has never supported) a.out objects,
-# so no rules are provided for them.  OpenBSD/alpha ELF objects are 
-# dealt with in "elf".
-0      leshort         0x00070185              ECOFF OpenBSD/alpha binary
->10    leshort         0x0001                  not stripped
->10    leshort         0x0000                  stripped
-0      belong&0377777777       043200507       OpenBSD/alpha core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       043400413       OpenBSD/mips demand paged
->0     byte                    &0x80           
->>20   belong                  <8192           shared library
->>20   belong                  =8192           dynamically linked executable
->>20   belong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       043400410       OpenBSD/mips pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       043400407       OpenBSD/mips
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       043400507       OpenBSD/mips core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       043600413       OpenBSD/arm32 demand paged
->0     byte                    &0x80
->>20   lelong                  <8192           shared library
->>20   lelong                  =8192           dynamically linked executable
->>20   lelong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043600410       OpenBSD/arm32 pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043600407       OpenBSD/arm32
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       043600507       OpenBSD/arm32 core
->12    string                  >\0             from '%s'
diff --git a/file/magdir/adventure b/file/magdir/adventure
deleted file mode 100644 (file)
index 38a5e33..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#------------------------------------------------------------------------------
-# adventure: file(1) magic for Adventure game files
-#
-# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
-# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998
-#
-# ALAN
-# I assume there are other, lower versions, but these are the only ones I
-# saw in the archive.
-0      beshort 0x0206  ALAN text adventure code data
->2     byte    <10     version 2.6%d
-
-# Conflicts with too much other stuff!
-# Infocom
-# (Note: to avoid false matches Z-machine version 1 and 2 are not
-# recognized since only the oldest Zork I and II used them.  Similarly
-# there are 4 Infocom games that use verion 4 that are not recognized.)
-#0     byte    3       Infocom game data (Z-machine 3,
-#>2    beshort <0x7fff Release %3d,
-#>26   beshort >0      Size %d*2
-#>18   string  >\0     Serial %.6s)
-#0     byte    5       Infocom game data (Z-machine 5,
-#>2    beshort <0x7fff Release %3d,
-#>26   beshort >0      Size %d*4
-#>18   string  >\0     Serial %.6s)
-#0     byte    6       Infocom game data (Z-machine 6,
-#>2    beshort <0x7fff Release %3d,
-#>26   beshort >0      Size %d*8
-#>18   string  >\0     Serial %.6s)
-#0     byte    8       Infocom game data (Z-machine 8,
-#>2    beshort <0x7fff Release %3d,
-#>26   beshort >0      Size %d*8
-#>18   string  >\0     Serial %.6s)
-
-# TADS (Text Adventure Development System)
-0      string  TADS    TADS game data
->13    string  >\0     (ver. %.6s,
->22    string  >\0     date %s)
diff --git a/file/magdir/alliant b/file/magdir/alliant
deleted file mode 100644 (file)
index 69cf4b4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#------------------------------------------------------------------------------
-# alliant:  file(1) magic for Alliant FX series a.out files
-#
-# If the FX series is the one that had a processor with a 68K-derived
-# instruction set, the "short" should probably become "beshort" and the
-# "long" should probably become "belong".
-# If it's the i860-based one, they should probably become either the
-# big-endian or little-endian versions, depending on the mode they ran
-# the 860 in....
-#
-0      short           0420            0420 Alliant virtual executable
->2     short           &0x0020         common library
->16    long            >0              not stripped
-0      short           0421            0421 Alliant compact executable
->2     short           &0x0020         common library
->16    long            >0              not stripped
diff --git a/file/magdir/alpha b/file/magdir/alpha
deleted file mode 100644 (file)
index 1a8cb14..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#------------------------------------------------------------------------------
-# alpha architecture description
-#
-
-0      leshort         0603            COFF format alpha
->22    leshort&030000  !020000         executable
->24    leshort         0410            pure
->24    leshort         0413            paged
->22    leshort&020000  !0              dynamically linked
->16    lelong          !0              not stripped
->16    lelong          0               stripped
->22    leshort&030000  020000          shared library
->24    leshort         0407            object
->27    byte            x               - version %d
->26    byte            x               \b.%d
->28    byte            x               \b-%d
-
-# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
-#
-0      string          Core\001        Alpha COFF format core dump (Digital UNIX)
->24    string          >\0             \b, from '%s'
diff --git a/file/magdir/amanda b/file/magdir/amanda
deleted file mode 100644 (file)
index 57c4359..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#------------------------------------------------------------------------------
-# 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
diff --git a/file/magdir/amigaos b/file/magdir/amigaos
deleted file mode 100644 (file)
index 6073936..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#------------------------------------------------------------------------------
-# amigaos:  file(1) magic for AmigaOS binary formats:
-
-#
-# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)
-# Some formats are still missing: AmigaOS special IFF's, e.g.: FORM....CTLG
-# (the others should be seperate, anyway)
-#
-0      belong          0x000003f3      AmigaOS loadseg()ble executable/binary
-0      belong          0x000003e7      AmigaOS object/library data
diff --git a/file/magdir/animation b/file/magdir/animation
deleted file mode 100644 (file)
index 9d2dc8e..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#------------------------------------------------------------------------------
-# animation:  file(1) magic for animation/movie formats
-#
-# animation formats
-# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
-# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
-
-# MPEG animation format
-0      string          \000\000\001\263        MPEG file
-
-# FLI animation format
-4      leshort         0xAF11                  FLI file
->6     leshort         x                       - %d frames,
->8     leshort         x                       width=%d pixels,
->10    leshort         x                       height=%d pixels,
->12    leshort         x                       depth=%d,
->16    leshort         x                       ticks/frame=%d
-# FLC animation format
-4      leshort         0xAF12                  FLC file
->6     leshort         x                       - %d frames
->8     leshort         x                       width=%d pixels,
->10    leshort         x                       height=%d pixels,
->12    leshort         x                       depth=%d,
->16    leshort         x                       ticks/frame=%d
-
-# DL animation format
-# XXX - collision with most `mips' magic
-#
-# I couldn't find a real magic number for these, however, this
-# -appears- to work.  Note that it might catch other files, too, so be
-# careful!
-#
-# Note that title and author appear in the two 20-byte chunks
-# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
-# 255 (hex FF)!  The DL format is really bad.
-#
-#0     byte    1       DL version 1, medium format (160x100, 4 images/screen)
-#>42   byte    x       - %d screens,
-#>43   byte    x       %d commands
-#0     byte    2       DL version 2
-#>1    byte    1       - large format (320x200,1 image/screen),
-#>1    byte    2       - medium format (160x100,4 images/screen),
-#>1    byte    >2      - unknown format,
-#>42   byte    x       %d screens,
-#>43   byte    x       %d commands
-# Based on empirical evidence, DL version 3 have several nulls following the
-# \003.  Most of them start with non-null values at hex offset 0x34 or so.
-#0     string  \3\0\0\0\0\0\0\0\0\0\0\0        DL version 3
-
-# SGI and Apple formats
-0      string          MOVI            Silicon Graphics movie file
-4      string          moov            Apple QuickTime movie file (moov)
-4      string          mdat            Apple QuickTime movie file (mdat)
diff --git a/file/magdir/apl b/file/magdir/apl
deleted file mode 100644 (file)
index 0400431..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#------------------------------------------------------------------------------
-# apl:  file(1) magic for APL (see also "pdp" and "vax" for other APL
-#       workspaces)
-#
-0      long            0100554         APL workspace (Ken's original?)
diff --git a/file/magdir/apple b/file/magdir/apple
deleted file mode 100644 (file)
index 306cfc3..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#------------------------------------------------------------------------------
-# apple:  file(1) magic for Apple II file formats
-#
-0      string          FiLeStArTfIlEsTaRt      binscii (apple ][) text
-0      string          \x0aGL                  Binary II (apple ][) data
-0      string          \x76\xff                Squeezed (apple ][) data
-0      string          N\365F\351l\345         NuFile archive (apple ][) data
-# apple: PEF
-0      string          Joy!                    PEF binary
diff --git a/file/magdir/applix b/file/magdir/applix
deleted file mode 100644 (file)
index 9d348d1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#------------------------------------------------------------------------------
-# applix:  file(1) magic for Applixware
-# From: Peter Soos <sp@osb.hu>
-#
-0      string          *BEGIN          Applixware
->7     string          WORDS                   Words Document
->7     string          GRAPHICS                Graphic
->7     string          RASTER                  Bitmap
->7     string          SPREADSHEETS            Spreadsheet
->7     string          MACRO                   Macro
->7     string          BUILDER                 Builder Object
diff --git a/file/magdir/archive b/file/magdir/archive
deleted file mode 100644 (file)
index f266b19..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-
-#------------------------------------------------------------------------------
-# archive:  file(1) magic for archive formats (see also "msdos" for self-
-#           extracting compressed archives)
-#
-# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
-# pre-POSIX "tar" archives are handled in the C code.
-
-# POSIX tar archives
-257    string          ustar\0         POSIX tar archive
-257    string          ustar\040\040\0 GNU tar archive
-
-# cpio archives
-#
-# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
-# The idea is to indicate archives produced on machines with the same
-# byte order as the machine running "file" with "cpio archive", and
-# to indicate archives produced on machines with the opposite byte order
-# from the machine running "file" with "byte-swapped cpio archive".
-#
-# The SVR4 "cpio(4)" hints that there are additional formats, but they
-# are defined as "short"s; I think all the new formats are
-# character-header formats and thus are strings, not numbers.
-0      short           070707          cpio archive
-0      short           0143561         byte-swapped cpio archive
-0      string          070707          ASCII cpio archive (pre-SVR4 or odc)
-0      string          070701          ASCII cpio archive (SVR4 with no CRC)
-0      string          070702          ASCII cpio archive (SVR4 with CRC)
-
-# other archives
-0      long            0177555         very old archive
-0      short           0177555         very old PDP-11 archive
-0      long            0177545         old archive
-0      short           0177545         old PDP-11 archive
-0      long            0100554         apl workspace
-0      string          =<ar>           archive
-
-# MIPS archive (needs to go first)
-#
-0      string  !<arch>\n__________E    MIPS archive
->20    string  U                       with MIPS Ucode members
->21    string  L                       with MIPSEL members
->21    string  B                       with MIPSEB members
->19    string  L                       and an EL hash table
->19    string  B                       and an EB hash table
->22    string  X                       -- out of date
-
-0      string          -h-             Software Tools format archive text
-
-#
-# XXX - why are there multiple <ar> thingies?  Note that 0x213c6172 is
-# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
-#
-# 0    string          !<arch>         current ar archive
-# 0    long            0x213c6172      archive file
-#
-# and for SVR1 archives, we have:
-#
-# 0    string          \<ar>           System V Release 1 ar archive
-# 0    string          =<ar>           archive
-#
-# XXX - did Aegis really store shared libraries, breakpointed modules,
-# and absolute code program modules in the same format as new-style
-# "ar" archives?
-#
-0      string          !<arch>         current ar archive
->8     string          __.SYMDEF       random library
->8     string          debian-split    part of multipart Debian package
->8     string          debian-binary   Debian binary package
->0     belong          =65538          - pre SR9.5
->0     belong          =65539          - post SR9.5
->0     beshort         2               - object archive
->0     beshort         3               - shared library module
->0     beshort         4               - debug break-pointed module
->0     beshort         5               - absolute code program module
-0      string          \<ar>           System V Release 1 ar archive
-0      string          =<ar>           archive
-#
-# XXX - from "vax", which appears to collect a bunch of byte-swapped
-# thingies, to help you recognize VAX files on big-endian machines;
-# with "leshort", "lelong", and "string", that's no longer necessary....
-#
-0      belong          0x65ff0000      VAX 3.0 archive
-0      belong          0x3c61723e      VAX 5.0 archive
-#
-0      long            0x213c6172      archive file
-0      lelong          0177555         very old VAX archive
-0      leshort         0177555         very old PDP-11 archive
-#
-# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
-# be a random library (it said 0xff65 rather than 0177545).
-#
-0      lelong          0177545         old VAX archive
->8     string          __.SYMDEF       random library
-0      leshort         0177545         old PDP-11 archive
->8     string          __.SYMDEF       random library
-#
-# From "pdp" (but why a 4-byte quantity?)
-#
-0      lelong          0x39bed         PDP-11 old archive
-0      lelong          0x39bee         PDP-11 4.0 archive
-
-# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
-#
-# The first byte is the magic (0x1a), byte 2 is the compression type for
-# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
-# filename of the first file (null terminated).  Since some types collide
-# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
-# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%).  0x01 collides with terminfo.
-0      lelong&0x8080ffff       0x0000081a      ARC archive data, dynamic LZW
-0      lelong&0x8080ffff       0x0000091a      ARC archive data, squashed
-0      lelong&0x8080ffff       0x0000021a      ARC archive data, uncompressed
-0      lelong&0x8080ffff       0x0000031a      ARC archive data, packed
-0      lelong&0x8080ffff       0x0000041a      ARC archive data, squeezed
-0      lelong&0x8080ffff       0x0000061a      ARC archive data, crunched
-
-# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
-# I can't create either SPARK or ArcFS archives so I have not tested this stuff
-# [GRR:  the original entries collide with ARC, above; replaced with combined
-#  version (not tested)]
-#0     byte            0x1a            RISC OS archive
-#>1    string          archive         (ArcFS format)
-0      string          \032archive     RISC OS archive (ArcFS format)
-
-# ARJ archiver (jason@jarthur.Claremont.EDU)
-0      leshort         0xea60          ARJ archive data
->5     byte            x               \b, v%d,
->8     byte            &0x04           multi-volume,
->8     byte            &0x10           slash-switched,
->8     byte            &0x20           backup,
->34    string          x               original name: %s,
->7     byte            0               os: MS-DOS
->7     byte            1               os: PRIMOS
->7     byte            2               os: Unix
->7     byte            3               os: Amiga
->7     byte            4               os: Macintosh
->7     byte            5               os: OS/2
->7     byte            6               os: Apple ][ GS
->7     byte            7               os: Atari ST
->7     byte            8               os: NeXT
->7     byte            9               os: VAX/VMS
->3     byte            >0              %d]
-
-# HA archiver (Greg Roelofs, newt@uchicago.edu)
-# This is a really bad format. A file containing HAWAII will match this...
-#0     string          HA              HA archive data,
-#>2    leshort         =1              1 file,
-#>2    leshort         >1              %u files,
-#>4    byte&0x0f       =0              first is type CPY
-#>4    byte&0x0f       =1              first is type ASC
-#>4    byte&0x0f       =2              first is type HSC
-#>4    byte&0x0f       =0x0e           first is type DIR
-#>4    byte&0x0f       =0x0f           first is type SPECIAL
-
-# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
-0      string          HPAK            HPACK archive data
-
-# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
-0      string          \351,\001JAM\           JAM archive,
->7     string          >\0                     version %.4s
->0x26  byte            =0x27                   -
->>0x2b string          >\0                     label %.11s,
->>0x27 lelong          x                       serial %08x,
->>0x36 string          >\0                     fstype %.8s
-
-# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
-2      string          -lh0-           LHarc 1.x archive data [lh0]
-2      string          -lh1-           LHarc 1.x archive data [lh1]
-2      string          -lz4-           LHarc 1.x archive data [lz4]
-2      string          -lz5-           LHarc 1.x archive data [lz5]
-#      [never seen any but the last; -lh4- reported in comp.compression:]
-2      string          -lzs-           LHa 2.x? archive data [lzs]
-2      string          -lh -           LHa 2.x? archive data [lh ]
-2      string          -lhd-           LHa 2.x? archive data [lhd]
-2      string          -lh2-           LHa 2.x? archive data [lh2]
-2      string          -lh3-           LHa 2.x? archive data [lh3]
-2      string          -lh4-           LHa (2.x) archive data [lh4]
-2      string          -lh5-           LHa (2.x) archive data [lh5]
->20    byte            x               - header level %d
-
-# RAR archiver (Greg Roelofs, newt@uchicago.edu)
-0      string          Rar!            RAR archive data
-
-# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
-0      string          SQSH            squished archive data (Acorn RISCOS)
-
-# UC2 archiver (Greg Roelofs, newt@uchicago.edu)
-# I can't figure out the self-extracting form of these buggers...
-0      string          UC2\x1a         UC2 archive data
-
-# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
-0      string          PK\003\004      Zip archive data
->4     byte            0x09            \b, at least v0.9 to extract
->4     byte            0x0a            \b, at least v1.0 to extract
->4     byte            0x0b            \b, at least v1.1 to extract
->4     byte            0x14            \b, at least v2.0 to extract
-
-# Zoo archiver
-20     lelong          0xfdc4a7dc      Zoo archive data
->4     byte            >48             \b, v%c.
->>6    byte            >47             \b%c
->>>7   byte            >47             \b%c
->32    byte            >0              \b, modify: v%d
->>33   byte            x               \b.%d+
->42    lelong          0xfdc4a7dc      \b,
->>70   byte            >0              extract: v%d
->>>71  byte            x               \b.%d+
-
-# Shell archives
-10     string          #\ This\ is\ a\ shell\ archive  shell archive text
diff --git a/file/magdir/asterix b/file/magdir/asterix
deleted file mode 100644 (file)
index d89504a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#------------------------------------------------------------------------------
-# asterix:  file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
-# strings as "long" - we assume they're just strings:
-# From: guy@netapp.com (Guy Harris)
-#
-0      string          *STA            Aster*x
->7     string          WORD                    Words Document
->7     string          GRAP                    Graphic
->7     string          SPRE                    Spreadsheet
->7     string          MACR                    Macro
-0      string          2278            Aster*x Version 2
->29    byte            0x36                    Words Document
->29    byte            0x35                    Graphic
->29    byte            0x32                    Spreadsheet
->29    byte            0x38                    Macro
-
diff --git a/file/magdir/att3b b/file/magdir/att3b
deleted file mode 100644 (file)
index 7723a7f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-#------------------------------------------------------------------------------
-# att3b:  file(1) magic for AT&T 3B machines
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-# 3B20
-#
-0      beshort         0550            3b20 COFF executable
->12    belong          >0              not stripped
-#>22   beshort         >0              - version %ld
-0      beshort         0551            3b20 COFF executable (TV)
->12    belong          >0              not stripped
-#>22   beshort         >0              - version %ld
-#
-# WE32K
-#
-0      beshort         0560            WE32000 COFF
->18    beshort         ^00000020       object
->18    beshort         &00000020       executable
->12    belong          >0              not stripped
->18    beshort         ^00010000       N/A on 3b2/300 w/paging
->18    beshort         &00020000       32100 required
->18    beshort         &00040000       and MAU hardware required
->20    beshort         0407            (impure)
->20    beshort         0410            (pure)
->20    beshort         0413            (demand paged)
->20    beshort         0443            (target shared library)
->22    beshort         >0              - version %ld
-0      beshort         0561            WE32000 COFF executable (TV)
->12    belong          >0              not stripped
-#>18   beshort         &00020000       - 32100 required
-#>18   beshort         &00040000       and MAU hardware required
-#>22   beshort         >0              - version %ld
-#
-# core file for 3b2 
-0      string          \000\004\036\212\200    3b2 core file
->364   string          >\0             of '%s'
diff --git a/file/magdir/audio b/file/magdir/audio
deleted file mode 100644 (file)
index 50b88bc..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-
-#------------------------------------------------------------------------------
-# audio:  file(1) magic for sound formats (see also "iff")
-#
-# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
-# and others
-#
-
-# Sun/NeXT audio data
-0      string          .snd            Sun/NeXT audio data:
->12    belong          1               8-bit ISDN u-law,
->12    belong          2               8-bit linear PCM [REF-PCM],
->12    belong          3               16-bit linear PCM,
->12    belong          4               24-bit linear PCM,
->12    belong          5               32-bit linear PCM,
->12    belong          6               32-bit IEEE floating point,
->12    belong          7               64-bit IEEE floating point,
->12    belong          23              8-bit ISDN u-law compressed (CCITT G.721 ADPCM voice data encoding),
->12    belong          24              compressed (8-bit G.722 ADPCM)
->12    belong          25              compressed (3-bit G.723 ADPCM),
->12    belong          26              compressed (5-bit G.723 ADPCM),
->12    belong          27              8-bit A-law,
->20    belong          1               mono,
->20    belong          2               stereo,
->20    belong          4               quad,
->16    belong          >0              %d Hz
-
-# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
-# that uses little-endian encoding and has a different magic number
-0      lelong          0x0064732E      DEC audio data:
->12    lelong          1               8-bit ISDN u-law,
->12    lelong          2               8-bit linear PCM [REF-PCM],
->12    lelong          3               16-bit linear PCM,
->12    lelong          4               24-bit linear PCM,
->12    lelong          5               32-bit linear PCM,
->12    lelong          6               32-bit IEEE floating point,
->12    lelong          7               64-bit IEEE floating point,
->12    lelong          23              8-bit ISDN u-law compressed (CCITT G.721 ADPCM voice data encoding),
->20    lelong          1               mono,
->20    lelong          2               stereo,
->20    lelong          4               quad,
->16    lelong          >0              %d Hz
-
-# Creative Labs AUDIO stuff
-0      string  MThd                    Standard MIDI data
->9     byte    >0                      (format %d)
->11    byte    >1                      using %d channels
-0      string  CTMF                    Creative Music (CMF) data
-0      string  SBI                     SoundBlaster instrument data
-0      string  Creative\ Voice\ File   Creative Labs voice data
-# is this next line right?  it came this way...
->19    byte    0x1A
->23    byte    >0                      - version %d
->22    byte    >0                      \b.%d
-
-# first entry is also the string "NTRK"
-0      belong          0x4e54524b      MultiTrack sound data
->4     belong          x               - version %ld
-
-# Microsoft WAVE format (*.wav)
-0      string          RIFF            Microsoft RIFF
->8     string          WAVE            \b, WAVE audio data
->>34   leshort         >0              \b, %d bit
->>22   leshort         =1              \b, mono
->>22   leshort         =2              \b, stereo
->>22   leshort         >2              \b, %d channels
->>24   lelong          >0              %d Hz
-# AVI == Audio Video Interleave
->8     string          AVI\            \b, AVI data
-
-# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED
-# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
-0      string          EMOD            Extended MOD sound data,
->4     byte&0xf0       x               version %d
->4     byte&0x0f       x               \b.%d,
->45    byte            x               %d instruments
->83    byte            0               (module)
->83    byte            1               (song)
-
-# Real Audio (Magic .ra\0375)
-0      belong          0x2e7261fd      realaudio sound file
-
-# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
-# Oct 31, 1995
-0      string          MTM             MultiTracker Module sound file
-0      string          if              Composer 669 Module sound data
-0      string          FAR             Module sound data
-0      string          MAS_U           ULT(imate) Module sound data
-0x2c   string          SCRM            ScreamTracker III Module sound data
-0      string          Extended Module Extended Module sound data
diff --git a/file/magdir/blit b/file/magdir/blit
deleted file mode 100644 (file)
index 7a470ed..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#------------------------------------------------------------------------------
-# blit:  file(1) magic for 68K Blit stuff as seen from 680x0 machine
-#
-# Note that this 0407 conflicts with several other a.out formats...
-#
-# XXX - should this be redone with "be" and "le", so that it works on
-# little-endian machines as well?  If so, what's the deal with
-# "VAX-order" and "VAX-order2"?
-#
-#0     long            0407            68K Blit (standalone) executable
-#0     short           0407            VAX-order2 68K Blit (standalone) executable
-0      short           03401           VAX-order 68K Blit (standalone) executable
-0      long            0406            68k Blit mpx/mux executable
-0      short           0406            VAX-order2 68k Blit mpx/mux executable
-0      short           03001           VAX-order 68k Blit mpx/mux executable
-# Need more values for WE32 DMD executables.
-# Note that 0520 is the same as COFF
-#0     short           0520            tty630 layers executable
diff --git a/file/magdir/bsdi b/file/magdir/bsdi
deleted file mode 100644 (file)
index 2e3b646..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# bsdi:  file(1) magic for BSD/OS (from BSDI) objects
-#
-0      lelong                  000000314       BSD/OS i386 compact demand paged executable
->16    lelong                  >0              not stripped
->32    byte                    0x6a            (uses shared libs)
diff --git a/file/magdir/c-lang b/file/magdir/c-lang
deleted file mode 100644 (file)
index 1b01475..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#------------------------------------------------------------------------------
-# c-lang:  file(1) magic for C programs (or REXX)
-#
-
-# XPM icons (Greg Roelofs, newt@uchicago.edu)
-# if you uncomment "/*" for C/REXX below, also uncomment this entry
-#0     string          /*\ XPM\ */     X pixmap image data
-
-# this first will upset you if you're a PL/1 shop...
-# in which case rm it; ascmagic will catch real C programs
-#0     string          /*              C or REXX program text
-0      string          //              C++ program text
diff --git a/file/magdir/chi b/file/magdir/chi
deleted file mode 100644 (file)
index ee450f5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# chi:  file(1) magic for ChiWriter files
-#
-0       string          \\1cw\          ChiWriter file
->5      string          >\0             version %s
-0       string          \\1cw           ChiWriter file
diff --git a/file/magdir/cisco b/file/magdir/cisco
deleted file mode 100644 (file)
index 77e3efb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#------------------------------------------------------------------------------
-# cisco:  file(1) magic for cisco Systems routers
-#
-# Most cisco file-formats are covered by the generic elf code
-#
-# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
-0      belong&0xffffff00       0x85011400  cisco IOS microcode
->7     string          >\0                 for '%s'
-0      belong&0xffffff00       0x8501cb00  cisco IOS experimental microcode
->7     string          >\0                 for '%s'
diff --git a/file/magdir/clipper b/file/magdir/clipper
deleted file mode 100644 (file)
index c325cb8..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-#------------------------------------------------------------------------------
-# clipper:  file(1) magic for Intergraph (formerly Fairchild) Clipper.
-#
-# XXX - what byte order does the Clipper use?
-#
-# XXX - what's the "!" stuff:
-#
-# >18  short           !074000,000000  C1 R1 
-# >18  short           !074000,004000  C2 R1
-# >18  short           !074000,010000  C3 R1
-# >18  short           !074000,074000  TEST
-#
-# I shall assume it's ANDing the field with the first value and
-# comparing it with the second, and rewrite it as:
-#
-# >18  short&074000    000000          C1 R1 
-# >18  short&074000    004000          C2 R1
-# >18  short&074000    010000          C3 R1
-# >18  short&074000    074000          TEST
-#
-# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
-# sort, nor does SunOS 4.x, so either it's something Intergraph added
-# in CLIX, or something AT&T added in SVR3.2 or later, or something
-# somebody else thought was a good idea; it's not documented in the
-# man page for this version of "magic", nor does it appear to be
-# implemented (at least not after I blew off the bogus code to turn
-# old-style "&"s into new-style "&"s, which just didn't work at all).
-#
-0      short           0575            CLIPPER COFF executable (VAX #)
->20    short           0407            (impure)
->20    short           0410            (5.2 compatible)
->20    short           0411            (pure)
->20    short           0413            (demand paged)
->20    short           0443            (target shared library)
->12    long            >0              not stripped
->22    short           >0              - version %ld
-0      short           0577            CLIPPER COFF executable
->18    short&074000    000000          C1 R1 
->18    short&074000    004000          C2 R1
->18    short&074000    010000          C3 R1
->18    short&074000    074000          TEST
->20    short           0407            (impure)
->20    short           0410            (pure)
->20    short           0411            (separate I&D)
->20    short           0413            (paged)
->20    short           0443            (target shared library)
->12    long            >0              not stripped
->22    short           >0              - version %ld
->48    long&01         01              alignment trap enabled
->52    byte            1               -Ctnc
->52    byte            2               -Ctsw
->52    byte            3               -Ctpw
->52    byte            4               -Ctcb
->53    byte            1               -Cdnc
->53    byte            2               -Cdsw
->53    byte            3               -Cdpw
->53    byte            4               -Cdcb
->54    byte            1               -Csnc
->54    byte            2               -Cssw
->54    byte            3               -Cspw
->54    byte            4               -Cscb
-4      string          pipe            CLIPPER instruction trace
-4      string          prof            CLIPPER instruction profile
diff --git a/file/magdir/commands b/file/magdir/commands
deleted file mode 100644 (file)
index 8a27607..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-
-#------------------------------------------------------------------------------
-# commands:  file(1) magic for various shells and interpreters
-#
-0      string          :\ shell archive or commands for antique kernel text
-0      string          #!/bin/sh               Bourne shell script text
-0      string          #!\ /bin/sh             Bourne shell script text
-0      string          #!/bin/csh              C shell script text
-0      string          #!\ /bin/csh            C shell script text
-# korn shell magic, sent by George Wu, gwu@clyde.att.com
-0      string          #!/bin/ksh              Korn shell script text
-0      string          #!\ /bin/ksh            Korn shell script text
-0      string          #!/bin/tcsh             Tenex C shell script text
-0      string          #!\ /bin/tcsh           Tenex C shell script text
-0      string          #!/usr/local/tcsh       Tenex C shell script text
-0      string          #!\ /usr/local/tcsh     Tenex C shell script text
-0      string          #!/usr/local/bin/tcsh   Tenex C shell script text
-0      string          #!\ /usr/local/bin/tcsh Tenex C shell script text
-#
-# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
-0      string          #!/usr/local/bin/zsh    Paul Falstad's zsh
-0      string          #!\ /usr/local/bin/zsh  Paul Falstad's zsh
-0      string          #!/usr/local/bin/ash    Neil Brown's ash
-0      string          #!\ /usr/local/bin/ash  Neil Brown's ash
-0      string          #!/usr/local/bin/ae     Neil Brown's ae
-0      string          #!\ /usr/local/bin/ae   Neil Brown's ae
-0      string          #!/bin/nawk             new awk script text
-0      string          #!\ /bin/nawk           new awk script text
-0      string          #!/usr/bin/nawk         new awk script text
-0      string          #!\ /usr/bin/nawk       new awk script text
-0      string          #!/usr/local/bin/nawk   new awk script text
-0      string          #!\ /usr/local/bin/nawk new awk script text
-0      string          #!/bin/gawk             GNU awk script text
-0      string          #!\ /bin/gawk           GNU awk script text
-0      string          #!/usr/bin/gawk         GNU awk script text
-0      string          #!\ /usr/bin/gawk       GNU awk script text
-0      string          #!/usr/local/bin/gawk   GNU awk script text
-0      string          #!\ /usr/local/bin/gawk GNU awk script text
-#
-0      string          #!/bin/awk              awk commands text
-0      string          #!\ /bin/awk            awk commands text
-0      string          #!/usr/bin/awk          awk commands text
-0      string          #!\ /usr/bin/awk        awk commands text
-0      string          BEGIN                   awk commands text
-
-# For Larry Wall's perl language.  The ``eval'' line recognizes an
-# outrageously clever hack for USG systems.
-#                              Keith Waclena <keith@cerberus.uchicago.edu>
-0      string          #!/bin/perl                     perl commands text
-0      string          #!\ /bin/perl                   perl commands text
-0      string          eval\ "exec\ /bin/perl          perl commands text
-0      string          #!/usr/bin/perl                 perl commands text
-0      string          #!\ /usr/bin/perl               perl commands text
-0      string          eval\ "exec\ /usr/bin/perl      perl commands text
-0      string          #!/usr/local/bin/perl           perl commands text
-0      string          #!\ /usr/local/bin/perl         perl commands text
-0      string          eval\ "exec\ /usr/local/bin/perl        perl commands text
-
-# AT&T Bell Labs' Plan 9 shell
-0      string          #!/bin/rc       Plan 9 rc shell script text
-0      string          #!\ /bin/rc     Plan 9 rc shell script text
-
-# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
-0      string          #!/bin/bash     Bourne-Again shell script text
-0      string          #!\ /bin/bash   Bourne-Again shell script text
-0      string          #!/usr/local/bin/bash   Bourne-Again shell script text
-0      string          #!\ /usr/local/bin/bash Bourne-Again shell script text
-
-# generic shell magic
-0      string          #!\ /                   a
->3     string          >\0                     %s script text
-0      string          #!/                     a
->2     string          >\0                     %s script text
-0      string          #!\                     commands text
->3     string          >\0                     for %s
diff --git a/file/magdir/compress b/file/magdir/compress
deleted file mode 100644 (file)
index a797f8f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-#------------------------------------------------------------------------------
-# compress:  file(1) magic for pure-compression formats (no archives)
-#
-# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
-#
-# Formats for various forms of compressed data
-# Formats for "compress" proper have been moved into "compress.c",
-# because it tries to uncompress it to figure out what's inside.
-
-# standard unix compress
-0      string          \037\235        compress'd data
->2     byte&0x80       >0              block compressed
->2     byte&0x1f       x               %d bits
-
-# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
-0       string          \037\213        gzip compressed data
->2      byte            <8              \b, reserved method,
->2      byte            8               \b, deflated,
->3     byte            &0x01           ASCII,
->3     byte            &0x02           continuation,
->3     byte            &0x04           extra field,
->3     byte            &0x08           original filename,
->3     byte            &0x10           comment,
->3     byte            &0x20           encrypted,
->4     ledate          x               last modified: %s,
->8     byte            2               max compression,
->8     byte            4               max speed,
->9     byte            =0x00           os: MS-DOS
->9     byte            =0x01           os: Amiga
->9     byte            =0x02           os: VMS
->9     byte            =0x03           os: Unix
->9     byte            =0x05           os: Atari
->9     byte            =0x06           os: OS/2
->9     byte            =0x07           os: MacOS
->9     byte            =0x0A           os: Tops/20
->9     byte            =0x0B           os: Win/32
-
-# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
-0      string          \037\036        packed data
->2     belong          >1              \b, %d characters originally
->2     belong          =1              \b, %d character originally
-#
-# This magic number is byte-order-independent.  XXX - Does that mean this
-# is big-endian, little-endian, either, or that you can't tell?
-# this short is valid for SunOS
-0      short           017437          old packed data
-
-# XXX - why *two* entries for "compacted data", one of which is
-# byte-order independent, and one of which is byte-order dependent?
-#
-0      short           0x1fff          compacted data
-# This string is valid for SunOS (BE) and a matching "short" is listed
-# in the Ultrix (LE) magic file.
-0      string          \377\037        compacted data
-0      short           0145405         huf output
-
-# Squeeze and Crunch...
-# These numbers were gleaned from the Unix versions of the programs to
-# handle these formats.  Note that I can only uncrunch, not crunch, and
-# I didn't have a crunched file handy, so the crunch number is untested.
-#                              Keith Waclena <keith@cerberus.uchicago.edu>
-0      leshort         0x76FF          squeezed data (CP/M, DOS)
-0      leshort         0x76FE          crunched data (CP/M, DOS)
-
-# Freeze
-0      string          \037\237        frozen file 2.1
-0      string          \037\236        frozen file 1.0 (or gzip 0.5)
-
-# SCO compress -H (LZH)
-0      string          \037\240        SCO compress -H (LZH) data
-
-# European GSM 06.10 is a provisional standard for full-rate speech
-# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
-# excitation/long term prediction) coding at 13 kbit/s.
-#
-# There's only a magic nibble (4 bits); that nibble repeats every 33
-# bytes.  This isn't suited for use, but maybe we can use it someday.
-#
-# This will cause very short GSM files to be declared as data and
-# mismatches to be declared as data too!
-#0     byte&0xF0       0xd0            data
-#>33   byte&0xF0       0xd0
-#>66   byte&0xF0       0xd0
-#>99   byte&0xF0       0xd0
-#>132  byte&0xF0       0xd0            GSM 06.10 compressed audio
-
-# Bzip from ulmo@Q.Net
-0      string          BZ              bzip compressed data,
->2     byte            x               format v. %c,
->3     byte            x               block size indicator %c
-
diff --git a/file/magdir/convex b/file/magdir/convex
deleted file mode 100644 (file)
index b1235d7..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#------------------------------------------------------------------------------
-# convex:  file(1) magic for Convex boxes
-#
-# Convexes are big-endian.
-#
-# /*\
-#  * Below are the magic numbers and tests added for Convex.
-#  * Added at beginning, because they are expected to be used most.
-# \*/
-0      belong  0507    Convex old-style object
->16    belong  >0      not stripped
-0      belong  0513    Convex old-style demand paged executable
->16    belong  >0      not stripped
-0      belong  0515    Convex old-style pre-paged executable
->16    belong  >0      not stripped
-0      belong  0517    Convex old-style pre-paged, non-swapped executable
->16    belong  >0      not stripped
-0      belong  0x011257        Core file
-#
-# The following are a series of dump format magic numbers.  Each one
-# corresponds to a drastically different dump format.  The first on is
-# the original dump format on a 4.1 BSD or earlier file system.  The
-# second marks the change between the 4.1 file system and the 4.2 file
-# system.  The Third marks the changing of the block size from 1K
-# to 2K to be compatible with an IDC file system.  The fourth indicates
-# a dump that is dependent on Convex Storage Manager, because data in
-# secondary storage is not physically contained within the dump.
-# The restore program uses these number to determine how the data is
-# to be extracted.
-#
-24     belong  =60011  dump format, 4.1 BSD or earlier
-24     belong  =60012  dump format, 4.2 or 4.3 BSD without IDC
-24     belong  =60013  dump format, 4.2 or 4.3 BSD (IDC compatible)
-24     belong  =60014  dump format, Convex Storage Manager by-reference dump
-#
-# what follows is a bunch of bit-mask checks on the flags field of the opthdr.
-# If there is no `=' sign, assume just checking for whether the bit is set?
-#
-0      belong  0601            Convex SOFF
->88    belong&0x000f0000       =0x00000000     c1
->88    belong                  &0x00010000     c2
->88    belong                  &0x00020000     c2mp
->88    belong                  &0x00040000     parallel
->88    belong                  &0x00080000     intrinsic
->88    belong                  &0x00000001     demand paged
->88    belong                  &0x00000002     pre-paged
->88    belong                  &0x00000004     non-swapped
->88    belong                  &0x00000008     POSIX
-#
->84    belong                  &0x80000000     executable
->84    belong                  &0x40000000     object
->84    belong&0x20000000       =0              not stripped
->84    belong&0x18000000       =0x00000000     native fpmode
->84    belong&0x18000000       =0x10000000     ieee fpmode
->84    belong&0x18000000       =0x18000000     undefined fpmode
-#
-0      belong                  0605            Convex SOFF core
-#
-0      belong                  0607            Convex SOFF checkpoint
->88    belong&0x000f0000       =0x00000000     c1
->88    belong                  &0x00010000     c2
->88    belong                  &0x00020000     c2mp
->88    belong                  &0x00040000     parallel
->88    belong                  &0x00080000     intrinsic
->88    belong                  &0x00000008     POSIX
-#
->84    belong&0x18000000       =0x00000000     native fpmode
->84    belong&0x18000000       =0x10000000     ieee fpmode
->84    belong&0x18000000       =0x18000000     undefined fpmode
diff --git a/file/magdir/database b/file/magdir/database
deleted file mode 100644 (file)
index 146c310..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#------------------------------------------------------------------------------
-# database:  file(1) magic for various databases
-#
-# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
-#
-#
-# GDBM magic numbers
-#  Will be maintained as part of the GDBM distribution in the future.
-#  <downsj@teeny.org>
-0      belong  0x13579ace      GNU dbm 1.x or ndbm database, big endian
-0      lelong  0x13579ace      GNU dbm 1.x or ndbm database, little endian
-0      string  GDBM            GNU dbm 2.x database
-#
-0      belong  0x061561        Berkeley DB Hash file
->4     belong  >0              (Version %d,
->8     belong  1234            Little Endian,
->8     belong  4321            Big Endian,
->12    belong  x               Bucket Size %d,
->16    belong  x               Bucket Shift %d,
->20    belong  x               Directory Size %d,
->24    belong  x               Segment Size %d,
->28    belong  x               Segment Shift %d,
->32    belong  x               Overflow Point %d,
->36    belong  x               Last Freed %d,
->40    belong  x               Max Bucket %d,
->44    belong  x               High Mask 0x%x,
->48    belong  x               Low Mask 0x%x,
->52    belong  x               Fill Factor %d,
->56    belong  x               Number of Keys %d)
-#
-#
-0      belong  0x053162        Berkeley DB Btree file
->4     belong  >0              (Version %d,
->8     belong  x               Page Size %d,
->12    belong  x               Free Page %d,
->16    belong  x               Number of Records %d,
->20    belong  x               Flags 0x%x)
diff --git a/file/magdir/diamond b/file/magdir/diamond
deleted file mode 100644 (file)
index 1abd01e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#------------------------------------------------------------------------------
-# diamond:  file(1) magic for Diamond system
-#
-# ... diamond is a multi-media mail and electronic conferencing system....
-#
-# XXX - I think it was either renamed Slate, or replaced by Slate....
-#
-#      The full deal is too long...
-#0     string  <list>\n<protocol\ bbn-multimedia-format>       Diamond Multimedia Document
-0      string  =<list>\n<protocol\ bbn-m       Diamond Multimedia Document
diff --git a/file/magdir/diff b/file/magdir/diff
deleted file mode 100644 (file)
index 9e65146..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#------------------------------------------------------------------------------
-# diff:  file(1) magic for diff(1) output
-#
-0      string          diff\   'diff' output text
-0      string          ***\            'diff' output text
-0      string          Only\ in\       'diff' output text
-0      string          Common\ subdirectories:\        'diff' output text
diff --git a/file/magdir/digital b/file/magdir/digital
deleted file mode 100644 (file)
index 6a573a6..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#  Digital UNIX - Info
-#
-0      string  !<arch>\n________64E    Alpha archive
->22    string  X                       -- out of date
-#
-# Alpha COFF Based Executables
-# The stripped stuff really needs to be an 8 byte (64 bit) compare,
-# but this works
-0      leshort         0x183           COFF format alpha
->22    leshort&020000  &010000         sharable library,
->22    leshort&020000  ^010000         dynamically linked,
->24    leshort         0410            pure
->24    leshort         0413            demand paged
->8     lelong          >0              executable or object module, not stripped
->8     lelong          0
->>12   lelong          0               executable or object module, stripped
->>12   lelong          >0              executable or object module, not stripped
->27     byte            >0              - version %d.
->26     byte            >0              %d-
->28     leshort         >0              %d
-#
-# The next is incomplete, we could tell more about this format,
-# but its not worth it.
-0      leshort         0x188   Alpha compressed COFF
-0      leshort         0x18f   Alpha u-code object
-#
-#
-# Some other interesting Digital formats,
-0      string  \377\377\177            ddis/ddif
-0      string  \377\377\174            ddis/dots archive
-0      string  \377\377\176            ddis/dtif table data
-0      string  \033c\033               LN03 output
-0      long    04553207                X image
-#
-0      string  !<PDF>!\n               profiling data file
-#
-# Locale data tables (MIPS and Alpha).
-#
-0      short           0x0501          locale data table
->6     short           0x24            for MIPS
->6     short           0x40            for Alpha
diff --git a/file/magdir/dump b/file/magdir/dump
deleted file mode 100644 (file)
index 628ead8..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#------------------------------------------------------------------------------
-# dump:  file(1) magic for dump file format--for new and old dump filesystems
-#
-# We specify both byte orders in order to recognize byte-swapped dumps.
-#
-24     belong  60012           new-fs dump file (big endian),
->4     bedate  x               Previous dump %s,
->8     bedate  x               This dump %s,
->12    belong  >0              Volume %ld,
->692   belong  0               Level zero, type:
->692   belong  >0              Level %d, type:
->0     belong  1               tape header,
->0     belong  2               beginning of file record,
->0     belong  3               map of inodes on tape,
->0     belong  4               continuation of file record,
->0     belong  5               end of volume,
->0     belong  6               map of inodes deleted,
->0     belong  7               end of medium (for floppy),
->676   string  >\0             Label %s,
->696   string  >\0             Filesystem %s,
->760   string  >\0             Device %s,
->824   string  >\0             Host %s,
->888   belong  >0              Flags %x
-
-24     belong  60011           old-fs dump file (big endian),
-#>4    bedate  x               Previous dump %s,
-#>8    bedate  x               This dump %s,
->12    belong  >0              Volume %ld,
->692   belong  0               Level zero, type:
->692   belong  >0              Level %d, type:
->0     belong  1               tape header,
->0     belong  2               beginning of file record,
->0     belong  3               map of inodes on tape,
->0     belong  4               continuation of file record,
->0     belong  5               end of volume,
->0     belong  6               map of inodes deleted,
->0     belong  7               end of medium (for floppy),
->676   string  >\0             Label %s,
->696   string  >\0             Filesystem %s,
->760   string  >\0             Device %s,
->824   string  >\0             Host %s,
->888   belong  >0              Flags %x
-
-24     lelong  60012           new-fs dump file (little endian),
->4     ledate  x               This dump %s,
->8     ledate  x               Previous dump %s,
->12    lelong  >0              Volume %ld,
->692   lelong  0               Level zero, type:
->692   lelong  >0              Level %d, type:
->0     lelong  1               tape header,
->0     lelong  2               beginning of file record,
->0     lelong  3               map of inodes on tape,
->0     lelong  4               continuation of file record,
->0     lelong  5               end of volume,
->0     lelong  6               map of inodes deleted,
->0     lelong  7               end of medium (for floppy),
->676   string  >\0             Label %s,
->696   string  >\0             Filesystem %s,
->760   string  >\0             Device %s,
->824   string  >\0             Host %s,
->888   lelong  >0              Flags %x
-
-24     lelong  60011           old-fs dump file (little endian),
-#>4    ledate  x               Previous dump %s,
-#>8    ledate  x               This dump %s,
->12    lelong  >0              Volume %ld,
->692   lelong  0               Level zero, type:
->692   lelong  >0              Level %d, type:
->0     lelong  1               tape header,
->0     lelong  2               beginning of file record,
->0     lelong  3               map of inodes on tape,
->0     lelong  4               continuation of file record,
->0     lelong  5               end of volume,
->0     lelong  6               map of inodes deleted,
->0     lelong  7               end of medium (for floppy),
->676   string  >\0             Label %s,
->696   string  >\0             Filesystem %s,
->760   string  >\0             Device %s,
->824   string  >\0             Host %s,
->888   lelong  >0              Flags %x
diff --git a/file/magdir/elf b/file/magdir/elf
deleted file mode 100644 (file)
index 3da99d0..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-
-#------------------------------------------------------------------------------
-# elf:  file(1) magic for ELF executables
-#
-# We have to check the byte order flag to see what byte order all the
-# other stuff in the header is in.
-#
-# MIPS RS3000 may also be for MIPS RS2000.
-# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
-#
-# updated by Daniel Quinlan (quinlan@yggdrasil.com)
-0      string          \177ELF         ELF
->4     byte            0               invalid class
->4     byte            1               32-bit
->4     byte            2               64-bit
->5     byte            0               invalid byte order
->5     byte            1               LSB
->>16   leshort         0               no file type,
->>16   leshort         1               relocatable,
->>16   leshort         2               executable,
->>16   leshort         3               shared object,
-# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
->>16   leshort         4               core file
->>>400  lelong          >0              (signal %d),
->>16   leshort         &0xff00         processor-specific,
->>18   leshort         0               no machine,
->>18   leshort         1               AT&T WE32100 - invalid byte order,
->>18   leshort         2               SPARC - invalid byte order,
->>18   leshort         3               Intel 80386,
->>18   leshort         4               Motorola 68000 - invalid byte order,
->>18   leshort         5               Motorola 88000 - invalid byte order,
->>18   leshort         6               Intel 80486,
->>18   leshort         7               Intel 80860,
->>18   leshort         8               MIPS RS3000_BE - invalid byte order,
->>18   leshort         9               Amdahl - invalid byte order,
->>18   leshort         10              MIPS RS3000_LE,
->>18   leshort         11              RS6000 - invalid byte order,
->>18   leshort         15              PA-RISC - invalid byte order,
->>18   leshort         16              nCUBE,
->>18   leshort         17              VPP500,
->>18   leshort         18              SPARC32PLUS,
->>18   leshort         20              PowerPC,
->>18   leshort         0x9026          Alpha,
->>20   lelong          0               invalid version
->>20   lelong          1               version 1
->>36   lelong          1               MathCoPro/FPU/MAU Required
->5     byte            2               MSB
->>16   beshort         0               no file type,
->>16   beshort         1               relocatable,
->>16   beshort         2               executable,
->>16   beshort         3               shared object,
->>16   beshort         4               core file,
->>>400 lelong          >0              (signal %d),
->>16   beshort         &0xff00         processor-specific,
->>18   beshort         0               no machine,
->>18   beshort         1               AT&T WE32100,
->>18   beshort         2               SPARC,
->>18   beshort         3               Intel 80386 - invalid byte order,
->>18   beshort         4               Motorola 68000,
->>18   beshort         5               Motorola 88000,
->>18   beshort         6               Intel 80486 - invalid byte order,
->>18   beshort         7               Intel 80860,
->>18   beshort         8               MIPS RS3000_BE,
->>18   beshort         9               Amdahl,
->>18   beshort         10              MIPS RS3000_LE - invalid byte order,
->>18   beshort         11              RS6000,
->>18   beshort         15              PA-RISC,
->>18   beshort         16              nCUBE,
->>18   beshort         17              VPP500,
->>18   beshort         18              SPARC32PLUS,
->>18   beshort         20              PowerPC,
->>18   beshort         0x9026          Alpha,
->>20   belong          0               invalid version
->>20   belong          1               version 1
->>36   belong          1               MathCoPro/FPU/MAU Required
diff --git a/file/magdir/encore b/file/magdir/encore
deleted file mode 100644 (file)
index 63cb5d4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#------------------------------------------------------------------------------
-# encore:  file(1) magic for Encore machines
-#
-# XXX - needs to have the byte order specified (NS32K was little-endian,
-# dunno whether they run the 88K in little-endian mode or not).
-#
-0      short           0x154           Encore
->20    short           0x107           executable
->20    short           0x108           pure executable
->20    short           0x10b           demand-paged executable
->20    short           0x10f           unsupported executable
->12    long            >0              not stripped
->22    short           >0              - version %ld
->22    short           0               -
-#>4    date            x               stamp %s
-0      short           0x155           Encore unsupported executable
->12    long            >0              not stripped
->22    short           >0              - version %ld
->22    short           0               -
-#>4    date            x               stamp %s
diff --git a/file/magdir/filesystems b/file/magdir/filesystems
deleted file mode 100644 (file)
index 125250d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#------------------------------------------------------------------------------
-# filesystems:  file(1) magic for different filesystems
-#
-0x438  leshort 0xEF53                  Linux/i386 ext2 filesystem
-0      string  \366\366\366\366        PC formatted floppy with no filesystem
diff --git a/file/magdir/flash b/file/magdir/flash
deleted file mode 100644 (file)
index 1d6f7b7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#------------------------------------------------------------------------------
-# flash:       file(1) magic for Macromedia Flash file format
-#
-# See
-#
-#      http://www.macromedia.com/software/flash/open/
-#
-0      string          FWS             Macromedia Flash data,
->3     byte            x               version %d
diff --git a/file/magdir/fonts b/file/magdir/fonts
deleted file mode 100644 (file)
index dd7907f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#------------------------------------------------------------------------------
-# fonts:  file(1) magic for font data
-#
-0      string          FONT            ASCII vfont text
-0      short           0436            Berkeley vfont data
-0      short           017001          byte-swapped Berkeley vfont data
-
-# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com
-0      string          %!PS-AdobeFont-1.0      PostScript Type 1 font text
->20    string          >\0                     (%s)
-6      string          %!PS-AdobeFont-1.0      PostScript Type 1 font program data
-
-# X11 font files in SNF (Server Natural Format) format
-0      belong          00000004                X11 SNF font data, MSB first
-0      lelong          00000004                X11 SNF font data, LSB first
-
-# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)
-0      string          STARTFONT\040           X11 BDF font text
-
-# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)
-# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
-0      string          \001fcp                 X11 Portable Compiled Font data
->12    byte            0x02                    \b, LSB first
->12    byte            0x0a                    \b, MSB first
-0      string          D1.0\015                X11 Speedo font data
diff --git a/file/magdir/frame b/file/magdir/frame
deleted file mode 100644 (file)
index 47e4897..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#------------------------------------------------------------------------------
-# frame:  file(1) magic for FrameMaker files
-#
-# This stuff came on a FrameMaker demo tape, most of which is
-# copyright, but this file is "published" as witness the following:
-#
-0      string          \<MakerFile     FrameMaker document
->11    string          4.0              (4.0
->11    string          3.0              (3.0
->11    string          2.0              (2.0
->11    string          1.0              (1.0
->14    byte            x                 %c)
-0      string          \<MIFFile       FrameMaker MIF (ASCII) file
->9     string          4.0              (4.0)
->9     string          3.0              (3.0)
->9     string          2.0              (2.0)
->9     string          1.0              (1.x)
-0      string          \<MakerDictionary       FrameMaker Dictionary text
->17    string          3.0              (3.0)
->17    string          2.0              (2.0)
->17    string          1.0              (1.x)
-0      string          \<MakerScreenFont       FrameMaker Font file
->17    string          1.01             (%s)
-0      string          \<MML           FrameMaker MML file
-0      string          \<BookFile      FrameMaker Book file
->10    string          3.0              (3.0
->10    string          2.0              (2.0
->10    string          1.0              (1.0
->13    byte            x                 %c)
-# XXX - this book entry should be verified, if you find one, uncomment this
-#0     string          \<Book\         FrameMaker Book (ASCII) file
-#>6    string          3.0              (3.0)
-#>6    string          2.0              (2.0)
-#>6    string          1.0              (1.0)
-0      string          \<Maker Intermediate Print File FrameMaker IPL file
diff --git a/file/magdir/freebsd b/file/magdir/freebsd
deleted file mode 100644 (file)
index 2370c25..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-
-#------------------------------------------------------------------------------
-# freebsd:  file(1) magic for FreeBSD objects
-#
-# All new-style FreeBSD magic numbers are in host byte order (i.e.,
-# little-endian on x86).
-#
-# XXX - this comes from the file "freebsd" in a recent FreeBSD version of
-# "file"; it, and the NetBSD stuff in "netbsd", appear to use different
-# schemes for distinguishing between executable images, shared libraries,
-# and object files.
-#
-# FreeBSD says:
-#
-#    Regardless of whether it's pure, demand-paged, or none of the
-#    above:
-#
-#      if the entry point is < 4096, then it's a shared library if
-#      the "has run-time loader information" bit is set, and is
-#      position-independent if the "is position-independent" bit
-#      is set;
-#
-#      if the entry point is >= 4096 (or >4095, same thing), then it's
-#      an executable, and is dynamically-linked if the "has run-time
-#      loader information" bit is set.
-#
-# On x86, NetBSD says:
-#
-#    If it's neither pure nor demand-paged:
-#
-#      if it has the "has run-time loader information" bit set, it's
-#      a dynamically-linked executable;
-#
-#      if it doesn't have that bit set, then:
-#
-#          if it has the "is position-independent" bit set, it's
-#          position-independent;
-#
-#          if the entry point is non-zero, it's an executable, otherwise
-#          it's an object file.
-#
-#    If it's pure:
-#
-#      if it has the "has run-time loader information" bit set, it's
-#      a dynamically-linked executable, otherwise it's just an
-#      executable.
-#
-#    If it's demand-paged:
-#
-#      if it has the "has run-time loader information" bit set,
-#      then:
-#
-#          if the entry point is < 4096, it's a shared library;
-#
-#          if the entry point is = 4096 or > 4096 (i.e., >= 4096),
-#          it's a dynamically-linked executable);
-#
-#      if it doesn't have the "has run-time loader information" bit
-#      set, then it's just an executable.
-#
-# (On non-x86, NetBSD does much the same thing, except that it uses
-# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
-# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
-# had 8K pages; dunno about MIPS.)
-#
-# I suspect the two will differ only in perverse and uninteresting cases
-# ("shared" libraries that aren't demand-paged and whose pages probably
-# won't actually be shared, executables with entry points <4096).
-#
-# I leave it to those more familiar with FreeBSD and NetBSD to figure out
-# what the right answer is (although using ">4095", FreeBSD-style, is
-# probably better than separately checking for "=4096" and ">4096",
-# NetBSD-style).  (The old "netbsd" file analyzed FreeBSD demand paged
-# executables using the NetBSD technique.)
-#
-0      lelong&0377777777       041400407       FreeBSD/i386
->20    lelong                  <4096
->>3    byte&0xC0               &0x80           shared library
->>3    byte&0xC0               0x40            PIC object
->>3    byte&0xC0               0x00            object
->20    lelong                  >4095
->>3    byte&0x80               0x80            dynamically linked executable
->>3    byte&0x80               0x00            executable
->16    lelong                  >0              not stripped
-
-0      lelong&0377777777       041400410       FreeBSD/i386 pure
->20    lelong                  <4096
->>3    byte&0xC0               &0x80           shared library
->>3    byte&0xC0               0x40            PIC object
->>3    byte&0xC0               0x00            object
->20    lelong                  >4095
->>3    byte&0x80               0x80            dynamically linked executable
->>3    byte&0x80               0x00            executable
->16    lelong                  >0              not stripped
-
-0      lelong&0377777777       041400413       FreeBSD/i386 demand paged
->20    lelong                  <4096
->>3    byte&0xC0               &0x80           shared library
->>3    byte&0xC0               0x40            PIC object
->>3    byte&0xC0               0x00            object
->20    lelong                  >4095
->>3    byte&0x80               0x80            dynamically linked executable
->>3    byte&0x80               0x00            executable
->16    lelong                  >0              not stripped
-
-0      lelong&0377777777       041400314       FreeBSD/i386 compact demand paged
->20    lelong                  <4096
->>3    byte&0xC0               &0x80           shared library
->>3    byte&0xC0               0x40            PIC object
->>3    byte&0xC0               0x00            object
->20    lelong                  >4095
->>3    byte&0x80               0x80            dynamically linked executable
->>3    byte&0x80               0x00            executable
->16    lelong                  >0              not stripped
-
-# XXX gross hack to identify core files
-# cores start with a struct tss; we take advantage of the following:
-# byte 7:     highest byte of the kernel stack pointer, always 0xfe
-#      8/9:   kernel (ring 0) ss value, always 0x0010
-#      10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
-#      28:    low order byte of the current PTD entry, always 0 since the
-#             PTD is page-aligned
-#
-7      string  \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0        FreeBSD/i386 a.out core file
->1039  string  >\0     from '%s'
-
-# /var/run/ld.so.hints
-# What are you laughing about?
-0      lelong                  011421044151    ld.so hints file
->4     lelong                  >0              (version %d)
diff --git a/file/magdir/gimp b/file/magdir/gimp
deleted file mode 100644 (file)
index 286fa9c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#------------------------------------------------------------------------------
-# GIMP Gradient: file(1) magic for the GIMP's gradient data files
-# by Federico Mena <federico@nuclecu.unam.mx>
-
-0       string          GIMP\ Gradient  GIMP gradient data
-
-#------------------------------------------------------------------------------
-# XCF:  file(1) magic for the XCF image format used in the GIMP developed
-#       by Spencer Kimball and Peter Mattis
-#       ('Bucky' LaDieu, nega@vt.edu)
-
-0       string          gimp\ xcf\ file GIMP XCF image data,
->14     belong          x               %ld x
->18     belong          x               %ld,
->22     belong          0               RGB Color
->22     belong          1               Greyscale
->22     belong          2               Indexed Color
-
-#------------------------------------------------------------------------------
-# XCF:  file(1) magic for the patterns used in the GIMP, developed
-#       by Spencer Kimball and Peter Mattis
-#       ('Bucky' LaDieu, nega@vt.edu)
-
-20      string          GPAT            GIMP pattern data,
->24     string          x               %s
-
-#------------------------------------------------------------------------------
-# XCF:  file(1) magic for the brushes used in the GIMP, developed
-#       by Spencer Kimball and Peter Mattis
-#       ('Bucky' LaDieu, nega@vt.edu)
-
-20      string          GIMP            GIMP brush data
diff --git a/file/magdir/gnu b/file/magdir/gnu
deleted file mode 100644 (file)
index 85af567..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# GNU nlsutils message catalog file format
-#
-0      string          \336\22\4\225   GNU message catalog (little endian),
->4     lelong          x               revision %d,
->8     lelong          x               %d messages
-0      string          \225\4\22\336   GNU message catalog (big endian),
->4     belong          x               revision %d,
->8     belong          x               %d messages
diff --git a/file/magdir/hp b/file/magdir/hp
deleted file mode 100644 (file)
index e1efdbd..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-
-#------------------------------------------------------------------------------
-# hp:  file(1) magic for Hewlett Packard machines (see also "printer")
-#
-# XXX - somebody should figure out whether any byte order needs to be
-# applied to the "TML" stuff; I'm assuming the Apollo stuff is
-# big-endian as it was mostly 68K-based.
-#
-# I think the 500 series was the old stack-based machines, running a
-# UNIX environment atop the "SUN kernel"; dunno whether it was
-# big-endian or little-endian.
-#
-# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;
-# hp300 are 68020+68881 based; hp400 are also 68k.  The following basic
-# HP magic is useful for reference, but using "long" magic is a better
-# practice in order to avoid collisions.
-#
-# Guy Harris (guy@netapp.com): some additions to this list came from
-# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
-# 1.2, and 2.0).  The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
-# "/etc/magic", though, except for the "archive file relocatable library"
-# stuff, and the 68030 and 68040 stuff isn't there at all - are they not
-# used in executables, or have they just not yet updated "/etc/magic"
-# completely?
-#
-# 0    beshort         200             hp200 (68010) BSD binary
-# 0    beshort         300             hp300 (68020+68881) BSD binary
-# 0    beshort         0x20c           hp200/300 HP-UX binary
-# 0    beshort         0x20d           hp400 (68030) HP-UX binary
-# 0    beshort         0x20e           hp400 (68040?) HP-UX binary
-# 0    beshort         0x20b           PA-RISC1.0 HP-UX binary
-# 0    beshort         0x210           PA-RISC1.1 HP-UX binary
-# 0    beshort         0x211           PA-RISC1.2 HP-UX binary
-# 0    beshort         0x214           PA-RISC2.0 HP-UX binary
-
-#
-# The "misc" stuff needs a byte order; the archives look suspiciously
-# like the old 177545 archives (0xff65 = 0177545).
-#
-#### Old Apollo stuff
-0      beshort         0627            Apollo m68k COFF executable
->18    beshort         ^040000         not stripped
->22    beshort         >0              - version %ld
-0      beshort         0624            apollo a88k COFF executable
->18    beshort         ^040000         not stripped
->22    beshort         >0              - version %ld
-0       long            01203604016     TML 0123 byte-order format
-0       long            01702407010     TML 1032 byte-order format
-0       long            01003405017     TML 2301 byte-order format
-0       long            01602007412     TML 3210 byte-order format
-#### PA-RISC
-0      belong          0x02100106      PA-RISC1.1 relocatable object
-0      belong          0x02100107      PA-RISC1.1 executable
->168   belong          &=0x00000004    dynamically linked
->(144) belong          0x054ef630      dynamically linked
->96    belong          >0              - not stripped
-
-0      belong          0x02100108      PA-RISC1.1 shared executable
->168   belong&0x4      0x4             dynamically linked
->(144) belong          0x054ef630      dynamically linked
->96    belong          >0              - not stripped
-
-0      belong          0x0210010b      PA-RISC1.1 demand-load executable
->168   belong&0x4      0x4             dynamically linked
->(144) belong          0x054ef630      dynamically linked
->96    belong          >0              - not stripped
-
-0      belong          0x0210010e      PA-RISC1.1 shared library
->96    belong          >0              - not stripped
-
-0      belong          0x0210010d      PA-RISC1.1 dynamic load library
->96    belong          >0              - not stripped
-
-#### 800
-0      belong          0x020b0106      PA-RISC1.0 relocatable object
-
-0      belong          0x020b0107      PA-RISC1.0 executable
->168   belong&0x4      0x4             dynamically linked
->(144) belong          0x054ef630      dynamically linked
->96    belong          >0              - not stripped
-
-0      belong          0x020b0108      PA-RISC1.0 shared executable
->168   belong&0x4      0x4             dynamically linked
->(144) belong          0x054ef630      dynamically linked
->96    belong          >0              - not stripped
-
-0      belong          0x020b010b      PA-RISC1.0 demand-load executable
->168   belong&0x4      0x4             dynamically linked
->(144) belong          0x054ef630      dynamically linked
->96    belong          >0              - not stripped
-
-0      belong          0x020b010e      PA-RISC1.0 shared library
->96    belong          >0              - not stripped
-
-0      belong          0x020b010d      PA-RISC1.0 dynamic load library
->96    belong          >0              - not stripped
-
-0      belong          0x213c6172      archive file
->68    belong          0x020b0619      - PA-RISC1.0 relocatable library
->68    belong          0x02100619      - PA-RISC1.1 relocatable library
->68    belong          0x02110619      - PA-RISC1.2 relocatable library
->68    belong          0x02140619      - PA-RISC2.0 relocatable library
-
-#### 500
-0      long            0x02080106      HP s500 relocatable executable
->16    long            >0              - version %ld
-
-0      long            0x02080107      HP s500 executable
->16    long            >0              - version %ld
-
-0      long            0x02080108      HP s500 pure executable
->16    long            >0              - version %ld
-
-#### 200
-0      belong          0x020c0108      HP s200 pure executable
->4     beshort         >0              - version %ld
->8     belong          &0x80000000     save fp regs
->8     belong          &0x40000000     dynamically linked
->8     belong          &0x20000000     debuggable
->36    belong          >0              not stripped
-
-0      belong          0x020c0107      HP s200 executable
->4     beshort         >0              - version %ld
->8     belong          &0x80000000     save fp regs
->8     belong          &0x40000000     dynamically linked
->8     belong          &0x20000000     debuggable
->36    belong          >0              not stripped
-
-0      belong          0x020c010b      HP s200 demand-load executable
->4     beshort         >0              - version %ld
->8     belong          &0x80000000     save fp regs
->8     belong          &0x40000000     dynamically linked
->8     belong          &0x20000000     debuggable
->36    belong          >0              not stripped
-
-0      belong          0x020c0106      HP s200 relocatable executable
->4     beshort         >0              - version %ld
->6     beshort         >0              - highwater %d
->8     belong          &0x80000000     save fp regs
->8     belong          &0x20000000     debuggable
->8     belong          &0x10000000     PIC
-
-0      belong          0x020a0108      HP s200 (2.x release) pure executable
->4     beshort         >0              - version %ld
->36    belong          >0              not stripped
-
-0      belong          0x020a0107      HP s200 (2.x release) executable
->4     beshort         >0              - version %ld
->36    belong          >0              not stripped
-
-0      belong          0x020c010e      HP s200 shared library
->4     beshort         >0              - version %ld
->6     beshort         >0              - highwater %d
->36    belong          >0              not stripped
-
-0      belong          0x020c010d      HP s200 dynamic load library
->4     beshort         >0              - version %ld
->6     beshort         >0              - highwater %d
->36    belong          >0              not stripped
-
-#### MISC
-0      long            0x0000ff65      HP old archive
-0      long            0x020aff65      HP s200 old archive
-0      long            0x020cff65      HP s200 old archive
-0      long            0x0208ff65      HP s500 old archive
-
-0      long            0x015821a6      HP core file
-
-0      long            0x4da7eee8      HP-WINDOWS font
->8     byte            >0              - version %ld
-0      string          Bitmapfile      HP Bitmapfile
-
-0      string          IMGfile CIS     compimg HP Bitmapfile
-# XXX - see "lif"
-#0     short           0x8000          lif file
-0      long            0x020c010c      compiled Lisp
-
-0      string          msgcat01        HP NLS message catalog,
->8     long            >0              %d messages
-
-# addendum to /etc/magic with HP-48sx file-types by phk@data.fls.dk 1jan92
-0      string          HPHP48-         HP48 binary
->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)
-0      string          %%HP:           HP48 text
->6     string          T(0)            - T(0)
->6     string          T(1)            - T(1)
->6     string          T(2)            - T(2)
->6     string          T(3)            - T(3)
->10    string          A(D)            A(D)
->10    string          A(R)            A(R)
->10    string          A(G)            A(G)
->14    string          F(.)            F(.);
->14    string          F(,)            F(,);
-
-# hpBSD magic numbers
-0      beshort         200             hp200 (68010) BSD
->2     beshort         0407            impure binary
->2     beshort         0410            read-only binary
->2     beshort         0413            demand paged binary
-0      beshort         300             hp300 (68020+68881) BSD
->2     beshort         0407            impure binary
->2     beshort         0410            read-only binary
->2     beshort         0413            demand paged binary
-
diff --git a/file/magdir/ibm370 b/file/magdir/ibm370
deleted file mode 100644 (file)
index 8cd9da2..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-#------------------------------------------------------------------------------
-# ibm370:  file(1) magic for IBM 370 and compatibles.
-#
-# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
-# What the heck *is* "USS/370"?
-# AIX 4.1's "/etc/magic" has
-#
-#      0       short           0535            370 sysV executable 
-#      >12     long            >0              not stripped
-#      >22     short           >0              - version %d
-#      >30     long            >0              - 5.2 format
-#      0       short           0530            370 sysV pure executable 
-#      >12     long            >0              not stripped
-#      >22     short           >0              - version %d
-#      >30     long            >0              - 5.2 format
-#
-# instead of the "USS/370" versions of the same magic numbers.
-#
-0      beshort         0537            370 XA sysV executable 
->12    belong          >0              not stripped
->22    beshort         >0              - version %d
->30    belong          >0              - 5.2 format
-0      beshort         0532            370 XA sysV pure executable 
->12    belong          >0              not stripped
->22    beshort         >0              - version %d
->30    belong          >0              - 5.2 format
-0      beshort         054001          370 sysV pure executable
->12    belong          >0              not stripped
-0      beshort         055001          370 XA sysV pure executable
->12    belong          >0              not stripped
-0      beshort         056401          370 sysV executable
->12    belong          >0              not stripped
-0      beshort         057401          370 XA sysV executable
->12    belong          >0              not stripped
-0       beshort                0531            SVR2 executable (Amdahl-UTS)
->12    belong          >0              not stripped
->24     belong         >0              - version %ld
-0      beshort         0534            SVR2 pure executable (Amdahl-UTS)
->12    belong          >0              not stripped
->24    belong          >0              - version %ld
-0      beshort         0530            SVR2 pure executable (USS/370)
->12    belong          >0              not stripped
->24    belong          >0              - version %ld
-0      beshort         0535            SVR2 executable (USS/370)
->12    belong          >0              not stripped
->24    belong          >0              - version %ld
diff --git a/file/magdir/ibm6000 b/file/magdir/ibm6000
deleted file mode 100644 (file)
index 8e1077b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#------------------------------------------------------------------------------
-# ibm6000:  file(1) magic for RS/6000 and the RT PC.
-#
-0      beshort         0x01df          executable (RISC System/6000 V3.1) or obj module
->12    belong          >0              not stripped
-# Breaks sun4 statically linked execs.
-#0      beshort                0x0103          executable (RT Version 2) or obj module
-#>2    byte            0x50            pure
-#>28   belong          >0              not stripped
-#>6    beshort         >0              - version %ld
-0      beshort         0x0104          shared library
-0      beshort         0x0105          ctab data
-0      beshort         0xfe04          structured file
-0      string          0xabcdef        AIX message catalog
-0      belong          0x000001f9      AIX compiled message catalog
-0      string          \<aiaff>        archive
diff --git a/file/magdir/iff b/file/magdir/iff
deleted file mode 100644 (file)
index 68d1b79..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-#------------------------------------------------------------------------------
-# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
-#
-# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
-# Arts for file interchange.  It has also been used by Apple, SGI, and
-# especially Commodore-Amiga.
-#
-# IFF files begin with an 8 byte FORM header, followed by a 4 character
-# FORM type, which is followed by the first chunk in the FORM.
-
-0      string          FORM            IFF data
-#>4    belong          x               \b, FORM is %d bytes long
-# audio formats
->8     string          AIFF            \b, AIFF audio
->8     string          AIFC            \b, AIFF-C compressed audio
->8     string          8SVX            \b, 8SVX 8-bit sampled sound voice
->8     string          SAMP            \b, SAMP sampled audio
-# image formats
->8     string          ILBMBMHD        \b, ILBM interleaved image
->>20   beshort         x               \b, %d x
->>22   beshort         x               %d
->8     string          RGBN            \b, RGBN 12-bit RGB image
->8     string          RGB8            \b, RGB8 24-bit RGB image
->8     string          DR2D            \b, DR2D 2-D object
->8     string          TDDD            \b, TDDD 3-D rendering
-# other formats
->8     string          FTXT            \b, FTXT formatted text
diff --git a/file/magdir/images b/file/magdir/images
deleted file mode 100644 (file)
index 271b169..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-
-#------------------------------------------------------------------------------
-# images:  file(1) magic for image formats (see also "iff")
-#
-# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
-# additions by janl@ifi.uio.no as well as others. Jan also suggested
-# merging several one- and two-line files into here.
-#
-# little magic: PCX (first byte is 0x0a)
-# no magic: Targa
-
-# PBMPLUS images
-# The next byte following the magic is always whitespace.
-0      string          P1              PBM image text
-0      string          P2              PGM image text
-0      string          P3              PPM image text
-0      string          P4              PBM "rawbits" image data
-0      string          P5              PGM "rawbits" image data
-0      string          P6              PPM "rawbits" image data
-
-# NIFF (Navy Interchange File Format, a modification of TIFF) images
-0      string          IIN1            NIFF image data
-
-# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
-# The second word of TIFF files is the TIFF version number, 42, which has
-# never changed.  The TIFF specification recommends testing for it.
-0      string          MM\x00\x2a      TIFF image data, big-endian
-0      string          II\x2a\x00      TIFF image data, little-endian
-
-# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
-# (Greg Roelofs, newt@uchicago.edu)
-#
-# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ...
-#
-0      string          \x89PNG         PNG image data,
->4     belong          !0x0d0a1a0a     CORRUPTED,
->16    belong          x               %ld x
->20    belong          x               %ld,
->24    byte            x               %d-bit
->25    byte            0               grayscale,
->25    byte            2               \b/color RGB,
->25    byte            3               colormap,
->25    byte            4               gray+alpha,
->25    byte            6               \b/color RGBA,
-#>26   byte            0               deflate/32K,
->28    byte            0               non-interlaced
->28    byte            1               interlaced
-
-# GIF
-0      string          GIF8            GIF image data
->4     string          7a              \b, version 8%s,
->4     string          9a              \b, version 8%s,
->6     leshort         >0              %hd x
->8     leshort         >0              %hd,
-#>10   byte            &0x80           color mapped,
-#>10   byte&0x07       =0x00           2 colors
-#>10   byte&0x07       =0x01           4 colors
-#>10   byte&0x07       =0x02           8 colors
-#>10   byte&0x07       =0x03           16 colors
-#>10   byte&0x07       =0x04           32 colors
-#>10   byte&0x07       =0x05           64 colors
-#>10   byte&0x07       =0x06           128 colors
-#>10   byte&0x07       =0x07           256 colors
-
-# ITC (CMU WM) raster files.  It is essentially a byte-reversed Sun raster,
-# 1 plane, no encoding.
-0      string          \361\0\100\273  CMU window manager raster image data
->4     lelong          >0              %d x
->8     lelong          >0              %d,
->12    lelong          >0              %d-bit
-
-# Magick Image File Format
-0      string          id=ImageMagick  MIFF image data
-
-# Artisan
-0      long            1123028772      Artisan image data
->4     long            1               \b, rectangular 24-bit
->4     long            2               \b, rectangular 8-bit with colormap
->4     long            3               \b, rectangular 32-bit (24-bit with matte)
-
-# FIG (Facility for Interactive Generation of figures), an object-based format
-0      string          #FIG            FIG image text
->5     string          x               \b, version %.3s
-
-# PHIGS
-0      string          ARF_BEGARF              PHIGS clear text archive
-0      string          @(#)SunPHIGS            SunPHIGS
-# version number follows, in the form m.n
->40    string          SunBin                  binary
->32    string          archive                 archive
-
-# GKS (Graphics Kernel System)
-0      string          GKSM            GKS Metafile
->24    string          SunGKS          \b, SunGKS
-
-# CGM image files
-0      string          BEGMF           clear text Computer Graphics Metafile
-# XXX - questionable magic
-0      beshort&0xffe0  0x0020          binary Computer Graphics Metafile
-0      beshort         0x3020          character Computer Graphics Metafile
-
-# MGR bitmaps  (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
-0      string  yz      MGR bitmap, modern format, 8-bit aligned
-0      string  zz      MGR bitmap, old format, 1-bit deep, 16-bit aligned
-0      string  xz      MGR bitmap, old format, 1-bit deep, 32-bit aligned
-0      string  yx      MGR bitmap, modern format, squeezed
-
-# Fuzzy Bitmap (FBM) images
-0      string          %bitmap\0       FBM image data
->30    long            0x31            \b, mono
->30    long            0x33            \b, color
-
-# facsimile data
-1      string          PC\ Research,\ Inc      group 3 fax data
->29    byte            0               \b, normal resolution (204x98 DPI)
->29    byte            1               \b, fine resolution (204x196 DPI)
-
-# 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)
-0      string          BM              PC bitmap data
->14    leshort         12              \b, OS/2 1.x format
->>18   leshort         x               \b, %d x
->>20   leshort         x               %d
->14    leshort         64              \b, OS/2 2.x format
->>18   leshort         x               \b, %d x
->>20   leshort         x               %d
->14    leshort         40              \b, Windows 3.x format
->>18   lelong          x               \b, %d x
->>22   lelong          x               %d x
->>28   leshort         x               %d
-0      string          IC              PC icon data
-0      string          PI              PC pointer image data
-0      string          CI              PC color icon data
-0      string          CP              PC color pointer image data
-# Conflicts with other entries [BABYL]
-#0     string          BA              PC bitmap array data
-
-# XPM icons (Greg Roelofs, newt@uchicago.edu)
-# note possible collision with C/REXX entry in c-lang; currently commented out
-0      string          /*\ XPM\ */     X pixmap image text
-
-# Utah Raster Toolkit RLE images (janl@ifi.uio.no)
-0      leshort         0xcc52          RLE image data,
->6     leshort         x               %d x
->8     leshort         x               %d
->2     leshort         >0              \b, lower left corner: %d
->4     leshort         >0              \b, lower right corner: %d
->10    byte&0x1        =0x1            \b, clear first
->10    byte&0x2        =0x2            \b, no background
->10    byte&0x4        =0x4            \b, alpha channel
->10    byte&0x8        =0x8            \b, comment
->11    byte            >0              \b, %d color channels
->12    byte            >0              \b, %d bits per pixel
->13    byte            >0              \b, %d color map channels
-
-# image file format (Robert Potter, potter@cs.rochester.edu)
-0      string          Imagefile\ version-     iff image data
-# this adds the whole header (inc. version number), informative but longish
->10    string          >\0             %s
-
-# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
-0      belong          0x59a66a95      Sun raster image data
->4     belong          >0              \b, %d x
->8     belong          >0              %d,
->12    belong          >0              %d-bit,
-#>16   belong          >0              %d bytes long,
->20    belong          0               old format,
-#>20   belong          1               standard,
->20    belong          2               compressed,
->20    belong          3               RGB,
->20    belong          4               TIFF,
->20    belong          5               IFF,
->20    belong          0xffff          reserved for testing,
->24    belong          0               no colormap
->24    belong          1               RGB colormap
->24    belong          2               raw colormap
-#>28   belong          >0              colormap is %d bytes long
-
-# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
-# file://sgi.com/graphics/SGIIMAGESPEC
-0      beshort         474             SGI image data
-#>2    byte            0               \b, verbatim
->2     byte            1               \b, RLE
-#>3    byte            1               \b, normal precision
->3     byte            2               \b, high precision
->4     beshort         x               \b, %d-D
->6     beshort         x               \b, %d x
->8     beshort         x               %d
->10    beshort         x               \b, %d channel
->10    beshort         !1              \bs
->80    string          >0              \b, "%s"
-
-0      string          IT01            FIT image data
->4     belong          x               \b, %d x
->8     belong          x               %d x
->12    belong          x               %d
-#
-0      string          IT02            FIT image data
->4     belong          x               \b, %d x
->8     belong          x               %d x
->12    belong          x               %d
-#
-2048   string          PCD_IPI         Kodak Photo CD image pack file
-0      string          PCD_OPA         Kodak Photo CD overview pack file
-
-# FITS format.  Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
-# FITS is the Flexible Image Transport System, the de facto standard for
-# data and image transfer, storage, etc., for the astronomical community.
-# (FITS floating point formats are big-endian.)
-0      string  SIMPLE\ \ =     FITS image data
->109   string  8               \b, 8-bit, character or unsigned binary integer
->108   string  16              \b, 16-bit, two's complement binary integer
->107   string  \ 32            \b, 32-bit, two's complement binary integer
->107   string  -32             \b, 32-bit, floating point, single precision
->107   string  -64             \b, 64-bit, floating point, double precision
-
-# other images
-0      string  This\ is\ a\ BitMap\ file       Lisp Machine bit-array-file
-0      string          !!              Bennet Yee's "face" format
-
-# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
-# stuff.
-#
-0      beshort         0x1010          PEX Binary Archive
diff --git a/file/magdir/intel b/file/magdir/intel
deleted file mode 100644 (file)
index d450e26..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#------------------------------------------------------------------------------
-# intel:  file(1) magic for x86 Unix
-#
-# Various flavors of x86 UNIX executable/object (other than Xenix, which
-# is in "microsoft").  DOS is in "msdos"; the ambitious soul can do
-# Windows as well.
-#
-# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
-# whatever comes next (HP-PA Hummingbird?).  OS/2 may also go elsewhere
-# as well, if, as, and when IBM makes it portable.
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-0      leshort         0502            basic-16 executable
->12    lelong          >0              not stripped
-#>22   leshort         >0              - version %ld
-0      leshort         0503            basic-16 executable (TV)
->12    lelong          >0              not stripped
-#>22   leshort         >0              - version %ld
-0      leshort         0510            x86 executable
->12    lelong          >0              not stripped
-0      leshort         0511            x86 executable (TV)
->12    lelong          >0              not stripped
-0      leshort         =0512           iAPX 286 executable small model (COFF)
->12    lelong          >0              not stripped
-#>22   leshort         >0              - version %ld
-0      leshort         =0522           iAPX 286 executable large model (COFF)
->12    lelong          >0              not stripped
-#>22   leshort         >0              - version %ld
-# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
-0      leshort         =0514           80386 COFF executable
->12    lelong          >0              not stripped
->22    leshort         >0              - version %ld
diff --git a/file/magdir/interleaf b/file/magdir/interleaf
deleted file mode 100644 (file)
index 3eea3cf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#------------------------------------------------------------------------------
-# interleaf:  file(1) magic for InterLeaf TPS:
-#
-0      string          =\210OPS        Interleaf saved data
-0      string          =<!OPS          Interleaf document text
->5     string          ,\ Version\ =   \b, version
->>17   string          >\0             %.3s
diff --git a/file/magdir/island b/file/magdir/island
deleted file mode 100644 (file)
index 9903cdd..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#------------------------------------------------------------------------------
-# island:  file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
-# "/etc/magic":
-# From: guy@netapp.com (Guy Harris)
-#
-4      string          pgscriptver     IslandWrite document
-13     string          DrawFile        IslandDraw document
-
diff --git a/file/magdir/ispell b/file/magdir/ispell
deleted file mode 100644 (file)
index 3c6bcdc..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-#------------------------------------------------------------------------------
-# ispell:  file(1) magic for ispell
-#
-# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602.  This magic
-# will match 0x9600 through 0x9603 in *both* little endian and big endian.
-# (No other current magic entries collide.)
-#
-# Updated by Daniel Quinlan (quinlan@yggdrasil.com)
-#
-0      leshort&0xFFFC  0x9600          little endian ispell
->0     byte            0               hash file (?),
->0     byte            1               3.0 hash file,
->0     byte            2               3.1 hash file,
->0     byte            3               hash file (?),
->2     leshort         0x00            8-bit, no capitalization, 26 flags
->2     leshort         0x01            7-bit, no capitalization, 26 flags
->2     leshort         0x02            8-bit, capitalization, 26 flags
->2     leshort         0x03            7-bit, capitalization, 26 flags
->2     leshort         0x04            8-bit, no capitalization, 52 flags
->2     leshort         0x05            7-bit, no capitalization, 52 flags
->2     leshort         0x06            8-bit, capitalization, 52 flags
->2     leshort         0x07            7-bit, capitalization, 52 flags
->2     leshort         0x08            8-bit, no capitalization, 128 flags
->2     leshort         0x09            7-bit, no capitalization, 128 flags
->2     leshort         0x0A            8-bit, capitalization, 128 flags
->2     leshort         0x0B            7-bit, capitalization, 128 flags
->2     leshort         0x0C            8-bit, no capitalization, 256 flags
->2     leshort         0x0D            7-bit, no capitalization, 256 flags
->2     leshort         0x0E            8-bit, capitalization, 256 flags
->2     leshort         0x0F            7-bit, capitalization, 256 flags
->4     leshort         >0              and %d string characters
-0      beshort&0xFFFC  0x9600          big endian ispell
->1     byte            0               hash file (?),
->1     byte            1               3.0 hash file,
->1     byte            2               3.1 hash file,
->1     byte            3               hash file (?),
->2     beshort         0x00            8-bit, no capitalization, 26 flags
->2     beshort         0x01            7-bit, no capitalization, 26 flags
->2     beshort         0x02            8-bit, capitalization, 26 flags
->2     beshort         0x03            7-bit, capitalization, 26 flags
->2     beshort         0x04            8-bit, no capitalization, 52 flags
->2     beshort         0x05            7-bit, no capitalization, 52 flags
->2     beshort         0x06            8-bit, capitalization, 52 flags
->2     beshort         0x07            7-bit, capitalization, 52 flags
->2     beshort         0x08            8-bit, no capitalization, 128 flags
->2     beshort         0x09            7-bit, no capitalization, 128 flags
->2     beshort         0x0A            8-bit, capitalization, 128 flags
->2     beshort         0x0B            7-bit, capitalization, 128 flags
->2     beshort         0x0C            8-bit, no capitalization, 256 flags
->2     beshort         0x0D            7-bit, no capitalization, 256 flags
->2     beshort         0x0E            8-bit, capitalization, 256 flags
->2     beshort         0x0F            7-bit, capitalization, 256 flags
->4     beshort         >0              and %d string characters
diff --git a/file/magdir/java b/file/magdir/java
deleted file mode 100644 (file)
index df7170e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#------------------------------------------------------------
-# Java ByteCode
-# From Larry Schwimmer (schwim@cs.stanford.edu)
-#
-# The Java magic number is the same as the Mach-O fat file magic number.
-# Interestingly the the same guy, Mike DeMoney, of NeXT Inc. then of First
-# Person (Sun) picked both numbers only a couple of years apart.  To make
-# the file(1) command work with both the Java Bytecode magic was merged with
-# the Mach-O magic in the file mach.
-#
-#0     belong          0xcafebabe
-#>4    belong          0x0003002d      Java bytecode
diff --git a/file/magdir/karma b/file/magdir/karma
deleted file mode 100644 (file)
index e256abf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#------------------------------------------------------------------------------
-# karma:  file(1) magic for Karma data files
-#
-# From <rgooch@atnf.csiro.au>
-
-0      string          KarmaRHD Version        Karma Data Structure Version
->16    long            x               %lu
diff --git a/file/magdir/lecter b/file/magdir/lecter
deleted file mode 100644 (file)
index 87c186b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#------------------------------------------------------------------------------
-# DEC SRC Virtual Paper: Lectern files
-# Karl M. Hegbloom <karlheg@inetarena.com>
-0      string  lect    DEC SRC Virtual Paper Lectern file
diff --git a/file/magdir/lex b/file/magdir/lex
deleted file mode 100644 (file)
index 7b6d0f7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#------------------------------------------------------------------------------
-# lex:  file(1) magic for lex
-#
-#      derived empirically, your offsets may vary!
-53     string          yyprevious      C program text (from lex)
->3     string          >\0              for %s
-# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>
-21     string          generated\ by\ flex     C program text (from flex)
-# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>
-0      string          %{              lex description text
diff --git a/file/magdir/lif b/file/magdir/lif
deleted file mode 100644 (file)
index f6d7901..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# lif:  file(1) magic for lif
-#
-# XXX - byte order?  (Probably beshort, Daniel Quinlan <quinlan@yggdrasil.com>)
-#
-0      short           0x8000          lif file
diff --git a/file/magdir/linux b/file/magdir/linux
deleted file mode 100644 (file)
index 75a2a2b..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-#------------------------------------------------------------------------------
-# linux:  file(1) magic for Linux files
-#
-# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
-# The following basic Linux magic is useful for reference, but using
-# "long" magic is a better practice in order to avoid collisions.
-#
-# 2    leshort         100             Linux/i386
-# >0   leshort         0407            impure executable (OMAGIC)
-# >0   leshort         0410            pure executable (NMAGIC)
-# >0   leshort         0413            demand-paged executable (ZMAGIC)
-# >0   leshort         0314            demand-paged executable (QMAGIC)
-#
-0      lelong          0x00640107      Linux/i386 impure executable (OMAGIC)
->16    lelong          0               \b, stripped
-0      lelong          0x00640108      Linux/i386 pure executable (NMAGIC)
->16    lelong          0               \b, stripped
-0      lelong          0x0064010b      Linux/i386 demand-paged executable (ZMAGIC)
->16    lelong          0               \b, stripped
-0      lelong          0x006400cc      Linux/i386 demand-paged executable (QMAGIC)
->16    lelong          0               \b, stripped
-#
-0      string          \007\001\000    Linux/i386 object file
->20    lelong          >0x1020         \b, DLL library
-# message catalogs, from Mitchum DSouza <m.dsouza@mrc-apu.cam.ac.uk>
-0      string          *nazgul*        Linux compiled message catalog
->8     lelong          >0              \b, version %ld
-# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>
-216    lelong          0421            Linux/i386 core file
->220   string          >\0             of '%s'
->200   lelong          >0              (signal %d)
-#
-# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>
-# this can be overridden by the DOS executable (COM) entry
-2      string          LILO            Linux/i386 LILO boot/chain loader
-#
-# Debian Packages, from Peter Tobias <tobias@server.et-inf.fho-emden.de>
-0      string          0.9
->8     byte            0x0a            Debian Binary Package
->>3    byte            >0              \b, created by dpkg 0.9%c
->>4    byte            >0              pl%c
-# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>
-0      leshort         0x0436          Linux/i386 PC Screen Font data,
->2     byte            0               256 characters, no directory,
->2     byte            1               512 characters, no directory,
->2     byte            2               256 characters, Unicode directory,
->2     byte            3               512 characters, Unicode directory,
->3     byte            >0              8x%d
-# Linux swap file, from Daniel Quinlan <quinlan@yggdrasil.com>
-4086   string          SWAP-SPACE      Linux/i386 swap file
-# ECOFF magic for OSF/1 and Linux (only tested under Linux though)
-#
-#      from Erik Troan (ewt@redhat.com) examining od dumps, so this
-#              could be wrong
-#      updated by David Mosberger (davidm@azstarnet.com) based on
-#      GNU BFD and MIPS info found below.
-#
-0      leshort         0x0183          ECOFF alpha
->24    leshort         0407            executable
->24    leshort         0410            pure
->24    leshort         0413            demand paged
->8     long            >0              not stripped
->8     long            0               stripped
->23    leshort         >0              - version %ld.
-# linux Kernel images version 1.3.80 - ?
-# from Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>
-0       belong          0xb8c0078e      Linux/x86 kernel image,
->0x048c byte            0x31
->>0x048c string         x               version %s
->0x0493 byte            0x31
->>0x0493 string         x               version %s
-#
diff --git a/file/magdir/lisp b/file/magdir/lisp
deleted file mode 100644 (file)
index ac4ba77..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#------------------------------------------------------------------------------
-# lisp:  file(1) magic for lisp programs
-#
-# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
-0      string  ;;                      Lisp/Scheme program text
-# Emacs 18 - this is always correct, but not very magical.
-0      string  \012(                   byte-compiled Emacs-Lisp program data
-# Emacs 19
-0      string  ;ELC\023\000\000\000    byte-compiled Emacs-Lisp program data
diff --git a/file/magdir/mach b/file/magdir/mach
deleted file mode 100644 (file)
index 3449717..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#------------------------------------------------------------------------------
-# mach file description
-#
-# Since Java bytecode and Mach-O fat-files have the same magic number the test
-# must be preformed in the same "magic" sequence to get both right.  The long
-# at offset 4 in a fat file tells the number of architectures.  The short at
-# offset 4 in a Java bytecode file is the compiler minor version and the
-# short at offset 6 is the compiler major version.  Since the minor version is
-# never to be non-zero then the hack of testing for the number of architectures
-# to be less that the maximum short is done here.
-#
-0      belong          0xcafebabe
->4     belong          0x0003002d      Java bytecode
->4     belong          1               Mach-O fat file with 1 architecture
->4     belong          >1
->>4    belong          <0xffff         Mach-O fat file with %ld architectures
-#
-0      lelong          0xfeedface      Mach-O
->12    lelong          1               object
->12    lelong          2               executable
->12    lelong          3               fixed virtual memory shared library
->12    lelong          4               core
->12    lelong          5               preload executable
->12    lelong          6               dynamically linked shared library
->12    lelong          7               dynamic linker
->12    lelong          8               bundle
->12    lelong          >8
->>12   lelong          x               filetype=%ld
->4     lelong          <0
->>4    lelong          x               architecture=%ld
->4     lelong          1               vax
->4     lelong          2               romp
->4     lelong          3               architecture=3
->4     lelong          4               ns32032
->4     lelong          5               ns32332
->4     lelong          6               m68k
->4     lelong          7               i386
->4     lelong          8               mips
->4     lelong          9               ns32532
->4     lelong          10              architecture=10
->4     lelong          11              hppa
->4     lelong          12              acorn
->4     lelong          13              m88k
->4     lelong          14              sparc
->4     lelong          15              i860-big
->4     lelong          16              i860
->4     lelong          17              rs6000
->4     lelong          18              ppc
->4     lelong          >18
->>4    lelong          x               architecture=%ld
-#
-0      belong          0xfeedface      Mach-O
->12    belong          1               object
->12    belong          2               executable
->12    belong          3               fixed virtual memory shared library
->12    belong          4               core
->12    belong          5               preload executable
->12    belong          6               dynamically linked shared library
->12    belong          7               dynamic linker
->12    belong          8               bundle
->12    belong          >8
->>12   belong          x               filetype=%ld
->4     belong          <0
->>4    belong          x               architecture=%ld
->4     belong          1               vax
->4     belong          2               romp
->4     belong          3               architecture=3
->4     belong          4               ns32032
->4     belong          5               ns32332
->4     belong          6               m68k
->4     belong          7               i386
->4     belong          8               mips
->4     belong          9               ns32532
->4     belong          10              architecture=10
->4     belong          11              hppa
->4     belong          12              acorn
->4     belong          13              m88k
->4     belong          14              sparc
->4     belong          15              i860-big
->4     belong          16              i860
->4     belong          17              rs6000
->4     belong          18              ppc
->4     belong          >18
->>4    belong          x               architecture=%ld
diff --git a/file/magdir/macintosh b/file/magdir/macintosh
deleted file mode 100644 (file)
index d250383..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-
-#------------------------------------------------------------------------------
-# macintosh:  file(1) magic for Apple Macintosh file formats
-
-# Stuffit archives are the de facto standard of compression for Macintosh
-# files obtained from most archives. (franklsm@tuns.ca)
-0      string          SIT!                    StuffIt Archive (data)
->2     string          x                       : %s
-65     string          SIT!                    StuffIt Archive (rsrc + data)
->2     string          x                       : %s
-0      string          SITD                    StuffIt Deluxe (data)
->2     string          x                       : %s
-65     string          SITD                    StuffIt Deluxe (rsrc + data)
->2     string          x                       : %s
-0      string          Seg                     StuffIt Deluxe Segment (data)
->2     string          x                       : %s
-65     string          Seg                     StuffIt Deluxe Segment (rsrc + data)
->2     string          x                       : %s
-
-# Macintosh Applications and Installation binaries (franklsm@tuns.ca)
-0      string          APPL                    Macintosh Application (data)
->2     string          x                       : %s
-65     string          APPL                    Macintosh Application (rsrc + data)
->2     string          x                       : %s
-
-# Macintosh System files (franklsm@tuns.ca)
-0      string          zsys                    Macintosh System File (data)
-65     string          zsys                    Macintosh System File(rsrc + data)
-0      string          FNDR                    Macintosh Finder (data)
-65     string          FNDR                    Macintosh Finder(rsrc + data)
-0      string          libr                    Macintosh Library (data)
->2     string          x                       : %s
-65     string          libr                    Macintosh Library(rsrc + data)
->2     string          x                       : %s
-0      string          shlb                    Macintosh Shared Library (data)
->2     string          x                       : %s
-65     string          shlb                    Macintosh Shared Library(rsrc + data)
->2     string          x                       : %s
-0      string          cdev                    Macintosh Control Panel (data)
->2     string          x                       : %s
-65     string          cdev                    Macintosh Control Panel(rsrc + data)
->2     string          x                       : %s
-0      string          INIT                    Macintosh Extension (data)
->2     string          x                       : %s
-65     string          INIT                    Macintosh Extension(rsrc + data)
->2     string          x                       : %s
-0      string          FFIL                    Macintosh Truetype Font (data)
->2     string          x                       : %s
-65     string          FFIL                    Macintosh Truetype Font(rsrc + data)
->2     string          x                       : %s
-0      string          LWFN                    Macintosh Postscript Font (data)
->2     string          x                       : %s
-65     string          LWFN                    Macintosh Postscript Font(rsrc + data)
->2     string          x                       : %s
-
-# Additional Macintosh Files (franklsm@tuns.ca)
-0      string          PACT                    Macintosh Compact Pro Archive (data)
->2     string          x                       : %s
-65     string          PACT                    Macintosh Compact Pro Archive(rsrc + data)
->2     string          x                       : %s
-0      string          ttro                    Macintosh TeachText File (data)
->2     string          x                       : %s
-65     string          ttro                    Macintosh TeachText File(rsrc + data)
->2     string          x                       : %s
-0      string          TEXT                    Macintosh TeachText File (data)
->2     string          x                       : %s
-65     string          TEXT                    Macintosh TeachText File(rsrc + data)
->2     string          x                       : %s
-0      string          PDF                     Macintosh PDF File (data)
->2     string          x                       : %s
-65     string          PDF                     Macintosh PDF File(rsrc + data)
->2     string          x                       : %s
diff --git a/file/magdir/magic b/file/magdir/magic
deleted file mode 100644 (file)
index 4a639c6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#------------------------------------------------------------------------------
-# magic:  file(1) magic for magic files
-#
-0      string          #\ Magic        magic text file for file(1) cmd
diff --git a/file/magdir/mail.news b/file/magdir/mail.news
deleted file mode 100644 (file)
index bd3fd2d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#------------------------------------------------------------------------------
-# mail.news:  file(1) magic for mail and news
-#
-# Unfortunately, saved netnews also has From line added in some news software.
-#0     string          From            mail text
-# There are tests to ascmagic.c to cope with mail and news.
-0      string          Relay-Version:  old news text
-0      string          #!\ rnews       batched news text
-0      string          N#!\ rnews      mailed, batched news text
-0      string          Forward\ to     mail forwarding text
-0      string          Pipe\ to        mail piping text
-0      string          Return-Path:    smtp mail text
-0      string          Path:           news text
-0      string          Xref:           news text
-0      string          From:           news or mail text
-0      string          Article         saved news text
-0      string          BABYL           Emacs RMAIL text
-0      string          Received:       RFC 822 mail text
-0      string          MIME-Version:   MIME entity text
-0      string          Content-        MIME entity text
diff --git a/file/magdir/microsoft b/file/magdir/microsoft
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/file/magdir/mime b/file/magdir/mime
deleted file mode 100644 (file)
index 0102709..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#------------------------------------------------------------------------------
-# mime:  file(1) magic for MIME encoded files
-#
-0      string          Content-Type:\
->14    string          >\0             %s
-0      string          Content-Type:
->13    string          >\0             %s
diff --git a/file/magdir/mirage b/file/magdir/mirage
deleted file mode 100644 (file)
index 73c3747..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# mirage:  file(1) magic for Mirage executables
-#
-# XXX - byte order?
-#
-0      long    31415           Mirage Assembler m.out executable
diff --git a/file/magdir/mkid b/file/magdir/mkid
deleted file mode 100644 (file)
index dfb2d93..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#------------------------------------------------------------------------------
-# mkid:  file(1) magic for mkid(1) databases
-#
-# ID is the binary tags database produced by mkid(1).
-#
-# XXX - byte order?
-#
-0      string          \311\304        ID tags data
->2     short           >0              version %d
diff --git a/file/magdir/mmdf b/file/magdir/mmdf
deleted file mode 100644 (file)
index 72cd9f3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#------------------------------------------------------------------------------
-# mmdf:  file(1) magic for MMDF mail files
-#
-0      string  \001\001\001\001        MMDF mailbox
diff --git a/file/magdir/modem b/file/magdir/modem
deleted file mode 100644 (file)
index 73e747e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#------------------------------------------------------------------------------
-# modem:  file(1) magic for modem programs
-#
-# From: Florian La Roche <florian@knorke.saar.de>
-4      string          Research,       Digifax-G3-File
->29    byte            1               , fine resolution
->29    byte            0               , normal resolution
-
-0      short           0x0100          raw G3 data, byte-padded
-0      short           0x1400          raw G3 data
-#
-# Magic data for vgetty voice formats
-# (Martin Seine & Marc Eberhard)
-
-#
-# raw modem data version 1
-#
-0    string    RMD1      raw modem data
->4   string    >\0       (%s /
->20  short     >0        compression type 0x%04x)
-
-#
-# portable voice format 1
-#
-0    string    PVF1\n         portable voice format
->5   string    >\0       (binary %s)
-
-#
-# portable voice format 2
-#
-0    string    PVF2\n         portable voice format
->5   string >\0          (ascii %s)
-
diff --git a/file/magdir/motorola b/file/magdir/motorola
deleted file mode 100644 (file)
index efed159..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#------------------------------------------------------------------------------
-# motorola:  file(1) magic for Motorola 68K and 88K binaries
-#
-# 68K
-#
-0      beshort         0520            mc68k COFF
->18    beshort         ^00000020       object
->18    beshort         &00000020       executable
->12    belong          >0              not stripped
->168   string          .lowmem         Apple toolbox
->20    beshort         0407            (impure)
->20    beshort         0410            (pure)
->20    beshort         0413            (demand paged)
->20    beshort         0421            (standalone)
-0      beshort         0521            mc68k executable (shared)
->12    belong          >0              not stripped
-0      beshort         0522            mc68k executable (shared demand paged)
->12    belong          >0              not stripped
-#
-# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
-#
-0      beshort         0554            68K BCS executable
-#
-# 88K
-#
-# Motorola/88Open BCS
-#
-0      beshort         0555            88K BCS executable
-#
-# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
-0   string      S0          Motorola S-Record; binary data in text format
diff --git a/file/magdir/msdos b/file/magdir/msdos
deleted file mode 100644 (file)
index db2c03e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-#------------------------------------------------------------------------------
-# msdos:  file(1) magic for MS-DOS files
-#
-
-# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
-0      string  @echo\ off      MS-DOS batch file text
-
-# .EXE formats (Greg Roelofs, newt@uchicago.edu)
-#
-0      string  MZ              MS-DOS executable (EXE)
->24    string  @               \b, OS/2 or Windows
->1638  string  -lh5-           \b, LHa SFX archive v2.13S
->7195  string  Rar!            \b, RAR self-extracting archive
-#
-# [GRR 950118:  file 3.15 has a buffer-size limitation; offsets bigger than
-#   8161 bytes are ignored.  To make the following entries work, increase
-#   HOWMANY in file.h to 32K at least, and maybe to 70K or more for OS/2,
-#   NT/Win32 and VMS.]
-# [GRR:  some company sells a self-extractor/displayer for image data(!)]
-#
->11696 string  PK\003\004      \b, PKZIP SFX archive v1.1
->13297 string  PK\003\004      \b, PKZIP SFX archive v1.93a
->15588 string  PK\003\004      \b, PKZIP2 SFX archive v1.09
->15770 string  PK\003\004      \b, PKZIP SFX archive v2.04g
->28374 string  PK\003\004      \b, PKZIP2 SFX archive v1.02
-#
-# Info-ZIP self-extractors
-#    these are the DOS versions:
->25115 string  PK\003\004      \b, Info-ZIP SFX archive v5.12
->26331 string  PK\003\004      \b, Info-ZIP SFX archive v5.12 w/decryption
-#    these are the OS/2 versions (OS/2 is flagged above):
->47031 string  PK\003\004      \b, Info-ZIP SFX archive v5.12
->49845 string  PK\003\004      \b, Info-ZIP SFX archive v5.12 w/decryption
-#    this is the NT/Win32 version:
->69120 string  PK\003\004      \b, Info-ZIP NT SFX archive v5.12 w/decryption
-#
-# TELVOX Teleinformatica CODEC self-extractor for OS/2:
->49801 string  \x79\xff\x80\xff\x76\xff        \b, CODEC archive v3.21
->>49824        leshort         =1                      \b, 1 file
->>49824        leshort         >1                      \b, %u files
-
-# .COM formats (Daniel Quinlan, quinlan@yggdrasil.com)
-# Uncommenting only the first two lines will cover about 2/3 of COM files,
-# but it isn't feasible to match all COM files since there must be at least
-# two dozen different one-byte "magics".
-#0     byte            0xe9            MS-DOS executable (COM)
-#0     byte            0x8c            MS-DOS executable (COM)
-# 0xeb conflicts with "sequent" magic
-#0     byte            0xeb            MS-DOS executable (COM)
-#0     byte            0xb8            MS-DOS executable (COM)
-
-# miscellaneous formats
-0      string          LZ              MS-DOS executable (built-in)
-#0     byte            0xf0            MS-DOS program library data
-#
-
-# Popular applications
-2080   string  Microsoft\ Word\ 6.0\ Document  %s
-#
-0      belong  0x31be0000      Microsoft Word Document
-#
-2080   string  Microsoft\ Excel\ 5.0\ Worksheet        %s
-#
-0      belong  0x00001a00      Lotus 1-2-3
->4     belong  0x00100400      wk3 document
->4     belong  0x02100400      wk4 document
->4     belong  0x07800100      fm3 or fmb document
->4     belong  0x07800000      fm3 or fmb document
-#
-0      belong  0x00000200      Lotus 1-2-3
->4     belong  0x06040600      wk1 document
->4     belong  0x06800200      fmt document
diff --git a/file/magdir/ncr b/file/magdir/ncr
deleted file mode 100644 (file)
index 987c94e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#------------------------------------------------------------------------------
-# ncr:  file(1) magic for NCR Tower objects
-#
-# contributed by
-# Michael R. Wayne  ***  TMC & Associates  ***  INTERNET: wayne@ford-vax.arpa
-# uucp: {philabs | pyramid} !fmsrl7!wayne   OR   wayne@fmsrl7.UUCP
-#
-0      beshort         000610  Tower/XP rel 2 object
->12       belong               >0      not stripped
->20       beshort              0407    executable
->20       beshort              0410    pure executable
->22       beshort              >0      - version %ld
-0      beshort         000615  Tower/XP rel 2 object
->12       belong               >0      not stripped
->20       beshort              0407    executable
->20       beshort              0410    pure executable
->22       beshort              >0      - version %ld
-0      beshort         000620  Tower/XP rel 3 object
->12       belong               >0      not stripped
->20       beshort              0407    executable
->20       beshort              0410    pure executable
->22       beshort              >0      - version %ld
-0      beshort         000625  Tower/XP rel 3 object
->12       belong               >0      not stripped
->20       beshort              0407    executable
->20       beshort              0410    pure executable
->22       beshort              >0      - version %ld
-0      beshort         000630  Tower32/600/400 68020 object
->12       belong               >0      not stripped
->20       beshort              0407    executable
->20       beshort              0410    pure executable
->22       beshort              >0      - version %ld
-0      beshort         000640  Tower32/800 68020
->18       beshort              &020000 w/68881 object
->18       beshort              &040000 compatible object
->18       beshort              &~060000        object
->20       beshort              0407    executable
->20       beshort              0413    pure executable
->12       belong               >0      not stripped
->22       beshort              >0      - version %ld
-0      beshort         000645  Tower32/800 68010
->18       beshort              &040000 compatible object
->18       beshort              &~060000 object
->20       beshort              0407    executable
->20       beshort              0413    pure executable
->12       belong               >0      not stripped
->22       beshort              >0      - version %ld
diff --git a/file/magdir/netbsd b/file/magdir/netbsd
deleted file mode 100644 (file)
index 2ab15b3..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-
-#------------------------------------------------------------------------------
-# netbsd:  file(1) magic for NetBSD objects
-#
-# All new-style magic numbers are in network byte order.
-#
-
-0      lelong                  000000407       NetBSD little-endian object file
->16    lelong                  >0              not stripped
-0      belong                  000000407       NetBSD big-endian object file
->16    belong                  >0              not stripped
-
-0      belong&0377777777       041400413       NetBSD/i386 demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       041400410       NetBSD/i386 pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       041400407       NetBSD/i386
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       041400507       NetBSD/i386 core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       041600413       NetBSD/m68k demand paged
->0     byte                    &0x80           
->>20   belong                  <8192           shared library
->>20   belong                  =8192           dynamically linked executable
->>20   belong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       041600410       NetBSD/m68k pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       041600407       NetBSD/m68k
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       041600507       NetBSD/m68k core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042000413       NetBSD/m68k4k demand paged
->0     byte                    &0x80           
->>20   belong                  <4096           shared library
->>20   belong                  =4096           dynamically linked executable
->>20   belong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042000410       NetBSD/m68k4k pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042000407       NetBSD/m68k4k
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       042000507       NetBSD/m68k4k core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042200413       NetBSD/ns32532 demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042200410       NetBSD/ns32532 pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042200407       NetBSD/ns32532
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       042200507       NetBSD/ns32532 core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042400413       NetBSD/sparc demand paged
->0     byte                    &0x80           
->>20   belong                  <8192           shared library
->>20   belong                  =8192           dynamically linked executable
->>20   belong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042400410       NetBSD/sparc pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       042400407       NetBSD/sparc
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       042400507       NetBSD/sparc core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       042600413       NetBSD/pmax demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042600410       NetBSD/pmax pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       042600407       NetBSD/pmax
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       042600507       NetBSD/pmax core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       043000413       NetBSD/vax demand paged
->0     byte                    &0x80           
->>20   lelong                  <4096           shared library
->>20   lelong                  =4096           dynamically linked executable
->>20   lelong                  >4096           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043000410       NetBSD/vax pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043000407       NetBSD/vax
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       043000507       NetBSD/vax core
->12    string                  >\0             from '%s'
-
-# NetBSD/alpha does not support (and has never supported) a.out objects,
-# so no rules are provided for them.  NetBSD/alpha ELF objects are 
-# dealt with in "elf".
-0      lelong          0x00070185              ECOFF NetBSD/alpha binary
->10    leshort         0x0001                  not stripped
->10    leshort         0x0000                  stripped
-0      belong&0377777777       043200507       NetBSD/alpha core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       043400413       NetBSD/mips demand paged
->0     byte                    &0x80           
->>20   belong                  <8192           shared library
->>20   belong                  =8192           dynamically linked executable
->>20   belong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       043400410       NetBSD/mips pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    belong                  >0              not stripped
-0      belong&0377777777       043400407       NetBSD/mips
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   belong                  !0              executable
->>20   belong                  =0              object file
->16    belong                  >0              not stripped
-0      belong&0377777777       043400507       NetBSD/mips core
->12    string                  >\0             from '%s'
-
-0      belong&0377777777       043600413       NetBSD/arm32 demand paged
->0     byte                    &0x80
->>20   lelong                  <8192           shared library
->>20   lelong                  =8192           dynamically linked executable
->>20   lelong                  >8192           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043600410       NetBSD/arm32 pure
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80           executable
->16    lelong                  >0              not stripped
-0      belong&0377777777       043600407       NetBSD/arm32
->0     byte                    &0x80           dynamically linked executable
->0     byte                    ^0x80
->>0    byte                    &0x40           position independent
->>20   lelong                  !0              executable
->>20   lelong                  =0              object file
->16    lelong                  >0              not stripped
-0      belong&0377777777       043600507       NetBSD/arm32 core
->12    string                  >\0             from '%s'
diff --git a/file/magdir/news b/file/magdir/news
deleted file mode 100644 (file)
index 0ac4fa2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#------------------------------------------------------------------------------
-# news:  file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
-#
-0      string          StartFontMetrics        ASCII font metrics
-0      string          StartFont       ASCII font bits
-0      belong          0x137A2944      NeWS bitmap font
-0      belong          0x137A2947      NeWS font family
-0      belong          0x137A2950      scalable OpenFont binary
-0      belong          0x137A2951      encrypted scalable OpenFont binary
-8      belong          0x137A2B45      X11/NeWS bitmap font
-8      belong          0x137A2B48      X11/NeWS font family
diff --git a/file/magdir/octave b/file/magdir/octave
deleted file mode 100644 (file)
index 3093148..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#------------------------------------------------------------------------------
-# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>
-0      string          Octave-1-L      Octave binary data (little endian)
-0      string          Octave-1-B      Octave binary data (big endian)
diff --git a/file/magdir/olf b/file/magdir/olf
deleted file mode 100644 (file)
index c0f78ea..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-
-#------------------------------------------------------------------------------
-# olf:  file(1) magic for OLF executables
-#
-# We have to check the byte order flag to see what byte order all the
-# other stuff in the header is in.
-#
-# Byte order is probably big-endian for MIPS R3000 and Amdahl.
-# MIPS R3000 may also be for MIPS R2000.
-#
-# Created by Erik Theisen <etheisen@openbsd.org>
-# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>
-0      string          \177OLF         OLF
->4     byte            0               invalid class
->4     byte            1               32-bit
->4     byte            2               64-bit
->7     byte            0               invalid os
->7     byte            1               OpenBSD
->7     byte            2               NetBSD
->7     byte            3               FreeBSD
->7     byte            4               4.4BSD
->7     byte            5               Linux
->7     byte            6               Mach
->7     byte            7               SVR4
->7     byte            8               esix
->7     byte            9               Solaris
->7     byte            10              Irix
->7     byte            11              SCO
->7     byte            12              Dell
->8     byte            1               dynamically linked
->9     byte            1               unstripped
->5     byte            0               invalid byte order
->5     byte            1               LSB
->>16   leshort         0               no file type,
->>16   leshort         1               relocatable,
->>16   leshort         2               executable,
->>16   leshort         3               shared object,
->>16   leshort         4               core file,
->>16   leshort         &0xff00         processor-specific,
->>18   leshort         0               no machine,
->>18   leshort         1               AT&T WE32100 - invalid byte order,
->>18   leshort         2               SPARC - invalid byte order,
->>18   leshort         3               Intel 80386,
->>18   leshort         4               Motorola 68000 - invalid byte order,
->>18   leshort         5               Motorola 88000 - invalid byte order,
->>18   leshort         6               Intel 80486,
->>18   leshort         7               Intel 80860,
->>18   leshort         8               MIPS R3000,
->>18   leshort         9               Amdahl,
->>20   lelong          0               invalid version
->>20   lelong          1               version 1
->>36   lelong          1               MathCoPro/FPU/MAU Required
->5     byte            2               MSB
->>16   beshort         0               no file type,
->>16   beshort         1               relocatable,
->>16   beshort         2               executable,
->>16   beshort         3               shared object,
->>16   beshort         4               core file,
->>16   beshort         &0xff00         processor-specific,
->>18   beshort         0               no machine,
->>18   beshort         1               AT&T WE32100,
->>18   beshort         2               SPARC,
->>18   beshort         3               Intel 80386 - invalid byte order,
->>18   beshort         4               Motorola 68000,
->>18   beshort         5               Motorola 88000,
->>18   beshort         6               Intel 80486 - invalid byte order,
->>18   beshort         7               Intel 80860,
->>18   beshort         8               MIPS R3000,
->>18   leshort         9               Amdahl,
->>20   belong          0               invalid version
->>20   belong          1               version 1
->>36   belong          1               MathCoPro/FPU/MAU Required
diff --git a/file/magdir/os2 b/file/magdir/os2
deleted file mode 100644 (file)
index 91ea9e2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#------------------------------------------------------------------------------
-# os2:  file(1) magic for OS/2 files
-#
-
-# Provided 1998/08/22 by
-# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
-1      string  InternetShortcut        MS Windows 95 Internet shortcut text
->24    string  >\                      (URL=<%s>)
-
-# OS/2 URL objects
-# Provided 1998/08/22 by
-# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
-0      string  http:                   OS/2 URL object text
->5     string  >\                      (WWW) <http:%s>
-0      string  mailto:                 OS/2 URL object text
->7     string  >\                      (email) <%s>
-0      string  news:                   OS/2 URL object text
->5     string  >\                      (Usenet) <%s>
-0      string  ftp:                    OS/2 URL object text
->4     string  >\                      (FTP) <ftp:%s>
-0      string  file:                   OS/2 URL object text
->5     string  >\                      (Local file) <%s>
diff --git a/file/magdir/os9 b/file/magdir/os9
deleted file mode 100644 (file)
index b92a1cb..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# $OpenBSD: os9,v 1.2 1996/06/26 05:33:04 deraadt Exp $
-# $NetBSD: os9,v 1.1 1996/05/06 18:24:01 is Exp $
-#
-# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. All advertising materials mentioning features or use of this software
-#    must display the following acknowledgement:
-#      This product includes software developed by Ignatios Souvatzis for
-#      the NetBSD project.
-# 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 ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-#
-#
-# OS9/6809 module descriptions:
-#
-0      beshort         0x87CD  OS9/6809 module:
-#
->6     byte&0x0f       0x00    non-executable
->6     byte&0x0f       0x01    machine language
->6     byte&0x0f       0x02    BASIC I-code
->6     byte&0x0f       0x03    P-code
->6     byte&0x0f       0x04    C I-code
->6     byte&0x0f       0x05    COBOL I-code
->6     byte&0x0f       0x06    FORTRAN I-code
-#
->6     byte&0xf0       0x10    program executable
->6     byte&0xf0       0x20    subroutine
->6     byte&0xf0       0x30    multi-module
->6     byte&0xf0       0x40    data module
-#
->6     byte&0xf0       0xC0    system module
->6     byte&0xf0       0xD0    file manager
->6     byte&0xf0       0xE0    device driver
->6     byte&0xf0       0xF0    device descriptor
-#
-# OS9/m68k stuff (to be continued)
-#
-0      beshort         0x4AFC  OS9/68K module:
-#
-# attr
->14    byte&0x80       0x80    re-entrant
->14    byte&0x40       0x40    ghost
->14    byte&0x20       0x20    system-state
-#
-# lang:
-#
->13    byte            1       machine language
->13    byte            2       BASIC I-code
->13    byte            3       P-code
->13    byte            4       C I-code
->13    byte            5       COBOL I-code
->13    byte            6       Fortran I-code
-#
-#
-# type:
-#
->12    byte            1       program executable
->12    byte            2       subroutine
->12    byte            3       multi-module
->12    byte            4       data module
->12    byte            11      trap library
->12    byte            12      system module
->12    byte            13      file manager
->12    byte            14      device driver
->12    byte            15      device descriptor
diff --git a/file/magdir/osf1 b/file/magdir/osf1
deleted file mode 100644 (file)
index 31166c1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Mach magic number info
-#
-0      long            0xefbe  OSF/Rose object
-# I386 magic number info
-#
-0      short           0565    i386 COFF object
diff --git a/file/magdir/pbm b/file/magdir/pbm
deleted file mode 100644 (file)
index 98c15f7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# pbm:  file(1) magic for Portable Bitmap files
-#
-# XXX - byte order?
-#
-0      short   0x2a17  "compact bitmap" format (Poskanzer)
diff --git a/file/magdir/pdf b/file/magdir/pdf
deleted file mode 100644 (file)
index a1aef13..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#------------------------------------------------------------------------------
-# pdf:  file(1) magic for Portable Document Format
-#
-
-0      string          %PDF-           PDF document
->5     byte            x               \b, version %c
->7     byte            x               \b.%c
diff --git a/file/magdir/pdp b/file/magdir/pdp
deleted file mode 100644 (file)
index 201dede..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#------------------------------------------------------------------------------
-# pdp:  file(1) magic for PDP-11 executable/object and APL workspace
-#
-0      lelong          0101555         PDP-11 single precision APL workspace
-0      lelong          0101554         PDP-11 double precision APL workspace
-#
-# PDP-11 a.out
-#
-0      leshort         0407            PDP-11 executable
->8     leshort         >0              not stripped
->15    byte            >0              - version %ld
-
-0      leshort         0401            PDP-11 UNIX/RT ldp
-0      leshort         0405            PDP-11 old overlay
-
-0      leshort         0410            PDP-11 pure executable
->8     leshort         >0              not stripped
->15    byte            >0              - version %ld
-
-0      leshort         0411            PDP-11 separate I&D executable
->8     leshort         >0              not stripped
->15    byte            >0              - version %ld
-
-0      leshort         0437            PDP-11 kernel overlay
diff --git a/file/magdir/pgp b/file/magdir/pgp
deleted file mode 100644 (file)
index 038d098..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#------------------------------------------------------------------------------
-# pgp:  file(1) magic for Pretty Good Privacy
-#
-0       beshort         0x9900                  PGP key public ring
-0       beshort         0x9501                  PGP key security ring
-0       beshort         0x9500                  PGP key security ring
-0      beshort         0xa600                  PGP encrypted data
-0       string          -----BEGIN\040PGP       PGP armored data
->15     string          PUBLIC\040KEY\040BLOCK- public key block
->15     string          MESSAGE-                message
->15     string          SIGNED\040MESSAGE-      signed message
->15     string          PGP\040SIGNATURE-       signature
diff --git a/file/magdir/pkgadd b/file/magdir/pkgadd
deleted file mode 100644 (file)
index dc8ef5d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#------------------------------------------------------------------------------
-# pkgadd:  file(1) magic for SysV R4 PKG Datastreams
-#
-0       string          #\ PaCkAgE\ DaTaStReAm  pkg Datastream (SVR4)
diff --git a/file/magdir/plus5 b/file/magdir/plus5
deleted file mode 100644 (file)
index acf3bf4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#------------------------------------------------------------------------------
-# plus5:  file(1) magic for Plus Five's UNIX MUMPS
-#
-# XXX - byte order?  Paging Hokey....
-#
-0      short           0x259           mumps avl global
->2     byte            >0              (V%d)
->6     byte            >0              with %d byte name
->7     byte            >0              and %d byte data cells
-0      short           0x25a           mumps blt global
->2     byte            >0              (V%d)
->8     short           >0              - %d byte blocks
->15    byte            0x00            - P/D format
->15    byte            0x01            - P/K/D format
->15    byte            0x02            - K/D format
->15    byte            >0x02           - Bad Flags
diff --git a/file/magdir/printer b/file/magdir/printer
deleted file mode 100644 (file)
index d20330f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-#------------------------------------------------------------------------------
-# printer:  file(1) magic for printer-formatted files
-#
-
-# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)
-0      string          %!              PostScript document text
->2     string          PS-Adobe-       conforming
->>11   string          >\0             at level %.3s
->>>15  string          EPS             - type %s
->>>15  string          Query           - type %s
->>>15  string          ExitServer      - type %s
-# Some PCs have the annoying habit of adding a ^D as a document separator
-0      string          \004%!          PostScript document text
->3     string          PS-Adobe-       conforming
->>12   string          >\0             at level %.3s
->>>16  string          EPS             - type %s
->>>16  string          Query           - type %s
->>>16  string          ExitServer      - type %s
-
-# HP Printer Job Language
-0      string          \033%-12345X@PJL        HP Printer Job Language data
->15    string          \ ENTER\ LANGUAGE\ =
->31    string          PostScript              PostScript
-
-# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)
-0      string          \033E\033       HP PCL printer data
->3     string          \&l0A           - default page size
->3     string          \&l1A           - US executive page size
->3     string          \&l2A           - US letter page size
->3     string          \&l3A           - US legal page size
->3     string          \&l26A          - A4 page size
->3     string          \&l80A          - Monarch envelope size
->3     string          \&l81A          - No. 10 envelope size
->3     string          \&l90A          - Intl. DL envelope size
->3     string          \&l91A          - Intl. C5 envelope size
->3     string          \&l100A         - Intl. B5 envelope size
->3     string          \&l-81A         - No. 10 envelope size (landscape)
->3     string          \&l-90A         - Intl. DL envelope size (landscape)
-
-# IMAGEN printer-ready files:
-0      string  @document(              Imagen printer
-# this only works if "language xxx" is first item in Imagen header.
->10    string  language\ impress       (imPRESS data)
->10    string  language\ daisy         (daisywheel text)
->10    string  language\ diablo        (daisywheel text)
->10    string  language\ printer       (line printer emulation)
->10    string  language\ tektronix     (Tektronix 4014 emulation)
-# Add any other languages that your Imagen uses - remember
-# to keep the word `text' if the file is human-readable.
-# [GRR 950115:  missing "postscript" or "ultrascript" (whatever it was called)]
-#
-# Now magic for IMAGEN font files...
-0      string          Rast            RST-format raster font data
->45    string          >0              face %
diff --git a/file/magdir/psdbms b/file/magdir/psdbms
deleted file mode 100644 (file)
index f36121f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# psdbms:  file(1) magic for psdatabase
-#
-0      belong&0xff00ffff       0x56000000      ps database
->1     string  >\0     version %s
->4     string  >\0     from kernel %s
diff --git a/file/magdir/pyramid b/file/magdir/pyramid
deleted file mode 100644 (file)
index fe16608..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#------------------------------------------------------------------------------
-# pyramid:  file(1) magic for Pyramids
-#
-# XXX - byte order?
-#
-0      long            0x50900107      Pyramid 90x family executable
-0      long            0x50900108      Pyramid 90x family pure executable
->16    long            >0              not stripped
-0      long            0x5090010b      Pyramid 90x family demand paged pure executable
->16    long            >0              not stripped
diff --git a/file/magdir/riff b/file/magdir/riff
deleted file mode 100644 (file)
index 6bf127d..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-
-#------------------------------------------------------------------------------
-# riff:  file(1) magic for RIFF format
-# See
-#
-#      http://www.seanet.com/users/matts/riffmci/riffmci.htm
-#
-# and
-#
-#      http://www.ora.com/centers/gff/formats/micriff/index.htm
-#
-# and
-#
-#      http://www.jtauber.com/music/encoding/niff/spec/
-#
-0      string          RIFF            RIFF (little-endian) data
-# RIFF Palette format
->8     string          PAL             \b, palette
->>16   leshort         x               \b, version %d
->>18   leshort         x               \b, %d entries
-# RIFF Device Independent Bitmap format
->8     string          RDIB            \b, device-independent bitmap
->>16   string          BM              
->>>30  leshort         12              \b, OS/2 1.x format
->>>>34 leshort         x               \b, %d x
->>>>36 leshort         x               %d
->>>30  leshort         64              \b, OS/2 2.x format
->>>>34 leshort         x               \b, %d x
->>>>36 leshort         x               %d
->>>30  leshort         40              \b, Windows 3.x format
->>>>34 lelong          x               \b, %d x
->>>>38 lelong          x               %d x
->>>>44 leshort         x               %d
-# RIFF MIDI format
->8     string          RMID            \b, MIDI
-# RIFF Multimedia Movie File format
->8     string          RMMP            \b, multimedia movie
-# Microsoft WAVE format (*.wav)
->8     string          WAVE            \b, WAVE audio
->>20   leshort         1               \b, Microsoft PCM
->>>34  leshort         >0              \b, %d bit
->>22   leshort         =1              \b, mono
->>22   leshort         =2              \b, stereo
->>22   leshort         >2              \b, %d channels
->>24   lelong          >0              %d Hz
-# AVI == Audio Video Interleave
->8      string          AVI\            \b, AVI
-# Animated Cursor format
->8     string          ACON            \b, animated cursor
-
-#
-# XXX - some of the below may only appear in little-endian form.
-#
-# Also "MV93" appears to be for one form of Macromedia Director
-# files, and "GDMF" appears to be another multimedia format.
-#
-0      string          RIFX            RIFF (big-endian) data
-# RIFF Palette format
->8     string          PAL             \b, palette
->>16   beshort         x               \b, version %d
->>18   beshort         x               \b, %d entries
-# RIFF Device Independent Bitmap format
->8     string          RDIB            \b, device-independent bitmap
->>16   string          BM              
->>>30  beshort         12              \b, OS/2 1.x format
->>>>34 beshort         x               \b, %d x
->>>>36 beshort         x               %d
->>>30  beshort         64              \b, OS/2 2.x format
->>>>34 beshort         x               \b, %d x
->>>>36 beshort         x               %d
->>>30  beshort         40              \b, Windows 3.x format
->>>>34 belong          x               \b, %d x
->>>>38 belong          x               %d x
->>>>44 beshort         x               %d
-# RIFF MIDI format
->8     string          RMID            \b, MIDI
-# RIFF Multimedia Movie File format
->8     string          RMMP            \b, multimedia movie
-# Microsoft WAVE format (*.wav)
->8     string          WAVE            \b, WAVE audio
->>20   leshort         1               \b, Microsoft PCM
->>>34  leshort         >0              \b, %d bit
->>22   beshort         =1              \b, mono
->>22   beshort         =2              \b, stereo
->>22   beshort         >2              \b, %d channels
->>24   belong          >0              %d Hz
-# AVI == Audio Video Interleave
->8      string          AVI\            \b, AVI
-# Animated Cursor format
->8     string          ACON            \b, animated cursor
-# Notation Interchange File Format (big-endian only)
->8     string          NIFF            \b, Notation Interchange File Format
-
diff --git a/file/magdir/rpm b/file/magdir/rpm
deleted file mode 100644 (file)
index 14ad6db..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt@redhat.com)
-#
-0      beshort         0xedab          
->2     beshort         0xeedb          RPM
->>4    byte            x               v%d
->>6    beshort         0               bin
->>6    beshort         1               src
->>8    beshort         1               i386
->>8    beshort         2               Alpha
->>8    beshort         3               Sparc
->>8    beshort         4               MIPS
->>8    beshort         5               PowerPC
->>8    beshort         6               68000
->>8     beshort         7               SGI
->>10   string          x               %s
diff --git a/file/magdir/rtf b/file/magdir/rtf
deleted file mode 100644 (file)
index 8e2d416..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#------------------------------------------------------------------------------
-# rtf: file(1) magic for Rich Text Format (RTF)
-#
-# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
-#
-0      string          {\\rtf          Rich Text Format data,
->5     byte            x               version %c,
->6     string          \\ansi          ANSI
->6     string          \\mac           Apple Macintosh
->6     string          \\pc            IBM PC, code page 437
->6     string          \\pca           IBM PS/2, code page 850
diff --git a/file/magdir/sc b/file/magdir/sc
deleted file mode 100644 (file)
index 98599f2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sc:  file(1) magic for "sc" spreadsheet
-#
-38     string          Spreadsheet     sc spreadsheet file
diff --git a/file/magdir/sccs b/file/magdir/sccs
deleted file mode 100644 (file)
index 11d50b2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sccs:  file(1) magic for SCCS archives
-#
-# SCCS archive structure:
-# \001h01207
-# \001s 00276/00000/00000
-# \001d D 1.1 87/09/23 08:09:20 ian 1 0
-# \001c date and time created 87/09/23 08:09:20 by ian
-# \001e
-# \001u
-# \001U
-# ... etc.
-# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
-# *Sigh*. And these both came from various parts of the USG.
-# Maybe we should just switch everybody from SCCS to RCS!
-# Further, you can't just say '\001h0', because the five-digit number
-# is a checksum that could (presumably) have any leading digit,
-# and we don't have regular expression matching yet. 
-# Hence the following official kludge:
-8      string          \001s\                  SCCS archive data
diff --git a/file/magdir/sendmail b/file/magdir/sendmail
deleted file mode 100644 (file)
index 503ef89..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sendmail:  file(1) magic for sendmail config files
-#
-# XXX - byte order?
-#
-0      byte    046       Sendmail frozen configuration 
->16    string  >\0       - version %s
-0      short   0x271c    Sendmail frozen configuration
->16    string  >\0       - version %s
diff --git a/file/magdir/sequent b/file/magdir/sequent
deleted file mode 100644 (file)
index e6f7b52..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sequent:  file(1) magic for Sequent machines
-#
-# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
-# For Sequent's multiprocessor systems (incomplete).
-0      lelong  0x00ea          BALANCE NS32000 .o
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-0      lelong  0x10ea          BALANCE NS32000 executable (0 @ 0)
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-0      lelong  0x20ea          BALANCE NS32000 executable (invalid @ 0)
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-0      lelong  0x30ea          BALANCE NS32000 standalone executable
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-#
-# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.
-# Symmetry magic nums will not be reached if DOS COM comes before them;
-# byte 0xeb is matched before these get a chance.
-0      leshort 0x12eb          SYMMETRY i386 .o
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-0      leshort 0x22eb          SYMMETRY i386 executable (0 @ 0)
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-0      leshort 0x32eb          SYMMETRY i386 executable (invalid @ 0)
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
-0      leshort 0x42eb          SYMMETRY i386 standalone executable
->16    lelong  >0              not stripped
->124   lelong  >0              version %ld
diff --git a/file/magdir/sgi b/file/magdir/sgi
deleted file mode 100644 (file)
index ce9dbc8..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sgi:  file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
-#                         Dec Ultrix (MIPS)
-# all of SGI's *current* machines and OSes run in big-endian mode on the
-# MIPS machines, as far as I know.
-#
-# XXX - what is the blank "-" line?
-#
-# kbd file definitions
-0      string  kbd!map         kbd map file
->8     byte    >0              Ver %d:
->10    short   >0              with %d table(s)
-0      belong  0407            old SGI 68020 executable
-0      belong  0410            old SGI 68020 pure executable
-0      beshort 0x8765          disk quotas file
-0      beshort 0x0506          IRIS Showcase file
->2     byte    0x49            -
->3     byte    x               - version %ld
-0      beshort 0x0226          IRIS Showcase template
->2     byte    0x63            -
->3     byte    x               - version %ld
-0      belong  0x5343464d      IRIS Showcase file
->4     byte    x               - version %ld
-0      belong  0x5443464d      IRIS Showcase template
->4     byte    x               - version %ld
-0      belong  0xdeadbabe      IRIX Parallel Arena
->8     belong  >0              - version %ld
-#
-0      beshort 0x0160          MIPSEB COFF executable
->20    beshort 0407            (impure)
->20    beshort 0410            (swapped)
->20    beshort 0413            (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->22    byte    x               - version %ld
->23    byte    x               \b.%ld
-#
-0      beshort 0x0162          MIPSEL COFF executable
->20    beshort 0407            (impure)
->20    beshort 0410            (swapped)
->20    beshort 0413            (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %d
->22    byte    x               \b.%ld
-#
-0      beshort 0x6001          MIPSEB-LE COFF executable
->20    beshort 03401           (impure)
->20    beshort 04001           (swapped)
->20    beshort 05401           (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %d
->22    byte    x               \b.%ld
-#
-0      beshort 0x6201          MIPSEL-LE COFF executable
->20    beshort 03401           (impure)
->20    beshort 04001           (swapped)
->20    beshort 05401           (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %ld
->22    byte    x               \b.%ld
-#
-# MIPS 2 additions
-#
-0      beshort 0x0163          MIPSEB MIPS-II COFF executable
->20    beshort 0407            (impure)
->20    beshort 0410            (swapped)
->20    beshort 0413            (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->22    byte    x               - version %ld
->23    byte    x               \b.%ld
-#
-0      beshort 0x0166          MIPSEL MIPS-II COFF executable
->20    beshort 0407            (impure)
->20    beshort 0410            (swapped)
->20    beshort 0413            (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->22    byte    x               - version %ld
->23    byte    x               \b.%ld
-#
-0      beshort 0x6301          MIPSEB-LE MIPS-II COFF executable
->20    beshort 03401           (impure)
->20    beshort 04001           (swapped)
->20    beshort 05401           (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %ld
->22    byte    x               \b.%ld
-#
-0      beshort 0x6601          MIPSEL-LE MIPS-II COFF executable
->20    beshort 03401           (impure)
->20    beshort 04001           (swapped)
->20    beshort 05401           (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %ld
->22    byte    x               \b.%ld
-#
-# MIPS 3 additions
-#
-0      beshort 0x0140          MIPSEB MIPS-III COFF executable
->20    beshort 0407            (impure)
->20    beshort 0410            (swapped)
->20    beshort 0413            (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->22    byte    x               - version %ld
->23    byte    x               \b.%ld
-#
-0      beshort 0x0142          MIPSEL MIPS-III COFF executable
->20    beshort 0407            (impure)
->20    beshort 0410            (swapped)
->20    beshort 0413            (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->22    byte    x               - version %ld
->23    byte    x               \b.%ld
-#
-0      beshort 0x4001          MIPSEB-LE MIPS-III COFF executable
->20    beshort 03401           (impure)
->20    beshort 04001           (swapped)
->20    beshort 05401           (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %ld
->22    byte    x               \b.%ld
-#
-0      beshort 0x4201          MIPSEL-LE MIPS-III COFF executable
->20    beshort 03401           (impure)
->20    beshort 04001           (swapped)
->20    beshort 05401           (paged)
->8     belong  >0              not stripped
->8     belong  0               stripped
->23    byte    x               - version %ld
->22    byte    x               \b.%ld
-#
-0      beshort 0x180           MIPSEB Ucode
-0      beshort 0x182           MIPSEL Ucode
-# 32bit core file
-0      belong  0xdeadadb0      IRIX core dump
->4     belong  1               of
->16    string  >\0             '%s'
-# 64bit core file
-0      belong  0xdeadad40      IRIX 64-bit core dump
->4     belong  1               of
->16    string  >\0             '%s'
-# New style crash dump file
-0      string  \x43\x72\x73\x68\x44\x75\x6d\x70        IRIX vmcore dump of
->36    string  >\0                                     '%s'
-# Trusted IRIX info
-0      string  SGIAUDIT        SGI Audit file
->8     byte    x               - version %d
->9     byte    x               \b.%ld
-# Are these three SGI-based file types or general ones?
-0      string  WNGZWZSC        Wingz compiled script
-0      string  WNGZWZSS        Wingz spreadsheet
-0      string  WNGZWZHP        Wingz help file
-#
-0      string  \#Inventor V    IRIS Inventor 1.0 file
-0      string  \#Inventor V2   Open Inventor 2.0 file
-# XXX - I don't know what next thing is!  It is likely to be an image
-# (or movie) format
-0      string  glfHeadMagic();         GLF_TEXT
-4      belong  0x41010000              GLF_BINARY_LSB_FIRST
-4      belong  0x00000141              GLF_BINARY_MSB_FIRST
diff --git a/file/magdir/sgml b/file/magdir/sgml
deleted file mode 100644 (file)
index 985bbec..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sgml:  file(1) magic for Standard Generalized Markup Language
-
-# HyperText Markup Language (HTML) is an SGML document type,
-# 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
-
-# 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
diff --git a/file/magdir/sniffer b/file/magdir/sniffer
deleted file mode 100644 (file)
index bcc3bb4..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sniffer:  file(1) magic for packet captured files
-#
-# From: guy@netapp.com (Guy Harris)
-#
-# Microsoft NetMon (packet capture/display program) capture files.
-#
-0      string          RTSS            NetMon capture file
->4     byte            x               - version %d
->5     byte            x               \b.%d
-#
-# Network General Sniffer capture files.
-#
-0      string          TRSNIFF\ data\ \ \ \ \032       Sniffer capture file
->23    leshort         x               - version %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)
-#
-# "libpcap" capture files.
-# (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.)
-#
-0      ubelong         0xa1b2c3d4      tcpdump capture file (big-endian)
->4     beshort         x               - version %d
->6     beshort         x               \b.%d
->20    belong          0               (No link-layer encapsulation
->20    belong          1               (Ethernet
->20    belong          2               (3Mb Ethernet
->20    belong          3               (AX.25
->20    belong          4               (ProNet
->20    belong          5               (Chaos
->20    belong          6               (IEEE 802.x network
->20    belong          7               (ARCnet
->20    belong          8               (SLIP
->20    belong          9               (PPP
->20    belong          10              (FDDI
->20    belong          11              (RFC 1483 ATM
->16    belong          x               \b, capture length %d)
-0      ulelong         0xa1b2c3d4      tcpdump capture file (little-endian)
->4     leshort         x               - version %d
->6     leshort         x               \b.%d
->20    lelong          0               (No link-layer encapsulation
->20    lelong          1               (Ethernet
->20    lelong          2               (3Mb Ethernet
->20    lelong          3               (AX.25
->20    lelong          4               (ProNet
->20    lelong          5               (Chaos
->20    lelong          6               (IEEE 802.x network
->20    lelong          7               (ARCnet
->20    lelong          8               (SLIP
->20    lelong          9               (PPP
->20    lelong          10              (FDDI
->20    lelong          11              (RFC 1483 ATM
->16    lelong          x               \b, capture length %d)
diff --git a/file/magdir/softquad b/file/magdir/softquad
deleted file mode 100644 (file)
index bbb6661..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# $OpenBSD: softquad,v 1.3 1996/06/26 05:33:05 deraadt Exp $
-
-#------------------------------------------------------------------------------
-# softquad:  file(1) magic for SoftQuad Publishing Software
-#
-# Author/Editor and RulesBuilder
-#
-# XXX - byte order?
-#
-0      string          \<!SQ\ DTD>     Compiled SGML rules file
->9     string          >\0              Type %s
-0      string          \<!SQ\ A/E>     A/E SGML Document binary
->9     string          >\0              Type %s
-0      string          \<!SQ\ STS>     A/E SGML binary styles file
->9     string          >\0              Type %s
-0      short           0xc0de          Compiled PSI (v1) data
-0      short           0xc0da          Compiled PSI (v2) data
->3     string          >\0             (%s)
-# Binary sqtroff font/desc files...
-0      short           0125252         SoftQuad DESC or font file binary
->2     short           >0              - version %d
-# Bitmaps...
-0      string          SQ\ BITMAP1     SoftQuad Raster Format text
-#0     string          SQ\ BITMAP2     SoftQuad Raster Format data
-# sqtroff intermediate language (replacement for ditroff int. lang.)
-0      string          X\              SoftQuad troff Context intermediate
->2     string          495             for AT&T 495 laser printer
->2     string          hp              for Hewlett-Packard LaserJet
->2     string          impr            for IMAGEN imPRESS
->2     string          ps              for PostScript
diff --git a/file/magdir/sun b/file/magdir/sun
deleted file mode 100644 (file)
index 2f0336a..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-
-#------------------------------------------------------------------------------
-# sun:  file(1) magic for Sun machines
-#
-# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
-# releases.  (5.x uses ELF.)
-#
-0      belong&077777777        0600413         sparc demand paged
->0     byte            &0x80
->>20   belong          <4096           shared library
->>20   belong          =4096           dynamically linked executable
->>20   belong          >4096           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-0      belong&077777777        0600410         sparc pure
->0     byte            &0x80           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-0      belong&077777777        0600407         sparc
->0     byte            &0x80           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-
-0      belong&077777777        0400413         mc68020 demand paged
->0     byte            &0x80
->>20   belong          <4096           shared library
->>20   belong          =4096           dynamically linked executable
->>20   belong          >4096           dynamically linked executable
->16    belong          >0              not stripped
-0      belong&077777777        0400410         mc68020 pure
->0     byte            &0x80           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-0      belong&077777777        0400407         mc68020
->0     byte            &0x80           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-
-0      belong&077777777        0200413         mc68010 demand paged
->0     byte            &0x80
->>20   belong          <4096           shared library
->>20   belong          =4096           dynamically linked executable
->>20   belong          >4096           dynamically linked executable
->16    belong          >0              not stripped
-0      belong&077777777        0200410         mc68010 pure
->0     byte            &0x80           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-0      belong&077777777        0200407         mc68010
->0     byte            &0x80           dynamically linked executable
->0     byte            ^0x80           executable
->16    belong          >0              not stripped
-
-# reworked these to avoid anything beginning with zero becoming "old sun-2"
-0      belong          0407            old sun-2 executable
->16    belong          >0              not stripped
-0      belong          0410            old sun-2 pure executable
->16    belong          >0              not stripped
-0      belong          0413            old sun-2 demand paged executable
->16    belong          >0              not stripped
-
-#
-# Core files.  "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
-# binary executed in compatibility mode under SunOS 5.x".
-#
-0      belong          0x080456        SunOS core file
->4     belong          432             (SPARC)
->>132  string          >\0             from '%s'
->>116  belong          =3              (quit)
->>116  belong          =4              (illegal instruction)
->>116  belong          =5              (trace trap)
->>116  belong          =6              (abort)
->>116  belong          =7              (emulator trap)
->>116  belong          =8              (arithmetic exception)
->>116  belong          =9              (kill)
->>116  belong          =10             (bus error)
->>116  belong          =11             (segmentation violation)
->>116  belong          =12             (bad argument to system call)
->>116  belong          =29             (resource lost)
->>120  belong          x               (T=%dK,
->>124  belong          x               D=%dK,
->>128  belong          x               S=%dK)
->4     belong          826             (68K)
->>128  string          >\0             from '%s'
->4     belong          456             (SPARC 4.x BCP)
->>152  string          >\0             from '%s'
-# Sun SunPC
-0      long            0xfa33c08e      SunPC 4.0 Hard Disk
-0      string          #SUNPC_CONFIG   SunPC 4.0 Properties Values
-# Sun snoop
-#
-# XXX - are numbers stored in big-endian format, or in host byte order?
-# They're the same on SPARC, but not the same on x86.
-#
-0      string          snoop           Snoop capture file
->8     long            >0              - version %ld
->12    long            0               (IEEE 802.3)
->12    long            1               (IEEE 802.4)
->12    long            2               (IEEE 802.5)
->12    long            3               (IEEE 802.6)
->12    long            4               (Ethernet)
->12    long            5               (HDLC)
->12    long            6               (Character synchronous)
->12    long            7               (IBM channel-to-channel adapter)
->12    long            8               (FDDI)
->12    long            9               (Unknown)
-# Sun KCMS
-36     string          acsp            Kodak Color Management System, ICC Profile
-
-
diff --git a/file/magdir/teapot b/file/magdir/teapot
deleted file mode 100644 (file)
index d9554bf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#------------------------------------------------------------------------------
-# teapot:  file(1) magic for "teapot" spreadsheet
-#
-0       string          #!teapot\012xdr      teapot work sheet (XDR format)
diff --git a/file/magdir/terminfo b/file/magdir/terminfo
deleted file mode 100644 (file)
index 2226ce8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#------------------------------------------------------------------------------
-# terminfo:  file(1) magic for terminfo
-#
-# XXX - byte order for screen images?
-#
-0      string          \032\001        Compiled terminfo entry
-0      short           0433            Curses screen image
-0      short           0434            Curses screen image
diff --git a/file/magdir/tex b/file/magdir/tex
deleted file mode 100644 (file)
index 5126be8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#------------------------------------------------------------------------------
-# tex:  file(1) magic for TeX files
-#
-# From <conklin@talisman.kaleida.com>
-
-# Although we may know the offset of certain text fields in TeX DVI
-# and font files, we can't use them reliably because they are not
-# zero terminated. [but we do anyway, christos]
-0      string          \367\002        TeX DVI file
->16    string          >\0             (%s)
-0      string          \367\203        TeX generic font data
-0      string          \367\131        TeX packed font data
->3     string          >\0             (%s)
-0      string          \367\312        TeX virtual font data
-0      string          This\ is\ TeX,  TeX transcript text
-0      string          This\ is\ METAFONT,     METAFONT transcript text
-
-# There is no way to detect TeX Font Metric (*.tfm) files without
-# breaking them apart and reading the data.  The following patterns
-# match most *.tfm files generated by METAFONT or afm2tfm.
-2      string          \000\021        TeX font metric data
->33    string          >\0             (%s)
-2      string          \000\022        TeX font metric data
->33    string          >\0             (%s)
-
-# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
-0      string          \\input\ texinfo        Texinfo source text
-0      string          This\ is\ Info\ file    GNU Info text
-
-# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)
-0      string          \\input         TeX document text
-0      string          \\section       LaTeX document text
-0      string          \\setlength     LaTeX document text
-0      string          \\documentstyle LaTeX document text
-0      string          \\chapter       LaTeX document text
diff --git a/file/magdir/ti-8x b/file/magdir/ti-8x
deleted file mode 100644 (file)
index d740060..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# ------------------------------------------------------------------------
-# ti-8x: file(1) magic for the TI-8x and TI-92 Graphing Calculators.
-#
-# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).
-#
-# NOTE: This list is not complete.
-#
-# Magic Numbers for the TI-82
-#
-0               string          **TI82**        TI-82 Graphing Calculator
->0x000037       byte            0x0B            TI-BASIC Group/Program File.
-#
-# Magic Numbers for the TI-83
-#
-0               string          **TI83**        TI-83 Graphing Calculator
->0x000037       byte            0x0B            TI-BASIC Group/Program File.
-#
-# Magic Numbers for the TI-85
-#
-0               string          **TI85**        TI-85 Graphing Calculator
->11             string          Backup          Backup File.
->0x000032       string          ZS4             - ZShell Version 4 File.
->0x000032       string          ZS3             - ZShell Version 3 File.
->0x00000B       string          GDatabase       Graphics Database.
->0x00003B       byte            0x12            TI-BASIC Group/Program File.
-#
-# Magic Numbers for the TI-92
-#
-0               string          **TI92**        TI-92 Graphing Calculator
->0x000058       byte            0x12            TI-BASIC Group File.
->0x000012       string          Function        Function.
->0x000048       byte            0x12            TI-BASIC Program.
-# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
-# program/group magic numbers in here because I cannot find any.
-0               string          **TI80**        TI-80 Graphing Calculator File.
-0               string          **TI81**        TI-81 Graphing Calculator File.
diff --git a/file/magdir/timezone b/file/magdir/timezone
deleted file mode 100644 (file)
index e47a371..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#------------------------------------------------------------------------------
-# timezone:  file(1) magic for timezone data
-#
-# from Daniel Quinlan (quinlan@yggdrasil.com)
-# this should work on Linux, SunOS, and maybe others
-0      string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0      timezone data
-0      string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0      timezone data
-0      string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0      timezone data
-0      string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0      timezone data
-0      string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0      timezone data
-0      string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0      timezone data
diff --git a/file/magdir/troff b/file/magdir/troff
deleted file mode 100644 (file)
index ea75e85..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#------------------------------------------------------------------------------
-# troff:  file(1) magic for *roff
-#
-# updated by Daniel Quinlan (quinlan@yggdrasil.com)
-
-# troff input
-0      string          .\\"            troff or preprocessor input text
-0      string          '\\"            troff or preprocessor input text
-0      string          '.\\"           troff or preprocessor input text
-0      string          \\"             troff or preprocessor input text
-
-# ditroff intermediate output text
-0      string          x\ T            ditroff text
->4     string          cat             for the C/A/T phototypesetter
->4     string          ps              for PostScript
->4     string          dvi             for DVI
->4     string          ascii           for ASCII
->4     string          lj4             for LaserJet 4
->4     string          latin1          for ISO 8859-1 (Latin 1)
->4     string          X75             for xditview at 75dpi
->>7    string          -12             (12pt)
->4     string          X100            for xditview at 100dpi
->>8    string          -12             (12pt)
-
-# output data formats
-0      string          \100\357        very old (C/A/T) troff output data
diff --git a/file/magdir/typeset b/file/magdir/typeset
deleted file mode 100644 (file)
index 2eda7c3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#------------------------------------------------------------------------------
-# typeset:  file(1) magic for other typesetting
-#
-0      string          Interpress/Xerox        Xerox InterPress data
->16    string          /                       (version
->>17   string          >\0                     %s)
diff --git a/file/magdir/unknown b/file/magdir/unknown
deleted file mode 100644 (file)
index 843dc29..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#------------------------------------------------------------------------------
-# unknown:  file(1) magic for unknown machines
-#
-# XXX - this probably should be pruned, as it'll match PDP-11 and
-# VAX image formats.
-#
-# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
-# respectively).
-#
-# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
-# have the "version %ld", which may be a bogus COFFism (I don't think
-# there ever was COFF for the PDP-11).
-#
-# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
-# long, as it would be on a VAX.
-#
-# 0x10C is 0414, 0x10D is 0415, and 0x10E is 416; those *are* unknown.
-#
-0      short           0x107           unknown machine executable
->8     short           >0              not stripped
->15    byte            >0              - version %ld
-0      short           0x108           unknown pure executable
->8     short           >0              not stripped
->15    byte            >0              - version %ld
-0      short           0x109           PDP-11 separate I&D
->8     short           >0              not stripped
->15    byte            >0              - version %ld
-0      short           0x10b           unknown pure executable
->8     short           >0              not stripped
->15    byte            >0              - version %ld
-0      long            0x10c           unknown demand paged pure executable
->16    long            >0              not stripped
-0      long            0x10d           unknown demand paged pure executable
->16    long            >0              not stripped
-0      long            0x10e           unknown readable demand paged pure executable
diff --git a/file/magdir/uuencode b/file/magdir/uuencode
deleted file mode 100644 (file)
index 7e88619..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-#------------------------------------------------------------------------------
-# uuencode:  file(1) magic for ASCII-encoded files
-#
-
-# GRR:  the first line of xxencoded files is identical to that in uuencoded
-# files, but the first character in most subsequent lines is 'h' instead of
-# 'M'.  (xxencoding uses lowercase letters in place of most of uuencode's
-# punctuation and survives BITNET gateways better.)  If regular expressions
-# were supported, this entry could possibly be split into two with
-# "begin\040\.\*\012M" or "begin\040\.\*\012h" (where \. and \* are REs).
-0      string          begin\040       uuencoded or xxencoded text
-
-# btoa(1) is an alternative to uuencode that requires less space.
-0      string          xbtoa\ Begin    btoa'd text
-
-# ship(1) is another, much cooler alternative to uuencode.
-# Greg Roelofs, newt@uchicago.edu
-0      string          $\012ship       ship'd binary text
-
-# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
-# Greg Roelofs, newt@uchicago.edu
-0      string  Decode\ the\ following\ with\ bdeco     bencoded News text
-
-# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
-# Daniel Quinlan, quinlan@yggdrasil.com
-11     string  must\ be\ converted\ with\ BinHex       BinHex binary text
->41    string  x                                       \b, version %.3s
-
-# GRR:  is MIME BASE64 encoding handled somewhere?
diff --git a/file/magdir/varied.out b/file/magdir/varied.out
deleted file mode 100644 (file)
index 9245cfc..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#------------------------------------------------------------------------------
-# varied.out:  file(1) magic for various USG systems
-#
-#      Herewith many of the object file formats used by USG systems.
-#      Most have been moved to files for a particular processor,
-#      and deleted if they duplicate other entries.
-#
-0      short           0610            Perkin-Elmer executable
-# AMD 29K
-0      beshort         0572            amd 29k coff noprebar executable
-0      beshort         01572           amd 29k coff prebar executable
-0      beshort         0160007         amd 29k coff archive
-# Cray
-6      beshort         0407            unicos (cray) executable
-# Ultrix 4.3
-596    string          \130\337\377\377        Ultrix core file
->600   string          >\0     '%s'
diff --git a/file/magdir/vax b/file/magdir/vax
deleted file mode 100644 (file)
index 7dd86cc..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#------------------------------------------------------------------------------
-# vax:  file(1) magic for VAX executable/object and APL workspace
-#
-0      lelong          0101557         VAX single precision APL workspace
-0      lelong          0101556         VAX double precision APL workspace
-
-#
-# VAX a.out (32V, BSD)
-#
-0      lelong          0407            VAX executable
->16    lelong          >0              not stripped
-
-0      lelong          0410            VAX pure executable
->16    lelong          >0              not stripped
-
-0      lelong          0413            VAX demand paged pure executable
->16    lelong          >0              not stripped
-
-0      lelong          0420            VAX demand paged (first page unmapped) pure executable
->16    lelong          >0              not stripped
-
-#
-# VAX COFF
-#
-# The `versions' should be un-commented if they work for you.
-# (Was the problem just one of endianness?)
-#
-0      leshort         0570            VAX COFF executable
->12    lelong          >0              not stripped
->22    leshort         >0              - version %ld
-0      leshort         0575            VAX COFF pure executable
->12    lelong          >0              not stripped
->22    leshort         >0              - version %ld
diff --git a/file/magdir/vicar b/file/magdir/vicar
deleted file mode 100644 (file)
index ab216ee..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#------------------------------------------------------------------------------
-# vicar:  file(1) magic for VICAR files.
-#
-# From: Ossama Othman <othman@astrosun.tn.cornell.edu
-# VICAR is JPL's in-house spacecraft image processing program
-# VICAR image
-0      string  LBLSIZE=        VICAR image data
->32    string  BYTE            \b, 8 bits  = VAX byte
->32    string  HALF            \b, 16 bits = VAX word     = Fortran INTEGER*2
->32    string  FULL            \b, 32 bits = VAX longword = Fortran INTEGER*4
->32    string  REAL            \b, 32 bits = VAX longword = Fortran REAL*4
->32    string  DOUB            \b, 64 bits = VAX quadword = Fortran REAL*8
->32    string  COMPLEX         \b, 64 bits = VAX quadword = Fortran COMPLEX*8
-# VICAR label file
-43     string  SFDU_LABEL      VICAR label file
diff --git a/file/magdir/visx b/file/magdir/visx
deleted file mode 100644 (file)
index 4919964..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#------------------------------------------------------------------------------
-# visx:  file(1) magic for Visx format files
-#
-0      short           0x5555          VISX image file
->2     byte            0               (zero)
->2     byte            1               (unsigned char)
->2     byte            2               (short integer)
->2     byte            3               (float 32)
->2     byte            4               (float 64)
->2     byte            5               (signed char)
->2     byte            6               (bit-plane)
->2     byte            7               (classes)
->2     byte            8               (statistics)
->2     byte            10              (ascii text)
->2     byte            15              (image segments)
->2     byte            100             (image set)
->2     byte            101             (unsigned char vector)
->2     byte            102             (short integer vector)
->2     byte            103             (float 32 vector)
->2     byte            104             (float 64 vector)
->2     byte            105             (signed char vector)
->2     byte            106             (bit plane vector)
->2     byte            121             (feature vector)
->2     byte            122             (feature vector library)
->2     byte            124             (chain code)
->2     byte            126             (bit vector)
->2     byte            130             (graph)
->2     byte            131             (adjacency graph)
->2     byte            132             (adjacency graph library)
->2     string          .VISIX          (ascii text)
diff --git a/file/magdir/vms b/file/magdir/vms
deleted file mode 100644 (file)
index c91186f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#------------------------------------------------------------------------------
-# vms:  file(1) magic for VMS executables (experimental)
-#
-# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)
-
-# GRR 950122:  I'm just guessing on these, based on inspection of the headers
-# of three executables each for Alpha and VAX architectures.  The VAX files
-# all had headers similar to this:
-#
-#   00000  b0 00 30 00 44 00 60 00  00 00 00 00 30 32 30 35  ..0.D.`.....0205
-#   00010  01 01 00 00 ff ff ff ff  ff ff ff ff 00 00 00 00  ................
-#
-0      string  \xb0\0\x30\0    VMS VAX executable
->44032 string  PK\003\004      \b, Info-ZIP SFX archive v5.12 w/decryption
-#
-# The AXP files all looked like this, except that the byte at offset 0x22
-# was 06 in some of them and 07 in others:
-#
-#   00000  03 00 00 00 00 00 00 00  ec 02 00 00 10 01 00 00  ................
-#   00010  68 00 00 00 98 00 00 00  b8 00 00 00 00 00 00 00  h...............
-#   00020  00 00 07 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
-#   00030  00 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  ................
-#   00040  00 00 00 00 ff ff ff ff  ff ff ff ff 02 00 00 00  ................
-#
-0      belong  0x03000000      VMS Alpha executable
->75264 string  PK\003\004      \b, Info-ZIP SFX archive v5.12 w/decryption
diff --git a/file/magdir/wordperfect b/file/magdir/wordperfect
deleted file mode 100644 (file)
index c77ac8d..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
-0      string  \377WPC\020\000\000\000\022\012\001\001\000\000\000\000 (WP) loadable text
->15    byte    0       Optimized for Intel
->15    byte    1       Optimized for Non-Intel
-1      string  WPC     (Corel/WP)
->8     short   257     WordPerfect macro
->8     short   258     WordPerfect help file
->8     short   259     WordPerfect keyboard file
->8     short   266     WordPerfect document
->8     short   267     WordPerfect dictionary
->8     short   268     WordPerfect thesaurus
->8     short   269     WordPerfect block
->8     short   270     WordPerfect rectangular block
->8     short   271     WordPerfect column block
->8     short   272     WordPerfect printer data
->8     short   275     WordPerfect printer data
->8     short   276     WordPerfect driver resource data
->8     short   279     WordPerfect hyphenation code
->8     short   280     WordPerfect hyphenation data
->8     short   281     WordPerfect macro resource data
->8     short   283     WordPerfect hyphenation lex
->8     short   285     WordPerfect wordlist
->8     short   286     WordPerfect equation resource data
->8     short   289     WordPerfect spell rules
->8     short   290     WordPerfect dictionary rules
->8     short   295     WordPerfect spell rules (Microlytics)
->8     short   299     WordPerfect settings file
->8     short   301     WordPerfect 4.2 document
->8     short   325     WordPerfect dialog file
->8     short   332     WordPerfect button bar
->8     short   513     Shell macro
->8     short   522     Shell definition
->8     short   769     Notebook macro
->8     short   770     Notebook help file
->8     short   771     Notebook keyboard file
->8     short   778     Notebook definition
->8     short   1026    Calculator help file
->8     short   1538    Calendar help file
->8     short   1546    Calendar data file
->8     short   1793    Editor macro
->8     short   1794    Editor help file
->8     short   1795    Editor keyboard file
->8     short   1817    Editor macro resource file
->8     short   2049    Macro editor macro
->8     short   2050    Macro editor help file
->8     short   2051    Macro editor keyboard file
->8     short   2305    PlanPerfect macro
->8     short   2306    PlanPerfect help file
->8     short   2307    PlanPerfect keyboard file
->8     short   2314    PlanPerfect worksheet
->8     short   2319    PlanPerfect printer definition
->8     short   2322    PlanPerfect graphic definition
->8     short   2323    PlanPerfect data
->8     short   2324    PlanPerfect temporary printer
->8     short   2329    PlanPerfect macro resource data
->8     byte    11      Mail
->8     short   2818    help file
->8     short   2821    distribution list
->8     short   2826    out box
->8     short   2827    in box
->8     short   2836    users archived mailbox
->8     short   2837    archived message database
->8     short   2838    archived attachments
->8     short   3083    Printer temporary file
->8     short   3330    Scheduler help file
->8     short   3338    Scheduler in file
->8     short   3339    Scheduler out file
->8     short   3594    GroupWise settings file
->8     short   3601    GroupWise directory services
->8     short   3627    GroupWise settings file
->8     short   4362    Terminal resource data
->8     short   4363    Terminal resource data
->8     short   4395    Terminal resource data
->8     short   4619    GUI loadable text
->8     short   4620    graphics resource data
->8     short   4621    printer settings file
->8     short   4622    port definition file
->8     short   4623    print queue parameters
->8     short   4624    compressed file
->8     short   5130    Network service msg file
->8     short   5131    Network service msg file
->8     short   5132    Async gateway login msg
->8     short   5134    GroupWise message file
->8     short   7956    GroupWise admin domain database
->8     short   7957    GroupWise admin host database
->8     short   7959    GroupWise admin remote host database
->8     short   7960    GroupWise admin ADS deferment data file
->8     short   8458    IntelliTAG (SGML) compiled DTD
->8     long    18219264        WordPerfect graphic image (1.0)
->8     long    18219520        WordPerfect graphic image (2.0)
-#end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
diff --git a/file/magdir/xenix b/file/magdir/xenix
deleted file mode 100644 (file)
index 1acadec..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-
-#------------------------------------------------------------------------------
-# xenix:  file(1) magic for Microsoft Xenix
-#
-# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
-# model" lifted from "magic.xenix", with comment "derived empirically;
-# treat as folklore until proven"
-#
-# "small model", "large model", "huge model" stuff lifted from XXX
-#
-# XXX - "x.out" collides with PDP-11 archives
-#
-0      string          core            core file (Xenix)
-0      byte            0x80            8086 relocatable (Microsoft)
-0      leshort         0xff65          x.out
->2     string          __.SYMDEF        randomized
->0     byte            x               archive
-0      leshort         0x206           Microsoft a.out
->8     leshort         1               Middle model
->0x1e  leshort         &0x10           overlay
->0x1e  leshort         &0x2            separate
->0x1e  leshort         &0x4            pure
->0x1e  leshort         &0x800          segmented
->0x1e  leshort         &0x400          standalone
->0x1e  leshort         &0x8            fixed-stack
->0x1c  byte            &0x80           byte-swapped
->0x1c  byte            &0x40           word-swapped
->0x10  lelong          >0              not-stripped
->0x1e  leshort         ^0xc000         pre-SysV
->0x1e  leshort         &0x4000         V2.3
->0x1e  leshort         &0x8000         V3.0
->0x1c  byte            &0x4            86
->0x1c  byte            &0xb            186
->0x1c  byte            &0x9            286
->0x1c  byte            &0xa            386
->0x1f  byte            <0x040          small model
->0x1f  byte            =0x048          large model     
->0x1f  byte            =0x049          huge model 
->0x1e  leshort         &0x1            executable
->0x1e  leshort         ^0x1            object file
->0x1e  leshort         &0x40           Large Text
->0x1e  leshort         &0x20           Large Data
->0x1e  leshort         &0x120          Huge Objects Enabled
->0x10  lelong          >0              not stripped
-
-0      leshort         0x140           old Microsoft 8086 x.out
->0x3   byte            &0x4            separate
->0x3   byte            &0x2            pure
->0     byte            &0x1            executable
->0     byte            ^0x1            relocatable
->0x14  lelong          >0              not stripped
-
-0      lelong          0x206           b.out
->0x1e  leshort         &0x10           overlay
->0x1e  leshort         &0x2            separate
->0x1e  leshort         &0x4            pure
->0x1e  leshort         &0x800          segmented
->0x1e  leshort         &0x400          standalone
->0x1e  leshort         &0x1            executable
->0x1e  leshort         ^0x1            object file
->0x1e  leshort         &0x4000         V2.3
->0x1e  leshort         &0x8000         V3.0
->0x1c  byte            &0x4            86
->0x1c  byte            &0xb            186
->0x1c  byte            &0x9            286
->0x1c  byte            &0x29           286
->0x1c  byte            &0xa            386
->0x1e  leshort         &0x4            Large Text
->0x1e  leshort         &0x2            Large Data
->0x1e  leshort         &0x102          Huge Objects Enabled
-
-0      leshort         0x580           XENIX 8086 relocatable or 80286 small model
diff --git a/file/magdir/zilog b/file/magdir/zilog
deleted file mode 100644 (file)
index b746e20..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#------------------------------------------------------------------------------
-# zilog:  file(1) magic for Zilog Z8000.
-#
-# Was it big-endian or little-endian?  My Product Specification doesn't
-# say.
-#
-0      long            0xe807          object file (z8000 a.out)
-0      long            0xe808          pure object file (z8000 a.out)
-0      long            0xe809          separate object file (z8000 a.out)
-0      long            0xe805          overlay object file (z8000 a.out)
diff --git a/file/magdir/zyxel b/file/magdir/zyxel
deleted file mode 100644 (file)
index 12a6abd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#------------------------------------------------------------------------------
-# zyxel:  file(1) magic for ZyXEL modems
-#
-# From <rob@pe1chl.ampr.org>
-# These are the /etc/magic entries to decode datafiles as used for the
-# ZyXEL U-1496E DATA/FAX/VOICE modems.  (This header conforms to a
-# ZyXEL-defined standard)
-
-0      string          ZyXEL\002       ZyXEL voice data
->10    byte            0               - CELP encoding
->10    byte&0x0B       1               - ADPCM2 encoding
->10    byte&0x0B       2               - ADPCM3 encoding
->10    byte&0x0B       3               - ADPCM4 encoding
->10    byte&0x0B       8               - New ADPCM3 encoding
->10    byte&0x04       4               with resync
diff --git a/file/magic.5 b/file/magic.5
deleted file mode 100644 (file)
index 26cece4..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-.\" $OpenBSD: magic.5,v 1.3 1997/02/09 23:58:28 millert Exp $
-.\" install as magic.4 on USG, magic.5 on V7 or Berkeley systems.
-.TH MAGIC 5 "Public Domain"
-.SH NAME
-magic \- file command's magic number file
-.SH DESCRIPTION
-This manual page documents the format of the magic file as
-used by the
-.BR file (1)
-command, version 3.22. The
-.B file
-command identifies the type of a file using,
-among other tests,
-a test for whether the file begins with a certain
-.IR "magic number" .
-The file
-.I /etc/magic
-specifies what magic numbers are to be tested for,
-what message to print if a particular magic number is found,
-and additional information to extract from the file.
-.PP
-Each line of the file specifies a test to be performed.
-A test compares the data starting at a particular offset
-in the file with a 1-byte, 2-byte, or 4-byte numeric value or
-a string.  If the test succeeds, a message is printed.
-The line consists of the following fields:
-.IP offset \w'message'u+2n
-A number specifying the offset, in bytes, into the file of the data
-which is to be tested.
-.IP type
-The type of the data to be tested.  The possible values are:
-.RS
-.IP byte \w'message'u+2n
-A one-byte value.
-.IP short
-A two-byte value (on most systems) in this machine's native byte order.
-.IP long
-A four-byte value (on most systems) in this machine's native byte order.
-.IP string
-A string of bytes.
-.IP date
-A four-byte value interpreted as a unix date.
-.IP beshort
-A two-byte value (on most systems) in big-endian byte order.
-.IP belong
-A four-byte value (on most systems) in big-endian byte order.
-.IP bedate
-A four-byte value (on most systems) in big-endian byte order,
-interpreted as a unix date.
-.IP leshort
-A two-byte value (on most systems) in little-endian byte order.
-.IP lelong
-A four-byte value (on most systems) in little-endian byte order.
-.IP ledate
-A four-byte value (on most systems) in little-endian byte order,
-interpreted as a unix date.
-.RE
-.PP
-The numeric types may optionally be followed by
-.B &
-and a numeric value,
-to specify that the value is to be AND'ed with the
-numeric value before any comparisons are done.  Prepending a
-.B u
-to the type indicates that ordered comparisons should be unsigned.
-.IP test
-The value to be compared with the value from the file.  If the type is
-numeric, this value
-is specified in C form; if it is a string, it is specified as a C string
-with the usual escapes permitted (e.g. \en for new-line).
-.IP
-Numeric values
-may be preceded by a character indicating the operation to be performed.
-It may be
-.BR = ,
-to specify that the value from the file must equal the specified value,
-.BR < ,
-to specify that the value from the file must be less than the specified
-value,
-.BR > ,
-to specify that the value from the file must be greater than the specified
-value,
-.BR & ,
-to specify that the value from the file must have set all of the bits 
-that are set in the specified value,
-.BR ^ ,
-to specify that the value from the file must have clear any of the bits 
-that are set in the specified value, or
-.BR x ,
-to specify that any value will match. If the character is omitted,
-it is assumed to be
-.BR = .
-.IP
-Numeric values are specified in C form; e.g.
-.B 13
-is decimal,
-.B 013
-is octal, and
-.B 0x13
-is hexadecimal.
-.IP
-For string values, the byte string from the
-file must match the specified byte string. 
-The operators
-.BR = ,
-.B <
-and
-.B >
-(but not
-.BR & )
-can be applied to strings.
-The length used for matching is that of the string argument
-in the magic file.  This means that a line can match any string, and
-then presumably print that string, by doing
-.B >\e0
-(because all strings are greater than the null string).
-.IP message
-The message to be printed if the comparison succeeds.  If the string
-contains a
-.BR printf (3S)
-format specification, the value from the file (with any specified masking
-performed) is printed using the message as the format string.
-.PP
-Some file formats contain additional information which is to be printed
-along with the file type.  A line which begins with the character
-.B >
-indicates additional tests and messages to be printed.  The number of
-.B >
-on the line indicates the level of the test; a line with no
-.B >
-at the beginning is considered to be at level 0.
-Each line at level
-.IB n \(pl1
-is under the control of the line at level
-.IB n
-most closely preceding it in the magic file.
-If the test on a line at level
-.I n
-succeeds, the tests specified in all the subsequent lines at level
-.IB n \(pl1
-are performed, and the messages printed if the tests succeed.  The next
-line at level
-.I n
-terminates this.
-If the first character following the last
-.B >
-is a
-.B (
-then the string after the parenthesis is interpreted as an indirect offset.
-That means that the number after the parenthesis is used as an offset in
-the file. The value at that offset is read, and is used again as an offset
-in the file. Indirect offsets are of the form:
-.BI (( x [.[bsl]][+-][ y ]).
-The value of 
-.I x
-is used as an offset in the file. A byte, short or long is read at that offset
-depending on the 
-.B [bsl] 
-type specifier. To that number the value of
-.I y
-is added and the result is used as an offset in the file. The default type
-if one is not specified is long.
-.PP
-Sometimes you do not know the exact offset as this depends on the length of
-preceding fields. You can specify an offset relative to the end of the
-last uplevel field (of course this may only be done for sublevel tests, i.e.
-test beginning with 
-.B >
-). Such a relative offset is specified using
-.B &
-as a prefix to the offset.
-.SH BUGS
-The formats 
-.IR long ,
-.IR belong ,
-.IR lelong ,
-.IR short ,
-.IR beshort ,
-.IR leshort ,
-.IR date ,
-.IR bedate ,
-and
-.I ledate
-are system-dependent; perhaps they should be specified as a number
-of bytes (2B, 4B, etc), 
-since the files being recognized typically come from
-a system on which the lengths are invariant.
-.PP
-There is (currently) no support for specified-endian data to be used in
-indirect offsets.
-.SH SEE ALSO
-.BR file (1)
-\- the command that reads this file.
-.\"
-.\" From: guy@sun.uucp (Guy Harris)
-.\" Newsgroups: net.bugs.usg
-.\" Subject: /etc/magic's format isn't well documented
-.\" Message-ID: <2752@sun.uucp>
-.\" Date: 3 Sep 85 08:19:07 GMT
-.\" Organization: Sun Microsystems, Inc.
-.\" Lines: 136
-.\" 
-.\" Here's a manual page for the format accepted by the "file" made by adding
-.\" the changes I posted to the S5R2 version.
-.\"
-.\" Modified for Ian Darwin's version of the file command.
diff --git a/file/names.h b/file/names.h
deleted file mode 100644 (file)
index 1da75b4..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: names.h,v 1.3 1997/02/09 23:58:29 millert Exp $       */
-
-/*
- * Names.h - names and types used by ascmagic in file(1).
- * These tokens are here because they can appear anywhere in
- * the first HOWMANY bytes, while tokens in /etc/magic must
- * appear at fixed offsets into the file. Don't make HOWMANY
- * too high unless you have a very fast CPU.
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * See LEGAL.NOTICE
- */
-
-/* these types are used to index the table 'types': keep em in sync! */
-#define L_C    0               /* first and foremost on UNIX */
-#define L_CC   1               /* Bjarne's postincrement */
-#define        L_FORT  2               /* the oldest one */
-#define L_MAKE 3               /* Makefiles */
-#define L_PLI  4               /* PL/1 */
-#define L_MACH 5               /* some kinda assembler */
-#define L_ENG  6               /* English */
-#define        L_PAS   7               /* Pascal */
-#define        L_MAIL  8               /* Electronic mail */
-#define        L_NEWS  9               /* Usenet Netnews */
-
-static char *types[] = {
-       "C program text",
-       "C++ program text",
-       "FORTRAN program text",
-       "make commands text" ,
-       "PL/1 program text",
-       "assembler program text",
-       "English text",
-       "Pascal program text",
-       "mail text",
-       "news text",
-       "can't happen error on names.h/types",
-       0};
-
-static struct names {
-       char *name;
-       short type;
-} names[] = {
-       /* These must be sorted by eye for optimal hit rate */
-       /* Add to this list only after substantial meditation */
-       {"//",          L_CC},
-       {"template",    L_CC},
-       {"virtual",     L_CC},
-       {"class",       L_CC},
-       {"public:",     L_CC},
-       {"private:",    L_CC},
-       {"/*",          L_C},   /* must precede "The", "the", etc. */
-       {"#include",    L_C},
-       {"char",        L_C},
-       {"The",         L_ENG},
-       {"the",         L_ENG},
-       {"double",      L_C},
-       {"extern",      L_C},
-       {"float",       L_C},
-       {"real",        L_C},
-       {"struct",      L_C},
-       {"union",       L_C},
-       {"CFLAGS",      L_MAKE},
-       {"LDFLAGS",     L_MAKE},
-       {"all:",        L_MAKE},
-       {".PRECIOUS",   L_MAKE},
-/* Too many files of text have these words in them.  Find another way
- * to recognize Fortrash.
- */
-#ifdef NOTDEF
-       {"subroutine",  L_FORT},
-       {"function",    L_FORT},
-       {"block",       L_FORT},
-       {"common",      L_FORT},
-       {"dimension",   L_FORT},
-       {"integer",     L_FORT},
-       {"data",        L_FORT},
-#endif /*NOTDEF*/
-       {".ascii",      L_MACH},
-       {".asciiz",     L_MACH},
-       {".byte",       L_MACH},
-       {".even",       L_MACH},
-       {".globl",      L_MACH},
-       {".text",       L_MACH},
-       {"clr",         L_MACH},
-       {"(input,",     L_PAS},
-       {"dcl",         L_PLI},
-       {"Received:",   L_MAIL},
-       {">From",       L_MAIL},
-       {"Return-Path:",L_MAIL},
-       {"Cc:",         L_MAIL},
-       {"Newsgroups:", L_NEWS},
-       {"Path:",       L_NEWS},
-       {"Organization:",L_NEWS},
-       {NULL,          0}
-};
-#define NNAMES ((sizeof(names)/sizeof(struct names)) - 1)
diff --git a/file/patchlevel.h b/file/patchlevel.h
deleted file mode 100644 (file)
index 6546ad9..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: patchlevel.h,v 1.4 1997/02/09 23:58:31 millert Exp $  */
-
-#define        FILE_VERSION_MAJOR      3
-#define        patchlevel              22
-
-/*
- * Patchlevel file for Ian Darwin's MAGIC command.
- *
- * Log: patchlevel.h,v
- * Revision 1.22  1997/01/15 17:23:24  christos
- * - add support for elf core files: find the program name under SVR4 [Ken Pizzini]
- * - print strings only up to the first carriage return [various]
- * - freebsd international ascii support [J Wunsch]
- * - magic fixes and additions [Guy Harris]
- * - 64 bit fixes [Larry Schwimmer]
- * - support for both utime and utimes, but don't restore file access times
- *   by default [various]
- * - \xXX only takes 2 hex digits, not 3.
- * - re-implement support for core files [Guy Harris]
- *
- * Revision 1.21  1996/10/05 18:15:29  christos
- * Segregate elf stuff and conditionally enable it with -DBUILTIN_ELF
- * More magic fixes
- *
- * Revision 1.20  1996/06/22  22:15:52  christos
- * - support relative offsets of the form >&
- * - fix bug with truncating magic strings that contain \n
- * - file -f - did not read from stdin as documented
- * - support elf file parsing using our own elf support.
- * - as always magdir fixes and additions.
- *
- * Revision 1.19  1995/10/27  23:14:46  christos
- * Ability to parse colon separated list of magic files
- * New LEGAL.NOTICE
- * Various magic file changes
- *
- * Revision 1.18  1995/05/20  22:09:21  christos
- * Passed incorrect argument to eatsize().
- * Use %ld and %lx where appropriate.
- * Remove unused variables
- * ELF support for both big and little endian
- * Fixes for small files again.
- *
- * Revision 1.17  1995/04/28  17:29:13  christos
- * - Incorrect nroff detection fix from der Mouse
- * - Lost and incorrect magic entries.
- * - Added ELF stripped binary detection [in C; ugh]
- * - Look for $MAGIC to find the magic file.
- * - Eat trailing size specifications from numbers i.e. ignore 10L
- * - More fixes for very short files
- *
- * Revision 1.16  1995/03/25  22:06:45  christos
- * - use strtoul() where it exists.
- * - fix sign-extend bug
- * - try to detect tar archives before nroff files, otherwise
- *   tar files where the first file starts with a . will not work
- *
- * Revision 1.15  1995/01/21  21:03:35  christos
- * Added CSECTION for the file man page
- * Added version flag -v
- * Fixed bug with -f input flag (from iorio@violet.berkeley.edu)
- * Lots of magic fixes and reorganization...
- *
- * Revision 1.14  1994/05/03  17:58:23  christos
- * changes from mycroft@gnu.ai.mit.edu (Charles Hannum) for unsigned
- *
- * Revision 1.13  1994/01/21  01:27:01  christos
- * Fixed null termination bug from Don Seeley at BSDI in ascmagic.c
- *
- * Revision 1.12  1993/10/27  20:59:05  christos
- * Changed -z flag to understand gzip format too.
- * Moved builtin compression detection to a table, and move
- * the compress magic entry out of the source.
- * Made printing of numbers unsigned, and added the mask to it.
- * Changed the buffer size to 8k, because gzip will refuse to
- * unzip just a few bytes.
- *
- * Revision 1.11  1993/09/24  18:49:06  christos
- * Fixed small bug in softmagic.c introduced by
- * copying the data to be examined out of the input
- * buffer. Changed the Makefile to use sed to create
- * the correct man pages.
- *
- * Revision 1.10  1993/09/23  21:56:23  christos
- * Passed purify. Fixed indirections. Fixed byte order printing.
- * Fixed segmentation faults caused by referencing past the end
- * of the magic buffer. Fixed bus errors caused by referencing
- * unaligned shorts or longs.
- *
- * Revision 1.9  1993/03/24  14:23:40  ian
- * Batch of minor changes from several contributors.
- *
- * Revision 1.8  93/02/19  15:01:26  ian
- * Numerous changes from Guy Harris too numerous to mention but including
- * byte-order independance, fixing "old-style masking", etc. etc. A bugfix
- * for broken symlinks from martin@@d255s004.zfe.siemens.de.
- * 
- * Revision 1.7  93/01/05  14:57:27  ian
- * Couple of nits picked by Christos (again, thanks).
- * 
- * Revision 1.6  93/01/05  13:51:09  ian
- * Lotsa work on the Magic directory.
- * 
- * Revision 1.5  92/09/14  14:54:51  ian
- * Fix a tiny null-pointer bug in previous fix for tar archive + uncompress.
- * 
- */
-
diff --git a/file/print.c b/file/print.c
deleted file mode 100644 (file)
index aff7a55..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: print.c,v 1.3 1997/02/09 23:58:32 millert Exp $       */
-
-/*
- * print.c - debugging printout routines
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#if __STDC__
-# include <stdarg.h>
-#else
-# include <varargs.h>
-#endif
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-#include "file.h"
-
-#ifndef lint
-#if 0
-static char *moduleid = "$OpenBSD: print.c,v 1.3 1997/02/09 23:58:32 millert Exp $";
-#endif
-#endif  /* lint */
-
-#define SZOF(a)        (sizeof(a) / sizeof(a[0]))
-
-void
-mdump(m)
-struct magic *m;
-{
-       static char *typ[] = {   "invalid", "byte", "short", "invalid",
-                                "long", "string", "date", "beshort",
-                                "belong", "bedate", "leshort", "lelong",
-                                "ledate" };
-       (void) fputc('[', stderr);
-       (void) fprintf(stderr, ">>>>>>>> %d" + 8 - (m->cont_level & 7),
-                      m->offset);
-
-       if (m->flag & INDIR)
-               (void) fprintf(stderr, "(%s,%d),",
-                              (m->in.type >= 0 && m->in.type < SZOF(typ)) ? 
-                                       typ[(unsigned char) m->in.type] :
-                                       "*bad*",
-                              m->in.offset);
-
-       (void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
-                      (m->type >= 0 && m->type < SZOF(typ)) ? 
-                               typ[(unsigned char) m->type] : 
-                               "*bad*");
-       if (m->mask != ~0L)
-               (void) fprintf(stderr, " & %.8x", m->mask);
-
-       (void) fprintf(stderr, ",%c", m->reln);
-
-       if (m->reln != 'x') {
-           switch (m->type) {
-           case BYTE:
-           case SHORT:
-           case LONG:
-           case LESHORT:
-           case LELONG:
-           case BESHORT:
-           case BELONG:
-                   (void) fprintf(stderr, "%d", m->value.l);
-                   break;
-           case STRING:
-                   showstr(stderr, m->value.s, -1);
-                   break;
-           case DATE:
-           case LEDATE:
-           case BEDATE:
-                   {
-                           char *rt, *pp = ctime((time_t*) &m->value.l);
-                           if ((rt = strchr(pp, '\n')) != NULL)
-                                   *rt = '\0';
-                           (void) fprintf(stderr, "%s,", pp);
-                           if (rt)
-                                   *rt = '\n';
-                   }
-                   break;
-           default:
-                   (void) fputs("*bad*", stderr);
-                   break;
-           }
-       }
-       (void) fprintf(stderr, ",\"%s\"]\n", m->desc);
-}
-
-/*
- * ckfputs - futs, but with error checking
- * ckfprintf - fprintf, but with error checking
- */
-void
-ckfputs(str, fil)      
-    const char *str;
-    FILE *fil;
-{
-       if (fputs(str,fil) == EOF)
-               error("write failed.\n");
-}
-
-/*VARARGS*/
-void
-#if __STDC__
-ckfprintf(FILE *f, const char *fmt, ...)
-#else
-ckfprintf(va_alist)
-       va_dcl
-#endif
-{
-       va_list va;
-#if __STDC__
-       va_start(va, fmt);
-#else
-       FILE *f;
-       const char *fmt;
-       va_start(va);
-       f = va_arg(va, FILE *);
-       fmt = va_arg(va, const char *);
-#endif
-       (void) vfprintf(f, fmt, va);
-       if (ferror(f))
-               error("write failed.\n");
-       va_end(va);
-}
-
-/*
- * error - print best error message possible and exit
- */
-/*VARARGS*/
-void
-#if __STDC__
-error(const char *f, ...)
-#else
-error(va_alist)
-       va_dcl
-#endif
-{
-       va_list va;
-#if __STDC__
-       va_start(va, f);
-#else
-       const char *f;
-       va_start(va);
-       f = va_arg(va, const char *);
-#endif
-       /* cuz we use stdout for most, stderr here */
-       (void) fflush(stdout); 
-
-       if (progname != NULL) 
-               (void) fprintf(stderr, "%s: ", progname);
-       (void) vfprintf(stderr, f, va);
-       va_end(va);
-       exit(1);
-}
-
-/*VARARGS*/
-void
-#if __STDC__
-magwarn(const char *f, ...)
-#else
-magwarn(va_alist)
-       va_dcl
-#endif
-{
-       va_list va;
-#if __STDC__
-       va_start(va, f);
-#else
-       const char *f;
-       va_start(va);
-       f = va_arg(va, const char *);
-#endif
-       /* cuz we use stdout for most, stderr here */
-       (void) fflush(stdout); 
-
-       if (progname != NULL) 
-               (void) fprintf(stderr, "%s: %s, %d: ", 
-                              progname, magicfile, lineno);
-       (void) vfprintf(stderr, f, va);
-       va_end(va);
-       fputc('\n', stderr);
-}
diff --git a/file/readelf.c b/file/readelf.c
deleted file mode 100644 (file)
index 6c6437d..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: readelf.c,v 1.1 1997/02/09 23:58:33 millert Exp $     */
-
-#ifdef BUILTIN_ELF
-#include <sys/types.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "readelf.h"
-#include "file.h"
-
-static void
-doshn(fd, off, num, size, buf)
-       int fd;
-       off_t off;
-       int num;
-       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;
-
-       if (lseek(fd, off, SEEK_SET) == -1)
-               error("lseek failed (%s).\n", strerror(errno));
-
-       for ( ; num; num--) {
-               if (read(fd, buf, size) == -1)
-                       error("read failed (%s).\n", strerror(errno));
-               if (sh->sh_type == SHT_SYMTAB) {
-                       (void) printf (", not stripped");
-                       return;
-               }
-       }
-       (void) printf (", stripped");
-}
-
-/*
- * Look through the program headers of an executable image, searching
- * for a PT_INTERP section; if one is found, it's dynamically linked,
- * otherwise it's statically linked.
- */
-static void
-dophn_exec(fd, off, num, size, buf)
-       int fd;
-       off_t off;
-       int num;
-       size_t size;
-       char *buf;
-{
-       /* I am not sure if this works for 64 bit elf formats */
-       Elf32_Phdr *ph = (Elf32_Phdr *) buf;
-
-       if (lseek(fd, off, SEEK_SET) == -1)
-               error("lseek failed (%s).\n", strerror(errno));
-
-       for ( ; num; num--) {
-               if (read(fd, buf, size) == -1)
-                       error("read failed (%s).\n", strerror(errno));
-               if (ph->p_type == PT_INTERP) {
-                       /*
-                        * Has an interpreter - must be a dynamically-linked
-                        * executable.
-                        */
-                       printf(", dynamically linked");
-                       return;
-               }
-       }
-       printf(", statically linked");
-}
-
-size_t prpsoffsets[] = {
-       100,            /* SunOS 5.x */
-       32,             /* Linux */
-};
-
-#define        NOFFSETS        (sizeof prpsoffsets / sizeof prpsoffsets[0])
-
-/*
- * Look through the program headers of an executable image, searching
- * for a PT_NOTE section of type NT_PRPSINFO, with a name "CORE"; if one
- * is found, try looking in various places in its contents for a 16-character
- * string containing only printable characters - if found, that string
- * should be the name of the program that dropped core.
- * Note: right after that 16-character string is, at least in SunOS 5.x
- * (and possibly other SVR4-flavored systems) and Linux, a longer string
- * (80 characters, in 5.x, probably other SVR4-flavored systems, and Linux)
- * containing the start of the command line for that program.
- */
-static void
-dophn_core(fd, off, num, size, buf)
-       int fd;
-       off_t off;
-       int num;
-       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.
-        */
-       /*
-        * 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;
-       size_t offset, noffset, reloffset;
-       unsigned char c;
-       int i, j;
-       char nbuf[BUFSIZ];
-       int bufsize;
-
-       for ( ; num; num--) {
-               if (lseek(fd, off, SEEK_SET) == -1)
-                       error("lseek failed (%s).\n", strerror(errno));
-               if (read(fd, buf, size) == -1)
-                       error("read failed (%s).\n", strerror(errno));
-               off += size;
-               if (ph->p_type != PT_NOTE)
-                       continue;
-               if (lseek(fd, ph->p_offset, SEEK_SET) == -1)
-                       error("lseek failed (%s).\n", strerror(errno));
-               bufsize = read(fd, nbuf, BUFSIZ);
-               if (bufsize == -1)
-                       error("read failed (%s).\n", strerror(errno));
-               offset = 0;
-               for (;;) {
-                       if (offset >= bufsize)
-                               break;
-                       nh = (Elf32_Nhdr *)&nbuf[offset];
-                       offset += sizeof *nh;
-
-                       /*
-                        * If this note isn't an NT_PRPSINFO note, it's
-                        * not what we're looking for.
-                        */
-                       if (nh->n_type != NT_PRPSINFO) {
-                               offset += nh->n_namesz;
-                               offset = ((offset + 3)/4)*4;
-                               offset += nh->n_descsz;
-                               offset = ((offset + 3)/4)*4;
-                               continue;
-                       }
-
-                       /*
-                        * Make sure this note has the name "CORE".
-                        */
-                       if (offset + nh->n_namesz >= bufsize) {
-                               /*
-                                * We're past the end of the buffer.
-                                */
-                               break;
-                       }
-                       if (nh->n_namesz != 5
-                           || strcmp(&nbuf[offset], "CORE") != 0)
-                               continue;
-                       offset += nh->n_namesz;
-                       offset = ((offset + 3)/4)*4;
-
-                       /*
-                        * Extract the program name.  We assume it to be
-                        * 16 characters (that's what it is in SunOS 5.x
-                        * and Linux).
-                        *
-                        * Unfortunately, it's at a different offset in
-                        * SunOS 5.x and Linux, so try multiple offsets.
-                        * If the characters aren't all printable, reject
-                        * it.
-                        */
-                       for (i = 0; i < NOFFSETS; i++) {
-                               reloffset = prpsoffsets[i];
-                               noffset = offset + reloffset;
-                               for (j = 0; j < 16;
-                                   j++, noffset++, reloffset++) {
-                                       /*
-                                        * Make sure we're not past the end
-                                        * of the buffer; if we are, just
-                                        * give up.
-                                        */
-                                       if (noffset >= bufsize)
-                                               return;
-
-                                       /*
-                                        * Make sure we're not past the
-                                        * end of the contents; if we
-                                        * are, this obviously isn't
-                                        * the right offset.
-                                        */
-                                       if (reloffset >= nh->n_descsz)
-                                               goto tryanother;
-
-                                       c = nbuf[noffset];
-                                       if (c != '\0' && !isprint(c))
-                                               goto tryanother;
-                               }
-
-                               /*
-                                * Well, that worked.
-                                */
-                               printf(", from '%.16s'",
-                                   &nbuf[offset + prpsoffsets[i]]);
-                               return;
-
-                       tryanother:
-                               ;
-                       }
-                       offset += nh->n_descsz;
-                       offset = ((offset + 3)/4)*4;
-               }
-       }
-}
-
-void
-tryelf(fd, buf, nbytes)
-       int fd;
-       char *buf;
-       int nbytes;
-{
-       union {
-               int32 l;
-               char c[sizeof (int32)];
-       } u;
-
-       /*
-        * ELF executables have multiple section headers in arbitrary
-        * file locations and thus file(1) cannot determine it from easily.
-        * Instead we traverse thru all section headers until a symbol table
-        * one is found or else the binary is stripped.
-        */
-       if (buf[EI_MAG0] != ELFMAG0 || buf[EI_MAG1] != ELFMAG1
-           || buf[EI_MAG2] != ELFMAG2 || buf[EI_MAG3] != ELFMAG3)
-           return;
-
-
-       if (buf[4] == ELFCLASS32) {
-               Elf32_Ehdr elfhdr;
-               if (nbytes <= sizeof (Elf32_Ehdr))
-                       return;
-
-
-               u.l = 1;
-               (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) 
-                               dophn_core(fd, elfhdr.e_phoff, elfhdr.e_phnum, 
-                                     elfhdr.e_phentsize, buf);
-                       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);
-                       }
-               }
-               return;
-       }
-
-        if (buf[4] == ELFCLASS64) {
-               Elf64_Ehdr elfhdr;
-               if (nbytes <= sizeof (Elf64_Ehdr))
-                       return;
-
-
-               u.l = 1;
-               (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]) {
-#ifdef notyet
-                       if (elfhdr.e_type == ET_CORE) 
-                               dophn_core(fd, elfhdr.e_phoff, elfhdr.e_phnum, 
-                                     elfhdr.e_phentsize, buf);
-                       else
-#endif
-                       {
-#ifdef notyet
-                               if (elfhdr.e_type == ET_EXEC) {
-                                       dophn_exec(fd, elfhdr.e_phoff,
-                                           elfhdr.e_phnum, 
-                                             elfhdr.e_phentsize, buf);
-                               }
-#endif
-                               doshn(fd, elfhdr.e_shoff, elfhdr.e_shnum,
-                                     elfhdr.e_shentsize, buf);
-                       }
-               }
-               return;
-       }
-}
-#endif
diff --git a/file/readelf.h b/file/readelf.h
deleted file mode 100644 (file)
index adb8a66..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: readelf.h,v 1.1 1997/02/09 23:58:34 millert Exp $     */
-
-/*
- * readelf.h 
- *
- * Provide elf data structures for non-elf machines, allowing file
- * non-elf hosts to determine if an elf binary is stripped.
- * Note: cobbled from the linux header file, with modifications
- */
-#ifndef __fake_elf_h__
-#define __fake_elf_h__
-
-typedef unsigned int   Elf32_Addr;
-typedef unsigned short Elf32_Half;
-typedef unsigned int   Elf32_Off;
-typedef unsigned int   Elf32_Word;
-typedef unsigned char  Elf32_Char;
-
-/* XXX: We need 64 bit numbers here */
-typedef unsigned int   Elf64_Addr[2];
-typedef unsigned short Elf64_Half;
-typedef unsigned int   Elf64_Off[2];
-typedef unsigned int   Elf64_Word;
-typedef unsigned char  Elf64_Char;
-
-#define EI_NIDENT      16
-
-typedef struct {
-    Elf32_Char e_ident[EI_NIDENT];
-    Elf32_Half e_type;
-    Elf32_Half e_machine;
-    Elf32_Word e_version;
-    Elf32_Addr e_entry;  /* Entry point */
-    Elf32_Off  e_phoff;
-    Elf32_Off  e_shoff;
-    Elf32_Word e_flags;
-    Elf32_Half e_ehsize;
-    Elf32_Half e_phentsize;
-    Elf32_Half e_phnum;
-    Elf32_Half e_shentsize;
-    Elf32_Half e_shnum;
-    Elf32_Half e_shstrndx;
-} Elf32_Ehdr;
-
-typedef struct {
-    Elf64_Char e_ident[EI_NIDENT];
-    Elf64_Half e_type;
-    Elf64_Half e_machine;
-    Elf64_Word e_version;
-    Elf64_Addr e_entry;  /* Entry point */
-    Elf64_Off  e_phoff;
-    Elf64_Off  e_shoff;
-    Elf64_Word e_flags;
-    Elf64_Half e_ehsize;
-    Elf64_Half e_phentsize;
-    Elf64_Half e_phnum;
-    Elf64_Half e_shentsize;
-    Elf64_Half e_shnum;
-    Elf64_Half e_shstrndx;
-} Elf64_Ehdr;
-
-/* e_type */
-#define ET_EXEC                2
-#define ET_CORE                4
-
-/* sh_type */
-#define SHT_SYMTAB     2
-#define SHT_NOTE       7
-
-/* elf type */
-#define ELFDATANONE    0               /* e_ident[EI_DATA] */
-#define ELFDATA2LSB    1
-#define ELFDATA2MSB    2
-
-/* elf class */
-#define ELFCLASSNONE   0
-#define ELFCLASS32     1
-#define ELFCLASS64     2
-
-/* magic number */
-#define        EI_MAG0         0               /* e_ident[] indexes */
-#define        EI_MAG1         1
-#define        EI_MAG2         2
-#define        EI_MAG3         3
-#define        EI_CLASS        4
-#define        EI_DATA         5
-#define        EI_VERSION      6
-#define        EI_PAD          7
-
-#define        ELFMAG0         0x7f            /* EI_MAG */
-#define        ELFMAG1         'E'
-#define        ELFMAG2         'L'
-#define        ELFMAG3         'F'
-#define        ELFMAG          "\177ELF"
-
-typedef struct {
-    Elf32_Word p_type;
-    Elf32_Off  p_offset;
-    Elf32_Addr p_vaddr;
-    Elf32_Addr p_paddr;
-    Elf32_Word p_filesz;
-    Elf32_Word p_memsz;
-    Elf32_Word p_flags;
-    Elf32_Word p_align;
-} Elf32_Phdr;
-
-#define        PT_NULL         0               /* p_type */
-#define        PT_LOAD         1
-#define        PT_DYNAMIC      2
-#define        PT_INTERP       3
-#define        PT_NOTE         4
-#define        PT_SHLIB        5
-#define        PT_PHDR         6
-#define        PT_NUM          7
-
-typedef struct {
-    Elf32_Word sh_name;
-    Elf32_Word sh_type;
-    Elf32_Word sh_flags;
-    Elf32_Addr sh_addr;
-    Elf32_Off  sh_offset;
-    Elf32_Word sh_size;
-    Elf32_Word sh_link;
-    Elf32_Word sh_info;
-    Elf32_Word sh_addralign;
-    Elf32_Word sh_entsize;
-} Elf32_Shdr;
-
-typedef struct {
-    Elf64_Word sh_name;
-    Elf64_Word sh_type;
-    Elf64_Off  sh_flags;
-    Elf64_Addr sh_addr;
-    Elf64_Off  sh_offset;
-    Elf64_Off  sh_size;
-    Elf64_Word sh_link;
-    Elf64_Word sh_info;
-    Elf64_Off  sh_addralign;
-    Elf64_Off  sh_entsize;
-} Elf64_Shdr;
-
-/* Notes used in ET_CORE */
-#define NT_PRSTATUS    1
-#define NT_PRFPREG     2
-#define NT_PRPSINFO    3
-#define NT_TASKSTRUCT  4
-
-/* Note header in a PT_NOTE section */
-typedef struct elf_note {
-  Elf32_Word   n_namesz;       /* Name size */
-  Elf32_Word   n_descsz;       /* Content size */
-  Elf32_Word   n_type;         /* Content type */
-} Elf32_Nhdr;
-
-typedef struct {
-    Elf64_Word n_namesz;
-    Elf64_Word n_descsz;
-    Elf64_Word n_type;
-} Elf64_Nhdr;
-
-#define        NT_PRSTATUS     1
-#define        NT_PRFPREG      2
-#define        NT_PRPSINFO     3
-#define        NT_PRXREG       4
-#define        NT_PLATFORM     5
-#define        NT_AUXV         6
-
-#endif
diff --git a/file/readfat.c b/file/readfat.c
deleted file mode 100644 (file)
index c48c325..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-#ifdef BUILTIN_FAT
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/param.h> /* for MAXPATHLEN */
-#include <sys/file.h>
-#include <unistd.h>     /* for read() */
-
-#include <mach-o/fat.h>
-#include <mach-o/arch.h>
-#include <mach-o/swap.h>
-
-#include "file.h"
-
-static void print_arch_name_for_file(
-    cpu_type_t cputype,
-    cpu_subtype_t cpusubtype);
-
-void
-tryfat(
-const char *inname,
-int fd,
-char *buf,
-int nbytes)
-{
-    struct fat_header fat_header;
-    struct fat_arch *fat_archs;
-    unsigned long i, arch_size, tbytes;
-    char *arch_buf;
-    unsigned char tmpbuf[HOWMANY+1];   /* one extra for terminating '\0' */
-    
-
-       if(nbytes < sizeof(struct fat_header)){
-           return;
-       }
-       memcpy(&fat_header, buf, sizeof(struct fat_header));
-#ifdef __LITTLE_ENDIAN__
-       swap_fat_header(&fat_header, NX_LittleEndian);
-#endif /* __LITTLE_ENDIAN__ */
-       arch_size = fat_header.nfat_arch * sizeof(struct fat_arch);
-       if(arch_size + sizeof(struct fat_header) > nbytes){
-           return;
-       }
-       arch_buf = malloc(nbytes);
-       if(arch_buf == NULL)
-           return;
-       memcpy(arch_buf, buf + sizeof(struct fat_header), arch_size);
-       fat_archs = (struct fat_arch *)(arch_buf);
-#ifdef __LITTLE_ENDIAN__
-       swap_fat_arch(fat_archs, fat_header.nfat_arch, NX_LittleEndian);
-#endif /* __LITTLE_ENDIAN__ */
-       for(i = 0; i < fat_header.nfat_arch; i++){
-           printf("\n%s", inname);
-           print_arch_name_for_file(fat_archs[i].cputype,
-                                    fat_archs[i].cpusubtype);
-           printf(":\t");
-           lseek(fd, fat_archs[i].offset, L_SET);
-           /*
-            * try looking at the first HOWMANY bytes
-            */
-           if ((tbytes = read(fd, (char *)tmpbuf, HOWMANY)) == -1) {
-               error("read failed (%s).\n", strerror(errno));
-               /*NOTREACHED*/
-           }
-           tryit(tmpbuf, tbytes, 0);
-       }
-}
-
-static
-void
-print_arch_name_for_file(
-cpu_type_t cputype,
-cpu_subtype_t cpusubtype)
-{
-    const NXArchInfo *ArchInfoTable, *ai;
-
-       ArchInfoTable = NXGetAllArchInfos();
-       for(ai = ArchInfoTable; ai->name != NULL; ai++){
-           if(ai->cputype == cputype &&
-              ai->cpusubtype == cpusubtype){
-               printf(" (for architecture %s)", ai->name);
-               return;
-           }
-       }
-       printf(" (for architecture cputype (%d) cpusubtype (%d))",
-              cputype, cpusubtype);
-}
-#endif /* BUILTIN_FAT */
diff --git a/file/softmagic.c b/file/softmagic.c
deleted file mode 100644 (file)
index 4683853..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: softmagic.c,v 1.3 1997/02/09 23:58:36 millert Exp $   */
-
-/*
- * softmagic - interpret variable magic from /etc/magic
- *
- * Copyright (c) Ian F. Darwin, 1987.
- * Written by Ian F. Darwin.
- *
- * This software is not subject to any license of the American Telephone
- * and Telegraph Company or of the Regents of the University of California.
- *
- * Permission is granted to anyone to use this software for any purpose on
- * any computer system, and to alter it and redistribute it freely, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- *    software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits must appear in the documentation.
- *
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits must appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-#include <sys/types.h>
-
-#include "file.h"
-
-#ifndef        lint
-#if 0
-static char *moduleid = "$OpenBSD: softmagic.c,v 1.3 1997/02/09 23:58:36 millert Exp $";
-#endif
-#endif /* lint */
-
-static int match       __P((unsigned char *, int));
-static int mget                __P((union VALUETYPE *,
-                            unsigned char *, struct magic *, int));
-static int mcheck      __P((union VALUETYPE *, struct magic *));
-static int32 mprint    __P((union VALUETYPE *, struct magic *));
-static void mdebug     __P((int32, char *, int));
-static int mconvert    __P((union VALUETYPE *, struct magic *));
-
-/*
- * softmagic - lookup one file in database 
- * (already read from /etc/magic by apprentice.c).
- * Passed the name and FILE * of one file to be typed.
- */
-/*ARGSUSED1*/          /* nbytes passed for regularity, maybe need later */
-int
-softmagic(buf, nbytes)
-unsigned char *buf;
-int nbytes;
-{
-       if (match(buf, nbytes))
-               return 1;
-
-       return 0;
-}
-
-/*
- * Go through the whole list, stopping if you find a match.  Process all
- * the continuations of that match before returning.
- *
- * We support multi-level continuations:
- *
- *     At any time when processing a successful top-level match, there is a
- *     current continuation level; it represents the level of the last
- *     successfully matched continuation.
- *
- *     Continuations above that level are skipped as, if we see one, it
- *     means that the continuation that controls them - i.e, the
- *     lower-level continuation preceding them - failed to match.
- *
- *     Continuations below that level are processed as, if we see one,
- *     it means we've finished processing or skipping higher-level
- *     continuations under the control of a successful or unsuccessful
- *     lower-level continuation, and are now seeing the next lower-level
- *     continuation and should process it.  The current continuation
- *     level reverts to the level of the one we're seeing.
- *
- *     Continuations at the current level are processed as, if we see
- *     one, there's no lower-level continuation that may have failed.
- *
- *     If a continuation matches, we bump the current continuation level
- *     so that higher-level continuations are processed.
- */
-static int
-match(s, nbytes)
-unsigned char  *s;
-int nbytes;
-{
-       int magindex = 0;
-       int cont_level = 0;
-       int need_separator = 0;
-       union VALUETYPE p;
-       static int32 *tmpoff = NULL;
-       static size_t tmplen = 0;
-       int32 oldoff = 0;
-
-       if (tmpoff == NULL)
-               if ((tmpoff = (int32 *) malloc(tmplen = 20)) == NULL)
-                       error("out of memory\n");
-
-       for (magindex = 0; magindex < nmagic; magindex++) {
-               /* if main entry matches, print it... */
-               if (!mget(&p, s, &magic[magindex], nbytes) ||
-                   !mcheck(&p, &magic[magindex])) {
-                           /* 
-                            * main entry didn't match,
-                            * flush its continuations
-                            */
-                           while (magindex < nmagic &&
-                                  magic[magindex + 1].cont_level != 0)
-                                  magindex++;
-                           continue;
-               }
-
-               tmpoff[cont_level] = mprint(&p, &magic[magindex]);
-               /*
-                * If we printed something, we'll need to print
-                * a blank before we print something else.
-                */
-               if (magic[magindex].desc[0])
-                       need_separator = 1;
-               /* and any continuations that match */
-               if (++cont_level >= tmplen)
-                       if ((tmpoff = (int32 *) realloc(tmpoff,
-                                                      tmplen += 20)) == NULL)
-                               error("out of memory\n");
-               while (magic[magindex+1].cont_level != 0 && 
-                      ++magindex < nmagic) {
-                       if (cont_level >= magic[magindex].cont_level) {
-                               if (cont_level > magic[magindex].cont_level) {
-                                       /*
-                                        * We're at the end of the level
-                                        * "cont_level" continuations.
-                                        */
-                                       cont_level = magic[magindex].cont_level;
-                               }
-                               if (magic[magindex].flag & ADD) {
-                                       oldoff=magic[magindex].offset;
-                                       magic[magindex].offset += tmpoff[cont_level-1];
-                               }
-                               if (mget(&p, s, &magic[magindex], nbytes) &&
-                                   mcheck(&p, &magic[magindex])) {
-                                       /*
-                                        * This continuation matched.
-                                        * Print its message, with
-                                        * a blank before it if
-                                        * the previous item printed
-                                        * and this item isn't empty.
-                                        */
-                                       /* space if previous printed */
-                                       if (need_separator
-                                          && (magic[magindex].nospflag == 0)
-                                          && (magic[magindex].desc[0] != '\0')
-                                          ) {
-                                               (void) putchar(' ');
-                                               need_separator = 0;
-                                       }
-                                       tmpoff[cont_level] = mprint(&p, &magic[magindex]);
-                                       if (magic[magindex].desc[0])
-                                               need_separator = 1;
-
-                                       /*
-                                        * If we see any continuations
-                                        * at a higher level,
-                                        * process them.
-                                        */
-                                       if (++cont_level >= tmplen)
-                                               if ((tmpoff = 
-                                                   (int32 *) realloc(tmpoff,
-                                                   tmplen += 20)) == NULL)
-                                                       error("out of memory\n");
-                               }
-                               if (magic[magindex].flag & ADD) {
-                                        magic[magindex].offset = oldoff;
-                               }
-                       }
-               }
-               return 1;               /* all through */
-       }
-       return 0;                       /* no match at all */
-}
-
-static int32
-mprint(p, m)
-union VALUETYPE *p;
-struct magic *m;
-{
-       char *pp, *rt;
-       uint32 v;
-       int32 t=0 ;
-
-
-       switch (m->type) {
-       case BYTE:
-               v = p->b;
-               v = signextend(m, v) & m->mask;
-               (void) printf(m->desc, (unsigned char) v);
-               t = m->offset + sizeof(char);
-               break;
-
-       case SHORT:
-       case BESHORT:
-       case LESHORT:
-               v = p->h;
-               v = signextend(m, v) & m->mask;
-               (void) printf(m->desc, (unsigned short) v);
-               t = m->offset + sizeof(short);
-               break;
-
-       case LONG:
-       case BELONG:
-       case LELONG:
-               v = p->l;
-               v = signextend(m, v) & m->mask;
-               (void) printf(m->desc, (uint32) v);
-               t = m->offset + sizeof(int32);
-               break;
-
-       case STRING:
-               if (m->reln == '=') {
-                       (void) printf(m->desc, m->value.s);
-                       t = m->offset + strlen(m->value.s);
-               }
-               else {
-                       if (*m->value.s == '\0') {
-                               char *cp = strchr(p->s,'\n');
-                               if (cp)
-                                       *cp = '\0';
-                       }
-                       (void) printf(m->desc, p->s);
-                       t = m->offset + strlen(p->s);
-               }
-               break;
-
-       case DATE:
-       case BEDATE:
-       case LEDATE:
-               pp = ctime((time_t*) &p->l);
-               if ((rt = strchr(pp, '\n')) != NULL)
-                       *rt = '\0';
-               (void) printf(m->desc, pp);
-               t = m->offset + sizeof(time_t);
-               break;
-
-       default:
-               error("invalid m->type (%d) in mprint().\n", m->type);
-               /*NOTREACHED*/
-       }
-       return(t);
-}
-
-/*
- * Convert the byte order of the data we are looking at
- */
-static int
-mconvert(p, m)
-union VALUETYPE *p;
-struct magic *m;
-{
-       switch (m->type) {
-       case BYTE:
-       case SHORT:
-       case LONG:
-       case DATE:
-               return 1;
-       case STRING:
-               {
-                       char *ptr;
-
-                       /* Null terminate and eat the return */
-                       p->s[sizeof(p->s) - 1] = '\0';
-                       if ((ptr = strchr(p->s, '\n')) != NULL)
-                               *ptr = '\0';
-                       return 1;
-               }
-       case BESHORT:
-               p->h = (short)((p->hs[0]<<8)|(p->hs[1]));
-               return 1;
-       case BELONG:
-       case BEDATE:
-               p->l = (int32)
-                   ((p->hl[0]<<24)|(p->hl[1]<<16)|(p->hl[2]<<8)|(p->hl[3]));
-               return 1;
-       case LESHORT:
-               p->h = (short)((p->hs[1]<<8)|(p->hs[0]));
-               return 1;
-       case LELONG:
-       case LEDATE:
-               p->l = (int32)
-                   ((p->hl[3]<<24)|(p->hl[2]<<16)|(p->hl[1]<<8)|(p->hl[0]));
-               return 1;
-       default:
-               error("invalid type %d in mconvert().\n", m->type);
-               return 0;
-       }
-}
-
-
-static void
-mdebug(offset, str, len)
-int32 offset;
-char *str;
-int len;
-{
-       (void) fprintf(stderr, "mget @%d: ", offset);
-       showstr(stderr, (char *) str, len);
-       (void) fputc('\n', stderr);
-       (void) fputc('\n', stderr);
-}
-
-static int
-mget(p, s, m, nbytes)
-union VALUETYPE* p;
-unsigned char  *s;
-struct magic *m;
-int nbytes;
-{
-       int32 offset = m->offset;
-
-       if (offset + sizeof(union VALUETYPE) <= nbytes)
-               memcpy(p, s + offset, sizeof(union VALUETYPE));
-       else {
-               /*
-                * the usefulness of padding with zeroes eludes me, it
-                * might even cause problems
-                */
-               int32 have = nbytes - offset;
-               memset(p, 0, sizeof(union VALUETYPE));
-               if (have > 0)
-                       memcpy(p, s + offset, have);
-       }
-
-
-       if (debug) {
-               mdebug(offset, (char *) p, sizeof(union VALUETYPE));
-               mdump(m);
-       }
-
-       if (!mconvert(p, m))
-               return 0;
-
-       if (m->flag & INDIR) {
-
-               switch (m->in.type) {
-               case BYTE:
-                       offset = p->b + m->in.offset;
-                       break;
-               case SHORT:
-                       offset = p->h + m->in.offset;
-                       break;
-               case LONG:
-                       offset = p->l + m->in.offset;
-                       break;
-               }
-
-               if (offset + sizeof(union VALUETYPE) > nbytes)
-                       return 0;
-
-               memcpy(p, s + offset, sizeof(union VALUETYPE));
-
-               if (debug) {
-                       mdebug(offset, (char *) p, sizeof(union VALUETYPE));
-                       mdump(m);
-               }
-
-               if (!mconvert(p, m))
-                       return 0;
-       }
-       return 1;
-}
-
-static int
-mcheck(p, m)
-union VALUETYPE* p;
-struct magic *m;
-{
-       register uint32 l = m->value.l;
-       register uint32 v;
-       int matched;
-
-       if ( (m->value.s[0] == 'x') && (m->value.s[1] == '\0') ) {
-               fprintf(stderr, "BOINK");
-               return 1;
-       }
-
-
-       switch (m->type) {
-       case BYTE:
-               v = p->b;
-               break;
-
-       case SHORT:
-       case BESHORT:
-       case LESHORT:
-               v = p->h;
-               break;
-
-       case LONG:
-       case BELONG:
-       case LELONG:
-       case DATE:
-       case BEDATE:
-       case LEDATE:
-               v = p->l;
-               break;
-
-       case STRING:
-               l = 0;
-               /* What we want here is:
-                * v = strncmp(m->value.s, p->s, m->vallen);
-                * but ignoring any nulls.  bcmp doesn't give -/+/0
-                * and isn't universally available anyway.
-                */
-               v = 0;
-               {
-                       register unsigned char *a = (unsigned char*)m->value.s;
-                       register unsigned char *b = (unsigned char*)p->s;
-                       register int len = m->vallen;
-
-                       while (--len >= 0)
-                               if ((v = *b++ - *a++) != '\0')
-                                       break;
-               }
-               break;
-       default:
-               error("invalid type %d in mcheck().\n", m->type);
-               return 0;/*NOTREACHED*/
-       }
-
-       v = signextend(m, v) & m->mask;
-
-       switch (m->reln) {
-       case 'x':
-               if (debug)
-                       (void) fprintf(stderr, "%u == *any* = 1\n", v);
-               matched = 1;
-               break;
-
-       case '!':
-               matched = v != l;
-               if (debug)
-                       (void) fprintf(stderr, "%u != %u = %d\n",
-                                      v, l, matched);
-               break;
-
-       case '=':
-               matched = v == l;
-               if (debug)
-                       (void) fprintf(stderr, "%u == %u = %d\n",
-                                      v, l, matched);
-               break;
-
-       case '>':
-               if (m->flag & UNSIGNED) {
-                       matched = v > l;
-                       if (debug)
-                               (void) fprintf(stderr, "%u > %u = %d\n",
-                                              v, l, matched);
-               }
-               else {
-                       matched = (int32) v > (int32) l;
-                       if (debug)
-                               (void) fprintf(stderr, "%d > %d = %d\n",
-                                              v, l, matched);
-               }
-               break;
-
-       case '<':
-               if (m->flag & UNSIGNED) {
-                       matched = v < l;
-                       if (debug)
-                               (void) fprintf(stderr, "%u < %u = %d\n",
-                                              v, l, matched);
-               }
-               else {
-                       matched = (int32) v < (int32) l;
-                       if (debug)
-                               (void) fprintf(stderr, "%d < %d = %d\n",
-                                              v, l, matched);
-               }
-               break;
-
-       case '&':
-               matched = (v & l) == l;
-               if (debug)
-                       (void) fprintf(stderr, "((%x & %x) == %x) = %d\n",
-                                      v, l, l, matched);
-               break;
-
-       case '^':
-               matched = (v & l) != l;
-               if (debug)
-                       (void) fprintf(stderr, "((%x & %x) != %x) = %d\n",
-                                      v, l, l, matched);
-               break;
-
-       default:
-               matched = 0;
-               error("mcheck: can't happen: invalid relation %d.\n", m->reln);
-               break;/*NOTREACHED*/
-       }
-
-       return matched;
-}
diff --git a/file/tar.h b/file/tar.h
deleted file mode 100644 (file)
index 286b878..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
- * Reserved.  This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.1 (the "License").  You may not use this file
- * except in compliance with the License.  Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-/*     $OpenBSD: tar.h,v 1.3 1997/02/09 23:58:37 millert Exp $ */
-
-/*
- * Header file for public domain tar (tape archive) program.
- *
- * @(#)tar.h 1.20 86/10/29     Public Domain.
- *
- * Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu.
- *
- */
-
-/*
- * Kludge for handling systems that can't cope with multiple
- * external definitions of a variable.  In ONE routine (tar.c),
- * we #define TAR_EXTERN to null; here, we set it to "extern" if
- * it is not already set.
- */
-#ifndef TAR_EXTERN
-#define TAR_EXTERN extern
-#endif
-
-/*
- * Header block on tape.
- *
- * I'm going to use traditional DP naming conventions here.
- * A "block" is a big chunk of stuff that we do I/O on.
- * A "record" is a piece of info that we care about.
- * Typically many "record"s fit into a "block".
- */
-#define        RECORDSIZE      512
-#define        NAMSIZ  100
-#define        TUNMLEN 32
-#define        TGNMLEN 32
-
-union record {
-       char            charptr[RECORDSIZE];
-       struct header {
-               char    name[NAMSIZ];
-               char    mode[8];
-               char    uid[8];
-               char    gid[8];
-               char    size[12];
-               char    mtime[12];
-               char    chksum[8];
-               char    linkflag;
-               char    linkname[NAMSIZ];
-               char    magic[8];
-               char    uname[TUNMLEN];
-               char    gname[TGNMLEN];
-               char    devmajor[8];
-               char    devminor[8];
-       } header;
-};
-
-/* The checksum field is filled with this while the checksum is computed. */
-#define        CHKBLANKS       "        "      /* 8 blanks, no null */
-
-/* The magic field is filled with this if uname and gname are valid. */
-#define        TMAGIC          "ustar  "       /* 7 chars and a null */
-
-/* The linkflag defines the type of file */
-#define        LF_OLDNORMAL    '\0'            /* Normal disk file, Unix compat */
-#define        LF_NORMAL       '0'             /* Normal disk file */
-#define        LF_LINK         '1'             /* Link to previously dumped file */
-#define        LF_SYMLINK      '2'             /* Symbolic link */
-#define        LF_CHR          '3'             /* Character special file */
-#define        LF_BLK          '4'             /* Block special file */
-#define        LF_DIR          '5'             /* Directory */
-#define        LF_FIFO         '6'             /* FIFO special file */
-#define        LF_CONTIG       '7'             /* Contiguous file */
-/* Further link types may be defined later. */
-
-/*
- * Exit codes from the "tar" program
- */
-#define        EX_SUCCESS      0               /* success! */
-#define        EX_ARGSBAD      1               /* invalid args */
-#define        EX_BADFILE      2               /* invalid filename */
-#define        EX_BADARCH      3               /* bad archive */
-#define        EX_SYSTEM       4               /* system gave unexpected error */
-
-
-/*
- * Global variables
- */
-TAR_EXTERN union record        *ar_block;      /* Start of block of archive */
-TAR_EXTERN union record        *ar_record;     /* Current record of archive */
-TAR_EXTERN union record        *ar_last;       /* Last+1 record of archive block */
-TAR_EXTERN char                ar_reading;     /* 0 writing, !0 reading archive */
-TAR_EXTERN int         blocking;       /* Size of each block, in records */
-TAR_EXTERN int         blocksize;      /* Size of each block, in bytes */
-TAR_EXTERN char                *ar_file;       /* File containing archive */
-TAR_EXTERN char                *name_file;     /* File containing names to work on */
-TAR_EXTERN char                *tar;           /* Name of this program */
-
-/*
- * Flags from the command line
- */
-TAR_EXTERN char        f_reblock;              /* -B */
-TAR_EXTERN char        f_create;               /* -c */
-TAR_EXTERN char        f_debug;                /* -d */
-TAR_EXTERN char        f_sayblock;             /* -D */
-TAR_EXTERN char        f_follow_links;         /* -h */
-TAR_EXTERN char        f_ignorez;              /* -i */
-TAR_EXTERN char        f_keep;                 /* -k */
-TAR_EXTERN char        f_modified;             /* -m */
-TAR_EXTERN char        f_oldarch;              /* -o */
-TAR_EXTERN char        f_use_protection;       /* -p */
-TAR_EXTERN char        f_sorted_names;         /* -s */
-TAR_EXTERN char        f_list;                 /* -t */
-TAR_EXTERN char        f_namefile;             /* -T */
-TAR_EXTERN char        f_verbose;              /* -v */
-TAR_EXTERN char        f_extract;              /* -x */
-TAR_EXTERN char        f_compress;             /* -z */
-
-/*
- * We now default to Unix Standard format rather than 4.2BSD tar format.
- * The code can actually produce all three:
- *     f_standard      ANSI standard
- *     f_oldarch       V7
- *     neither         4.2BSD
- * but we don't bother, since 4.2BSD can read ANSI standard format anyway.
- * The only advantage to the "neither" option is that we can cmp(1) our
- * output to the output of 4.2BSD tar, for debugging.
- */
-#define                f_standard              (!f_oldarch)
-
-/*
- * Structure for keeping track of filenames and lists thereof.
- */
-struct name {
-       struct name     *next;
-       short           length;
-       char            found;
-       char            name[NAMSIZ+1];
-};
-
-TAR_EXTERN struct name *namelist;      /* Points to first name in list */
-TAR_EXTERN struct name *namelast;      /* Points to last name in list */
-
-TAR_EXTERN int         archive;        /* File descriptor for archive file */
-TAR_EXTERN int         errors;         /* # of files in error */
-
-/*
- *
- * Due to the next struct declaration, each routine that includes
- * "tar.h" must also include <sys/types.h>.  I tried to make it automatic,
- * but System V has no defines in <sys/types.h>, so there is no way of
- * knowing when it has been included.  In addition, it cannot be included
- * twice, but must be included exactly once.  Argghh!
- *
- * Thanks, typedef.  Thanks, USG.
- */
-struct link {
-       struct link     *next;
-       dev_t           dev;
-       ino_t           ino;
-       short           linkcount;
-       char            name[NAMSIZ+1];
-};
-
-TAR_EXTERN struct link *linklist;      /* Points to first link in list */
-
-
-/*
- * Error recovery stuff
- */
-TAR_EXTERN char                read_error_flag;
-
-
-/*
- * Declarations of functions available to the world.
- */
-/*LINTLIBRARY*/
-union record *findrec();
-void userec();
-union record *endofrecs();
-void anno();
-#define         annorec(stream, msg)   anno(stream, msg, 0)    /* Cur rec */
-#define        annofile(stream, msg)   anno(stream, msg, 1)    /* Saved rec */
diff --git a/ln/ln.1 b/ln/ln.1
index 0d1a2b9b28b60cb8d382d988326d09ebaaa29ebf..1dac859fb614b6ca30b952f9ca7374a0580583d0 100644 (file)
--- a/ln/ln.1
+++ b/ln/ln.1
@@ -1,5 +1,3 @@
-.\"    $NetBSD: ln.1,v 1.13 1997/10/20 08:52:19 enami Exp $
-.\"
 .\" Copyright (c) 1980, 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)ln.1        8.2 (Berkeley) 12/30/93
+.\" $FreeBSD: src/bin/ln/ln.1,v 1.25 2002/08/21 17:32:32 trhodes Exp $
 .\"
 .Dd December 30, 1993
 .Dt LN 1
-.Os BSD 4
+.Os
 .Sh NAME
-.Nm ln
+.Nm ln ,
+.Nm link
 .Nd make links
 .Sh SYNOPSIS
 .Nm
-.Op Fl fhns
+.Op Fl fhinsv
 .Ar source_file
-.Op target_file
-.Nm ""
-.Op Fl fhns
+.Op Ar target_file
+.Nm
+.Op Fl fhinsv
 .Ar source_file ...
-.Op target_dir
+.Ar target_dir
+.Nm link
+.Ar source_file Ar target_file
 .Sh DESCRIPTION
 The
 .Nm
@@ -65,12 +67,18 @@ to the original copy.
 There are two types of links; hard links and symbolic links.
 How a link
 .Dq points
-to a file is one of the differences between a hard or symbolic link.
+to a file is one of the differences between a hard and symbolic link.
 .Pp
 The options are as follows:
 .Bl -tag -width flag
 .It Fl f
-Unlink any already existing file, permitting the link to occur.
+If the target file already exists,
+then unlink it so that the link may occur.
+(The
+.Fl f
+option overrides any previous
+.Fl i
+options.)
 .It Fl h
 If the
 .Ar target_file
@@ -79,6 +87,21 @@ or
 is a symbolic link, do not follow it.  This is most useful with the
 .Fl f
 option, to replace a symlink which may point to a directory.
+.It Fl i
+Cause
+.Nm
+to write a prompt to standard error if the target file exists.
+If the response from the standard input begins with the character
+.Sq Li y
+or
+.Sq Li Y ,
+then unlink the target file so that the link may occur.
+Otherwise, do not attempt the link.
+(The
+.Fl i
+option overrides any previous
+.Fl f
+options.)
 .It Fl n
 Same as
 .Fl h ,
@@ -87,15 +110,19 @@ for compatibility with other
 implementations.
 .It Fl s
 Create a symbolic link.
+.It Fl v
+Cause
+.Nm
+to be verbose, showing files as they are processed.
 .El
 .Pp
-By default
+By default,
 .Nm
 makes
 .Em hard
 links.
 A hard link to a file is indistinguishable from the original directory entry;
-any changes to a file are effective independent of the name used to reference
+any changes to a file are effectively independent of the name used to reference
 the file.
 Hard links may not normally refer to directories and may not span file systems.
 .Pp
@@ -133,6 +160,15 @@ makes links in
 .Ar target_dir
 to all the named source files.
 The links made will have the same name as the files being linked to.
+.Pp
+When the utility is called as
+.Nm link ,
+exactly two arguments must be supplied,
+neither of which may specify a directory.
+No options may be supplied in this simple mode of operation,
+which performs a
+.Xr link 2
+operation using the two passed arguments.
 .Sh SEE ALSO
 .Xr link 2 ,
 .Xr lstat 2 ,
@@ -140,8 +176,29 @@ The links made will have the same name as the files being linked to.
 .Xr stat 2 ,
 .Xr symlink 2 ,
 .Xr symlink 7
+.Sh COMPATIBILITY
+The
+.Fl h ,
+.Fl i ,
+.Fl n
+and
+.Fl v
+options are non-standard and their use in scripts is not recommended.
+They are provided solely for compatibility with other
+.Nm
+implementations.
+.Sh STANDARDS
+The
+.Nm
+utility conforms to
+.St -p1003.2-92 .
+.Pp
+The simplified
+.Nm link
+command conforms to
+.St -susv2 .
 .Sh HISTORY
-A
+An
 .Nm
-utility appeared in
-.At v6 .
+command appeared in
+.At v1 .
diff --git a/ln/ln.c b/ln/ln.c
index f8bbce36e60e6ec9d6b0df1ddacdaf308e41f9de..ffe399d438665ffab82f0853e694df0f14e30c4d 100644 (file)
--- a/ln/ln.c
+++ b/ln/ln.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: ln.c,v 1.15 1998/07/28 05:31:25 mycroft Exp $  */
-
 /*
  * Copyright (c) 1987, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1987, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static char const copyright[] =
+"@(#) Copyright (c) 1987, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)ln.c       8.2 (Berkeley) 3/31/94";
-#else
-__RCSID("$NetBSD: ln.c,v 1.15 1998/07/28 05:31:25 mycroft Exp $");
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/ln/ln.c,v 1.29 2002/07/31 16:53:59 markm Exp $");
 
 #include <sys/param.h>
 #include <sys/stat.h>
 
 #include <err.h>
 #include <errno.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -59,35 +58,63 @@ __RCSID("$NetBSD: ln.c,v 1.15 1998/07/28 05:31:25 mycroft Exp $");
 
 int    fflag;                          /* Unlink existing files. */
 int    hflag;                          /* Check new name for symlink first. */
+int    iflag;                          /* Interactive mode. */
 int    sflag;                          /* Symbolic, not hard, link. */
+int    vflag;                          /* Verbose output. */
                                        /* System link call. */
-int (*linkf) __P((const char *, const char *));
+int (*linkf)(const char *, const char *);
+char   linkch;
 
-int    linkit __P((char *, char *, int));
-void   usage __P((void));
-int    main __P((int, char *[]));
+int    linkit(const char *, const char *, int);
+void   usage(void);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        struct stat sb;
+       char *p, *sourcedir;
        int ch, exitval;
-       char *sourcedir;
 
-       while ((ch = getopt(argc, argv, "fhns")) != -1)
+       /*
+        * Test for the special case where the utility is called as
+        * "link", for which the functionality provided is greatly
+        * simplified.
+        */
+       if ((p = rindex(argv[0], '/')) == NULL)
+               p = argv[0];
+       else
+               ++p;
+       if (strcmp(p, "link") == 0) {
+               while (getopt(argc, argv, "") != -1)
+                       usage();
+               argc -= optind;
+               argv += optind;
+               if (argc != 2)
+                       usage();
+               linkf = link;
+               exit(linkit(argv[0], argv[1], 0));
+       }
+
+       while ((ch = getopt(argc, argv, "fhinsv")) != -1)
                switch (ch) {
                case 'f':
                        fflag = 1;
+                       iflag = 0;
                        break;
                case 'h':
                case 'n':
                        hflag = 1;
                        break;
+               case 'i':
+                       iflag = 1;
+                       fflag = 0;
+                       break;
                case 's':
                        sflag = 1;
                        break;
+               case 'v':
+                       vflag = 1;
+                       break;
                case '?':
                default:
                        usage();
@@ -97,6 +124,7 @@ main(argc, argv)
        argc -= optind;
 
        linkf = sflag ? symlink : link;
+       linkch = sflag ? '-' : '=';
 
        switch(argc) {
        case 0:
@@ -104,16 +132,18 @@ main(argc, argv)
                /* NOTREACHED */
        case 1:                         /* ln target */
                exit(linkit(argv[0], ".", 1));
-               /* NOTREACHED */
        case 2:                         /* ln target source */
                exit(linkit(argv[0], argv[1], 0));
-               /* NOTREACHED */
+       default:
+               ;
        }
                                        /* ln target1 target2 directory */
        sourcedir = argv[argc - 1];
        if (hflag && lstat(sourcedir, &sb) == 0 && S_ISLNK(sb.st_mode)) {
-               /* we were asked not to follow symlinks, but found one at
-                  the target--simulate "not a directory" error */
+               /*
+                * We were asked not to follow symlinks, but found one at
+                * the target--simulate "not a directory" error
+                */
                errno = ENOTDIR;
                err(1, "%s", sourcedir);
        }
@@ -124,16 +154,15 @@ main(argc, argv)
        for (exitval = 0; *argv != sourcedir; ++argv)
                exitval |= linkit(*argv, sourcedir, 1);
        exit(exitval);
-       /* NOTREACHED */
 }
 
 int
-linkit(target, source, isdir)
-       char *target, *source;
-       int isdir;
+linkit(const char *target, const char *source, int isdir)
 {
        struct stat sb;
-       char *p, path[MAXPATHLEN];
+       const char *p;
+       int ch, exists, first;
+       char path[PATH_MAX];
 
        if (!sflag) {
                /* If target doesn't exist, quit now. */
@@ -141,42 +170,78 @@ linkit(target, source, isdir)
                        warn("%s", target);
                        return (1);
                }
+               /* Only symbolic links to directories. */
+               if (S_ISDIR(sb.st_mode)) {
+                       errno = EISDIR;
+                       warn("%s", target);
+                       return (1);
+               }
        }
 
-       /* If the source is a directory (and not a symlink if hflag),
-          append the target's name. */
+       /*
+        * If the source is a directory (and not a symlink if hflag),
+        * append the target's name.
+        */
        if (isdir ||
-           (!lstat(source, &sb) && S_ISDIR(sb.st_mode)) ||
-           (!hflag && !stat(source, &sb) && S_ISDIR(sb.st_mode))) {
+           (lstat(source, &sb) == 0 && S_ISDIR(sb.st_mode)) ||
+           (!hflag && stat(source, &sb) == 0 && S_ISDIR(sb.st_mode))) {
                if ((p = strrchr(target, '/')) == NULL)
                        p = target;
                else
                        ++p;
-               (void)snprintf(path, sizeof(path), "%s/%s", source, p);
+               if (snprintf(path, sizeof(path), "%s/%s", source, p) >=
+                   (ssize_t)sizeof(path)) {
+                       errno = ENAMETOOLONG;
+                       warn("%s", target);
+                       return (1);
+               }
                source = path;
        }
 
+       exists = !lstat(source, &sb);
        /*
-        * If the file exists, and -f was specified, unlink it.
-        * Attempt the link.
+        * If the file exists, then unlink it forcibly if -f was specified
+        * and interactively if -i was specified.
         */
-       if ((fflag && unlink(source) < 0 && errno != ENOENT) ||
-           (*linkf)(target, source)) {
+       if (fflag && exists) {
+               if (unlink(source)) {
+                       warn("%s", source);
+                       return (1);
+               }
+       } else if (iflag && exists) {
+               fflush(stdout);
+               fprintf(stderr, "replace %s? ", source);
+
+               first = ch = getchar();
+               while(ch != '\n' && ch != EOF)
+                       ch = getchar();
+               if (first != 'y' && first != 'Y') {
+                       fprintf(stderr, "not replaced\n");
+                       return (1);
+               }
+
+               if (unlink(source)) {
+                       warn("%s", source);
+                       return (1);
+               }
+       }
+
+       /* Attempt the link. */
+       if ((*linkf)(target, source)) {
                warn("%s", source);
                return (1);
        }
-
+       if (vflag)
+               (void)printf("%s %c> %s\n", source, linkch, target);
        return (0);
 }
 
 void
-usage()
+usage(void)
 {
-
-       extern char *__progname;
-       (void)fprintf(stderr,
-           "Usage:\t%s [-fhns] file1 file2\n\t%s [-fhns] file ... directory\n",
-           __progname, __progname);
+       (void)fprintf(stderr, "%s\n%s\n%s\n",
+           "usage: ln [-fhinsv] file1 file2",
+           "       ln [-fhinsv] file ... directory",
+           "       link file1 file2");
        exit(1);
-       /* NOTREACHED */
 }
index 7e6e68a2a5f06e62be0167124107fa7a2281ad14..dc9f7022952d36194a912622192cb5dd1488397a 100644 (file)
@@ -1,5 +1,3 @@
-.\"    $NetBSD: symlink.7,v 1.7 1998/02/06 05:39:47 perry Exp $
-.\"
 .\" Copyright (c) 1992, 1993, 1994
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)symlink.7   8.3 (Berkeley) 3/31/94
+.\" $FreeBSD: src/bin/ln/symlink.7,v 1.25 2002/08/21 17:32:32 trhodes Exp $
 .\"
 .Dd March 31, 1994
 .Dt SYMLINK 7
-.Os BSD 4
+.Os
 .Sh NAME
 .Nm symlink
 .Nd symbolic link handling
@@ -54,7 +53,7 @@ i.e. it is a pointer to another name, and not to an underlying object.
 For this reason, symbolic links may reference directories and may span
 file systems.
 .Pp
-Because a symbolic link and its referenced object coexist in the filesystem
+Because a symbolic link and its referenced object coexist in the file system
 name space, confusion can arise in distinguishing between the link itself
 and the referenced object.
 Historically, commands and system calls have adopted their own link
@@ -81,7 +80,7 @@ exceeded.)
 .Pp
 There are three separate areas that need to be discussed.
 They are as follows:
-.sp
+.Pp
 .Bl -enum -compact -offset indent
 .It
 Symbolic links used as file name arguments for system calls.
@@ -103,16 +102,21 @@ For example, if there were a symbolic link
 which pointed to a file named
 .Dq Li afile ,
 the system call
-.Dq Li open("slink" ...)
+.Dq Li open("slink" ...\&)
 would return a file descriptor to the file
 .Dq afile .
 .Pp
-There are four system calls that do not follow links, and which operate
+There are nine system calls that do not follow links, and which operate
 on the symbolic link itself.
 They are:
+.Xr lchflags 2 ,
+.Xr lchmod 2 ,
+.Xr lchown 2 ,
 .Xr lstat 2 ,
+.Xr lutimes 2 ,
 .Xr readlink 2 ,
 .Xr rename 2 ,
+.Xr rmdir 2 ,
 and
 .Xr unlink 2 .
 Because
@@ -120,21 +124,45 @@ Because
 is an alias for
 .Xr unlink 2 ,
 it also does not follow symbolic links.
+When
+.Xr rmdir 2
+is applied to a symbolic link, it fails with the error
+.Er ENOTDIR .
+.Pp
+The owner and group of an existing symbolic link can be changed by
+means of the
+.Xr lchown 2
+system call.
+The flags, access permissions, owner/group and modification time of
+an existing symbolic link can be changed by means of the
+.Xr lchflags 2 ,
+.Xr lchmod 2 ,
+.Xr lchown 2 ,
+and 
+.Xr lutimes 2
+system calls, respectively.
+Of these, only the flags are used by the system;
+the access permissions and ownership are ignored.
 .Pp
 The
 .Bx 4.4
-system differs from historical 
+system differs from historical
 .Bx 4
 systems in that the system call
 .Xr chown 2
 has been changed to follow symbolic links.
+The
+.Xr lchown 2
+system call was added later when the limitations of the new
+.Xr chown 2
+became apparent.
 .Ss Commands not traversing a file tree.
 The second area is symbolic links, specified as command line file
 name arguments, to commands which are not traversing a file tree.
 .Pp
 Except as noted below, commands follow symbolic links named as command
 line arguments.
-For example, if there were a symbolic link 
+For example, if there were a symbolic link
 .Dq Li slink
 which pointed to a file named
 .Dq Li afile ,
@@ -153,23 +181,23 @@ is not.
 .Pp
 If it is explicitly intended that the command operate on the symbolic
 link instead of following the symbolic link, e.g., it is desired that
-.Dq Li "file slink"
-display the type of file that
+.Dq Li "chown slink"
+change the ownership of the file that
 .Dq Li slink
 is, whether it is a symbolic link or not, the
 .Fl h
 option should be used.
 In the above example,
-.Dq Li "file slink"
-would report the type of the file referenced by
+.Dq Li "chown root slink"
+would change the ownership of the file referenced by
 .Dq Li slink ,
 while
-.Dq Li "file -h slink"
-would report that
+.Dq Li "chown -h root slink"
+would change the ownership of
 .Dq Li slink
-was a symbolic link.
+itself.
 .Pp
-There are three exceptions to this rule.
+There are four exceptions to this rule.
 The
 .Xr mv 1
 and
@@ -191,6 +219,8 @@ option is not specified),
 the
 .Nm ls
 command follows symbolic links named as arguments if the
+.Fl H
+or
 .Fl L
 option is specified,
 or if the
@@ -198,27 +228,35 @@ or if the
 .Fl d
 or
 .Fl l
-options are not specified.
-(If the
-.Fl L
-option is specified,
+options are not specified.  (The
 .Nm ls
-always follows symbolic links.
-.Nm ls
-is the only command where the
+command is the only command where the
+.Fl H
+and
 .Fl L
-option affects its behavior even though it is not doing a walk of
+options affect its behavior even though it is not doing a walk of
 a file tree.)
 .Pp
 The
+.Xr file 1
+command is also an exception to this rule.
+The
+.Xr file 1
+command does not follow symbolic links named as argument by default.
+The
+.Xr file 1
+command does follow symbolic links named as argument if
+.Fl L
+option is specified.
+.Pp
+The
 .Bx 4.4
 system differs from historical
 .Bx 4
 systems in that the
-.Nm chown ,
-.Nm chgrp
+.Nm chown
 and
-.Nm file
+.Nm chgrp
 commands follow symbolic links specified on the command line.
 .Ss Commands traversing a file tree.
 The following commands either optionally or always traverse file trees:
@@ -244,13 +282,6 @@ not of type directory.
 Operations that apply to symbolic links are performed on the links
 themselves, but otherwise the links are ignored.
 .Pp
-For example, the command
-.Dq Li "chown -R user slink directory"
-will ignore
-.Dq Li slink ,
-because symbolic links in this system do not have owners.
-Any symbolic links encountered during the tree traversal will also be
-ignored.
 The command
 .Dq Li "rm -r slink directory"
 will remove
@@ -258,9 +289,7 @@ will remove
 as well as any symbolic links encountered in the tree traversal of
 .Dq Li directory ,
 because symbolic links may be removed.
-In no case will either
-.Nm chown
-or
+In no case will
 .Nm rm
 affect the file which
 .Dq Li slink
@@ -280,7 +309,7 @@ walk (where symbolic links referencing directories are followed).
 As consistently as possible, you can make commands doing a file tree
 walk follow any symbolic links named on the command line, regardless
 of the type of file they reference, by specifying the
-.Fl H 
+.Fl H
 (for
 .Dq half\-logical )
 flag.
@@ -387,23 +416,20 @@ options.
 To maintain compatibility with historic systems,
 the
 .Nm ls
-command never follows symbolic links unless the
-.Fl L
-flag is specified.
-If the
+command acts a little differently.  If you do not specify the
+.Fl F ,
+.Fl d
+or
+.Fl l
+options,
+.Nm ls
+will follow symbolic links specified on the command line.  If the
 .Fl L
 flag is specified,
 .Nm ls
 follows all symbolic links,
 regardless of their type,
 whether specified on the command line or encountered in the tree walk.
-The
-.Nm ls
-command does not support the
-.Fl H
-or
-.Fl P
-options.
 .Sh SEE ALSO
 .Xr chflags 1 ,
 .Xr chgrp 1 ,
@@ -417,7 +443,11 @@ options.
 .Xr pax 1 ,
 .Xr rm 1 ,
 .Xr tar 1 ,
+.Xr lchflags 2 ,
+.Xr lchmod 2 ,
+.Xr lchown 2 ,
 .Xr lstat 2 ,
+.Xr lutimes 2 ,
 .Xr readlink 2 ,
 .Xr rename 2 ,
 .Xr symlink 2 ,
index f29efd46b02f5bbeb96167306484415332f22a61..6793f2bea34b395cb06898c7626598bcbdbf908b 100644 (file)
@@ -18,6 +18,8 @@ CFILES = cmp.c ls.c print.c stat_flags.c util.c
 
 OTHERSRCS = Makefile Makefile.preamble Makefile.postamble ls.1
 
+OTHER_CFLAGS = -DCOLORLS
+OTHER_LDFLAGS = -lncurses
 
 MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
 CODE_GEN_STYLE = DYNAMIC
index 31b75651ca74ffaea18ce750ef7412dce308ab3d..6650036662094064bbb4b912729b8aab9ac49dac 100644 (file)
--- a/ls/cmp.c
+++ b/ls/cmp.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: cmp.c,v 1.14 1998/10/09 02:00:39 enami Exp $   */
-
 /*
  * Copyright (c) 1989, 1993
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
-#ifndef lint
 #if 0
+#ifndef lint
 static char sccsid[] = "@(#)cmp.c      8.1 (Berkeley) 5/31/93";
-#else
-__RCSID("$NetBSD: cmp.c,v 1.14 1998/10/09 02:00:39 enami Exp $");
-#endif
 #endif /* not lint */
+#endif
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/ls/cmp.c,v 1.12 2002/06/30 05:13:54 obrien Exp $");
+
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -69,22 +67,19 @@ __RCSID("$NetBSD: cmp.c,v 1.14 1998/10/09 02:00:39 enami Exp $");
 #endif
 
 int
-namecmp(a, b)
-       const FTSENT *a, *b;
+namecmp(const FTSENT *a, const FTSENT *b)
 {
-       return (strcmp(a->fts_name, b->fts_name));
+       return (strcoll(a->fts_name, b->fts_name));
 }
 
 int
-revnamecmp(a, b)
-       const FTSENT *a, *b;
+revnamecmp(const FTSENT *a, const FTSENT *b)
 {
-       return (strcmp(b->fts_name, a->fts_name));
+       return (strcoll(b->fts_name, a->fts_name));
 }
 
 int
-modcmp(a, b)
-       const FTSENT *a, *b;
+modcmp(const FTSENT *a, const FTSENT *b)
 {
        if (b->fts_statp->st_mtime > a->fts_statp->st_mtime)
                return (1);
@@ -99,8 +94,7 @@ modcmp(a, b)
 }
 
 int
-revmodcmp(a, b)
-       const FTSENT *a, *b;
+revmodcmp(const FTSENT *a, const FTSENT *b)
 {
        if (b->fts_statp->st_mtime > a->fts_statp->st_mtime)
                return (-1);
@@ -115,8 +109,7 @@ revmodcmp(a, b)
 }
 
 int
-acccmp(a, b)
-       const FTSENT *a, *b;
+acccmp(const FTSENT *a, const FTSENT *b)
 {
        if (b->fts_statp->st_atime > a->fts_statp->st_atime)
                return (1);
@@ -131,8 +124,7 @@ acccmp(a, b)
 }
 
 int
-revacccmp(a, b)
-       const FTSENT *a, *b;
+revacccmp(const FTSENT *a, const FTSENT *b)
 {
        if (b->fts_statp->st_atime > a->fts_statp->st_atime)
                return (-1);
@@ -147,8 +139,7 @@ revacccmp(a, b)
 }
 
 int
-statcmp(a, b)
-       const FTSENT *a, *b;
+statcmp(const FTSENT *a, const FTSENT *b)
 {
        if (b->fts_statp->st_ctime > a->fts_statp->st_ctime)
                return (1);
@@ -163,8 +154,7 @@ statcmp(a, b)
 }
 
 int
-revstatcmp(a, b)
-       const FTSENT *a, *b;
+revstatcmp(const FTSENT *a, const FTSENT *b)
 {
        if (b->fts_statp->st_ctime > a->fts_statp->st_ctime)
                return (-1);
index a42d48fdec3b8b7bf5b16483ac69c61e98d47594..273719c1b61166ada6ab18ae9e59682a6f006125 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: extern.h,v 1.7 1998/01/18 13:30:03 lukem Exp $ */
-
 /*-
  * Copyright (c) 1991, 1993
  *     The Regents of the University of California.  All rights reserved.
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)extern.h    8.1 (Berkeley) 5/31/93
+ *     from: @(#)extern.h      8.1 (Berkeley) 5/31/93
+ * $FreeBSD: src/bin/ls/extern.h,v 1.19 2002/05/19 02:51:36 tjr Exp $
  */
 
-int     acccmp __P((const FTSENT *, const FTSENT *));
-int     revacccmp __P((const FTSENT *, const FTSENT *));
-int     modcmp __P((const FTSENT *, const FTSENT *));
-int     revmodcmp __P((const FTSENT *, const FTSENT *));
-int     namecmp __P((const FTSENT *, const FTSENT *));
-int     revnamecmp __P((const FTSENT *, const FTSENT *));
-int     statcmp __P((const FTSENT *, const FTSENT *));
-int     revstatcmp __P((const FTSENT *, const FTSENT *));
-int     sizecmp __P((const FTSENT *, const FTSENT *));
-int     revsizecmp __P((const FTSENT *, const FTSENT *));
+int     acccmp(const FTSENT *, const FTSENT *);
+int     revacccmp(const FTSENT *, const FTSENT *);
+int     modcmp(const FTSENT *, const FTSENT *);
+int     revmodcmp(const FTSENT *, const FTSENT *);
+int     namecmp(const FTSENT *, const FTSENT *);
+int     revnamecmp(const FTSENT *, const FTSENT *);
+int     statcmp(const FTSENT *, const FTSENT *);
+int     revstatcmp(const FTSENT *, const FTSENT *);
+int     sizecmp (const FTSENT *, const FTSENT *);
+int     revsizecmp (const FTSENT *, const FTSENT *);
+
+void    printcol(DISPLAY *);
+void    printlong(DISPLAY *);
+void    printscol(DISPLAY *);
+void    printstream(DISPLAY *);
+void    usage(void);
+size_t  len_octal(const char *, int);
+int     prn_octal(const char *);
+int     prn_printable(const char *);
+#ifdef COLORLS
+void    parsecolors(const char *cs);
+void     colorquit(int);
 
-char   *flags_to_string __P((u_long, char *));
-int     string_to_flags __P((char **, u_long *, u_long *));
-void    prcopy __P((char *, char *, int));
-void    printacol __P((DISPLAY *));
-void    printcol __P((DISPLAY *));
-void    printlong __P((DISPLAY *));
-void    printscol __P((DISPLAY *));
-void    usage __P((void));
+extern  char    *ansi_fgcol;
+extern  char    *ansi_bgcol;
+extern  char    *ansi_coloff;
+extern  char    *attrs_off;
+extern  char    *enter_bold;
+#endif
diff --git a/ls/ls.1 b/ls/ls.1
index 6181998383c81b9bbb4bfd589def5aac4e6169ff..1672c135e5fc388d421cdea4216db71a3e5e11f8 100644 (file)
--- a/ls/ls.1
+++ b/ls/ls.1
@@ -1,5 +1,3 @@
-.\"    $NetBSD: ls.1,v 1.19 1998/06/01 21:11:28 hubertf Exp $
-.\"
 .\" Copyright (c) 1980, 1990, 1991, 1993, 1994
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -15,7 +13,7 @@
 .\"    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:
+.\"    must display the following acknowledgment:
 .\"    This product includes software developed by the University of
 .\"    California, Berkeley and its contributors.
 .\" 4. Neither the name of the University nor the names of its contributors
@@ -35,8 +33,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)ls.1       8.7 (Berkeley) 7/29/94
+.\" $FreeBSD: src/bin/ls/ls.1,v 1.69 2002/08/21 17:32:34 trhodes Exp $
 .\"
-.Dd July 29, 1994
+.Dd May 19, 2002
 .Dt LS 1
 .Os
 .Sh NAME
@@ -44,8 +43,8 @@
 .Nd list directory contents
 .Sh SYNOPSIS
 .Nm
-.Op Fl ACFLRSTWacdfgiklnoqrstux1
-.Op Ar file ...
+.Op Fl ABCFGHLPRTWZabcdfghiklmnopqrstuwx1
+.Op Ar
 .Sh DESCRIPTION
 For each operand that names a
 .Ar file
@@ -73,75 +72,155 @@ The following options are available:
 .Bl -tag -width indent
 .It Fl A
 List all entries except for
-.Ql \&.
+.Pa \&.
 and
-.Ql \&.. .
+.Pa .. .
 Always set for the super-user.
+.It Fl B
+Force printing of non-printable characters (as defined by
+.Xr ctype 3
+and current locale settings) in file names as
+.Li \e Ns Va xxx ,
+where
+.Va xxx
+is the numeric value of the character in octal.
 .It Fl C
 Force multi-column output; this is the default when output is to a terminal.
 .It Fl F
-Display a slash (/) immediately after each pathname that is a directory,
-an asterisk (*) after each that is executable,
-an at sign (@) after each symbolic link,
-a percent sign (%) after each whiteout,
-an equal sign (=) after each socket,
-and a vertical bar (|) after each that is a
-.Tn FIFO . 
+Display a slash
+.Pq Ql /
+immediately after each pathname that is a directory,
+an asterisk
+.Pq Ql *
+after each that is executable,
+an at sign
+.Pq Ql @
+after each symbolic link,
+an equals sign
+.Pq Ql =
+after each socket,
+a percent sign
+.Pq Ql %
+after each whiteout,
+and a vertical bar
+.Pq Ql \&|
+after each that is a
+.Tn FIFO .
+.It Fl G
+Enable colorized output.
+This option is equivalent to defining
+.Ev CLICOLOR
+in the environment.
+(See below.)
+.It Fl H
+Symbolic links on the command line are followed.
+This option is assumed if
+none of the
+.Fl F , d ,
+or
+.Fl l
+options are specified.
 .It Fl L
 If argument is a symbolic link, list the file or directory the link references
 rather than the link itself.
+This option cancels the
+.Fl P
+option.
+.It Fl P
+If argument is a symbolic link, list the link itself rather than the
+object the link references.
+This option cancels the
+.Fl H
+and
+.Fl L
+options.
 .It Fl R
 Recursively list subdirectories encountered.
-.It Fl S
-Sort by size, largest file first.
 .It Fl T
-Display complete time information for the file, including
+When used with the
+.Fl l
+(lowercase letter
+.Dq ell )
+option, display complete time information for the file, including
 month, day, hour, minute, second, and year.
 .It Fl W
 Display whiteouts when scanning directories.
 .It Fl a
 Include directory entries whose names begin with a
-dot (.).
+dot
+.Pq Pa \&. .
+.It Fl b
+As
+.Fl B ,
+but use
+.Tn C
+escape codes whenever possible.
 .It Fl c
 Use time when file status was last changed for sorting or printing.
 .It Fl d
-Directories are listed as plain files (not searched recursively) and
-symbolic links in the argument list are not indirected through.
+Directories are listed as plain files (not searched recursively).
 .It Fl f
 Output is not sorted.
 .It Fl g
-Does nothing; kept for compatibility with older versions of
-.Xr ls 1 .
+This option is deprecated and is only available for compatibility
+with
+.Bx 4.3 ;
+it was used to display the group name in the long
+.Pq Fl l
+format output.
+.It Fl h
+When used with the
+.Fl l
+option, use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte
+and Petabyte in order to reduce the number of digits to three or less
+using base 2 for sizes.
 .It Fl i
 For each file, print the file's file serial number (inode number).
 .It Fl k
-Modifies the
+If the
 .Fl s
-option, causing the sizes to be reported in kilobytes.
+option is specified, print the file size allocation in kilobytes,
+not blocks.
+This option overrides the environment variable
+.Ev BLOCKSIZE .
 .It Fl l
-(The lowercase letter ``ell.'')  List in long format. (See below.)
+(The lowercase letter
+.Dq ell . )
+List in long format.
+(See below.)
 If the output is to a terminal, a total sum for all the file
 sizes is output on a line before the long listing.
+.It Fl m
+Stream output format; list files across the page, separated by commas.
 .It Fl n
-Display the user and group IDs numerically rather than converting
-to a user or group name in a long
+Display user and group IDs numerically rather than converting to a user
+or group name in a long
 .Pq Fl l
 output.
 .It Fl o
 Include the file flags in a long
 .Pq Fl l
 output.
+.It Fl p
+Write a slash
+.Pq Ql /
+after each filename if that file is a directory.
 .It Fl q
 Force printing of non-graphic characters in file names as
-the character `?'; this is the default when output is to a terminal.
+the character
+.Ql \&? ;
+this is the default when output is to a terminal.
 .It Fl r
 Reverse the order of the sort to get reverse
-lexicographical order or the smallest or oldest entries first.
+lexicographical order or the oldest entries first.
 .It Fl s
 Display the number of file system blocks actually used by each file, in units
 of 512 bytes, where partial units are rounded up to the next integer value.
 If the output is to a terminal, a total sum for all the file
 sizes is output on a line before the listing.
+The environment variable
+.Ev BLOCKSIZE
+overrides the unit size of 512 bytes.
 .It Fl t
 Sort by time modified (most recently modified
 first) before sorting the operands by lexicographical
@@ -153,45 +232,68 @@ of the file for sorting
 .Pq Fl t
 or printing
 .Pq Fl l .
+.It Fl w
+Force raw printing of non-printable characters.
+This is the default
+when output is not to a terminal.
 .It Fl x
-Multi-column output sorted across the page rather than down the page.
+The same as
+.Fl C ,
+except that the multi-column output is produced with entries sorted
+across, rather than down, the columns.
 .It Fl v
 Force unedited printing of non-graphic characters; this is the default when
 output is not to a terminal.
-.It Fl \&1
-(The numeric digit ``one.'')  Force output to be
+.It Fl 1
+(The numeric digit
+.Dq one . )
+Force output to be
 one entry per line.
 This is the default when
 output is not to a terminal.
 .El
 .Pp
 The
-.Fl 1 ,
-.Fl C ,
-.Fl l ,
+.Fl 1 , C , x ,
 and
-.Fl x
+.Fl l
 options all override each other; the last one specified determines
 the format used.
 .Pp
 The
-.Fl c ,
+.Fl c
 and
 .Fl u
 options override each other; the last one specified determines
 the file time used.
 .Pp
+The
+.Fl B , b , w ,
+and
+.Fl q
+options all override each other; the last one specified determines
+the format used for non-printable characters.
+.Pp
+The
+.Fl H , L
+and
+.Fl P
+options all override each other (either partially or fully); they
+are applied in the order specified.
+.Pp
 By default,
 .Nm
 lists one entry per line to standard
 output; the exceptions are to terminals or when the
 .Fl C
-option is specified.
+or
+.Fl x
+options are specified.
 .Pp
 File information is displayed with one or more
-<blank>s separating the information associated with the
-.Fl i ,
-.Fl s ,
+.Ao blank Ac Ns s
+separating the information associated with the
+.Fl i , s ,
 and
 .Fl l
 options.
@@ -211,6 +313,10 @@ number of 512-byte blocks used by the files in the directory is displayed
 on a line by itself immediately before the information for the files in the
 directory.
 .Pp
+If the modification time of the file is more than 6 months
+in the past or future, then the year of the last modification
+is displayed in place of the hour and minute fields.
+.Pp
 If the owner or group names are not a known user or group name,
 or the
 .Fl n
@@ -219,9 +325,10 @@ the numeric ID's are displayed.
 .Pp
 If the file is a character special or block special file,
 the major and minor device numbers for the file are displayed
-in the size field. If the file is a symbolic link the pathname of the
+in the size field.
+If the file is a symbolic link the pathname of the
 linked-to file is preceded by
-.Dq \-> .
+.Dq Li -> .
 .Pp
 The file mode printed under the
 .Fl l
@@ -241,10 +348,8 @@ Directory.
 Symbolic link.
 .It Sy s
 Socket link.
-.\" .It Sy p
-.\" .Tn FIFO .
-.It Sy w
-Whiteout.
+.It Sy p
+.Tn FIFO .
 .It Sy \-
 Regular file.
 .El
@@ -286,7 +391,8 @@ The file is executable or the directory is
 searchable.
 .It Sy \-
 The file is neither readable, writable, executable,
-nor set-user-ID nor set-group-ID mode, nor sticky. (See below.)
+nor set-user-ID nor set-group-ID mode, nor sticky.
+(See below.)
 .El
 .Pp
 These next two apply only to the third character in the last group
@@ -296,7 +402,8 @@ These next two apply only to the third character in the last group
 The sticky bit is set
 (mode
 .Li 1000 ) ,
-but not execute or search permission. (See
+but not execute or search permission.
+(See
 .Xr chmod 1
 or
 .Xr sticky 8 . )
@@ -310,24 +417,73 @@ or
 .Xr sticky 8 . )
 .El
 .El
-.Pp
-The
+.Sh EXAMPLES
+The following is how to do an
 .Nm
-utility exits 0 on success, and >0 if an error occurs.
-.Sh ENVIRONMENT VARIABLES
+listing sorted by size (and shows why
+.Nm
+does not need a separate option for this):
+.Pp
+.Dl "ls -l | sort -n +4"
+.Pp
+Additionally, the
+.Fl r
+flag to
+.Xr sort 1
+may be used
+to get the results sorted from largest to smallest (a reverse sort).
+.Sh DIAGNOSTICS
+.Ex -std
+.Sh ENVIRONMENT
 The following environment variables affect the execution of
-.Nm "" :
-.Bl -tag -width BLOCKSIZE
+.Nm :
+.Bl -tag -width ".Ev CLICOLOR_FORCE"
 .It Ev BLOCKSIZE
 If the environment variable
 .Ev BLOCKSIZE
-is set, and the
-.Fl k
-option is not specified, the block counts
+is set, the block counts
 (see
 .Fl s )
 will be displayed in units of that size block.
-.It COLUMNS
+.It Ev CLICOLOR
+Use
+\*[Ai]
+color sequences to distinguish file types.
+See
+.Ev LSCOLORS
+below.
+In addition to the file types mentioned in the
+.Fl F
+option some extra attributes (setuid bit set, etc.) are also displayed.
+The colorization is dependent on a terminal type with the proper
+.Xr termcap 5
+capabilities.
+The default
+.Dq Li cons25
+console has the proper capabilities,
+but to display the colors in an
+.Xr xterm 1 ,
+for example,
+the
+.Ev TERM
+variable must be set to
+.Dq Li xterm-color .
+Other terminal types may require similar adjustments.
+Colorization
+is silently disabled if the output isn't directed to a terminal
+unless the
+.Ev CLICOLOR_FORCE
+variable is defined.
+.It Ev CLICOLOR_FORCE
+Color sequences are normally disabled if the output isn't directed to
+a terminal.
+This can be overridden by setting this flag.
+The
+.Ev TERM
+variable still needs to reference a color capable terminal however
+otherwise it is not possible to determine which color sequences to
+use.
+.It Ev COLUMNS
 If this variable contains a string representing a
 decimal integer, it is used as the
 column position width for displaying
@@ -338,7 +494,119 @@ utility calculates how
 many pathname text columns to display
 based on the width provided.
 (See
-.Fl C . )
+.Fl C
+and
+.Fl x . )
+.It Ev LANG
+The locale to use when determining the order of day and month in the long
+.Fl l
+format output.
+See
+.Xr environ 7
+for more information.
+.It Ev LSCOLORS
+The value of this variable describes what color to use for which
+attribute when colors are enabled with
+.Ev CLICOLOR .
+This string is a concatenation of pairs of the format
+.Ar f Ns Ar b ,
+where
+.Ar f
+is the foreground color and
+.Ar b
+is the background color.
+.Pp
+The color designators are as follows:
+.Pp
+.Bl -tag -width 4n -offset indent -compact
+.It Sy a
+black
+.It Sy b
+red
+.It Sy c
+green
+.It Sy d
+brown
+.It Sy e
+blue
+.It Sy f
+magenta
+.It Sy g
+cyan
+.It Sy h
+light grey
+.It Sy A
+bold black, usually shows up as dark grey
+.It Sy B
+bold red
+.It Sy C
+bold green
+.It Sy D
+bold brown, usually shows up as yellow
+.It Sy E
+bold blue
+.It Sy F
+bold magenta
+.It Sy G
+bold cyan
+.It Sy H
+bold light grey; looks like bright white
+.It Sy x
+default foreground or background
+.El
+.Pp
+Note that the above are standard
+\*[Ai]
+colors.
+The actual display may differ
+depending on the color capabilities of the terminal in use.
+.Pp
+The order of the attributes are as follows:
+.Pp
+.Bl -enum -offset indent -compact
+.It
+directory
+.It
+symbolic link
+.It
+socket
+.It
+pipe
+.It
+executable
+.It
+block special
+.It
+character special
+.It
+executable with setuid bit set
+.It
+executable with setgid bit set
+.It
+directory writable to others, with sticky bit
+.It
+directory writable to others, without sticky bit
+.El
+.Pp
+The default is
+.Qq "exfxcxdxbxegedabagacad" ,
+i.e. blue foreground and
+default background for regular directories, black foreground and red
+background for setuid executables, etc.
+.It Ev LS_COLWIDTHS
+If this variable is set, it is considered to be a
+colon-delimited list of minimum column widths.
+Unreasonable
+and insufficient widths are ignored (thus zero signifies
+a dynamically sized column).
+Not all columns have changeable widths.
+The fields are,
+in order: inode, block count, number of links, user name,
+group name, flags, file size, file name.
+.It Ev TERM
+The
+.Ev CLICOLOR
+functionality depends on a terminal type with color capabilities.
 .It Ev TZ
 The timezone to use when displaying dates.
 See
@@ -351,17 +619,23 @@ files in order to be compatible with the
 .St -p1003.2
 specification.
 .Sh SEE ALSO
+.Xr chflags 1 ,
 .Xr chmod 1 ,
+.Xr sort 1 ,
+.Xr xterm 1 ,
+.Xr termcap 5 ,
 .Xr symlink 7 ,
 .Xr sticky 8
 .Sh STANDARDS
 The
 .Nm
-utility is expected to be a superset of the
-.St -p1003.2
-specification.
+utility conforms to
+.St -p1003.1-2001 .
 .Sh HISTORY
 An
 .Nm
-utility appeared in
-.At v5 .
+command appeared in
+.At v1 .
+.Sh BUGS
+To maintain backward compatibility, the relationships between the many
+options are quite complex.
diff --git a/ls/ls.c b/ls/ls.c
index c943b9c91a6957448311538bd522e03212e9e755..99f45b27c026298f054a3e588e7e7961c85fc545 100644 (file)
--- a/ls/ls.c
+++ b/ls/ls.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: ls.c,v 1.31 1998/08/19 01:44:19 thorpej Exp $  */
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static const char copyright[] =
+"@(#) Copyright (c) 1989, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
-#ifndef lint
 #if 0
-static char sccsid[] = "@(#)ls.c       8.7 (Berkeley) 8/5/94";
-#else
-__RCSID("$NetBSD: ls.c,v 1.31 1998/08/19 01:44:19 thorpej Exp $");
-#endif
+#ifndef lint
+static char sccsid[] = "@(#)ls.c       8.5 (Berkeley) 4/2/94";
 #endif /* not lint */
+#endif
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/ls/ls.c,v 1.66 2002/09/21 01:28:36 wollman Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include <sys/param.h>
 
 #include <dirent.h>
 #include <err.h>
 #include <errno.h>
 #include <fts.h>
+#include <grp.h>
+#include <limits.h>
+#include <locale.h>
+#include <pwd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <pwd.h>
-#include <grp.h>
+#ifdef COLORLS
+#include <termcap.h>
+#include <signal.h>
+#endif
 
 #include "ls.h"
 #include "extern.h"
+#ifndef __APPLE__
+#include "lomac.h"
+#endif /* __APPLE__ */
 
-int    main __P((int, char *[]));
-
-static void     display __P((FTSENT *, FTSENT *));
-static int      mastercmp __P((const FTSENT **, const FTSENT **));
-static void     traverse __P((int, char **, int));
+/*
+ * Upward approximation of the maximum number of characters needed to
+ * represent a value of integral type t as a string, excluding the
+ * NUL terminator, with provision for a sign.
+ */
+#define        STRBUF_SIZEOF(t)        (1 + CHAR_BIT * sizeof(t) / 3 + 1)
 
-static void (*printfcn) __P((DISPLAY *));
-static int (*sortfcn) __P((const FTSENT *, const FTSENT *));
+static void     display(FTSENT *, FTSENT *);
+static u_quad_t         makenines(u_long);
+static int      mastercmp(const FTSENT * const *, const FTSENT * const *);
+static void     traverse(int, char **, int);
 
-#define        BY_NAME 0
-#define        BY_SIZE 1
-#define        BY_TIME 2
+static void (*printfcn)(DISPLAY *);
+static int (*sortfcn)(const FTSENT *, const FTSENT *);
 
 long blocksize;                        /* block size units */
 int termwidth = 80;            /* default terminal width */
-int sortkey = BY_NAME;
 
 /* flags */
-int f_accesstime;              /* use time of last access */
-int f_column;                  /* columnated format */
-int f_columnacross;            /* columnated format, sorted across */
-int f_flags;                   /* show flags associated with a file */
-int f_inode;                   /* print inode */
-int f_listdir;                 /* list actual directory, not contents */
-int f_listdot;                 /* list files beginning with . */
-int f_longform;                        /* long listing format */
-int f_nonprint;                        /* show unprintables as ? */
-int f_nosort;                  /* don't sort output */
-int f_numericonly;             /* don't convert uid/gid to name */
-int f_recursive;               /* ls subdirectories also */
-int f_reversesort;             /* reverse whatever sort is used */
-int f_sectime;                 /* print the real time for all files */
-int f_singlecol;               /* use single column output */
-int f_size;                    /* list size in short listing */
-int f_statustime;              /* use time of last mode change */
-int f_type;                    /* add type character for non-regular files */
-int f_whiteout;                        /* show whiteout entries */
+       int f_accesstime;       /* use time of last access */
+       int f_flags;            /* show flags associated with a file */
+       int f_humanval;         /* show human-readable file sizes */
+       int f_inode;            /* print inode */
+static int f_kblocks;          /* print size in kilobytes */
+static int f_listdir;          /* list actual directory, not contents */
+static int f_listdot;          /* list files beginning with . */
+       int f_longform;         /* long listing format */
+       int f_nonprint;         /* show unprintables as ? */
+static int f_nosort;           /* don't sort output */
+       int f_notabs;           /* don't use tab-separated multi-col output */
+static int f_numericonly;      /* don't convert uid/gid to name */
+       int f_octal;            /* show unprintables as \xxx */
+       int f_octal_escape;     /* like f_octal but use C escapes if possible */
+static int f_recursive;                /* ls subdirectories also */
+static int f_reversesort;      /* reverse whatever sort is used */
+       int f_sectime;          /* print the real time for all files */
+static int f_singlecol;                /* use single column output */
+       int f_size;             /* list size in short listing */
+       int f_slash;            /* similar to f_type, but only for dirs */
+       int f_sortacross;       /* sort across rows, not down columns */ 
+       int f_statustime;       /* use time of last mode change */
+       int f_stream;           /* stream the output, separate with commas */
+static int f_timesort;         /* sort by time vice name */
+static int f_sizesort;         /* sort by size */
+       int f_type;             /* add type character for non-regular files */
+static int f_whiteout;         /* show whiteout entries */
+       int f_lomac;            /* show LOMAC attributes */
+#ifdef COLORLS
+       int f_color;            /* add type in color for non-regular files */
+
+char *ansi_bgcol;              /* ANSI sequence to set background colour */
+char *ansi_fgcol;              /* ANSI sequence to set foreground colour */
+char *ansi_coloff;             /* ANSI sequence to reset colours */
+char *attrs_off;               /* ANSI sequence to turn off attributes */
+char *enter_bold;              /* ANSI sequence to set color to bold mode */
+#endif
+
+static int rval;
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
-       static char dot[] = ".", *dotav[] = { dot, NULL };
+       static char dot[] = ".", *dotav[] = {dot, NULL};
        struct winsize win;
        int ch, fts_options, notused;
-       int kflag = 0;
-       const char *p;
+       char *p;
+#ifdef COLORLS
+       char termcapbuf[1024];  /* termcap definition buffer */
+       char tcapbuf[512];      /* capability buffer */
+       char *bp = tcapbuf;
+#endif
+
+       (void)setlocale(LC_ALL, "");
 
        /* Terminal defaults to -Cq, non-terminal defaults to -1. */
        if (isatty(STDOUT_FILENO)) {
-               if ((p = getenv("COLUMNS")) != NULL)
+               termwidth = 80;
+               if ((p = getenv("COLUMNS")) != NULL && *p != '\0')
                        termwidth = atoi(p);
-               else if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &win) == 0 &&
+               else if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &win) != -1 &&
                    win.ws_col > 0)
                        termwidth = win.ws_col;
-               f_column = f_nonprint = 1;
-       } else
+               f_nonprint = 1;
+       } else {
                f_singlecol = 1;
+               /* retrieve environment variable, in case of explicit -C */
+               p = getenv("COLUMNS");
+               if (p)
+                       termwidth = atoi(p);
+       }
 
        /* Root is -A automatically. */
        if (!getuid())
                f_listdot = 1;
 
        fts_options = FTS_PHYSICAL;
-       while ((ch = getopt(argc, argv, "1ACFLRSTWacdfgiklnoqrstuxv")) != -1) {
+       while ((ch = getopt(argc, argv, "1ABCFGHLPRSTWZabcdfghiklmnopqrstuvwx")) 
+           != -1) {
                switch (ch) {
                /*
-                * The -1, -C, -l and -x options all override each other so
-                * shell aliasing works correctly.
+                * The -1, -C, -x and -l options all override each other so
+                * shell aliasing works right.
                 */
                case '1':
                        f_singlecol = 1;
-                       f_column = f_columnacross = f_longform = 0;
+                       f_longform = 0;
+                       f_stream = 0;
+                       break;
+               case 'B':
+                       f_nonprint = 0;
+                       f_octal = 1;
+                       f_octal_escape = 0;
                        break;
                case 'C':
-                       f_column = 1;
-                       f_columnacross = f_longform = f_singlecol = 0;
+                       f_sortacross = f_longform = f_singlecol = 0;
                        break;
                case 'l':
                        f_longform = 1;
-                       f_column = f_columnacross = f_singlecol = 0;
+                       f_singlecol = 0;
+                       f_stream = 0;
                        break;
                case 'x':
-                       f_columnacross = 1;
-                       f_column = f_longform = f_singlecol = 0;
+                       f_sortacross = 1;
+                       f_longform = 0;
+                       f_singlecol = 0;
                        break;
                /* The -c and -u options override each other. */
                case 'c':
@@ -167,11 +212,23 @@ main(argc, argv)
                        break;
                case 'F':
                        f_type = 1;
+                       f_slash = 0;
+                       break;
+               case 'H':
+                       fts_options |= FTS_COMFOLLOW;
+                       break;
+               case 'G':
+                       setenv("CLICOLOR", "", 1);
                        break;
                case 'L':
                        fts_options &= ~FTS_PHYSICAL;
                        fts_options |= FTS_LOGICAL;
                        break;
+               case 'P':
+                       fts_options &= ~FTS_COMFOLLOW;
+                       fts_options &= ~FTS_LOGICAL;
+                       fts_options |= FTS_PHYSICAL;
+                       break;
                case 'R':
                        f_recursive = 1;
                        break;
@@ -189,14 +246,21 @@ main(argc, argv)
                case 'f':
                        f_nosort = 1;
                        break;
-               case 'g':               /* Compatibility with 4.3BSD. */
+               case 'g':       /* Compatibility with 4.3BSD. */
+                       break;
+               case 'h':
+                       f_humanval = 1;
                        break;
                case 'i':
                        f_inode = 1;
                        break;
                case 'k':
-                       blocksize = 1024;
-                       kflag = 1;
+                       f_kblocks = 1;
+                       break;
+               case 'm':
+                       f_stream = 1;
+                       f_singlecol = 0;
+                       f_longform = 0;
                        break;
                case 'n':
                        f_numericonly = 1;
@@ -204,14 +268,21 @@ main(argc, argv)
                case 'o':
                        f_flags = 1;
                        break;
+               case 'p':
+                       f_slash = 1;
+                       f_type = 1;
+                       break;
                case 'q':
                        f_nonprint = 1;
+                       f_octal = 0;
+                       f_octal_escape = 0;
                        break;
                case 'r':
                        f_reversesort = 1;
                        break;
                case 'S':
-                       sortkey = BY_SIZE;
+                       /* Darwin 1.4.1 compatibility */
+                       f_sizesort = 1;
                        break;
                case 's':
                        f_size = 1;
@@ -220,13 +291,27 @@ main(argc, argv)
                        f_sectime = 1;
                        break;
                case 't':
-                       sortkey = BY_TIME;
+                       f_timesort = 1;
                        break;
                case 'W':
                        f_whiteout = 1;
                        break;
                case 'v':
+                       /* Darwin 1.4.1 compatibility */
+                       f_nonprint = 0;
+                       break;
+               case 'b':
+                       f_nonprint = 0;
+                       f_octal = 0;
+                       f_octal_escape = 1;
+                       break;
+               case 'w':
                        f_nonprint = 0;
+                       f_octal = 0;
+                       f_octal_escape = 0;
+                       break;
+               case 'Z':
+                       f_lomac = 1;
                        break;
                default:
                case '?':
@@ -236,12 +321,53 @@ main(argc, argv)
        argc -= optind;
        argv += optind;
 
+       /* Enabling of colours is conditional on the environment. */
+       if (getenv("CLICOLOR") &&
+           (isatty(STDOUT_FILENO) || getenv("CLICOLOR_FORCE")))
+#ifdef COLORLS
+               if (tgetent(termcapbuf, getenv("TERM")) == 1) {
+                       ansi_fgcol = tgetstr("AF", &bp);
+                       ansi_bgcol = tgetstr("AB", &bp);
+                       attrs_off = tgetstr("me", &bp);
+                       enter_bold = tgetstr("md", &bp);
+
+                       /* To switch colours off use 'op' if
+                        * available, otherwise use 'oc', or
+                        * don't do colours at all. */
+                       ansi_coloff = tgetstr("op", &bp);
+                       if (!ansi_coloff)
+                               ansi_coloff = tgetstr("oc", &bp);
+                       if (ansi_fgcol && ansi_bgcol && ansi_coloff)
+                               f_color = 1;
+               }
+#else
+               (void)fprintf(stderr, "Color support not compiled in.\n");
+#endif /*COLORLS*/
+
+#ifdef COLORLS
+       if (f_color) {
+               /*
+                * We can't put tabs and color sequences together:
+                * column number will be incremented incorrectly
+                * for "stty oxtabs" mode.
+                */
+               f_notabs = 1;
+               (void)signal(SIGINT, colorquit);
+               (void)signal(SIGQUIT, colorquit);
+               parsecolors(getenv("LSCOLORS"));
+       }
+#endif
+
        /*
-        * If not -F, -i, -l, -S, -s or -t options, don't require stat
-        * information.
+        * If not -F, -i, -l, -s or -t options, don't require stat
+        * information, unless in color mode in which case we do
+        * need this to determine which colors to display.
         */
-       if (!f_inode && !f_longform && !f_size && !f_type &&
-           sortkey == BY_NAME)
+       if (!f_inode && !f_longform && !f_size && !f_timesort && !f_type && !f_sizesort
+#ifdef COLORLS
+           && !f_color
+#endif
+           )
                fts_options |= FTS_NOSTAT;
 
        /*
@@ -261,55 +387,45 @@ main(argc, argv)
 
        /* If -l or -s, figure out block size. */
        if (f_longform || f_size) {
-               if (!kflag)
+               if (f_kblocks)
+                       blocksize = 2;
+               else {
                        (void)getbsize(&notused, &blocksize);
-               blocksize /= 512;
+                       blocksize /= 512;
+               }
        }
-
        /* Select a sort function. */
        if (f_reversesort) {
-               switch (sortkey) {
-               case BY_NAME:
-                       sortfcn = revnamecmp;
-                       break;
-               case BY_SIZE:
+               if (f_sizesort)
                        sortfcn = revsizecmp;
-                       break;
-               case BY_TIME:
-                       if (f_accesstime)
-                               sortfcn = revacccmp;
-                       else if (f_statustime)
-                               sortfcn = revstatcmp;
-                       else /* Use modification time. */
-                               sortfcn = revmodcmp;
-                       break;
-               }
+               else if (!f_timesort)
+                       sortfcn = revnamecmp;
+               else if (f_accesstime)
+                       sortfcn = revacccmp;
+               else if (f_statustime)
+                       sortfcn = revstatcmp;
+               else            /* Use modification time. */
+                       sortfcn = revmodcmp;
        } else {
-               switch (sortkey) {
-               case BY_NAME:
-                       sortfcn = namecmp;
-                       break;
-               case BY_SIZE:
+               if (f_sizesort)
                        sortfcn = sizecmp;
-                       break;
-               case BY_TIME:
-                       if (f_accesstime)
-                               sortfcn = acccmp;
-                       else if (f_statustime)
-                               sortfcn = statcmp;
-                       else /* Use modification time. */
-                               sortfcn = modcmp;
-                       break;
-               }
+               else if (!f_timesort)
+                       sortfcn = namecmp;
+               else if (f_accesstime)
+                       sortfcn = acccmp;
+               else if (f_statustime)
+                       sortfcn = statcmp;
+               else            /* Use modification time. */
+                       sortfcn = modcmp;
        }
 
        /* Select a print function. */
        if (f_singlecol)
                printfcn = printscol;
-       else if (f_columnacross)
-               printfcn = printacol;
        else if (f_longform)
                printfcn = printlong;
+       else if (f_stream)
+               printfcn = printstream;
        else
                printfcn = printcol;
 
@@ -317,11 +433,10 @@ main(argc, argv)
                traverse(argc, argv, fts_options);
        else
                traverse(1, dotav, fts_options);
-       exit(0);
-       /* NOTREACHED */
+       exit(rval);
 }
 
-static int output;                     /* If anything output. */
+static int output;             /* If anything output. */
 
 /*
  * Traverse() walks the logical directory structure specified by the argv list
@@ -330,18 +445,15 @@ static int output;                        /* If anything output. */
  * a superset (may be exact set) of the files to be displayed.
  */
 static void
-traverse(argc, argv, options)
-       int argc, options;
-       char *argv[];
+traverse(int argc, char *argv[], int options)
 {
        FTS *ftsp;
        FTSENT *p, *chp;
        int ch_options;
-       char pbuf[MAXPATHLEN + 1], *path;
 
        if ((ftsp =
            fts_open(argv, options, f_nosort ? NULL : mastercmp)) == NULL)
-               err(1, "%s", "");
+               err(1, "fts_open");
 
        display(NULL, fts_children(ftsp, 0));
        if (f_listdir)
@@ -361,6 +473,7 @@ traverse(argc, argv, options)
                case FTS_DNR:
                case FTS_ERR:
                        warnx("%s: %s", p->fts_name, strerror(p->fts_errno));
+                       rval = 1;
                        break;
                case FTS_D:
                        if (p->fts_level != FTS_ROOTLEVEL &&
@@ -372,25 +485,20 @@ traverse(argc, argv, options)
                         * a separator.  If multiple arguments, precede each
                         * directory with its name.
                         */
-                       if (f_nonprint) {
-                               prcopy(p->fts_path, pbuf, p->fts_pathlen+1);
-                               path = pbuf;
-                       } else
-                               path = p->fts_path;
-
                        if (output)
-                               (void)printf("\n%s:\n", path);
+                               (void)printf("\n%s:\n", p->fts_path);
                        else if (argc > 1) {
-                               (void)printf("%s:\n", path);
+                               (void)printf("%s:\n", p->fts_path);
                                output = 1;
                        }
-
                        chp = fts_children(ftsp, ch_options);
                        display(p, chp);
 
                        if (!f_recursive && chp != NULL)
                                (void)fts_set(ftsp, p, FTS_SKIP);
                        break;
+               default:
+                       break;
                }
        if (errno)
                err(1, "fts_read");
@@ -402,52 +510,135 @@ traverse(argc, argv, options)
  * points to the parent directory of the display list.
  */
 static void
-display(p, list)
-       FTSENT *p, *list;
+display(FTSENT *p, FTSENT *list)
 {
        struct stat *sp;
        DISPLAY d;
        FTSENT *cur;
        NAMES *np;
-       u_int64_t btotal, maxblock, maxsize;
-       int maxinode, maxnlink, maxmajor, maxminor;
-       int bcfile, entries, flen, glen, ulen, maxflags, maxgroup, maxlen;
-       int maxuser, needstats;
+       off_t maxsize;
+       u_int64_t btotal, maxblock;
+       u_long lattrlen, maxinode, maxlen, maxnlink, maxlattr;
+       int bcfile, maxflags;
+       gid_t maxgroup;
+       uid_t maxuser;
+       size_t flen, ulen, glen;
+       char *initmax;
+       int entries, needstats;
        const char *user, *group;
-       char ubuf[21]="", gbuf[21]="", buf[21]; /* 64 bits == 20 digits, +1 for NUL */
-       char nuser[12], ngroup[12];
-       char *flags = NULL;
-
-#ifdef __GNUC__
-       /* This outrageous construct just to shut up a GCC warning. */
-       (void) &maxsize;
-#endif
+       char *flags, *lattr = NULL;
+       char buf[STRBUF_SIZEOF(u_quad_t) + 1];
+       char ngroup[STRBUF_SIZEOF(uid_t) + 1];
+       char nuser[STRBUF_SIZEOF(gid_t) + 1];
 
        /*
         * If list is NULL there are two possibilities: that the parent
         * directory p has no children, or that fts_children() returned an
         * error.  We ignore the error case since it will be replicated
         * on the next call to fts_read() on the post-order visit to the
-        * directory p, and will be signalled in traverse().
+        * directory p, and will be signaled in traverse().
         */
        if (list == NULL)
                return;
 
        needstats = f_inode || f_longform || f_size;
        flen = 0;
-       maxinode = maxnlink = 0;
+       btotal = 0;
+       initmax = getenv("LS_COLWIDTHS");
+       /* Fields match -lios order.  New ones should be added at the end. */
+       maxlattr = maxblock = maxinode = maxlen = maxnlink =
+           maxuser = maxgroup = maxflags = maxsize = 0;
+       if (initmax != NULL && *initmax != '\0') {
+               char *initmax2, *jinitmax;
+               int ninitmax;
+
+               /* Fill-in "::" as "0:0:0" for the sake of scanf. */
+               jinitmax = initmax2 = malloc(strlen(initmax) * 2 + 2);
+               if (jinitmax == NULL)
+                       err(1, "malloc");
+               if (*initmax == ':')
+                       strcpy(initmax2, "0:"), initmax2 += 2;
+               else
+                       *initmax2++ = *initmax, *initmax2 = '\0';
+               for (initmax++; *initmax != '\0'; initmax++) {
+                       if (initmax[-1] == ':' && initmax[0] == ':') {
+                               *initmax2++ = '0';
+                               *initmax2++ = initmax[0];
+                               initmax2[1] = '\0';
+                       } else {
+                               *initmax2++ = initmax[0];
+                               initmax2[1] = '\0';
+                       }
+               }
+               if (initmax2[-1] == ':')
+                       strcpy(initmax2, "0");
+
+               ninitmax = sscanf(jinitmax,
+                   " %lu : %qu : %lu : %i : %i : %i : %qu : %lu : %lu ",
+                   &maxinode, &maxblock, &maxnlink, &maxuser,
+                   &maxgroup, &maxflags, &maxsize, &maxlen, &maxlattr);
+               f_notabs = 1;
+               switch (ninitmax) {
+               case 0:
+                       maxinode = 0;
+                       /* FALLTHROUGH */
+               case 1:
+                       maxblock = 0;
+                       /* FALLTHROUGH */
+               case 2:
+                       maxnlink = 0;
+                       /* FALLTHROUGH */
+               case 3:
+                       maxuser = 0;
+                       /* FALLTHROUGH */
+               case 4:
+                       maxgroup = 0;
+                       /* FALLTHROUGH */
+               case 5:
+                       maxflags = 0;
+                       /* FALLTHROUGH */
+               case 6:
+                       maxsize = 0;
+                       /* FALLTHROUGH */
+               case 7:
+                       maxlen = 0;
+                       /* FALLTHROUGH */
+               case 8:
+                       maxlattr = 0;
+                       /* FALLTHROUGH */
+#ifdef COLORLS
+                       if (!f_color)
+#endif
+                               f_notabs = 0;
+                       /* FALLTHROUGH */
+               default:
+                       break;
+               }
+               maxinode = makenines(maxinode);
+               maxblock = makenines(maxblock);
+               maxnlink = makenines(maxnlink);
+               maxsize = makenines(maxsize);
+       }
+#ifndef __APPLE__
+       if (f_lomac)
+               lomac_start();
+#endif /* __APPLE__ */
        bcfile = 0;
-       maxuser = maxgroup = maxflags = maxlen = 0;
-       btotal = maxblock = maxsize = 0;
-       maxmajor = maxminor = 0;
+       flags = NULL;
        for (cur = list, entries = 0; cur; cur = cur->fts_link) {
                if (cur->fts_info == FTS_ERR || cur->fts_info == FTS_NS) {
                        warnx("%s: %s",
                            cur->fts_name, strerror(cur->fts_errno));
                        cur->fts_number = NO_PRINT;
+#ifndef __APPLE__
+                       /* Don't count this as an error.  This is for
+                        * binary compatibility with Matlab installer script.
+                        * 3252074
+                        */
+                       rval = 1;
+#endif
                        continue;
                }
-
                /*
                 * P is NULL if list is the argv list, to which different rules
                 * apply.
@@ -467,6 +658,12 @@ display(p, list)
                }
                if (cur->fts_namelen > maxlen)
                        maxlen = cur->fts_namelen;
+               if (f_octal || f_octal_escape) {
+                       u_long t = len_octal(cur->fts_name, cur->fts_namelen);
+
+                       if (t > maxlen)
+                               maxlen = t;
+               }
                if (needstats) {
                        sp = cur->fts_statp;
                        if (sp->st_blocks > maxblock)
@@ -477,13 +674,6 @@ display(p, list)
                                maxnlink = sp->st_nlink;
                        if (sp->st_size > maxsize)
                                maxsize = sp->st_size;
-                       if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode)) {
-                               bcfile = 1;
-                               if (major(sp->st_rdev) > maxmajor)
-                                       maxmajor = major(sp->st_rdev);
-                               if (minor(sp->st_rdev) > maxminor)
-                                       maxminor = minor(sp->st_rdev);
-                       }
 
                        btotal += sp->st_blocks;
                        if (f_longform) {
@@ -495,40 +685,63 @@ display(p, list)
                                        user = nuser;
                                        group = ngroup;
                                } else {
-                                       if ((user = user_from_uid(sp->st_uid, 0)) == NULL) {
-                                               (void)snprintf(ubuf, sizeof(ubuf), "%d", (int)sp->st_uid);
-                                               user = ubuf;
-                                       }
-                                       if ((group = group_from_gid(sp->st_gid, 0)) == NULL) {
-                                               (void)snprintf(gbuf, sizeof(gbuf), "%d", (int)sp->st_gid);
-                                               group = gbuf;
-                                       }
+                                       user = user_from_uid(sp->st_uid, 0);
+                                       group = group_from_gid(sp->st_gid, 0);
                                }
                                if ((ulen = strlen(user)) > maxuser)
                                        maxuser = ulen;
                                if ((glen = strlen(group)) > maxgroup)
                                        maxgroup = glen;
                                if (f_flags) {
-                                       flags =
-                                           flags_to_string(sp->st_flags, "-");
-                                       if ((flen = strlen(flags)) > maxflags)
+                                       flags = fflagstostr(sp->st_flags);
+                                       if (flags != NULL && *flags == '\0') {
+                                               free(flags);
+                                               flags = strdup("-");
+                                       }
+                                       if (flags == NULL)
+                                               err(1, "fflagstostr");
+                                       flen = strlen(flags);
+                                       if (flen > (size_t)maxflags)
                                                maxflags = flen;
                                } else
                                        flen = 0;
+                               lattr = NULL;
+#ifndef __APPLE__
+                               if (f_lomac) {
+                                       lattr = get_lattr(cur);
+                                       lattrlen = strlen(lattr);
+                                       if (lattrlen > maxlattr)
+                                               maxlattr = lattrlen;
+                               } else
+#endif /* __APPLE__ */
+                                       lattrlen = 0;
 
-                               if ((np = malloc(sizeof(NAMES) +
-                                   ulen + glen + flen + 3)) == NULL)
-                                       err(1, "%s", "");
+                               if ((np = malloc(sizeof(NAMES) + lattrlen +
+                                   ulen + glen + flen + 4)) == NULL)
+                                       err(1, "malloc");
 
                                np->user = &np->data[0];
                                (void)strcpy(np->user, user);
                                np->group = &np->data[ulen + 1];
                                (void)strcpy(np->group, group);
 
+                               if (S_ISCHR(sp->st_mode) ||
+                                   S_ISBLK(sp->st_mode))
+                                       bcfile = 1;
+
                                if (f_flags) {
                                        np->flags = &np->data[ulen + glen + 2];
-                                       (void)strcpy(np->flags, flags);
+                                       (void)strcpy(np->flags, flags);
+                                       free(flags);
+                               }
+#ifndef __APPLE__
+                               if (f_lomac) {
+                                       np->lattr = &np->data[ulen + glen + 2
+                                           + (f_flags ? flen + 1 : 0)];
+                                       (void)strcpy(np->lattr, lattr);
+                                       free(lattr);
                                }
+#endif /* __APPLE__ */
                                cur->fts_pointer = np;
                        }
                }
@@ -542,39 +755,31 @@ display(p, list)
        d.entries = entries;
        d.maxlen = maxlen;
        if (needstats) {
+               d.bcfile = bcfile;
                d.btotal = btotal;
-               (void)snprintf(buf, sizeof(buf), "%qu", (long long)maxblock);
+               (void)snprintf(buf, sizeof(buf), "%qu", (u_int64_t)maxblock);
                d.s_block = strlen(buf);
                d.s_flags = maxflags;
+               d.s_lattr = maxlattr;
                d.s_group = maxgroup;
-               (void)snprintf(buf, sizeof(buf), "%u", maxinode);
+               (void)snprintf(buf, sizeof(buf), "%lu", maxinode);
                d.s_inode = strlen(buf);
-               (void)snprintf(buf, sizeof(buf), "%u", maxnlink);
+               (void)snprintf(buf, sizeof(buf), "%lu", maxnlink);
                d.s_nlink = strlen(buf);
-               (void)snprintf(buf, sizeof(buf), "%qu", (long long)maxsize);
+               (void)snprintf(buf, sizeof(buf), "%qu", (u_int64_t)maxsize);
                d.s_size = strlen(buf);
                d.s_user = maxuser;
-               if (bcfile) {
-                       (void)snprintf(buf, sizeof(buf), "%u", maxmajor);
-                       d.s_major = strlen(buf);
-                       (void)snprintf(buf, sizeof(buf), "%u", maxminor);
-                       d.s_minor = strlen(buf);
-                       if (d.s_major + d.s_minor + 2 > d.s_size)
-                               d.s_size = d.s_major + d.s_minor + 2;
-                       else if (d.s_size - d.s_minor - 2 > d.s_major)
-                               d.s_major = d.s_size - d.s_minor - 2;
-               } else {
-                       d.s_major = 0;
-                       d.s_minor = 0;
-               }
        }
-
        printfcn(&d);
        output = 1;
 
        if (f_longform)
                for (cur = list; cur; cur = cur->fts_link)
                        free(cur->fts_pointer);
+#ifndef __APPLE__
+       if (f_lomac)
+               lomac_stop();
+#endif /* __APPLE__ */
 }
 
 /*
@@ -584,8 +789,7 @@ display(p, list)
  * All other levels use the sort function.  Error entries remain unsorted.
  */
 static int
-mastercmp(a, b)
-       const FTSENT **a, **b;
+mastercmp(const FTSENT * const *a, const FTSENT * const *b)
 {
        int a_info, b_info;
 
@@ -596,21 +800,34 @@ mastercmp(a, b)
        if (b_info == FTS_ERR)
                return (0);
 
-       if (a_info == FTS_NS || b_info == FTS_NS) {
-               if (b_info != FTS_NS)
-                       return (1);
-               else if (a_info != FTS_NS)
-                       return (-1);
-               else
-                       return (namecmp(*a, *b));
-       }
+       if (a_info == FTS_NS || b_info == FTS_NS)
+               return (namecmp(*a, *b));
 
-       if (a_info != b_info && !f_listdir &&
-           (*a)->fts_level == FTS_ROOTLEVEL) {
+       if (a_info != b_info &&
+           (*a)->fts_level == FTS_ROOTLEVEL && !f_listdir) {
                if (a_info == FTS_D)
                        return (1);
-               else if (b_info == FTS_D)
+               if (b_info == FTS_D)
                        return (-1);
        }
        return (sortfcn(*a, *b));
 }
+
+/*
+ * Makenines() returns (10**n)-1.  This is useful for converting a width
+ * into a number that wide in decimal.
+ */
+static u_quad_t
+makenines(u_long n)
+{
+       u_long i;
+       u_quad_t reg;
+
+       reg = 1;
+       /* Use a loop instead of pow(), since all values of n are small. */
+       for (i = 0; i < n; i++)
+               reg *= 10;
+       reg--;
+
+       return reg;
+}
diff --git a/ls/ls.h b/ls/ls.h
index 733a7bb60d5f645e0743180015a5530466cfebcf..4f15f9899e39b1aeaba3ca403c99915c691d2d3f 100644 (file)
--- a/ls/ls.h
+++ b/ls/ls.h
@@ -1,4 +1,3 @@
-/*     $NetBSD: ls.h,v 1.9 1998/05/16 15:12:26 lukem Exp $     */
 
 /*
  * Copyright (c) 1989, 1993
@@ -35,7 +34,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)ls.h        8.1 (Berkeley) 5/31/93
+ *     from: @(#)ls.h  8.1 (Berkeley) 5/31/93
+ * $FreeBSD: src/bin/ls/ls.h,v 1.18 2002/05/19 02:51:36 tjr Exp $
  */
 
 #define NO_PRINT       1
@@ -44,33 +44,48 @@ extern long blocksize;              /* block size units */
 
 extern int f_accesstime;       /* use time of last access */
 extern int f_flags;            /* show flags associated with a file */
+extern int f_humanval;         /* show human-readable file sizes */
+#ifndef __APPLE__
+extern int f_lomac;            /* show LOMAC attributes */
+#endif /* __APPLE__ */
 extern int f_inode;            /* print inode */
 extern int f_longform;         /* long listing format */
+extern int f_octal;            /* print unprintables in octal */
+extern int f_octal_escape;     /* like f_octal but use C escapes if possible */
 extern int f_nonprint;         /* show unprintables as ? */
 extern int f_sectime;          /* print the real time for all files */
 extern int f_size;             /* list size in short listing */
+extern int f_slash;            /* append a '/' if the file is a directory */
+extern int f_sortacross;       /* sort across rows, not down columns */ 
 extern int f_statustime;       /* use time of last mode change */
+extern int f_notabs;           /* don't use tab-separated multi-col output */
 extern int f_type;             /* add type character for non-regular files */
+#ifdef COLORLS
+extern int f_color;            /* add type in color for non-regular files */
+#endif
 
 typedef struct {
        FTSENT *list;
        u_int64_t btotal;
+       int bcfile;
        int entries;
        int maxlen;
-       int s_block;
-       int s_flags;
-       int s_group;
-       int s_inode;
-       int s_nlink;
-       int s_size;
-       int s_user;
-       int s_major;
-       int s_minor;
+       u_int s_block;
+       u_int s_flags;
+       u_int s_lattr;
+       u_int s_group;
+       u_int s_inode;
+       u_int s_nlink;
+       u_int s_size;
+       u_int s_user;
 } DISPLAY;
 
 typedef struct {
        char *user;
        char *group;
        char *flags;
+#ifndef __APPLE__
+       char *lattr;
+#endif /* __APPLE__ */
        char data[1];
 } NAMES;
index 240f22114eb1cd2c5140405c37f2ceb3734d7b11..b3dd33954b1968e180cdd865b3cb37d8a75865b4 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: print.c,v 1.22 1998/07/28 05:15:47 mycroft Exp $       */
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
-#ifndef lint
 #if 0
-static char sccsid[] = "@(#)print.c    8.5 (Berkeley) 7/28/94";
-#else
-__RCSID("$NetBSD: print.c,v 1.22 1998/07/28 05:15:47 mycroft Exp $");
-#endif
+#ifndef lint
+static char sccsid[] = "@(#)print.c    8.4 (Berkeley) 4/17/94";
 #endif /* not lint */
+#endif
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/ls/print.c,v 1.57 2002/08/29 14:29:09 keramida Exp $");
 
 #include <sys/param.h>
 #include <sys/stat.h>
@@ -51,31 +48,87 @@ __RCSID("$NetBSD: print.c,v 1.22 1998/07/28 05:15:47 mycroft Exp $");
 #include <err.h>
 #include <errno.h>
 #include <fts.h>
-#include <grp.h>
-#include <pwd.h>
+#include <math.h>
+#ifndef __APPLE__
+#include <langinfo.h>
+#endif /* __APPLE__ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#include <tzfile.h>
 #include <unistd.h>
-#include <utmp.h>
+#ifdef COLORLS
+#include <ctype.h>
+#include <termcap.h>
+#include <signal.h>
+#endif
 
 #include "ls.h"
 #include "extern.h"
 
-static int     printaname __P((FTSENT *, int, int));
-static void    printlink __P((FTSENT *));
-static void    printtime __P((time_t));
-static int     printtype __P((u_int));
-
-static time_t  now;
+static int     printaname(FTSENT *, u_long, u_long);
+static void    printlink(FTSENT *);
+static void    printtime(time_t);
+static int     printtype(u_int);
+static void    printsize(size_t, off_t);
+#ifdef COLORLS
+static void    endcolor(int);
+static int     colortype(mode_t);
+#endif
 
 #define        IS_NOPRINT(p)   ((p)->fts_number == NO_PRINT)
 
+#define KILO_SZ(n) (n)
+#define MEGA_SZ(n) ((n) * (n))
+#define GIGA_SZ(n) ((n) * (n) * (n))
+#define TERA_SZ(n) ((n) * (n) * (n) * (n))
+#define PETA_SZ(n) ((n) * (n) * (n) * (n) * (n))
+
+#define KILO_2_SZ (KILO_SZ(1024ULL))
+#define MEGA_2_SZ (MEGA_SZ(1024ULL))
+#define GIGA_2_SZ (GIGA_SZ(1024ULL))
+#define TERA_2_SZ (TERA_SZ(1024ULL))
+#define PETA_2_SZ (PETA_SZ(1024ULL))
+
+static u_int64_t vals_base2[] = {1, KILO_2_SZ, MEGA_2_SZ, GIGA_2_SZ, TERA_2_SZ, PETA_2_SZ};
+
+typedef enum {
+       NONE, KILO, MEGA, GIGA, TERA, PETA, UNIT_MAX
+} unit_t;
+static unit_t unit_adjust(off_t *);
+
+static int unitp[] = {NONE, KILO, MEGA, GIGA, TERA, PETA};
+
+#ifdef COLORLS
+/* Most of these are taken from <sys/stat.h> */
+typedef enum Colors {
+       C_DIR,                  /* directory */
+       C_LNK,                  /* symbolic link */
+       C_SOCK,                 /* socket */
+       C_FIFO,                 /* pipe */
+       C_EXEC,                 /* executable */
+       C_BLK,                  /* block special */
+       C_CHR,                  /* character special */
+       C_SUID,                 /* setuid executable */
+       C_SGID,                 /* setgid executable */
+       C_WSDIR,                /* directory writeble to others, with sticky
+                                * bit */
+       C_WDIR,                 /* directory writeble to others, without
+                                * sticky bit */
+       C_NUMCOLORS             /* just a place-holder */
+} Colors;
+
+static const char *defcolors = "exfxcxdxbxegedabagacad";
+
+/* colors for file types */
+static struct {
+       int     num[2];
+       int     bold;
+} colors[C_NUMCOLORS];
+#endif
+
 void
-printscol(dp)
-       DISPLAY *dp;
+printscol(DISPLAY *dp)
 {
        FTSENT *p;
 
@@ -87,57 +140,82 @@ printscol(dp)
        }
 }
 
+/*
+ * print name in current style
+ */
+static int
+printname(const char *name)
+{
+       if (f_octal || f_octal_escape)
+               return prn_octal(name);
+       else if (f_nonprint)
+               return prn_printable(name);
+       else
+               return printf("%s", name);
+}
+
 void
-printlong(dp)
-       DISPLAY *dp;
+printlong(DISPLAY *dp)
 {
        struct stat *sp;
        FTSENT *p;
        NAMES *np;
        char buf[20];
-       char nbuf[MAXPATHLEN + 1], *name;
-
-       now = time(NULL);
+#ifdef COLORLS
+       int color_printed = 0;
+#endif
 
        if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size))
-               (void)printf("total %qu\n",
-                   (long long)(howmany(dp->btotal, blocksize)));
+               (void)printf("total %qu\n", (u_int64_t)howmany(dp->btotal, blocksize));
 
        for (p = dp->list; p; p = p->fts_link) {
                if (IS_NOPRINT(p))
                        continue;
                sp = p->fts_statp;
                if (f_inode)
-                       (void)printf("%*u ", dp->s_inode, sp->st_ino);
+                       (void)printf("%*lu ", dp->s_inode, (u_long)sp->st_ino);
                if (f_size)
-                       (void)printf("%*qu ", dp->s_block,
-                           (long long)howmany(sp->st_blocks, blocksize));
-               (void)strmode(sp->st_mode, buf);
+                       (void)printf("%*qu ",
+                           dp->s_block, (u_int64_t)howmany(sp->st_blocks, blocksize));
+               strmode(sp->st_mode, buf);
                np = p->fts_pointer;
                (void)printf("%s %*u %-*s  %-*s  ", buf, dp->s_nlink,
                    sp->st_nlink, dp->s_user, np->user, dp->s_group,
                    np->group);
                if (f_flags)
                        (void)printf("%-*s ", dp->s_flags, np->flags);
+#ifndef __APPLE__
+               if (f_lomac)
+                       (void)printf("%-*s ", dp->s_lattr, np->lattr);
+#endif /* __APPLE__ */
                if (S_ISCHR(sp->st_mode) || S_ISBLK(sp->st_mode))
-                       (void)printf("%*u, %*u ",
-                           dp->s_major, major(sp->st_rdev), dp->s_minor,
-                           minor(sp->st_rdev));
+                       if (minor(sp->st_rdev) > 255 || minor(sp->st_rdev) < 0)
+                               (void)printf("%3d, 0x%08x ",
+                                   major(sp->st_rdev),
+                                   (u_int)minor(sp->st_rdev));
+                       else
+                               (void)printf("%3d, %3d ",
+                                   major(sp->st_rdev), minor(sp->st_rdev));
+               else if (dp->bcfile)
+                       (void)printf("%*s%*qu ",
+                           8 - dp->s_size, "", dp->s_size, (u_int64_t)sp->st_size);
                else
-                       (void)printf("%*qu ", dp->s_size,
-                           (long long)sp->st_size);
+                       printsize(dp->s_size, sp->st_size);
                if (f_accesstime)
                        printtime(sp->st_atime);
                else if (f_statustime)
                        printtime(sp->st_ctime);
                else
                        printtime(sp->st_mtime);
-               if (f_nonprint) {
-                       prcopy(p->fts_name, nbuf, p->fts_namelen+1);
-                       name = nbuf;
-               } else
-                       name = p->fts_name;
-               (void)printf("%s", name);
+#ifdef COLORLS
+               if (f_color)
+                       color_printed = colortype(sp->st_mode);
+#endif
+               (void)printname(p->fts_name);
+#ifdef COLORLS
+               if (f_color && color_printed)
+                       endcolor(0);
+#endif
                if (f_type)
                        (void)printtype(sp->st_mode);
                if (S_ISLNK(sp->st_mode))
@@ -147,30 +225,53 @@ printlong(dp)
 }
 
 void
-printcol(dp)
-       DISPLAY *dp;
+printstream(DISPLAY *dp)
+{
+       FTSENT *p;
+       extern int termwidth;
+       int chcnt;
+
+       for (p = dp->list, chcnt = 0; p; p = p->fts_link) {
+               if (p->fts_number == NO_PRINT)
+                       continue;
+               if (strlen(p->fts_name) + chcnt +
+                   (p->fts_link ? 2 : 0) >= (unsigned)termwidth) {
+                       putchar('\n');
+                       chcnt = 0;
+               }
+               chcnt += printaname(p, dp->s_inode, dp->s_block);
+               if (p->fts_link) {
+                       printf(", ");
+                       chcnt += 2;
+               }
+       }
+       if (chcnt)
+               putchar('\n');
+}
+               
+void
+printcol(DISPLAY *dp)
 {
        extern int termwidth;
        static FTSENT **array;
        static int lastentries = -1;
        FTSENT *p;
-       int base, chcnt, col, colwidth, num;
-       int numcols, numrows, row;
-
-       colwidth = dp->maxlen;
-       if (f_inode)
-               colwidth += dp->s_inode + 1;
-       if (f_size)
-               colwidth += dp->s_block + 1;
-       if (f_type)
-               colwidth += 1;
-
-       colwidth += 1;
+       int base;
+       int chcnt;
+       int cnt;
+       int col;
+       int colwidth;
+       int endcol;
+       int num;
+       int numcols;
+       int numrows;
+       int row;
+       int tabwidth;
 
-       if (termwidth < 2 * colwidth) {
-               printscol(dp);
-               return;
-       }
+       if (f_notabs)
+               tabwidth = 1;
+       else
+               tabwidth = 8;
 
        /*
         * Have to do random access in the linked list -- build a table
@@ -180,7 +281,7 @@ printcol(dp)
                lastentries = dp->entries;
                if ((array =
                    realloc(array, dp->entries * sizeof(FTSENT *))) == NULL) {
-                       warn("%s", "");
+                       warn(NULL);
                        printscol(dp);
                }
        }
@@ -188,37 +289,6 @@ printcol(dp)
                if (p->fts_number != NO_PRINT)
                        array[num++] = p;
 
-       numcols = termwidth / colwidth;
-       colwidth = termwidth / numcols;         /* spread out if possible */
-       numrows = num / numcols;
-       if (num % numcols)
-               ++numrows;
-
-       if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size))
-               (void)printf("total %qu\n",
-                   (long long)(howmany(dp->btotal, blocksize)));
-       for (row = 0; row < numrows; ++row) {
-               for (base = row, chcnt = col = 0; col < numcols; ++col) {
-                       chcnt = printaname(array[base], dp->s_inode,
-                           dp->s_block);
-                       if ((base += numrows) >= num)
-                               break;
-                       while (chcnt++ < colwidth)
-                               (void)putchar(' ');
-               }
-               (void)putchar('\n');
-       }
-}
-
-void
-printacol(dp)
-       DISPLAY *dp;
-{
-       extern int termwidth;
-       FTSENT *p;
-       int chcnt, col, colwidth;
-       int numcols;
-
        colwidth = dp->maxlen;
        if (f_inode)
                colwidth += dp->s_inode + 1;
@@ -227,33 +297,44 @@ printacol(dp)
        if (f_type)
                colwidth += 1;
 
-       colwidth += 1;
-
+       colwidth = (colwidth + tabwidth) & ~(tabwidth - 1);
        if (termwidth < 2 * colwidth) {
                printscol(dp);
                return;
        }
-
        numcols = termwidth / colwidth;
-       colwidth = termwidth / numcols;         /* spread out if possible */
+       numrows = num / numcols;
+       if (num % numcols)
+               ++numrows;
 
        if (dp->list->fts_level != FTS_ROOTLEVEL && (f_longform || f_size))
-               (void)printf("total %qu\n", 
-                   (long long)(howmany(dp->btotal, blocksize)));
-       chcnt = col = 0;
-       for (p = dp->list; p; p = p->fts_link) {
-               if (IS_NOPRINT(p))
-                       continue;
-               if (col >= numcols) {
-                       chcnt = col = 0;
-                       (void)putchar('\n');
+               (void)printf("total %qu\n", (u_int64_t)howmany(dp->btotal, blocksize));
+
+       base = 0;
+       for (row = 0; row < numrows; ++row) {
+               endcol = colwidth;
+               if (!f_sortacross)
+                       base = row;
+               for (col = 0, chcnt = 0; col < numcols; ++col) {
+                       chcnt += printaname(array[base], dp->s_inode,
+                           dp->s_block);
+                       if (f_sortacross)
+                               base++;
+                       else
+                               base += numrows;
+                       if (base >= num)
+                               break;
+                       while ((cnt = ((chcnt + tabwidth) & ~(tabwidth - 1)))
+                           <= endcol) {
+                               if (f_sortacross && col + 1 >= numcols)
+                                       break;
+                               (void)putchar(f_notabs ? ' ' : '\t');
+                               chcnt = cnt;
+                       }
+                       endcol += colwidth;
                }
-               chcnt = printaname(p, dp->s_inode, dp->s_block);
-               while (chcnt++ < colwidth)
-                       (void)putchar(' ');
-               col++;
+               (void)putchar('\n');
        }
-       (void)putchar('\n');
 }
 
 /*
@@ -261,62 +342,76 @@ printacol(dp)
  * return # of characters printed, no trailing characters.
  */
 static int
-printaname(p, inodefield, sizefield)
-       FTSENT *p;
-       int sizefield, inodefield;
+printaname(FTSENT *p, u_long inodefield, u_long sizefield)
 {
        struct stat *sp;
        int chcnt;
-       char nbuf[MAXPATHLEN + 1], *name;
+#ifdef COLORLS
+       int color_printed = 0;
+#endif
 
        sp = p->fts_statp;
        chcnt = 0;
        if (f_inode)
-               chcnt += printf("%*u ", inodefield, sp->st_ino);
+               chcnt += printf("%*lu ", (int)inodefield, (u_long)sp->st_ino);
        if (f_size)
-               chcnt += printf("%*qu ", sizefield,
-                   (long long)howmany(sp->st_blocks, blocksize));
-       if (f_nonprint) {
-               prcopy(p->fts_name, nbuf, p->fts_namelen+1);
-               name = nbuf;
-       } else
-               name = p->fts_name;
-       chcnt += printf("%s", name);
+               chcnt += printf("%*qu ",
+                   (int)sizefield, (u_int64_t)howmany(sp->st_blocks, blocksize));
+#ifdef COLORLS
+       if (f_color)
+               color_printed = colortype(sp->st_mode);
+#endif
+       chcnt += printname(p->fts_name);
+#ifdef COLORLS
+       if (f_color && color_printed)
+               endcolor(0);
+#endif
        if (f_type)
                chcnt += printtype(sp->st_mode);
        return (chcnt);
 }
 
 static void
-printtime(ftime)
-       time_t ftime;
+printtime(time_t ftime)
 {
-       int i;
-       char *longstring;
-
-       longstring = ctime(&ftime);
-       for (i = 4; i < 11; ++i)
-               (void)putchar(longstring[i]);
-
-#define        SIXMONTHS       ((DAYSPERNYEAR / 2) * SECSPERDAY)
+       char longstring[80];
+       static time_t now;
+       const char *format;
+       static int d_first = -1;
+
+#ifndef __APPLE__
+       if (d_first < 0)
+               d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
+#endif /* __APPLE__ */
+       if (now == 0)
+               now = time(NULL);
+
+#define        SIXMONTHS       ((365 / 2) * 86400)
        if (f_sectime)
-               for (i = 11; i < 24; i++)
-                       (void)putchar(longstring[i]);
-       else if (ftime + SIXMONTHS > now && ftime - SIXMONTHS < now)
-               for (i = 11; i < 16; ++i)
-                       (void)putchar(longstring[i]);
-       else {
-               (void)putchar(' ');
-               for (i = 20; i < 24; ++i)
-                       (void)putchar(longstring[i]);
-       }
-       (void)putchar(' ');
+               /* mmm dd hh:mm:ss yyyy || dd mmm hh:mm:ss yyyy */
+               format = d_first ? "%e %b %T %Y " : "%b %e %T %Y ";
+       else if (ftime + SIXMONTHS > now && ftime < now + SIXMONTHS)
+               /* mmm dd hh:mm || dd mmm hh:mm */
+               format = d_first ? "%e %b %R " : "%b %e %R ";
+       else
+               /* mmm dd  yyyy || dd mmm  yyyy */
+               format = d_first ? "%e %b  %Y " : "%b %e  %Y ";
+       strftime(longstring, sizeof(longstring), format, localtime(&ftime));
+       fputs(longstring, stdout);
 }
 
 static int
-printtype(mode)
-       u_int mode;
+printtype(u_int mode)
 {
+
+       if (f_slash) {
+               if ((mode & S_IFMT) == S_IFDIR) {
+                       (void)putchar('/');
+                       return (1);
+               }
+               return (0);
+       }
+
        switch (mode & S_IFMT) {
        case S_IFDIR:
                (void)putchar('/');
@@ -333,6 +428,8 @@ printtype(mode)
        case S_IFWHT:
                (void)putchar('%');
                return (1);
+       default:
+               break;
        }
        if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
                (void)putchar('*');
@@ -341,23 +438,213 @@ printtype(mode)
        return (0);
 }
 
+#ifdef COLORLS
+static int
+putch(int c)
+{
+       (void)putchar(c);
+       return 0;
+}
+
+static int
+writech(int c)
+{
+       char tmp = c;
+
+       (void)write(STDOUT_FILENO, &tmp, 1);
+       return 0;
+}
+
 static void
-printlink(p)
-       FTSENT *p;
+printcolor(Colors c)
+{
+       char *ansiseq;
+
+       if (colors[c].bold)
+               tputs(enter_bold, 1, putch);
+
+       if (colors[c].num[0] != -1) {
+               ansiseq = tgoto(ansi_fgcol, 0, colors[c].num[0]);
+               if (ansiseq)
+                       tputs(ansiseq, 1, putch);
+       }
+       if (colors[c].num[1] != -1) {
+               ansiseq = tgoto(ansi_bgcol, 0, colors[c].num[1]);
+               if (ansiseq)
+                       tputs(ansiseq, 1, putch);
+       }
+}
+
+static void
+endcolor(int sig)
+{
+       tputs(ansi_coloff, 1, sig ? writech : putch);
+       tputs(attrs_off, 1, sig ? writech : putch);
+}
+
+static int
+colortype(mode_t mode)
+{
+       switch (mode & S_IFMT) {
+       case S_IFDIR:
+               if (mode & S_IWOTH)
+                       if (mode & S_ISTXT)
+                               printcolor(C_WSDIR);
+                       else
+                               printcolor(C_WDIR);
+               else
+                       printcolor(C_DIR);
+               return (1);
+       case S_IFLNK:
+               printcolor(C_LNK);
+               return (1);
+       case S_IFSOCK:
+               printcolor(C_SOCK);
+               return (1);
+       case S_IFIFO:
+               printcolor(C_FIFO);
+               return (1);
+       case S_IFBLK:
+               printcolor(C_BLK);
+               return (1);
+       case S_IFCHR:
+               printcolor(C_CHR);
+               return (1);
+       }
+       if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) {
+               if (mode & S_ISUID)
+                       printcolor(C_SUID);
+               else if (mode & S_ISGID)
+                       printcolor(C_SGID);
+               else
+                       printcolor(C_EXEC);
+               return (1);
+       }
+       return (0);
+}
+
+void
+parsecolors(const char *cs)
+{
+       int i;
+       int j;
+       int len;
+       char c[2];
+       short legacy_warn = 0;
+
+       if (cs == NULL)
+               cs = "";        /* LSCOLORS not set */
+       len = strlen(cs);
+       for (i = 0; i < C_NUMCOLORS; i++) {
+               colors[i].bold = 0;
+
+               if (len <= 2 * i) {
+                       c[0] = defcolors[2 * i];
+                       c[1] = defcolors[2 * i + 1];
+               } else {
+                       c[0] = cs[2 * i];
+                       c[1] = cs[2 * i + 1];
+               }
+               for (j = 0; j < 2; j++) {
+                       /* Legacy colours used 0-7 */
+                       if (c[j] >= '0' && c[j] <= '7') {
+                               colors[i].num[j] = c[j] - '0';
+                               if (!legacy_warn) {
+                                       fprintf(stderr,
+                                           "warn: LSCOLORS should use "
+                                           "characters a-h instead of 0-9 ("
+                                           "see the manual page)\n");
+                               }
+                               legacy_warn = 1;
+                       } else if (c[j] >= 'a' && c[j] <= 'h')
+                               colors[i].num[j] = c[j] - 'a';
+                       else if (c[j] >= 'A' && c[j] <= 'H') {
+                               colors[i].num[j] = c[j] - 'A';
+                               colors[i].bold = 1;
+                       } else if (tolower((unsigned char)c[j] == 'x'))
+                               colors[i].num[j] = -1;
+                       else {
+                               fprintf(stderr,
+                                   "error: invalid character '%c' in LSCOLORS"
+                                   " env var\n", c[j]);
+                               colors[i].num[j] = -1;
+                       }
+               }
+       }
+}
+
+void
+colorquit(int sig)
+{
+       endcolor(sig);
+
+       (void)signal(sig, SIG_DFL);
+       (void)kill(getpid(), sig);
+}
+
+#endif /* COLORLS */
+
+static void
+printlink(FTSENT *p)
 {
        int lnklen;
-       char name[MAXPATHLEN + 1], path[MAXPATHLEN + 1];
+       char name[MAXPATHLEN + 1];
+       char path[MAXPATHLEN + 1];
 
        if (p->fts_level == FTS_ROOTLEVEL)
                (void)snprintf(name, sizeof(name), "%s", p->fts_name);
-       else 
+       else
                (void)snprintf(name, sizeof(name),
                    "%s/%s", p->fts_parent->fts_accpath, p->fts_name);
-       prcopy(name, name, strlen(name));
        if ((lnklen = readlink(name, path, sizeof(path) - 1)) == -1) {
                (void)fprintf(stderr, "\nls: %s: %s\n", name, strerror(errno));
                return;
        }
        path[lnklen] = '\0';
-       (void)printf(" -> %s", path);
+       (void)printf(" -> ");
+       (void)printname(path);
+}
+
+static void
+printsize(size_t width, off_t bytes)
+{
+       unit_t unit;
+
+       if (f_humanval) {
+               unit = unit_adjust(&bytes);
+
+               if (bytes == 0)
+                       (void)printf("%*s ", width, "0B");
+               else
+                       (void)printf("%*lld%c ", width - 1, bytes,
+                           "BKMGTPE"[unit]);
+       } else
+               (void)printf("%*lld ", width, bytes);
+}
+
+/*
+ * Output in "human-readable" format.  Uses 3 digits max and puts
+ * unit suffixes at the end.  Makes output compact and easy to read,
+ * especially on huge disks.
+ *
+ */
+unit_t
+unit_adjust(off_t *val)
+{
+       double abval;
+       unit_t unit;
+       unsigned int unit_sz;
+
+       abval = fabs((double)*val);
+
+       unit_sz = abval ? ilogb(abval) / 10 : 0;
+
+       if (unit_sz >= UNIT_MAX) {
+               unit = NONE;
+       } else {
+               unit = unitp[unit_sz];
+               *val /= (double)vals_base2[unit_sz];
+       }
+
+       return (unit);
 }
index fee00279d1f6bd2fc49c9e46e0e87f82a644f2f8..49b438546665b5667dc81cf9a35f23a8f27d1dc6 100644 (file)
--- a/ls/util.c
+++ b/ls/util.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: util.c,v 1.15 1998/07/28 05:31:25 mycroft Exp $        */
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
-#ifndef lint
 #if 0
-static char sccsid[] = "@(#)util.c     8.5 (Berkeley) 4/28/95";
-#else
-__RCSID("$NetBSD: util.c,v 1.15 1998/07/28 05:31:25 mycroft Exp $");
-#endif
+#ifndef lint
+static char sccsid[] = "@(#)util.c     8.3 (Berkeley) 4/2/94";
 #endif /* not lint */
+#endif
+#include <sys/types.h>
+__RCSID("$FreeBSD: src/bin/ls/util.c,v 1.30 2002/06/30 05:13:54 obrien Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
 #include <ctype.h>
+#include <err.h>
 #include <fts.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -57,24 +55,111 @@ __RCSID("$NetBSD: util.c,v 1.15 1998/07/28 05:31:25 mycroft Exp $");
 #include "ls.h"
 #include "extern.h"
 
-void
-prcopy(src, dest, len)
-       char *src, *dest;
-       int len;
+int
+prn_printable(const char *s)
+{
+       char c;
+       int n;
+
+       for (n = 0; (c = *s) != '\0'; ++s, ++n)
+               if (isprint((unsigned char)c))
+                       putchar(c);
+               else
+                       putchar('?');
+       return n;
+}
+
+/*
+ * The fts system makes it difficult to replace fts_name with a different-
+ * sized string, so we just calculate the real length here and do the
+ * conversion in prn_octal()
+ *
+ * XXX when using f_octal_escape (-b) rather than f_octal (-B), the
+ * length computed by len_octal may be too big. I just can't be buggered
+ * to fix this as an efficient fix would involve a lookup table. Same goes
+ * for the rather inelegant code in prn_octal.
+ *
+ *                                              DES 1998/04/23
+ */
+
+size_t
+len_octal(const char *s, int len)
 {
-       int ch;
+       size_t r = 0;
 
-       while (len--) {
-               ch = *src++;
-               *dest++ = (isprint(ch) || ch == '\0') ? ch : '?';
+       while (len--)
+               if (isprint((unsigned const char)*s++)) r++; else r += 4;
+       return r;
+}
+
+int
+prn_octal(const char *s)
+{
+        unsigned char ch;
+       int len = 0;
+       
+        while ((ch = (unsigned char)*s++)) {
+               if (isprint(ch) && (ch != '\"') && (ch != '\\'))
+                       putchar(ch), len++;
+               else if (f_octal_escape) {
+                       putchar('\\');
+                       switch (ch) {
+                       case '\\':
+                               putchar('\\');
+                               break;
+                       case '\"':
+                               putchar('"');
+                               break;
+                       case '\a':
+                               putchar('a');
+                               break;
+                       case '\b':
+                               putchar('b');
+                               break;
+                       case '\f':
+                               putchar('f');
+                               break;
+                       case '\n':
+                               putchar('n');
+                               break;
+                       case '\r':
+                               putchar('r');
+                               break;
+                       case '\t':
+                               putchar('t');
+                               break;
+                       case '\v':
+                               putchar('v');
+                               break;
+                       default:
+                               putchar('0' + (ch >> 6));
+                               putchar('0' + ((ch >> 3) & 7));
+                               putchar('0' + (ch & 7));
+                               len += 2;
+                               break;
+                       }
+                       len += 2;
+               }
+               else {
+                       putchar('\\');
+                       putchar('0' + (ch >> 6));
+                       putchar('0' + ((ch >> 3) & 7));
+                       putchar('0' + (ch & 7));
+                       len += 4;
+               }
        }
+       return len;
 }
 
 void
-usage()
+usage(void)
 {
-       (void)fprintf(stderr, 
-           "usage: ls [-1ACFLRSTWacdfgiklnoqrstux] [file ...]\n");
+       (void)fprintf(stderr,
+#ifdef COLORLS
+       "usage: ls [-ABCFGHLPRSTWZabcdfghiklnoqrstuvx1]"
+#else
+       "usage: ls [-ABCFHLPRSTWZabcdfghiklnoqrstuvx1]"
+#endif
+                     " [file ...]\n");
        exit(1);
-       /* NOTREACHED */
 }
index 83b87a4c016d416c97e3d1fa02ee848602e107a5..2903a002d9c3187a8a6c0d4b8914c82aae706caa 100644 (file)
@@ -1,5 +1,3 @@
-.\"    $NetBSD: mkdir.1,v 1.10 1997/10/20 08:52:35 enami Exp $
-.\"
 .\" Copyright (c) 1989, 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -35,6 +33,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)mkdir.1     8.2 (Berkeley) 1/25/94
+.\" $FreeBSD: src/bin/mkdir/mkdir.1,v 1.17 2002/06/30 06:50:16 tjr Exp $
 .\"
 .Dd January 25, 1994
 .Dt MKDIR 1
 .Nd make directories
 .Sh SYNOPSIS
 .Nm
-.Op Fl p
+.Op Fl pv
 .Op Fl m Ar mode
 .Ar directory_name  ...
 .Sh DESCRIPTION
+The
 .Nm
-creates the directories named as operands, in the order specified,
+utility creates the directories named as operands, in the order specified,
 using mode
 .Li rwxrwxrwx (\&0777)
 as modified by the current
@@ -58,12 +58,14 @@ as modified by the current
 The options are as follows:
 .Pp
 .Bl -tag -width indent
-.It Fl m
+.It Fl m Ar mode
 Set the file permission bits of the final created directory to
 the specified mode.
-The mode argument can be in any of the formats specified to the
+The
+.Ar mode
+argument can be in any of the formats specified to the
 .Xr chmod 1
-utility.
+command.
 If a symbolic mode is specified, the operation characters
 .Dq +
 and
@@ -74,24 +76,33 @@ are interpreted relative to an initial mode of
 Create intermediate directories as required.
 If this option is not specified, the full path prefix of each
 operand must already exist.
+On the other hand, with this option specified, no error will
+be reported if a directory given as an operand already exists.
 Intermediate directories are created with permission bits of
 .Li rwxrwxrwx (\&0777)
 as modified by the current umask, plus write and search
-permission for the owner.  Do not consider it an error if the
-argument directory already exists.
+permission for the owner.
+.It Fl v
+Be verbose when creating directories, listing them as they are created.
 .El
 .Pp
 The user must have write permission in the parent directory.
-.Pp
-.Nm
-exits 0 if successful, and >0 if an error occurred.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh SEE ALSO
-.Xr chmod 1 ,
-.Xr rmdir 1 ,
-.Xr umask 2
+.Xr rmdir 1
+.Sh COMPATIBILITY
+The
+.Fl v
+option is non-standard and its use in scripts is not recommended.
 .Sh STANDARDS
 The
 .Nm
 utility is expected to be
 .St -p1003.2
 compatible.
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v1 .
index ea5e72c00c200f2a2aa1f2d5a6e2e3655b849895..1bb430d2e8430fc0cdaaf4abb44356e0226dcf0f 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: mkdir.c,v 1.19 1998/07/28 05:31:25 mycroft Exp $       */
-
 /*
  * Copyright (c) 1983, 1992, 1993
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1983, 1992, 1993\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static char const copyright[] =
+"@(#) Copyright (c) 1983, 1992, 1993\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)mkdir.c    8.2 (Berkeley) 1/25/94";
-#else
-__RCSID("$NetBSD: mkdir.c,v 1.19 1998/07/28 05:31:25 mycroft Exp $");
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/mkdir/mkdir.c,v 1.26 2002/06/30 05:13:54 obrien Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
 #include <err.h>
 #include <errno.h>
-#include <locale.h>
+#include <libgen.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
 
-int    mkpath __P((char *, mode_t, mode_t));
-void   usage __P((void));
-int    main __P((int, char *[]));
+static int     build(char *, mode_t);
+static void    usage(void);
+
+int vflag;
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
-       int ch, exitval, pflag;
-       mode_t *set;
-       mode_t mode, dir_mode;
+       int ch, exitval, success, pflag;
+       mode_t omode, *set = (mode_t *)NULL;
+       char *mode;
 
-       (void)setlocale(LC_ALL, "");
-
-       /*
-        * The default file mode is a=rwx (0777) with selected permissions
-        * removed in accordance with the file mode creation mask.  For
-        * intermediate path name components, the mode is the default modified
-        * by u+wx so that the subdirectories can always be created.
-        */
-       mode = 0777 & ~umask(0);
-       dir_mode = mode | S_IWUSR | S_IXUSR;
-
-       pflag = 0;
-       while ((ch = getopt(argc, argv, "m:p")) != -1)
+       omode = pflag = 0;
+       mode = NULL;
+       while ((ch = getopt(argc, argv, "m:pv")) != -1)
                switch(ch) {
+               case 'm':
+                       mode = optarg;
+                       break;
                case 'p':
                        pflag = 1;
                        break;
-               case 'm':
-                       if ((set = setmode(optarg)) == NULL)
-                               errx(1, "invalid file mode: %s", optarg);
-                       mode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
+               case 'v':
+                       vflag = 1;
                        break;
                case '?':
                default:
                        usage();
                }
+
        argc -= optind;
        argv += optind;
-
-       if (*argv == NULL)
+       if (argv[0] == NULL)
                usage();
-       
-       for (exitval = 0; *argv != NULL; ++argv) {
-               char *slash;
 
-               /* Remove trailing slashes, per POSIX. */
-               slash = strrchr(*argv, '\0');
-               while (--slash > *argv && *slash == '/')
-                       *slash = '\0';
+       if (mode == NULL) {
+               omode = S_IRWXU | S_IRWXG | S_IRWXO;
+       } else {
+               if ((set = setmode(mode)) == NULL)
+                       errx(1, "invalid file mode: %s", mode);
+               omode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
+               free(set);
+       }
 
+       for (exitval = 0; *argv != NULL; ++argv) {
+               success = 1;
                if (pflag) {
-                       if (mkpath(*argv, mode, dir_mode) < 0)
-                               exitval = 1;
-               } else {
-                       if (mkdir(*argv, mode) < 0) {
-                               warn("%s", *argv);
-                               exitval = 1;
-                       }
-                       /*
-                         * The mkdir() and umask() calls both honor only the low
-                        * nine bits, so if you try to set a mode including the
-                        * sticky, setuid, setgid bits you lose them. So chmod().
-                         */
-                       else if (chmod(*argv, mode) == -1) {
+                       if (build(*argv, omode))
+                               success = 0;
+               } else if (mkdir(*argv, omode) < 0) {
+                       if (errno == ENOTDIR || errno == ENOENT)
+                               warn("%s", dirname(*argv));
+                       else
                                warn("%s", *argv);
-                               exitval = 1;
-                        }
+                       success = 0;
+               } else if (vflag)
+                       (void)printf("%s\n", *argv);
+               
+               if (!success)
+                       exitval = 1;
+               /*
+                * The mkdir() and umask() calls both honor only the low
+                * nine bits, so if you try to set a mode including the
+                * sticky, setuid, setgid bits you lose them.  Don't do
+                * this unless the user has specifically requested a mode,
+                * as chmod will (obviously) ignore the umask.
+                */
+               if (success && mode != NULL && chmod(*argv, omode) == -1) {
+                       warn("%s", *argv);
+                       exitval = 1;
                }
        }
        exit(exitval);
-       /* NOTREACHED */
 }
 
-/*
- * mkpath -- create directories.  
- *     path     - path
- *     mode     - file mode of terminal directory
- *     dir_mode - file mode of intermediate directories
- */
 int
-mkpath(path, mode, dir_mode)
-       char *path;
-       mode_t mode;
-       mode_t dir_mode;
+build(char *path, mode_t omode)
 {
        struct stat sb;
-       char *slash;
-       int done = 0;
-
-       slash = path;
-
-       while (!done) {
-               slash += strspn(slash, "/");
-               slash += strcspn(slash, "/");
-
-               done = (*slash == '\0');
-               *slash = '\0';
-
-               if (!mkdir(path, done ? mode : dir_mode)) {
-                       /*
-                         * The mkdir() and umask() calls both honor only the low
-                        * nine bits, so if you try to set a mode including the
-                        * sticky, setuid, setgid bits you lose them. So chmod().
-                         */
-                       if (chmod(path, done ? mode : dir_mode) == -1) {
-                               warn("%s", path);
-                               return (-1);
-                        }
-               } else {
-                       if (stat(path, &sb)) {
-                               warnx("%s: %s", path, strerror(errno));
-                               return (-1);
-                       } else if (!S_ISDIR(sb.st_mode)) {
-                               warnx("%s: %s", path, strerror(ENOTDIR));
-                               return (-1);
-                       }
+       mode_t numask, oumask;
+       int first, last, retval;
+       char *p;
+
+       p = path;
+       oumask = 0;
+       retval = 0;
+       if (p[0] == '/')                /* Skip leading '/'. */
+               ++p;
+       for (first = 1, last = 0; !last ; ++p) {
+               if (p[0] == '\0')
+                       last = 1;
+               else if (p[0] != '/')
+                       continue;
+               *p = '\0';
+               if (p[1] == '\0')
+                       last = 1;
+               if (first) {
+                       /*
+                        * POSIX 1003.2:
+                        * For each dir operand that does not name an existing
+                        * directory, effects equivalent to those cased by the
+                        * following command shall occcur:
+                        *
+                        * mkdir -p -m $(umask -S),u+wx $(dirname dir) &&
+                        *    mkdir [-m mode] dir
+                        *
+                        * We change the user's umask and then restore it,
+                        * instead of doing chmod's.
+                        */
+                       oumask = umask(0);
+                       numask = oumask & ~(S_IWUSR | S_IXUSR);
+                       (void)umask(numask);
+                       first = 0;
                }
-               *slash = '/';
+               if (last)
+                       (void)umask(oumask);
+               if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0) {
+                       if (errno == EEXIST || errno == EISDIR) {
+                               if (stat(path, &sb) < 0) {
+                                       warn("%s", path);
+                                       retval = 1;
+                                       break;
+                               } else if (!S_ISDIR(sb.st_mode)) {
+                                       if (last)
+                                               errno = EEXIST;
+                                       else
+                                               errno = ENOTDIR;
+                                       warn("%s", path);
+                                       retval = 1;
+                                       break;
+                               }
+                       } else {
+                               warn("%s", path);
+                               retval = 1;
+                               break;
+                       }
+               } else if (vflag)
+                       printf("%s\n", path);
+               if (!last)
+                   *p = '/';
        }
-
-       return (0);
+       if (!first && !last)
+               (void)umask(oumask);
+       return (retval);
 }
 
 void
-usage()
+usage(void)
 {
 
-       (void)fprintf(stderr, "usage: mkdir [-p] [-m mode] dirname ...\n");
-       exit(1);
-       /* NOTREACHED */
+       (void)fprintf(stderr, "usage: mkdir [-pv] [-m mode] directory ...\n");
+       exit (EX_USAGE);
 }
index 9b82c2a5b16591d46df5861beafa86e9c4bf7d2b..884b8e5fea7571a558740d1010c9d62e9fbc8471 100644 (file)
@@ -380,7 +380,7 @@ main(argc, argv)
        printf("name: %s\nmode: %05o\ndev:  %08x\n", name, mode, dev);
 #else
        if (mknod(name, mode, dev) < 0)
-               err(1, "%s", argv[0]);
+               err(1, "%s", name);
 #endif
 
        exit(0);
diff --git a/mv/mv.1 b/mv/mv.1
index f83139923573154630b5ccb7b7b87b70dd423007..64396005312091ca997c50beef3dd3ee4c724cd2 100644 (file)
--- a/mv/mv.1
+++ b/mv/mv.1
@@ -1,5 +1,3 @@
-.\"    $NetBSD: mv.1,v 1.11 1998/04/20 05:43:30 ross Exp $
-.\"
 .\" Copyright (c) 1989, 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -35,8 +33,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)mv.1        8.1 (Berkeley) 5/31/93
+.\" $FreeBSD: src/bin/mv/mv.1,v 1.25 2002/08/26 06:16:51 keramida Exp $
 .\"
-.Dd May 31, 1993
+.Dd July 9, 2002
 .Dt MV 1
 .Os
 .Sh NAME
 .Nd move files
 .Sh SYNOPSIS
 .Nm
-.Op Fl fi
+.Op Fl f | i | n
+.Op Fl v
 .Ar source target
-.Nm ""
-.Op Fl fi
+.Nm
+.Op Fl f | i | n
+.Op Fl v
 .Ar source ... directory
 .Sh DESCRIPTION
-.Pp
 In its first form, the
 .Nm
 utility renames the file named by the
@@ -73,25 +73,48 @@ concatenation of the last operand, a slash, and the final pathname
 component of the named file.
 .Pp
 The following options are available:
-.Bl -tag -width flag
+.Bl -tag -width indent
 .It Fl f
 Do not prompt for confirmation before overwriting the destination
 path.
+(The
+.Fl f
+option overrides any previous
+.Fl i
+or
+.Fl n
+options.)
 .It Fl i
-Causes
+Cause
 .Nm
 to write a prompt to standard error before moving a file that would
 overwrite an existing file.
-If the response from the standard input begins with the character ``y'',
+If the response from the standard input begins with the character
+.Ql y
+or
+.Ql Y ,
 the move is attempted.
-.El
-The last of any
+(The
+.Fl i
+option overrides any previous
+.Fl f
+or
+.Fl n
+options.)
+.It Fl n
+Do not overwrite an existing file.
+(The
+.Fl n
+option overrides any previous
 .Fl f
 or
 .Fl i
-options is the one which affects
-.Nm Ns 's
-behavior.
+options.)
+.It Fl v
+Cause
+.Nm
+to be verbose, showing files after they are moved.
+.El
 .Pp
 It is an error for either the
 .Ar source
@@ -104,7 +127,7 @@ prompts the user for confirmation as specified for the
 option.
 .Pp
 As the
-.Xr rename  2
+.Xr rename 2
 call does not work across file systems,
 .Nm
 uses
@@ -115,19 +138,29 @@ to accomplish the move.
 The effect is equivalent to:
 .Bd -literal -offset indent
 rm -f destination_path && \e
-\tcp -PRp source_file destination && \e
-\trm -rf source_file
+cp -pRP source_file destination && \e
+rm -rf source_file
 .Ed
-.Pp
-The
-.Nm
-utility exits 0 on success, and >0 if an error occurs.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh SEE ALSO
 .Xr cp 1 ,
+.Xr rm 1 ,
 .Xr symlink 7
+.Sh COMPATIBILITY
+The
+.Fl n
+and
+.Fl v
+options are non-standard and their use in scripts is not recommended.
 .Sh STANDARDS
 The
 .Nm
 utility is expected to be
 .St -p1003.2
 compatible.
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v1 .
diff --git a/mv/mv.c b/mv/mv.c
index a8c08d0708264f31e7c5dbfa442ea1f7196abb6f..994aec2afaf940dc17240cf6ff6d7659e4d0dee5 100644 (file)
--- a/mv/mv.c
+++ b/mv/mv.c
@@ -1,5 +1,3 @@
-/*     $NetBSD: mv.c,v 1.19 1998/07/28 11:41:49 mycroft Exp $  */
-
 /*
  * Copyright (c) 1989, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static char const copyright[] =
+"@(#) Copyright (c) 1989, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)mv.c       8.2 (Berkeley) 4/2/94";
-#else
-__RCSID("$NetBSD: mv.c,v 1.19 1998/07/28 11:41:49 mycroft Exp $");
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/mv/mv.c,v 1.39 2002/07/09 17:45:13 johan Exp $");
 
 #include <sys/param.h>
 #include <sys/time.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
+#include <sys/mount.h>
 
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <locale.h>
+#include <grp.h>
+#include <limits.h>
+#include <paths.h>
+#include <pwd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sysexits.h>
 #include <unistd.h>
-#include <pwd.h>
-#include <grp.h>
 
 #include "pathnames.h"
 
-int fflg, iflg;
-int stdin_ok;
+int fflg, iflg, nflg, vflg;
 
-int    copy __P((char *, char *));
-int    do_move __P((char *, char *));
-int    fastcopy __P((char *, char *, struct stat *));
-void   usage __P((void));
-int    main __P((int, char *[]));
+int    copy(char *, char *);
+int    do_move(char *, char *);
+int    fastcopy(char *, char *, struct stat *);
+void   usage(void);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
-       int baselen, len, rval;
+       size_t baselen, len;
+       int rval;
        char *p, *endp;
        struct stat sb;
+#ifdef __APPLE__
+       struct stat fsb, tsb;
+#endif /* __APPLE__ */
        int ch;
-       char path[MAXPATHLEN + 1];
-
-       (void)setlocale(LC_ALL, "");
+       char path[PATH_MAX];
 
-       while ((ch = getopt(argc, argv, "if")) != -1)
+       while ((ch = getopt(argc, argv, "finv")) != -1)
                switch (ch) {
                case 'i':
-                       fflg = 0;
                        iflg = 1;
+                       fflg = nflg = 0;
                        break;
                case 'f':
-                       iflg = 0;
                        fflg = 1;
+                       iflg = nflg = 0;
+                       break;
+               case 'n':
+                       nflg = 1;
+                       fflg = iflg = 0;
+                       break;
+               case 'v':
+                       vflg = 1;
                        break;
-               case '?':
                default:
                        usage();
                }
@@ -110,8 +115,6 @@ main(argc, argv)
        if (argc < 2)
                usage();
 
-       stdin_ok = isatty(STDIN_FILENO);
-
        /*
         * If the stat on the target fails or the target isn't a directory,
         * try the move.  More than 2 arguments is an error in this case.
@@ -121,114 +124,160 @@ main(argc, argv)
                        usage();
                exit(do_move(argv[0], argv[1]));
        }
+       
+#ifdef __APPLE__
+       if (argc == 2 && !lstat(argv[0], &fsb) && !lstat(argv[1], &tsb) &&
+               fsb.st_ino == tsb.st_ino && fsb.st_dev == tsb.st_dev &&
+               fsb.st_gen == tsb.st_gen) {
+               /*
+                * We appear to be trying to move a directory into itself,
+                * but it may be that the filesystem is case insensitive and
+                * we are trying to rename the directory to a case-variant.
+                * Ignoring trailing slashes, we look for any difference in
+                * the directory names.  If there is a difference we do
+                * the rename, otherwise we fall-thru to the traditional
+                * error.  Note the lstat calls above (rather than stat)
+                * permit the renaming of symlinks to case-variants.
+                */
+               char *q;
+               
+               for (p = argv[0] + strlen(argv[0]); p != argv[0]; ) {
+                       p--;
+                       if (*p != '/')
+                               break;
+               }
+               for (q = argv[1] + strlen(argv[1]); q != argv[1]; ) {
+                       q--;
+                       if (*q != '/')
+                               break;
+               }
+               for ( ; ; p--, q--) {
+                       if (*p != *q)
+                               exit(do_move(argv[0], argv[1]));
+                       if (*p == '/')
+                               break;
+                       if (p == argv[0]) {
+                               if (q == argv[1] || *(q-1) == '/')
+                                       break;
+                               exit(do_move(argv[0], argv[1]));
+                       }
+                       if (q == argv[1]) {
+                               if (p == argv[0] || *(p-1) == '/')
+                                       break;
+                               exit(do_move(argv[0], argv[1]));
+                       }
+               }
+       }
+#endif /* __APPLE__ */
 
        /* It's a directory, move each file into it. */
+       if (strlen(argv[argc - 1]) > sizeof(path) - 1)
+               errx(1, "%s: destination pathname too long", *argv);
        (void)strcpy(path, argv[argc - 1]);
        baselen = strlen(path);
        endp = &path[baselen];
-       *endp++ = '/';
-       ++baselen;
+       if (!baselen || *(endp - 1) != '/') {
+               *endp++ = '/';
+               ++baselen;
+       }
        for (rval = 0; --argc; ++argv) {
-               p = *argv + strlen(*argv) - 1;
-               while (*p == '/' && p != *argv)
-                       *p-- = '\0';
-               if ((p = strrchr(*argv, '/')) == NULL)
-                       p = *argv;
-               else
-                       ++p;
-
-               if ((baselen + (len = strlen(p))) >= MAXPATHLEN) {
+               /*
+                * Find the last component of the source pathname.  It
+                * may have trailing slashes.
+                */
+               p = *argv + strlen(*argv);
+               while (p != *argv && p[-1] == '/')
+                       --p;
+               while (p != *argv && p[-1] != '/')
+                       --p;
+
+               if ((baselen + (len = strlen(p))) >= PATH_MAX) {
                        warnx("%s: destination pathname too long", *argv);
                        rval = 1;
                } else {
-                       memmove(endp, p, len + 1);
+                       memmove(endp, p, (size_t)len + 1);
                        if (do_move(*argv, path))
                                rval = 1;
                }
        }
        exit(rval);
-       /* NOTREACHED */
 }
 
 int
-do_move(from, to)
-       char *from, *to;
+do_move(char *from, char *to)
 {
        struct stat sb;
+       int ask, ch, first;
        char modep[15];
 
        /*
-        * (1)  If the destination path exists, the -f option is not specified
-        *      and either of the following conditions are true:
-        *
-        *      (a) The perimissions of the destination path do not permit
-        *          writing and the standard input is a terminal.
-        *      (b) The -i option is specified.
-        *
-        *      the mv utility shall write a prompt to standard error and
-        *      read a line from standard input.  If the response is not
-        *      affirmative, mv shall do nothing more with the current
-        *      source file...
+        * Check access.  If interactive and file exists, ask user if it
+        * should be replaced.  Otherwise if file exists but isn't writable
+        * make sure the user wants to clobber it.
         */
        if (!fflg && !access(to, F_OK)) {
-               int ask = 1;
-               int ch;
 
-               if (iflg) {
-                       (void)fprintf(stderr, "overwrite %s? ", to);
-               } else if (stdin_ok && access(to, W_OK) && !stat(to, &sb)) {
+               /* prompt only if source exist */
+               if (lstat(from, &sb) == -1) {
+                       warn("%s", from);
+                       return (1);
+               }
+
+#define YESNO "(y/n [n]) "
+               ask = 0;
+               if (nflg) {
+                       if (vflg)
+                               printf("%s not overwritten\n", to);
+                       return (0);
+               } else if (iflg) {
+                       (void)fprintf(stderr, "overwrite %s? %s", to, YESNO);
+                       ask = 1;
+               } else if (access(to, W_OK) && !stat(to, &sb)) {
                        strmode(sb.st_mode, modep);
-                       (void)fprintf(stderr, "override %s%s%s/%s for %s? ",
+                       (void)fprintf(stderr, "override %s%s%s/%s for %s? %s",
                            modep + 1, modep[9] == ' ' ? "" : " ",
-                           user_from_uid(sb.st_uid, 0),
-                           group_from_gid(sb.st_gid, 0), to);
-               } else
-                       ask = 0;
+                           user_from_uid((unsigned long)sb.st_uid, 0),
+                           group_from_gid((unsigned long)sb.st_gid, 0), to, YESNO);
+                       ask = 1;
+               }
                if (ask) {
-                       if ((ch = getchar()) != EOF && ch != '\n')
-                               while (getchar() != '\n');
-                       if (ch != 'y' && ch != 'Y')
+                       first = ch = getchar();
+                       while (ch != '\n' && ch != EOF)
+                               ch = getchar();
+                       if (first != 'y' && first != 'Y') {
+                               (void)fprintf(stderr, "not overwritten\n");
                                return (0);
+                       }
                }
        }
-
-       /*
-        * (2)  If rename() succeeds, mv shall do nothing more with the
-        *      current source file.  If it fails for any other reason than
-        *      EXDEV, mv shall write a diagnostic message to the standard
-        *      error and do nothing more with the current source file.
-        *
-        * (3)  If the destination path exists, and it is a file of type
-        *      directory and source_file is not a file of type directory,
-        *      or it is a file not of type directory, and source file is
-        *      a file of type directory, mv shall write a diagnostic
-        *      message to standard error, and do nothing more with the
-        *      current source file...
-        */
-       if (!rename(from, to))
+       if (!rename(from, to)) {
+               if (vflg)
+                       printf("%s -> %s\n", from, to);
                return (0);
-
-       if (errno != EXDEV) {
-               warn("rename %s to %s", from, to);
-               return (1);
        }
 
-       /*
-        * (4)  If the destination path exists, mv shall attempt to remove it.
-        *      If this fails for any reason, mv shall write a diagnostic
-        *      message to the standard error and do nothing more with the
-        *      current source file...
-        */
-       if (!lstat(to, &sb)) {
-               if ((S_ISDIR(sb.st_mode)) ? rmdir(to) : unlink(to)) {
-                       warn("can't remove %s", to);
+       if (errno == EXDEV) {
+               struct statfs sfs;
+               char path[PATH_MAX];
+
+               /* Can't mv(1) a mount point. */
+               if (realpath(from, path) == NULL) {
+                       warnx("cannot resolve %s: %s", from, path);
                        return (1);
                }
+               if (!statfs(path, &sfs) && !strcmp(path, sfs.f_mntonname)) {
+                       warnx("cannot rename a mount point");
+                       return (1);
+               }
+       } else {
+               warn("rename %s to %s", from, to);
+               return (1);
        }
 
        /*
-        * (5)  The file hierarchy rooted in source_file shall be duplicated
-        *      as a file hierarchy rooted in the destination path...
+        * If rename fails because we're trying to cross devices, and
+        * it's a regular file, do the copy internally; otherwise, use
+        * cp and rm.
         */
        if (lstat(from, &sb)) {
                warn("%s", from);
@@ -239,31 +288,38 @@ do_move(from, to)
 }
 
 int
-fastcopy(from, to, sbp)
-       char *from, *to;
-       struct stat *sbp;
+fastcopy(char *from, char *to, struct stat *sbp)
 {
        struct timeval tval[2];
        static u_int blen;
        static char *bp;
+       mode_t oldmode;
        int nread, from_fd, to_fd;
 
        if ((from_fd = open(from, O_RDONLY, 0)) < 0) {
                warn("%s", from);
                return (1);
        }
-       if ((to_fd =
-           open(to, O_CREAT | O_TRUNC | O_WRONLY, sbp->st_mode)) < 0) {
+       if (blen < sbp->st_blksize) {
+               if (bp != NULL)
+                       free(bp);
+               if ((bp = malloc((size_t)sbp->st_blksize)) == NULL) {
+                       blen = 0;
+                       warnx("malloc failed");
+                       return (1);
+               }
+               blen = sbp->st_blksize;
+       }
+       while ((to_fd =
+           open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)) < 0) {
+               if (errno == EEXIST && unlink(to) == 0)
+                       continue;
                warn("%s", to);
                (void)close(from_fd);
                return (1);
        }
-       if (!blen && !(bp = malloc(blen = sbp->st_blksize))) {
-               warn("%s", "");
-               return (1);
-       }
-       while ((nread = read(from_fd, bp, blen)) > 0)
-               if (write(to_fd, bp, nread) != nread) {
+       while ((nread = read(from_fd, bp, (size_t)blen)) > 0)
+               if (write(to_fd, bp, (size_t)nread) != nread) {
                        warn("%s", to);
                        goto err;
                }
@@ -277,21 +333,36 @@ err:              if (unlink(to))
        }
        (void)close(from_fd);
 
-       TIMESPEC_TO_TIMEVAL(&tval[0], &sbp->st_atimespec);
-       TIMESPEC_TO_TIMEVAL(&tval[1], &sbp->st_mtimespec);
-#ifndef __APPLE__
-       if (futimes(to_fd, tval))
-#else
-       if (utimes(to, tval))
-#endif
-               warn("%s: set times", to);
+       oldmode = sbp->st_mode & ALLPERMS;
        if (fchown(to_fd, sbp->st_uid, sbp->st_gid)) {
-               if (errno != EPERM)
-                       warn("%s: set owner/group", to);
-               sbp->st_mode &= ~(S_ISUID | S_ISGID);
+               warn("%s: set owner/group (was: %lu/%lu)", to,
+                   (u_long)sbp->st_uid, (u_long)sbp->st_gid);
+               if (oldmode & (S_ISUID | S_ISGID)) {
+                       warnx(
+"%s: owner/group changed; clearing suid/sgid (mode was 0%03o)",
+                           to, oldmode);
+                       sbp->st_mode &= ~(S_ISUID | S_ISGID);
+               }
        }
        if (fchmod(to_fd, sbp->st_mode))
-               warn("%s: set mode", to);
+               warn("%s: set mode (was: 0%03o)", to, oldmode);
+       /*
+        * XXX
+        * NFS doesn't support chflags; ignore errors unless there's reason
+        * to believe we're losing bits.  (Note, this still won't be right
+        * if the server supports flags and we were trying to *remove* flags
+        * on a file that we copied, i.e., that we didn't create.)
+        */
+       errno = 0;
+       if (fchflags(to_fd, (u_long)sbp->st_flags))
+               if (errno != EOPNOTSUPP || sbp->st_flags != 0)
+                       warn("%s: set flags (was: 0%07o)", to, sbp->st_flags);
+
+       tval[0].tv_sec = sbp->st_atime;
+       tval[1].tv_sec = sbp->st_mtime;
+       tval[0].tv_usec = tval[1].tv_usec = 0;
+       if (utimes(to, tval))
+               warn("%s: set times", to);
 
        if (close(to_fd)) {
                warn("%s", to);
@@ -302,17 +373,19 @@ err:              if (unlink(to))
                warn("%s: remove", from);
                return (1);
        }
+       if (vflg)
+               printf("%s -> %s\n", from, to);
        return (0);
 }
 
 int
-copy(from, to)
-       char *from, *to;
+copy(char *from, char *to)
 {
        int pid, status;
 
-       if ((pid = vfork()) == 0) {
-               execl(_PATH_CP, "mv", "-PRp", from, to, NULL);
+       if ((pid = fork()) == 0) {
+               execl(_PATH_CP, "mv", vflg ? "-PRpv" : "-PRp", "--", from, to,
+                   (char *)NULL);
                warn("%s", _PATH_CP);
                _exit(1);
        }
@@ -330,7 +403,7 @@ copy(from, to)
                return (1);
        }
        if (!(pid = vfork())) {
-               execl(_PATH_RM, "mv", "-rf", from, NULL);
+               execl(_PATH_RM, "mv", "-rf", "--", from, (char *)NULL);
                warn("%s", _PATH_RM);
                _exit(1);
        }
@@ -351,11 +424,11 @@ copy(from, to)
 }
 
 void
-usage()
+usage(void)
 {
 
-       (void)fprintf(stderr, "usage: mv [-fi] source target\n");
-       (void)fprintf(stderr, "       mv [-fi] source ... directory\n");
-       exit(1);
-       /* NOTREACHED */
+       (void)fprintf(stderr, "%s\n%s\n",
+                     "usage: mv [-f | -i | -n] [-v] source target",
+                     "       mv [-f | -i | -n] [-v] source ... directory");
+       exit(EX_USAGE);
 }
index c612fd0278e30d9b4c29d99a76cf48551c5516a8..514678ff264ea9d15f5c392df4baa69a464d29c0 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: pathnames.h,v 1.6 1995/03/21 09:06:55 cgd Exp $        */
-
 /*
  * Copyright (c) 1989, 1993
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  *
  *     @(#)pathnames.h 8.1 (Berkeley) 5/31/93
+ * $FreeBSD: src/bin/mv/pathnames.h,v 1.6 2002/05/17 11:38:48 jmallett Exp $
  */
 
 #define        _PATH_RM        "/bin/rm"
-#define        _PATH_CP        "/bin/cp"
+#ifdef __APPLE__
+#define _PATH_CP       "/bin/cp"
+#endif /* __APPLE__ */
index ebe65d95a9946a4da20fa8cb37f2e5aa72207867..59d1825df4b09874af09b7cc6cefb88284ca9337 100644 (file)
@@ -19,8 +19,7 @@ CFILES = ar_io.c ar_subs.c buf_subs.c cache.c cpio.c file_subs.c\
          ftree.c gen_subs.c getoldopt.c options.c pat_rep.c pax.c\
          sel_subs.c tables.c tar.c tty_subs.c
 
-OTHERSRCS = Makefile Makefile.preamble Makefile.postamble pax.1 cpio.1\
-            tar.1
+OTHERSRCS = Makefile Makefile.preamble Makefile.postamble pax.1 cpio.1
 
 
 MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
index 3879a872a164c064de3a7f394ac0970aa718bbb4..43c51eca6530181f7c5d57f1a7ef5c5e86244768 100644 (file)
@@ -2,4 +2,3 @@ include $(CoreOSMakefiles)/ProjectBuilder/Makefile.Postamble.Common
 
 after_install::
        $(LINKPRODUCT) $(DSTROOT)$(USRBINDIR)/cpio
-       $(LINKPRODUCT) $(DSTROOT)$(USRBINDIR)/tar
index 11107f6fc2d68d1bd872658df2fd02fe31b4bcf1..834db59ccbe26323bd4530ee9f26252fdb7dd472 100644 (file)
@@ -32,7 +32,7 @@
             tar.c, 
             tty_subs.c
         ); 
-        OTHER_SOURCES = (Makefile, Makefile.preamble, Makefile.postamble, pax.1, cpio.1, tar.1); 
+        OTHER_SOURCES = (Makefile, Makefile.preamble, Makefile.postamble, pax.1, cpio.1); 
     }; 
     LANGUAGE = English; 
     LOCALIZABLE_FILES = {}; 
diff --git a/pax/tar.1 b/pax/tar.1
deleted file mode 100644 (file)
index 9e31fb2..0000000
--- a/pax/tar.1
+++ /dev/null
@@ -1,239 +0,0 @@
-.\"
-.\" Copyright (c) 1996 SigmaSoft, Th. Lockert
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"      This product includes software developed by SigmaSoft, Th. Lockert.
-.\" 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 ``AS IS'' AND ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-.\"
-.\"    $OpenBSD: tar.1,v 1.13 1997/05/29 15:47:19 millert Exp $
-.\"
-.Dd June 11, 1996
-.Dt TAR 1
-.Os
-.Sh NAME
-.Nm tar
-.Nd tape archiver
-.Sh SYNOPSIS
-.Nm
-.No [-]{crtux}[befhmopvwzHLPXZ014578]
-.Op Ar archive
-.Op Ar blocksize
-.\" XXX how to do this right?
-.No [-C
-.Ar directory
-.No ]
-.No [-s
-.Ar replstr
-.No ]
-.Ar file1
-.Op Ar file2...
-.Sh DESCRIPTION
-The
-.Nm
-command creates, adds files to, or extracts files from an
-archive file in \*Qtar\*U format.  A tar archive is often
-stored on a magnetic tape, but can be a floppy or a regular
-disk file.
-.Pp
-One of the following flags must be present:
-.Bl -tag -width Ar
-.It Fl c
-Create new archive, or overwrite an existing archive,
-adding the specified files to it.
-.It Fl r
-Append the named new files to existing archive.  Note that
-this will only work on media on which an end-of-file mark
-can be overwritten.
-.It Fl t
-List contents of archive.  If any files are named on the
-command line, only those files will be listed.
-.It Fl u
-Alias for
-.Fl r
-.It Fl x
-Extract files from archive.  If any files are named on the
-command line, only those files will be extracted from the
-archive.  If more than one copy of a file exists in the
-archive, later copies will overwrite earlier copies during
-extration.
-.El
-.Pp
-In addition to the flags mentioned above, any of the following
-flags may be used:
-.Bl -tag -width Ar
-.It Fl b Ar "blocking factor"
-Set blocking factor to use for the archive,
-.Nm
-uses 512 byte blocks.  The default is 20, the maximum is 126.
-Archives with a blocking factor larger 63 violate the
-.Tn POSIX
-standard and will not be portable to all systems.
-.It Fl e
-Stop after first error.
-.It Fl f Ar archive
-Filename where the archive is stored.  Defaults to
-.Pa /dev/rst0
-.It Fl h
-Follow symbolic links as if they were normal files
-or directories.
-.It Fl m
-Do not preserve modification time.
-.It Fl O
-Write old-style (non-POSIX) archives.
-.It Fl o
-Don't write directory information that the older (V7) style
-.Nm
-is unable to decode.
-This implies the
-.Fl O
-flag.
-.It Fl p
-Preserve user id, group id, file mode, access and modification
-times if possible.  The user id and group id will only be set
-if the user is the superuser (unless these values correspond
-to the user's user and group ids).
-.It Fl s Ar replstr
-Modify the file or archive member names specified by the
-.Ar pattern
-or
-.Ar file
-operands according to the substitution expression
-.Ar replstr ,
-using the syntax of the
-.Xr ed 1
-utility regular expressions.
-The format of these regular expressions are:
-.Dl /old/new/[gp]
-As in
-.Xr ed 1 ,
-.Cm old
-is a basic regular expression and
-.Cm new
-can contain an ampersand (&), \\n (where n is a digit) back-references,
-or subexpression matching.
-The
-.Cm old
-string may also contain
-.Dv <newline>
-characters.
-Any non-null character can be used as a delimiter (/ is shown here).
-Multiple
-.Fl s
-expressions can be specified.
-The expressions are applied in the order they are specified on the
-command line, terminating with the first successful substitution.
-The optional trailing
-.Cm g
-continues to apply the substitution expression to the pathname substring
-which starts with the first character following the end of the last successful
-substitution. The first unsuccessful substitution stops the operation of the
-.Cm g
-option.
-The optional trailing
-.Cm p
-will cause the final result of a successful substitution to be written to
-.Dv standard error
-in the following format:
-.Dl <original pathname> >> <new pathname>
-File or archive member names that substitute to the empty string
-are not selected and will be skipped.
-.It Fl v
-Verbose operation mode.
-.It Fl w
-Interactively rename files.  This option causes
-.Nm
-to prompt the user for the filename to use when storing or
-extracting files in an archive.
-.It Fl z
-Compress archive using gzip.
-.It Fl C Ar directory
-This is a positional argument which sets the working directory for the
-following files.  When extracting, files will be extracted into
-the specified directory; when creating, the specified files will be matched
-from the directory.
-.It Fl H
-Follow symlinks given on command line only.
-.It Fl L
-Follow all symlinks.
-.It Fl P
-Do not strip leading slashes (``/'') from pathnames.
-The default is to strip leading slashes.
-.It Fl X
-Do not cross mount points in the file system.
-.It Fl Z
-Compress archive using compress.
-.El
-.Pp
-The options
-.Op Fl 014578
-can be used to select one of the compiled-in backup devices,
-.Pa /dev/rstN .
-.Sh FILES
-.Bl -tag -width "/dev/rst0"
-.It Pa /dev/rst0
-The default archive name
-.El
-.Sh SEE ALSO
-.Xr pax 1 ,
-.Xr cpio 1
-.Sh AUTHOR
-Keith Muller at the University of California, San Diego
-.Sh ERRORS
-.Nm
-will exit with one of the following values:
-.Bl -tag -width 2n
-.It 0
-All files were processed successfully.
-.It 1
-An error occured.
-.El
-.Pp
-Whenever
-.Nm
-cannot create a file or a link when extracting an archive or cannot
-find a file while writing an archive, or cannot preserve the user
-ID, group ID, file mode or access and modification times when the
-.Fl p
-options is specified, a diagnostic message is written to standard
-error and a non-zero exit value will be returned, but processing
-will continue.  In the case where
-.Nm
-cannot create a link to a file,
-.Nm
-will not create a second copy of the file.
-.Pp
-If the extraction of a file from an archive is prematurely terminated
-by a signal or error,
-.Nm
-may have only partially extracted the file the user wanted.
-Additionally, the file modes of extracted files and directories may
-have incorrect file bits, and the modification and access times may
-be wrong.
-.Pp
-If the creation of an archive is prematurely terminated by a signal
-or error,
-.Nm
-may have only partially created the archive which may violate the
-specific archive format specification.
diff --git a/rm/rm.1 b/rm/rm.1
index ce1e8c7843369a5e800a0a19bb8d63087532a32c..c40f8a7ba5c4637c9261ba70176c76571dc35dd8 100644 (file)
--- a/rm/rm.1
+++ b/rm/rm.1
@@ -168,9 +168,7 @@ path reference.  For example:
 The
 .Fl P
 option assumes that the underlying file system is a fixed-block file
-system.
-UFS is a fixed-block file system, LFS is not.
-In addition, only regular files are overwritten, other types of files
+system.  In addition, only regular files are overwritten, other types of files
 are not.
 .Sh COMPATIBILITY
 The
diff --git a/rm/rm.c b/rm/rm.c
index 75ae2d8c59aaecce8027c5a55502267a45c1ed19..63666a9ccd145903cd691ce83a25660a7e8464d8 100644 (file)
--- a/rm/rm.c
+++ b/rm/rm.c
@@ -77,8 +77,6 @@ void  usage __P((void));
 char * flags_to_string(u_long, char *);
 #define fflagstostr(x) flags_to_string((x), NULL)
 
-/* We're missing this prototype */
-int undelete __P((char *));
 #endif
 
 /*
index 2d67c7a9509c0cd6f8bd729f52bec166d269647b..577637a51d9738deee2b4e21735faf3f3376ce90 100644 (file)
@@ -1,5 +1,3 @@
-.\"    $NetBSD: rmdir.1,v 1.11 1997/10/20 08:53:22 enami Exp $
-.\"
 .\" Copyright (c) 1990, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -35,6 +33,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"    @(#)rmdir.1     8.1 (Berkeley) 5/31/93
+.\" $FreeBSD: src/bin/rmdir/rmdir.1,v 1.9 2000/11/20 11:39:40 ru Exp $
 .\"
 .Dd May 31, 1993
 .Dt RMDIR 1
@@ -47,7 +46,9 @@
 .Op Fl p
 .Ar directory ...
 .Sh DESCRIPTION
-The rmdir utility removes the directory entry specified by
+The
+.Nm
+utility removes the directory entry specified by
 each
 .Ar directory
 argument, provided it is empty.
@@ -61,7 +62,7 @@ is empty when
 tries to remove it.
 .Pp
 The following option is available:
-.Bl -tag -width Ds
+.Bl -tag -width indent
 .It Fl p
 Each
 .Ar directory
@@ -89,6 +90,11 @@ An error occurred.
 .Sh STANDARDS
 The
 .Nm
-utility is expected to be
+command is expected to be
 .St -p1003.2
 compatible.
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v1 .
index 8f61e937cdb4486dbcb050bc103dda744e549e4c..a362efa1b43ba513e4ec136dc18a63fbe3c0df34 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: rmdir.c,v 1.16 1998/07/28 05:31:27 mycroft Exp $       */
-
 /*-
  * Copyright (c) 1992, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1992, 1993, 1994\n\
-       The Regents of the University of California.  All rights reserved.\n");
+static char const copyright[] =
+"@(#) Copyright (c) 1992, 1993, 1994\n\
+       The Regents of the University of California.  All rights reserved.\n";
 #endif /* not lint */
 
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)rmdir.c    8.3 (Berkeley) 4/2/94";
-#else
-__RCSID("$NetBSD: rmdir.c,v 1.16 1998/07/28 05:31:27 mycroft Exp $");
 #endif
 #endif /* not lint */
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD: src/bin/rmdir/rmdir.c,v 1.13 2002/06/30 05:15:03 obrien Exp $");
 
 #include <err.h>
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <locale.h>
 #include <unistd.h>
 
-int rm_path __P((char *));
-void usage __P((void));
-int main __P((int, char *[]));
+int rm_path(char *);
+void usage(void);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        int ch, errors;
        int pflag;
 
-       (void)setlocale(LC_ALL, "");
-
        pflag = 0;
        while ((ch = getopt(argc, argv, "p")) != -1)
                switch(ch) {
@@ -86,14 +78,6 @@ main(argc, argv)
                usage();
 
        for (errors = 0; *argv; argv++) {
-               char *p;
-
-               /* Delete trailing slashes, per POSIX. */
-               p = *argv + strlen(*argv);
-               while (--p > *argv && *p == '/')
-                       ;
-               *++p = '\0';
-
                if (rmdir(*argv) < 0) {
                        warn("%s", *argv);
                        errors = 1;
@@ -102,15 +86,17 @@ main(argc, argv)
        }
 
        exit(errors);
-       /* NOTREACHED */
 }
 
 int
-rm_path(path)
-       char *path;
+rm_path(char *path)
 {
        char *p;
 
+       p = path + strlen(path);
+       while (--p > path && *p == '/')
+               ;
+       *++p = '\0';
        while ((p = strrchr(path, '/')) != NULL) {
                /* Delete trailing slashes. */
                while (--p > path && *p == '/')
@@ -127,10 +113,9 @@ rm_path(path)
 }
 
 void
-usage()
+usage(void)
 {
 
        (void)fprintf(stderr, "usage: rmdir [-p] directory ...\n");
        exit(1);
-       /* NOTREACHED */
 }
index 969ee2259a25f5550c31cc4a6beab594bcd3fea6..e15f9a6ad09f46a0693b7ebe0d78060913cd6b2a 100644 (file)
@@ -1,5 +1,3 @@
-.\"    $NetBSD: touch.1,v 1.13 1998/01/20 21:18:25 mycroft Exp $
-.\"
 .\" Copyright (c) 1991, 1993
 .\"    The Regents of the University of California.  All rights reserved.
 .\"
@@ -35,6 +33,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)touch.1    8.3 (Berkeley) 4/28/95
+.\" $FreeBSD: src/usr.bin/touch/touch.1,v 1.11 2001/09/24 17:42:37 obrien Exp $
 .\"
 .Dd April 28, 1995
 .Dt TOUCH 1
@@ -47,7 +46,7 @@
 .Op Fl acfhm
 .Op Fl r Ar file
 .Op Fl t Ar [[CC]YY]MMDDhhmm[.SS]
-.Ar file ...
+.Ar
 .Sh DESCRIPTION
 The
 .Nm
@@ -72,11 +71,13 @@ No error messages are displayed and the exit value is not affected.
 Attempt to force the update, even if the file permissions do not
 currently permit it.
 .It Fl h
-If
-.Ar file
-is a symbolic link, access and/or modification time of the link is changed.
-This option implies
-.Fl c .
+If the file is a symbolic link, change the times of the link
+itself rather than the file that the link points to.
+Note that
+.Fl h
+implies
+.Fl c
+and thus will not create any new files.
 .It Fl m
 Change the modification time of the file.
 The access time of the file is not changed unless the
@@ -111,7 +112,7 @@ value of 20 is used.
 .It Ar MM
 The month of the year, from 1 to 12.
 .It Ar DD
-The day of the month, from 1 to 31.
+the day of the month, from 1 to 31.
 .It Ar hh
 The hour of the day, from 0 to 23.
 .It Ar mm
@@ -130,15 +131,13 @@ If the
 .Dq SS
 letter pair is not specified, the value defaults to 0.
 .El
-.Pp
-The
-.Nm
-utility exits 0 on success, and >0 if an error occurs.
+.Sh DIAGNOSTICS
+.Ex -std
 .Sh SEE ALSO
 .Xr utimes 2
 .Sh COMPATIBILITY
 The obsolescent form of
-.Nm touch,
+.Nm ,
 where a time format is specified as the first argument, is supported.
 When no
 .Fl r
@@ -160,18 +159,16 @@ letter pairs are treated as their counterparts specified to the
 option.
 If the
 .Dq YY
-letter pair is in the range 69 to 99, the year is set to 1969 to 1999,
-otherwise, the year is set in the 2000's.
+letter pair is in the range 39 to 99, the year is set to 1939 to 1999,
+otherwise, the year is set in the 21st century.
+.Sh HISTORY
+A
+.Nm
+utility appeared in
+.At v7 .
 .Sh STANDARDS
 The
 .Nm
 utility is expected to be a superset of the
 .St -p1003.2
 specification.
-.Sh HISTORY
-A
-.Nm
-utility appeared in
-.At v7 .
-.Sh BUGS
-A symbolic link can't be a reference file of access and/or modification time.
index c7af797de2e043f8009cec1bc3d223946c1c75e5..5436285c4bd73cb4fac4682c5532338ccdf9e3e5 100644 (file)
@@ -1,5 +1,3 @@
-/*     $NetBSD: touch.c,v 1.22 1998/08/25 20:59:42 ross Exp $  */
-
 /*
  * Copyright (c) 1993
  *     The Regents of the University of California.  All rights reserved.
  */
 
 #include <sys/cdefs.h>
+
+__RCSID("$FreeBSD: src/usr.bin/touch/touch.c,v 1.20 2002/09/04 23:29:07 dwmalone Exp $");
+
 #ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1993\n\
-       The Regents of the University of California.  All rights reserved.\n");
-#endif /* not lint */
+static const char copyright[] =
+"@(#) Copyright (c) 1993\n\
+       The Regents of the University of California.  All rights reserved.\n";
+#endif
 
 #ifndef lint
-#if 0
-static char sccsid[] = "@(#)touch.c    8.2 (Berkeley) 4/28/95";
+static const char sccsid[] = "@(#)touch.c      8.1 (Berkeley) 6/6/93";
 #endif
-__RCSID("$NetBSD: touch.c,v 1.22 1998/08/25 20:59:42 ross Exp $");
-#endif /* not lint */
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -56,33 +55,28 @@ __RCSID("$NetBSD: touch.c,v 1.22 1998/08/25 20:59:42 ross Exp $");
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <locale.h>
 #include <time.h>
-#include <tzfile.h>
 #include <unistd.h>
 
-int    main __P((int, char **));
-int    rw __P((char *, struct stat *, int));
-void   stime_arg1 __P((char *, struct timeval *));
-void   stime_arg2 __P((char *, int, struct timeval *));
-void   stime_file __P((char *, struct timeval *));
-void   usage __P((void));
+int    rw(char *, struct stat *, int);
+void   stime_arg1(char *, struct timeval *);
+void   stime_arg2(char *, int, struct timeval *);
+void   stime_file(char *, struct timeval *);
+void   usage(void);
 
 int
-main(argc, argv)
-       int argc;
-       char *argv[];
+main(int argc, char *argv[])
 {
        struct stat sb;
        struct timeval tv[2];
-       int aflag, cflag, fflag, hflag, mflag, ch, fd, len, rval, timeset;
+       int (*stat_f)(const char *, struct stat *);
+       int (*utimes_f)(const char *, const struct timeval *);
+       int aflag, cflag, fflag, mflag, ch, fd, len, rval, timeset;
        char *p;
-       int (*change_file_times) __P((const char *, const struct timeval *));
-       int (*get_file_status) __P((const char *, struct stat *));
 
-       setlocale(LC_ALL, "");
-
-       aflag = cflag = fflag = hflag = mflag = timeset = 0;
+       aflag = cflag = fflag = mflag = timeset = 0;
+       stat_f = stat;
+       utimes_f = utimes;
        if (gettimeofday(&tv[0], NULL))
                err(1, "gettimeofday");
 
@@ -99,9 +93,11 @@ main(argc, argv)
                        break;
 #ifndef __APPLE__
                case 'h':
-                       hflag = 1;
+                       cflag = 1;
+                       stat_f = lstat;
+                       utimes_f = lutimes;
                        break;
-#endif
+#endif /* __APPLE__ */
                case 'm':
                        mflag = 1;
                        break;
@@ -124,19 +120,6 @@ main(argc, argv)
        if (aflag == 0 && mflag == 0)
                aflag = mflag = 1;
 
-#ifndef __APPLE__
-       if (hflag) {
-               cflag = 1;              /* Don't create new file */
-               change_file_times = lutimes;
-               get_file_status = lstat;
-       } else {
-#endif
-               change_file_times = utimes;
-               get_file_status = stat;
-#ifndef __APPLE__
-       }
-#endif
-
        /*
         * If no -r or -t flag, at least two operands, the first of which
         * is an 8 or 10 digit number, use the obsolete time specification.
@@ -159,7 +142,7 @@ main(argc, argv)
 
        for (rval = 0; *argv; ++argv) {
                /* See if the file exists. */
-               if ((*get_file_status)(*argv, &sb)) {
+               if (stat_f(*argv, &sb) != 0) {
                        if (!cflag) {
                                /* Create the file. */
                                fd = open(*argv,
@@ -176,13 +159,14 @@ main(argc, argv)
                        } else
                                continue;
                }
+
                if (!aflag)
                        TIMESPEC_TO_TIMEVAL(&tv[0], &sb.st_atimespec);
                if (!mflag)
                        TIMESPEC_TO_TIMEVAL(&tv[1], &sb.st_mtimespec);
 
                /* Try utimes(2). */
-               if (!(*change_file_times)(*argv, tv))
+               if (!utimes_f(*argv, tv))
                        continue;
 
                /* If the user specified a time, nothing else we can do. */
@@ -197,7 +181,7 @@ main(argc, argv)
                 * The permission checks are different, too, in that the
                 * ability to write the file is sufficient.  Take a shot.
                 */
-                if (!(*change_file_times)(*argv, NULL))
+                if (!utimes_f(*argv, NULL))
                        continue;
 
                /* Try reading/writing. */
@@ -210,20 +194,18 @@ main(argc, argv)
        exit(rval);
 }
 
-#define        ATOI2(s)        ((s) += 2, ((s)[-2] - '0') * 10 + ((s)[-1] - '0'))
+#define        ATOI2(ar)       ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
 
 void
-stime_arg1(arg, tvp)
-       char *arg;
-       struct timeval *tvp;
+stime_arg1(char *arg, struct timeval *tvp)
 {
+       time_t now;
        struct tm *t;
-       time_t tmptime;
        int yearset;
        char *p;
                                        /* Start with the current time. */
-       tmptime = tvp[0].tv_sec;
-       if ((t = localtime(&tmptime)) == NULL)
+       now = tvp[0].tv_sec;
+       if ((t = localtime(&now)) == NULL)
                err(1, "localtime");
                                        /* [[CC]YY]MMDDhhmm[.SS] */
        if ((p = strchr(arg, '.')) == NULL)
@@ -234,35 +216,32 @@ stime_arg1(arg, tvp)
                *p++ = '\0';
                t->tm_sec = ATOI2(p);
        }
-               
+
        yearset = 0;
-       switch (strlen(arg)) {
+       switch(strlen(arg)) {
        case 12:                        /* CCYYMMDDhhmm */
-               t->tm_year = ATOI2(arg) * 100 - TM_YEAR_BASE;
+               t->tm_year = ATOI2(arg);
+               t->tm_year *= 100;
                yearset = 1;
-               /* FALLTHOUGH */
+               /* FALLTHROUGH */
        case 10:                        /* YYMMDDhhmm */
                if (yearset) {
-                       t->tm_year += ATOI2(arg);
+                       yearset = ATOI2(arg);
+                       t->tm_year += yearset;
                } else {
                        yearset = ATOI2(arg);
                        if (yearset < 69)
-                               t->tm_year = yearset + 2000 - TM_YEAR_BASE;
+                               t->tm_year = yearset + 2000;
                        else
-                               t->tm_year = yearset + 1900 - TM_YEAR_BASE;
+                               t->tm_year = yearset + 1900;
                }
+               t->tm_year -= 1900;     /* Convert to UNIX time. */
                /* FALLTHROUGH */
        case 8:                         /* MMDDhhmm */
                t->tm_mon = ATOI2(arg);
                --t->tm_mon;            /* Convert from 01-12 to 00-11 */
-               /* FALLTHROUGH */
-       case 6:
                t->tm_mday = ATOI2(arg);
-               /* FALLTHROUGH */
-       case 4:
                t->tm_hour = ATOI2(arg);
-               /* FALLTHROUGH */
-       case 2:
                t->tm_min = ATOI2(arg);
                break;
        default:
@@ -279,16 +258,13 @@ terr:             errx(1,
 }
 
 void
-stime_arg2(arg, year, tvp)
-       char *arg;
-       int year;
-       struct timeval *tvp;
+stime_arg2(char *arg, int year, struct timeval *tvp)
 {
+       time_t now;
        struct tm *t;
-       time_t tmptime;
                                        /* Start with the current time. */
-       tmptime = tvp[0].tv_sec;
-       if ((t = localtime(&tmptime)) == NULL)
+       now = tvp[0].tv_sec;
+       if ((t = localtime(&now)) == NULL)
                err(1, "localtime");
 
        t->tm_mon = ATOI2(arg);         /* MMDDhhmm[yy] */
@@ -297,11 +273,9 @@ stime_arg2(arg, year, tvp)
        t->tm_hour = ATOI2(arg);
        t->tm_min = ATOI2(arg);
        if (year) {
-               year = ATOI2(arg);
-               if (year < 69)
-                       t->tm_year = year + 2000 - TM_YEAR_BASE;
-               else
-                       t->tm_year = year + 1900 - TM_YEAR_BASE;
+               t->tm_year = ATOI2(arg);
+               if (t->tm_year < 39)    /* support 2000-2038 not 1902-1969 */
+                       t->tm_year += 100;
        }
 
        t->tm_isdst = -1;               /* Figure out DST. */
@@ -314,23 +288,18 @@ stime_arg2(arg, year, tvp)
 }
 
 void
-stime_file(fname, tvp)
-       char *fname;
-       struct timeval *tvp;
+stime_file(char *fname, struct timeval *tvp)
 {
        struct stat sb;
 
        if (stat(fname, &sb))
                err(1, "%s", fname);
-       TIMESPEC_TO_TIMEVAL(&tvp[0], &sb.st_atimespec);
-       TIMESPEC_TO_TIMEVAL(&tvp[1], &sb.st_mtimespec);
+       TIMESPEC_TO_TIMEVAL(tvp, &sb.st_atimespec);
+       TIMESPEC_TO_TIMEVAL(tvp + 1, &sb.st_mtimespec);
 }
 
 int
-rw(fname, sbp, force)
-       char *fname;
-       struct stat *sbp;
-       int force;
+rw(char *fname, struct stat *sbp, int force)
 {
        int fd, needed_chmod, rval;
        u_char byte;
@@ -378,15 +347,9 @@ err:                       rval = 1;
        return (rval);
 }
 
-__dead void
-usage()
+void
+usage(void)
 {
-#ifndef __APPLE__
-       (void)fprintf(stderr,
-           "usage: touch [-acfhm] [-r file] [-t time] file ...\n");
-#else
-       (void)fprintf(stderr,
-           "usage: touch [-acfm] [-r file] [-t time] file ...\n");
-#endif
+       (void)fprintf(stderr, "usage: touch [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...\n");
        exit(1);
 }