]> Dogcows Code - chaz/tar/commitdiff
Remove files that were removed in CVS, but reappeared after migration to Git
authorSergey Poznyakoff <gray@gnu.org.ua>
Thu, 18 Jun 2009 11:24:50 +0000 (14:24 +0300)
committerSergey Poznyakoff <gray@gnu.org.ua>
Thu, 18 Jun 2009 11:24:50 +0000 (14:24 +0300)
17 files changed:
lib/modechange.c [deleted file]
src/ansi2knr.1 [deleted file]
src/ansi2knr.c [deleted file]
src/arith.c [deleted file]
src/diffarch.c [deleted file]
src/getoldopt.c [deleted file]
src/gnu.c [deleted file]
src/makefile.pc [deleted file]
src/msd_dir.c [deleted file]
src/msd_dir.h [deleted file]
src/open3.c [deleted file]
src/open3.h [deleted file]
src/port.c [deleted file]
src/port.h [deleted file]
src/read_ffs.c [deleted file]
src/tcexparg.c [deleted file]
src/testpad.c [deleted file]

diff --git a/lib/modechange.c b/lib/modechange.c
deleted file mode 100644 (file)
index ef484c0..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-/* modechange.c -- file mode manipulation
-   Copyright (C) 1989, 1990, 1997, 1998, 1999 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-/* Written by David MacKenzie <djm@ai.mit.edu> */
-
-/* The ASCII mode string is compiled into a linked list of `struct
-   modechange', which can then be applied to each file to be changed.
-   We do this instead of re-parsing the ASCII string for each file
-   because the compiled form requires less computation to use; when
-   changing the mode of many files, this probably results in a
-   performance gain. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "modechange.h"
-#include <sys/stat.h>
-#include "xstrtol.h"
-
-#if STDC_HEADERS
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
-
-#ifndef NULL
-# define NULL 0
-#endif
-
-#if STAT_MACROS_BROKEN
-# undef S_ISDIR
-#endif
-
-#if !defined(S_ISDIR) && defined(S_IFDIR)
-# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#endif
-
-#ifndef S_ISUID
-# define S_ISUID 04000
-#endif
-#ifndef S_ISGID
-# define S_ISGID 04000
-#endif
-#ifndef S_ISVTX
-# define S_ISVTX 01000
-#endif
-#ifndef S_IRUSR
-# define S_IRUSR 0400
-#endif
-#ifndef S_IWUSR
-# define S_IWUSR 0200
-#endif
-#ifndef S_IXUSR
-# define S_IXUSR 0100
-#endif
-#ifndef S_IRGRP
-# define S_IRGRP 0040
-#endif
-#ifndef S_IWGRP
-# define S_IWGRP 0020
-#endif
-#ifndef S_IXGRP
-# define S_IXGRP 0010
-#endif
-#ifndef S_IROTH
-# define S_IROTH 0004
-#endif
-#ifndef S_IWOTH
-# define S_IWOTH 0002
-#endif
-#ifndef S_IXOTH
-# define S_IXOTH 0001
-#endif
-#ifndef S_IRWXU
-# define S_IRWXU 0700
-#endif
-#ifndef S_IRWXG
-# define S_IRWXG 0070
-#endif
-#ifndef S_IRWXO
-# define S_IRWXO 0007
-#endif
-
-/* All the mode bits that can be affected by chmod.  */
-#define CHMOD_MODE_BITS \
-  (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
-
-/* Return newly allocated memory to hold one element of type TYPE. */
-#define talloc(type) ((type *) malloc (sizeof (type)))
-
-/* Create a mode_change entry with the specified `=ddd'-style
-   mode change operation, where NEW_MODE is `ddd'.  Return the
-   new entry, or NULL upon failure.  */
-
-static struct mode_change *
-make_node_op_equals (mode_t new_mode)
-{
-  struct mode_change *p;
-  p = talloc (struct mode_change);
-  if (p == NULL)
-    return p;
-  p->next = NULL;
-  p->op = '=';
-  p->flags = 0;
-  p->value = new_mode;
-  p->affected = CHMOD_MODE_BITS;       /* Affect all permissions. */
-  return p;
-}
-
-/* Append entry E to the end of the link list with the specified
-   HEAD and TAIL.  */
-
-static void
-mode_append_entry (struct mode_change **head,
-                  struct mode_change **tail,
-                  struct mode_change *e)
-{
-  if (*head == NULL)
-    *head = *tail = e;
-  else
-    {
-      (*tail)->next = e;
-      *tail = e;
-    }
-}
-
-/* Return a linked list of file mode change operations created from
-   MODE_STRING, an ASCII string that contains either an octal number
-   specifying an absolute mode, or symbolic mode change operations with
-   the form:
-   [ugoa...][[+-=][rwxXstugo...]...][,...]
-   MASKED_OPS is a bitmask indicating which symbolic mode operators (=+-)
-   should not affect bits set in the umask when no users are given.
-   Operators not selected in MASKED_OPS ignore the umask.
-
-   Return MODE_INVALID if `mode_string' does not contain a valid
-   representation of file mode change operations;
-   return MODE_MEMORY_EXHAUSTED if there is insufficient memory. */
-
-struct mode_change *
-mode_compile (const char *mode_string, unsigned int masked_ops)
-{
-  struct mode_change *head;    /* First element of the linked list. */
-  struct mode_change *tail;    /* An element of the linked list. */
-  uintmax_t mode_value;                /* The mode value, if octal.  */
-  char *string_end;            /* Pointer to end of parsed value.  */
-  mode_t umask_value;          /* The umask value (surprise). */
-
-  head = NULL;
-#ifdef lint
-  tail = NULL;
-#endif
-
-  if (xstrtoumax (mode_string, &string_end, 8, &mode_value, "") == LONGINT_OK)
-    {
-      struct mode_change *p;
-      if (mode_value != (mode_value & CHMOD_MODE_BITS))
-       return MODE_INVALID;
-      p = make_node_op_equals ((mode_t) mode_value);
-      if (p == NULL)
-       return MODE_MEMORY_EXHAUSTED;
-      mode_append_entry (&head, &tail, p);
-      return head;
-    }
-
-  umask_value = umask (0);
-  umask (umask_value);         /* Restore the old value. */
-  --mode_string;
-
-  /* One loop iteration for each "ugoa...=+-rwxXstugo...[=+-rwxXstugo...]". */
-  do
-    {
-      /* Which bits in the mode are operated on. */
-      mode_t affected_bits = 0;
-      /* `affected_bits' modified by umask. */
-      mode_t affected_masked;
-      /* Operators to actually use umask on. */
-      unsigned ops_to_mask = 0;
-
-      int who_specified_p;
-
-      affected_bits = 0;
-      ops_to_mask = 0;
-      /* Turn on all the bits in `affected_bits' for each group given. */
-      for (++mode_string;; ++mode_string)
-       switch (*mode_string)
-         {
-         case 'u':
-           affected_bits |= S_ISUID | S_IRWXU;
-           break;
-         case 'g':
-           affected_bits |= S_ISGID | S_IRWXG;
-           break;
-         case 'o':
-           affected_bits |= S_ISVTX | S_IRWXO;
-           break;
-         case 'a':
-           affected_bits |= CHMOD_MODE_BITS;
-           break;
-         default:
-           goto no_more_affected;
-         }
-
-    no_more_affected:
-      /* If none specified, affect all bits, except perhaps those
-        set in the umask. */
-      if (affected_bits)
-       who_specified_p = 1;
-      else
-       {
-         who_specified_p = 0;
-         affected_bits = CHMOD_MODE_BITS;
-         ops_to_mask = masked_ops;
-       }
-
-      while (*mode_string == '=' || *mode_string == '+' || *mode_string == '-')
-       {
-         struct mode_change *change = talloc (struct mode_change);
-         if (change == NULL)
-           {
-             mode_free (head);
-             return MODE_MEMORY_EXHAUSTED;
-           }
-
-         change->next = NULL;
-         change->op = *mode_string;    /* One of "=+-". */
-         affected_masked = affected_bits;
-
-         /* Per the Single Unix Spec, if `who' is not specified and the
-            `=' operator is used, then clear all the bits first.  */
-         if (!who_specified_p &&
-             ops_to_mask & (*mode_string == '=' ? MODE_MASK_EQUALS : 0))
-           {
-             struct mode_change *p = make_node_op_equals (0);
-             if (p == NULL)
-               return MODE_MEMORY_EXHAUSTED;
-             mode_append_entry (&head, &tail, p);
-           }
-
-         if (ops_to_mask & (*mode_string == '=' ? MODE_MASK_EQUALS
-                            : *mode_string == '+' ? MODE_MASK_PLUS
-                            : MODE_MASK_MINUS))
-           affected_masked &= ~umask_value;
-         change->affected = affected_masked;
-         change->value = 0;
-         change->flags = 0;
-
-         /* Add the element to the tail of the list, so the operations
-            are performed in the correct order. */
-         mode_append_entry (&head, &tail, change);
-
-         /* Set `value' according to the bits set in `affected_masked'. */
-         for (++mode_string;; ++mode_string)
-           switch (*mode_string)
-             {
-             case 'r':
-               change->value |= ((S_IRUSR | S_IRGRP | S_IROTH)
-                                 & affected_masked);
-               break;
-             case 'w':
-               change->value |= ((S_IWUSR | S_IWGRP | S_IWOTH)
-                                 & affected_masked);
-               break;
-             case 'X':
-               change->flags |= MODE_X_IF_ANY_X;
-               /* Fall through. */
-             case 'x':
-               change->value |= ((S_IXUSR | S_IXGRP | S_IXOTH)
-                                 & affected_masked);
-               break;
-             case 's':
-               /* Set the setuid/gid bits if `u' or `g' is selected. */
-               change->value |= (S_ISUID | S_ISGID) & affected_masked;
-               break;
-             case 't':
-               /* Set the "save text image" bit if `o' is selected. */
-               change->value |= S_ISVTX & affected_masked;
-               break;
-             case 'u':
-               /* Set the affected bits to the value of the `u' bits
-                  on the same file.  */
-               if (change->value)
-                 goto invalid;
-               change->value = S_IRWXU;
-               change->flags |= MODE_COPY_EXISTING;
-               break;
-             case 'g':
-               /* Set the affected bits to the value of the `g' bits
-                  on the same file.  */
-               if (change->value)
-                 goto invalid;
-               change->value = S_IRWXG;
-               change->flags |= MODE_COPY_EXISTING;
-               break;
-             case 'o':
-               /* Set the affected bits to the value of the `o' bits
-                  on the same file.  */
-               if (change->value)
-                 goto invalid;
-               change->value = S_IRWXO;
-               change->flags |= MODE_COPY_EXISTING;
-               break;
-             default:
-               goto no_more_values;
-             }
-       no_more_values:;
-       }
-  } while (*mode_string == ',');
-  if (*mode_string == 0)
-    return head;
-invalid:
-  mode_free (head);
-  return MODE_INVALID;
-}
-
-/* Return a file mode change operation that sets permissions to match those
-   of REF_FILE.  Return MODE_BAD_REFERENCE if REF_FILE can't be accessed.  */
-
-struct mode_change *
-mode_create_from_ref (const char *ref_file)
-{
-  struct mode_change *change;  /* the only change element */
-  struct stat ref_stats;
-
-  if (stat (ref_file, &ref_stats))
-    return MODE_BAD_REFERENCE;
-
-  change = talloc (struct mode_change);
-
-  if (change == NULL)
-    return MODE_MEMORY_EXHAUSTED;
-
-  change->op = '=';
-  change->flags = 0;
-  change->affected = CHMOD_MODE_BITS;
-  change->value = ref_stats.st_mode;
-  change->next = NULL;
-
-  return change;
-}
-
-/* Return file mode OLDMODE, adjusted as indicated by the list of change
-   operations CHANGES.  If OLDMODE is a directory, the type `X'
-   change affects it even if no execute bits were set in OLDMODE.
-   The returned value has the S_IFMT bits cleared. */
-
-mode_t
-mode_adjust (mode_t oldmode, const struct mode_change *changes)
-{
-  mode_t newmode;      /* The adjusted mode and one operand. */
-  mode_t value;                /* The other operand. */
-
-  newmode = oldmode & CHMOD_MODE_BITS;
-
-  for (; changes; changes = changes->next)
-    {
-      if (changes->flags & MODE_COPY_EXISTING)
-       {
-         /* Isolate in `value' the bits in `newmode' to copy, given in
-            the mask `changes->value'. */
-         value = newmode & changes->value;
-
-         if (changes->value & S_IRWXU)
-           /* Copy `u' permissions onto `g' and `o'. */
-           value |= ((value & S_IRUSR ? S_IRGRP | S_IROTH : 0)
-                     | (value & S_IWUSR ? S_IWGRP | S_IROTH : 0)
-                     | (value & S_IXUSR ? S_IXGRP | S_IXOTH : 0));
-         else if (changes->value & S_IRWXG)
-           /* Copy `g' permissions onto `u' and `o'. */
-           value |= ((value & S_IRGRP ? S_IRUSR | S_IROTH : 0)
-                     | (value & S_IWGRP ? S_IWUSR | S_IROTH : 0)
-                     | (value & S_IXGRP ? S_IXUSR | S_IXOTH : 0));
-         else
-           /* Copy `o' permissions onto `u' and `g'. */
-           value |= ((value & S_IROTH ? S_IRUSR | S_IRGRP : 0)
-                     | (value & S_IWOTH ? S_IWUSR | S_IRGRP : 0)
-                     | (value & S_IXOTH ? S_IXUSR | S_IXGRP : 0));
-
-         /* In order to change only `u', `g', or `o' permissions,
-            or some combination thereof, clear unselected bits.
-            This can not be done in mode_compile because the value
-            to which the `changes->affected' mask is applied depends
-            on the old mode of each file. */
-         value &= changes->affected;
-       }
-      else
-       {
-         value = changes->value;
-         /* If `X', do not affect the execute bits if the file is not a
-            directory and no execute bits are already set. */
-         if ((changes->flags & MODE_X_IF_ANY_X)
-             && !S_ISDIR (oldmode)
-             && (newmode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)
-           /* Clear the execute bits. */
-           value &= ~ (S_IXUSR | S_IXGRP | S_IXOTH);
-       }
-
-      switch (changes->op)
-       {
-       case '=':
-         /* Preserve the previous values in `newmode' of bits that are
-            not affected by this change operation. */
-         newmode = (newmode & ~changes->affected) | value;
-         break;
-       case '+':
-         newmode |= value;
-         break;
-       case '-':
-         newmode &= ~value;
-         break;
-       }
-    }
-  return newmode;
-}
-
-/* Free the memory used by the list of file mode change operations
-   CHANGES. */
-
-void
-mode_free (register struct mode_change *changes)
-{
-  register struct mode_change *next;
-
-  while (changes)
-    {
-      next = changes->next;
-      free (changes);
-      changes = next;
-    }
-}
diff --git a/src/ansi2knr.1 b/src/ansi2knr.1
deleted file mode 100644 (file)
index d223124..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-.\" $Id: ansi2knr.1 $
-.TH ANSI2KNR 1 "9 September 1998" \" -*- nroff -*-
-.SH NAME
-ansi2knr \- convert ANSI C to Kernighan & Ritchie C
-.SH SYNOPSIS
-\fBansi2knr\fR [\fB--filename\fR \fIfilename\fR] [\fIinput_file\fR [\fIoutput_file\fR]]
-.br
-.SH DESCRIPTION
-\fB--filename\fR provides the file name for the #line directive in the output,
-overriding \fIinput_file\fR (if present).
-.sp
-If no \fIinput_file\fR is supplied, input is read from stdin.
-.sp
-If no \fIoutput_file\fR is supplied, output goes to stdout.
-.sp
-There are no error messages.
-.sp
-\fBansi2knr\fR
-recognizes function definitions by seeing a non-keyword identifier at the left
-margin, followed by a left parenthesis, with a right parenthesis as the last
-character on the line, and with a left brace as the first token on the
-following line (ignoring possible intervening comments).  It will recognize a
-multi-line header provided that no intervening line ends with a left or right
-brace or a semicolon.  These algorithms ignore whitespace and comments, except
-that the function name must be the first thing on the line.
-.sp
-The following constructs will confuse it:
-.br
-     - Any other construct that starts at the left margin and follows the
-above syntax (such as a macro or function call).
-.br
-     - Some macros that tinker with the syntax of the function header.
-.sp
-The --varargs switch is obsolete, and is recognized only for
-backwards compatibility.  The present version of
-\fBansi2knr\fR
-will always attempt to convert a ... argument to va_alist and va_dcl.
-.SH AUTHOR
-L. Peter Deutsch <ghost@aladdin.com> wrote the original ansi2knr and
-continues to maintain the current version; most of the code in the current
-version is his work.  ansi2knr also includes contributions by Francois
-Pinard <pinard@iro.umontreal.ca> and Jim Avera <jima@netcom.com>.
diff --git a/src/ansi2knr.c b/src/ansi2knr.c
deleted file mode 100644 (file)
index 226104e..0000000
+++ /dev/null
@@ -1,720 +0,0 @@
-/* Copyright (C) 1989, 1997, 1998, 1999 Aladdin Enterprises.  All rights reserved. */
-
-/*$Id: ansi2knr.c $*/
-/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
-
-/*
-ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY.  No author or distributor accepts responsibility to anyone for the
-consequences of using it or for whether it serves any particular purpose or
-works at all, unless he says so in writing.  Refer to the GNU General Public
-License (the "GPL") for full details.
-
-Everyone is granted permission to copy, modify and redistribute ansi2knr,
-but only under the conditions described in the GPL.  A copy of this license
-is supposed to have been given to you along with ansi2knr so you can know
-your rights and responsibilities.  It should be in a file named COPYLEFT,
-or, if there is no file named COPYLEFT, a file named COPYING.  Among other
-things, the copyright notice and this notice must be preserved on all
-copies.
-
-We explicitly state here what we believe is already implied by the GPL: if
-the ansi2knr program is distributed as a separate set of sources and a
-separate executable file which are aggregated on a storage medium together
-with another program, this in itself does not bring the other program under
-the GPL, nor does the mere fact that such a program or the procedures for
-constructing it invoke the ansi2knr executable bring any other part of the
-program under the GPL.
-*/
-
-/*
- * Usage:
-       ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]
- * --filename provides the file name for the #line directive in the output,
- * overriding input_file (if present).
- * If no input_file is supplied, input is read from stdin.
- * If no output_file is supplied, output goes to stdout.
- * There are no error messages.
- *
- * ansi2knr recognizes function definitions by seeing a non-keyword
- * identifier at the left margin, followed by a left parenthesis, with a
- * right parenthesis as the last character on the line, and with a left
- * brace as the first token on the following line (ignoring possible
- * intervening comments and/or preprocessor directives), except that a line
- * consisting of only
- *     identifier1(identifier2)
- * will not be considered a function definition unless identifier2 is
- * the word "void", and a line consisting of
- *     identifier1(identifier2, <<arbitrary>>)
- * will not be considered a function definition.
- * ansi2knr will recognize a multi-line header provided that no intervening
- * line ends with a left or right brace or a semicolon.  These algorithms
- * ignore whitespace, comments, and preprocessor directives, except that
- * the function name must be the first thing on the line.  The following
- * constructs will confuse it:
- *     - Any other construct that starts at the left margin and
- *         follows the above syntax (such as a macro or function call).
- *     - Some macros that tinker with the syntax of function headers.
- */
-
-/*
- * The original and principal author of ansi2knr is L. Peter Deutsch
- * <ghost@aladdin.com>.  Other authors are noted in the change history
- * that follows (in reverse chronological order):
-       lpd 1999-08-17 added code to allow preprocessor directives
-               wherever comments are allowed
-       lpd 1999-04-12 added minor fixes from Pavel Roskin
-               <pavel_roskin@geocities.com> for clean compilation with
-               gcc -W -Wall
-       lpd 1999-03-22 added hack to recognize lines consisting of
-               identifier1(identifier2, xxx) as *not* being procedures
-       lpd 1999-02-03 made indentation of preprocessor commands consistent
-       lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an
-               endless loop; quoted strings within an argument list
-               confused the parser
-       lpd 1999-01-24 added a check for write errors on the output,
-               suggested by Jim Meyering <meyering@ascend.com>
-       lpd 1998-11-09 added further hack to recognize identifier(void)
-               as being a procedure
-       lpd 1998-10-23 added hack to recognize lines consisting of
-               identifier1(identifier2) as *not* being procedures
-       lpd 1997-12-08 made input_file optional; only closes input and/or
-               output file if not stdin or stdout respectively; prints
-               usage message on stderr rather than stdout; adds
-               --filename switch (changes suggested by
-               <ceder@lysator.liu.se>)
-       lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with
-               compilers that don't understand void, as suggested by
-               Tom Lane
-       lpd 1996-01-15 changed to require that the first non-comment token
-               on the line following a function header be a left brace,
-               to reduce sensitivity to macros, as suggested by Tom Lane
-               <tgl@sss.pgh.pa.us>
-       lpd 1995-06-22 removed #ifndefs whose sole purpose was to define
-               undefined preprocessor symbols as 0; changed all #ifdefs
-               for configuration symbols to #ifs
-       lpd 1995-04-05 changed copyright notice to make it clear that
-               including ansi2knr in a program does not bring the entire
-               program under the GPL
-       lpd 1994-12-18 added conditionals for systems where ctype macros
-               don't handle 8-bit characters properly, suggested by
-               Francois Pinard <pinard@iro.umontreal.ca>;
-               removed --varargs switch (this is now the default)
-       lpd 1994-10-10 removed CONFIG_BROKETS conditional
-       lpd 1994-07-16 added some conditionals to help GNU `configure',
-               suggested by Francois Pinard <pinard@iro.umontreal.ca>;
-               properly erase prototype args in function parameters,
-               contributed by Jim Avera <jima@netcom.com>;
-               correct error in writeblanks (it shouldn't erase EOLs)
-       lpd 1989-xx-xx original version
- */
-
-/* Most of the conditionals here are to make ansi2knr work with */
-/* or without the GNU configure machinery. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-
-#if HAVE_CONFIG_H
-
-/*
-   For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
-   This will define HAVE_CONFIG_H and so, activate the following lines.
- */
-
-# if STDC_HEADERS || HAVE_STRING_H
-#  include <string.h>
-# else
-#  include <strings.h>
-# endif
-
-#else /* not HAVE_CONFIG_H */
-
-/* Otherwise do it the hard way */
-
-# ifdef BSD
-#  include <strings.h>
-# else
-#  ifdef VMS
-    extern int strlen(), strncmp();
-#  else
-#   include <string.h>
-#  endif
-# endif
-
-#endif /* not HAVE_CONFIG_H */
-
-#if STDC_HEADERS
-# include <stdlib.h>
-#else
-/*
-   malloc and free should be declared in stdlib.h,
-   but if you've got a K&R compiler, they probably aren't.
- */
-# ifdef MSDOS
-#  include <malloc.h>
-# else
-#  ifdef VMS
-     extern char *malloc();
-     extern void free();
-#  else
-     extern char *malloc();
-     extern int free();
-#  endif
-# endif
-
-#endif
-
-/* Define NULL (for *very* old compilers). */
-#ifndef NULL
-# define NULL (0)
-#endif
-
-/*
- * The ctype macros don't always handle 8-bit characters correctly.
- * Compensate for this here.
- */
-#ifdef isascii
-# undef HAVE_ISASCII           /* just in case */
-# define HAVE_ISASCII 1
-#else
-#endif
-#if STDC_HEADERS || !HAVE_ISASCII
-# define is_ascii(c) 1
-#else
-# define is_ascii(c) isascii(c)
-#endif
-
-#define is_space(c) (is_ascii(c) && isspace(c))
-#define is_alpha(c) (is_ascii(c) && isalpha(c))
-#define is_alnum(c) (is_ascii(c) && isalnum(c))
-
-/* Scanning macros */
-#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
-#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
-
-/* Forward references */
-char *ppdirforward();
-char *ppdirbackward();
-char *skipspace();
-char *scanstring();
-int writeblanks();
-int test1();
-int convert1();
-
-/* The main program */
-int
-main(argc, argv)
-    int argc;
-    char *argv[];
-{      FILE *in = stdin;
-       FILE *out = stdout;
-       char *filename = 0;
-       char *program_name = argv[0];
-       char *output_name = 0;
-#define bufsize 5000                   /* arbitrary size */
-       char *buf;
-       char *line;
-       char *more;
-       char *usage =
-         "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n";
-       /*
-        * In previous versions, ansi2knr recognized a --varargs switch.
-        * If this switch was supplied, ansi2knr would attempt to convert
-        * a ... argument to va_alist and va_dcl; if this switch was not
-        * supplied, ansi2knr would simply drop any such arguments.
-        * Now, ansi2knr always does this conversion, and we only
-        * check for this switch for backward compatibility.
-        */
-       int convert_varargs = 1;
-       int output_error;
-
-       while ( argc > 1 && argv[1][0] == '-' ) {
-         if ( !strcmp(argv[1], "--varargs") ) {
-           convert_varargs = 1;
-           argc--;
-           argv++;
-           continue;
-         }
-         if ( !strcmp(argv[1], "--filename") && argc > 2 ) {
-           filename = argv[2];
-           argc -= 2;
-           argv += 2;
-           continue;
-         }
-         fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name,
-                 argv[1]);
-         fprintf(stderr, usage);
-         exit(1);
-       }
-       switch ( argc )
-          {
-       default:
-               fprintf(stderr, usage);
-               exit(0);
-       case 3:
-               output_name = argv[2];
-               out = fopen(output_name, "w");
-               if ( out == NULL ) {
-                 fprintf(stderr, "%s: Cannot open output file %s\n",
-                         program_name, output_name);
-                 exit(1);
-               }
-               /* falls through */
-       case 2:
-               in = fopen(argv[1], "r");
-               if ( in == NULL ) {
-                 fprintf(stderr, "%s: Cannot open input file %s\n",
-                         program_name, argv[1]);
-                 exit(1);
-               }
-               if ( filename == 0 )
-                 filename = argv[1];
-               /* falls through */
-       case 1:
-               break;
-          }
-       if ( filename )
-         fprintf(out, "#line 1 \"%s\"\n", filename);
-       buf = malloc(bufsize);
-       if ( buf == NULL )
-          {
-               fprintf(stderr, "Unable to allocate read buffer!\n");
-               exit(1);
-          }
-       line = buf;
-       while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
-          {
-test:          line += strlen(line);
-               switch ( test1(buf) )
-                  {
-               case 2:                 /* a function header */
-                       convert1(buf, out, 1, convert_varargs);
-                       break;
-               case 1:                 /* a function */
-                       /* Check for a { at the start of the next line. */
-                       more = ++line;
-f:                     if ( line >= buf + (bufsize - 1) ) /* overflow check */
-                         goto wl;
-                       if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )
-                         goto wl;
-                       switch ( *skipspace(ppdirforward(more), 1) )
-                         {
-                         case '{':
-                           /* Definitely a function header. */
-                           convert1(buf, out, 0, convert_varargs);
-                           fputs(more, out);
-                           break;
-                         case 0:
-                           /* The next line was blank or a comment: */
-                           /* keep scanning for a non-comment. */
-                           line += strlen(line);
-                           goto f;
-                         default:
-                           /* buf isn't a function header, but */
-                           /* more might be. */
-                           fputs(buf, out);
-                           strcpy(buf, more);
-                           line = buf;
-                           goto test;
-                         }
-                       break;
-               case -1:                /* maybe the start of a function */
-                       if ( line != buf + (bufsize - 1) ) /* overflow check */
-                         continue;
-                       /* falls through */
-               default:                /* not a function */
-wl:                    fputs(buf, out);
-                       break;
-                  }
-               line = buf;
-          }
-       if ( line != buf )
-         fputs(buf, out);
-       free(buf);
-       if ( output_name ) {
-         output_error = ferror(out);
-         output_error |= fclose(out);
-       } else {                /* out == stdout */
-         fflush(out);
-         output_error = ferror(out);
-       }
-       if ( output_error ) {
-         fprintf(stderr, "%s: error writing to %s\n", program_name,
-                 (output_name ? output_name : "stdout"));
-         exit(1);
-       }
-       if ( in != stdin )
-         fclose(in);
-       return 0;
-}
-
-/*
- * Skip forward or backward over one or more preprocessor directives.
- */
-char *
-ppdirforward(p)
-    char *p;
-{
-    for (; *p == '#'; ++p) {
-       for (; *p != '\r' && *p != '\n'; ++p)
-           if (*p == 0)
-               return p;
-       if (*p == '\r' && p[1] == '\n')
-           ++p;
-    }
-    return p;
-}
-char *
-ppdirbackward(p, limit)
-    char *p;
-    char *limit;
-{
-    char *np = p;
-
-    for (;; p = --np) {
-       if (*np == '\n' && np[-1] == '\r')
-           --np;
-       for (; np > limit && np[-1] != '\r' && np[-1] != '\n'; --np)
-           if (np[-1] == 0)
-               return np;
-       if (*np != '#')
-           return p;
-    }
-}
-
-/*
- * Skip over whitespace, comments, and preprocessor directives,
- * in either direction.
- */
-char *
-skipspace(p, dir)
-    char *p;
-    int dir;                   /* 1 for forward, -1 for backward */
-{
-    for ( ; ; ) {
-       while ( is_space(*p) )
-           p += dir;
-       if ( !(*p == '/' && p[dir] == '*') )
-           break;
-       p += dir;  p += dir;
-       while ( !(*p == '*' && p[dir] == '/') ) {
-           if ( *p == 0 )
-               return p;       /* multi-line comment?? */
-           p += dir;
-       }
-       p += dir;  p += dir;
-    }
-    return p;
-}
-
-/* Scan over a quoted string, in either direction. */
-char *
-scanstring(p, dir)
-    char *p;
-    int dir;
-{
-    for (p += dir; ; p += dir)
-       if (*p == '"' && p[-dir] != '\\')
-           return p + dir;
-}
-
-/*
- * Write blanks over part of a string.
- * Don't overwrite end-of-line characters.
- */
-int
-writeblanks(start, end)
-    char *start;
-    char *end;
-{      char *p;
-       for ( p = start; p < end; p++ )
-         if ( *p != '\r' && *p != '\n' )
-           *p = ' ';
-       return 0;
-}
-
-/*
- * Test whether the string in buf is a function definition.
- * The string may contain and/or end with a newline.
- * Return as follows:
- *     0 - definitely not a function definition;
- *     1 - definitely a function definition;
- *     2 - definitely a function prototype (NOT USED);
- *     -1 - may be the beginning of a function definition,
- *             append another line and look again.
- * The reason we don't attempt to convert function prototypes is that
- * Ghostscript's declaration-generating macros look too much like
- * prototypes, and confuse the algorithms.
- */
-int
-test1(buf)
-    char *buf;
-{      char *p = buf;
-       char *bend;
-       char *endfn;
-       int contin;
-
-       if ( !isidfirstchar(*p) )
-         return 0;             /* no name at left margin */
-       bend = skipspace(ppdirbackward(buf + strlen(buf) - 1, buf), -1);
-       switch ( *bend )
-          {
-          case ';': contin = 0 /*2*/; break;
-          case ')': contin = 1; break;
-          case '{': return 0;          /* not a function */
-          case '}': return 0;          /* not a function */
-          default: contin = -1;
-          }
-       while ( isidchar(*p) )
-         p++;
-       endfn = p;
-       p = skipspace(p, 1);
-       if ( *p++ != '(' )
-         return 0;             /* not a function */
-       p = skipspace(p, 1);
-       if ( *p == ')' )
-         return 0;             /* no parameters */
-       /* Check that the apparent function name isn't a keyword. */
-       /* We only need to check for keywords that could be followed */
-       /* by a left parenthesis (which, unfortunately, is most of them). */
-          {    static char *words[] =
-                  {    "asm", "auto", "case", "char", "const", "double",
-                       "extern", "float", "for", "if", "int", "long",
-                       "register", "return", "short", "signed", "sizeof",
-                       "static", "switch", "typedef", "unsigned",
-                       "void", "volatile", "while", 0
-                  };
-               char **key = words;
-               char *kp;
-               unsigned len = endfn - buf;
-
-               while ( (kp = *key) != 0 )
-                  {    if ( strlen(kp) == len && !strncmp(kp, buf, len) )
-                         return 0;     /* name is a keyword */
-                       key++;
-                  }
-          }
-          {
-              char *id = p;
-              int len;
-              /*
-               * Check for identifier1(identifier2) and not
-               * identifier1(void), or identifier1(identifier2, xxxx).
-               */
-
-              while ( isidchar(*p) )
-                  p++;
-              len = p - id;
-              p = skipspace(p, 1);
-              if (*p == ',' ||
-                  (*p == ')' && (len != 4 || strncmp(id, "void", 4)))
-                  )
-                  return 0;    /* not a function */
-          }
-       /*
-        * If the last significant character was a ), we need to count
-        * parentheses, because it might be part of a formal parameter
-        * that is a procedure.
-        */
-       if (contin > 0) {
-           int level = 0;
-
-           for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1))
-               level += (*p == '(' ? 1 : *p == ')' ? -1 : 0);
-           if (level > 0)
-               contin = -1;
-       }
-       return contin;
-}
-
-/* Convert a recognized function definition or header to K&R syntax. */
-int
-convert1(buf, out, header, convert_varargs)
-    char *buf;
-    FILE *out;
-    int header;                        /* Boolean */
-    int convert_varargs;       /* Boolean */
-{      char *endfn;
-       char *p;
-       /*
-        * The breaks table contains pointers to the beginning and end
-        * of each argument.
-        */
-       char **breaks;
-       unsigned num_breaks = 2;        /* for testing */
-       char **btop;
-       char **bp;
-       char **ap;
-       char *vararg = 0;
-
-       /* Pre-ANSI implementations don't agree on whether strchr */
-       /* is called strchr or index, so we open-code it here. */
-       for ( endfn = buf; *(endfn++) != '('; )
-         ;
-top:   p = endfn;
-       breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
-       if ( breaks == NULL )
-          {    /* Couldn't allocate break table, give up */
-               fprintf(stderr, "Unable to allocate break table!\n");
-               fputs(buf, out);
-               return -1;
-          }
-       btop = breaks + num_breaks * 2 - 2;
-       bp = breaks;
-       /* Parse the argument list */
-       do
-          {    int level = 0;
-               char *lp = NULL;
-               char *rp = NULL;
-               char *end = NULL;
-
-               if ( bp >= btop )
-                  {    /* Filled up break table. */
-                       /* Allocate a bigger one and start over. */
-                       free((char *)breaks);
-                       num_breaks <<= 1;
-                       goto top;
-                  }
-               *bp++ = p;
-               /* Find the end of the argument */
-               for ( ; end == NULL; p++ )
-                  {    switch(*p)
-                          {
-                          case ',':
-                               if ( !level ) end = p;
-                               break;
-                          case '(':
-                               if ( !level ) lp = p;
-                               level++;
-                               break;
-                          case ')':
-                               if ( --level < 0 ) end = p;
-                               else rp = p;
-                               break;
-                          case '/':
-                               if (p[1] == '*')
-                                   p = skipspace(p, 1) - 1;
-                               break;
-                          case '"':
-                              p = scanstring(p, 1) - 1;
-                              break;
-                          default:
-                               ;
-                          }
-                  }
-               /* Erase any embedded prototype parameters. */
-               if ( lp && rp )
-                 writeblanks(lp + 1, rp);
-               p--;                    /* back up over terminator */
-               /* Find the name being declared. */
-               /* This is complicated because of procedure and */
-               /* array modifiers. */
-               for ( ; ; )
-                  {    p = skipspace(p - 1, -1);
-                       switch ( *p )
-                          {
-                          case ']':    /* skip array dimension(s) */
-                          case ')':    /* skip procedure args OR name */
-                          {    int level = 1;
-                               while ( level )
-                                switch ( *--p )
-                                  {
-                                  case ']': case ')':
-                                      level++;
-                                      break;
-                                  case '[': case '(':
-                                      level--;
-                                      break;
-                                  case '/':
-                                      if (p > buf && p[-1] == '*')
-                                          p = skipspace(p, -1) + 1;
-                                      break;
-                                  case '"':
-                                      p = scanstring(p, -1) + 1;
-                                      break;
-                                  default: ;
-                                  }
-                          }
-                               if ( *p == '(' && *skipspace(p + 1, 1) == '*' )
-                                  {    /* We found the name being declared */
-                                       while ( !isidfirstchar(*p) )
-                                         p = skipspace(p, 1) + 1;
-                                       goto found;
-                                  }
-                               break;
-                          default:
-                               goto found;
-                          }
-                  }
-found:         if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
-                 {     if ( convert_varargs )
-                         {     *bp++ = "va_alist";
-                               vararg = p-2;
-                         }
-                       else
-                         {     p++;
-                               if ( bp == breaks + 1 ) /* sole argument */
-                                 writeblanks(breaks[0], p);
-                               else
-                                 writeblanks(bp[-1] - 1, p);
-                               bp--;
-                         }
-                  }
-               else
-                  {    while ( isidchar(*p) ) p--;
-                       *bp++ = p+1;
-                  }
-               p = end;
-          }
-       while ( *p++ == ',' );
-       *bp = p;
-       /* Make a special check for 'void' arglist */
-       if ( bp == breaks+2 )
-          {    p = skipspace(breaks[0], 1);
-               if ( !strncmp(p, "void", 4) )
-                  {    p = skipspace(p+4, 1);
-                       if ( p == breaks[2] - 1 )
-                          {    bp = breaks;    /* yup, pretend arglist is empty */
-                               writeblanks(breaks[0], p + 1);
-                          }
-                  }
-          }
-       /* Put out the function name and left parenthesis. */
-       p = buf;
-       while ( p != endfn ) putc(*p, out), p++;
-       /* Put out the declaration. */
-       if ( header )
-         {     fputs(");", out);
-               for ( p = breaks[0]; *p; p++ )
-                 if ( *p == '\r' || *p == '\n' )
-                   putc(*p, out);
-         }
-       else
-         {     for ( ap = breaks+1; ap < bp; ap += 2 )
-                 {     p = *ap;
-                       while ( isidchar(*p) )
-                         putc(*p, out), p++;
-                       if ( ap < bp - 1 )
-                         fputs(", ", out);
-                 }
-               fputs(")  ", out);
-               /* Put out the argument declarations */
-               for ( ap = breaks+2; ap <= bp; ap += 2 )
-                 (*ap)[-1] = ';';
-               if ( vararg != 0 )
-                 {     *vararg = 0;
-                       fputs(breaks[0], out);          /* any prior args */
-                       fputs("va_dcl", out);           /* the final arg */
-                       fputs(bp[0], out);
-                 }
-               else
-                 fputs(breaks[0], out);
-         }
-       free((char *)breaks);
-       return 0;
-}
diff --git a/src/arith.c b/src/arith.c
deleted file mode 100644 (file)
index 62c7638..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Arithmetic for numbers greater than a long int, for GNU tar.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published by the
-   Free Software Foundation; either version 2, or (at your option) any later
-   version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
-   Public License for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation, Inc.,
-   59 Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-#include "system.h"
-
-/* common.h is needed to define FATAL_ERROR.  It also includes arith.h.  */
-#include "common.h"
-
-/* GNU tar needs handling numbers exceeding 32 bits, which is the size of
-   unsigned long ints for many C compilers.  This module should provide
-   machinery for handling at least BITS_PER_TARLONG bits per number.  If
-   `long long' ints are available and are sufficient for the task, they will
-   be used preferrably.
-
-   Russell Cattelan reports 165 Gb single tapes (digital video D2 tapes on
-   Ampex drives), so requiring 38 bits for the tape length in bytes.  He
-   also reports breaking the terabyte limit with a single file (using SGI
-   xFS file system over 37 28GB disk arrays attached to a Power Challenge
-   XL; check out http://www.lcse.umn.edu/ for a picture), so requiring a
-   little more than 40 bits for the file size in bytes.  The POSIX header
-   structure allows for 12 octal digits to represent file lengths, that is,
-   up to 36 bits for the byte size of files.
-
-   If `long long' is not supported by the compiler, SIZEOF_LONG_LONG will be
-   set to zero by configure.  In this case, or if `long long' ints does not
-   have enough bits, then huge numbers are rather represented by an array of
-   longs, with the least significant super-digit at position 0.  For making
-   multiplication and decimal input/output easy, the base of a super-digit
-   is an exact exponent of 10, and is such that base*base fits in a long.  */
-
-#if SUPERDIGIT
-
-/*-------------------------------.
-| Check if ACCUMULATOR is zero.         |
-`-------------------------------*/
-
-int
-zerop_tarlong_helper (unsigned long *accumulator)
-{
-  int counter;
-
-  for (counter = LONGS_PER_TARLONG - 1; counter >= 0; counter--)
-    if (accumulator[counter])
-      return 0;
-
-  return 1;
-}
-
-/*----------------------------------------------.
-| Check if FIRST is strictly less than SECOND.  |
-`----------------------------------------------*/
-
-int
-lessp_tarlong_helper (unsigned long *first, unsigned long *second)
-{
-  int counter;
-
-  for (counter = LONGS_PER_TARLONG - 1; counter >= 0; counter--)
-    if (first[counter] != second[counter])
-      return first[counter] < second[counter];
-
-  return 0;
-}
-
-/*----------------------------.
-| Reset ACCUMULATOR to zero.  |
-`----------------------------*/
-
-void
-clear_tarlong_helper (unsigned long *accumulator)
-{
-  int counter;
-
-  for (counter = 0; counter < LONGS_PER_TARLONG; counter++)
-    accumulator[counter] = 0;
-}
-
-/*----------------------------.
-| To ACCUMULATOR, add VALUE.  |
-`----------------------------*/
-
-void
-add_to_tarlong_helper (unsigned long *accumulator, int value)
-{
-  int counter;
-
-  if (value < 0)
-    for (counter = 0; counter < LONGS_PER_TARLONG; counter++)
-      {
-       if (accumulator[counter] >= -value)
-         {
-           accumulator[counter] += value;
-           return;
-         }
-       accumulator[counter] += value + SUPERDIGIT;
-       value = -1;
-      }
-  else
-    for (counter = 0; counter < LONGS_PER_TARLONG; counter++)
-      {
-       if (accumulator[counter] + value < SUPERDIGIT)
-         {
-           accumulator[counter] += value;
-           return;
-         }
-       accumulator[counter] += value - SUPERDIGIT;
-       value = 1;
-      }
-  FATAL_ERROR ((0, 0, _("Arithmetic overflow")));
-}
-
-/*--------------------------------.
-| Multiply ACCUMULATOR by VALUE.  |
-`--------------------------------*/
-
-void
-mult_tarlong_helper (unsigned long *accumulator, int value)
-{
-  int carry = 0;
-  int counter;
-
-  for (counter = 0; counter < LONGS_PER_TARLONG; counter++)
-    {
-      carry += accumulator[counter] * value;
-      accumulator[counter] = carry % SUPERDIGIT;
-      carry /= SUPERDIGIT;
-    }
-  if (carry)
-    FATAL_ERROR ((0, 0, _("Arithmetic overflow")));
-}
-
-/*----------------------------------------------------------.
-| Print the decimal representation of ACCUMULATOR on FILE.  |
-`----------------------------------------------------------*/
-
-void
-print_tarlong_helper (unsigned long *accumulator, FILE *file)
-{
-  int counter = LONGS_PER_TARLONG - 1;
-
-  while (counter > 0 && accumulator[counter] == 0)
-    counter--;
-
-  fprintf (file, "%uld", accumulator[counter]);
-  while (counter > 0)
-    fprintf (file, TARLONG_FORMAT, accumulator[--counter]);
-}
-
-#endif /* SUPERDIGIT */
diff --git a/src/diffarch.c b/src/diffarch.c
deleted file mode 100644 (file)
index ce47d9d..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/* Diff files from a tar archive.
-   Copyright (C) 1988, 1992, 1993 Free Software Foundation
-
-This file is part of GNU Tar.
-
-GNU Tar is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Tar is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Tar; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/*
- * Diff files from a tar archive.
- *
- * Written 30 April 1987 by John Gilmore, ihnp4!hoptoad!gnu.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#ifndef STDC_HEADERS
-extern int errno;
-#endif
-#include <sys/types.h>
-
-#ifdef BSD42
-#include <sys/file.h>
-#else
-#ifndef V7
-#include <fcntl.h>
-#endif
-#endif
-
-#ifdef HAVE_SYS_MTIO_H
-#include <sys/ioctl.h>
-#include <sys/mtio.h>
-#endif
-
-#include "tar.h"
-#include "port.h"
-#include "rmt.h"
-
-#ifndef S_ISLNK
-#define lstat stat
-#endif
-
-extern void *valloc ();
-
-extern union record *head;     /* Points to current tape header */
-extern struct stat hstat;      /* Stat struct corresponding */
-extern int head_standard;      /* Tape header is in ANSI format */
-
-void decode_header ();
-void diff_sparse_files ();
-void fill_in_sparse_array ();
-void fl_read ();
-long from_oct ();
-int do_stat ();
-extern void print_header ();
-int read_header ();
-void saverec ();
-void sigh ();
-extern void skip_file ();
-extern void skip_extended_headers ();
-int wantbytes ();
-
-extern FILE *msg_file;
-
-int now_verifying = 0;         /* Are we verifying at the moment? */
-
-int diff_fd;                   /* Descriptor of file we're diffing */
-
-char *diff_buf = 0;            /* Pointer to area for reading
-                                          file contents into */
-
-char *diff_dir;                        /* Directory contents for LF_DUMPDIR */
-
-int different = 0;
-
-/*struct sp_array *sparsearray;
-int            sp_ar_size = 10;*/
-/*
- * Initialize for a diff operation
- */
-void
-diff_init ()
-{
-  /*NOSTRICT*/
-  diff_buf = (char *) valloc ((unsigned) blocksize);
-  if (!diff_buf)
-    {
-      msg ("could not allocate memory for diff buffer of %d bytes",
-          blocksize);
-      exit (EX_ARGSBAD);
-    }
-}
-
-/*
- * Diff a file against the archive.
- */
-void
-diff_archive ()
-{
-  register char *data;
-  int check, namelen;
-  int err;
-  long offset;
-  struct stat filestat;
-  int compare_chunk ();
-  int compare_dir ();
-  int no_op ();
-#ifndef __MSDOS__
-  dev_t dev;
-  ino_t ino;
-#endif
-  char *get_dir_contents ();
-  long from_oct ();
-
-  errno = EPIPE;               /* FIXME, remove perrors */
-
-  saverec (&head);             /* Make sure it sticks around */
-  userec (head);               /* And go past it in the archive */
-  decode_header (head, &hstat, &head_standard, 1);     /* Snarf fields */
-
-  /* Print the record from 'head' and 'hstat' */
-  if (f_verbose)
-    {
-      if (now_verifying)
-       fprintf (msg_file, "Verify ");
-      print_header ();
-    }
-
-  switch (head->header.linkflag)
-    {
-
-    default:
-      msg ("Unknown file type '%c' for %s, diffed as normal file",
-          head->header.linkflag, current_file_name);
-      /* FALL THRU */
-
-    case LF_OLDNORMAL:
-    case LF_NORMAL:
-    case LF_SPARSE:
-    case LF_CONTIG:
-      /*
-                * Appears to be a file.
-                * See if it's really a directory.
-                */
-      namelen = strlen (current_file_name) - 1;
-      if (current_file_name[namelen] == '/')
-       goto really_dir;
-
-
-      if (do_stat (&filestat))
-       {
-         if (head->header.isextended)
-           skip_extended_headers ();
-         skip_file ((long) hstat.st_size);
-         different++;
-         goto quit;
-       }
-
-      if (!S_ISREG (filestat.st_mode))
-       {
-         fprintf (msg_file, "%s: not a regular file\n",
-                  current_file_name);
-         skip_file ((long) hstat.st_size);
-         different++;
-         goto quit;
-       }
-
-      filestat.st_mode &= 07777;
-      if (filestat.st_mode != hstat.st_mode)
-       sigh ("mode");
-      if (filestat.st_uid != hstat.st_uid)
-       sigh ("uid");
-      if (filestat.st_gid != hstat.st_gid)
-       sigh ("gid");
-      if (filestat.st_mtime != hstat.st_mtime)
-       sigh ("mod time");
-      if (head->header.linkflag != LF_SPARSE &&
-         filestat.st_size != hstat.st_size)
-       {
-         sigh ("size");
-         skip_file ((long) hstat.st_size);
-         goto quit;
-       }
-
-      diff_fd = open (current_file_name, O_NDELAY | O_RDONLY | O_BINARY);
-
-      if (diff_fd < 0 && !f_absolute_paths)
-       {
-         char tmpbuf[NAMSIZ + 2];
-
-         tmpbuf[0] = '/';
-         strcpy (&tmpbuf[1], current_file_name);
-         diff_fd = open (tmpbuf, O_NDELAY | O_RDONLY);
-       }
-      if (diff_fd < 0)
-       {
-         msg_perror ("cannot open %s", current_file_name);
-         if (head->header.isextended)
-           skip_extended_headers ();
-         skip_file ((long) hstat.st_size);
-         different++;
-         goto quit;
-       }
-      /*
-                * Need to treat sparse files completely differently here.
-                */
-      if (head->header.linkflag == LF_SPARSE)
-       diff_sparse_files (hstat.st_size);
-      else
-       wantbytes ((long) (hstat.st_size), compare_chunk);
-
-      check = close (diff_fd);
-      if (check < 0)
-       msg_perror ("Error while closing %s", current_file_name);
-
-    quit:
-      break;
-
-#ifndef __MSDOS__
-    case LF_LINK:
-      if (do_stat (&filestat))
-       break;
-      dev = filestat.st_dev;
-      ino = filestat.st_ino;
-      err = stat (current_link_name, &filestat);
-      if (err < 0)
-       {
-         if (errno == ENOENT)
-           {
-             fprintf (msg_file, "%s: does not exist\n", current_file_name);
-           }
-         else
-           {
-             msg_perror ("cannot stat file %s", current_file_name);
-           }
-         different++;
-         break;
-       }
-      if (filestat.st_dev != dev || filestat.st_ino != ino)
-       {
-         fprintf (msg_file, "%s not linked to %s\n", current_file_name, current_link_name);
-         break;
-       }
-      break;
-#endif
-
-#ifdef S_ISLNK
-    case LF_SYMLINK:
-      {
-       char linkbuf[NAMSIZ + 3];
-       check = readlink (current_file_name, linkbuf,
-                         (sizeof linkbuf) - 1);
-
-       if (check < 0)
-         {
-           if (errno == ENOENT)
-             {
-               fprintf (msg_file,
-                        "%s: no such file or directory\n",
-                        current_file_name);
-             }
-           else
-             {
-               msg_perror ("cannot read link %s", current_file_name);
-             }
-           different++;
-           break;
-         }
-
-       linkbuf[check] = '\0';  /* Null-terminate it */
-       if (strncmp (current_link_name, linkbuf, check) != 0)
-         {
-           fprintf (msg_file, "%s: symlink differs\n",
-                    current_link_name);
-           different++;
-         }
-      }
-      break;
-#endif
-
-#ifdef S_IFCHR
-    case LF_CHR:
-      hstat.st_mode |= S_IFCHR;
-      goto check_node;
-#endif
-
-#ifdef S_IFBLK
-      /* If local system doesn't support block devices, use default case */
-    case LF_BLK:
-      hstat.st_mode |= S_IFBLK;
-      goto check_node;
-#endif
-
-#ifdef S_ISFIFO
-      /* If local system doesn't support FIFOs, use default case */
-    case LF_FIFO:
-#ifdef S_IFIFO
-      hstat.st_mode |= S_IFIFO;
-#endif
-      hstat.st_rdev = 0;       /* FIXME, do we need this? */
-      goto check_node;
-#endif
-
-    check_node:
-      /* FIXME, deal with umask */
-      if (do_stat (&filestat))
-       break;
-      if (hstat.st_rdev != filestat.st_rdev)
-       {
-         fprintf (msg_file, "%s: device numbers changed\n", current_file_name);
-         different++;
-         break;
-       }
-#ifdef S_IFMT
-      if (hstat.st_mode != filestat.st_mode)
-#else /* POSIX lossage */
-      if ((hstat.st_mode & 07777) != (filestat.st_mode & 07777))
-#endif
-       {
-         fprintf (msg_file, "%s: mode or device-type changed\n", current_file_name);
-         different++;
-         break;
-       }
-      break;
-
-    case LF_DUMPDIR:
-      data = diff_dir = get_dir_contents (current_file_name, 0);
-      if (data)
-       {
-         wantbytes ((long) (hstat.st_size), compare_dir);
-         free (data);
-       }
-      else
-       wantbytes ((long) (hstat.st_size), no_op);
-      /* FALL THROUGH */
-
-    case LF_DIR:
-      /* Check for trailing / */
-      namelen = strlen (current_file_name) - 1;
-    really_dir:
-      while (namelen && current_file_name[namelen] == '/')
-       current_file_name[namelen--] = '\0';    /* Zap / */
-
-      if (do_stat (&filestat))
-       break;
-      if (!S_ISDIR (filestat.st_mode))
-       {
-         fprintf (msg_file, "%s is no longer a directory\n", current_file_name);
-         different++;
-         break;
-       }
-      if ((filestat.st_mode & 07777) != (hstat.st_mode & 07777))
-       sigh ("mode");
-      break;
-
-    case LF_VOLHDR:
-      break;
-
-    case LF_MULTIVOL:
-      namelen = strlen (current_file_name) - 1;
-      if (current_file_name[namelen] == '/')
-       goto really_dir;
-
-      if (do_stat (&filestat))
-       break;
-
-      if (!S_ISREG (filestat.st_mode))
-       {
-         fprintf (msg_file, "%s: not a regular file\n",
-                  current_file_name);
-         skip_file ((long) hstat.st_size);
-         different++;
-         break;
-       }
-
-      filestat.st_mode &= 07777;
-      offset = from_oct (1 + 12, head->header.offset);
-      if (filestat.st_size != hstat.st_size + offset)
-       {
-         sigh ("size");
-         skip_file ((long) hstat.st_size);
-         different++;
-         break;
-       }
-
-      diff_fd = open (current_file_name, O_NDELAY | O_RDONLY | O_BINARY);
-
-      if (diff_fd < 0)
-       {
-         msg_perror ("cannot open file %s", current_file_name);
-         skip_file ((long) hstat.st_size);
-         different++;
-         break;
-       }
-      err = lseek (diff_fd, offset, 0);
-      if (err != offset)
-       {
-         msg_perror ("cannot seek to %ld in file %s", offset, current_file_name);
-         different++;
-         break;
-       }
-
-      wantbytes ((long) (hstat.st_size), compare_chunk);
-
-      check = close (diff_fd);
-      if (check < 0)
-       {
-         msg_perror ("Error while closing %s", current_file_name);
-       }
-      break;
-
-    }
-
-  /* We don't need to save it any longer. */
-  saverec ((union record **) 0);/* Unsave it */
-}
-
-int
-compare_chunk (bytes, buffer)
-     long bytes;
-     char *buffer;
-{
-  int err;
-
-  err = read (diff_fd, diff_buf, bytes);
-  if (err != bytes)
-    {
-      if (err < 0)
-       {
-         msg_perror ("can't read %s", current_file_name);
-       }
-      else
-       {
-         fprintf (msg_file, "%s: could only read %d of %d bytes\n", current_file_name, err, bytes);
-       }
-      different++;
-      return -1;
-    }
-  if (bcmp (buffer, diff_buf, bytes))
-    {
-      fprintf (msg_file, "%s: data differs\n", current_file_name);
-      different++;
-      return -1;
-    }
-  return 0;
-}
-
-int
-compare_dir (bytes, buffer)
-     long bytes;
-     char *buffer;
-{
-  if (bcmp (buffer, diff_dir, bytes))
-    {
-      fprintf (msg_file, "%s: data differs\n", current_file_name);
-      different++;
-      return -1;
-    }
-  diff_dir += bytes;
-  return 0;
-}
-
-/*
- * Sigh about something that differs.
- */
-void
-sigh (what)
-     char *what;
-{
-
-  fprintf (msg_file, "%s: %s differs\n",
-          current_file_name, what);
-}
-
-void
-verify_volume ()
-{
-  int status;
-#ifdef MTIOCTOP
-  struct mtop t;
-  int er;
-#endif
-
-  if (!diff_buf)
-    diff_init ();
-#ifdef MTIOCTOP
-  t.mt_op = MTBSF;
-  t.mt_count = 1;
-  if ((er = rmtioctl (archive, MTIOCTOP, &t)) < 0)
-    {
-      if (errno != EIO || (er = rmtioctl (archive, MTIOCTOP, &t)) < 0)
-       {
-#endif
-         if (rmtlseek (archive, 0L, 0) != 0)
-           {
-             /* Lseek failed.  Try a different method */
-             msg_perror ("Couldn't rewind archive file for verify");
-             return;
-           }
-#ifdef MTIOCTOP
-       }
-    }
-#endif
-  ar_reading = 1;
-  now_verifying = 1;
-  fl_read ();
-  for (;;)
-    {
-      status = read_header ();
-      if (status == 0)
-       {
-         unsigned n;
-
-         n = 0;
-         do
-           {
-             n++;
-             status = read_header ();
-           }
-         while (status == 0);
-         msg ("VERIFY FAILURE: %d invalid header%s detected!", n, n == 1 ? "" : "s");
-       }
-      if (status == 2 || status == EOF)
-       break;
-      diff_archive ();
-    }
-  ar_reading = 0;
-  now_verifying = 0;
-
-}
-
-int
-do_stat (statp)
-     struct stat *statp;
-{
-  int err;
-
-  err = f_follow_links ? stat (current_file_name, statp) : lstat (current_file_name, statp);
-  if (err < 0)
-    {
-      if (errno == ENOENT)
-       {
-         fprintf (msg_file, "%s: does not exist\n", current_file_name);
-       }
-      else
-       msg_perror ("can't stat file %s", current_file_name);
-      /*               skip_file((long)hstat.st_size);
-               different++;*/
-      return 1;
-    }
-  else
-    return 0;
-}
-
-/*
- * JK
- * Diff'ing a sparse file with its counterpart on the tar file is a
- * bit of a different story than a normal file.  First, we must know
- * what areas of the file to skip through, i.e., we need to contruct
- * a sparsearray, which will hold all the information we need.  We must
- * compare small amounts of data at a time as we find it.
- */
-
-void
-diff_sparse_files (filesize)
-     int filesize;
-
-{
-  int sparse_ind = 0;
-  char *buf;
-  int buf_size = RECORDSIZE;
-  union record *datarec;
-  int err;
-  long numbytes;
-  /*   int             amt_read = 0;*/
-  int size = filesize;
-
-  buf = (char *) ck_malloc (buf_size * sizeof (char));
-
-  fill_in_sparse_array ();
-
-
-  while (size > 0)
-    {
-      datarec = findrec ();
-      if (!sparsearray[sparse_ind].numbytes)
-       break;
-
-      /*
-                * 'numbytes' is nicer to write than
-                * 'sparsearray[sparse_ind].numbytes' all the time ...
-                */
-      numbytes = sparsearray[sparse_ind].numbytes;
-
-      lseek (diff_fd, sparsearray[sparse_ind].offset, 0);
-      /*
-                * take care to not run out of room in our buffer
-                */
-      while (buf_size < numbytes)
-       {
-         buf = (char *) ck_realloc (buf, buf_size * 2 * sizeof (char));
-         buf_size *= 2;
-       }
-      while (numbytes > RECORDSIZE)
-       {
-         if ((err = read (diff_fd, buf, RECORDSIZE)) != RECORDSIZE)
-           {
-             if (err < 0)
-               msg_perror ("can't read %s", current_file_name);
-             else
-               fprintf (msg_file, "%s: could only read %d of %d bytes\n",
-                        current_file_name, err, numbytes);
-             break;
-           }
-         if (bcmp (buf, datarec->charptr, RECORDSIZE))
-           {
-             different++;
-             break;
-           }
-         numbytes -= err;
-         size -= err;
-         userec (datarec);
-         datarec = findrec ();
-       }
-      if ((err = read (diff_fd, buf, numbytes)) != numbytes)
-       {
-         if (err < 0)
-           msg_perror ("can't read %s", current_file_name);
-         else
-           fprintf (msg_file, "%s: could only read %d of %d bytes\n",
-                    current_file_name, err, numbytes);
-         break;
-       }
-
-      if (bcmp (buf, datarec->charptr, numbytes))
-       {
-         different++;
-         break;
-       }
-      /*               amt_read += numbytes;
-               if (amt_read >= RECORDSIZE) {
-                       amt_read = 0;
-                       userec(datarec);
-                       datarec = findrec();
-               }*/
-      userec (datarec);
-      sparse_ind++;
-      size -= numbytes;
-    }
-  /*
-        * if the number of bytes read isn't the
-        * number of bytes supposedly in the file,
-        * they're different
-        */
-  /*   if (amt_read != filesize)
-               different++;*/
-  userec (datarec);
-  free (sparsearray);
-  if (different)
-    fprintf (msg_file, "%s: data differs\n", current_file_name);
-
-}
-
-/*
- * JK
- * This routine should be used more often than it is ... look into
- * that.  Anyhow, what it does is translate the sparse information
- * on the header, and in any subsequent extended headers, into an
- * array of structures with true numbers, as opposed to character
- * strings.  It simply makes our life much easier, doing so many
- * comparisong and such.
- */
-void
-fill_in_sparse_array ()
-{
-  int ind;
-
-  /*
-        * allocate space for our scratch space; it's initially
-        * 10 elements long, but can change in this routine if
-        * necessary
-        */
-  sp_array_size = 10;
-  sparsearray = (struct sp_array *) ck_malloc (sp_array_size * sizeof (struct sp_array));
-
-  /*
-        * there are at most five of these structures in the header
-        * itself; read these in first
-        */
-  for (ind = 0; ind < SPARSE_IN_HDR; ind++)
-    {
-      if (!head->header.sp[ind].numbytes)
-       break;
-      sparsearray[ind].offset =
-       from_oct (1 + 12, head->header.sp[ind].offset);
-      sparsearray[ind].numbytes =
-       from_oct (1 + 12, head->header.sp[ind].numbytes);
-    }
-  /*
-        * if the header's extended, we gotta read in exhdr's till
-        * we're done
-        */
-  if (head->header.isextended)
-    {
-      /* how far into the sparsearray we are 'so far' */
-      static int so_far_ind = SPARSE_IN_HDR;
-      union record *exhdr;
-
-      for (;;)
-       {
-         exhdr = findrec ();
-         for (ind = 0; ind < SPARSE_EXT_HDR; ind++)
-           {
-             if (ind + so_far_ind > sp_array_size - 1)
-               {
-                 /*
-                                * we just ran out of room in our
-                                *  scratch area - realloc it
-                                */
-                 sparsearray = (struct sp_array *)
-                   ck_realloc (sparsearray,
-                            sp_array_size * 2 * sizeof (struct sp_array));
-                 sp_array_size *= 2;
-               }
-             /*
-                        * convert the character strings into longs
-                        */
-             sparsearray[ind + so_far_ind].offset =
-               from_oct (1 + 12, exhdr->ext_hdr.sp[ind].offset);
-             sparsearray[ind + so_far_ind].numbytes =
-               from_oct (1 + 12, exhdr->ext_hdr.sp[ind].numbytes);
-           }
-         /*
-                * if this is the last extended header for this
-                * file, we can stop
-                */
-         if (!exhdr->ext_hdr.isextended)
-           break;
-         else
-           {
-             so_far_ind += SPARSE_EXT_HDR;
-             userec (exhdr);
-           }
-       }
-      /* be sure to skip past the last one  */
-      userec (exhdr);
-    }
-}
diff --git a/src/getoldopt.c b/src/getoldopt.c
deleted file mode 100644 (file)
index 27511b9..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Replacement for getopt() that can be used by tar.
-   Copyright (C) 1988 Free Software Foundation
-
-This file is part of GNU Tar.
-
-GNU Tar is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Tar is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Tar; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/*
- * Plug-compatible replacement for getopt() for parsing tar-like
- * arguments.  If the first argument begins with "-", it uses getopt;
- * otherwise, it uses the old rules used by tar, dump, and ps.
- *
- * Written 25 August 1985 by John Gilmore (ihnp4!hoptoad!gnu)
- */
-
-#include <stdio.h>
-#include "getopt.h"
-#include "tar.h"               /* For msg() declaration if STDC_MSG. */
-#include <sys/types.h>
-#include "port.h"
-
-int
-getoldopt (argc, argv, optstring, long_options, opt_index)
-     int argc;
-     char **argv;
-     char *optstring;
-     struct option *long_options;
-     int *opt_index;
-{
-  extern char *optarg;         /* Points to next arg */
-  extern int optind;           /* Global argv index */
-  static char *key;            /* Points to next keyletter */
-  static char use_getopt;      /* !=0 if argv[1][0] was '-' */
-  char c;
-  char *place;
-
-  optarg = NULL;
-
-  if (key == NULL)
-    {                          /* First time */
-      if (argc < 2)
-       return EOF;
-      key = argv[1];
-      if ((*key == '-') || (*key == '+'))
-       use_getopt++;
-      else
-       optind = 2;
-    }
-
-  if (use_getopt)
-    return getopt_long (argc, argv, optstring,
-                       long_options, opt_index);
-
-  c = *key++;
-  if (c == '\0')
-    {
-      key--;
-      return EOF;
-    }
-  place = index (optstring, c);
-
-  if (place == NULL || c == ':')
-    {
-      msg ("unknown option %c", c);
-      return ('?');
-    }
-
-  place++;
-  if (*place == ':')
-    {
-      if (optind < argc)
-       {
-         optarg = argv[optind];
-         optind++;
-       }
-      else
-       {
-         msg ("%c argument missing", c);
-         return ('?');
-       }
-    }
-
-  return (c);
-}
diff --git a/src/gnu.c b/src/gnu.c
deleted file mode 100644 (file)
index ef51f2b..0000000
--- a/src/gnu.c
+++ /dev/null
@@ -1,677 +0,0 @@
-/* GNU dump extensions to tar.
-   Copyright (C) 1988, 1992, 1993 Free Software Foundation
-
-This file is part of GNU Tar.
-
-GNU Tar is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Tar is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Tar; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <ctype.h>
-#include <errno.h>
-#ifndef STDC_HEADERS
-extern int errno;
-#endif
-#include <time.h>
-time_t time ();
-
-#include "tar.h"
-#include "port.h"
-
-#ifndef S_ISLNK
-#define lstat stat
-#endif
-
-extern time_t new_time;
-extern FILE *msg_file;
-
-void addname ();
-int check_exclude ();
-extern PTR ck_malloc ();
-extern PTR ck_realloc ();
-int confirm ();
-extern PTR init_buffer ();
-extern char *get_buffer ();
-int is_dot_or_dotdot ();
-extern void add_buffer ();
-extern void flush_buffer ();
-void name_gather ();
-int recursively_delete ();
-void skip_file ();
-char *un_quote_string ();
-
-extern char *new_name ();
-
-static void add_dir_name ();
-
-struct dirname
-  {
-    struct dirname *next;
-    char *name;
-    char *dir_text;
-    int dev;
-    int ino;
-    int allnew;
-  };
-static struct dirname *dir_list;
-static time_t this_time;
-
-void
-add_dir (name, dev, ino, text)
-     char *name;
-     char *text;
-     dev_t dev;
-     ino_t ino;
-{
-  struct dirname *dp;
-
-  dp = (struct dirname *) ck_malloc (sizeof (struct dirname));
-  if (!dp)
-    abort ();
-  dp->next = dir_list;
-  dir_list = dp;
-  dp->dev = dev;
-  dp->ino = ino;
-  dp->name = ck_malloc (strlen (name) + 1);
-  strcpy (dp->name, name);
-  dp->dir_text = text;
-  dp->allnew = 0;
-}
-
-void
-read_dir_file ()
-{
-  int dev;
-  int ino;
-  char *strp;
-  FILE *fp;
-  char buf[512];
-  static char *path = 0;
-
-  if (path == 0)
-    path = ck_malloc (PATH_MAX);
-  time (&this_time);
-  if (gnu_dumpfile[0] != '/')
-    {
-#if defined(__MSDOS__) || defined(HAVE_GETCWD) || defined(_POSIX_VERSION)
-      if (!getcwd (path, PATH_MAX))
-       {
-         msg ("Couldn't get current directory.");
-         exit (EX_SYSTEM);
-       }
-#else
-      char *getwd ();
-
-      if (!getwd (path))
-       {
-         msg ("Couldn't get current directory: %s", path);
-         exit (EX_SYSTEM);
-       }
-#endif
-      /* If this doesn't fit, we're in serious trouble */
-      strcat (path, "/");
-      strcat (path, gnu_dumpfile);
-      gnu_dumpfile = path;
-    }
-  fp = fopen (gnu_dumpfile, "r");
-  if (fp == 0 && errno != ENOENT)
-    {
-      msg_perror ("Can't open %s", gnu_dumpfile);
-      return;
-    }
-  if (!fp)
-    return;
-  fgets (buf, sizeof (buf), fp);
-  if (!f_new_files)
-    {
-      f_new_files++;
-      new_time = atol (buf);
-    }
-  while (fgets (buf, sizeof (buf), fp))
-    {
-      strp = &buf[strlen (buf)];
-      if (strp[-1] == '\n')
-       strp[-1] = '\0';
-      strp = buf;
-      dev = atol (strp);
-      while (isdigit (*strp))
-       strp++;
-      ino = atol (strp);
-      while (isspace (*strp))
-       strp++;
-      while (isdigit (*strp))
-       strp++;
-      strp++;
-      add_dir (un_quote_string (strp), dev, ino, (char *) 0);
-    }
-  fclose (fp);
-}
-
-void
-write_dir_file ()
-{
-  FILE *fp;
-  struct dirname *dp;
-  char *str;
-  extern char *quote_copy_string ();
-
-  fp = fopen (gnu_dumpfile, "w");
-  if (fp == 0)
-    {
-      msg_perror ("Can't write to %s", gnu_dumpfile);
-      return;
-    }
-  fprintf (fp, "%lu\n", this_time);
-  for (dp = dir_list; dp; dp = dp->next)
-    {
-      if (!dp->dir_text)
-       continue;
-      str = quote_copy_string (dp->name);
-      if (str)
-       {
-         fprintf (fp, "%u %u %s\n", dp->dev, dp->ino, str);
-         free (str);
-       }
-      else
-       fprintf (fp, "%u %u %s\n", dp->dev, dp->ino, dp->name);
-    }
-  fclose (fp);
-}
-
-struct dirname *
-get_dir (name)
-     char *name;
-{
-  struct dirname *dp;
-
-  for (dp = dir_list; dp; dp = dp->next)
-    {
-      if (!strcmp (dp->name, name))
-       return dp;
-    }
-  return 0;
-}
-
-
-/* Collect all the names from argv[] (or whatever), then expand them into
-   a directory tree, and put all the directories at the beginning. */
-void
-collect_and_sort_names ()
-{
-  struct name *n, *n_next;
-  int num_names;
-  struct stat statbuf;
-  int name_cmp ();
-  char *merge_sort ();
-
-  name_gather ();
-
-  if (gnu_dumpfile)
-    read_dir_file ();
-  if (!namelist)
-    addname (".");
-  for (n = namelist; n; n = n_next)
-    {
-      n_next = n->next;
-      if (n->found || n->dir_contents)
-       continue;
-      if (n->regexp)           /* FIXME just skip regexps for now */
-       continue;
-      if (n->change_dir)
-       if (chdir (n->change_dir) < 0)
-         {
-           msg_perror ("can't chdir to %s", n->change_dir);
-           continue;
-         }
-
-#ifdef AIX
-      if (statx (n->name, &statbuf, STATSIZE, STX_HIDDEN | STX_LINK))
-#else
-      if (lstat (n->name, &statbuf) < 0)
-#endif /* AIX */
-       {
-         msg_perror ("can't stat %s", n->name);
-         continue;
-       }
-      if (S_ISDIR (statbuf.st_mode))
-       {
-         n->found++;
-         add_dir_name (n->name, statbuf.st_dev);
-       }
-    }
-
-  num_names = 0;
-  for (n = namelist; n; n = n->next)
-    num_names++;
-  namelist = (struct name *) merge_sort ((PTR) namelist, num_names, (char *) (&(namelist->next)) - (char *) namelist, name_cmp);
-
-  for (n = namelist; n; n = n->next)
-    {
-      n->found = 0;
-    }
-  if (gnu_dumpfile)
-    write_dir_file ();
-}
-
-int
-name_cmp (n1, n2)
-     struct name *n1, *n2;
-{
-  if (n1->found)
-    {
-      if (n2->found)
-       return strcmp (n1->name, n2->name);
-      else
-       return -1;
-    }
-  else if (n2->found)
-    return 1;
-  else
-    return strcmp (n1->name, n2->name);
-}
-
-int
-dirent_cmp (p1, p2)
-     const PTR p1;
-     const PTR p2;
-{
-  char *frst, *scnd;
-
-  frst = (*(char **) p1) + 1;
-  scnd = (*(char **) p2) + 1;
-
-  return strcmp (frst, scnd);
-}
-
-char *
-get_dir_contents (p, device)
-     char *p;
-     int device;
-{
-  DIR *dirp;
-  register struct dirent *d;
-  char *new_buf;
-  char *namebuf;
-  int bufsiz;
-  int len;
-  PTR the_buffer;
-  char *buf;
-  size_t n_strs;
-  /*   int n_size;*/
-  char *p_buf;
-  char **vec, **p_vec;
-
-  extern int errno;
-
-  errno = 0;
-  dirp = opendir (p);
-  bufsiz = strlen (p) + NAMSIZ;
-  namebuf = ck_malloc (bufsiz + 2);
-  if (!dirp)
-    {
-      if (errno)
-       msg_perror ("can't open directory %s", p);
-      else
-       msg ("error opening directory %s", p);
-      new_buf = NULL;
-    }
-  else
-    {
-      struct dirname *dp;
-      int all_children;
-
-      dp = get_dir (p);
-      all_children = dp ? dp->allnew : 0;
-      (void) strcpy (namebuf, p);
-      if (p[strlen (p) - 1] != '/')
-       (void) strcat (namebuf, "/");
-      len = strlen (namebuf);
-
-      the_buffer = init_buffer ();
-      while (d = readdir (dirp))
-       {
-         struct stat hs;
-
-         /* Skip . and .. */
-         if (is_dot_or_dotdot (d->d_name))
-           continue;
-         if (NLENGTH (d) + len >= bufsiz)
-           {
-             bufsiz += NAMSIZ;
-             namebuf = ck_realloc (namebuf, bufsiz + 2);
-           }
-         (void) strcpy (namebuf + len, d->d_name);
-#ifdef AIX
-         if (0 != f_follow_links ?
-             statx (namebuf, &hs, STATSIZE, STX_HIDDEN) :
-             statx (namebuf, &hs, STATSIZE, STX_HIDDEN | STX_LINK))
-#else
-         if (0 != f_follow_links ? stat (namebuf, &hs) : lstat (namebuf, &hs))
-#endif
-           {
-             msg_perror ("can't stat %s", namebuf);
-             continue;
-           }
-         if ((f_local_filesys && device != hs.st_dev)
-             || (f_exclude && check_exclude (namebuf)))
-           add_buffer (the_buffer, "N", 1);
-#ifdef AIX
-         else if (S_ISHIDDEN (hs.st_mode))
-           {
-             add_buffer (the_buffer, "D", 1);
-             strcat (d->d_name, "A");
-             d->d_namlen++;
-           }
-#endif /* AIX */
-         else if (S_ISDIR (hs.st_mode))
-           {
-             if (dp = get_dir (namebuf))
-               {
-                 if (dp->dev != hs.st_dev
-                     || dp->ino != hs.st_ino)
-                   {
-                     if (f_verbose)
-                       msg ("directory %s has been renamed.", namebuf);
-                     dp->allnew = 1;
-                     dp->dev = hs.st_dev;
-                     dp->ino = hs.st_ino;
-                   }
-                 dp->dir_text = "";
-               }
-             else
-               {
-                 if (f_verbose)
-                   msg ("Directory %s is new", namebuf);
-                 add_dir (namebuf, hs.st_dev, hs.st_ino, "");
-                 dp = get_dir (namebuf);
-                 dp->allnew = 1;
-               }
-             if (all_children)
-               dp->allnew = 1;
-
-             add_buffer (the_buffer, "D", 1);
-           }
-         else if (!all_children
-                  && f_new_files
-                  && new_time > hs.st_mtime
-                  && (f_new_files > 1
-                      || new_time > hs.st_ctime))
-           add_buffer (the_buffer, "N", 1);
-         else
-           add_buffer (the_buffer, "Y", 1);
-         add_buffer (the_buffer, d->d_name, (int) (NLENGTH (d) + 1));
-       }
-      add_buffer (the_buffer, "\000\000", 2);
-      closedir (dirp);
-
-      /* Well, we've read in the contents of the dir, now sort them */
-      buf = get_buffer (the_buffer);
-      if (buf[0] == '\0')
-       {
-         flush_buffer (the_buffer);
-         new_buf = NULL;
-       }
-      else
-       {
-         n_strs = 0;
-         for (p_buf = buf; *p_buf;)
-           {
-             int tmp;
-
-             tmp = strlen (p_buf) + 1;
-             n_strs++;
-             p_buf += tmp;
-           }
-         vec = (char **) ck_malloc (sizeof (char *) * (n_strs + 1));
-         for (p_vec = vec, p_buf = buf; *p_buf; p_buf += strlen (p_buf) + 1)
-           *p_vec++ = p_buf;
-         *p_vec = 0;
-         qsort ((PTR) vec, n_strs, sizeof (char *), dirent_cmp);
-         new_buf = (char *) ck_malloc (p_buf - buf + 2);
-         for (p_vec = vec, p_buf = new_buf; *p_vec; p_vec++)
-           {
-             char *p_tmp;
-
-             for (p_tmp = *p_vec; *p_buf++ = *p_tmp++;)
-               ;
-           }
-         *p_buf++ = '\0';
-         free (vec);
-         flush_buffer (the_buffer);
-       }
-    }
-  free (namebuf);
-  return new_buf;
-}
-
-/* p is a directory.  Add all the files in P to the namelist.  If any of the
-   files is a directory, recurse on the subdirectory. . . */
-static void
-add_dir_name (p, device)
-     char *p;
-     int device;
-{
-  char *new_buf;
-  char *p_buf;
-
-  char *namebuf;
-  int buflen;
-  register int len;
-  int sublen;
-
-  /*   PTR the_buffer;*/
-
-  /*   char *buf;*/
-  /*   char **vec,**p_vec;*/
-  /*   int n_strs,n_size;*/
-
-  struct name *n;
-
-  int dirent_cmp ();
-
-  new_buf = get_dir_contents (p, device);
-
-  for (n = namelist; n; n = n->next)
-    {
-      if (!strcmp (n->name, p))
-       {
-         n->dir_contents = new_buf ? new_buf : "\0\0\0\0";
-         break;
-       }
-    }
-
-  if (new_buf)
-    {
-      len = strlen (p);
-      buflen = NAMSIZ <= len ? len + NAMSIZ : NAMSIZ;
-      namebuf = ck_malloc (buflen + 1);
-
-      (void) strcpy (namebuf, p);
-      if (namebuf[len - 1] != '/')
-       {
-         namebuf[len++] = '/';
-         namebuf[len] = '\0';
-       }
-      for (p_buf = new_buf; *p_buf; p_buf += sublen + 1)
-       {
-         sublen = strlen (p_buf);
-         if (*p_buf == 'D')
-           {
-             if (len + sublen >= buflen)
-               {
-                 buflen += NAMSIZ;
-                 namebuf = ck_realloc (namebuf, buflen + 1);
-               }
-             (void) strcpy (namebuf + len, p_buf + 1);
-             addname (namebuf);
-             add_dir_name (namebuf, device);
-           }
-       }
-      free (namebuf);
-    }
-}
-
-/* Returns non-zero if p is . or ..   This could be a macro for speed. */
-int
-is_dot_or_dotdot (p)
-     char *p;
-{
-  return (p[0] == '.' && (p[1] == '\0' || (p[1] == '.' && p[2] == '\0')));
-}
-
-
-
-
-
-
-void
-gnu_restore (skipcrud)
-     int skipcrud;
-{
-  char *current_dir;
-  /*   int current_dir_length; */
-
-  char *archive_dir;
-  /*   int archive_dir_length; */
-  PTR the_buffer;
-  char *p;
-  DIR *dirp;
-  struct dirent *d;
-  char *cur, *arc;
-  extern struct stat hstat;    /* Stat struct corresponding */
-  long size, copied;
-  char *from, *to;
-  extern union record *head;
-
-  dirp = opendir (skipcrud + current_file_name);
-
-  if (!dirp)
-    {
-      /* The directory doesn't exist now.  It'll be created.
-                          In any case, we don't have to delete any files out
-                          of it */
-      skip_file ((long) hstat.st_size);
-      return;
-    }
-
-  the_buffer = init_buffer ();
-  while (d = readdir (dirp))
-    {
-      if (is_dot_or_dotdot (d->d_name))
-       continue;
-
-      add_buffer (the_buffer, d->d_name, (int) (NLENGTH (d) + 1));
-    }
-  closedir (dirp);
-  add_buffer (the_buffer, "", 1);
-
-  current_dir = get_buffer (the_buffer);
-  archive_dir = (char *) ck_malloc (hstat.st_size);
-  if (archive_dir == 0)
-    {
-      msg ("Can't allocate %d bytes for restore", hstat.st_size);
-      skip_file ((long) hstat.st_size);
-      return;
-    }
-  to = archive_dir;
-  for (size = hstat.st_size; size > 0; size -= copied)
-    {
-      from = findrec ()->charptr;
-      if (!from)
-       {
-         msg ("Unexpected EOF in archive\n");
-         break;
-       }
-      copied = endofrecs ()->charptr - from;
-      if (copied > size)
-       copied = size;
-      bcopy ((PTR) from, (PTR) to, (int) copied);
-      to += copied;
-      userec ((union record *) (from + copied - 1));
-    }
-
-  for (cur = current_dir; *cur; cur += strlen (cur) + 1)
-    {
-      for (arc = archive_dir; *arc; arc += strlen (arc) + 1)
-       {
-         arc++;
-         if (!strcmp (arc, cur))
-           break;
-       }
-      if (*arc == '\0')
-       {
-         p = new_name (skipcrud + current_file_name, cur);
-         if (f_confirm && !confirm ("delete", p))
-           {
-             free (p);
-             continue;
-           }
-         if (f_verbose)
-           fprintf (msg_file, "%s: deleting %s\n", tar, p);
-         if (recursively_delete (p))
-           {
-             msg ("%s: Error while deleting %s\n", tar, p);
-           }
-         free (p);
-       }
-
-    }
-  flush_buffer (the_buffer);
-  free (archive_dir);
-}
-
-int
-recursively_delete (path)
-     char *path;
-{
-  struct stat sbuf;
-  DIR *dirp;
-  struct dirent *dp;
-  char *path_buf;
-  /* int path_len; */
-
-
-  if (lstat (path, &sbuf) < 0)
-    return 1;
-  if (S_ISDIR (sbuf.st_mode))
-    {
-
-      /* path_len=strlen(path); */
-      dirp = opendir (path);
-      if (dirp == 0)
-       return 1;
-      while (dp = readdir (dirp))
-       {
-         if (is_dot_or_dotdot (dp->d_name))
-           continue;
-         path_buf = new_name (path, dp->d_name);
-         if (recursively_delete (path_buf))
-           {
-             free (path_buf);
-             closedir (dirp);
-             return 1;
-           }
-         free (path_buf);
-       }
-      closedir (dirp);
-
-      if (rmdir (path) < 0)
-       return 1;
-      return 0;
-    }
-  if (unlink (path) < 0)
-    return 1;
-  return 0;
-}
diff --git a/src/makefile.pc b/src/makefile.pc
deleted file mode 100644 (file)
index 8ac1e78..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# Makefile for GNU tar on MS-DOS using Turbo C 2.0.
-# Copyright (C) 1991 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-CC = tcc
-RM = rm -f
-
-MODEL = m
-DEFS = -DNONAMES -DNO_REMOTE -DNO_MTIO -DSTDC_HEADERS -m$(MODEL) -Dmain=_main
-LIBS =
-DEF_AR_FILE = tar.out
-DEFBLOCKING = 20
-
-CFLAGS = -I. $(DEFS) \
-       -DDEF_AR_FILE="$(DEF_AR_FILE)" \
-       -DDEFBLOCKING=$(DEFBLOCKING)
-LDFLAGS = -m$(MODEL)
-
-OBJ1 = tar.obj create.obj extract.obj buffer.obj getoldopt.obj update.obj gnu.obj mangle.obj
-OBJ2 = version.obj list.obj names.obj diffarch.obj port.obj wildmat.obj getopt.obj
-OBJ3 =  getopt1.obj regex.obj getdate.obj alloca.obj tcexparg.obj msd_dir.obj
-OBJS = $(OBJ1) $(OBJ2) $(OBJ3)
-
-all:   tar
-
-tar:   testpad.h getdate.c $(OBJS)
-       $(RM) testpad.obj
-       $(CC) $(LDFLAGS) -etar *.obj $(LIBS)
-
-.c.obj:
-       $(CC) -c $(CFLAGS) $<
-
-testpad.h: testpad.exe
-       testpad
-
-testpad.exe: testpad.c
-       $(CC) $(LDFLAGS) -etestpad testpad.c $(LIBS)
-
-clean:
-       $(RM) errs *.obj tar testpad testpad.h
-
-distclean: clean
-
-realclean: clean
diff --git a/src/msd_dir.c b/src/msd_dir.c
deleted file mode 100644 (file)
index ccdc58c..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * @(#)msd_dir.c 1.4 87/11/06  Public Domain.
- *
- *  A public domain implementation of BSD directory routines for
- *  MS-DOS.  Written by Michael Rendell ({uunet,utai}michael@garfield),
- *  August 1897
- */
-
-#include       <sys/types.h>
-#include       <sys/stat.h>
-#include       "msd_dir.h"
-#ifndef __TURBOC__
-#include       <malloc.h>
-#endif
-#include       <string.h>
-#include       <dos.h>
-
-#ifndef        NULL
-# define       NULL    0
-#endif /* NULL */
-
-#ifndef        MAXPATHLEN
-# define       MAXPATHLEN      255
-#endif /* MAXPATHLEN */
-
-/* attribute stuff */
-#define        A_RONLY         0x01
-#define        A_HIDDEN        0x02
-#define        A_SYSTEM        0x04
-#define        A_LABEL         0x08
-#define        A_DIR           0x10
-#define        A_ARCHIVE       0x20
-
-/* dos call values */
-#define        DOSI_FINDF      0x4e
-#define        DOSI_FINDN      0x4f
-#define        DOSI_SDTA       0x1a
-
-#define        Newisnull(a, t)         ((a = (t *) malloc(sizeof(t))) == (t *) NULL)
-/* #define     ATTRIBUTES              (A_DIR | A_HIDDEN | A_SYSTEM) */
-#define ATTRIBUTES     (A_RONLY | A_SYSTEM | A_DIR)
-
-/* what find first/next calls look use */
-typedef struct {
-       char            d_buf[21];
-       char            d_attribute;
-       unsigned short  d_time;
-       unsigned short  d_date;
-       long            d_size;
-       char            d_name[13];
-} Dta_buf;
-
-static char    *getdirent();
-static void    mysetdta();
-static void    free_dircontents();
-
-static Dta_buf         dtabuf;
-static Dta_buf         *dtapnt = &dtabuf;
-static union REGS      reg, nreg;
-
-#if    defined(M_I86LM)
-static struct SREGS    sreg;
-#endif
-
-DIR    *
-opendir(name)
-       char    *name;
-{
-       struct  stat            statb;
-       DIR                     *dirp;
-       char                    c;
-       char                    *s;
-       struct _dircontents     *dp;
-       char                    nbuf[MAXPATHLEN + 1];
-       
-       if (stat(name, &statb) < 0 || (statb.st_mode & S_IFMT) != S_IFDIR)
-               return (DIR *) NULL;
-       if (Newisnull(dirp, DIR))
-               return (DIR *) NULL;
-       if (*name && (c = name[strlen(name) - 1]) != '\\' && c != '/')
-               (void) strcat(strcpy(nbuf, name), "\\*.*");
-       else
-               (void) strcat(strcpy(nbuf, name), "*.*");
-       dirp->dd_loc = 0;
-       mysetdta();
-       dirp->dd_contents = dirp->dd_cp = (struct _dircontents *) NULL;
-       if ((s = getdirent(nbuf)) == (char *) NULL)
-               return dirp;
-       do {
-               if (Newisnull(dp, struct _dircontents) || (dp->_d_entry =
-                       malloc((unsigned) (strlen(s) + 1))) == (char *) NULL)
-               {
-                       if (dp)
-                               free((char *) dp);
-                       free_dircontents(dirp->dd_contents);
-                       return (DIR *) NULL;
-               }
-               if (dirp->dd_contents)
-                       dirp->dd_cp = dirp->dd_cp->_d_next = dp;
-               else
-                       dirp->dd_contents = dirp->dd_cp = dp;
-               (void) strcpy(dp->_d_entry, s);
-               dp->_d_next = (struct _dircontents *) NULL;
-       } while ((s = getdirent((char *) NULL)) != (char *) NULL);
-       dirp->dd_cp = dirp->dd_contents;
-
-       return dirp;
-}
-
-void
-closedir(dirp)
-       DIR     *dirp;
-{
-       free_dircontents(dirp->dd_contents);
-       free((char *) dirp);
-}
-
-struct dirent  *
-readdir(dirp)
-       DIR     *dirp;
-{
-       static  struct dirent   dp;
-       
-       if (dirp->dd_cp == (struct _dircontents *) NULL)
-               return (struct dirent *) NULL;
-       dp.d_namlen = dp.d_reclen =
-               strlen(strcpy(dp.d_name, dirp->dd_cp->_d_entry));
-       strlwr(dp.d_name);              /* JF */
-       dp.d_ino = 0;
-       dirp->dd_cp = dirp->dd_cp->_d_next;
-       dirp->dd_loc++;
-
-       return &dp;
-}
-
-void
-seekdir(dirp, off)
-       DIR     *dirp;
-       long    off;
-{
-       long                    i = off;
-       struct _dircontents     *dp;
-
-       if (off < 0)
-               return;
-       for (dp = dirp->dd_contents ; --i >= 0 && dp ; dp = dp->_d_next)
-               ;
-       dirp->dd_loc = off - (i + 1);
-       dirp->dd_cp = dp;
-}
-
-long
-telldir(dirp)
-       DIR     *dirp;
-{
-       return dirp->dd_loc;
-}
-
-static void
-free_dircontents(dp)
-       struct  _dircontents    *dp;
-{
-       struct _dircontents     *odp;
-
-       while (dp) {
-               if (dp->_d_entry)
-                       free(dp->_d_entry);
-               dp = (odp = dp)->_d_next;
-               free((char *) odp);
-       }
-}
-
-static char    *
-getdirent(dir)
-       char    *dir;
-{
-       if (dir != (char *) NULL) {             /* get first entry */
-               reg.h.ah = DOSI_FINDF;
-               reg.h.cl = ATTRIBUTES;
-#if    defined(M_I86LM)
-               reg.x.dx = FP_OFF(dir);
-               sreg.ds = FP_SEG(dir);
-#else
-               reg.x.dx = (unsigned) dir;
-#endif
-       } else {                                /* get next entry */
-               reg.h.ah = DOSI_FINDN;
-#if    defined(M_I86LM)
-               reg.x.dx = FP_OFF(dtapnt);
-               sreg.ds = FP_SEG(dtapnt);
-#else
-               reg.x.dx = (unsigned) dtapnt;
-#endif
-       }
-#if    defined(M_I86LM)
-       intdosx(&reg, &nreg, &sreg);
-#else
-       intdos(&reg, &nreg);
-#endif
-       if (nreg.x.cflag)
-               return (char *) NULL;
-
-       return dtabuf.d_name;
-}
-
-static void
-mysetdta()
-{
-       reg.h.ah = DOSI_SDTA;
-#if    defined(M_I86LM)
-       reg.x.dx = FP_OFF(dtapnt);
-       sreg.ds = FP_SEG(dtapnt);
-       intdosx(&reg, &nreg, &sreg);
-#else
-       reg.x.dx = (int) dtapnt;
-       intdos(&reg, &nreg);
-#endif
-}
diff --git a/src/msd_dir.h b/src/msd_dir.h
deleted file mode 100644 (file)
index 895c3ef..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * @(#)msd_dir.h 1.4 87/11/06  Public Domain.
- *
- *  A public domain implementation of BSD directory routines for
- *  MS-DOS.  Written by Michael Rendell ({uunet,utai}michael@garfield),
- *  August 1897
- */
-
-#define        rewinddir(dirp) seekdir(dirp, 0L)
-
-#define        MAXNAMLEN       12
-
-#ifdef __TURBOC__
-typedef int ino_t;
-typedef int dev_t;
-#endif
-
-struct direct {
-       ino_t   d_ino;                  /* a bit of a farce */
-       int     d_reclen;               /* more farce */
-       int     d_namlen;               /* length of d_name */
-       char    d_name[MAXNAMLEN + 1];          /* garentee null termination */
-};
-
-struct _dircontents {
-       char    *_d_entry;
-       struct _dircontents     *_d_next;
-};
-
-typedef struct _dirdesc {
-       int             dd_id;  /* uniquely identify each open directory */
-       long            dd_loc; /* where we are in directory entry is this */
-       struct _dircontents     *dd_contents;   /* pointer to contents of dir */
-       struct _dircontents     *dd_cp; /* pointer to current position */
-} DIR;
-
-extern DIR             *opendir();
-extern struct direct   *readdir();
-extern void            seekdir();
-extern long            telldir();
-extern void            closedir();
diff --git a/src/open3.c b/src/open3.c
deleted file mode 100644 (file)
index f83e2b6..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Defines for Sys V style 3-argument open call.
-   Copyright (C) 1988, 1994, 1995, 1996 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published by the
-   Free Software Foundation; either version 2, or (at your option) any later
-   version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
-   Public License for more details.
-
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation, Inc.,
-   59 Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-#include "system.h"
-
-#if EMUL_OPEN3
-
-/* open3.h -- #defines for the various flags for the Sys V style 3-argument
-   open() call.  On BSD or System 5, the system already has this in an
-   include file.  This file is needed for V7 and MINIX systems for the
-   benefit of open3() in port.c, a routine that emulates the 3-argument call
-   using system calls available on V7/MINIX.
-
-   Written 1987-06-10 by Richard Todd.
-
-   The names have been changed by John Gilmore, 1987-07-31, since Richard
-   called it "bsdopen", and really this change was introduced in AT&T Unix
-   systems before BSD picked it up.  */
-
-/*-----------------------------------------------------------------------.
-| open3 -- routine to emulate the 3-argument open system.               |
-|                                                                       |
-| open3 (path, flag, mode);                                             |
-|                                                                       |
-| Attempts to open the file specified by the given pathname.  The       |
-| following flag bits specify options to the routine.  Needless to say,         |
-| you should only specify one of the first three.  Function returns file |
-| descriptor if successful, -1 and errno if not.                        |
-`-----------------------------------------------------------------------*/
-
-/* The routine obeys the following mode arguments:
-
-   O_RDONLY    file open for read only
-   O_WRONLY    file open for write only
-   O_RDWR      file open for both read & write
-
-   O_CREAT     file is created with specified mode if it needs to be
-   O_TRUNC     if file exists, it is truncated to 0 bytes
-   O_EXCL      used with O_CREAT--routine returns error if file exists  */
-
-/* Call that if present in most modern Unix systems.  This version attempts
-   to support all the flag bits except for O_NDELAY and O_APPEND, which are
-   silently ignored.  The emulation is not as efficient as the real thing
-   (at worst, 4 system calls instead of one), but there's not much I can do
-   about that.  */
-
-/* Array to give arguments to access for various modes FIXME, this table
-   depends on the specific integer values of O_*, and also contains
-   integers (args to 'access') that should be #define's.  */
-
-static int modes[] =
-  {
-    04,                                /* O_RDONLY */
-    02,                                /* O_WRONLY */
-    06,                                /* O_RDWR */
-    06,                                /* invalid, just cope: O_WRONLY+O_RDWR */
-  };
-
-/* Shut off the automatic emulation of open(), we'll need it. */
-#undef open
-
-int
-open3 (char *path, int flags, int mode)
-{
-  int exists = 1;
-  int call_creat = 0;
-
-  /* We actually do the work by calling the open() or creat() system
-     call, depending on the flags.  Call_creat is true if we will use
-     creat(), false if we will use open().  */
-
-  /* See if the file exists and is accessible in the requested mode.
-
-     Strictly speaking we shouldn't be using access, since access checks
-     against real uid, and the open call should check against euid.  Most
-     cases real uid == euid, so it won't matter.  FIXME.  FIXME, the
-     construction "flags & 3" and the modes table depends on the specific
-     integer values of the O_* #define's.  Foo!  */
-
-  if (access (path, modes[flags & 3]) < 0)
-    {
-      if (errno == ENOENT)
-       {
-         /* The file does not exist.  */
-
-         exists = 0;
-       }
-      else
-       {
-         /* Probably permission violation.  */
-
-         if (flags & O_EXCL)
-           {
-             /* Oops, the file exists, we didn't want it.  No matter
-                what the error, claim EEXIST.  */
-
-             errno = EEXIST;   /* FIXME: errno should be read-only */
-           }
-         return -1;
-       }
-    }
-
-  /* If we have the O_CREAT bit set, check for O_EXCL.  */
-
-  if (flags & O_CREAT)
-    {
-      if ((flags & O_EXCL) && exists)
-       {
-         /* Oops, the file exists and we didn't want it to.  */
-
-         errno = EEXIST;       /* FIXME: errno should be read-only */
-         return -1;
-       }
-
-      /* If the file doesn't exist, be sure to call creat() so that it
-        will be created with the proper mode.  */
-
-      if (!exists)
-       call_creat = 1;
-    }
-  else
-    {
-      /* If O_CREAT isn't set and the file doesn't exist, error.  */
-
-      if (!exists)
-       {
-         errno = ENOENT;       /* FIXME: errno should be read-only */
-         return -1;
-       }
-    }
-
-  /* If the O_TRUNC flag is set and the file exists, we want to call
-     creat() anyway, since creat() guarantees that the file will be
-     truncated and open()-for-writing doesn't.  (If the file doesn't
-     exist, we're calling creat() anyway and the file will be created
-     with zero length.)  */
-
-  if ((flags & O_TRUNC) && exists)
-    call_creat = 1;
-
-  /* Actually do the call.  */
-
-  if (call_creat)
-
-    /* Call creat.  May have to close and reopen the file if we want
-       O_RDONLY or O_RDWR access -- creat() only gives O_WRONLY.  */
-
-    {
-      int fd = creat (path, mode);
-
-      if (fd < 0 || (flags & O_WRONLY))
-       return fd;
-      if (close (fd) < 0)
-       return -1;
-
-      /* Fall out to reopen the file we've created.  */
-    }
-
-  /* Calling old open, we strip most of the new flags just in case.  */
-
-  return open (path, flags & (O_RDONLY | O_WRONLY | O_RDWR | O_BINARY));
-}
-
-#endif /* EMUL_OPEN3 */
diff --git a/src/open3.h b/src/open3.h
deleted file mode 100644 (file)
index e3e925f..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Defines for Sys V style 3-argument open call.
-   Copyright (C) 1988 Free Software Foundation
-
-This file is part of GNU Tar.
-
-GNU Tar is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Tar is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Tar; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/*
- * @(#)open3.h 1.4 87/11/11
- *
- * open3.h -- #defines for the various flags for the Sys V style 3-argument
- * open() call.  On BSD or System 5, the system already has this in an
- * include file.  This file is needed for V7 and MINIX systems for the
- * benefit of open3() in port.c, a routine that emulates the 3-argument
- * call using system calls available on V7/MINIX. 
- *
- * This file is needed by PD tar even if we aren't using the
- * emulator, since the #defines for O_WRONLY, etc. are used in
- * a couple of places besides the open() calls, (e.g. in the assignment
- * to openflag in extract.c).  We just #include this rather than
- * #ifdef them out.
- *
- * Written 6/10/87 by rmtodd@uokmax (Richard Todd).
- *
- * The names have been changed by John Gilmore, 31 July 1987, since
- * Richard called it "bsdopen", and really this change was introduced in
- * AT&T Unix systems before BSD picked it up.
- */
-
-/* Only one of the next three should be specified */
-#define O_RDONLY        0 /* only allow read */
-#define        O_WRONLY         1 /* only allow write */
-#define        O_RDWR           2 /* both are allowed */
-
-/* The rest of these can be OR-ed in to the above. */
-/*
- * O_NDELAY isn't implemented by the emulator.  It's only useful (to tar) on
- * systems that have named pipes anyway; it prevents tar's hanging by
- * opening a named pipe.  We #ifndef it because some systems already have
- * it defined.
- */
-#ifndef O_NDELAY
-#define O_NDELAY        4 /* don't block on opening devices that would
-                           * block on open -- ignored by emulator. */
-#endif
-#define O_CREAT                 8 /* create file if needed */
-#define O_EXCL         16 /* file cannot already exist */
-#define O_TRUNC                32 /* truncate file on open */
-#define O_APPEND       64 /* always write at end of file -- ignored by emul */
-
-#ifdef EMUL_OPEN3
-/*
- * make emulation transparent to rest of file -- redirect all open() calls
- * to our routine
- */
-#define open   open3
-#endif
diff --git a/src/port.c b/src/port.c
deleted file mode 100644 (file)
index 10ec32e..0000000
+++ /dev/null
@@ -1,1256 +0,0 @@
-/* Supporting routines which may sometimes be missing.
-   Copyright (C) 1988, 1992 Free Software Foundation
-
-This file is part of GNU Tar.
-
-GNU Tar is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Tar is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Tar; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <errno.h>
-#ifndef STDC_HEADERS
-extern int errno;
-#endif
-
-#ifdef BSD42
-#include <sys/file.h>
-#else
-#ifndef V7
-#include <fcntl.h>
-#endif
-#endif
-
-#include "tar.h"
-#include "port.h"
-
-extern long baserec;
-
-/* All machine-dependent #ifdefs should appear here, instead of
-   being scattered through the file.  For UN*X systems, it is better to
-   figure out what is needed in the configure script, for most of the
-   features. */
-
-#ifdef __MSDOS__
-char TTY_NAME[] = "con";
-#define HAVE_STRSTR
-#define HAVE_RENAME
-#define HAVE_MKDIR
-#else
-char TTY_NAME[] = "/dev/tty";
-#endif
-
-/* End of system-dependent #ifdefs */
-
-
-#ifndef HAVE_VALLOC
-/*
- * valloc() does a malloc() on a page boundary.  On some systems,
- * this can make large block I/O more efficient.
- */
-char *
-valloc (size)
-     unsigned size;
-{
-  return (malloc (size));
-}
-
-#endif /* !HAVE_VALLOC */
-
-#ifndef HAVE_MKDIR
-/*
- * Written by Robert Rother, Mariah Corporation, August 1985.
- *
- * If you want it, it's yours.  All I ask in return is that if you
- * figure out how to do this in a Bourne Shell script you send me
- * a copy.
- *                                     sdcsvax!rmr or rmr@uscd
- *
- * Severely hacked over by John Gilmore to make a 4.2BSD compatible
- * subroutine. 11Mar86; hoptoad!gnu
- *
- * Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir,
- * subroutine didn't return EEXIST.  It does now.
- */
-
-/*
- * Make a directory.
- */
-int
-mkdir (dpath, dmode)
-     char *dpath;
-     int dmode;
-{
-  int cpid, status;
-  struct stat statbuf;
-
-  if (stat (dpath, &statbuf) == 0)
-    {
-      errno = EEXIST;          /* Stat worked, so it already exists */
-      return -1;
-    }
-
-  /* If stat fails for a reason other than non-existence, return error */
-  if (errno != ENOENT)
-    return -1;
-
-  switch (cpid = fork ())
-    {
-
-    case -1:                   /* Error in fork() */
-      return (-1);             /* Errno is set already */
-
-    case 0:                    /* Child process */
-      /*
-                * Cheap hack to set mode of new directory.  Since this
-                * child process is going away anyway, we zap its umask.
-                * FIXME, this won't suffice to set SUID, SGID, etc. on this
-                * directory.  Does anybody care?
-                */
-      status = umask (0);      /* Get current umask */
-      status = umask (status | (0777 & ~dmode));       /* Set for mkdir */
-      execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
-      _exit (-1);              /* Can't exec /bin/mkdir */
-
-    default:                   /* Parent process */
-      while (cpid != wait (&status));  /* Wait for kid to finish */
-    }
-
-  if (WIFSIGNALED (status) || WEXITSTATUS (status) != 0)
-    {
-      errno = EIO;             /* We don't know why, but */
-      return -1;               /* /bin/mkdir failed */
-    }
-
-  return 0;
-}
-
-int
-rmdir (dpath)
-     char *dpath;
-{
-  int cpid, status;
-  struct stat statbuf;
-
-  if (stat (dpath, &statbuf) != 0)
-    {
-      /* Stat just set errno.  We don't have to */
-      return -1;
-    }
-
-  switch (cpid = fork ())
-    {
-
-    case -1:                   /* Error in fork() */
-      return (-1);             /* Errno is set already */
-
-    case 0:                    /* Child process */
-      execl ("/bin/rmdir", "rmdir", dpath, (char *) 0);
-      _exit (-1);              /* Can't exec /bin/mkdir */
-
-    default:                   /* Parent process */
-      while (cpid != wait (&status));  /* Wait for kid to finish */
-    }
-
-  if (WIFSIGNALED (status) || WEXITSTATUS (status) != 0)
-    {
-      errno = EIO;             /* We don't know why, but */
-      return -1;               /* /bin/mkdir failed */
-    }
-
-  return 0;
-}
-
-#endif /* !HAVE_MKDIR */
-
-#ifndef HAVE_RENAME
-/* Rename file FROM to file TO.
-   Return 0 if successful, -1 if not. */
-
-int
-rename (from, to)
-     char *from;
-     char *to;
-{
-  struct stat from_stats;
-
-  if (stat (from, &from_stats))
-    return -1;
-
-  if (unlink (to) && errno != ENOENT)
-    return -1;
-
-  if (link (from, to))
-    return -1;
-
-  if (unlink (from) && errno != ENOENT)
-    {
-      unlink (to);
-      return -1;
-    }
-
-  return 0;
-}
-
-#endif /* !HAVE_RENAME */
-
-#ifdef minix
-/* Minix has bcopy but not bzero, and no memset.  Thanks, Andy. */
-void
-bzero (s1, n)
-     register char *s1;
-     register int n;
-{
-  while (n--)
-    *s1++ = '\0';
-}
-
-/* It also has no bcmp() */
-int
-bcmp (s1, s2, n)
-     register char *s1, *s2;
-     register int n;
-{
-  for (; n--; ++s1, ++s2)
-    {
-      if (*s1 != *s2)
-       return *s1 - *s2;
-    }
-  return 0;
-}
-
-/*
- * Groan, Minix doesn't have execlp either!
- *
- * execlp(file,arg0,arg1...argn,(char *)NULL)
- * exec a program, automatically searching for the program through
- * all the directories on the PATH.
- *
- * This version is naive about variable argument lists, it assumes
- * a straightforward C calling sequence.  If your system has odd stacks
- * *and* doesn't have execlp, YOU get to fix it.
- */
-int
-execlp (filename, arg0)
-     char *filename, *arg0;
-{
-  register char *p, *path;
-  register char *fnbuffer;
-  char **argstart = &arg0;
-  struct stat statbuf;
-  extern char **environ;
-
-  if ((p = getenv ("PATH")) == NULL)
-    {
-      /* couldn't find path variable -- try to exec given filename */
-      return execve (filename, argstart, environ);
-    }
-
-  /*
-        * make a place to build the filename.  We malloc larger than we
-        * need, but we know it will fit in this.
-        */
-  fnbuffer = malloc (strlen (p) + 1 + strlen (filename));
-  if (fnbuffer == NULL)
-    {
-      errno = ENOMEM;
-      return -1;
-    }
-
-  /*
-        * try each component of the path to see if the file's there
-        * and executable.
-        */
-  for (path = p; path; path = p)
-    {
-      /* construct full path name to try */
-      if ((p = index (path, ':')) == NULL)
-       {
-         strcpy (fnbuffer, path);
-       }
-      else
-       {
-         strncpy (fnbuffer, path, p - path);
-         fnbuffer[p - path] = '\0';
-         p++;                  /* Skip : for next time */
-       }
-      if (strlen (fnbuffer) != 0)
-       strcat (fnbuffer, "/");
-      strcat (fnbuffer, filename);
-
-      /* check to see if file is there and is a normal file */
-      if (stat (fnbuffer, &statbuf) < 0)
-       {
-         if (errno == ENOENT)
-           continue;           /* file not there,keep on looking */
-         else
-           goto fail;          /* failed for some reason, return */
-       }
-      if (!S_ISREG (statbuf.st_mode))
-       continue;
-
-      if (execve (fnbuffer, argstart, environ) < 0
-         && errno != ENOENT
-         && errno != ENOEXEC)
-       {
-         /* failed, for some other reason besides "file
-                        * not found" or "not a.out format"
-                        */
-         goto fail;
-       }
-
-      /*
-                * If we got error ENOEXEC, the file is executable but is
-                * not an object file.  Try to execute it as a shell script,
-                * returning error if we can't execute /bin/sh.
-                *
-                * FIXME, this code is broken in several ways.  Shell
-                * scripts should not in general be executed by the user's
-                * SHELL variable program.  On more mature systems, the
-                * script can specify with #!/bin/whatever.  Also, this
-                * code clobbers argstart[-1] if the exec of the shell
-                * fails.
-                */
-      if (errno == ENOEXEC)
-       {
-         char *shell;
-
-         /* Try to execute command "sh arg0 arg1 ..." */
-         if ((shell = getenv ("SHELL")) == NULL)
-           shell = "/bin/sh";
-         argstart[-1] = shell;
-         argstart[0] = fnbuffer;
-         execve (shell, &argstart[-1], environ);
-         goto fail;            /* Exec didn't work */
-       }
-
-      /*
-                * If we succeeded, the execve() doesn't return, so we
-                * can only be here is if the file hasn't been found yet.
-                * Try the next place on the path.
-                */
-    }
-
-  /* all attempts failed to locate the file.  Give up. */
-  errno = ENOENT;
-
-fail:
-  free (fnbuffer);
-  return -1;
-}
-
-#endif /* minix */
-
-
-#ifdef EMUL_OPEN3
-#include "open3.h"
-/*
- * open3 -- routine to emulate the 3-argument open system
- * call that is present in most modern Unix systems.
- * This version attempts to support all the flag bits except for O_NDELAY
- * and O_APPEND, which are silently ignored.  The emulation is not as efficient
- * as the real thing (at worst, 4 system calls instead of one), but there's
- * not much I can do about that.
- *
- * Written 6/10/87 by rmtodd@uokmax
- *
- * open3(path, flag, mode)
- * Attempts to open the file specified by
- * the given pathname.  The following flag bits (#defined in tar.h)
- * specify options to the routine:
- *     O_RDONLY        file open for read only
- *     O_WRONLY        file open for write only
- *     O_RDWR          file open for both read & write
- * (Needless to say, you should only specify one of the above).
- *     O_CREAT         file is created with specified mode if it needs to be.
- *     O_TRUNC         if file exists, it is truncated to 0 bytes
- *     O_EXCL          used with O_CREAT--routine returns error if file exists
- * Function returns file descriptor if successful, -1 and errno if not.
- */
-
-/*
- * array to give arguments to access for various modes
- * FIXME, this table depends on the specific integer values of O_XXX,
- * and also contains integers (args to 'access') that should be #define's.
- */
-static int modes[] =
-{
-  04,                          /* O_RDONLY */
-  02,                          /* O_WRONLY */
-  06,                          /* O_RDWR */
-  06,                          /* invalid but we'd better cope -- O_WRONLY+O_RDWR */
-};
-
-/* Shut off the automatic emulation of open(), we'll need it. */
-#undef open
-
-int
-open3 (path, flags, mode)
-     char *path;
-     int flags, mode;
-{
-  int exists = 1;
-  int call_creat = 0;
-  int fd;
-  /*
-        * We actually do the work by calling the open() or creat() system
-        * call, depending on the flags.  Call_creat is true if we will use
-        * creat(), false if we will use open().
-        */
-
-  /*
-        * See if the file exists and is accessible in the requested mode.
-        *
-        * Strictly speaking we shouldn't be using access, since access checks
-        * against real uid, and the open call should check against euid.
-        * Most cases real uid == euid, so it won't matter.   FIXME.
-        * FIXME, the construction "flags & 3" and the modes table depends
-        * on the specific integer values of the O_XXX #define's.  Foo!
-        */
-  if (access (path, modes[flags & 3]) < 0)
-    {
-      if (errno == ENOENT)
-       {
-         /* the file does not exist */
-         exists = 0;
-       }
-      else
-       {
-         /* probably permission violation */
-         if (flags & O_EXCL)
-           {
-             /* Oops, the file exists, we didn't want it. */
-             /* No matter what the error, claim EEXIST. */
-             errno = EEXIST;
-           }
-         return -1;
-       }
-    }
-
-  /* if we have the O_CREAT bit set, check for O_EXCL */
-  if (flags & O_CREAT)
-    {
-      if ((flags & O_EXCL) && exists)
-       {
-         /* Oops, the file exists and we didn't want it to. */
-         errno = EEXIST;
-         return -1;
-       }
-      /*
-                * If the file doesn't exist, be sure to call creat() so that
-                * it will be created with the proper mode.
-                */
-      if (!exists)
-       call_creat = 1;
-    }
-  else
-    {
-      /* If O_CREAT isn't set and the file doesn't exist, error. */
-      if (!exists)
-       {
-         errno = ENOENT;
-         return -1;
-       }
-    }
-
-  /*
-        * If the O_TRUNC flag is set and the file exists, we want to call
-        * creat() anyway, since creat() guarantees that the file will be
-        * truncated and open()-for-writing doesn't.
-        * (If the file doesn't exist, we're calling creat() anyway and the
-        * file will be created with zero length.)
-        */
-  if ((flags & O_TRUNC) && exists)
-    call_creat = 1;
-  /* actually do the call */
-  if (call_creat)
-    {
-      /*
-                * call creat.  May have to close and reopen the file if we
-                * want O_RDONLY or O_RDWR access -- creat() only gives
-                * O_WRONLY.
-                */
-      fd = creat (path, mode);
-      if (fd < 0 || (flags & O_WRONLY))
-       return fd;
-      if (close (fd) < 0)
-       return -1;
-      /* Fall out to reopen the file we've created */
-    }
-
-  /*
-        * calling old open, we strip most of the new flags just in case.
-        */
-  return open (path, flags & (O_RDONLY | O_WRONLY | O_RDWR | O_BINARY));
-}
-
-#endif /* EMUL_OPEN3 */
-
-#ifndef HAVE_MKNOD
-#ifdef __MSDOS__
-typedef int dev_t;
-#endif
-/* Fake mknod by complaining */
-int
-mknod (path, mode, dev)
-     char *path;
-     unsigned short mode;
-     dev_t dev;
-{
-  int fd;
-
-  errno = ENXIO;               /* No such device or address */
-  return -1;                   /* Just give an error */
-}
-
-/* Fake links by copying */
-int
-link (path1, path2)
-     char *path1;
-     char *path2;
-{
-  char buf[256];
-  int ifd, ofd;
-  int nrbytes;
-  int nwbytes;
-
-  fprintf (stderr, "%s: %s: cannot link to %s, copying instead\n",
-          tar, path1, path2);
-  if ((ifd = open (path1, O_RDONLY | O_BINARY)) < 0)
-    return -1;
-  if ((ofd = creat (path2, 0666)) < 0)
-    return -1;
-  setmode (ofd, O_BINARY);
-  while ((nrbytes = read (ifd, buf, sizeof (buf))) > 0)
-    {
-      if ((nwbytes = write (ofd, buf, nrbytes)) != nrbytes)
-       {
-         nrbytes = -1;
-         break;
-       }
-    }
-  /* Note use of "|" rather than "||" below: we want to close
-        * the files even if an error occurs.
-        */
-  if ((nrbytes < 0) | (0 != close (ifd)) | (0 != close (ofd)))
-    {
-      unlink (path2);
-      return -1;
-    }
-  return 0;
-}
-
-/* everyone owns everything on MS-DOS (or is it no one owns anything?) */
-int
-chown (path, uid, gid)
-     char *path;
-     int uid;
-     int gid;
-{
-  return 0;
-}
-
-int
-geteuid ()
-{
-  return 0;
-}
-
-#endif /* !HAVE_MKNOD */
-
-#ifdef __TURBOC__
-#include <time.h>
-#include <fcntl.h>
-#include <io.h>
-
-struct utimbuf
-{
-  time_t actime;               /* Access time. */
-  time_t modtime;              /* Modification time. */
-};
-
-int
-utime (char *filename, struct utimbuf *utb)
-{
-  struct tm *tm;
-  struct ftime filetime;
-  time_t when;
-  int fd;
-  int status;
-
-  if (utb == 0)
-    when = time (0);
-  else
-    when = utb->modtime;
-
-  fd = _open (filename, O_RDWR);
-  if (fd == -1)
-    return -1;
-
-  tm = localtime (&when);
-  if (tm->tm_year < 80)
-    filetime.ft_year = 0;
-  else
-    filetime.ft_year = tm->tm_year - 80;
-  filetime.ft_month = tm->tm_mon + 1;
-  filetime.ft_day = tm->tm_mday;
-  if (tm->tm_hour < 0)
-    filetime.ft_hour = 0;
-  else
-    filetime.ft_hour = tm->tm_hour;
-  filetime.ft_min = tm->tm_min;
-  filetime.ft_tsec = tm->tm_sec / 2;
-
-  status = setftime (fd, &filetime);
-  _close (fd);
-  return status;
-}
-
-#endif /* __TURBOC__ */
-
-/* Stash argv[0] here so panic will know what the program is called */
-char *myname = 0;
-
-void
-panic (s)
-     char *s;
-{
-  if (myname)
-    fprintf (stderr, "%s:", myname);
-  fprintf (stderr, s);
-  putc ('\n', stderr);
-  exit (12);
-}
-
-
-PTR
-ck_malloc (size)
-     size_t size;
-{
-  PTR ret;
-
-  if (!size)
-    size++;
-  ret = malloc (size);
-  if (ret == 0)
-    panic ("Couldn't allocate memory");
-  return ret;
-}
-
-/* Used by alloca.c and bison.simple. */
-char *
-xmalloc (size)
-     size_t size;
-{
-  return (char *) ck_malloc (size);
-}
-
-PTR
-ck_realloc (ptr, size)
-     PTR ptr;
-     size_t size;
-{
-  PTR ret;
-
-  if (!ptr)
-    ret = ck_malloc (size);
-  else
-    ret = realloc (ptr, size);
-  if (ret == 0)
-    panic ("Couldn't re-allocate memory");
-  return ret;
-}
-
-/* Implement a variable sized buffer of 'stuff'.  We don't know what it is,
-   nor do we care, as long as it doesn't mind being aligned on a char boundry.
- */
-
-struct buffer
-  {
-    int allocated;
-    int length;
-    char *b;
-  };
-
-#define MIN_ALLOCATE 50
-
-char *
-init_buffer ()
-{
-  struct buffer *b;
-
-  b = (struct buffer *) ck_malloc (sizeof (struct buffer));
-  b->allocated = MIN_ALLOCATE;
-  b->b = (char *) ck_malloc (MIN_ALLOCATE);
-  b->length = 0;
-  return (char *) b;
-}
-
-void
-flush_buffer (bb)
-     char *bb;
-{
-  struct buffer *b;
-
-  b = (struct buffer *) bb;
-  free (b->b);
-  b->b = 0;
-  b->allocated = 0;
-  b->length = 0;
-  free ((void *) b);
-}
-
-void
-add_buffer (bb, p, n)
-     char *bb;
-     char *p;
-     int n;
-{
-  struct buffer *b;
-
-  b = (struct buffer *) bb;
-  if (b->length + n > b->allocated)
-    {
-      b->allocated = b->length + n + MIN_ALLOCATE;
-      b->b = (char *) ck_realloc (b->b, b->allocated);
-    }
-  bcopy (p, b->b + b->length, n);
-  b->length += n;
-}
-
-char *
-get_buffer (bb)
-     char *bb;
-{
-  struct buffer *b;
-
-  b = (struct buffer *) bb;
-  return b->b;
-}
-
-char *
-merge_sort (list, n, off, cmp)
-     char *list;
-     int (*cmp) ();
-     unsigned n;
-     int off;
-{
-  char *ret;
-
-  char *alist, *blist;
-  unsigned alength, blength;
-
-  char *tptr;
-  int tmp;
-  char **prev;
-#define NEXTOF(ptr)    (* ((char **)(((char *)(ptr))+off) ) )
-  if (n == 1)
-    return list;
-  if (n == 2)
-    {
-      if ((*cmp) (list, NEXTOF (list)) > 0)
-       {
-         ret = NEXTOF (list);
-         NEXTOF (ret) = list;
-         NEXTOF (list) = 0;
-         return ret;
-       }
-      return list;
-    }
-  alist = list;
-  alength = (n + 1) / 2;
-  blength = n / 2;
-  for (tptr = list, tmp = (n - 1) / 2; tmp; tptr = NEXTOF (tptr), tmp--)
-    ;
-  blist = NEXTOF (tptr);
-  NEXTOF (tptr) = 0;
-
-  alist = merge_sort (alist, alength, off, cmp);
-  blist = merge_sort (blist, blength, off, cmp);
-  prev = &ret;
-  for (; alist && blist;)
-    {
-      if ((*cmp) (alist, blist) < 0)
-       {
-         tptr = NEXTOF (alist);
-         *prev = alist;
-         prev = &(NEXTOF (alist));
-         alist = tptr;
-       }
-      else
-       {
-         tptr = NEXTOF (blist);
-         *prev = blist;
-         prev = &(NEXTOF (blist));
-         blist = tptr;
-       }
-    }
-  if (alist)
-    *prev = alist;
-  else
-    *prev = blist;
-
-  return ret;
-}
-
-void
-ck_close (fd)
-     int fd;
-{
-  if (close (fd) < 0)
-    {
-      msg_perror ("can't close a file #%d", fd);
-      exit (EX_SYSTEM);
-    }
-}
-
-#include <ctype.h>
-
-/* Quote_copy_string is like quote_string, but instead of modifying the
-   string in place, it malloc-s a copy  of the string, and returns that.
-   If the string does not have to be quoted, it returns the NULL string.
-   The allocated copy can, of course, be freed with free() after the
-   caller is done with it.
- */
-char *
-quote_copy_string (string)
-     char *string;
-{
-  char *from_here;
-  char *to_there = 0;
-  char *copy_buf = 0;
-  int c;
-  int copying = 0;
-
-  from_here = string;
-  while (*from_here)
-    {
-      c = *from_here++;
-      if (c == '\\')
-       {
-         if (!copying)
-           {
-             int n;
-
-             n = (from_here - string) - 1;
-             copying++;
-             copy_buf = (char *) malloc (n + 5 + strlen (from_here) * 4);
-             if (!copy_buf)
-               return 0;
-             bcopy (string, copy_buf, n);
-             to_there = copy_buf + n;
-           }
-         *to_there++ = '\\';
-         *to_there++ = '\\';
-       }
-      else if (isprint (c))
-       {
-         if (copying)
-           *to_there++ = c;
-       }
-      else
-       {
-         if (!copying)
-           {
-             int n;
-
-             n = (from_here - string) - 1;
-             copying++;
-             copy_buf = (char *) malloc (n + 5 + strlen (from_here) * 4);
-             if (!copy_buf)
-               return 0;
-             bcopy (string, copy_buf, n);
-             to_there = copy_buf + n;
-           }
-         *to_there++ = '\\';
-         if (c == '\n')
-           *to_there++ = 'n';
-         else if (c == '\t')
-           *to_there++ = 't';
-         else if (c == '\f')
-           *to_there++ = 'f';
-         else if (c == '\b')
-           *to_there++ = 'b';
-         else if (c == '\r')
-           *to_there++ = 'r';
-         else if (c == '\177')
-           *to_there++ = '?';
-         else
-           {
-             to_there[0] = (c >> 6) + '0';
-             to_there[1] = ((c >> 3) & 07) + '0';
-             to_there[2] = (c & 07) + '0';
-             to_there += 3;
-           }
-       }
-    }
-  if (copying)
-    {
-      *to_there = '\0';
-      return copy_buf;
-    }
-  return (char *) 0;
-}
-
-
-/* Un_quote_string takes a quoted c-string (like those produced by
-   quote_string or quote_copy_string and turns it back into the
-   un-quoted original.  This is done in place.
- */
-
-/* There is no un-quote-copy-string.  Write it yourself */
-
-char *
-un_quote_string (string)
-     char *string;
-{
-  char *ret;
-  char *from_here;
-  char *to_there;
-  int tmp;
-
-  ret = string;
-  to_there = string;
-  from_here = string;
-  while (*from_here)
-    {
-      if (*from_here != '\\')
-       {
-         if (from_here != to_there)
-           *to_there++ = *from_here++;
-         else
-           from_here++, to_there++;
-         continue;
-       }
-      switch (*++from_here)
-       {
-       case '\\':
-         *to_there++ = *from_here++;
-         break;
-       case 'n':
-         *to_there++ = '\n';
-         from_here++;
-         break;
-       case 't':
-         *to_there++ = '\t';
-         from_here++;
-         break;
-       case 'f':
-         *to_there++ = '\f';
-         from_here++;
-         break;
-       case 'b':
-         *to_there++ = '\b';
-         from_here++;
-         break;
-       case 'r':
-         *to_there++ = '\r';
-         from_here++;
-         break;
-       case '?':
-         *to_there++ = 0177;
-         from_here++;
-         break;
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-         tmp = *from_here - '0';
-         from_here++;
-         if (*from_here < '0' || *from_here > '7')
-           {
-             *to_there++ = tmp;
-             break;
-           }
-         tmp = tmp * 8 + *from_here - '0';
-         from_here++;
-         if (*from_here < '0' || *from_here > '7')
-           {
-             *to_there++ = tmp;
-             break;
-           }
-         tmp = tmp * 8 + *from_here - '0';
-         from_here++;
-         *to_there = tmp;
-         break;
-       default:
-         ret = 0;
-         *to_there++ = '\\';
-         *to_there++ = *from_here++;
-         break;
-       }
-    }
-  if (*to_there)
-    *to_there++ = '\0';
-  return ret;
-}
-
-#ifndef __MSDOS__
-void 
-ck_pipe (pipes)
-     int *pipes;
-{
-  if (pipe (pipes) < 0)
-    {
-      msg_perror ("can't open a pipe");
-      exit (EX_SYSTEM);
-    }
-}
-#endif /* !__MSDOS__ */
-
-#ifndef HAVE_STRSTR
-/*
- * strstr - find first occurrence of wanted in s
- */
-
-char *                         /* found string, or NULL if none */
-strstr (s, wanted)
-     char *s;
-     char *wanted;
-{
-  register char *scan;
-  register size_t len;
-  register char firstc;
-
-  if (*wanted == '\0')
-    return (char *) 0;
-  /*
-        * The odd placement of the two tests is so "" is findable.
-        * Also, we inline the first char for speed.
-        * The ++ on scan has been moved down for optimization.
-        */
-  firstc = *wanted;
-  len = strlen (wanted);
-  for (scan = s; *scan != firstc || strncmp (scan, wanted, len) != 0;)
-    if (*scan++ == '\0')
-      return (char *) 0;
-  return scan;
-}
-
-#endif /* !HAVE_STRSTR */
-
-#ifndef HAVE_FTRUNCATE
-
-#ifdef F_CHSIZE
-int
-ftruncate (fd, length)
-     int fd;
-     off_t length;
-{
-  return fcntl (fd, F_CHSIZE, length);
-}
-
-#else /* !F_CHSIZE */
-#ifdef F_FREESP
-/* code courtesy of William Kucharski, kucharsk@Solbourne.com */
-
-int
-ftruncate (fd, length)
-     int fd;                   /* file descriptor */
-     off_t length;             /* length to set file to */
-{
-  struct flock fl;
-
-  fl.l_whence = 0;
-  fl.l_len = 0;
-  fl.l_start = length;
-  fl.l_type = F_WRLCK;         /* write lock on file space */
-
-  /*
-        * This relies on the UNDOCUMENTED F_FREESP argument to
-        * fcntl(2), which truncates the file so that it ends at the
-        * position indicated by fl.l_start.
-        *
-        * Will minor miracles never cease?
-        */
-
-  if (fcntl (fd, F_FREESP, &fl) < 0)
-    return -1;
-
-  return 0;
-}
-
-#else /* !F_FREESP */
-
-int
-ftruncate (fd, length)
-     int fd;
-     off_t length;
-{
-  errno = EIO;
-  return -1;
-}
-
-#endif /* !F_FREESP */
-#endif /* !F_CHSIZE */
-#endif /* !HAVE_FTRUNCATE */
-
-
-extern FILE *msg_file;
-
-#if defined (HAVE_VPRINTF) && __STDC__
-#include <stdarg.h>
-
-void
-msg (char *str,...)
-{
-  va_list args;
-
-  va_start (args, str);
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  vfprintf (stderr, str, args);
-  va_end (args);
-  putc ('\n', stderr);
-  fflush (stderr);
-}
-
-void
-msg_perror (char *str,...)
-{
-  va_list args;
-  int save_e;
-
-  save_e = errno;
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  va_start (args, str);
-  vfprintf (stderr, str, args);
-  va_end (args);
-  errno = save_e;
-  perror (" ");
-  fflush (stderr);
-}
-
-#endif /* HAVE_VPRINTF and __STDC__ */
-
-#if defined(HAVE_VPRINTF) && !__STDC__
-#include <varargs.h>
-void
-msg (str, va_alist)
-     char *str;
-     va_dcl
-{
-  va_list args;
-
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  va_start (args);
-  vfprintf (stderr, str, args);
-  va_end (args);
-  putc ('\n', stderr);
-  fflush (stderr);
-}
-
-void
-msg_perror (str, va_alist)
-     char *str;
-     va_dcl
-{
-  va_list args;
-  int save_e;
-
-  save_e = errno;
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  va_start (args);
-  vfprintf (stderr, str, args);
-  va_end (args);
-  errno = save_e;
-  perror (" ");
-  fflush (stderr);
-}
-
-#endif /* HAVE_VPRINTF and not __STDC__ */
-
-#if !defined(HAVE_VPRINTF) && defined(HAVE_DOPRNT)
-void
-msg (str, args)
-     char *str;
-     int args;
-{
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  _doprnt (str, &args, stderr);
-  putc ('\n', stderr);
-  fflush (stderr);
-}
-
-void
-msg_perror (str, args)
-     char *str;
-     int args;
-{
-  int save_e;
-
-  save_e = errno;
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  _doprnt (str, &args, stderr);
-  errno = save_e;
-  perror (" ");
-  fflush (stderr);
-}
-
-#endif /* !HAVE_VPRINTF and HAVE_DOPRNT */
-
-#if !defined(HAVE_VPRINTF) && !defined(HAVE_DOPRNT)
-void 
-msg (str, a1, a2, a3, a4, a5, a6)
-     char *str;
-{
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  fprintf (stderr, str, a1, a2, a3, a4, a5, a6);
-  putc ('\n', stderr);
-  fflush (stderr);
-}
-
-void
-msg_perror (str, a1, a2, a3, a4, a5, a6)
-     char *str;
-{
-  int save_e;
-
-  save_e = errno;
-  fflush (msg_file);
-  fprintf (stderr, "%s: ", tar);
-  if (f_sayblock)
-    fprintf (stderr, "rec %d: ", baserec + (ar_record - ar_block));
-  fprintf (stderr, str, a1, a2, a3, a4, a5, a6);
-  fprintf (stderr, ": ");
-  errno = save_e;
-  perror (" ");
-}
-
-#endif /* !HAVE_VPRINTF and !HAVE_DOPRNT */
diff --git a/src/port.h b/src/port.h
deleted file mode 100644 (file)
index 4e65a9a..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-/* Portability declarations.  Requires sys/types.h.
-   Copyright (C) 1988, 1992 Free Software Foundation
-
-This file is part of GNU Tar.
-
-GNU Tar is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Tar is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Tar; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-/* AIX requires this to be the first thing in the file. */
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not __GNUC__ */
-#if HAVE_ALLOCA_H
-#include <alloca.h>
-#else /* not HAVE_ALLOCA_H */
-#ifdef _AIX
- #pragma alloca
-#else /* not _AIX */
-char *alloca ();
-#endif /* not _AIX */
-#endif /* not HAVE_ALLOCA_H */
-#endif /* not __GNUC__ */
-
-#include "pathmax.h"
-
-#ifdef _POSIX_VERSION
-#include <sys/wait.h>
-#else /* !_POSIX_VERSION */
-#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f)
-#define WIFSIGNALED(w) (((w) & 0xff) != 0x7f && ((w) & 0xff) != 0)
-#define WIFEXITED(w) (((w) & 0xff) == 0)
-
-#define WSTOPSIG(w) (((w) >> 8) & 0xff)
-#define WTERMSIG(w) ((w) & 0x7f)
-#define WEXITSTATUS(w) (((w) >> 8) & 0xff)
-#endif /* _POSIX_VERSION */
-
-/* nonstandard */
-#ifndef WIFCOREDUMPED
-#define WIFCOREDUMPED(w) (((w) & 0x80) != 0)
-#endif
-
-#ifdef __MSDOS__
-/* missing things from sys/stat.h */
-#define        S_ISUID         0
-#define        S_ISGID         0
-#define        S_ISVTX         0
-
-/* device stuff */
-#define        makedev(ma, mi)         ((ma << 8) | mi)
-#define        major(dev)              (dev)
-#define        minor(dev)              (dev)
-typedef long off_t;
-#endif /* __MSDOS__ */
-
-#if defined(__STDC__) || defined(__TURBOC__)
-#define PTR void *
-#else
-#define PTR char *
-#define const
-#endif
-
-/* Since major is a function on SVR4, we can't just use `ifndef major'.  */
-#ifdef major                   /* Might be defined in sys/types.h.  */
-#define HAVE_MAJOR
-#endif
-
-#if !defined(HAVE_MAJOR) && defined(MAJOR_IN_MKDEV)
-#include <sys/mkdev.h>
-#define HAVE_MAJOR
-#endif
-
-#if !defined(HAVE_MAJOR) && defined(MAJOR_IN_SYSMACROS)
-#include <sys/sysmacros.h>
-#define HAVE_MAJOR
-#endif
-
-#ifndef HAVE_MAJOR
-#define major(dev)  (((dev) >> 8) & 0xff)
-#define minor(dev)  ((dev) & 0xff)
-#define makedev(maj, min)  (((maj) << 8) | (min))
-#endif
-#undef HAVE_MAJOR
-
-#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
-#include <string.h>
-#if !defined(__MSDOS__) && !defined(STDC_HEADERS)
-#include <memory.h>
-#endif
-#ifdef index
-#undef index
-#endif
-#ifdef rindex
-#undef rindex
-#endif
-#define index strchr
-#define rindex strrchr
-#define bcopy(s, d, n) memcpy(d, s, n)
-#define bzero(s, n) memset(s, 0, n)
-#define bcmp memcmp
-#else
-#include <strings.h>
-#endif
-
-#if defined(STDC_HEADERS)
-#include <stdlib.h>
-#else
-char *malloc (), *realloc ();
-char *getenv ();
-#endif
-
-#ifndef _POSIX_VERSION
-#ifdef __MSDOS__
-#include <io.h>
-#else /* !__MSDOS__ */
-off_t lseek ();
-#endif /* !__MSDOS__ */
-char *getcwd ();
-#endif /* !_POSIX_VERSION */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef        O_BINARY
-#define        O_BINARY        0
-#endif
-#ifndef O_CREAT
-#define O_CREAT                0
-#endif
-#ifndef        O_NDELAY
-#define        O_NDELAY        0
-#endif
-#ifndef        O_RDONLY
-#define        O_RDONLY        0
-#endif
-#ifndef O_RDWR
-#define O_RDWR         2
-#endif
-
-#include <sys/stat.h>
-#ifndef S_ISREG                        /* Doesn't have POSIX.1 stat stuff. */
-#define mode_t unsigned short
-#endif
-#if !defined(S_ISBLK) && defined(S_IFBLK)
-#define        S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-#endif
-#if !defined(S_ISCHR) && defined(S_IFCHR)
-#define        S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-#endif
-#if !defined(S_ISDIR) && defined(S_IFDIR)
-#define        S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#endif
-#if !defined(S_ISREG) && defined(S_IFREG)
-#define        S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-#if !defined(S_ISFIFO) && defined(S_IFIFO)
-#define        S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-#define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))
-#endif
-#if !defined(S_ISLNK) && defined(S_IFLNK)
-#define        S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-#endif
-#if !defined(S_ISSOCK) && defined(S_IFSOCK)
-#define        S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
-#endif
-#if !defined(S_ISMPB) && defined(S_IFMPB)      /* V7 */
-#define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
-#define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
-#endif
-#if !defined(S_ISNWK) && defined(S_IFNWK)      /* HP/UX */
-#define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
-#endif
-#if !defined(S_ISCTG) && defined(S_IFCTG)      /* contiguous file */
-#define S_ISCTG(m) (((m) & S_IFMT) == S_IFCTG)
-#endif
-#if !defined(S_ISVTX)
-#define S_ISVTX 0001000
-#endif
-
-#ifdef __MSDOS__
-#include "msd_dir.h"
-#define NLENGTH(direct) ((direct)->d_namlen)
-
-#else /* not __MSDOS__ */
-
-#if defined(DIRENT) || defined(_POSIX_VERSION)
-#include <dirent.h>
-#define NLENGTH(direct) (strlen((direct)->d_name))
-#else /* not (DIRENT or _POSIX_VERSION) */
-#define dirent direct
-#define NLENGTH(direct) ((direct)->d_namlen)
-#ifdef SYSNDIR
-#include <sys/ndir.h>
-#endif /* SYSNDIR */
-#ifdef SYSDIR
-#include <sys/dir.h>
-#endif /* SYSDIR */
-#ifdef NDIR
-#include <ndir.h>
-#endif /* NDIR */
-#endif /* DIRENT or _POSIX_VERSION */
-
-#endif /* not __MSDOS__ */
diff --git a/src/read_ffs.c b/src/read_ffs.c
deleted file mode 100644 (file)
index d440d95..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Read files directly from the fast file system
-   Copyright (C) 1992 Free Software Foundation 
-
-This file is part of GNU Tar.
-
-   GNU Tar is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   GNU Tar is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with GNU Tar; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-
-
-
diff --git a/src/tcexparg.c b/src/tcexparg.c
deleted file mode 100644 (file)
index c5d88f0..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/* tcexparg.c - Unix-style command line wildcards for Turbo C 2.0
-
-   This file is in the public domain.
-
-   Compile your main program with -Dmain=_main and link with this file.
-
-   After that, it is just as if the operating system had expanded the
-   arguments, except that they are not sorted.  The program name and all
-   arguments that are expanded from wildcards are lowercased.
-
-   Syntax for wildcards:
-   *           Matches zero or more of any character (except a '.' at
-               the beginning of a name).
-   ?           Matches any single character.
-   [r3z]       Matches 'r', '3', or 'z'.
-   [a-d]       Matches a single character in the range 'a' through 'd'.
-   [!a-d]      Matches any single character except a character in the
-               range 'a' through 'd'.
-
-   The period between the filename root and its extension need not be
-   given explicitly.  Thus, the pattern `a*e' will match 'abacus.exe'
-   and 'axyz.e' as well as 'apple'.  Comparisons are not case sensitive.
-
-   Authors:
-   The expargs code is a modification of wildcard expansion code
-   written for Turbo C 1.0 by
-   Richard Hargrove
-   Texas Instruments, Inc.
-   P.O. Box 869305, m/s 8473
-   Plano, Texas 75086
-   214/575-4128
-   and posted to USENET in September, 1987.
-
-   The wild_match code was written by Rich Salz, rsalz@bbn.com,
-   posted to net.sources in November, 1986.
-
-   The code connecting the two is by Mike Slomin, bellcore!lcuxa!mike2,
-   posted to comp.sys.ibm.pc in November, 1988.
-
-   Major performance enhancements and bug fixes, and source cleanup,
-   by David MacKenzie, djm@gnu.ai.mit.edu.  */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <dos.h>
-#include <dir.h>
-
-/* Number of new arguments to allocate space for at a time.  */
-#define ARGS_INCREMENT 10
-
-/* The name this program was run with, for error messages.  */
-static char *program_name;
-
-static char **grow_argv (char **new_argv, int new_argc);
-static void fatal_error (const char *message);
-
-int wild_match (char *string, char *pattern);
-char *basename (char *path);
-
-char **expargs (int *, char **);
-
-#ifdef main
-#undef main
-#endif
-
-int
-main (int argc, char **argv, char **envp)
-{
-  argv = expargs (&argc, argv);
-  return _main (argc, argv, envp);
-}
-
-char **
-expargs (int *pargc, char **argv)
-{
-  char path[MAXPATH + 1];
-  char **new_argv;
-  struct ffblk block;
-  char *path_base;
-  char *arg_base;
-  int argind;
-  int new_argc;
-  int path_length;
-  int matched;
-
-  program_name = argv[0];
-  if (program_name && *program_name)
-    strlwr (program_name);
-  new_argv = grow_argv (NULL, 0);
-  new_argv[0] = argv[0];
-  new_argc = 1;
-
-  for (argind = 1; argind < *pargc; ++argind)
-    {
-      matched = 0;
-      if (strpbrk (argv[argind], "?*[") != NULL)
-       {
-         strncpy (path, argv[argind], MAXPATH - 3);
-         path_base = basename (path);
-         strcpy (path_base, "*.*");
-         arg_base = argv[argind] + (path_base - path);
-
-         if (!findfirst (path, &block, FA_DIREC))
-           {
-             strlwr (path);
-             do
-               {
-                 /* Only match "." and ".." explicitly.  */
-                 if (*block.ff_name == '.' && *arg_base != '.')
-                   continue;
-                 path_length = stpcpy (path_base, block.ff_name) - path + 1;
-                 strlwr (path_base);
-                 if (wild_match (path, argv[argind]))
-                   {
-                     matched = 1;
-                     new_argv[new_argc] = (char *) malloc (path_length);
-                     if (new_argv[new_argc] == NULL)
-                       fatal_error ("memory exhausted");
-                     strcpy (new_argv[new_argc++], path);
-                     new_argv = grow_argv (new_argv, new_argc);
-                   }
-             } while (!findnext (&block));
-           }
-       }
-      if (matched == 0)
-       new_argv[new_argc++] = argv[argind];
-      new_argv = grow_argv (new_argv, new_argc);
-    }
-
-  *pargc = new_argc;
-  new_argv[new_argc] = NULL;
-  return &new_argv[0];
-}
-
-/* Return a pointer to the last element of PATH.  */
-
-char *
-basename (char *path)
-{
-  char *tail;
-
-  for (tail = path; *path; ++path)
-    if (*path == ':' || *path == '\\')
-      tail = path + 1;
-  return tail;
-}
-
-static char **
-grow_argv (char **new_argv, int new_argc)
-{
-  if (new_argc % ARGS_INCREMENT == 0)
-    {
-      new_argv = (char **) realloc
-       (new_argv, sizeof (char *) * (new_argc + ARGS_INCREMENT));
-      if (new_argv == NULL)
-       fatal_error ("memory exhausted");
-    }
-  return new_argv;
-}
-
-static void
-fatal_error (const char *message)
-{
-  putc ('\n', stderr);
-  if (program_name && *program_name)
-    {
-      fputs (program_name, stderr);
-      fputs (": ", stderr);
-    }
-  fputs (message, stderr);
-  putc ('\n', stderr);
-  exit (1);
-}
-
-/* Shell-style pattern matching for ?, \, [], and * characters.
-   I'm putting this replacement in the public domain.
-
-   Written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986.  */
-
-/* The character that inverts a character class; '!' or '^'.  */
-#define INVERT '!'
-
-static int star (char *string, char *pattern);
-
-/* Return nonzero if `string' matches Unix-style wildcard pattern
-   `pattern'; zero if not.  */
-
-int
-wild_match (char *string, char *pattern)
-{
-  int prev;            /* Previous character in character class.  */
-  int matched;         /* If 1, character class has been matched.  */
-  int reverse;         /* If 1, character class is inverted.  */
-
-  for (; *pattern; string++, pattern++)
-    switch (*pattern)
-      {
-      case '\\':
-       /* Literal match with following character; fall through.  */
-       pattern++;
-      default:
-       if (*string != *pattern)
-         return 0;
-       continue;
-      case '?':
-       /* Match anything.  */
-       if (*string == '\0')
-         return 0;
-       continue;
-      case '*':
-       /* Trailing star matches everything.  */
-       return *++pattern ? star (string, pattern) : 1;
-      case '[':
-       /* Check for inverse character class.  */
-       reverse = pattern[1] == INVERT;
-       if (reverse)
-         pattern++;
-       for (prev = 256, matched = 0; *++pattern && *pattern != ']';
-            prev = *pattern)
-         if (*pattern == '-'
-             ? *string <= *++pattern && *string >= prev
-             : *string == *pattern)
-           matched = 1;
-       if (matched == reverse)
-         return 0;
-       continue;
-      }
-
-  return *string == '\0';
-}
-
-static int
-star (char *string, char *pattern)
-{
-  while (wild_match (string, pattern) == 0)
-    if (*++string == '\0')
-      return 0;
-  return 1;
-}
diff --git a/src/testpad.c b/src/testpad.c
deleted file mode 100644 (file)
index 12d96e3..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Find out if we need the pad field in the header for this machine
-   Copyright (C) 1991 Free Software Foundation
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <stdio.h>
-
-struct inc
-{
-  char a[20];
-  char b[20];
-};
-
-struct test1
-{
-  char a;
-  struct inc in[5];
-};
-
-struct test2
-{
-  char a;
-  char b;
-  struct inc in[5];
-};
-
-void
-main ()
-{
-  struct test1 t1;
-  struct test2 t2;
-  int t1diff, t2diff;
-  FILE *fp = fopen ("testpad.h", "w");
-
-  if (fp == 0)
-    {
-      fprintf (stderr, "testpad: cannot open ");
-      fflush (stderr);
-      perror ("testpad.h");
-      exit (1);
-    }
-
-  t1diff = (char *) &t1.in[0] - (char *) &t1;
-  t2diff = (char *) &t2.in[0] - (char *) &t2;
-
-  if (t2diff == t1diff + 1)
-    fprintf (fp, "#define NEEDPAD\n");
-  else if (t1diff != t2diff)
-    fprintf (stderr, "Cannot determine padding for tar struct, \n\
-will try with none.\n");
-
-  fclose (fp);
-  exit (0);
-}
This page took 0.110952 seconds and 4 git commands to generate.