]> Dogcows Code - chaz/tar/commitdiff
Started merging with cpio into paxutils.
authorSergey Poznyakoff <gray@gnu.org.ua>
Mon, 6 Sep 2004 14:28:55 +0000 (14:28 +0000)
committerSergey Poznyakoff <gray@gnu.org.ua>
Mon, 6 Sep 2004 14:28:55 +0000 (14:28 +0000)
29 files changed:
ChangeLog
Makefile.am
README-alpha
bootstrap
configure.ac
lib/Makefile.tmpl
po/POTFILES.in
src/Makefile.am
src/buffer.c
src/common.h
src/compare.c
src/create.c
src/delete.c
src/extract.c
src/incremen.c
src/list.c
src/mangle.c
src/misc.c
src/names.c
src/rmt.c [deleted file]
src/rmt.h [deleted file]
src/rtapelib.c [deleted file]
src/sparse.c
src/system.c
src/system.h [deleted file]
src/tar.c
src/update.c
src/utf8.c
src/xheader.c

index 275db81875f6707d620f2bfd1fb580977d4c34fa..103ea7aa45f756f72da8869f805fda13abd58c29 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,38 @@
+2004-09-06  Sergey Poznyakoff  <gray@Mirddin.farlep.net>
+
+       Started merging with cpio into paxutils. Sources before
+       this point are tagged alpha-1_14_90
+       
+       * Makefile.am: Updated for use with paxutils
+       * README-alpha: Likewise
+       * bootstrap: Likewise
+       * configure.ac: Likewise
+       * lib/Makefile.tmpl: Likewise
+       * po/POTFILES.in: Likewise
+       * src/Makefile.am: Likewise
+       * src/buffer.c: Likewise
+       * src/common.h: Likewise
+       * src/compare.c: Likewise
+       * src/create.c: Likewise
+       * src/delete.c: Likewise
+       * src/extract.c: Likewise
+       * src/incremen.c: Likewise
+       * src/list.c: Likewise
+       * src/mangle.c: Likewise
+       * src/misc.c: Likewise
+       * src/names.c: Likewise
+       * src/sparse.c: Likewise
+       * src/system.c: Likewise
+       * src/tar.c: Likewise
+       * src/update.c: Likewise
+       * src/utf8.c: Likewise
+       * src/xheader.c: Likewise
+       
+       * src/system.h: Removed
+       * src/rmt.c: Removed
+       * src/rmt.h: Removed
+       * src/rtapelib.c: Removed
+       
 2004-09-03  Sergey Poznyakoff  <gray@Mirddin.farlep.net>
 
        * tests/listed02.sh: Do not depend on any particular ordering
index be480831a477718ec1d5796fd5cbf392c24e8032..b65ddf21ec7288dc87cadb684123aae55d80c48a 100644 (file)
@@ -20,4 +20,5 @@
 
 ACLOCAL_AMFLAGS = -I m4
 EXTRA_DIST = ChangeLog.1 PORTS
-SUBDIRS = doc lib src scripts po tests
+SUBDIRS = doc lib rmt src scripts po tests
+
index 30ed6f0c5a94c8aa6b170cf2303dbd0e24269898..bc4e2ba56818ea82531421796e177bf22dc68c91 100644 (file)
@@ -24,25 +24,33 @@ Before building the package, run "bootstrap".  It obtains various
 additional files from the CVS repository and the Translation Project
 site and prepares the source directory for building.
 
-When run without arguments, bootstrap will try to obtain gnulib files
-from CVS repository on savannah using anonymous SSH access. Then, it
-will fetch the po files from tar page at Translation Project, and,
-finally, it will start autoconfiguration process. Simply running
-it without arguments should do in most cases. Several options
-allow to control the behavior of bootstrap:
-
+When run without arguments, bootstrap will try to obtain gnulib and
+paxutils files from their corresponding CVS repositories on Savannah
+using anonymous SSH access. Then, it will fetch the po files from tar
+page at Translation Project, and, finally, it will start autoconfiguration
+process. Simply running it without arguments should do in most cases.
+Several options allow to control the behavior of bootstrap:
 
  --gnulib-srcdir=DIRNAME      Specify the local directory where gnulib
                               sources reside. Use this if you already
                               have gnulib sources on your machine, and
                               do not want to waste your bandwidth dowloading
                               them again.
+
+ --paxutils-srcdir=DIRNAME    Specify the local directory where paxutils
+                              sources reside. Use this if you already
+                              have paxutils sources on your machine, and
+                              do not want to waste your bandwidth dowloading
+                              them again.
+
  --cvs-auth=METHOD            Set the CVS access method used for downloading
                               gnulib files. METHOD is one of the keywords
                               accepted by cvs -d option (see info cvs
                               repository).
+
  --cvs-user=USERNAME          Set the CVS username to be used when accessing
                               the gnulib repository.
+
  --no-po                      Do not download po files.
 
 Notice also that when using CVS authentication method "ext", bootstrap
index 4fa452c515d729a4ecfd5a7f7762784c02c36011..c767442c0ccd58eae83851991608f925cec135cf 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -19,7 +19,7 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-# Written by Paul Eggert.
+# Written by Paul Eggert and Sergey Poznyakoff.
 
 # URL of our text domain page in Translation Project
 TP_URL="http://www2.iro.umontreal.ca/~gnutra/po/maint/tar/"
@@ -31,8 +31,13 @@ export LC_ALL
 
 usage() {
  cat <<EOF
- usage: $0 [--gnulib-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po]
+ usage: $0 [--gnulib-srcdir=DIR][--paxutils-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po]
  Options are:
+ --paxutils-srcdir=DIRNAME    Specify the local directory where paxutils
+                              sources reside. Use this if you already
+                              have paxutils sources on your machine, and
+                              do not want to waste your bandwidth dowloading
+                              them again.
  --gnulib-srcdir=DIRNAME      Specify the local directory where gnulib
                               sources reside. Use this if you already
                               have gnulib sources on your machine, and
@@ -84,6 +89,8 @@ do
     exit;;
   --gnulib-srcdir=*)
     GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
+  --paxutils-srcdir=*)
+    PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
   --cvs-auth=*)
     CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
   --cvs-user=*)
@@ -124,33 +131,41 @@ build_cvs_prefix() {
   fi
 }
 
-# Get gnulib files.
-
-case ${GNULIB_SRCDIR--} in
--)
-  if [ ! -d gnulib ]; then
-    echo "$0: getting gnulib files..."
+# checkout package
+checkout() {
+  if [ ! -d $1 ]; then
+    echo "$0: getting $1 files..."
 
     trap exit 1 2 13 15
-    trap 'rm -fr gnulib; exit 1' 0
+    trap 'rm -fr $1; exit 1' 0
 
     case "${CVS_AUTH--}" in
-    -)       build_cvs_prefix ext anoncvs;;
-    pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs};;
+    -)       build_cvs_prefix ext anoncvs
+             ;;
+    pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs}
+             ;;
     gserver|server)
-            build_cvs_prefix $CVS_AUTH ${CVS_USER--};;
-    ext)     build_cvs_prefix $CVS_AUTH ${CVS_USER--};;
+            build_cvs_prefix $CVS_AUTH ${CVS_USER--}
+            ;;
+    ext)     build_cvs_prefix $CVS_AUTH ${CVS_USER--}
+             ;;
     *)       echo "$0: Unknown CVS access method" >&2
             exit 1;;
     esac
     if [ "${CVS_AUTH--}" = "pserver" ]; then
-      cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/gnulib login || exit
+      cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 login || exit
     fi
-    cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/gnulib co gnulib || exit
+    cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 co $1 || exit
 
     trap 0
   fi
-  GNULIB_SRCDIR=gnulib
+}
+
+# Get gnulib files.
+
+case ${GNULIB_SRCDIR--} in
+-) checkout gnulib
+   GNULIB_SRCDIR=gnulib
 esac
 
 <$GNULIB_SRCDIR/gnulib-tool || exit
@@ -259,6 +274,36 @@ echo "$0: Creating lib/Makefile.am"
     $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
  done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
 
+# Get paxutils files 
+case ${PAXUTILS_SRCDIR--} in
+-) checkout paxutils
+   PAXUTILS_SRCDIR=paxutils
+esac
+
+# copy_files srcdir dstdir
+copy_files() {
+  for file in `cat $1/DISTFILES`
+  do
+    case $file in
+    "#*")  continue;;
+    esac
+    echo "$0: Copying file $1/$file" 
+    cp -p $1/$file $2/`expr $file : '.*/\(.*\)'`
+  done
+}
+
+copy_files ${PAXUTILS_SRCDIR}/m4 m4 
+
+if [ -d rmt ]; then
+   :
+else
+   mkdir rmt
+fi
+
+copy_files ${PAXUTILS_SRCDIR}/rmt rmt 
+
+copy_files ${PAXUTILS_SRCDIR}/lib lib
+
 # Get translations.
 if test "$DOWNLOAD_PO" = "yes"; then
   update_po
index afed24d0ac8573da72d4532d355505dc2eeb92aa..6d2a9be3be0bd874d5981e2c7762fb135a1b15e3 100644 (file)
@@ -49,28 +49,6 @@ AC_CHECK_HEADERS([sys/buf.h], [], [],
 AC_HEADER_SYS_WAIT
 AM_STDBOOL_H
 
-enable_rmt() {
-  if test $ac_cv_header_sys_mtio_h = yes; then
-    AC_CACHE_CHECK(for remote tape header files, tar_cv_header_rmt,
-      [AC_TRY_CPP([
-#if HAVE_SGTTY_H
-# include <sgtty.h>
-#endif
-#include <sys/socket.h>],
-      tar_cv_header_rmt=yes, tar_cv_header_rmt=no)])
-    test $tar_cv_header_rmt = yes && RMT='rmt'
-    AC_SUBST(RMT)
-  fi
-}
-
-AC_CACHE_CHECK(which ioctl field to test for reversed bytes,
-  tar_cv_header_mtio_check_field,
-  [AC_EGREP_HEADER(mt_model, sys/mtio.h,
-  tar_cv_header_mtio_check_field=mt_model,
-  tar_cv_header_mtio_check_field=mt_type)])
-AC_DEFINE_UNQUOTED(MTIO_CHECK_FIELD, $tar_cv_header_mtio_check_field,
-  [Define to mt_model (v.g., for DG/UX), else to mt_type.])
-
 AC_HEADER_DIRENT
 AC_HEADER_MAJOR
 AC_HEADER_STAT
@@ -240,36 +218,7 @@ AC_DEFINE_UNQUOTED(DEFAULT_BLOCKING, $DEFAULT_BLOCKING,
   [Define to a number giving the default blocking size for archives.])
 AC_MSG_RESULT($DEFAULT_BLOCKING)
 
-AC_ARG_VAR([DEFAULT_RMT_DIR],
-           [Define full file name of the directory where to install `rmt'. (default: $(libexecdir))])
-if test "x$DEFAULT_RMT_DIR" != x; then
-       DEFAULT_RMT_COMMAND=$DEFAULT_RMT_DIR/rmt
-else
-       DEFAULT_RMT_DIR='$(libexecdir)'
-fi
-
-AC_MSG_CHECKING([whether to build rmt])
-AC_ARG_WITH([rmt],
-            AC_HELP_STRING([--with-rmt=FILE],
-                           [Use FILE as the default `rmt' program. Do not build included copy of `rmt'.]),
-            [case $withval in
-            yes|no) AC_MSG_ERROR([Invalid argument to --with-rmt]);;
-            /*)     DEFAULT_RMT_COMMAND=$withval
-                    AC_MSG_RESULT([no, use $withval instead]);;
-            *)      AC_MSG_ERROR([Argument to --with-rmt must be an absolute file name]);;
-             esac],
-             [AC_MSG_RESULT([yes])
-              enable_rmt
-              if test "$RMT" = ""; then
-                 AC_MSG_WARN([not building rmt, required header files are missing])
-              fi])
-
-AC_SUBST(DEFAULT_RMT_COMMAND)
-if test "x$DEFAULT_RMT_COMMAND" != x; then
-  AC_DEFINE_UNQUOTED(DEFAULT_RMT_COMMAND, "$DEFAULT_RMT_COMMAND",
-                     [Define full file name of rmt program.])
-fi
-
+PU_RMT
 
 # Gettext.
 AM_GNU_GETTEXT([external], [need-ngettext])
@@ -311,6 +260,7 @@ AC_OUTPUT([Makefile\
            lib/Makefile\
            po/Makefile.in\
            scripts/Makefile\
+           rmt/Makefile\
            src/Makefile\
            tests/Makefile\
            tests/preset])
index 0806a7438ffa6234e19d7babcd69ccb1228d5869..7cd4e88b4a72d1ed4fe817038199f2aab736f703 100644 (file)
 ## 02111-1307, USA.
 
 noinst_LIBRARIES = libtar.a
+noinst_HEADERS = system.h localedir.h rmt.h
+libtar_a_SOURCES = prepargs.c prepargs.h rtapelib.c
 
-libtar_a_SOURCES = prepargs.c prepargs.h
+localedir = $(datadir)/locale
+
+DISTCLEANFILES = localedir.h
+localedir.h : Makefile
+       echo '#define LOCALEDIR "$(localedir)"' >$@
+       echo "#ifndef DEFAULT_RMT_COMMAND" >> $@
+       echo "# define DEFAULT_RMT_COMMAND \"$(DEFAULT_RMT_DIR)/`echo \"rmt\" | sed 's,^.*/,,;$(transform)'`$(EXEEXT)\"" >> $@
+       echo "#endif" >> $@
 
 libtar_a_LIBADD = $(LIBOBJS) $(ALLOCA)
 libtar_a_DEPENDENCIES = $(libtar_a_LIBADD)
index fe65482524c97247c43ae0f9237e4c5810e406b9..93288efe4078985eea99d0f5639a4af33a317601 100644 (file)
@@ -24,6 +24,9 @@ lib/getopt.c
 lib/human.c
 lib/quotearg.c
 lib/xmalloc.c
+lib/rtapelib.c
+
+rmt/rmt.c
 
 # Package source files
 src/buffer.c
@@ -37,8 +40,6 @@ src/list.c
 src/mangle.c
 src/misc.c
 src/names.c
-src/rmt.c
-src/rtapelib.c
 src/tar.c
 src/update.c
 src/xheader.c
index 0e813f3382c4e7ad2106a3c8879c87dcf3d225fa..3ba7b5cbbf6d2d73f464f5e6fc3854fb3c2d8385 100644 (file)
 ## 02111-1307, USA.
 
 bin_PROGRAMS = tar
-rmtdir=$(DEFAULT_RMT_DIR)
-rmt_PROGRAMS = @RMT@
-EXTRA_PROGRAMS = rmt
 
-noinst_HEADERS = arith.h common.h rmt.h system.h tar.h
-rmt_SOURCES = rmt.c
+noinst_HEADERS = arith.h common.h tar.h
 tar_SOURCES = \
  buffer.c\
  compare.c\
@@ -37,26 +33,16 @@ tar_SOURCES = \
  mangle.c\
  misc.c\
  names.c\
- rtapelib.c\
  sparse.c\
  system.c\
  tar.c\
  update.c\
  utf8.c
 
-localedir = $(datadir)/locale
-INCLUDES = -I$(top_srcdir)/lib -I../lib 
+INCLUDES = -I$(top_srcdir)/lib -I../ -I../lib 
 
-DISTCLEANFILES = localedir.h
-localedir.h : Makefile
-       echo '#define LOCALEDIR "$(localedir)"' >$@
-       echo "#ifndef DEFAULT_RMT_COMMAND" >> $@
-       echo "# define DEFAULT_RMT_COMMAND \"$(rmtdir)/`echo \"rmt\" | sed 's,^.*/,,;$(transform)'`$(EXEEXT)\"" >> $@
-       echo "#endif" >> $@
-
-rmt.o tar.o : localedir.h
+tar.o: ../lib/localedir.h
 
 LDADD = ../lib/libtar.a $(LIBINTL)
 
-rmt_LDADD = $(LDADD) $(LIB_SETSOCKOPT)
 tar_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
index 0bba3fa990ce79492d54786247d15978b616424d..69812ec71597cfc502f207ef86cb7fab3ce71869 100644 (file)
@@ -19,7 +19,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #include <signal.h>
 
@@ -28,7 +28,7 @@
 #include <quotearg.h>
 
 #include "common.h"
-#include "rmt.h"
+#include <rmt.h>
 
 /* Number of retries before giving up on read.  */
 #define        READ_ERROR_MAX 10
index 152ff180ed0e2e7aa5cb44d10ac865ede664243a..a376160e4d10340528e3ffd18e92a7ebf2af436d 100644 (file)
 /* Some various global definitions.  */
 
 /* Name of file to use for interacting with user.  */
-#if MSDOS
-# define TTY_NAME "con"
-#else
-# define TTY_NAME "/dev/tty"
-#endif
 
 /* GLOBAL is defined to empty in tar.c only, and left alone in other *.c
    modules.  Here, we merely set it to "extern" if it is not already set.
@@ -163,8 +158,6 @@ GLOBAL struct exclude *excluded;
 /* Specified file containing names to work on.  */
 GLOBAL const char *files_from_option;
 
-GLOBAL bool force_local_option;
-
 /* Specified value to be put into tar file in place of stat () results, or
    just -1 if such an override should not take place.  */
 GLOBAL gid_t group_option;
@@ -678,13 +671,10 @@ bool sys_compare_gid (struct stat *a, struct stat *b);
 bool sys_file_is_archive (struct tar_stat_info *p);
 bool sys_compare_links (struct stat *link_data, struct stat *stat_data);
 int sys_truncate (int fd);
-void sys_reset_uid_gid (void);
 pid_t sys_child_open_for_compress (void);
 pid_t sys_child_open_for_uncompress (void);
-void sys_reset_uid_gid (void);
 size_t sys_write_archive_buffer (void);
 bool sys_get_archive_stat (void);
-void sys_reset_uid_gid (void);
 
 /* Module compare.c */
 void report_difference (struct tar_stat_info *st, const char *message, ...);
index b790a7a089e8a9d874f7a99939b5440cc6557cb9..e93ccb0a2ccd49c23f88d4bcb6ce29e8344ca06d 100644 (file)
@@ -19,7 +19,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #if HAVE_UTIME_H
 # include <utime.h>
@@ -38,7 +38,7 @@ struct utimbuf
 #include <quotearg.h>
 
 #include "common.h"
-#include "rmt.h"
+#include <rmt.h>
 #include <stdarg.h>
 
 /* Nonzero if we are verifying at the moment.  */
index 793007f146dcb2d3dded06b7cb5b8dc9d502f2d9..d583e7febecdbaee6a96d0fe4bd3acdc4f5ce8b4 100644 (file)
@@ -19,7 +19,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #if HAVE_UTIME_H
 # include <utime.h>
index 5d0d4f9f342e0784312918230324021923e72821..a18f59845fc3d4ee91cfec353e526d64f5326376 100644 (file)
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #include "common.h"
-#include "rmt.h"
+#include <rmt.h>
 
 static union block *new_record;
 static int new_blocks;
index 14ea3ad0208e2a58a1c155af139e7099eee8b6ec..214d975e5b3e84b79266a13287e6384321d4dd73 100644 (file)
@@ -19,7 +19,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 #include <quotearg.h>
 #include <errno.h>
 #include <xgetcwd.h>
index 77772316c292bbc9239b6ccb926cbeeaafe2b5d5..9a2de4669422dcd2b8bc8f2f46d02ad0d96c1803 100644 (file)
@@ -17,7 +17,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 #include <getline.h>
 #include <hash.h>
 #include <quotearg.h>
index 61a3f85f7b738e8b0e1075cdaa0f2ae5938d0b4f..0e5e205f9a4f43feb8a7fa052c4a7509c733335a 100644 (file)
@@ -22,7 +22,7 @@
 /* Define to non-zero for forcing old ctime format instead of ISO format.  */
 #undef USE_OLD_CTIME
 
-#include "system.h"
+#include <system.h>
 #include <quotearg.h>
 
 #include "common.h"
index df6f50582e2e7e983c5739daf1ee6795ca941b22..1e5075fd8a16da2c99d82238dec5b9f9e4eafed1 100644 (file)
@@ -15,7 +15,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 #include "common.h"
 #include <quotearg.h>
 
index 5107e1d5a3566d169fe2d23a8a8d52396b5a3cfc..51561e4dc9c770dc4eb6e5450555ba5b709c75fc 100644 (file)
@@ -17,8 +17,8 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
-#include "rmt.h"
+#include <system.h>
+#include <rmt.h>
 #include "common.h"
 #include <quotearg.h>
 #include <save-cwd.h>
index e91f1081d22a227b347fa3db09339b4ffc8cc331..a5f2f7e70f346ff1c24e757501fb63790fdfad46 100644 (file)
@@ -17,7 +17,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #include <fnmatch.h>
 #include <hash.h>
diff --git a/src/rmt.c b/src/rmt.c
deleted file mode 100644 (file)
index 9ac327f..0000000
--- a/src/rmt.c
+++ /dev/null
@@ -1,577 +0,0 @@
-/* Remote connection server.
-
-   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2004
-   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.  */
-
-/* Copyright (C) 1983 Regents of the University of California.
-   All rights reserved.
-
-   Redistribution and use in source and binary forms are permitted provided
-   that the above copyright notice and this paragraph are duplicated in all
-   such forms and that any documentation, advertising materials, and other
-   materials related to such distribution and use acknowledge that the
-   software was developed by the University of California, Berkeley.  The
-   name of the University may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-   THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-   WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  */
-
-#include "system.h"
-#include <localedir.h>
-#include <safe-read.h>
-#include <full-write.h>
-
-#include <getopt.h>
-#include <sys/socket.h>
-
-#ifndef EXIT_FAILURE
-# define EXIT_FAILURE 1
-#endif
-#ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
-#endif
-
-/* Maximum size of a string from the requesting program.  */
-#define        STRING_SIZE 64
-
-/* Name of executing program.  */
-const char *program_name;
-
-/* File descriptor of the tape device, or negative if none open.  */
-static int tape = -1;
-
-/* Buffer containing transferred data, and its allocated size.  */
-static char *record_buffer;
-static size_t allocated_size;
-
-/* Buffer for constructing the reply.  */
-static char reply_buffer[BUFSIZ];
-
-/* Debugging tools.  */
-
-static FILE *debug_file;
-
-#define        DEBUG(File) \
-  if (debug_file) fprintf(debug_file, File)
-
-#define        DEBUG1(File, Arg) \
-  if (debug_file) fprintf(debug_file, File, Arg)
-
-#define        DEBUG2(File, Arg1, Arg2) \
-  if (debug_file) fprintf(debug_file, File, Arg1, Arg2)
-
-/* Return an error string, given an error number.  */
-#if HAVE_STRERROR
-# ifndef strerror
-char *strerror ();
-# endif
-#else
-static char *
-private_strerror (int errnum)
-{
-  extern char *sys_errlist[];
-  extern int sys_nerr;
-
-  if (errnum > 0 && errnum <= sys_nerr)
-    return _(sys_errlist[errnum]);
-  return _("Unknown system error");
-}
-# define strerror private_strerror
-#endif
-
-static void
-report_error_message (const char *string)
-{
-  DEBUG1 ("rmtd: E 0 (%s)\n", string);
-
-  sprintf (reply_buffer, "E0\n%s\n", string);
-  full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-}
-
-static void
-report_numbered_error (int num)
-{
-  DEBUG2 ("rmtd: E %d (%s)\n", num, strerror (num));
-
-  sprintf (reply_buffer, "E%d\n%s\n", num, strerror (num));
-  full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-}
-
-static void
-get_string (char *string)
-{
-  int counter;
-
-  for (counter = 0; ; counter++)
-    {
-      if (safe_read (STDIN_FILENO, string + counter, 1) != 1)
-       exit (EXIT_SUCCESS);
-
-      if (string[counter] == '\n' || counter == STRING_SIZE - 1)
-       break;
-    }
-  string[counter] = '\0';
-}
-
-static void
-prepare_input_buffer (int fd, size_t size)
-{
-  if (size <= allocated_size)
-    return;
-
-  if (record_buffer)
-    free (record_buffer);
-
-  record_buffer = malloc (size);
-
-  if (! record_buffer)
-    {
-      DEBUG (_("rmtd: Cannot allocate buffer space\n"));
-
-      report_error_message (N_("Cannot allocate buffer space"));
-      exit (EXIT_FAILURE);      /* exit status used to be 4 */
-    }
-
-  allocated_size = size;
-
-#ifdef SO_RCVBUF
-  if (0 <= fd)
-    {
-      int isize = size < INT_MAX ? size : INT_MAX;
-      while (setsockopt (fd, SOL_SOCKET, SO_RCVBUF,
-                        (char *) &isize, sizeof isize)
-            && 1024 < isize)
-       isize >>= 1;
-    }
-#endif
-}
-
-/* Decode OFLAG_STRING, which represents the 2nd argument to `open'.
-   OFLAG_STRING should contain an optional integer, followed by an optional
-   symbolic representation of an open flag using only '|' to separate its
-   components (e.g. "O_WRONLY|O_CREAT|O_TRUNC").  Prefer the symbolic
-   representation if available, falling back on the numeric
-   representation, or to zero if both formats are absent.
-
-   This function should be the inverse of encode_oflag.  The numeric
-   representation is not portable from one host to another, but it is
-   for backward compatibility with old-fashioned clients that do not
-   emit symbolic open flags.  */
-
-static int
-decode_oflag (char const *oflag_string)
-{
-  char *oflag_num_end;
-  int numeric_oflag = strtol (oflag_string, &oflag_num_end, 10);
-  int symbolic_oflag = 0;
-
-  oflag_string = oflag_num_end;
-  while (ISSPACE ((unsigned char) *oflag_string))
-    oflag_string++;
-
-  do
-    {
-      struct name_value_pair { char const *name; int value; };
-      static struct name_value_pair const table[] =
-      {
-#ifdef O_APPEND
-       {"APPEND", O_APPEND},
-#endif
-       {"CREAT", O_CREAT},
-#ifdef O_DSYNC
-       {"DSYNC", O_DSYNC},
-#endif
-       {"EXCL", O_EXCL},
-#ifdef O_LARGEFILE
-       {"LARGEFILE", O_LARGEFILE}, /* LFS extension for opening large files */
-#endif
-#ifdef O_NOCTTY
-       {"NOCTTY", O_NOCTTY},
-#endif
-#ifdef O_NONBLOCK
-       {"NONBLOCK", O_NONBLOCK},
-#endif
-       {"RDONLY", O_RDONLY},
-       {"RDWR", O_RDWR},
-#ifdef O_RSYNC
-       {"RSYNC", O_RSYNC},
-#endif
-#ifdef O_SYNC
-       {"SYNC", O_SYNC},
-#endif
-       {"TRUNC", O_TRUNC},
-       {"WRONLY", O_WRONLY}
-      };
-      struct name_value_pair const *t;
-      size_t s;
-
-      if (*oflag_string++ != 'O' || *oflag_string++ != '_')
-       return numeric_oflag;
-
-      for (t = table;
-          (strncmp (oflag_string, t->name, s = strlen (t->name)) != 0
-           || (oflag_string[s]
-               && strchr ("ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789",
-                          oflag_string[s])));
-          t++)
-       if (t == table + sizeof table / sizeof *table - 1)
-         return numeric_oflag;
-
-      symbolic_oflag |= t->value;
-      oflag_string += s;
-    }
-  while (*oflag_string++ == '|');
-
-  return symbolic_oflag;
-}
-
-static struct option const long_opts[] =
-{
-  {"help", no_argument, 0, 'h'},
-  {"version", no_argument, 0, 'v'},
-  {0, 0, 0, 0}
-};
-
-static void usage (int) __attribute__ ((noreturn));
-
-static void
-usage (int status)
-{
-  if (status != EXIT_SUCCESS)
-    fprintf (stderr, _("Try `%s --help' for more information.\n"),
-            program_name);
-  else
-    {
-      printf (_("\
-Usage: %s [OPTION]\n\
-Manipulate a tape drive, accepting commands from a remote process.\n\
-\n\
-  --version  Output version info.\n\
-  --help  Output this help.\n"),
-             program_name);
-      printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
-    }
-
-  exit (status);
-}
-
-int
-main (int argc, char *const *argv)
-{
-  char command;
-  size_t status;
-
-  /* FIXME: Localization is meaningless, unless --help and --version are
-     locally used.  Localization would be best accomplished by the calling
-     tar, on messages found within error packets.  */
-
-  program_name = argv[0];
-  setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE, LOCALEDIR);
-  textdomain (PACKAGE);
-
-  switch (getopt_long (argc, argv, "", long_opts, NULL))
-    {
-    default:
-      usage (EXIT_FAILURE);
-
-    case 'h':
-      usage (EXIT_SUCCESS);
-
-    case 'v':
-      {
-       printf ("rmt (%s) %s\n%s\n", PACKAGE_NAME, PACKAGE_VERSION,
-               "Copyright (C) 2004 Free Software Foundation, Inc.");
-       puts (_("\
-This program comes with NO WARRANTY, to the extent permitted by law.\n\
-You may redistribute it under the terms of the GNU General Public License;\n\
-see the file named COPYING for details."));
-      }
-      return EXIT_SUCCESS;
-
-    case -1:
-      break;
-    }
-
-  if (optind < argc)
-    {
-      if (optind != argc - 1)
-       usage (EXIT_FAILURE);
-      debug_file = fopen (argv[optind], "w");
-      if (debug_file == 0)
-       {
-         report_numbered_error (errno);
-         return EXIT_FAILURE;
-       }
-      setbuf (debug_file, 0);
-    }
-
-top:
-  errno = 0;
-  status = 0;
-  if (safe_read (STDIN_FILENO, &command, 1) != 1)
-    return EXIT_SUCCESS;
-
-  switch (command)
-    {
-      /* FIXME: Maybe 'H' and 'V' for --help and --version output?  */
-
-    case 'O':
-      {
-       char device_string[STRING_SIZE];
-       char oflag_string[STRING_SIZE];
-
-       get_string (device_string);
-       get_string (oflag_string);
-       DEBUG2 ("rmtd: O %s %s\n", device_string, oflag_string);
-
-       if (tape >= 0)
-         close (tape);
-
-       tape = open (device_string, decode_oflag (oflag_string), MODE_RW);
-       if (tape < 0)
-         goto ioerror;
-       goto respond;
-      }
-
-    case 'C':
-      {
-       char device_string[STRING_SIZE];
-
-       get_string (device_string); /* discard */
-       DEBUG ("rmtd: C\n");
-
-       if (close (tape) < 0)
-         goto ioerror;
-       tape = -1;
-       goto respond;
-      }
-
-    case 'L':
-      {
-       char count_string[STRING_SIZE];
-       char position_string[STRING_SIZE];
-       off_t count = 0;
-       int negative;
-       int whence;
-       char *p;
-
-       get_string (count_string);
-       get_string (position_string);
-       DEBUG2 ("rmtd: L %s %s\n", count_string, position_string);
-
-       /* Parse count_string, taking care to check for overflow.
-          We can't use standard functions,
-          since off_t might be longer than long.  */
-
-       for (p = count_string;  *p == ' ' || *p == '\t';  p++)
-         continue;
-
-       negative = *p == '-';
-       p += negative || *p == '+';
-
-       for (;;)
-         {
-           int digit = *p++ - '0';
-           if (9 < (unsigned) digit)
-             break;
-           else
-             {
-               off_t c10 = 10 * count;
-               off_t nc = negative ? c10 - digit : c10 + digit;
-               if (c10 / 10 != count || (negative ? c10 < nc : nc < c10))
-                 {
-                   report_error_message (N_("Seek offset out of range"));
-                   return EXIT_FAILURE;
-                 }
-               count = nc;
-             }
-         }
-
-       switch (atoi (position_string))
-         {
-         case 0: whence = SEEK_SET; break;
-         case 1: whence = SEEK_CUR; break;
-         case 2: whence = SEEK_END; break;
-         default:
-           report_error_message (N_("Seek direction out of range"));
-           return EXIT_FAILURE;
-         }
-       count = lseek (tape, count, whence);
-       if (count < 0)
-         goto ioerror;
-
-       /* Convert count back to string for reply.
-          We can't use sprintf, since off_t might be longer than long.  */
-       p = count_string + sizeof count_string;
-       *--p = '\0';
-       do
-         *--p = '0' + (int) (count % 10);
-       while ((count /= 10) != 0);
-
-       DEBUG1 ("rmtd: A %s\n", p);
-
-       sprintf (reply_buffer, "A%s\n", p);
-       full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-       goto top;
-      }
-
-    case 'W':
-      {
-       char count_string[STRING_SIZE];
-       size_t size;
-       size_t counter;
-
-       get_string (count_string);
-       size = atol (count_string);
-       DEBUG1 ("rmtd: W %s\n", count_string);
-
-       prepare_input_buffer (STDIN_FILENO, size);
-       for (counter = 0; counter < size; counter += status)
-         {
-           status = safe_read (STDIN_FILENO, &record_buffer[counter],
-                               size - counter);
-           if (status == SAFE_READ_ERROR || status == 0)
-             {
-               DEBUG (_("rmtd: Premature eof\n"));
-
-               report_error_message (N_("Premature end of file"));
-               return EXIT_FAILURE; /* exit status used to be 2 */
-             }
-         }
-       status = full_write (tape, record_buffer, size);
-       if (status != size)
-         goto ioerror;
-       goto respond;
-      }
-
-    case 'R':
-      {
-       char count_string[STRING_SIZE];
-       size_t size;
-
-       get_string (count_string);
-       DEBUG1 ("rmtd: R %s\n", count_string);
-
-       size = atol (count_string);
-       prepare_input_buffer (-1, size);
-       status = safe_read (tape, record_buffer, size);
-       if (status == SAFE_READ_ERROR)
-         goto ioerror;
-       sprintf (reply_buffer, "A%lu\n", (unsigned long int) status);
-       full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-       full_write (STDOUT_FILENO, record_buffer, status);
-       goto top;
-      }
-
-    case 'I':
-      {
-       char operation_string[STRING_SIZE];
-       char count_string[STRING_SIZE];
-
-       get_string (operation_string);
-       get_string  (count_string);
-       DEBUG2 ("rmtd: I %s %s\n", operation_string, count_string);
-
-#ifdef MTIOCTOP
-       {
-         struct mtop mtop;
-         const char *p;
-         off_t count = 0;
-         int negative;
-
-         /* Parse count_string, taking care to check for overflow.
-            We can't use standard functions,
-            since off_t might be longer than long.  */
-
-         for (p = count_string;  *p == ' ' || *p == '\t';  p++)
-           continue;
-
-         negative = *p == '-';
-         p += negative || *p == '+';
-
-         for (;;)
-           {
-             int digit = *p++ - '0';
-             if (9 < (unsigned) digit)
-               break;
-             else
-               {
-                 off_t c10 = 10 * count;
-                 off_t nc = negative ? c10 - digit : c10 + digit;
-                 if (c10 / 10 != count || (negative ? c10 < nc : nc < c10))
-                   {
-                     report_error_message (N_("Seek offset out of range"));
-                     return EXIT_FAILURE;
-                   }
-                 count = nc;
-               }
-           }
-
-         mtop.mt_count = count;
-         if (mtop.mt_count != count)
-           {
-             report_error_message (N_("Seek offset out of range"));
-             return EXIT_FAILURE;
-           }
-         mtop.mt_op = atoi (operation_string);
-
-         if (ioctl (tape, MTIOCTOP, (char *) &mtop) < 0)
-           goto ioerror;
-       }
-#endif
-       goto respond;
-      }
-
-    case 'S':                  /* status */
-      {
-       DEBUG ("rmtd: S\n");
-
-#ifdef MTIOCGET
-       {
-         struct mtget operation;
-
-         if (ioctl (tape, MTIOCGET, (char *) &operation) < 0)
-           goto ioerror;
-         status = sizeof operation;
-         sprintf (reply_buffer, "A%ld\n", (long) status);
-         full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-         full_write (STDOUT_FILENO, (char *) &operation, sizeof operation);
-       }
-#endif
-       goto top;
-      }
-
-    default:
-      DEBUG1 (_("rmtd: Garbage command %c\n"), command);
-
-      report_error_message (N_("Garbage command"));
-      return EXIT_FAILURE;     /* exit status used to be 3 */
-    }
-
-respond:
-  DEBUG1 ("rmtd: A %ld\n", (long) status);
-
-  sprintf (reply_buffer, "A%ld\n", (long) status);
-  full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-  goto top;
-
-ioerror:
-  report_numbered_error (errno);
-  goto top;
-}
diff --git a/src/rmt.h b/src/rmt.h
deleted file mode 100644 (file)
index a685686..0000000
--- a/src/rmt.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Definitions for communicating with a remote tape drive.
-
-   Copyright (C) 1988, 1992, 1996, 1997, 2001, 2003, 2004 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.  */
-
-extern char *rmt_dev_name__;
-
-int rmt_open__ (const char *, int, int, const char *);
-int rmt_close__ (int);
-size_t rmt_read__ (int, char *, size_t);
-size_t rmt_write__ (int, char *, size_t);
-off_t rmt_lseek__ (int, off_t, int);
-int rmt_ioctl__ (int, int, char *);
-
-/* A filename is remote if it contains a colon not preceded by a slash,
-   to take care of `/:/' which is a shorthand for `/.../<CELL-NAME>/fs'
-   on machines running OSF's Distributing Computing Environment (DCE) and
-   Distributed File System (DFS).  However, when --force-local, a
-   filename is never remote.  */
-
-#define _remdev(dev_name) \
-  (!force_local_option && (rmt_dev_name__ = strchr (dev_name, ':')) \
-   && rmt_dev_name__ > (dev_name) \
-   && ! memchr (dev_name, '/', rmt_dev_name__ - (dev_name)))
-
-#define _isrmt(fd) \
-  ((fd) >= __REM_BIAS)
-
-#define __REM_BIAS (1 << 30)
-
-#ifndef O_CREAT
-# define O_CREAT 01000
-#endif
-
-#define rmtopen(dev_name, oflag, mode, command) \
-  (_remdev (dev_name) ? rmt_open__ (dev_name, oflag, __REM_BIAS, command) \
-   : open (dev_name, oflag, mode))
-
-#define rmtaccess(dev_name, amode) \
-  (_remdev (dev_name) ? 0 : access (dev_name, amode))
-
-#define rmtstat(dev_name, buffer) \
-  (_remdev (dev_name) ? (errno = EOPNOTSUPP), -1 : stat (dev_name, buffer))
-
-#define rmtcreat(dev_name, mode, command) \
-   (_remdev (dev_name) \
-    ? rmt_open__ (dev_name, 1 | O_CREAT, __REM_BIAS, command) \
-    : creat (dev_name, mode))
-
-#define rmtlstat(dev_name, muffer) \
-  (_remdev (dev_name) ? (errno = EOPNOTSUPP), -1 : lstat (dev_name, buffer))
-
-#define rmtread(fd, buffer, length) \
-  (_isrmt (fd) ? rmt_read__ (fd - __REM_BIAS, buffer, length) \
-   : safe_read (fd, buffer, length))
-
-#define rmtwrite(fd, buffer, length) \
-  (_isrmt (fd) ? rmt_write__ (fd - __REM_BIAS, buffer, length) \
-   : full_write (fd, buffer, length))
-
-#define rmtlseek(fd, offset, where) \
-  (_isrmt (fd) ? rmt_lseek__ (fd - __REM_BIAS, offset, where) \
-   : lseek (fd, offset, where))
-
-#define rmtclose(fd) \
-  (_isrmt (fd) ? rmt_close__ (fd - __REM_BIAS) : close (fd))
-
-#define rmtioctl(fd, request, argument) \
-  (_isrmt (fd) ? rmt_ioctl__ (fd - __REM_BIAS, request, argument) \
-   : ioctl (fd, request, argument))
-
-#define rmtdup(fd) \
-  (_isrmt (fd) ? (errno = EOPNOTSUPP), -1 : dup (fd))
-
-#define rmtfstat(fd, buffer) \
-  (_isrmt (fd) ? (errno = EOPNOTSUPP), -1 : fstat (fd, buffer))
-
-#define rmtfcntl(cd, command, argument) \
-  (_isrmt (fd) ? (errno = EOPNOTSUPP), -1 : fcntl (fd, command, argument))
-
-#define rmtisatty(fd) \
-  (_isrmt (fd) ? 0 : isatty (fd))
diff --git a/src/rtapelib.c b/src/rtapelib.c
deleted file mode 100644 (file)
index a31a893..0000000
+++ /dev/null
@@ -1,735 +0,0 @@
-/* Functions for communicating with a remote tape drive.
-
-   Copyright 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2001, 2004 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.  */
-
-/* The man page rmt(8) for /etc/rmt documents the remote mag tape protocol
-   which rdump and rrestore use.  Unfortunately, the man page is *WRONG*.
-   The author of the routines I'm including originally wrote his code just
-   based on the man page, and it didn't work, so he went to the rdump source
-   to figure out why.  The only thing he had to change was to check for the
-   'F' return code in addition to the 'E', and to separate the various
-   arguments with \n instead of a space.  I personally don't think that this
-   is much of a problem, but I wanted to point it out. -- Arnold Robbins
-
-   Originally written by Jeff Lee, modified some by Arnold Robbins.  Redone
-   as a library that can replace open, read, write, etc., by Fred Fish, with
-   some additional work by Arnold Robbins.  Modified to make all rmt* calls
-   into macros for speed by Jay Fenlason.  Use -DWITH_REXEC for rexec
-   code, courtesy of Dan Kegel.  */
-
-#include "system.h"
-#include "common.h"
-#include <safe-read.h>
-#include <full-write.h>
-
-/* Try hard to get EOPNOTSUPP defined.  486/ISC has it in net/errno.h,
-   3B2/SVR3 has it in sys/inet.h.  Otherwise, like on MSDOS, use EINVAL.  */
-
-#ifndef EOPNOTSUPP
-# if HAVE_NET_ERRNO_H
-#  include <net/errno.h>
-# endif
-# if HAVE_SYS_INET_H
-#  include <sys/inet.h>
-# endif
-# ifndef EOPNOTSUPP
-#  define EOPNOTSUPP EINVAL
-# endif
-#endif
-
-#include <signal.h>
-
-#if HAVE_NETDB_H
-# include <netdb.h>
-#endif
-
-#include "rmt.h"
-
-/* Exit status if exec errors.  */
-#define EXIT_ON_EXEC_ERROR 128
-
-/* FIXME: Size of buffers for reading and writing commands to rmt.  */
-#define COMMAND_BUFFER_SIZE 64
-
-#ifndef RETSIGTYPE
-# define RETSIGTYPE void
-#endif
-
-/* FIXME: Maximum number of simultaneous remote tape connections.  */
-#define MAXUNIT        4
-
-#define        PREAD 0                 /* read  file descriptor from pipe() */
-#define        PWRITE 1                /* write file descriptor from pipe() */
-
-/* Return the parent's read side of remote tape connection Fd.  */
-#define READ_SIDE(Fd) (from_remote[Fd][PREAD])
-
-/* Return the parent's write side of remote tape connection Fd.  */
-#define WRITE_SIDE(Fd) (to_remote[Fd][PWRITE])
-
-/* The pipes for receiving data from remote tape drives.  */
-static int from_remote[MAXUNIT][2] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};
-
-/* The pipes for sending data to remote tape drives.  */
-static int to_remote[MAXUNIT][2] = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}};
-
-#define RMT_COMMAND (rmt_command_option ? rmt_command_option : "/etc/rmt")
-
-/* Temporary variable used by macros in rmt.h.  */
-char *rmt_dev_name__;
-\f
-
-/* Close remote tape connection HANDLE, and reset errno to ERRNO_VALUE.  */
-static void
-_rmt_shutdown (int handle, int errno_value)
-{
-  close (READ_SIDE (handle));
-  close (WRITE_SIDE (handle));
-  READ_SIDE (handle) = -1;
-  WRITE_SIDE (handle) = -1;
-  errno = errno_value;
-}
-
-/* Attempt to perform the remote tape command specified in BUFFER on
-   remote tape connection HANDLE.  Return 0 if successful, -1 on
-   error.  */
-static int
-do_command (int handle, const char *buffer)
-{
-  /* Save the current pipe handler and try to make the request.  */
-
-  size_t length = strlen (buffer);
-  RETSIGTYPE (*pipe_handler) () = signal (SIGPIPE, SIG_IGN);
-  ssize_t written = full_write (WRITE_SIDE (handle), buffer, length);
-  signal (SIGPIPE, pipe_handler);
-
-  if (written == length)
-    return 0;
-
-  /* Something went wrong.  Close down and go home.  */
-
-  _rmt_shutdown (handle, EIO);
-  return -1;
-}
-
-static char *
-get_status_string (int handle, char *command_buffer)
-{
-  char *cursor;
-  int counter;
-
-  /* Read the reply command line.  */
-
-  for (counter = 0, cursor = command_buffer;
-       counter < COMMAND_BUFFER_SIZE;
-       counter++, cursor++)
-    {
-      if (safe_read (READ_SIDE (handle), cursor, 1) != 1)
-       {
-         _rmt_shutdown (handle, EIO);
-         return 0;
-       }
-      if (*cursor == '\n')
-       {
-         *cursor = '\0';
-         break;
-       }
-    }
-
-  if (counter == COMMAND_BUFFER_SIZE)
-    {
-      _rmt_shutdown (handle, EIO);
-      return 0;
-    }
-
-  /* Check the return status.  */
-
-  for (cursor = command_buffer; *cursor; cursor++)
-    if (*cursor != ' ')
-      break;
-
-  if (*cursor == 'E' || *cursor == 'F')
-    {
-      /* Skip the error message line.  */
-
-      /* FIXME: there is better to do than merely ignoring error messages
-        coming from the remote end.  Translate them, too...  */
-
-      {
-       char character;
-
-       while (safe_read (READ_SIDE (handle), &character, 1) == 1)
-         if (character == '\n')
-           break;
-      }
-
-      errno = atoi (cursor + 1);
-
-      if (*cursor == 'F')
-       _rmt_shutdown (handle, errno);
-
-      return 0;
-    }
-
-  /* Check for mis-synced pipes.  */
-
-  if (*cursor != 'A')
-    {
-      _rmt_shutdown (handle, EIO);
-      return 0;
-    }
-
-  /* Got an `A' (success) response.  */
-
-  return cursor + 1;
-}
-
-/* Read and return the status from remote tape connection HANDLE.  If
-   an error occurred, return -1 and set errno.  */
-static long int
-get_status (int handle)
-{
-  char command_buffer[COMMAND_BUFFER_SIZE];
-  const char *status = get_status_string (handle, command_buffer);
-  if (status)
-    {
-      long int result = atol (status);
-      if (0 <= result)
-       return result;
-      errno = EIO;
-    }
-  return -1;
-}
-
-static off_t
-get_status_off (int handle)
-{
-  char command_buffer[COMMAND_BUFFER_SIZE];
-  const char *status = get_status_string (handle, command_buffer);
-
-  if (! status)
-    return -1;
-  else
-    {
-      /* Parse status, taking care to check for overflow.
-        We can't use standard functions,
-        since off_t might be longer than long.  */
-
-      off_t count = 0;
-      int negative;
-
-      for (;  *status == ' ' || *status == '\t';  status++)
-       continue;
-
-      negative = *status == '-';
-      status += negative || *status == '+';
-
-      for (;;)
-       {
-         int digit = *status++ - '0';
-         if (9 < (unsigned) digit)
-           break;
-         else
-           {
-             off_t c10 = 10 * count;
-             off_t nc = negative ? c10 - digit : c10 + digit;
-             if (c10 / 10 != count || (negative ? c10 < nc : nc < c10))
-               return -1;
-             count = nc;
-           }
-       }
-
-      return count;
-    }
-}
-
-#if WITH_REXEC
-
-/* Execute /etc/rmt as user USER on remote system HOST using rexec.
-   Return a file descriptor of a bidirectional socket for stdin and
-   stdout.  If USER is zero, use the current username.
-
-   By default, this code is not used, since it requires that the user
-   have a .netrc file in his/her home directory, or that the
-   application designer be willing to have rexec prompt for login and
-   password info.  This may be unacceptable, and .rhosts files for use
-   with rsh are much more common on BSD systems.  */
-static int
-_rmt_rexec (char *host, char *user)
-{
-  int saved_stdin = dup (STDIN_FILENO);
-  int saved_stdout = dup (STDOUT_FILENO);
-  struct servent *rexecserv;
-  int result;
-
-  /* When using cpio -o < filename, stdin is no longer the tty.  But the
-     rexec subroutine reads the login and the passwd on stdin, to allow
-     remote execution of the command.  So, reopen stdin and stdout on
-     /dev/tty before the rexec and give them back their original value
-     after.  */
-
-  if (! freopen ("/dev/tty", "r", stdin))
-    freopen ("/dev/null", "r", stdin);
-  if (! freopen ("/dev/tty", "w", stdout))
-    freopen ("/dev/null", "w", stdout);
-
-  if (rexecserv = getservbyname ("exec", "tcp"), !rexecserv)
-    error (EXIT_ON_EXEC_ERROR, 0, _("exec/tcp: Service not available"));
-
-  result = rexec (&host, rexecserv->s_port, user, 0, RMT_COMMAND, 0);
-  if (fclose (stdin) == EOF)
-    error (0, errno, _("stdin"));
-  fdopen (saved_stdin, "r");
-  if (fclose (stdout) == EOF)
-    error (0, errno, _("stdout"));
-  fdopen (saved_stdout, "w");
-
-  return result;
-}
-
-#endif /* WITH_REXEC */
-
-/* Place into BUF a string representing OFLAG, which must be suitable
-   as argument 2 of `open'.  BUF must be large enough to hold the
-   result.  This function should generate a string that decode_oflag
-   can parse.  */
-static void
-encode_oflag (char *buf, int oflag)
-{
-  sprintf (buf, "%d ", oflag);
-
-  switch (oflag & O_ACCMODE)
-    {
-    case O_RDONLY: strcat (buf, "O_RDONLY"); break;
-    case O_RDWR: strcat (buf, "O_RDWR"); break;
-    case O_WRONLY: strcat (buf, "O_WRONLY"); break;
-    default: abort ();
-    }
-
-#ifdef O_APPEND
-  if (oflag & O_APPEND) strcat (buf, "|O_APPEND");
-#endif
-  if (oflag & O_CREAT) strcat (buf, "|O_CREAT");
-#ifdef O_DSYNC
-  if (oflag & O_DSYNC) strcat (buf, "|O_DSYNC");
-#endif
-  if (oflag & O_EXCL) strcat (buf, "|O_EXCL");
-#ifdef O_LARGEFILE
-  if (oflag & O_LARGEFILE) strcat (buf, "|O_LARGEFILE");
-#endif
-#ifdef O_NOCTTY
-  if (oflag & O_NOCTTY) strcat (buf, "|O_NOCTTY");
-#endif
-#ifdef O_NONBLOCK
-  if (oflag & O_NONBLOCK) strcat (buf, "|O_NONBLOCK");
-#endif
-#ifdef O_RSYNC
-  if (oflag & O_RSYNC) strcat (buf, "|O_RSYNC");
-#endif
-#ifdef O_SYNC
-  if (oflag & O_SYNC) strcat (buf, "|O_SYNC");
-#endif
-  if (oflag & O_TRUNC) strcat (buf, "|O_TRUNC");
-}
-
-/* Open a file (a magnetic tape device?) on the system specified in
-   FILE_NAME, as the given user. FILE_NAME has the form `[USER@]HOST:FILE'.
-   OPEN_MODE is O_RDONLY, O_WRONLY, etc.  If successful, return the
-   remote pipe number plus BIAS.  REMOTE_SHELL may be overridden.  On
-   error, return -1.  */
-int
-rmt_open__ (const char *file_name, int open_mode, int bias, 
-            const char *remote_shell)
-{
-  int remote_pipe_number;      /* pseudo, biased file descriptor */
-  char *file_name_copy;                /* copy of file_name string */
-  char *remote_host;           /* remote host name */
-  char *remote_file;           /* remote file name (often a device) */
-  char *remote_user;           /* remote user name */
-
-  /* Find an unused pair of file descriptors.  */
-
-  for (remote_pipe_number = 0;
-       remote_pipe_number < MAXUNIT;
-       remote_pipe_number++)
-    if (READ_SIDE (remote_pipe_number) == -1
-       && WRITE_SIDE (remote_pipe_number) == -1)
-      break;
-
-  if (remote_pipe_number == MAXUNIT)
-    {
-      errno = EMFILE;
-      return -1;
-    }
-
-  /* Pull apart the system and device, and optional user.  */
-
-  {
-    char *cursor;
-
-    file_name_copy = xstrdup (file_name);
-    remote_host = file_name_copy;
-    remote_user = 0;
-    remote_file = 0;
-
-    for (cursor = file_name_copy; *cursor; cursor++)
-      switch (*cursor)
-       {
-       default:
-         break;
-
-       case '\n':
-         /* Do not allow newlines in the file_name, since the protocol
-            uses newline delimiters.  */
-         free (file_name_copy);
-         errno = ENOENT;
-         return -1;
-
-       case '@':
-         if (!remote_user)
-           {
-             remote_user = remote_host;
-             *cursor = '\0';
-             remote_host = cursor + 1;
-           }
-         break;
-
-       case ':':
-         if (!remote_file)
-           {
-             *cursor = '\0';
-             remote_file = cursor + 1;
-           }
-         break;
-       }
-  }
-
-  /* FIXME: Should somewhat validate the decoding, here.  */
-
-  if (remote_user && *remote_user == '\0')
-    remote_user = 0;
-
-#if WITH_REXEC
-
-  /* Execute the remote command using rexec.  */
-
-  READ_SIDE (remote_pipe_number) = _rmt_rexec (remote_host, remote_user);
-  if (READ_SIDE (remote_pipe_number) < 0)
-    {
-      int e = errno;
-      free (file_name_copy);
-      errno = e;
-      return -1;
-    }
-
-  WRITE_SIDE (remote_pipe_number) = READ_SIDE (remote_pipe_number);
-
-#else /* not WITH_REXEC */
-  {
-    const char *remote_shell_basename;
-    pid_t status;
-
-    /* Identify the remote command to be executed.  */
-
-    if (!remote_shell)
-      {
-#ifdef REMOTE_SHELL
-       remote_shell = REMOTE_SHELL;
-#else
-       free (file_name_copy);
-       errno = EIO;
-       return -1;
-#endif
-      }
-    remote_shell_basename = base_name (remote_shell);
-
-    /* Set up the pipes for the `rsh' command, and fork.  */
-
-    if (pipe (to_remote[remote_pipe_number]) == -1
-       || pipe (from_remote[remote_pipe_number]) == -1)
-      {
-       int e = errno;
-       free (file_name_copy);
-       errno = e;
-       return -1;
-      }
-
-    status = fork ();
-    if (status == -1)
-      {
-       int e = errno;
-       free (file_name_copy);
-       errno = e;
-       return -1;
-      }
-
-    if (status == 0)
-      {
-       /* Child.  */
-
-       close (STDIN_FILENO);
-       dup (to_remote[remote_pipe_number][PREAD]);
-       close (to_remote[remote_pipe_number][PREAD]);
-       close (to_remote[remote_pipe_number][PWRITE]);
-
-       close (STDOUT_FILENO);
-       dup (from_remote[remote_pipe_number][PWRITE]);
-       close (from_remote[remote_pipe_number][PREAD]);
-       close (from_remote[remote_pipe_number][PWRITE]);
-
-       sys_reset_uid_gid ();
-
-       if (remote_user)
-         execl (remote_shell, remote_shell_basename, remote_host,
-                "-l", remote_user, RMT_COMMAND, (char *) 0);
-       else
-         execl (remote_shell, remote_shell_basename, remote_host,
-                RMT_COMMAND, (char *) 0);
-
-       /* Bad problems if we get here.  */
-
-       /* In a previous version, _exit was used here instead of exit.  */
-       error (EXIT_ON_EXEC_ERROR, errno, _("Cannot execute remote shell"));
-      }
-
-    /* Parent.  */
-
-    close (from_remote[remote_pipe_number][PWRITE]);
-    close (to_remote[remote_pipe_number][PREAD]);
-  }
-#endif /* not WITH_REXEC */
-
-  /* Attempt to open the tape device.  */
-
-  {
-    size_t remote_file_len = strlen (remote_file);
-    char *command_buffer = xmalloc (remote_file_len + 1000);
-    sprintf (command_buffer, "O%s\n", remote_file);
-    encode_oflag (command_buffer + remote_file_len + 2, open_mode);
-    strcat (command_buffer, "\n");
-    if (do_command (remote_pipe_number, command_buffer) == -1
-       || get_status (remote_pipe_number) == -1)
-      {
-       int e = errno;
-       free (command_buffer);
-       free (file_name_copy);
-       _rmt_shutdown (remote_pipe_number, e);
-       return -1;
-      }
-    free (command_buffer);
-  }
-
-  free (file_name_copy);
-  return remote_pipe_number + bias;
-}
-
-/* Close remote tape connection HANDLE and shut down.  Return 0 if
-   successful, -1 on error.  */
-int
-rmt_close__ (int handle)
-{
-  long int status;
-
-  if (do_command (handle, "C\n") == -1)
-    return -1;
-
-  status = get_status (handle);
-  _rmt_shutdown (handle, errno);
-  return status;
-}
-
-/* Read up to LENGTH bytes into BUFFER from remote tape connection HANDLE.
-   Return the number of bytes read on success, SAFE_READ_ERROR on error.  */
-size_t
-rmt_read__ (int handle, char *buffer, size_t length)
-{
-  char command_buffer[COMMAND_BUFFER_SIZE];
-  size_t status;
-  size_t rlen;
-  size_t counter;
-
-  sprintf (command_buffer, "R%lu\n", (unsigned long) length);
-  if (do_command (handle, command_buffer) == -1
-      || (status = get_status (handle)) == SAFE_READ_ERROR)
-    return SAFE_READ_ERROR;
-
-  for (counter = 0; counter < status; counter += rlen, buffer += rlen)
-    {
-      rlen = safe_read (READ_SIDE (handle), buffer, status - counter);
-      if (rlen == SAFE_READ_ERROR || rlen == 0)
-       {
-         _rmt_shutdown (handle, EIO);
-         return SAFE_READ_ERROR;
-       }
-    }
-
-  return status;
-}
-
-/* Write LENGTH bytes from BUFFER to remote tape connection HANDLE.
-   Return the number of bytes written.  */
-size_t
-rmt_write__ (int handle, char *buffer, size_t length)
-{
-  char command_buffer[COMMAND_BUFFER_SIZE];
-  RETSIGTYPE (*pipe_handler) ();
-  size_t written;
-
-  sprintf (command_buffer, "W%lu\n", (unsigned long) length);
-  if (do_command (handle, command_buffer) == -1)
-    return 0;
-
-  pipe_handler = signal (SIGPIPE, SIG_IGN);
-  written = full_write (WRITE_SIDE (handle), buffer, length);
-  signal (SIGPIPE, pipe_handler);
-  if (written == length)
-    {
-      long int r = get_status (handle);
-      if (r < 0)
-       return 0;
-      if (r == length)
-       return length;
-      written = r;
-    }
-
-  /* Write error.  */
-
-  _rmt_shutdown (handle, EIO);
-  return written;
-}
-
-/* Perform an imitation lseek operation on remote tape connection
-   HANDLE.  Return the new file offset if successful, -1 if on error.  */
-off_t
-rmt_lseek__ (int handle, off_t offset, int whence)
-{
-  char command_buffer[COMMAND_BUFFER_SIZE];
-  char operand_buffer[UINTMAX_STRSIZE_BOUND];
-  uintmax_t u = offset < 0 ? - (uintmax_t) offset : (uintmax_t) offset;
-  char *p = operand_buffer + sizeof operand_buffer;
-
-  *--p = 0;
-  do
-    *--p = '0' + (int) (u % 10);
-  while ((u /= 10) != 0);
-  if (offset < 0)
-    *--p = '-';
-
-  switch (whence)
-    {
-    case SEEK_SET: whence = 0; break;
-    case SEEK_CUR: whence = 1; break;
-    case SEEK_END: whence = 2; break;
-    default: abort ();
-    }
-
-  sprintf (command_buffer, "L%s\n%d\n", p, whence);
-
-  if (do_command (handle, command_buffer) == -1)
-    return -1;
-
-  return get_status_off (handle);
-}
-
-/* Perform a raw tape operation on remote tape connection HANDLE.
-   Return the results of the ioctl, or -1 on error.  */
-int
-rmt_ioctl__ (int handle, int operation, char *argument)
-{
-  switch (operation)
-    {
-    default:
-      errno = EOPNOTSUPP;
-      return -1;
-
-#ifdef MTIOCTOP
-    case MTIOCTOP:
-      {
-       char command_buffer[COMMAND_BUFFER_SIZE];
-       char operand_buffer[UINTMAX_STRSIZE_BOUND];
-       uintmax_t u = (((struct mtop *) argument)->mt_count < 0
-                      ? - (uintmax_t) ((struct mtop *) argument)->mt_count
-                      : (uintmax_t) ((struct mtop *) argument)->mt_count);
-       char *p = operand_buffer + sizeof operand_buffer;
-
-        *--p = 0;
-       do
-         *--p = '0' + (int) (u % 10);
-       while ((u /= 10) != 0);
-       if (((struct mtop *) argument)->mt_count < 0)
-         *--p = '-';
-
-       /* MTIOCTOP is the easy one.  Nothing is transferred in binary.  */
-
-       sprintf (command_buffer, "I%d\n%s\n",
-                ((struct mtop *) argument)->mt_op, p);
-       if (do_command (handle, command_buffer) == -1)
-         return -1;
-
-       return get_status (handle);
-      }
-#endif /* MTIOCTOP */
-
-#ifdef MTIOCGET
-    case MTIOCGET:
-      {
-       ssize_t status;
-       size_t counter;
-
-       /* Grab the status and read it directly into the structure.  This
-          assumes that the status buffer is not padded and that 2 shorts
-          fit in a long without any word alignment problems; i.e., the
-          whole struct is contiguous.  NOTE - this is probably NOT a good
-          assumption.  */
-
-       if (do_command (handle, "S") == -1
-           || (status = get_status (handle), status == -1))
-         return -1;
-
-       for (; status > 0; status -= counter, argument += counter)
-         {
-           counter = safe_read (READ_SIDE (handle), argument, status);
-           if (counter == SAFE_READ_ERROR || counter == 0)
-             {
-               _rmt_shutdown (handle, EIO);
-               return -1;
-             }
-         }
-
-       /* Check for byte position.  mt_type (or mt_model) is a small integer
-          field (normally) so we will check its magnitude.  If it is larger
-          than 256, we will assume that the bytes are swapped and go through
-          and reverse all the bytes.  */
-
-       if (((struct mtget *) argument)->MTIO_CHECK_FIELD < 256)
-         return 0;
-
-       for (counter = 0; counter < status; counter += 2)
-         {
-           char copy = argument[counter];
-
-           argument[counter] = argument[counter + 1];
-           argument[counter + 1] = copy;
-         }
-
-       return 0;
-      }
-#endif /* MTIOCGET */
-
-    }
-}
index bb1a180205b589b06eee3e4664996ba184f95b7c..b10daf6f69136f00367b087a02e05e7387938815 100644 (file)
@@ -16,7 +16,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 #include <quotearg.h>
 #include "common.h"
 
index cd8f77c2eadf3a75845708b162b5f6d6248c3f3f..aa3ede42d429c5b0dfa526d7608cae7dd47ffb8b 100644 (file)
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #include "common.h"
-#include "rmt.h"
+#include <rmt.h>
 #include <signal.h>
 
 void
@@ -118,11 +118,6 @@ sys_truncate (int fd)
   return write (fd, "", 0);
 }
 
-void
-sys_reset_uid_gid (void)
-{
-}
-
 size_t
 sys_write_archive_buffer (void)
 {
@@ -281,13 +276,6 @@ sys_truncate (int fd)
   return pos < 0 ? -1 : ftruncate (fd, pos);
 }
 
-void
-sys_reset_uid_gid (void)
-{
-  setuid (getuid ());
-  setgid (getgid ());
-}
-
 /* Return nonzero if NAME is the name of a regular file, or if the file
    does not exist (so it would be created as a regular file).  */
 static int
diff --git a/src/system.h b/src/system.h
deleted file mode 100644 (file)
index ef0e759..0000000
+++ /dev/null
@@ -1,519 +0,0 @@
-/* System dependent definitions for GNU tar.
-
-   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003,
-   2004 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.
-*/
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <alloca.h>
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
-#  define __attribute__(spec) /* empty */
-# endif
-#endif
-
-#include <sys/types.h>
-#include <ctype.h>
-
-/* IN_CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given
-   as an argument to <ctype.h> macros like `isspace'.  */
-#if STDC_HEADERS
-# define IN_CTYPE_DOMAIN(c) 1
-#else
-# define IN_CTYPE_DOMAIN(c) ((unsigned) (c) <= 0177)
-#endif
-
-#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
-#define ISODIGIT(c) ((unsigned) (c) - '0' <= 7)
-#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
-#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
-
-/* Declare string and memory handling routines.  Take care that an ANSI
-   string.h and pre-ANSI memory.h might conflict, and that memory.h and
-   strings.h conflict on some systems.  */
-
-#if STDC_HEADERS || HAVE_STRING_H
-# include <string.h>
-# if !STDC_HEADERS && HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-#else
-# include <strings.h>
-# ifndef strchr
-#  define strchr index
-# endif
-# ifndef strrchr
-#  define strrchr rindex
-# endif
-# ifndef memcpy
-#  define memcpy(d, s, n) bcopy ((char const *) (s), (char *) (d), n)
-# endif
-# ifndef memcmp
-#  define memcmp(a, b, n) bcmp ((char const *) (a), (char const *) (b), n)
-# endif
-#endif
-
-/* Declare errno.  */
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-/* Declare open parameters.  */
-
-#if HAVE_FCNTL_H
-# include <fcntl.h>
-#else
-# include <sys/file.h>
-#endif
-                               /* Pick only one of the next three: */
-#ifndef O_RDONLY
-# define O_RDONLY      0       /* only allow read */
-#endif
-#ifndef O_WRONLY
-# define O_WRONLY      1       /* only allow write */
-#endif
-#ifndef O_RDWR
-# define O_RDWR                2       /* both are allowed */
-#endif
-#ifndef O_ACCMODE
-# define O_ACCMODE (O_RDONLY | O_RDWR | O_WRONLY)
-#endif
-                               /* The rest can be OR-ed in to the above: */
-#ifndef O_CREAT
-# define O_CREAT       8       /* create file if needed */
-#endif
-#ifndef O_EXCL
-# define O_EXCL                16      /* file cannot already exist */
-#endif
-#ifndef O_TRUNC
-# define O_TRUNC       32      /* truncate file on open */
-#endif
-                               /* MS-DOG forever, with my love! */
-#ifndef        O_BINARY
-# define O_BINARY 0
-#endif
-
-/* Declare file status routines and bits.  */
-
-#include <sys/stat.h>
-
-#if !HAVE_LSTAT && !defined lstat
-# define lstat stat
-#endif
-
-#if STX_HIDDEN && !_LARGE_FILES /* AIX */
-# ifdef stat
-#  undef stat
-# endif
-# define stat(file_name, buf) statx (file_name, buf, STATSIZE, STX_HIDDEN)
-# ifdef lstat
-#  undef lstat
-# endif
-# define lstat(file_name, buf) statx (file_name, buf, STATSIZE, STX_HIDDEN | STX_LINK)
-#endif
-
-#if STAT_MACROS_BROKEN
-# undef S_ISBLK
-# undef S_ISCHR
-# undef S_ISCTG
-# undef S_ISDIR
-# undef S_ISFIFO
-# undef S_ISLNK
-# undef S_ISREG
-# undef S_ISSOCK
-#endif
-
-/* On MSDOS, there are missing things from <sys/stat.h>.  */
-#if MSDOS
-# define S_ISUID 0
-# define S_ISGID 0
-# define S_ISVTX 0
-#endif
-
-#ifndef S_ISDIR
-# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
-#endif
-#ifndef S_ISREG
-# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
-#endif
-
-#ifndef S_ISBLK
-# ifdef S_IFBLK
-#  define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
-# else
-#  define S_ISBLK(mode) 0
-# endif
-#endif
-#ifndef S_ISCHR
-# ifdef S_IFCHR
-#  define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
-# else
-#  define S_ISCHR(mode) 0
-# endif
-#endif
-#ifndef S_ISCTG
-# ifdef S_IFCTG
-#  define S_ISCTG(mode) (((mode) & S_IFMT) == S_IFCTG)
-# else
-#  define S_ISCTG(mode) 0
-# endif
-#endif
-#ifndef S_ISDOOR
-# define S_ISDOOR(mode) 0
-#endif
-#ifndef S_ISFIFO
-# ifdef S_IFIFO
-#  define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
-# else
-#  define S_ISFIFO(mode) 0
-# endif
-#endif
-#ifndef S_ISLNK
-# ifdef S_IFLNK
-#  define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
-# else
-#  define S_ISLNK(mode) 0
-# endif
-#endif
-#ifndef S_ISSOCK
-# ifdef S_IFSOCK
-#  define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
-# else
-#  define S_ISSOCK(mode) 0
-# endif
-#endif
-
-#if !HAVE_MKFIFO && !defined mkfifo && defined S_IFIFO
-# define mkfifo(file_name, mode) (mknod (file_name, (mode) | S_IFIFO, 0))
-#endif
-
-#ifndef S_ISUID
-# define S_ISUID 0004000
-#endif
-#ifndef S_ISGID
-# define S_ISGID 0002000
-#endif
-#ifndef S_ISVTX
-# define S_ISVTX 0001000
-#endif
-#ifndef S_IRUSR
-# define S_IRUSR 0000400
-#endif
-#ifndef S_IWUSR
-# define S_IWUSR 0000200
-#endif
-#ifndef S_IXUSR
-# define S_IXUSR 0000100
-#endif
-#ifndef S_IRGRP
-# define S_IRGRP 0000040
-#endif
-#ifndef S_IWGRP
-# define S_IWGRP 0000020
-#endif
-#ifndef S_IXGRP
-# define S_IXGRP 0000010
-#endif
-#ifndef S_IROTH
-# define S_IROTH 0000004
-#endif
-#ifndef S_IWOTH
-# define S_IWOTH 0000002
-#endif
-#ifndef S_IXOTH
-# define S_IXOTH 0000001
-#endif
-
-#define MODE_WXUSR     (S_IWUSR | S_IXUSR)
-#define MODE_R         (S_IRUSR | S_IRGRP | S_IROTH)
-#define MODE_RW                (S_IWUSR | S_IWGRP | S_IWOTH | MODE_R)
-#define MODE_RWX       (S_IXUSR | S_IXGRP | S_IXOTH | MODE_RW)
-#define MODE_ALL       (S_ISUID | S_ISGID | S_ISVTX | MODE_RWX)
-
-/* Include <unistd.h> before any preprocessor test of _POSIX_VERSION.  */
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif
-#ifndef SEEK_CUR
-# define SEEK_CUR 1
-#endif
-#ifndef SEEK_END
-# define SEEK_END 2
-#endif
-
-#ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-#endif
-#ifndef STDOUT_FILENO
-# define STDOUT_FILENO 1
-#endif
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
-
-/* Declare make device, major and minor.  Since major is a function on
-   SVR4, we have to resort to GOT_MAJOR instead of just testing if
-   major is #define'd.  */
-
-#if MAJOR_IN_MKDEV
-# include <sys/mkdev.h>
-# define GOT_MAJOR
-#endif
-
-#if MAJOR_IN_SYSMACROS
-# include <sys/sysmacros.h>
-# define GOT_MAJOR
-#endif
-
-/* Some <sys/types.h> defines the macros. */
-#ifdef major
-# define GOT_MAJOR
-#endif
-
-#ifndef GOT_MAJOR
-# if MSDOS
-#  define major(device)                (device)
-#  define minor(device)                (device)
-#  define makedev(major, minor)        (((major) << 8) | (minor))
-#  define GOT_MAJOR
-# endif
-#endif
-
-/* For HP-UX before HP-UX 8, major/minor are not in <sys/sysmacros.h>.  */
-#ifndef GOT_MAJOR
-# if defined(hpux) || defined(__hpux__) || defined(__hpux)
-#  include <sys/mknod.h>
-#  define GOT_MAJOR
-# endif
-#endif
-
-#ifndef GOT_MAJOR
-# define major(device)         (((device) >> 8) & 0xff)
-# define minor(device)         ((device) & 0xff)
-# define makedev(major, minor) (((major) << 8) | (minor))
-#endif
-
-#undef GOT_MAJOR
-
-/* Declare wait status.  */
-
-#if HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(s)        (((s) >> 8) & 0xff)
-#endif
-#ifndef WIFSIGNALED
-# define WIFSIGNALED(s)        (((s) & 0xffff) - 1 < (unsigned) 0xff)
-#endif
-#ifndef WTERMSIG
-# define WTERMSIG(s)   ((s) & 0x7f)
-#endif
-
-/* FIXME: It is wrong to use BLOCKSIZE for buffers when the logical block
-   size is greater than 512 bytes; so ST_BLKSIZE code below, in preparation
-   for some cleanup in this area, later.  */
-
-/* Extract or fake data from a `struct stat'.  ST_BLKSIZE gives the
-   optimal I/O blocksize for the file, in bytes.  Some systems, like
-   Sequents, return st_blksize of 0 on pipes.  */
-
-#define DEFAULT_ST_BLKSIZE 512
-
-#if !HAVE_ST_BLKSIZE
-# define ST_BLKSIZE(statbuf) DEFAULT_ST_BLKSIZE
-#else
-# define ST_BLKSIZE(statbuf) \
-    ((statbuf).st_blksize > 0 ? (statbuf).st_blksize : DEFAULT_ST_BLKSIZE)
-#endif
-
-/* Extract or fake data from a `struct stat'.  ST_NBLOCKS gives the
-   number of ST_NBLOCKSIZE-byte blocks in the file (including indirect blocks).
-   HP-UX counts st_blocks in 1024-byte units,
-   this loses when mixing HP-UX and BSD filesystems with NFS.  AIX PS/2
-   counts st_blocks in 4K units.  */
-
-#if !HAVE_ST_BLOCKS
-# if defined(_POSIX_SOURCE) || !defined(BSIZE)
-#  define ST_NBLOCKS(statbuf) ((statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0))
-# else
-   off_t st_blocks ();
-#  define ST_NBLOCKS(statbuf) (st_blocks ((statbuf).st_size))
-# endif
-#else
-# define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
-# if defined(hpux) || defined(__hpux__) || defined(__hpux)
-#  define ST_NBLOCKSIZE 1024
-# else
-#  if defined(_AIX) && defined(_I386)
-#   define ST_NBLOCKSIZE (4 * 1024)
-#  endif
-# endif
-#endif
-
-#ifndef ST_NBLOCKSIZE
-#define ST_NBLOCKSIZE 512
-#endif
-
-/* This is a real challenge to properly get MTIO* symbols :-(.  ISC uses
-   <sys/gentape.h>.  SCO and BSDi uses <sys/tape.h>; BSDi also requires
-   <sys/tprintf.h> and <sys/device.h> for defining tp_dev and tpr_t.  It
-   seems that the rest use <sys/mtio.h>, which itself requires other files,
-   depending on systems.  Pyramid defines _IOW in <sgtty.h>, for example.  */
-
-#if HAVE_SYS_GENTAPE_H
-# include <sys/gentape.h>
-#else
-# if HAVE_SYS_TAPE_H
-#  if HAVE_SYS_DEVICE_H
-#   include <sys/device.h>
-#  endif
-#  if HAVE_SYS_PARAM_H
-#   include <sys/param.h>
-#  endif
-#  if HAVE_SYS_BUF_H
-#   include <sys/buf.h>
-#  endif
-#  if HAVE_SYS_TPRINTF_H
-#   include <sys/tprintf.h>
-#  endif
-#  include <sys/tape.h>
-# else
-#  if HAVE_SYS_MTIO_H
-#   include <sys/ioctl.h>
-#   if HAVE_SGTTY_H
-#    include <sgtty.h>
-#   endif
-#   if HAVE_SYS_IO_TRIOCTL_H
-#    include <sys/io/trioctl.h>
-#   endif
-#   include <sys/mtio.h>
-#  endif
-# endif
-#endif
-
-/* Declare standard functions.  */
-
-#if STDC_HEADERS
-# include <stdlib.h>
-#else
-void *malloc ();
-char *getenv ();
-#endif
-
-#include <stdbool.h>
-#include <stddef.h>
-
-#include <stdio.h>
-#if !defined _POSIX_VERSION && MSDOS
-# include <io.h>
-#endif
-
-#if WITH_DMALLOC
-# undef HAVE_DECL_VALLOC
-# define DMALLOC_FUNC_CHECK
-# include <dmalloc.h>
-#endif
-
-#include <limits.h>
-
-#ifndef MB_LEN_MAX
-# define MB_LEN_MAX 1
-#endif
-
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-/* These macros work even on ones'-complement hosts (!).
-   The extra casts work around common compiler bugs.  */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-#define TYPE_MINIMUM(t) (TYPE_SIGNED (t) \
-                        ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) \
-                        : (t) 0)
-#define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t)))
-
-/* Bound on length of the string representing an integer value of type t.
-   Subtract one for the sign bit if t is signed;
-   302 / 1000 is log10 (2) rounded up;
-   add one for integer division truncation;
-   add one more for a minus sign if t is signed.  */
-#define INT_STRLEN_BOUND(t) \
-  ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \
-   + 1 + TYPE_SIGNED (t))
-
-#define UINTMAX_STRSIZE_BOUND (INT_STRLEN_BOUND (uintmax_t) + 1)
-\f
-/* Prototypes for external functions.  */
-
-#if HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#if !HAVE_SETLOCALE
-# define setlocale(category, locale) /* empty */
-#endif
-
-#include <time.h>
-#if defined(HAVE_SYS_TIME_H) && defined(TIME_WITH_SYS_TIME)
-# include <sys/time.h>
-#endif
-#if ! HAVE_DECL_TIME
-time_t time ();
-#endif
-
-#ifdef HAVE_UTIME_H
-# include <utime.h>
-#endif
-
-/* Library modules.  */
-
-#include <dirname.h>
-#include <error.h>
-#include <savedir.h>
-#include <unlocked-io.h>
-#include <xalloc.h>
-
-#include <gettext.h>
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-#if MSDOS
-# include <process.h>
-# define SET_BINARY_MODE(arc) setmode(arc, O_BINARY)
-# define ERRNO_IS_EACCES errno == EACCES
-# define mkdir(file, mode) (mkdir) (file)
-#else
-# include <pwd.h>
-# include <grp.h>
-# define SET_BINARY_MODE(arc)
-# define ERRNO_IS_EACCES 0
-#endif
-
-#if XENIX
-# include <sys/inode.h>
-#endif
index 430bc2234dc246d1738740a7574acf9f4994129e..87029a8e73b2dcd7cef16c67b87aa64f1b2b6486 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -19,7 +19,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #include <fnmatch.h>
 #include <argp.h>
@@ -38,6 +38,7 @@
 
 #include <getdate.h>
 #include <localedir.h>
+#include <rmt.h>
 #include <prepargs.h>
 #include <quotearg.h>
 #include <xstrtol.h>
@@ -1060,7 +1061,7 @@ parse_opt(int key, char *arg, struct argp_state *state)
       break;
       
     case RMT_COMMAND_OPTION:
-      rmt_command_option = arg;
+      rmt_command = arg;
       break;
       
     case RSH_COMMAND_OPTION:
@@ -1510,9 +1511,6 @@ decode_options (int argc, char **argv)
   if (utc_option)
     verbose_option = 2;
 
-  if (!rmt_command_option)
-    rmt_command_option = DEFAULT_RMT_COMMAND;
-  
   /* Forbid using -c with no input files whatsoever.  Check that `-f -',
      explicit or implied, is used correctly.  */
 
index 6db902ba9b2356de1e640606cea5b6e763195821..6b4c9c06496e96a70cf3c06ca5ecb6201b8d06fa 100644 (file)
@@ -22,7 +22,7 @@
    of the archive.  No attempt is made to record the reads from the args; if
    they're on raw tape or something like that, it'll probably lose...  */
 
-#include "system.h"
+#include <system.h>
 #include <quotearg.h>
 #include "common.h"
 
index 5aba250b2d94009628bb4c6638d595f6faa122fd..cf26889df5782fe81839a574b0329becf8d09cd6 100644 (file)
@@ -16,7 +16,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 #include <quotearg.h>
 #include "common.h"
 #ifdef HAVE_ICONV_H
index b63cdb769f05f7d99dc6fbe35568c5a0ea17fd01..1ad6be80ecda2786ef9728d5d797e6cc173411cc 100644 (file)
@@ -16,7 +16,7 @@
    with this program; if not, write to the Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-#include "system.h"
+#include <system.h>
 
 #include <fnmatch.h>
 #include <hash.h>
This page took 0.091817 seconds and 4 git commands to generate.