Remove GNU cpio.
authorPeter Avalos <pavalos@theshell.com>
Sun, 21 Jun 2009 21:32:18 +0000 (11:32 -1000)
committerPeter Avalos <pavalos@theshell.com>
Sun, 21 Jun 2009 21:33:44 +0000 (11:33 -1000)
50 files changed:
Makefile_upgrade.inc
contrib/cpio/COPYING [deleted file]
contrib/cpio/COPYING.LIB [deleted file]
contrib/cpio/ChangeLog [deleted file]
contrib/cpio/FREEBSD-upgrade [deleted file]
contrib/cpio/NEWS [deleted file]
contrib/cpio/README [deleted file]
contrib/cpio/alloca.c [deleted file]
contrib/cpio/copyin.c [deleted file]
contrib/cpio/copyout.c [deleted file]
contrib/cpio/copypass.c [deleted file]
contrib/cpio/cpio.1 [deleted file]
contrib/cpio/cpio.h [deleted file]
contrib/cpio/cpio.texi [deleted file]
contrib/cpio/cpiohdr.h [deleted file]
contrib/cpio/defer.c [deleted file]
contrib/cpio/defer.h [deleted file]
contrib/cpio/dirname.c [deleted file]
contrib/cpio/dstring.c [deleted file]
contrib/cpio/dstring.h [deleted file]
contrib/cpio/error.c [deleted file]
contrib/cpio/extern.h [deleted file]
contrib/cpio/filemode.c [deleted file]
contrib/cpio/filetypes.h [deleted file]
contrib/cpio/getopt.c [deleted file]
contrib/cpio/getopt.h [deleted file]
contrib/cpio/getopt1.c [deleted file]
contrib/cpio/global.c [deleted file]
contrib/cpio/idcache.c [deleted file]
contrib/cpio/main.c [deleted file]
contrib/cpio/makepath.c [deleted file]
contrib/cpio/rmt.h [deleted file]
contrib/cpio/rtapelib.c [deleted file]
contrib/cpio/safe-stat.h [deleted file]
contrib/cpio/stripslash.c [deleted file]
contrib/cpio/system.h [deleted file]
contrib/cpio/tar.c [deleted file]
contrib/cpio/tar.h [deleted file]
contrib/cpio/tarhdr.h [deleted file]
contrib/cpio/userspec.c [deleted file]
contrib/cpio/util.c [deleted file]
contrib/cpio/version.c [deleted file]
contrib/cpio/xmalloc.c [deleted file]
contrib/cpio/xstrdup.c [deleted file]
etc/defaults/make.conf
gnu/usr.bin/Makefile
gnu/usr.bin/cpio/Makefile [deleted file]
gnu/usr.bin/cpio/doc/Makefile [deleted file]
share/man/man5/make.conf.5
usr.bin/cpio/Makefile

index a331288..234ee67 100644 (file)
@@ -1116,3 +1116,6 @@ TO_REMOVE+=/usr/share/man/cat5/host.conf.5.gz
 TO_REMOVE+=/usr/share/man/man5/host.conf.5.gz
 TO_REMOVE+=/usr/share/misc/magic.mime
 TO_REMOVE+=/usr/share/misc/magic.mime.mgc
+TO_REMOVE+=/usr/bin/gcpio
+TO_REMOVE+=/usr/share/man/cat1/gcpio.1.gz
+TO_REMOVE+=/usr/share/man/man1/gcpio.1.gz
diff --git a/contrib/cpio/COPYING b/contrib/cpio/COPYING
deleted file mode 100644 (file)
index a43ea21..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                          675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-       Appendix: How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    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 of the License, 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.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/contrib/cpio/COPYING.LIB b/contrib/cpio/COPYING.LIB
deleted file mode 100644 (file)
index bbe3fe1..0000000
+++ /dev/null
@@ -1,481 +0,0 @@
-                 GNU LIBRARY GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
-                    675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-\f
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-\f
-                 GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-     Appendix: How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library 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
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/contrib/cpio/ChangeLog b/contrib/cpio/ChangeLog
deleted file mode 100644 (file)
index eaf14a9..0000000
+++ /dev/null
@@ -1,968 +0,0 @@
-Tue Jan 16 19:03:05 1996  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * util.c: An I/O error reading a file would cause the last byte
-       of the next file to be corrupted in the archive.  Thanks to a
-       buggy NT NFS server for pointing out this problem.
-       * Version 2.4.2 released.
-
-Tue Jan  9 23:19:37 1996  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * copyout.c: missed 1 part of last bug fix.
-
-Mon Jan  8 16:49:01 1996  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * copyout.c, copypass.c: Use result of readlink() as length
-       of link name instead of size from lstat().  On some OS's lstat() 
-       doesn't return the true length in size.  Bug reported by
-       Robert Joop (rj@rainbow.IN-berlin.DE).
-
-Wed Dec 20 10:52:56 1995  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * rmt.c:  Added temporary kludge so make rmt will work on Linux.
-       * configure.in:  Only define HAVE_UTIME_H if utime.h declares
-       struct utimbuf.
-       * Makefile.in:  Change prefix, exec_prefix and bindir to get their
-       values from configure.  Added cpio.info to DISTFILES.
-       * cpio.texi:  Added INFO-DIR-ENTRY.
-       * Version 2.4.1 released.
-
-Wed Nov 22 19:37:05 1995  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-        * cpio.texi:  Updated release date and FSF's address.
-        * NEWS: Listed major new features for 2.4.
-       * mt.c, mt.1: Added seek and fsfm commands.
-       * Version 2.4 released.
-
-Tue Jun 27 19:14:27 1995  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-        * configure.in: fixed for new autoconf.  Added check to make
-       sure fnmatch() works.
-        * Makefile.in: changed realclean to maintainer-clean.  Added
-       support to handle fnmatch separate from other LIBOBJS.
-        * cpio.texi:  More changes for 2.4.
-
-Wed Dec 14 16:14:27 1994  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * copypass.h:  When given the -a option, set the access time of
-       the copy to be the access time of the original (instead of the
-       modification time of the original).  Reported by
-       karney@pppl.gov (Charles Karney).
-       * cpio.texi:  Updated with changes for 2.4.
-
-Wed Nov  3 18:18:07 1994  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * safe-stat.h, Makefile.in:  New file used by mkdir.c.  This will go
-       away when we get the real safe-xstat.[ch]in for mkdir.c.
-       * main.c:  Don't mention [--null] twice in -p's usage message.
-       Changed --no-absolute-paths to --no-absolute-filenames.
-       * cpio.1:  Updated man page with new features.
-       * cpio.texi, texinfo.tex, Makefile.in:  Added texi documentation
-       from Robert Carleton (rbc@gnu.ai.mit.edu).
-
-Mon Oct  3 00:46:30 1994  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * makefile.pc, system.h:  Changes to compile with Borland C++ 4.0.
-
-Thu Sep 29 22:15:50 1994  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * makepath.c: Don't #define index if it is already #defined.
-
-       * mt.c:  Check for __hpux defined instead of __hpux__.  Reported
-       by ericb@lsid.hp.com (Eric Backus).
-
-Thu Sep 29 11:21:31 1994  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * extern.h, util.c, copyout.c, copypass.c, main.c, global.c:
-       Never mind --ignore-disk-input-errors flag, we'll just always
-       do that, like tar.
-
-       * global.c, extern.h, main.c, copyin.c, copyout.c, copypass.c:
-       Added --quiet flag to supress printing number of blocks copied.
-
-       * global.c, extern.h:  If compiled with gcc, make input_bytes
-       and output_bytes `long long' instead of `long'.  We need more
-       than 32 bits to keep track of the number of bytes copied to
-       and from tape drives that hold more than 4Gbytes.
-
-       * util.c, copyin.c, main.c, global.c, extern.h:  Added
-       --only-verify-crc flag to read a CRC format archive and verify
-       its contents' CRCs.
-
-       * copyout.c:  Fixed problem with creating oldc format archives
-       on machines with 16 bit ints.  Reported by mpoole@cix.compulink.co.uk
-       (Martin Poole).
-
-       * mt.c: Need to open tape WR_ONLY for erase command (and probably
-       others?).  Reported by robert@hst.e.technik.uni-kl.de (Robert
-       Vogelgesan).  Accept `eject' as a synonym for `offline'.  Accept
-       `-t' as a synonym for `-f' (to be compatible with HPUX mt, which 
-       only accepts `-t').
-
-Wed Sep 28 12:01:55 1994  John Oleynick  (juo@wombat.gnu.ai.mit.edu)
-       * extern.h, global.c, main.c, util.c: only write sparse files
-       when given --sparse flag.
-       * extern.h, util.c, copyout.c, copypass.c, main.c, global.c:
-       Added support for --ignore-disk-input-errors flag.
-
-Wed Aug 24 12:55:38 1994  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)
-
-       * configure.in: Replace calls to AC_REMOTE_TAPE and AC_RSH
-       with equivalent code, since those macros are going away.
-
-Sun Feb 13 00:56:48 1994  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-       * extern.h, global.c, main.c, util.c:  Added code to 
-       tape_buffered_peek() to properly handle large, corrutped 
-       archives, without overrunning the allocated buffer and
-       dumping core.  Also changed the way the input and output 
-       buffers are allocated in initialize_buffers().
-       
-Tue Jan 25 01:04:32 1994  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-       * copyin.c, copyout.c, copypass.c, extern.h, main.c, tar.c, util.c:
-       Redid i/o buffer code.  Previously, the same routines buffered input and
-       output for accessing the archive and the filesystem.  Now there are
-       separate routines for buffering input and output and for buffering the
-       archive and the filesystem.  This simplifies much of the buffer code
-       (e.g., only input from the archive has to check for end of tape and
-       allow the tape to be changed, only output to the filesystem has to
-       handle byte and word swapping, etc.; previously one routine had to
-       handle all of these special cases) This is how the routines got split
-       and renamed (old name -> new name):
-
-               clear_rest_of_block -> tape_clear_rest_of_block
-               copy_files -> copy_files_tape_to_disk
-                   "      -> copy_files_disk_to_disk
-                   "      -> copy_files_disk_to_tape
-               copy_buf_out -> disk_buffered_write
-                   "        -> tape_buffered_write
-               copy_in_buf -> tape_buffered_read
-               empty_output_buffer -> tape_empty_output_buffer
-                   "               -> disk_empty_output_buffer
-               fill_input_buffer -> tape_fill_input_buffer
-                   "             -> disk_fill_input_buffer
-               pad_output -> tape_pad_output
-               peek_in_buf -> tape_buffered_peek
-               skip_padding -> tape_skip_padding
-               toss_input -> tape_toss_input
-
-       * extern.h, global.c, main.c, util.c:  Added support for
-       writing sparse files.
-
-Tue Dec 28 23:01:36 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-       * util.c, system.h, makepath.c, extern.h: don't define chown() 
-       and don't typedef uid_t and gid_t if we are being compiled
-       by DJGPP.
-
-       * copyin.c, extern.h, global.c, main.c:  Added support for
-       --rename-batch-file.
-       
-       * copyin.c, copyout.c, extern.h:  Cleaned up to pass gcc -Wall.
-
-Wed Dec 22 02:17:44 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * makepath.c, copypass.c, copyin.c:  If cpio was creating a
-       directory that contained `.' in the pathname (e.g. `foo/./bar'),
-       it would complain that it could not create `.', since it already
-       exists.  From schwab@issan.informatik.uni-dortmund.de (Andreas
-       Schwab).
-
-       * mt.c:  Added "eject" as a synonym for "offline".
-
-       * util.c:  Slight modification to when we lseek with
-       BROKEN_LONG_TAPE_DRIVER (do it every 1Gb, instead 
-       of every 2Gb).
-
-       * copyin.c, global.c, extern.h:  Added --no-absolute-paths option, 
-       to ignore absolute paths in archives.
-
-Tue Dec 21 01:30:59 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * util.c:  Fix for copying new_media_message_after_number.  From
-       Christian.Kuehnke@arbi.informatik.uni-oldenburg.de (Christian
-       Kuehnke).
-
-Thu Jul 29 20:35:57 1993  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)
-
-       * Makefile.in (config.status): Run config.status --recheck, not
-       configure, to get the right args passed.
-
-Mon Jul 19 23:01:00 1993  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)
-
-       * Makefile.in (libdir): Use standard GNU value --
-       $(exec_prefix)/lib, not /etc.
-       (.c.o): Put CFLAGS last.
-
-Thu Jul  8 19:43:39 1993  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
-
-       * Makefile.in: Add rules for remaking Makefile, configure,
-       config.status. 
-
-Mon Jul  5 14:54:08 1993  John Oleynick  (juo@spiff.gnu.ai.mit.edu)
-
-       * cpio.1:  Updated man page for 2.3.
-       * Makefile.in:  Create distribution with .gz extension, instead of .z.
-
-Tue Jun 29 18:54:37 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * Makefile.in: Added installdirs target (using mkinstalldirs).
-       * Added mkinstalldirs script.
-       * main.c, mt.c:  Added --help option.  Changed usage() to
-       take a stream and exit value (so --help can print on stdout
-       and return a 0 exit status).
-       * extern.h:  Removed usage()'s prototype (it was out of date,
-       and only used in main.c).
-
-Thu May  6 00:22:22 1993  John Oleynick  (juo@hal.gnu.ai.mit.edu)
-
-       * cpio.1:  Added hpbin and hpodc.
-
-Tue May  4 00:32:29 1993  John Oleynick  (juo@hal.gnu.ai.mit.edu)
-
-       * copyin.c (process_copy_in), copypass.c (process_copy_pass):  When
-       deleting an existing file, if the file is a directory, use rmdir()
-       instead of unlink().
-
-Thu Apr 29 14:43:56 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * tar.c (read_in_tar_header):  Clear non-protection bits from
-       mode, in case tar has left some device bits in there.
-
-Wed Apr 28 10:36:53 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * util.c: Added code to try and work around broken tape drivers
-       that have problems with tapes > 2Gb.
-
-       * copyout.c (process_copy_out): Pass file_hdr to 
-       writeout_other_defers() and add_link_defer() by reference, 
-       not by value.
-
-       * copyin.c (process_copy_in): Pass file_hdr to defer_copyin()
-       and create_defered_links() by reference, not by value.
-
-       * defer.c: include <sys/types.h> (to build on BSD 4.3 on HP300)
-
-Fri Apr 16 18:01:17 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * mt.c, util.c: Include <sys/mtio.h> if HAVE_SYS_MTIO_H is 
-       defined, not HAVE_MTIO_H.
-
-Wed Apr 14 17:37:46 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * util.c: Include <sys/io/trioctl.h> if HAVE_SYS_IO_TRIOCTL_H
-       is defined.
-
-       * mt.c: Only include <sys/mtio.h> if HAVE_SYS_MTIO_H is defined.
-
-Fri Apr  2 13:09:11 1993  John Oleynick  (juo@goldman.gnu.ai.mit.edu)
-
-       * configure.in: Added fnmatch to AC_REPLACE_FUNCS.  Added
-       sys/io/trioctl.h to AC_HAVE_HEADERS.
-
-       * Makefile.in: Removed fnmatch.o from OBJS.
-
-       * copyin.c: Only include "fnmatch.h" if FNM_PATHNAME isn't
-       defined yet.
-
-       * mt.c: Include <sys/io/trioctl.h> if HAVE_SYS_IO_TRIOCTL_H is
-       defined.
-
-Mon Mar 29 17:04:06 1993  John Oleynick  (juo@hal.gnu.ai.mit.edu)
-
-       * Many changes for supporting HPUX Context Dependent Files;
-       also some bug fixes to fix problems with multiply (hard) linked
-       device files; minor changes to support HPUX format archives
-       (slightly broken?) System V.4 posix tar archives and HPUX
-       posix tar archives.
-
-       * Makefile.in: New files defer.o, defer,c and defer.h; added
-       -DSYMLINK_USES_UMASK and -DHPUX_CDF comments; changed dist rule
-       to use gzip with tar, instead of compress.
-
-       * copyin.c: changes for new arf_hpbinary and arf_hpascii formats;
-       HPUX CDF's; DEBUG_CPIO; fixes to properly handle multiple
-       links in newc and crc format archives (new routines defer_copyin(),
-       create_defered_links(), create_final_defers()); move most
-       multiple (hard) link code to new routines link_name() and
-       link_to_maj_min_ino(); use new macro UMASKED_SYMLINK instead of
-       symlink().
-
-       * copyout.c: fixes to properly handle multiple links in newc
-       and crc format archives (new routines last_link(), 
-       count_defered_links_to_dev_ino(), add_link_defer(),
-       writeout_other_defers(), writeout_final_defers(),
-       writeout_defered_file()); support for new arf_hpbinary and
-       arf_hpascii formats; support for HPUX CDF's.
-
-       * copypass.c: move most multiple link code to new routines
-       link_name() and link_to_maj_min_ino(); use new macro UMASKED_SYMLINK
-       instead of symlink(); support for HPUX CDF's.
-
-       * extern.h: added arf_hpascii and arf_hpbinary archive enum types;
-       added debug_flag.
-
-       * global.c: added debug_flag.
-
-       * main.c: added debug_flag; support for hpodc and hpbin formats.
-
-       * makepath.c: split from standard makpath.c to add support
-       for HPUX CDF's.
-
-       * mt.c: added !defined(__osf__) (from Andrew Marquis
-       <amarquis@genome.wi.mit.edu>).
-
-       * system.h: new macro UMASKED_SYMLINK
-
-       * tar.c: minor changes to read (slightly broken?) System V.4 posix 
-       tar archives and HPUX posix tar archives.
-
-       * util.c: HPUX CDF support (including new routines
-       add_cdf_double_slashes() and islasparentcdf()); new routine
-       umasked_symlink().
-
-Sun Mar 14 23:00:14 1993  Jim Meyering  (meyering@comco.com)
-
-       * copypass.c (process_copy_pass): Use <=, not just <, when comparing
-       mtimes.  From Pieter Bowman <bowman@math.utah.edu>.
-
-Fri Jan 15 14:35:37 1993  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)
-
-       * copyin.c: Move include of fnmatch.h to get right FNM* macros.
-
-Tue Nov 24 08:45:32 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
-
-       * Version 2.2.
-
-       * copyout.c (process_copy_out): Add parens for gcc -Wall.
-       From Jim Meyering.
-
-       * system.h: Use HAVE_FCNTL_H, not USG.
-
-       * dstring.c, mt.c, system.h: Use HAVE_STRING_H, not USG.
-
-Fri Nov 20 22:47:18 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
-
-       * copyin.c (read_in_binary): Copy the dev and ino that are
-       already in `file_hdr' into `short_hdr'.
-       From dao@abars.att.com (David A Oshinsky).
-
-       * system.h [!_POSIX_VERSION]: Declare lseek as off_t, not long.
-       From Karl Berry.
-
-Wed Oct 14 13:53:41 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
-
-       * Version 2.1.
-
-Tue Oct 13 22:51:34 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
-
-       * main.c: Add --swap equivalent to -b.
-
-       * mt.c: Add f_force_local variable and -V --version option.
-
-Fri Oct  2 18:42:27 1992  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)
-
-       * main.c (long_opts, usage): Add --force-local option.
-
-Thu Oct  1 23:23:43 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
-
-       * main.c (process_args) [__MSDOS__]: Don't call geteuid.
-
-       * copyin.c (read_in_{old,new}_ascii): Use `l' for sscanf into longs.
-       * copyout.c (write_out_header): Ditto for sprintf.
-       * global.c, extern.h: Make input_size and output_size long.
-
-Thu Sep 10 23:39:30 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
-
-       * global.c, extern.h: Add new var f_force_local to work with
-       rmt.h change from tar.
-
-Sun Aug 23 00:18:20 1992  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)
-
-       * Version 2.0.
-
-       * tar.c (otoa): Compute value in an unsigned long, not an int.
-       * copyout.c (write_out_header) [__MSDOS__]: Don't use dev_t.
-
-       * main.c (process_args): By default, don't chown for non-root users.
-
-Sat Aug 22 14:17:54 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
-
-       * global.c, extern.h: Use uid_t and gid_t.
-
-       * main.c (main) [__EMX__]: Expand wildcards.
-       * system.h [__EMX__]: Alias some error names.  From Kai Uwe Rommel.
-
-       * extern.h [__STDC__]: Use prototypes.
-
-       * copyin.c (process_copy_in), copyout.c (process_copy_out),
-       copypass.c (process_copy_pass): Open all files with O_BINARY.
-       Add cast to chmod call.
-       * util.c: Add cast to bcopy calls.  Make hash_insert static.
-       From Kai Uwe Rommel.
-
-Thu Aug 20 22:03:49 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
-
-       * util.c (peek_in_buf): Don't print "end of file" before
-       getting the next reel of medium.
-
-       * copyin.c (read_in_old_ascii): Allocate space for NUL terminator.
-       Print newline for dot line when done, even if appending.
-
-Thu Jul 23 16:34:53 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
-
-       * tar.c (write_out_tar_header, read_in_tar_header)
-       [__MSDOS__]: Don't try to get user and group names.
-       * extern.h: Don't declare the functions to do it (need uid_t).
-
-       * main.c [__MSDOS__]: Ignore the -R option.
-
-       * system.h: Define makedev if defining major and minor.
-
-       * copyin.c, copyout.c [__MSDOS__]: setmode on archive_des, not
-       0 and 1.
-
-Sat Jul 18 14:30:55 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
-
-       * tar.c, stripslash.c, userspec.c, cpiohdr.h, tar.h, tarhdr.h,
-       system.h: New files.
-       * Move portability stuff from various files to system.h.
-       * cpio.h: Rename header structure and members, and add
-       new structure for SVR4 format.
-       * copyin.c, copyout.c: Use the new structure internally, the
-       old one only for I/O in the old formats.
-       * copyin.c (read_in_header): Recognize the new archive formats.
-       (read_in_new_ascii, read_pattern_file, skip_padding): New functions.
-       (swab_array): Do the swapping using char pointers instead of
-       bitwise arithmetic.
-       (process_copy_in): Handle byte and halfword swapping and new formats.
-       Ok if a directory we want to make already exists, but set its perms.
-       Do chmod after chown to fix any set[ug]id bits.
-       Use `struct utimbuf' instead of a long array.
-       * copyout.c (write_out_header): Handle new formats.
-       (process_copy_out): Use `struct utimbuf'.
-       Handle appending and new formats.
-       Remove any leading `./' from filenames.
-       (read_for_checksum, clear_rest_of_block, pad_output): New functions.
-       * copypass.c (process_copy_pass): Use `struct utimbuf'.
-       Ok if a directory we want to make already exists, but set its perms.
-       Do chmod after chown to fix any set[ug]id bits.
-       Don't change perms of `.'.
-       * extern.h, global.c: Replace the separate format flags with
-       one variable.  Add new variables for the new options.
-       * main.c: Add new options -A --append, -H --format, -C --io-size,
-       -M --message, --no-preserve-owner, -R --owner, -E --pattern-file,
-       -V --dot, -s --swap-bytes, -S --swap-halfwords, -b, -I, -k, -O.
-       (usage): Document them.
-       (process_args): Recognize them.  Use open_archive.
-       (initialize_buffers): Allow room for tar archives and double buffers.
-       * util.c (empty_output_buffer_swap): New function.
-       (empty_output_buffer): Call it if swapping current file.
-       Check additional end of media indicators.
-       (swahw_array, peek_in_buf, prepare_append, open_archive,
-       set_new_media_message): New functions.
-       (fill_input_buffer): Don't print error message if end of media.
-       (toss_input): Don't seek, always read.
-       (copy_files): Update crc if needed.
-       (find_inode_file, add_inode): Check major and minor numbers as
-       well as dev.
-       (get_next_reel): Prompt user if archive name is unknown.
-       Print fancy messages.
-       Close the archive and reopen it.
-
-       Above primarily from John Oleynick <juo@klinzhai.rutgers.edu>.
-
-       * util.c (find_inode_file): Use modulus when computing initial
-       loop index.
-       (add_inode): Zero out new entry.
-       From scott@sctc.com (Scott Hammond).
-
-       * cpio.h, copyin.c, copyout.c: Rename `struct cpio_header'
-       members from h_foo to c_foo.
-
-Wed May 20 00:09:26 1992  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)
-
-       * copyin.c:  If we include a header file specifically to get
-       major et al., assume we have them.
-
-Mon Mar  9 19:29:20 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
-
-       * mt.c (main): rmtclose the tape file descriptor.
-
-       * main.c (main): rmtclose the archive, if not in copy-pass mode.
-
-       * util.c (create_all_directories): Don't print a message when
-       creating a directory, for UNIX compat.
-
-       * copyin.c (process_copy_in), copypass.c (process_copy_pass):
-       Skip file if it has the same timestamp as existing file, not just
-       if it is older than existing file, for UNIX compat.
-
-Tue Mar  3 12:06:58 1992  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)
-
-       * main.c, mt.c (usage): Document long options as starting with
-       -- instead of +.
-
-       * extern.h: Only declare lseek if not _POSIX_VERSION.
-
-Tue Dec 24 00:19:45 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
-
-       * copyin.c: Use MAJOR_IN_MKDEV and MAJOR_IN_SYSMACROS instead
-       of USG and _POSIX_VERSION to find major and minor macros.
-
-       * mt.c: Use unistd.h and stdlib.h if available.
-
-       * copyin.c, copyout.c, copypass.c, util.c, extern.h: Change
-       POSIX ifdefs to HAVE_UNISTD_H and _POSIX_VERSION.
-
-Sun Aug 25 06:31:08 1991  David J. MacKenzie  (djm at apple-gunkies)
-
-       * Version 1.5.
-
-       * bcopy.c: New file (moved from util.c).
-
-       * mt.c (print_status): Not all hpux machines have mt_fileno
-       and mt_blkno; rather than trying to track HP's product line,
-       just assume none of them have them.
-
-       * util.c (copy_buf_out, copy_in_buf): Use more efficient
-       copying technique for a big speedup.
-
-Fri Aug  2 04:06:45 1991  David J. MacKenzie  (djm at apple-gunkies)
-
-       * configure: Support +srcdir.  Create config.status.
-       Remove it and Makefile if interrupted while creating them.
-
-Thu Jul 18 09:43:40 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
-
-       * Many files: use __MSDOS__ instead of MSDOS.
-
-       * util.c, configure: Use NO_MTIO instead of HAVE_MTIO, to keep
-       up with tar and rtapelib.c.
-
-Mon Jul 15 13:45:30 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
-
-       * configure: Also look in sys/signal.h for signal decl.
-
-Thu Jul 11 01:50:32 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
-
-       * Version 1.4.
-
-       * configure: Remove /etc and /usr/etc from PATH to avoid
-       finding /etc/install.
-
-Wed Jul 10 01:40:07 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
-
-       * makefile.pc: Rewrite for Turbo C 2.0.
-       * util.c [__TURBOC__] (utime): New function.
-       * alloca.c, tcexparg.c: New files.
-
-       * extern.h [STDC_HEADERS]: Don't declare malloc and realloc.
-
-       * main.c [MSDOS]: Make binary mode the default.
-       * copyin.c, copyout.c: Make stdin or stdout binary mode as
-       appropriate (so cpio archives don't get corrupted).
-
-       * Many files: Use <string.h> if STDC_HEADERS as well as if USG.
-
-       * configure, Makefile.in: $(INSTALLPROG) -> $(INSTALL),
-       $(INSTALLTEXT) -> $(INSTALLDATA).
-
-Mon Jul  8 23:18:28 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
-
-       * configure: For some library functions that might be missing,
-       conditionally add the .o files to Makefile instead of
-       defining func_MISSING.
-       * mkdir.c: Renamed from mkrmdir.c.
-
-Sat Jul  6 02:27:22 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
-
-       * configure: echo messages to stdout, not stderr.
-       Use a test program to see if alloca needs -lPW.
-
-Thu Jun 27 16:15:15 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
-
-       * copyin.c (process_copy_in), copyout.c (process_copy_out),
-       copypass.c (process_copy_pass): Check close return value for
-       delayed error notification because of NFS.
-
-Thu Jun 20 02:43:33 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
-
-       * configure: Include $DEFS when compiling test programs.
-
-       * util.c: Only declare getpwuid and getgrgid if not POSIX.
-
-       * Version 1.3.
-
-       * copyin.c: Use time_t, not long, for time values.
-
-       * mt.c (print_status): Special cases for HP-UX and Ultrix.
-
-       * util.c: Compile bcopy if USG or STDC_HEADERS, not BCOPY_MISSING.
-
-Tue Jun 11 16:40:02 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
-
-       * copyin.c: Don't include sys/sysmacros.h if _POSIX_SOURCE.
-
-       * copyin.c, copyout.c, copypass.c: Don't include sys/file.h if POSIX.
-
-       * util.c: Include sys/types.h before, not after, pwd.h and grp.h.
-
-       * configure: New shell script to aid configuration and create
-       Makefile from Makefile.in.
-
-       * copyin.c (process_copy_in): Use POSIX.2 fnmatch instead of
-       glob_match. 
-
-Mon Jun 10 22:11:19 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
-
-       * global.c, extern.h: New variable, name_end.
-       * main.c (process_args, usage): Add -0 +null option to set it.
-       * copypass.c (process_copy_pass), copyout.c (process_copy_out): 
-       Use it.
-
-       * dstring.c (ds_fgetstr): New function made from ds_fgets.
-       (ds_fgets, ds_fgetname): Implement as front ends to ds_fgetstr.
-
-Sun Jun  2 15:45:24 1991  David J. MacKenzie  (djm at wheat-chex)
-
-       * most files: use GPL version 2.
-
-Sat May 18 11:39:22 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
-
-       * copyin.c, copypass.c: Take out #ifdef MSDOS around chown.
-       * util.c [MSDOS]: Provide dummy chown.
-
-Fri May 17 21:29:05 1991  David J. MacKenzie  (djm at churchy.gnu.ai.mit.edu)
-
-       * Version 1.2.
-
-       * makefile.pc, cpio.cs: Update for new source and object files.
-
-Fri Mar 15 05:48:36 1991  David J. MacKenzie  (djm at geech.ai.mit.edu)
-
-       * global.c, extern.h: New variable `archive_desc'.
-       * main.c (process_args): Set it.
-       * copyout.c (process_copy_out), copyin.c (process_copy_in):
-       Use it.
-
-       * copyout.c (process_copy_out), copyin.c (process_copy_in):
-       Remote tapes are special and not seekable; don't fstat them.
-
-       * main.c (main, usage): Add -F, +file option.  Use rmtopen.
-       (main): Exit after printing version number.
-       * util.c (empty_output_buffer): Use rmtwrite instead of write.
-       (fill_input_buffer): Use rmtread instead of read.
-       (tape_offline): Use rmtioctl instead of ioctl.
-       Test HAVE_MTIO instead of MTIO_MISSING, for tar compatibility.
-
-Thu Mar 14 17:49:57 1991  David J. MacKenzie  (djm at geech.ai.mit.edu)
-
-       * util.c (create_all_directories): Use make_path to do the work.
-
-Sat Jan 12 15:32:15 1991  David J. MacKenzie  (djm at geech.ai.mit.edu)
-
-       * copyin.c, copyout.c, copypass.c, util.c: Only declare
-       `errno' if not MSDOS.  Some Unix errno.h do, some don't . . . .
-
-       * global.c, extern.h: Make `input_size' and `output_size'
-       unsigned, for 16 bit machines.
-
-       * copyin.c (print_name_with_quoting): All non-ctrl chars are
-       printable on MS-DOS.
-
-       * util.c (empty_output_buffer): Never make sparse files;
-       can create unrunnable executables.
-       * copyin.c, copyout.c, copypass.c: Callers changed.
-       * util.c (finish_output_file): Function removed.
-
-Tue Nov  6 15:47:16 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * copyin.c, util.c, extern.h: Rename copystring to xstrdup.
-
-Mon Oct 29 02:24:41 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * util.c (empty_output_buffer): Only make sparse files if
-       NO_SPARSE_FILES is undefined, to accomodate dumb kernels.
-
-Wed Jul 25 18:48:35 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * util.c (getuser, getgroup): Make uid and gid unsigned short,
-       not int.
-
-Sat Jul 21 00:44:44 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * copyin.c, copyout.c, copypass.c, util.c, cpio.h: Add ifdefs
-       for MSDOS.
-
-Sun Jul 15 23:51:48 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * copyin.c, copyout.c, copypass.c, global.c, extern.h, util.c:
-       Use longs where appropriate, for 16 bit machines.
-
-Sun Jul  8 22:58:06 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * main.c (process_args, usage): Change -b option to -O (old), to
-       allow adding byte swapping later.
-
-Sat Jul  7 14:48:35 1990  David J. MacKenzie  (dave at edfmd)
-
-       * Version 1.1.
-
-       * cpio.h: Make `mtime' and `filesize' unsigned long.
-       * copyin.c (read_in_binary), copyout.c (write_out_header):
-       High short-word of `mtime' and `filesize' always comes first.
-
-       * (read_in_ascii, read_in_binary): New functions, from code in
-       read_in_header. 
-       (read_in_header): Search for valid magic number, then fill in
-       rest of header using read_in_ascii and read_in_binary.
-       * global.c, extern.h: New variable, `binary_flag'.
-       * main.c (process_args): Recognize new -b +binary option.
-       * util.c [BCOPY_MISSING] (bcopy): New function.
-
-Wed Jul  4 00:40:58 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * main.c (process_args): Add local pointers to functions to
-       work around a pcc bug found on a Convex.
-
-       * copyin.c (process_copy_in), util.c (toss_input,
-       create_all_directories, add_inode): Don't use `index' as a
-       variable name. 
-
-Tue Jul  3 02:33:36 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * version 1.0.
-
-Mon Jul  2 23:18:56 1990  David J. MacKenzie  (djm at twiddle)
-
-       * copyin.c (process_copy_in), copyout.c (process_copy_out),
-       copypass.c (process_copy_pass): Print "1 block", not "1 blocks".
-
-       * copyin.c (process_copy_in), copypass.c (process_copy_pass):
-       Unlink existing dest. file unless either it is newer and
-       not unconditional, or it is a directory.
-
-Mon Jul  2 03:57:41 1990  David J. MacKenzie  (dave at edfmd)
-
-       * util.c (xrealloc): New function.
-       * dstring.c (ds_resize): Use xrealloc instead of free and
-       xmalloc.  Never shrink the string.
-
-       * copypass.c (process_copy_pass): More efficient
-       string handling while constructing output filename.
-
-       * global.c, extern.h, main.c, cpio.h: Change from an enum,
-       `copy_command', to a pointer to a void function, `copy_function'.
-
-       * cpio.h (struct cpio_header): Make most fields unsigned.
-       Rename h_filesize to h_filesizes and h_mtime to h_mtimes, and
-       add new `long' fields with the old names at the end of the
-       structure.
-       * copyin.c (read_in_header): Set the long fields from the
-       short arrays, making sure longs are aligned properly.
-       (process_copy_in, long_format): Use the long fields.
-       * copyout.c (write_out_header): Set the short arrays from the
-       long fields, making sure longs are aligned properly.
-       (process_copy_out): Use the long fields.
-
-       * global.c, extern.h: New variable `output_is_seekable'.
-       * util.c (empty_output_buffer): If output_is_seekable, use
-       lseek to write blocks of zeros.
-       (finish_output_file): New function.
-       * copyin.c (process_copy_in), copyout.c (process_copy_out),
-       copypass.c (process_copy_pass): Set `output_is_seekable'
-       correctly and call finish_output_file.
-       * main.c (initialize_buffers): Allocate space for sentinel in
-       `output_buffer'. 
-
-       * global.c, extern.h: New variable `numeric_uid'.
-       * main.c (process_args): Accept -n +numeric-uid-gid option, like ls.
-       * copyin.c (long_format): Use numeric_uid.
-
-       * copyin.c (process_copy_in), copyout.c (process_copy_out),
-       copypass.c (process_copy_pass): Don't (for verbose) print the
-       names of files that are not copied because of errors.  Try to
-       create missing directories for all file types.  Free temporary
-       buffers on error.
-
-Sat Jun 30 14:28:45 1990  David J. MacKenzie  (djm at apple-gunkies)
-
-       * version.c: New file.
-       * main.c: Add -V, +version option.
-       * Makefile [dist]: Extract version number from version.c.
-
-Sat Jun 30 12:44:47 1990  David J. MacKenzie  (dave at edfmd)
-
-       * global.c, extern.h, copyin.c, copyout.c, util.c: Rename
-       `{input,output}_is_regular' to `{input,output}_is_special' and
-       reverse the truth value. 
-
-       * global.c, extern.h: New variable `input_is_seekable' to
-       control whether to skip data with lseek or read. 
-       * copyin.c (process_copy_in): Set it.
-       * util.c (toss_input): Use it.
-
-       * global.c, extern.h: New variable `xstat' that selects stat
-       or lstat for input files.
-       * main.c (process_args): New option -L, +dereference to set
-       xstat to stat instead of lstat.
-       (usage): Document it.
-       * copyout.c (process_copy_out), copypass.c
-       (process_copy_pass): Use *xstat on input file.
-
-Sat Jun 30 01:53:12 1990  David J. MacKenzie  (dave at edfmd)
-
-       * dstring.c (ds_init): Return void because return value was
-       never used. 
-       (ds_resize): Ditto, and free old value instead of new one.
-
-       * util.c (empty_output_buffer, fill_input_buffer,
-       copy_out_buf, copy_in_buf, toss_input, copy_files): Return
-       void instead of an error value and make errors fatal
-       immediately instead of several levels up, to prevent printing
-       of multiple error messages by different levels of functions.
-
-       * copyin.c (read_in_header): Return void, because the error
-       handling all happens at lower levels.
-       (print_name_with_quoting): New function.
-       (long_format): Call print_name_with_quoting.  Take additional
-       arg for name of linked-to file, and print it if nonzero.
-       (process_copy_in): For verbose listing of symlinks, read in
-       the linkname and pass it to long_format.
-
-       * extern.h: Declare some more functions.
-
-Thu Jun 28 16:07:15 1990  David J. MacKenzie  (dave at edfmd)
-
-       * copypass.c (process_copy_pass): Warn about unknown file types.
-
-       * copyout.c (process_copy_out): Check fstat return for error.
-       Record filesize of 0 for special files.  Warn about unknown
-       file types.
-
-       * copyin.c (process_copy_in): Warn about unknown file types.
-       (read_in_header): Warn about byte-reversed binary headers.
-
-Sat Jun 23 22:50:45 1990  David J. MacKenzie  (dave at edfmd)
-
-       * main.c (main): Set umask to 0 so permissions of created
-       files are preserved. 
-
-       * copyin.c, copyout.c, copypass.c, util.c: Pass file
-       descriptors as ints, not pointers to ints. 
-       Cast file timestamps and sizes to long *, not int *, for 16
-       bit machines.
-       Use lstat instead of stat, if available.
-       Handle FIFO's, sockets, and symlinks, if supported by O.S.
-
-       * copyin.c (process_copy_in), copyout.c (process_copy_out):
-       Don't consider FIFO'S, sockets, etc. to be possible tape drives.
-
-       * util.c (create_all_directories): Fix incorrect loop
-       termination check.  Only copy string if it contains slashes.
-       Don't check whether directory "" exists.
-       (tape_offline): Code moved from get_next_reel.
-       (get_next_reel): Print message before taking tape offline.
-       Read a line of arbitrary length.
-
-       * copyout.c, copyin.c, copypass.c: Always use utime, not utimes.
-
-       * copyin.c (swab_short): New macro.
-       (swab_array): New function.
-       (read_in_header): In binary mode, if a byte-swapped header is
-       read, swap the bytes back.
-       (process_copy_in, process_copy_pass): Don't stat each file to
-       create unless !unconditional_flag.  Create device files correctly.
-       Don't temporarily allow files being created to be read by
-       other users.  Don't unnecessarily chmod special files.
-
-Thu May 31 20:51:43 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * copyin.c (long_format): Use mode_string to format
-       file protections instead of doing it ourselves.
-       (protections): Function removed.
-
-Sat Apr 14 02:31:01 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * cpio.h (struct cpio_header): Make inode, mode, uid, gid
-       fields unsigned. 
-
-       * util.c (getgroup): New function.
-       * copyin.c (long_format): Print group name of files.
-       Print file size, etc. as unsigned integers, not signed.
-
-       * main.c (process_args): If -t is given and neither -i, -o, or
-       -p is given, assume -i.
-
-       * Add -f, +nonmatching option.
-       * main.c: Rename +out to +create, +in to +extract,
-       +modification-time to +preserve-modification-time,
-       +pass to +pass-through.
-
-       * copyin.c (process_copy_in), copypass.c (process_copy_pass):
-       Don't complain in chown fails because the user doesn't have
-       permission. 
-
-Fri Apr 13 13:53:20 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * Add ifdefs for USG/Xenix.
-       * util.c (cpio_error): Function removed.
-       * Use error instead of cpio_error, so system error messages
-       will be included.
-       * cpio.h: Rename 'hdr_struct' to 'struct cpio_header'.
-       * Move definition of xmalloc from dstring.c to util.c.
-       * global.c, extern.c: Add global `program_name'.
-       * main.c (main): Set program_name.
-       (process_args): Rename +reset-atime to +reset-access-time,
-       +table to +list.
-       Have +block-size take an argument.
-
-Thu Apr 12 13:33:32 1990  David J. MacKenzie  (djm at rice-chex)
-
-       * util.c (find_inode_file): Make inode an int, not a short.
-
-       * Make functions that don't return a value have type void.
-       Add some casts to function calls.
-
-Wed Apr 11 14:55:28 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * main.c (process_args): -i, -o, and -p don't take arguments.
-
-       * main.c (process_args): Get the non-option args from the
-       correct elements of argv.
-
-Tue Apr 10 00:20:26 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
-
-       * Indent source code and update copyrights.
-
-       * cpio.c (usage): Change `collection' to `archive' in message.
-
-Thu Dec 28 03:03:55 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)
-
-       * dstring.c (xmalloc): Don't return a null pointer if size is 0,
-       on the assumption that trying to allocate 0 bytes is a bug that
-       should be trapped.
-
-Wed Dec 20 03:24:48 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)
-
-       * All files: Change from GNU CPIO General Public License to
-       GNU General Public License.
-
-Mon Dec 18 13:18:36 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)
-
-       * Makefile: Add clean target and defines for CC and LDFLAGS.
-       Add dist target and SRCS, DISTFILES macros.  Add tags and TAGS targets.
-       * dstring.c (ds_fgets): Read characters into an int, not char.
-       (xmalloc): New function.
-       (out_of_memory): Function removed.
-       Global: use xmalloc instead of malloc and out_of_memory.
-       * extern.h, global.c: Make flag variables ints instead of chars for
-       compatibility with getopt_long.
-       * extern.h: Declare more functions.
-       * main.c (usage): Put the whole usage message into a single string
-       and fix errors.
-       * util.c (create_all_directories): Remove unused variable.
-       (get_next_reel): Ditto.
-       * dstring.h: Declare function.
-
-Sat Dec  2 13:22:37 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)
-
-       * main.c: Change +copy-pass option to +pass, +copy-in to +in,
-       +copy-out to +out, and +mkdir to +make-directories, and add null
-       option to terminate table.
-       (process_args): Use the same code to handle long and short named 
-       options.
-       (usage): Mention long options in message.
-\f
-Local Variables:
-mode: indented-text
-left-margin: 8
-version-control: never
-End:
diff --git a/contrib/cpio/FREEBSD-upgrade b/contrib/cpio/FREEBSD-upgrade
deleted file mode 100644 (file)
index 29a60ee..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-$FreeBSD: src/contrib/cpio/FREEBSD-upgrade,v 1.3 1999/09/08 11:16:36 obrien Exp $
-$DragonFly: src/contrib/cpio/FREEBSD-upgrade,v 1.2 2003/06/17 04:23:58 dillon Exp $
-
-GNU cpio 2.4.2
-       originals can be found at: ftp://prep.ai.mit.edu/pub/gnu
-
-       removed files:
-               INSTALL         cpio.info       mkdir.c
-               Makefile.in                     mkinstalldirs
-               argmatch.c      fnmatch.c       mt.1
-               bcopy.c         fnmatch.h       mt.c
-               configure       install-sh      rmt.c
-               configure.in    makefile.os2    strdup.c
-               cpio.def        makefile.pc     tcexparg.c
-                                               texinfo.tex
-
-
-       obrien@FreeBSD.org
diff --git a/contrib/cpio/NEWS b/contrib/cpio/NEWS
deleted file mode 100644 (file)
index 5da98da..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-\f
-Major changes in version 2.4:
-
-* new texinfo documentation
-* --sparse option to write sparse files
-* --only-verify-crc option to verify a CRC format archive
-* --no-absolute-paths option to ignore absolute paths
-* --quiet option to supress printing number of blocks copied
-* handle disk input errors more gracefully
-\f
-Major changes in version 2.3:
-
-* in newc and crc format archives, only store 1 copy of multiply linked files
-* handle multiply linked devices properly
-* handle multiply linked files with cpio -pl even when the source and 
-  destination are on different file systems
-* support HPUX Context Dependent Files
-* read and write HPUX cpio archives
-* read System V.4 POSIX tar archives and HPUX POSIX tar archives
-* use rmdir, instead of unlink, to delete existing directories
-\f
-Major changes in version 2.2:
-
-* handle link counts correctly when reading binary cpio archives
-* configure checks for some libraries that SVR4 needs
-\f
-Major changes in version 2.1:
-
-* cpio can access remote non-device files as well as remote devices
-* fix bugs in the MS-DOS port
-* add --swap equivalent to -b option
-\f
-Version 2.0 adds the following features:
-
-Support for the SVR4 cpio formats, which can store inodes >65535, and
-for traditional and POSIX tar archives.  Also adds these options:
-
--A --append            append to instead of replacing the archive
--V --dot               print a dot for each file processed
--H --format            select archive format
--C --io-size           select I/O block size in bytes
--M --message           print a message at end of media volumes
---no-preserve-owner    don't change files' owners when extracting
--R --owner             set files' owners when extracting
--E --pattern-file      list of shell filename patterns to process
--s --swap-bytes                handle byte-order differences when extracting files
--S --swap-halfwords    ditto
--b                     like -sS
--I                     input archive filename
--k                     recognize corrupted archives (we alawys do it, though)
--O                     output archive filename
-
-Some options of previous versions have been renamed in 2.0:
-
---binary was replaced by --format=bin
---portability was replaced by --format=odc
-
-Some options have changed meaning in 2.0, for SVR4 compatibility:
-
--O used to select the binary archive format, now selects the output file
--V used to print the version number, now prints a dot for each file
-
-Version 2.0 also fixes several bugs in the handling of files with
-multiple links and of multi-volume archives on floppy disks.
diff --git a/contrib/cpio/README b/contrib/cpio/README
deleted file mode 100644 (file)
index 8206e97..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-This is GNU cpio, a program to manage archives of files.
-As of version 2.0, it supports the features of the System V release 4
-cpio, including support for tar archives.
-
-This package also includes rmt, the remote tape server, and mt, a tape
-drive control program; these two programs will only be compiled if
-your system supports remote command execution, and tape drive control
-operations, respectively.
-
-See the file INSTALL for compilation and installation instructions for Unix.
-
-For non-Unix systems:
-
-makefile.pc is a makefile for Turbo C or C++ or Borland C++ on MS-DOS.
-
-makefile.os2 is a makefile for MS C and GNU C (emx/gcc) on OS/2.
-cpio.def is a linker definition file for the MS C OS/2 version.
-
-
-The main advantages of GNU cpio over Unix versions are:
-
-* It can access tape drives on other hosts using TCP/IP.
-
-* `-o' and `-p' can copy symbolic links either as symbolic links or,
-with `-L', as the files they point to.
-
-* `-i' automatically recognizes the archive format and tries to
-recover from corrupted archives.
-
-* The output of '-itv' looks like 'ls -l'.
-
-* It accepts long-named options as well as traditional
-single-character options.
-
-A few features of other versions of cpio are missing from GNU cpio, including:
-
-* The `-6' option to support Sixth Edition Unix cpio archives with `-i'.
-
-* An option to limit volume size, like afio -s.
-
-
-GNU cpio supports the POSIX.1 "ustar" tar format.  GNU tar supports a
-somewhat different, early draft of that format.  That draft format has
-a slightly different magic number in the tar header and doesn't
-include the path prefix part of the header, which allows storing file
-names that are longer than 100 characters.  GNU cpio knows to
-recognize the nonstandard GNU tar "ustar" archives.
-
-The following patch to GNU tar 1.11.1 makes GNU tar recognize standard
-"ustar" archives, such as GNU cpio produces, except that it won't use
-the path prefix.  Without this patch, GNU tar thinks that standard
-"ustar" archives are old-format tar archives and can not use the extra
-information that "ustar" format contains.  If you use this patch,
-remember that you will lose the beginnings of paths that are longer
-than 100 characters.  That's why it's not an official part of GNU tar.
-(Adding support for the path prefix to GNU tar is not trivial.)
-
---- list.c.orig Mon Sep 14 17:04:03 1992
-+++ list.c      Wed Oct 14 14:02:28 1992
-@@ -439,7 +439,7 @@
-                st->st_ctime = from_oct(1+12, header->header.ctime);
-        }
--       if (0==strcmp(header->header.magic, TMAGIC)) {
-+       if (0==strncmp(header->header.magic, TMAGIC, 5)) {
-                /* Unix Standard tar archive */
-                *stdp = 1;
-                if (wantug) {
-
-Mail suggestions and bug reports for GNU cpio to
-bug-gnu-utils@prep.ai.mit.edu.
diff --git a/contrib/cpio/alloca.c b/contrib/cpio/alloca.c
deleted file mode 100644 (file)
index 7061cec..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-/* alloca.c -- allocate automatically reclaimed memory
-   (Mostly) portable public-domain implementation -- D A Gwyn
-
-   This implementation of the PWB library alloca function,
-   which is used to allocate space off the run-time stack so
-   that it is automatically reclaimed upon procedure exit,
-   was inspired by discussions with J. Q. Johnson of Cornell.
-   J.Otto Tennant <jot@cray.com> contributed the Cray support.
-
-   There are some preprocessor constants that can
-   be defined when compiling for your specific system, for
-   improved efficiency; however, the defaults should be okay.
-
-   The general concept of this implementation is to keep
-   track of all alloca-allocated blocks, and reclaim any
-   that are found to be deeper in the stack than the current
-   invocation.  This heuristic does not reclaim storage as
-   soon as it becomes invalid, but it will do so eventually.
-
-   As a special case, alloca(0) reclaims storage without
-   allocating any.  It is a good idea to use alloca(0) in
-   your main control loop, etc. to force garbage collection.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef emacs
-#include "blockinput.h"
-#endif
-
-/* If compiling with GCC 2, this file's not needed.  */
-#if !defined (__GNUC__) || __GNUC__ < 2
-
-/* If someone has defined alloca as a macro,
-   there must be some other way alloca is supposed to work.  */
-#ifndef alloca
-
-#ifdef emacs
-#ifdef static
-/* actually, only want this if static is defined as ""
-   -- this is for usg, in which emacs must undefine static
-   in order to make unexec workable
-   */
-#ifndef STACK_DIRECTION
-you
-lose
--- must know STACK_DIRECTION at compile-time
-#endif /* STACK_DIRECTION undefined */
-#endif /* static */
-#endif /* emacs */
-
-/* If your stack is a linked list of frames, you have to
-   provide an "address metric" ADDRESS_FUNCTION macro.  */
-
-#if defined (CRAY) && defined (CRAY_STACKSEG_END)
-long i00afunc ();
-#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
-#else
-#define ADDRESS_FUNCTION(arg) &(arg)
-#endif
-
-#if __STDC__
-typedef void *pointer;
-#else
-typedef char *pointer;
-#endif
-
-#define        NULL    0
-
-/* Different portions of Emacs need to call different versions of
-   malloc.  The Emacs executable needs alloca to call xmalloc, because
-   ordinary malloc isn't protected from input signals.  On the other
-   hand, the utilities in lib-src need alloca to call malloc; some of
-   them are very simple, and don't have an xmalloc routine.
-
-   Non-Emacs programs expect this to call use xmalloc.
-
-   Callers below should use malloc.  */
-
-#ifndef emacs
-#define malloc xmalloc
-#endif
-extern pointer malloc ();
-
-/* Define STACK_DIRECTION if you know the direction of stack
-   growth for your system; otherwise it will be automatically
-   deduced at run-time.
-
-   STACK_DIRECTION > 0 => grows toward higher addresses
-   STACK_DIRECTION < 0 => grows toward lower addresses
-   STACK_DIRECTION = 0 => direction of growth unknown  */
-
-#ifndef STACK_DIRECTION
-#define        STACK_DIRECTION 0       /* Direction unknown.  */
-#endif
-
-#if STACK_DIRECTION != 0
-
-#define        STACK_DIR       STACK_DIRECTION /* Known at compile-time.  */
-
-#else /* STACK_DIRECTION == 0; need run-time code.  */
-
-static int stack_dir;          /* 1 or -1 once known.  */
-#define        STACK_DIR       stack_dir
-
-static void
-find_stack_direction ()
-{
-  static char *addr = NULL;    /* Address of first `dummy', once known.  */
-  auto char dummy;             /* To get stack address.  */
-
-  if (addr == NULL)
-    {                          /* Initial entry.  */
-      addr = ADDRESS_FUNCTION (dummy);
-
-      find_stack_direction (); /* Recurse once.  */
-    }
-  else
-    {
-      /* Second entry.  */
-      if (ADDRESS_FUNCTION (dummy) > addr)
-       stack_dir = 1;          /* Stack grew upward.  */
-      else
-       stack_dir = -1;         /* Stack grew downward.  */
-    }
-}
-
-#endif /* STACK_DIRECTION == 0 */
-
-/* An "alloca header" is used to:
-   (a) chain together all alloca'ed blocks;
-   (b) keep track of stack depth.
-
-   It is very important that sizeof(header) agree with malloc
-   alignment chunk size.  The following default should work okay.  */
-
-#ifndef        ALIGN_SIZE
-#define        ALIGN_SIZE      sizeof(double)
-#endif
-
-typedef union hdr
-{
-  char align[ALIGN_SIZE];      /* To force sizeof(header).  */
-  struct
-    {
-      union hdr *next;         /* For chaining headers.  */
-      char *deep;              /* For stack depth measure.  */
-    } h;
-} header;
-
-static header *last_alloca_header = NULL;      /* -> last alloca header.  */
-
-/* Return a pointer to at least SIZE bytes of storage,
-   which will be automatically reclaimed upon exit from
-   the procedure that called alloca.  Originally, this space
-   was supposed to be taken from the current stack frame of the
-   caller, but that method cannot be made to work for some
-   implementations of C, for example under Gould's UTX/32.  */
-
-pointer
-alloca (size)
-     unsigned size;
-{
-  auto char probe;             /* Probes stack depth: */
-  register char *depth = ADDRESS_FUNCTION (probe);
-
-#if STACK_DIRECTION == 0
-  if (STACK_DIR == 0)          /* Unknown growth direction.  */
-    find_stack_direction ();
-#endif
-
-  /* Reclaim garbage, defined as all alloca'd storage that
-     was allocated from deeper in the stack than currently. */
-
-  {
-    register header *hp;       /* Traverses linked list.  */
-
-#ifdef emacs
-    BLOCK_INPUT;
-#endif
-
-    for (hp = last_alloca_header; hp != NULL;)
-      if ((STACK_DIR > 0 && hp->h.deep > depth)
-         || (STACK_DIR < 0 && hp->h.deep < depth))
-       {
-         register header *np = hp->h.next;
-
-         free ((pointer) hp);  /* Collect garbage.  */
-
-         hp = np;              /* -> next header.  */
-       }
-      else
-       break;                  /* Rest are not deeper.  */
-
-    last_alloca_header = hp;   /* -> last valid storage.  */
-
-#ifdef emacs
-    UNBLOCK_INPUT;
-#endif
-  }
-
-  if (size == 0)
-    return NULL;               /* No allocation required.  */
-
-  /* Allocate combined header + user data storage.  */
-
-  {
-    register pointer new = malloc (sizeof (header) + size);
-    /* Address of header.  */
-
-    if (new == 0)
-      abort();
-
-    ((header *) new)->h.next = last_alloca_header;
-    ((header *) new)->h.deep = depth;
-
-    last_alloca_header = (header *) new;
-
-    /* User storage begins just after header.  */
-
-    return (pointer) ((char *) new + sizeof (header));
-  }
-}
-
-#if defined (CRAY) && defined (CRAY_STACKSEG_END)
-
-#ifdef DEBUG_I00AFUNC
-#include <stdio.h>
-#endif
-
-#ifndef CRAY_STACK
-#define CRAY_STACK
-#ifndef CRAY2
-/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
-struct stack_control_header
-  {
-    long shgrow:32;            /* Number of times stack has grown.  */
-    long shaseg:32;            /* Size of increments to stack.  */
-    long shhwm:32;             /* High water mark of stack.  */
-    long shsize:32;            /* Current size of stack (all segments).  */
-  };
-
-/* The stack segment linkage control information occurs at
-   the high-address end of a stack segment.  (The stack
-   grows from low addresses to high addresses.)  The initial
-   part of the stack segment linkage control information is
-   0200 (octal) words.  This provides for register storage
-   for the routine which overflows the stack.  */
-
-struct stack_segment_linkage
-  {
-    long ss[0200];             /* 0200 overflow words.  */
-    long sssize:32;            /* Number of words in this segment.  */
-    long ssbase:32;            /* Offset to stack base.  */
-    long:32;
-    long sspseg:32;            /* Offset to linkage control of previous
-                                  segment of stack.  */
-    long:32;
-    long sstcpt:32;            /* Pointer to task common address block.  */
-    long sscsnm;               /* Private control structure number for
-                                  microtasking.  */
-    long ssusr1;               /* Reserved for user.  */
-    long ssusr2;               /* Reserved for user.  */
-    long sstpid;               /* Process ID for pid based multi-tasking.  */
-    long ssgvup;               /* Pointer to multitasking thread giveup.  */
-    long sscray[7];            /* Reserved for Cray Research.  */
-    long ssa0;
-    long ssa1;
-    long ssa2;
-    long ssa3;
-    long ssa4;
-    long ssa5;
-    long ssa6;
-    long ssa7;
-    long sss0;
-    long sss1;
-    long sss2;
-    long sss3;
-    long sss4;
-    long sss5;
-    long sss6;
-    long sss7;
-  };
-
-#else /* CRAY2 */
-/* The following structure defines the vector of words
-   returned by the STKSTAT library routine.  */
-struct stk_stat
-  {
-    long now;                  /* Current total stack size.  */
-    long maxc;                 /* Amount of contiguous space which would
-                                  be required to satisfy the maximum
-                                  stack demand to date.  */
-    long high_water;           /* Stack high-water mark.  */
-    long overflows;            /* Number of stack overflow ($STKOFEN) calls.  */
-    long hits;                 /* Number of internal buffer hits.  */
-    long extends;              /* Number of block extensions.  */
-    long stko_mallocs;         /* Block allocations by $STKOFEN.  */
-    long underflows;           /* Number of stack underflow calls ($STKRETN).  */
-    long stko_free;            /* Number of deallocations by $STKRETN.  */
-    long stkm_free;            /* Number of deallocations by $STKMRET.  */
-    long segments;             /* Current number of stack segments.  */
-    long maxs;                 /* Maximum number of stack segments so far.  */
-    long pad_size;             /* Stack pad size.  */
-    long current_address;      /* Current stack segment address.  */
-    long current_size;         /* Current stack segment size.  This
-                                  number is actually corrupted by STKSTAT to
-                                  include the fifteen word trailer area.  */
-    long initial_address;      /* Address of initial segment.  */
-    long initial_size;         /* Size of initial segment.  */
-  };
-
-/* The following structure describes the data structure which trails
-   any stack segment.  I think that the description in 'asdef' is
-   out of date.  I only describe the parts that I am sure about.  */
-
-struct stk_trailer
-  {
-    long this_address;         /* Address of this block.  */
-    long this_size;            /* Size of this block (does not include
-                                  this trailer).  */
-    long unknown2;
-    long unknown3;
-    long link;                 /* Address of trailer block of previous
-                                  segment.  */
-    long unknown5;
-    long unknown6;
-    long unknown7;
-    long unknown8;
-    long unknown9;
-    long unknown10;
-    long unknown11;
-    long unknown12;
-    long unknown13;
-    long unknown14;
-  };
-
-#endif /* CRAY2 */
-#endif /* not CRAY_STACK */
-
-#ifdef CRAY2
-/* Determine a "stack measure" for an arbitrary ADDRESS.
-   I doubt that "lint" will like this much. */
-
-static long
-i00afunc (long *address)
-{
-  struct stk_stat status;
-  struct stk_trailer *trailer;
-  long *block, size;
-  long result = 0;
-
-  /* We want to iterate through all of the segments.  The first
-     step is to get the stack status structure.  We could do this
-     more quickly and more directly, perhaps, by referencing the
-     $LM00 common block, but I know that this works.  */
-
-  STKSTAT (&status);
-
-  /* Set up the iteration.  */
-
-  trailer = (struct stk_trailer *) (status.current_address
-                                   + status.current_size
-                                   - 15);
-
-  /* There must be at least one stack segment.  Therefore it is
-     a fatal error if "trailer" is null.  */
-
-  if (trailer == 0)
-    abort ();
-
-  /* Discard segments that do not contain our argument address.  */
-
-  while (trailer != 0)
-    {
-      block = (long *) trailer->this_address;
-      size = trailer->this_size;
-      if (block == 0 || size == 0)
-       abort ();
-      trailer = (struct stk_trailer *) trailer->link;
-      if ((block <= address) && (address < (block + size)))
-       break;
-    }
-
-  /* Set the result to the offset in this segment and add the sizes
-     of all predecessor segments.  */
-
-  result = address - block;
-
-  if (trailer == 0)
-    {
-      return result;
-    }
-
-  do
-    {
-      if (trailer->this_size <= 0)
-       abort ();
-      result += trailer->this_size;
-      trailer = (struct stk_trailer *) trailer->link;
-    }
-  while (trailer != 0);
-
-  /* We are done.  Note that if you present a bogus address (one
-     not in any segment), you will get a different number back, formed
-     from subtracting the address of the first block.  This is probably
-     not what you want.  */
-
-  return (result);
-}
-
-#else /* not CRAY2 */
-/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
-   Determine the number of the cell within the stack,
-   given the address of the cell.  The purpose of this
-   routine is to linearize, in some sense, stack addresses
-   for alloca.  */
-
-static long
-i00afunc (long address)
-{
-  long stkl = 0;
-
-  long size, pseg, this_segment, stack;
-  long result = 0;
-
-  struct stack_segment_linkage *ssptr;
-
-  /* Register B67 contains the address of the end of the
-     current stack segment.  If you (as a subprogram) store
-     your registers on the stack and find that you are past
-     the contents of B67, you have overflowed the segment.
-
-     B67 also points to the stack segment linkage control
-     area, which is what we are really interested in.  */
-
-  stkl = CRAY_STACKSEG_END ();
-  ssptr = (struct stack_segment_linkage *) stkl;
-
-  /* If one subtracts 'size' from the end of the segment,
-     one has the address of the first word of the segment.
-
-     If this is not the first segment, 'pseg' will be
-     nonzero.  */
-
-  pseg = ssptr->sspseg;
-  size = ssptr->sssize;
-
-  this_segment = stkl - size;
-
-  /* It is possible that calling this routine itself caused
-     a stack overflow.  Discard stack segments which do not
-     contain the target address.  */
-
-  while (!(this_segment <= address && address <= stkl))
-    {
-#ifdef DEBUG_I00AFUNC
-      fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
-#endif
-      if (pseg == 0)
-       break;
-      stkl = stkl - pseg;
-      ssptr = (struct stack_segment_linkage *) stkl;
-      size = ssptr->sssize;
-      pseg = ssptr->sspseg;
-      this_segment = stkl - size;
-    }
-
-  result = address - this_segment;
-
-  /* If you subtract pseg from the current end of the stack,
-     you get the address of the previous stack segment's end.
-     This seems a little convoluted to me, but I'll bet you save
-     a cycle somewhere.  */
-
-  while (pseg != 0)
-    {
-#ifdef DEBUG_I00AFUNC
-      fprintf (stderr, "%011o %011o\n", pseg, size);
-#endif
-      stkl = stkl - pseg;
-      ssptr = (struct stack_segment_linkage *) stkl;
-      size = ssptr->sssize;
-      pseg = ssptr->sspseg;
-      result += size;
-    }
-  return (result);
-}
-
-#endif /* not CRAY2 */
-#endif /* CRAY */
-
-#endif /* no alloca */
-#endif /* not GCC version 2 */
diff --git a/contrib/cpio/copyin.c b/contrib/cpio/copyin.c
deleted file mode 100644 (file)
index cbef8e6..0000000
+++ /dev/null
@@ -1,1400 +0,0 @@
-/* copyin.c - extract or list a cpio archive
-   Copyright (C) 1990, 1991, 1992 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.
-
-$FreeBSD: src/contrib/cpio/copyin.c,v 1.6.6.1 2002/03/12 19:10:14 phantom Exp $
-$DragonFly: src/contrib/cpio/copyin.c,v 1.2 2003/06/17 04:23:58 dillon Exp $
-*/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#if (defined(BSD) && (BSD >= 199306))
-#define HAVE_STRFTIME
-#include <ctype.h>
-#endif
-#include "filetypes.h"
-#include "system.h"
-#include "cpiohdr.h"
-#include "dstring.h"
-#include "extern.h"
-#include "defer.h"
-#include "rmt.h"
-#ifndef        FNM_PATHNAME
-#include <fnmatch.h>
-#endif
-#if defined(HAVE_STRFTIME) && defined(__FreeBSD__)
-#include <langinfo.h>
-#endif
-
-#ifndef HAVE_LCHOWN
-#define lchown chown
-#endif
-
-static void read_pattern_file ();
-static void tape_skip_padding ();
-static void defer_copyin ();
-static void create_defered_links ();
-static void create_final_defers ();
-
-/* Return 16-bit integer I with the bytes swapped.  */
-#define swab_short(i) ((((i) << 8) & 0xff00) | (((i) >> 8) & 0x00ff))
-
-/* Read the header, including the name of the file, from file
-   descriptor IN_DES into FILE_HDR.  */
-
-void
-read_in_header (file_hdr, in_des)
-     struct new_cpio_header *file_hdr;
-     int in_des;
-{
-  long bytes_skipped = 0;      /* Bytes of junk found before magic number.  */
-
-  /* Search for a valid magic number.  */
-
-  if (archive_format == arf_unknown)
-    {
-      char tmpbuf[512];
-      int check_tar;
-      int peeked_bytes;
-
-      while (archive_format == arf_unknown)
-       {
-         peeked_bytes = tape_buffered_peek (tmpbuf, in_des, 512);
-         if (peeked_bytes < 6)
-           error (1, 0, "premature end of archive");
-
-         if (!strncmp (tmpbuf, "070701", 6))
-           archive_format = arf_newascii;
-         else if (!strncmp (tmpbuf, "070707", 6))
-           archive_format = arf_oldascii;
-         else if (!strncmp (tmpbuf, "070702", 6))
-           {
-             archive_format = arf_crcascii;
-             crc_i_flag = TRUE;
-           }
-         else if ((*((unsigned short *) tmpbuf) == 070707) ||
-                  (*((unsigned short *) tmpbuf) == swab_short ((unsigned short) 070707)))
-           archive_format = arf_binary;
-         else if (peeked_bytes >= 512
-                  && (check_tar = is_tar_header (tmpbuf)))
-           {
-             if (check_tar == 2)
-               archive_format = arf_ustar;
-             else
-               archive_format = arf_tar;
-           }
-         else
-           {
-             tape_buffered_read ((char *) tmpbuf, in_des, 1L);
-             ++bytes_skipped;
-           }
-       }
-    }
-
-  if (archive_format == arf_tar || archive_format == arf_ustar)
-    {
-      if (append_flag)
-       last_header_start = input_bytes - io_block_size +
-         (in_buff - input_buffer);
-      if (bytes_skipped > 0)
-       error (0, 0, "warning: skipped %ld bytes of junk", bytes_skipped);
-      read_in_tar_header (file_hdr, in_des);
-      return;
-    }
-
-  file_hdr->c_tar_linkname = NULL;
-
-  tape_buffered_read ((char *) file_hdr, in_des, 6L);
-  while (1)
-    {
-      if (append_flag)
-       last_header_start = input_bytes - io_block_size
-         + (in_buff - input_buffer) - 6;
-      if (archive_format == arf_newascii
-         && !strncmp ((char *) file_hdr, "070701", 6))
-       {
-         if (bytes_skipped > 0)
-           error (0, 0, "warning: skipped %ld bytes of junk", bytes_skipped);
-         read_in_new_ascii (file_hdr, in_des);
-         break;
-       }
-      if (archive_format == arf_crcascii
-         && !strncmp ((char *) file_hdr, "070702", 6))
-       {
-         if (bytes_skipped > 0)
-           error (0, 0, "warning: skipped %ld bytes of junk", bytes_skipped);
-         read_in_new_ascii (file_hdr, in_des);
-         break;
-       }
-      if ( (archive_format == arf_oldascii || archive_format == arf_hpoldascii)
-         && !strncmp ((char *) file_hdr, "070707", 6))
-       {
-         if (bytes_skipped > 0)
-           error (0, 0, "warning: skipped %ld bytes of junk", bytes_skipped);
-         read_in_old_ascii (file_hdr, in_des);
-         break;
-       }
-      if ( (archive_format == arf_binary || archive_format == arf_hpbinary)
-         && (file_hdr->c_magic == 070707
-             || file_hdr->c_magic == swab_short ((unsigned short) 070707)))
-       {
-         /* Having to skip 1 byte because of word alignment is normal.  */
-         if (bytes_skipped > 0)
-           error (0, 0, "warning: skipped %ld bytes of junk", bytes_skipped);
-         read_in_binary (file_hdr, in_des);
-         break;
-       }
-      bytes_skipped++;
-      bcopy ((char *) file_hdr + 1, (char *) file_hdr, 5);
-      tape_buffered_read ((char *) file_hdr + 5, in_des, 1L);
-    }
-}
-
-/* Fill in FILE_HDR by reading an old-format ASCII format cpio header from
-   file descriptor IN_DES, except for the magic number, which is
-   already filled in.  */
-
-void
-read_in_old_ascii (file_hdr, in_des)
-     struct new_cpio_header *file_hdr;
-     int in_des;
-{
-  char ascii_header[78];
-  unsigned long dev;
-  unsigned long rdev;
-
-  tape_buffered_read (ascii_header, in_des, 70L);
-  ascii_header[70] = '\0';
-  sscanf (ascii_header,
-         "%6lo%6lo%6lo%6lo%6lo%6lo%6lo%11lo%6lo%11lo",
-         &dev, &file_hdr->c_ino,
-         &file_hdr->c_mode, &file_hdr->c_uid, &file_hdr->c_gid,
-         &file_hdr->c_nlink, &rdev, &file_hdr->c_mtime,
-         &file_hdr->c_namesize, &file_hdr->c_filesize);
-  file_hdr->c_dev_maj = major (dev);
-  file_hdr->c_dev_min = minor (dev);
-  file_hdr->c_rdev_maj = major (rdev);
-  file_hdr->c_rdev_min = minor (rdev);
-
-  /* Read file name from input.  */
-  if (file_hdr->c_name != NULL)
-    free (file_hdr->c_name);
-  file_hdr->c_name = (char *) xmalloc (file_hdr->c_namesize + 1);
-  tape_buffered_read (file_hdr->c_name, in_des, (long) file_hdr->c_namesize);
-#ifndef __MSDOS__
-  /* HP/UX cpio creates archives that look just like ordinary archives,
-     but for devices it sets major = 0, minor = 1, and puts the
-     actual major/minor number in the filesize field.  See if this
-     is an HP/UX cpio archive, and if so fix it.  We have to do this
-     here because process_copy_in() assumes filesize is always 0
-     for devices.  */
-  switch (file_hdr->c_mode & CP_IFMT)
-    {
-      case CP_IFCHR:
-      case CP_IFBLK:
-#ifdef CP_IFSOCK
-      case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-      case CP_IFIFO:
-#endif
-       if (file_hdr->c_filesize != 0
-           && file_hdr->c_rdev_maj == 0
-           && file_hdr->c_rdev_min == 1)
-         {
-           file_hdr->c_rdev_maj = major (file_hdr->c_filesize);
-           file_hdr->c_rdev_min = minor (file_hdr->c_filesize);
-           file_hdr->c_filesize = 0;
-         }
-       break;
-      default:
-       break;
-    }
-#endif  /* __MSDOS__ */
-}
-
-/* Fill in FILE_HDR by reading a new-format ASCII format cpio header from
-   file descriptor IN_DES, except for the magic number, which is
-   already filled in.  */
-
-void
-read_in_new_ascii (file_hdr, in_des)
-     struct new_cpio_header *file_hdr;
-     int in_des;
-{
-  char ascii_header[112];
-
-  tape_buffered_read (ascii_header, in_des, 104L);
-  ascii_header[104] = '\0';
-  sscanf (ascii_header,
-         "%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx",
-         &file_hdr->c_ino, &file_hdr->c_mode, &file_hdr->c_uid,
-         &file_hdr->c_gid, &file_hdr->c_nlink, &file_hdr->c_mtime,
-         &file_hdr->c_filesize, &file_hdr->c_dev_maj, &file_hdr->c_dev_min,
-       &file_hdr->c_rdev_maj, &file_hdr->c_rdev_min, &file_hdr->c_namesize,
-         &file_hdr->c_chksum);
-  /* Read file name from input.  */
-  if (file_hdr->c_name != NULL)
-    free (file_hdr->c_name);
-  file_hdr->c_name = (char *) xmalloc (file_hdr->c_namesize);
-  tape_buffered_read (file_hdr->c_name, in_des, (long) file_hdr->c_namesize);
-
-  /* In SVR4 ASCII format, the amount of space allocated for the header
-     is rounded up to the next long-word, so we might need to drop
-     1-3 bytes.  */
-  tape_skip_padding (in_des, file_hdr->c_namesize + 110);
-}
-
-/* Fill in FILE_HDR by reading a binary format cpio header from
-   file descriptor IN_DES, except for the first 6 bytes (the magic
-   number, device, and inode number), which are already filled in.  */
-
-void
-read_in_binary (file_hdr, in_des)
-     struct new_cpio_header *file_hdr;
-     int in_des;
-{
-  struct old_cpio_header short_hdr;
-
-  /* Copy the data into the short header, then later transfer
-     it into the argument long header.  */
-  short_hdr.c_dev = ((struct old_cpio_header *) file_hdr)->c_dev;
-  short_hdr.c_ino = ((struct old_cpio_header *) file_hdr)->c_ino;
-  tape_buffered_read (((char *) &short_hdr) + 6, in_des, 20L);
-
-  /* If the magic number is byte swapped, fix the header.  */
-  if (file_hdr->c_magic == swab_short ((unsigned short) 070707))
-    {
-      static int warned = 0;
-
-      /* Alert the user that they might have to do byte swapping on
-        the file contents.  */
-      if (warned == 0)
-       {
-         error (0, 0, "warning: archive header has reverse byte-order");
-         warned = 1;
-       }
-      swab_array ((char *) &short_hdr, 13);
-    }
-
-  file_hdr->c_dev_maj = major (short_hdr.c_dev);
-  file_hdr->c_dev_min = minor (short_hdr.c_dev);
-  file_hdr->c_ino = short_hdr.c_ino;
-  file_hdr->c_mode = short_hdr.c_mode;
-  file_hdr->c_uid = short_hdr.c_uid;
-  file_hdr->c_gid = short_hdr.c_gid;
-  file_hdr->c_nlink = short_hdr.c_nlink;
-  file_hdr->c_rdev_maj = major (short_hdr.c_rdev);
-  file_hdr->c_rdev_min = minor (short_hdr.c_rdev);
-  file_hdr->c_mtime = (unsigned long) short_hdr.c_mtimes[0] << 16
-    | short_hdr.c_mtimes[1];
-
-  file_hdr->c_namesize = short_hdr.c_namesize;
-  file_hdr->c_filesize = (unsigned long) short_hdr.c_filesizes[0] << 16
-    | short_hdr.c_filesizes[1];
-
-  /* Read file name from input.  */
-  if (file_hdr->c_name != NULL)
-    free (file_hdr->c_name);
-  file_hdr->c_name = (char *) xmalloc (file_hdr->c_namesize);
-  tape_buffered_read (file_hdr->c_name, in_des, (long) file_hdr->c_namesize);
-
-  /* In binary mode, the amount of space allocated in the header for
-     the filename is `c_namesize' rounded up to the next short-word,
-     so we might need to drop a byte.  */
-  if (file_hdr->c_namesize % 2)
-    tape_toss_input (in_des, 1L);
-
-#ifndef __MSDOS__
-  /* HP/UX cpio creates archives that look just like ordinary archives,
-     but for devices it sets major = 0, minor = 1, and puts the
-     actual major/minor number in the filesize field.  See if this
-     is an HP/UX cpio archive, and if so fix it.  We have to do this
-     here because process_copy_in() assumes filesize is always 0
-     for devices.  */
-  switch (file_hdr->c_mode & CP_IFMT)
-    {
-      case CP_IFCHR:
-      case CP_IFBLK:
-#ifdef CP_IFSOCK
-      case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-      case CP_IFIFO:
-#endif
-       if (file_hdr->c_filesize != 0
-           && file_hdr->c_rdev_maj == 0
-           && file_hdr->c_rdev_min == 1)
-         {
-           file_hdr->c_rdev_maj = major (file_hdr->c_filesize);
-           file_hdr->c_rdev_min = minor (file_hdr->c_filesize);
-           file_hdr->c_filesize = 0;
-         }
-       break;
-      default:
-       break;
-    }
-#endif  /* __MSDOS__ */
-}
-
-/* Exchange the bytes of each element of the array of COUNT shorts
-   starting at PTR.  */
-
-void
-swab_array (ptr, count)
-     char *ptr;
-     int count;
-{
-  char tmp;
-
-  while (count-- > 0)
-    {
-      tmp = *ptr;
-      *ptr = *(ptr + 1);
-      ++ptr;
-      *ptr = tmp;
-      ++ptr;
-    }
-}
-
-/* Current time for verbose table.  */
-static time_t current_time;
-
-/* Read the collection from standard input and create files
-   in the file system.  */
-
-void
-process_copy_in ()
-{
-  char done = FALSE;           /* True if trailer reached.  */
-  int res;                     /* Result of various function calls.  */
-  dynamic_string new_name;     /* New file name for rename option.  */
-  FILE *tty_in;                        /* Interactive file for rename option.  */
-  FILE *tty_out;               /* Interactive file for rename option.  */
-  FILE *rename_in;             /* Batch file for rename option.  */
-  char *str_res;               /* Result for string function.  */
-  struct utimbuf times;                /* For setting file times.  */
-  struct stat file_stat;       /* Output file stat record.  */
-  struct new_cpio_header file_hdr;     /* Output header information.  */
-  int out_file_des;            /* Output file descriptor.  */
-  int in_file_des;             /* Input file descriptor.  */
-  char skip_file;              /* Flag for use with patterns.  */
-  int existing_dir;            /* True if file is a dir & already exists.  */
-  int i;                       /* Loop index variable.  */
-  char *link_name = NULL;      /* Name of hard and symbolic links.  */
-#ifdef HPUX_CDF
-  int cdf_flag;                 /* True if file is a CDF.  */
-  int cdf_char;                 /* Index of `+' char indicating a CDF.  */
-#endif
-
-  /* Initialize the copy in.  */
-  if (pattern_file_name)
-    read_pattern_file ();
-  file_hdr.c_name = NULL;
-  ds_init (&new_name, 128);
-  /* Initialize this in case it has members we don't know to set.  */
-  bzero (&times, sizeof (struct utimbuf));
-
-  if (rename_batch_file)
-    {
-      rename_in = fopen (rename_batch_file, "r");
-      if (rename_in == NULL)
-       error (2, errno, CONSOLE);
-    }
-  else if (rename_flag)
-    {
-      /* Open interactive file pair for rename operation.  */
-      tty_in = fopen (CONSOLE, "r");
-      if (tty_in == NULL)
-       error (2, errno, CONSOLE);
-      tty_out = fopen (CONSOLE, "w");
-      if (tty_out == NULL)
-       error (2, errno, CONSOLE);
-    }
-
-  /* Get date and time if needed for processing the table option.  */
-  if (table_flag && verbose_flag)
-    time (&current_time);
-
-#ifdef __MSDOS__
-  setmode (archive_des, O_BINARY);
-#endif
-  /* Check whether the input file might be a tape.  */
-  in_file_des = archive_des;
-  if (_isrmt (in_file_des))
-    {
-      input_is_special = 1;
-      input_is_seekable = 0;
-    }
-  else
-    {
-      if (fstat (in_file_des, &file_stat))
-       error (1, errno, "standard input is closed");
-      input_is_special =
-#ifdef S_ISBLK
-       S_ISBLK (file_stat.st_mode) ||
-#endif
-       S_ISCHR (file_stat.st_mode);
-      input_is_seekable = S_ISREG (file_stat.st_mode);
-    }
-  output_is_seekable = TRUE;
-
-  /* While there is more input in the collection, process the input.  */
-  while (!done)
-    {
-      link_name = NULL;
-      swapping_halfwords = swapping_bytes = FALSE;
-
-      /* Start processing the next file by reading the header.  */
-      read_in_header (&file_hdr, in_file_des);
-
-#ifdef DEBUG_CPIO
-      if (debug_flag)
-       {
-         struct new_cpio_header *h;
-         h = &file_hdr;
-         fprintf (stderr, 
-               "magic = 0%o, ino = %d, mode = 0%o, uid = %d, gid = %d\n",
-               h->c_magic, h->c_ino, h->c_mode, h->c_uid, h->c_gid);
-         fprintf (stderr, 
-               "nlink = %d, mtime = %d, filesize = %d, dev_maj = 0x%x\n",
-               h->c_nlink, h->c_mtime, h->c_filesize, h->c_dev_maj);
-         fprintf (stderr, 
-               "dev_min = 0x%x, rdev_maj = 0x%x, rdev_min = 0x%x, namesize = %d\n",
-               h->c_dev_min, h->c_rdev_maj, h->c_rdev_min, h->c_namesize);
-         fprintf (stderr, 
-               "chksum = %d, name = \"%s\", tar_linkname = \"%s\"\n",
-               h->c_chksum, h->c_name, 
-               h->c_tar_linkname ? h->c_tar_linkname : "(null)" );
-
-       }
-#endif
-      /* Is this the header for the TRAILER file?  */
-      if (strcmp ("TRAILER!!!", file_hdr.c_name) == 0)
-       {
-         done = TRUE;
-         break;
-       }
-
-      /* Do we have to ignore absolute paths, and if so, does the filename
-         have an absolute path?  */
-      if (no_abs_paths_flag && file_hdr.c_name && file_hdr.c_name [0] == '/')
-       {
-         char *p;
-
-         p = file_hdr.c_name;
-         while (*p == '/')
-           ++p;
-         if (*p == '\0')
-           {
-             strcpy (file_hdr.c_name, ".");
-           }
-         else
-           {
-             char *non_abs_name;
-
-             non_abs_name = (char *) xmalloc (strlen (p) + 1);
-             strcpy (non_abs_name, p);
-             free (file_hdr.c_name);
-             file_hdr.c_name = non_abs_name;
-           }
-       }
-
-      /* Does the file name match one of the given patterns?  */
-      if (num_patterns <= 0)
-       skip_file = FALSE;
-      else
-       {
-         skip_file = copy_matching_files;
-         for (i = 0; i < num_patterns
-              && skip_file == copy_matching_files; i++)
-           {
-             if (fnmatch (save_patterns[i], file_hdr.c_name, 0) == 0)
-               skip_file = !copy_matching_files;
-           }
-       }
-
-      if (skip_file)
-       {
-         tape_toss_input (in_file_des, file_hdr.c_filesize);
-         tape_skip_padding (in_file_des, file_hdr.c_filesize);
-       }
-      else if (table_flag)
-       {
-         if (verbose_flag)
-           {
-#ifdef CP_IFLNK
-             if ((file_hdr.c_mode & CP_IFMT) == CP_IFLNK)
-               {
-                 if (archive_format != arf_tar && archive_format != arf_ustar)
-                   {
-                     link_name = (char *) xmalloc ((unsigned int) file_hdr.c_filesize + 1);
-                     link_name[file_hdr.c_filesize] = '\0';
-                     tape_buffered_read (link_name, in_file_des, file_hdr.c_filesize);
-                     long_format (&file_hdr, link_name);
-                     free (link_name);
-                     tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                     continue;
-                   }
-                 else
-                   {
-                     long_format (&file_hdr, file_hdr.c_tar_linkname);
-                     continue;
-                   }
-               }
-             else
-#endif
-               long_format (&file_hdr, (char *) 0);
-           }
-         else
-           printf ("%s\n", file_hdr.c_name);
-
-         crc = 0;
-         tape_toss_input (in_file_des, file_hdr.c_filesize);
-         tape_skip_padding (in_file_des, file_hdr.c_filesize);
-         if (only_verify_crc_flag)
-           {
-#ifdef CP_IFLNK
-             if ((file_hdr.c_mode & CP_IFMT) == CP_IFLNK)
-               continue;   /* links don't have a checksum */
-#endif
-             if (crc != file_hdr.c_chksum)
-               error (0, 0, "%s: checksum error (0x%x, should be 0x%x)",
-                      file_hdr.c_name, crc, file_hdr.c_chksum);
-           }
-       }
-      else if (append_flag)
-       {
-         tape_toss_input (in_file_des, file_hdr.c_filesize);
-         tape_skip_padding (in_file_des, file_hdr.c_filesize);
-       }
-      else if (only_verify_crc_flag)
-       {
-#ifdef CP_IFLNK
-         if ((file_hdr.c_mode & CP_IFMT) == CP_IFLNK)
-           {
-             if (archive_format != arf_tar && archive_format != arf_ustar)
-               {
-                 tape_toss_input (in_file_des, file_hdr.c_filesize);
-                 tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                 continue;
-               }
-           }
-#endif
-           crc = 0;
-           tape_toss_input (in_file_des, file_hdr.c_filesize);
-           tape_skip_padding (in_file_des, file_hdr.c_filesize);
-           if (crc != file_hdr.c_chksum)
-             error (0, 0, "%s: checksum error (0x%x, should be 0x%x)",
-                    file_hdr.c_name, crc, file_hdr.c_chksum);
-       }
-      else
-       {
-         /* Copy the input file into the directory structure.  */
-
-         /* Do we need to rename the file? */
-         if (rename_flag || rename_batch_file)
-           {
-             if (rename_flag)
-               {
-                 fprintf (tty_out, "rename %s -> ", file_hdr.c_name);
-                 fflush (tty_out);
-                 str_res = ds_fgets (tty_in, &new_name);
-               }
-             else
-               {
-                 str_res = ds_fgetstr (rename_in, &new_name, '\n');
-               }
-             if (str_res == NULL || str_res[0] == 0)
-               {
-                 tape_toss_input (in_file_des, file_hdr.c_filesize);
-                 tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                 continue;
-               }
-             else
-               file_hdr.c_name = xstrdup (new_name.ds_string);
-           }
-
-         /* See if the file already exists.  */
-         existing_dir = FALSE;
-         if (lstat (file_hdr.c_name, &file_stat) == 0)
-           {
-             if (S_ISDIR (file_stat.st_mode)
-                 && ((file_hdr.c_mode & CP_IFMT) == CP_IFDIR))
-               {
-                 /* If there is already a directory there that
-                    we are trying to create, don't complain about
-                    it.  */
-                 existing_dir = TRUE;
-               }
-             else if (!unconditional_flag
-                      && file_hdr.c_mtime <= file_stat.st_mtime)
-               {
-                 error (0, 0, "%s not created: newer or same age version exists",
-                        file_hdr.c_name);
-                 tape_toss_input (in_file_des, file_hdr.c_filesize);
-                 tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                 continue;     /* Go to the next file.  */
-               }
-             else if (S_ISDIR (file_stat.st_mode) 
-                       ? rmdir (file_hdr.c_name)
-                       : unlink (file_hdr.c_name))
-               {
-                 error (0, errno, "cannot remove current %s",
-                        file_hdr.c_name);
-                 tape_toss_input (in_file_des, file_hdr.c_filesize);
-                 tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                 continue;     /* Go to the next file.  */
-               }
-           }
-
-         /* Do the real copy or link.  */
-         switch (file_hdr.c_mode & CP_IFMT)
-           {
-           case CP_IFREG:
-#ifndef __MSDOS__
-             /* Can the current file be linked to a previously copied file? */
-             if (file_hdr.c_nlink > 1 && (archive_format == arf_newascii
-                 || archive_format == arf_crcascii) )
-               {
-                 int link_res;
-                 if (file_hdr.c_filesize == 0)
-                   {
-                     /* The newc and crc formats store multiply linked copies
-                        of the same file in the archive only once.  The
-                        actual data is attached to the last link in the
-                        archive, and the other links all have a filesize
-                        of 0.  Since this file has multiple links and a
-                        filesize of 0, its data is probably attatched to
-                        another file in the archive.  Save the link, and
-                        process it later when we get the actual data.  We
-                        can't just create it with length 0 and add the
-                        data later, in case the file is readonly.  We still
-                        lose if its parent directory is readonly (and we aren't
-                        running as root), but there's nothing we can do about
-                        that.  */
-                     defer_copyin (&file_hdr);
-                     tape_toss_input (in_file_des, file_hdr.c_filesize);
-                     tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                     break;
-                   }
-                 /* If the file has data (filesize != 0), then presumably
-                    any other links have already been defer_copyin'ed(),
-                    but GNU cpio version 2.0-2.2 didn't do that, so we
-                    still have to check for links here (and also in case
-                    the archive was created and later appeneded to). */
-                 link_res = link_to_maj_min_ino (file_hdr.c_name, 
-                               file_hdr.c_dev_maj, file_hdr.c_dev_maj,
-                               file_hdr.c_ino);
-                 if (link_res == 0)
-                   {
-                     tape_toss_input (in_file_des, file_hdr.c_filesize);
-                     tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                     break;
-                   }
-               }
-             else if (file_hdr.c_nlink > 1 && archive_format != arf_tar
-                 && archive_format != arf_ustar)
-               {
-                 int link_res;
-                 link_res = link_to_maj_min_ino (file_hdr.c_name, 
-                               file_hdr.c_dev_maj, file_hdr.c_dev_maj,
-                               file_hdr.c_ino);
-                 if (link_res == 0)
-                   {
-                     tape_toss_input (in_file_des, file_hdr.c_filesize);
-                     tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                     break;
-                   }
-               }
-             else if ((archive_format == arf_tar || archive_format == arf_ustar)
-                      && file_hdr.c_tar_linkname && 
-                      file_hdr.c_tar_linkname[0] != '\0')
-               {
-                 int   link_res;
-                 link_res = link_to_name (file_hdr.c_name,
-                                          file_hdr.c_tar_linkname);
-                 if (link_res < 0)
-                   {
-                     error (0, errno, "cannot link %s to %s",
-                            file_hdr.c_tar_linkname, file_hdr.c_name);
-                   }
-                 break;
-               }
-#endif
-
-             /* If not linked, copy the contents of the file.  */
-             if (link_name == NULL)
-               {
-                 out_file_des = open (file_hdr.c_name,
-                                      O_CREAT | O_WRONLY | O_BINARY, 0600);
-                 if (out_file_des < 0 && create_dir_flag)
-                   {
-                     create_all_directories (file_hdr.c_name);
-                     out_file_des = open (file_hdr.c_name,
-                                          O_CREAT | O_WRONLY | O_BINARY,
-                                          0600);
-                   }
-                 if (out_file_des < 0)
-                   {
-                     error (0, errno, "%s", file_hdr.c_name);
-                     tape_toss_input (in_file_des, file_hdr.c_filesize);
-                     tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                     continue;
-                   }
-
-                 crc = 0;
-                 if (swap_halfwords_flag)
-                   {
-                     if ((file_hdr.c_filesize % 4) == 0)
-                       swapping_halfwords = TRUE;
-                     else
-                       error (0, 0, "cannot swap halfwords of %s: odd number of halfwords",
-                              file_hdr.c_name);
-                   }
-                 if (swap_bytes_flag)
-                   {
-                     if ((file_hdr.c_filesize % 2) == 0)
-                       swapping_bytes = TRUE;
-                     else
-                       error (0, 0, "cannot swap bytes of %s: odd number of bytes",
-                              file_hdr.c_name);
-                   }
-                 copy_files_tape_to_disk (in_file_des, out_file_des, file_hdr.c_filesize);
-                 disk_empty_output_buffer (out_file_des);
-                 if (close (out_file_des) < 0)
-                   error (0, errno, "%s", file_hdr.c_name);
-
-                 if (archive_format == arf_crcascii)
-                   {
-                     if (crc != file_hdr.c_chksum)
-                       error (0, 0, "%s: checksum error (0x%x, should be 0x%x)",
-                              file_hdr.c_name, crc, file_hdr.c_chksum);
-                   }
-                 /* File is now copied; set attributes.  */
-                 if (!no_chown_flag)
-                   if ((chown (file_hdr.c_name,
-                               set_owner_flag ? set_owner : file_hdr.c_uid,
-                          set_group_flag ? set_group : file_hdr.c_gid) < 0)
-                       && errno != EPERM)
-                     error (0, errno, "%s", file_hdr.c_name);
-                 /* chown may have turned off some permissions we wanted. */
-                 if (chmod (file_hdr.c_name, (int) file_hdr.c_mode) < 0)
-                   error (0, errno, "%s", file_hdr.c_name);
-                 if (retain_time_flag)
-                   {
-                     times.actime = times.modtime = file_hdr.c_mtime;
-                     if (utime (file_hdr.c_name, &times) < 0)
-                       error (0, errno, "%s", file_hdr.c_name);
-                   }
-                 tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                 if (file_hdr.c_nlink > 1 && (archive_format == arf_newascii
-                     || archive_format == arf_crcascii) )
-                   {
-                     /* (see comment above for how the newc and crc formats 
-                        store multiple links).  Now that we have the data 
-                        for this file, create any other links to it which
-                        we defered.  */
-                     create_defered_links (&file_hdr);
-                   }
-               }
-             break;
-
-           case CP_IFDIR:
-             /* Strip any trailing `/'s off the filename; tar puts
-                them on.  We might as well do it here in case anybody
-                else does too, since they cause strange things to happen.  */
-             strip_trailing_slashes (file_hdr.c_name);
-
-             /* Ignore the current directory.  It must already exist,
-                and we don't want to change its permission, ownership
-                or time.  */
-             if (file_hdr.c_name[0] == '.' && file_hdr.c_name[1] == '\0')
-               break;
-
-#ifdef HPUX_CDF
-             cdf_flag = 0;
-#endif
-             if (!existing_dir)
-
-               {
-#ifdef HPUX_CDF
-                 /* If the directory name ends in a + and is SUID,
-                    then it is a CDF.  Strip the trailing + from
-                    the name before creating it.  */
-                 cdf_char = strlen (file_hdr.c_name) - 1;
-                 if ( (cdf_char > 0) &&
-                      (file_hdr.c_mode & 04000) && 
-                      (file_hdr.c_name [cdf_char] == '+') )
-                   {
-                     file_hdr.c_name [cdf_char] = '\0';
-                     cdf_flag = 1;
-                   }
-#endif
-                 res = mkdir (file_hdr.c_name, file_hdr.c_mode);
-               }
-             else
-               res = 0;
-             if (res < 0 && create_dir_flag)
-               {
-                 create_all_directories (file_hdr.c_name);
-                 res = mkdir (file_hdr.c_name, file_hdr.c_mode);
-               }
-             if (res < 0)
-               {
-                 /* In some odd cases where the file_hdr.c_name includes `.',
-                    the directory may have actually been created by
-                    create_all_directories(), so the mkdir will fail
-                    because the directory exists.  If that's the case,
-                    don't complain about it.  */
-                 if ( (errno != EEXIST) ||
-                      (lstat (file_hdr.c_name, &file_stat) != 0) ||
-                      !(S_ISDIR (file_stat.st_mode) ) )
-                   {
-                     error (0, errno, "%s", file_hdr.c_name);
-                     continue;
-                   }
-               }
-             if (!no_chown_flag)
-               if ((chown (file_hdr.c_name,
-                           set_owner_flag ? set_owner : file_hdr.c_uid,
-                           set_group_flag ? set_group : file_hdr.c_gid) < 0)
-                   && errno != EPERM)
-                 error (0, errno, "%s", file_hdr.c_name);
-             /* chown may have turned off some permissions we wanted. */
-             if (chmod (file_hdr.c_name, (int) file_hdr.c_mode) < 0)
-               error (0, errno, "%s", file_hdr.c_name);
-#ifdef HPUX_CDF
-             if (cdf_flag)
-               /* Once we "hide" the directory with the chmod(),
-                  we have to refer to it using name+ instead of name.  */
-               file_hdr.c_name [cdf_char] = '+';
-#endif
-             if (retain_time_flag)
-               {
-                 times.actime = times.modtime = file_hdr.c_mtime;
-                 if (utime (file_hdr.c_name, &times) < 0)
-                   error (0, errno, "%s", file_hdr.c_name);
-               }
-             break;
-
-#ifndef __MSDOS__
-           case CP_IFCHR:
-           case CP_IFBLK:
-#ifdef CP_IFSOCK
-           case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-           case CP_IFIFO:
-#endif
-             if (file_hdr.c_nlink > 1 && archive_format != arf_tar
-                 && archive_format != arf_ustar)
-               {
-                 int link_res;
-                 link_res = link_to_maj_min_ino (file_hdr.c_name, 
-                               file_hdr.c_dev_maj, file_hdr.c_dev_maj,
-                               file_hdr.c_ino);
-                 if (link_res == 0)
-                   break;
-               }
-             else if (archive_format == arf_ustar &&
-                      file_hdr.c_tar_linkname && 
-                      file_hdr.c_tar_linkname [0] != '\0')
-               {
-                 int   link_res;
-                 link_res = link_to_name (file_hdr.c_name,
-                                          file_hdr.c_tar_linkname);
-                 if (link_res < 0)
-                   {
-                     error (0, errno, "cannot link %s to %s",
-                            file_hdr.c_tar_linkname, file_hdr.c_name);
-                     /* Something must be wrong, because we couldn't
-                        find the file to link to.  But can we assume
-                        that the device maj/min numbers are correct
-                        and fall through to the mknod?  It's probably
-                        safer to just break, rather than possibly
-                        creating a bogus device file.  */
-                   }
-                 break;
-               }
-             
-#ifdef CP_IFIFO
-             if ((file_hdr.c_mode & CP_IFMT) == CP_IFIFO)
-               res = mkfifo (file_hdr.c_name, file_hdr.c_mode);
-             else
-#endif
-               res = mknod (file_hdr.c_name, file_hdr.c_mode,
-                     makedev (file_hdr.c_rdev_maj, file_hdr.c_rdev_min));
-             if (res < 0 && create_dir_flag)
-               {
-                 create_all_directories (file_hdr.c_name);
-#ifdef CP_IFIFO
-                 if ((file_hdr.c_mode & CP_IFMT) == CP_IFIFO)
-                   res = mkfifo (file_hdr.c_name, file_hdr.c_mode);
-                 else
-#endif
-                   res = mknod (file_hdr.c_name, file_hdr.c_mode,
-                                makedev (file_hdr.c_rdev_maj,
-                                         file_hdr.c_rdev_min));
-               }
-             if (res < 0)
-               {
-                 error (0, errno, "%s", file_hdr.c_name);
-                 continue;
-               }
-             if (!no_chown_flag)
-               if ((chown (file_hdr.c_name,
-                           set_owner_flag ? set_owner : file_hdr.c_uid,
-                           set_group_flag ? set_group : file_hdr.c_gid) < 0)
-                   && errno != EPERM)
-                 error (0, errno, "%s", file_hdr.c_name);
-             /* chown may have turned off some permissions we wanted. */
-             if (chmod (file_hdr.c_name, file_hdr.c_mode) < 0)
-               error (0, errno, "%s", file_hdr.c_name);
-             if (retain_time_flag)
-               {
-                 times.actime = times.modtime = file_hdr.c_mtime;
-                 if (utime (file_hdr.c_name, &times) < 0)
-                   error (0, errno, "%s", file_hdr.c_name);
-               }
-             break;
-#endif
-
-#ifdef CP_IFLNK
-           case CP_IFLNK:
-             {
-               if (archive_format != arf_tar && archive_format != arf_ustar)
-                 {
-                   link_name = (char *) xmalloc ((unsigned int) file_hdr.c_filesize + 1);
-                   link_name[file_hdr.c_filesize] = '\0';
-                   tape_buffered_read (link_name, in_file_des, file_hdr.c_filesize);
-                   tape_skip_padding (in_file_des, file_hdr.c_filesize);
-                 }
-               else
-                 {
-                   link_name = xstrdup (file_hdr.c_tar_linkname);
-                 }
-
-               res = UMASKED_SYMLINK (link_name, file_hdr.c_name,
-                                      file_hdr.c_mode);
-               if (res < 0 && create_dir_flag)
-                 {
-                   create_all_directories (file_hdr.c_name);
-                   res = UMASKED_SYMLINK (link_name, file_hdr.c_name,
-                                          file_hdr.c_mode);
-                 }
-               if (res < 0)
-                 {
-                   error (0, errno, "%s", file_hdr.c_name);
-                   free (link_name);
-                   link_name = NULL;
-                   continue;
-                 }
-               if (!no_chown_flag)
-                 if ((lchown (file_hdr.c_name,
-                              set_owner_flag ? set_owner : file_hdr.c_uid,
-                          set_group_flag ? set_group : file_hdr.c_gid) < 0)
-                     && errno != EPERM)
-                   error (0, errno, "%s", file_hdr.c_name);
-               free (link_name);
-               link_name = NULL;
-             }
-             break;
-#endif
-
-           default:
-             error (0, 0, "%s: unknown file type", file_hdr.c_name);
-             tape_toss_input (in_file_des, file_hdr.c_filesize);
-             tape_skip_padding (in_file_des, file_hdr.c_filesize);
-           }
-
-         if (verbose_flag)
-           fprintf (stderr, "%s\n", file_hdr.c_name);
-         if (dot_flag)
-           fputc ('.', stderr);
-       }
-    }
-
-  if (dot_flag)
-    fputc ('\n', stderr);
-
-  if (append_flag)
-    return;
-
-  if (archive_format == arf_newascii || archive_format == arf_crcascii)
-    create_final_defers ();
-  if (!quiet_flag)
-    {
-      res = (input_bytes + io_block_size - 1) / io_block_size;
-      if (res == 1)
-       fprintf (stderr, "1 block\n");
-      else
-       fprintf (stderr, "%d blocks\n", res);
-    }
-}
-\f
-/* Print the file described by FILE_HDR in long format.
-   If LINK_NAME is nonzero, it is the name of the file that
-   this file is a symbolic link to.  */
-
-void
-long_format (file_hdr, link_name)
-     struct new_cpio_header *file_hdr;
-     char *link_name;
-{
-  char mbuf[11];
-  char tbuf[40];
-  time_t when;
-  char *ptbuf;
-#ifdef HAVE_STRFTIME
-  static int d_first = -1;
-#endif
-
-  mode_string (file_hdr->c_mode, mbuf);
-  mbuf[10] = '\0';
-
-  /* Get time values ready to print.  */
-  when = file_hdr->c_mtime;
-#ifdef HAVE_STRFTIME
-#ifdef __FreeBSD__
-  if (d_first < 0)
-       d_first = (*nl_langinfo(D_MD_ORDER) == 'd');
-#else
-  d_first = 0;
-#endif
-  if (current_time - when > 6L * 30L * 24L * 60L * 60L
-      || current_time - when < 0L)
-       ptbuf = d_first ? "%e %b  %Y" : "%b %e  %Y";
-  else
-       ptbuf = d_first ? "%e %b %R" : "%b %e %R";
-  strftime(tbuf, sizeof(tbuf), ptbuf, localtime(&when));
-  ptbuf = tbuf;
-#else
-  strcpy (tbuf, ctime (&when));
-  if (current_time - when > 6L * 30L * 24L * 60L * 60L
-      || current_time - when < 0L)
-    {
-      /* The file is older than 6 months, or in the future.
-        Show the year instead of the time of day.  */
-      strcpy (tbuf + 11, tbuf + 19);
-    }
-  tbuf[16] = '\0';
-  ptbuf = tbuf + 4;
-#endif
-
-  printf ("%s %3lu ", mbuf, file_hdr->c_nlink);
-
-#ifndef __MSDOS__
-  if (numeric_uid)
-#endif
-    printf ("%-8u %-8u ", (unsigned int) file_hdr->c_uid,
-           (unsigned int) file_hdr->c_gid);
-#ifndef __MSDOS__
-  else
-    printf ("%-8.8s %-8.8s ", getuser (file_hdr->c_uid),
-           getgroup (file_hdr->c_gid));
-
-  if ((file_hdr->c_mode & CP_IFMT) == CP_IFCHR
-      || (file_hdr->c_mode & CP_IFMT) == CP_IFBLK)
-    printf ("%3lu, %3lu ", file_hdr->c_rdev_maj, file_hdr->c_rdev_min);
-  else
-#endif
-    printf ("%8lu ", file_hdr->c_filesize);
-
-  printf ("%s ", ptbuf);
-
-  print_name_with_quoting (file_hdr->c_name);
-  if (link_name)
-    {
-      printf (" -> ");
-      print_name_with_quoting (link_name);
-    }
-  putc ('\n', stdout);
-}
-
-void
-print_name_with_quoting (p)
-     register char *p;
-{
-  register unsigned char c;
-
-  while ( (c = *p++) )
-    {
-      switch (c)
-       {
-#ifndef __MSDOS__
-       case '\\':
-         printf ("\\\\");
-         break;
-#endif
-
-       case '\n':
-         printf ("\\n");
-         break;
-
-       case '\b':
-         printf ("\\b");
-         break;
-
-       case '\r':
-         printf ("\\r");
-         break;
-
-       case '\t':
-         printf ("\\t");
-         break;
-
-       case '\f':
-         printf ("\\f");
-         break;
-
-       case ' ':
-         printf ("\\ ");
-         break;
-
-       case '"':
-         printf ("\\\"");
-         break;
-
-       default:
-#if (defined(BSD) && (BSD >= 199306))
-         if (isprint(c))
-#else
-         if (c > 040 &&
-#ifdef __MSDOS__
-             c < 0377 && c != 0177
-#else
-             c < 0177
-#endif
-           )
-#endif
-           putchar (c);
-         else
-           printf ("\\%03o", (unsigned int) c);
-       }
-    }
-}
-
-/* Read a pattern file (for the -E option).  Put a list of
-   `num_patterns' elements in `save_patterns'.  Any patterns that were
-   already in `save_patterns' (from the command line) are preserved.  */
-
-static void
-read_pattern_file ()
-{
-  int max_new_patterns;
-  char **new_save_patterns;
-  int new_num_patterns;
-  int i;
-  dynamic_string pattern_name;
-  FILE *pattern_fp;
-
-  if (num_patterns < 0)
-    num_patterns = 0;
-  max_new_patterns = 1 + num_patterns;
-  new_save_patterns = (char **) xmalloc (max_new_patterns * sizeof (char *));
-  new_num_patterns = num_patterns;
-  ds_init (&pattern_name, 128);
-
-  pattern_fp = fopen (pattern_file_name, "r");
-  if (pattern_fp == NULL)
-    error (1, errno, "%s", pattern_file_name);
-  while (ds_fgetstr (pattern_fp, &pattern_name, '\n') != NULL)
-    {
-      if (new_num_patterns >= max_new_patterns)
-       {
-         max_new_patterns += 1;
-         new_save_patterns = (char **)
-           xrealloc ((char *) new_save_patterns,
-                     max_new_patterns * sizeof (char *));
-       }
-      new_save_patterns[new_num_patterns] = xstrdup (pattern_name.ds_string);
-      ++new_num_patterns;
-    }
-  if (ferror (pattern_fp) || fclose (pattern_fp) == EOF)
-    error (1, errno, "%s", pattern_file_name);
-
-  for (i = 0; i < num_patterns; ++i)
-    new_save_patterns[i] = save_patterns[i];
-
-  save_patterns = new_save_patterns;
-  num_patterns = new_num_patterns;
-}
-
-/* Skip the padding on IN_FILE_DES after a header or file,
-   up to the next header.
-   The number of bytes skipped is based on OFFSET -- the current offset
-   from the last start of a header (or file) -- and the current
-   header type.  */
-
-static void
-tape_skip_padding (in_file_des, offset)
-     int in_file_des;
-     int offset;
-{
-  int pad;
-
-  if (archive_format == arf_crcascii || archive_format == arf_newascii)
-    pad = (4 - (offset % 4)) % 4;
-  else if (archive_format == arf_binary || archive_format == arf_hpbinary)
-    pad = (2 - (offset % 2)) % 2;
-  else if (archive_format == arf_tar || archive_format == arf_ustar)
-    pad = (512 - (offset % 512)) % 512;
-  else
-    pad = 0;
-
-  if (pad != 0)
-    tape_toss_input (in_file_des, pad);
-}
-
-
-/* The newc and crc formats store multiply linked copies of the same file 
-   in the archive only once.  The actual data is attached to the last link 
-   in the archive, and the other links all have a filesize of 0.  When a 
-   file in the archive has multiple links and a filesize of 0, its data is 
-   probably "attatched" to another file in the archive, so we can't create
-   it right away.  We have to "defer" creating it until we have created
-   the file that has the data "attatched" to it.  We keep a list of the
-   "defered" links on deferments.  */
-
-struct deferment *deferments = NULL;
-
-/* Add a file header to the deferments list.  For now they all just
-   go on one list, although we could optimize this if necessary.  */
-
-static void
-defer_copyin (file_hdr)
-  struct new_cpio_header *file_hdr;
-{
-  struct deferment *d;
-  d = create_deferment (file_hdr);
-  d->next = deferments;
-  deferments = d;
-  return;
-}
-
-/* We just created a file that (probably) has some other links to it
-   which have been defered.  Go through all of the links on the deferments
-   list and create any which are links to this file.  */
-
-static void
-create_defered_links (file_hdr)
-  struct new_cpio_header *file_hdr;
-{
-  struct deferment *d;
-  struct deferment *d_prev;
-  int  ino;
-  int  maj;
-  int   min;
-  int  link_res;
-  ino = file_hdr->c_ino;
-  maj = file_hdr->c_dev_maj;
-  min = file_hdr->c_dev_min;
-  d = deferments;
-  d_prev = NULL;
-  while (d != NULL)
-    {
-      if ( (d->header.c_ino == ino) && (d->header.c_dev_maj == maj)
-         && (d->header.c_dev_min == min) )
-       {
-         struct deferment *d_free;
-         link_res = link_to_name (d->header.c_name, file_hdr->c_name);
-         if (link_res < 0)
-           {
-             error (0, errno, "cannot link %s to %s",
-                    d->header.c_name, file_hdr->c_name);
-           }
-         if (d_prev != NULL)
-           d_prev->next = d->next;
-         else
-           deferments = d->next;
-         d_free = d;
-         d = d->next;
-         free_deferment (d_free);
-       }
-      else
-       {
-         d_prev = d;
-         d = d->next;
-       }
-    }
-}
-
-/* If we had a multiply linked file that really was empty then we would
-   have defered all of its links, since we never found any with data
-   "attached", and they will still be on the deferment list even when
-   we are done reading the whole archive.  Write out all of these
-   empty links that are still on the deferments list.  */
-
-static void
-create_final_defers ()
-{
-  struct deferment *d;
-  int  link_res;
-  int  out_file_des;
-  struct utimbuf times;                /* For setting file times.  */
-  /* Initialize this in case it has members we don't know to set.  */
-  bzero (&times, sizeof (struct utimbuf));
-  
-  for (d = deferments; d != NULL; d = d->next)
-    {
-      link_res = link_to_maj_min_ino (d->header.c_name, 
-                   d->header.c_dev_maj, d->header.c_dev_maj,
-                   d->header.c_ino);
-      if (link_res == 0)
-       {
-         continue;
-       }
-      out_file_des = open (d->header.c_name,
-                          O_CREAT | O_WRONLY | O_BINARY, 0600);
-      if (out_file_des < 0 && create_dir_flag)
-       {
-         create_all_directories (d->header.c_name);
-         out_file_des = open (d->header.c_name,
-                              O_CREAT | O_WRONLY | O_BINARY,
-                              0600);
-       }
-      if (out_file_des < 0)
-       {
-         error (0, errno, "%s", d->header.c_name);
-         continue;
-       }
-
-      if (close (out_file_des) < 0)
-       error (0, errno, "%s", d->header.c_name);
-
-      /* File is now copied; set attributes.  */
-      if (!no_chown_flag)
-       if ((chown (d->header.c_name,
-                   set_owner_flag ? set_owner : d->header.c_uid,
-              set_group_flag ? set_group : d->header.c_gid) < 0)
-           && errno != EPERM)
-         error (0, errno, "%s", d->header.c_name);
-      /* chown may have turned off some permissions we wanted. */
-      if (chmod (d->header.c_name, (int) d->header.c_mode) < 0)
-       error (0, errno, "%s", d->header.c_name);
-      if (retain_time_flag)
-       {
-         times.actime = times.modtime = d->header.c_mtime;
-         if (utime (d->header.c_name, &times) < 0)
-           error (0, errno, "%s", d->header.c_name);
-       }
-    }
-}
diff --git a/contrib/cpio/copyout.c b/contrib/cpio/copyout.c
deleted file mode 100644 (file)
index 39890b0..0000000
+++ /dev/null
@@ -1,945 +0,0 @@
-/* copyout.c - create a cpio archive
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "filetypes.h"
-#include "system.h"
-#include "cpiohdr.h"
-#include "dstring.h"
-#include "extern.h"
-#include "defer.h"
-#include "rmt.h"
-
-static unsigned long read_for_checksum ();
-static void tape_clear_rest_of_block ();
-static void tape_pad_output ();
-static int last_link ();
-static int count_defered_links_to_dev_ino ();
-static void add_link_defer ();
-static void writeout_other_defers ();
-static void writeout_final_defers();
-static void writeout_defered_file ();
-static int check_rdev ();
-
-/* Write out header FILE_HDR, including the file name, to file
-   descriptor OUT_DES.  */
-
-void
-write_out_header (file_hdr, out_des)
-     struct new_cpio_header *file_hdr;
-     int out_des;
-{
-  if (archive_format == arf_newascii || archive_format == arf_crcascii)
-    {
-      char ascii_header[112];
-      char *magic_string;
-
-      if (archive_format == arf_crcascii)
-       magic_string = "070702";
-      else
-       magic_string = "070701";
-      sprintf (ascii_header,
-              "%6s%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx%08lx",
-              magic_string,
-              file_hdr->c_ino, file_hdr->c_mode, file_hdr->c_uid,
-              file_hdr->c_gid, file_hdr->c_nlink, file_hdr->c_mtime,
-            file_hdr->c_filesize, file_hdr->c_dev_maj, file_hdr->c_dev_min,
-          file_hdr->c_rdev_maj, file_hdr->c_rdev_min, file_hdr->c_namesize,
-              file_hdr->c_chksum);
-      tape_buffered_write (ascii_header, out_des, 110L);
-
-      /* Write file name to output.  */
-      tape_buffered_write (file_hdr->c_name, out_des, (long) file_hdr->c_namesize);
-      tape_pad_output (out_des, file_hdr->c_namesize + 110);
-    }
-  else if (archive_format == arf_oldascii || archive_format == arf_hpoldascii)
-    {
-      char ascii_header[78];
-#ifndef __MSDOS__
-      dev_t dev;
-      dev_t rdev;
-
-      if (archive_format == arf_oldascii)
-       {
-         dev = makedev (file_hdr->c_dev_maj, file_hdr->c_dev_min);
-         rdev = makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min);
-       }
-      else
-       {
-         /* HP/UX cpio creates archives that look just like ordinary archives,
-            but for devices it sets major = 0, minor = 1, and puts the
-            actual major/minor number in the filesize field.  */
-         switch (file_hdr->c_mode & CP_IFMT)
-           {
-             case CP_IFCHR:
-             case CP_IFBLK:
-#ifdef CP_IFSOCK
-             case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-             case CP_IFIFO:
-#endif
-               file_hdr->c_filesize = makedev (file_hdr->c_rdev_maj,
-                                               file_hdr->c_rdev_min);
-               rdev = 1;
-               break;
-             default:
-               dev = makedev (file_hdr->c_dev_maj, file_hdr->c_dev_min);
-               rdev = makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min);
-               break;
-           }
-       }
-#else
-      int dev = 0, rdev = 0;
-#endif
-
-      if ((file_hdr->c_ino >> 16) != 0)
-       error (0, 0, "%s: truncating inode number", file_hdr->c_name);
-
-      sprintf (ascii_header,
-              "%06o%06o%06lo%06lo%06lo%06lo%06lo%06o%011lo%06lo%011lo",
-              file_hdr->c_magic & 0xFFFF, dev & 0xFFFF,
-              file_hdr->c_ino & 0xFFFF, file_hdr->c_mode & 0xFFFF,
-              file_hdr->c_uid & 0xFFFF, file_hdr->c_gid & 0xFFFF,
-              file_hdr->c_nlink & 0xFFFF, rdev & 0xFFFF,
-              file_hdr->c_mtime, file_hdr->c_namesize & 0xFFFF,
-              file_hdr->c_filesize);
-      tape_buffered_write (ascii_header, out_des, 76L);
-
-      /* Write file name to output.  */
-      tape_buffered_write (file_hdr->c_name, out_des, (long) file_hdr->c_namesize);
-    }
-  else if (archive_format == arf_tar || archive_format == arf_ustar)
-    {
-      write_out_tar_header (file_hdr, out_des);
-    }
-  else
-    {
-      struct old_cpio_header short_hdr;
-
-      short_hdr.c_magic = 070707;
-      short_hdr.c_dev = makedev (file_hdr->c_dev_maj, file_hdr->c_dev_min);
-
-      if ((file_hdr->c_ino >> 16) != 0)
-       error (0, 0, "%s: truncating inode number", file_hdr->c_name);
-
-      short_hdr.c_ino = file_hdr->c_ino & 0xFFFF;
-      short_hdr.c_mode = file_hdr->c_mode & 0xFFFF;
-      short_hdr.c_uid = file_hdr->c_uid & 0xFFFF;
-      short_hdr.c_gid = file_hdr->c_gid & 0xFFFF;
-      short_hdr.c_nlink = file_hdr->c_nlink & 0xFFFF;
-      if (archive_format != arf_hpbinary)
-       short_hdr.c_rdev = makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min);
-      else
-       {
-         switch (file_hdr->c_mode & CP_IFMT)
-           {
-             /* HP/UX cpio creates archives that look just like ordinary 
-                archives, but for devices it sets major = 0, minor = 1, and 
-                puts the actual major/minor number in the filesize field.  */
-             case CP_IFCHR:
-             case CP_IFBLK:
-#ifdef CP_IFSOCK
-             case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-             case CP_IFIFO:
-#endif
-               file_hdr->c_filesize = makedev (file_hdr->c_rdev_maj,
-                                               file_hdr->c_rdev_min);
-               short_hdr.c_rdev = makedev (0, 1);
-               break;
-             default:
-               short_hdr.c_rdev = makedev (file_hdr->c_rdev_maj, 
-                                           file_hdr->c_rdev_min);
-               break;
-           }
-       }
-      short_hdr.c_mtimes[0] = file_hdr->c_mtime >> 16;
-      short_hdr.c_mtimes[1] = file_hdr->c_mtime & 0xFFFF;
-
-      short_hdr.c_namesize = file_hdr->c_namesize & 0xFFFF;
-
-      short_hdr.c_filesizes[0] = file_hdr->c_filesize >> 16;
-      short_hdr.c_filesizes[1] = file_hdr->c_filesize & 0xFFFF;
-
-      /* Output the file header.  */
-      tape_buffered_write ((char *) &short_hdr, out_des, 26L);
-
-      /* Write file name to output.  */
-      tape_buffered_write (file_hdr->c_name, out_des, (long) file_hdr->c_namesize);
-
-      tape_pad_output (out_des, file_hdr->c_namesize + 26);
-    }
-}
-
-/* Read a list of file names from the standard input
-   and write a cpio collection on the standard output.
-   The format of the header depends on the compatibility (-c) flag.  */
-
-void
-process_copy_out ()
-{
-  int res;                     /* Result of functions.  */
-  dynamic_string input_name;   /* Name of file read from stdin.  */
-  struct utimbuf times;                /* For resetting file times after copy.  */
-  struct stat file_stat;       /* Stat record for file.  */
-  struct new_cpio_header file_hdr; /* Output header information.  */
-  int in_file_des;             /* Source file descriptor.  */
-  int out_file_des;            /* Output file descriptor.  */
-  char *p;
-
-  /* Initialize the copy out.  */
-  ds_init (&input_name, 128);
-  /* Initialize this in case it has members we don't know to set.  */
-  bzero (&times, sizeof (struct utimbuf));
-  file_hdr.c_magic = 070707;
-
-#ifdef __MSDOS__
-  setmode (archive_des, O_BINARY);
-#endif
-  /* Check whether the output file might be a tape.  */
-  out_file_des = archive_des;
-  if (_isrmt (out_file_des))
-    {
-      output_is_special = 1;
-      output_is_seekable = 0;
-    }
-  else
-    {
-      if (fstat (out_file_des, &file_stat))
-       error (1, errno, "standard output is closed");
-      output_is_special =
-#ifdef S_ISBLK
-       S_ISBLK (file_stat.st_mode) ||
-#endif
-       S_ISCHR (file_stat.st_mode);
-      output_is_seekable = S_ISREG (file_stat.st_mode);
-    }
-
-  if (append_flag)
-    {
-      process_copy_in ();
-      prepare_append (out_file_des);
-    }
-
-  /* Copy files with names read from stdin.  */
-  while (ds_fgetstr (stdin, &input_name, name_end) != NULL)
-    {
-      /* Check for blank line.  */
-      if (input_name.ds_string[0] == 0)
-       {
-         error (0, 0, "blank line ignored");
-         continue;
-       }
-
-      /* Process next file.  */
-      if ((*xstat) (input_name.ds_string, &file_stat) < 0)
-       error (0, errno, "%s", input_name.ds_string);
-      else
-       {
-         /* Set values in output header.  */
-         file_hdr.c_dev_maj = major (file_stat.st_dev);
-         file_hdr.c_dev_min = minor (file_stat.st_dev);
-         file_hdr.c_ino = file_stat.st_ino;
-         /* For POSIX systems that don't define the S_IF macros,
-            we can't assume that S_ISfoo means the standard Unix
-            S_IFfoo bit(s) are set.  So do it manually, with a
-            different name.  Bleah.  */
-         file_hdr.c_mode = (file_stat.st_mode & 07777);
-         if (S_ISREG (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFREG;
-         else if (S_ISDIR (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFDIR;
-#ifdef S_ISBLK
-         else if (S_ISBLK (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFBLK;
-#endif
-#ifdef S_ISCHR
-         else if (S_ISCHR (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFCHR;
-#endif
-#ifdef S_ISFIFO
-         else if (S_ISFIFO (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFIFO;
-#endif
-#ifdef S_ISLNK
-         else if (S_ISLNK (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFLNK;
-#endif
-#ifdef S_ISSOCK
-         else if (S_ISSOCK (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFSOCK;
-#endif
-#ifdef S_ISNWK
-         else if (S_ISNWK (file_stat.st_mode))
-           file_hdr.c_mode |= CP_IFNWK;
-#endif
-         file_hdr.c_uid = file_stat.st_uid;
-         file_hdr.c_gid = file_stat.st_gid;
-         file_hdr.c_nlink = file_stat.st_nlink;
-
-         /* The rdev is meaningless except for block and character
-            special files (POSIX standard) and perhaps fifos and
-            sockets.  Clear it for other types of files so that
-            check_rdev() doesn't reject files just because stat()
-            put garbage in st_rdev and so that the output doesn't
-            depend on the garbage.  */
-         switch (file_hdr.c_mode & CP_IFMT)
-           {
-             case CP_IFBLK:
-             case CP_IFCHR:
-#ifdef CP_IFIFO
-             case CP_IFIFO:
-#endif
-#ifdef CP_IFSOCK
-             case CP_IFSOCK:
-#endif
-               file_hdr.c_rdev_maj = major (file_stat.st_rdev);
-               file_hdr.c_rdev_min = minor (file_stat.st_rdev);
-               break;
-             default:
-               file_hdr.c_rdev_maj = 0;
-               file_hdr.c_rdev_min = 0;
-               break;
-           }
-
-         file_hdr.c_mtime = file_stat.st_mtime;
-         file_hdr.c_filesize = file_stat.st_size;
-         file_hdr.c_chksum = 0;
-         file_hdr.c_tar_linkname = NULL;
-
-         /* Strip leading `./' from the filename.  */
-         p = input_name.ds_string;
-         while (*p == '.' && *(p + 1) == '/')
-           {
-             ++p;
-             while (*p == '/')
-               ++p;
-           }
-#ifndef HPUX_CDF
-         file_hdr.c_name = p;
-         file_hdr.c_namesize = strlen (p) + 1;
-#else
-         if ( (archive_format != arf_tar) && (archive_format != arf_ustar) )
-           {
-             /* We mark CDF's in cpio files by adding a 2nd `/' after the
-                "hidden" directory name.  We need to do this so we can
-                properly recreate the directory as hidden (in case the
-                files of a directory go into the archive before the
-                directory itself (e.g from "find ... -depth ... | cpio")).  */
-             file_hdr.c_name = add_cdf_double_slashes (p);
-             file_hdr.c_namesize = strlen (file_hdr.c_name) + 1;
-           }
-         else
-           {
-             /* We don't mark CDF's in tar files.  We assume the "hidden"
-                directory will always go into the archive before any of
-                its files.  */
-             file_hdr.c_name = p;
-             file_hdr.c_namesize = strlen (p) + 1;
-           }
-#endif
-         if ((archive_format == arf_tar || archive_format == arf_ustar)
-             && is_tar_filename_too_long (file_hdr.c_name))
-           {
-             error (0, 0, "%s: file name too long", file_hdr.c_name);
-             continue;
-           }
-
-         switch (check_rdev (&file_hdr))
-           {
-             case 1:
-               error (0, 0, "%s not dumped: major number would be truncated",
-                      file_hdr.c_name);
-               continue;
-             case 2:
-               error (0, 0, "%s not dumped: minor number would be truncated",
-                      file_hdr.c_name);
-               continue;
-             case 4:
-               error (0, 0, "%s not dumped: device number would be truncated",
-                      file_hdr.c_name);
-               continue;
-           }
-
-
-         /* Copy the named file to the output.  */
-         switch (file_hdr.c_mode & CP_IFMT)
-           {
-           case CP_IFREG:
-#ifndef __MSDOS__
-             if (archive_format == arf_tar || archive_format == arf_ustar)
-               {
-                 char *otherfile;
-                 if ((otherfile = find_inode_file (file_hdr.c_ino,
-                                                   file_hdr.c_dev_maj,
-                                                   file_hdr.c_dev_min)))
-                   {
-                     file_hdr.c_tar_linkname = otherfile;
-                     write_out_header (&file_hdr, out_file_des);
-                     break;
-                   }
-               }
-             if ( (archive_format == arf_newascii || archive_format == arf_crcascii)
-                 && (file_hdr.c_nlink > 1) )
-               {
-                 if (last_link (&file_hdr) )
-                   {
-                     writeout_other_defers (&file_hdr, out_file_des);
-                   }
-                 else
-                   {
-                     add_link_defer (&file_hdr);
-                     break;
-                   }
-               }
-#endif
-             in_file_des = open (input_name.ds_string,
-                                 O_RDONLY | O_BINARY, 0);
-             if (in_file_des < 0)
-               {
-                 error (0, errno, "%s", input_name.ds_string);
-                 continue;
-               }
-
-             if (archive_format == arf_crcascii)
-               file_hdr.c_chksum = read_for_checksum (in_file_des,
-                                                      file_hdr.c_filesize,
-                                                      input_name.ds_string);
-
-             write_out_header (&file_hdr, out_file_des);
-             copy_files_disk_to_tape (in_file_des, out_file_des, file_hdr.c_filesize, input_name.ds_string);
-
-#ifndef __MSDOS__
-             if (archive_format == arf_tar || archive_format == arf_ustar)
-               add_inode (file_hdr.c_ino, file_hdr.c_name, file_hdr.c_dev_maj,
-                          file_hdr.c_dev_min);
-#endif
-
-             tape_pad_output (out_file_des, file_hdr.c_filesize);
-
-             if (close (in_file_des) < 0)
-               error (0, errno, "%s", input_name.ds_string);
-             if (reset_time_flag)
-               {
-                 times.actime = file_stat.st_atime;
-                 times.modtime = file_stat.st_mtime;
-                 if (utime (file_hdr.c_name, &times) < 0)
-                   error (0, errno, "%s", file_hdr.c_name);
-               }
-             break;
-
-           case CP_IFDIR:
-             file_hdr.c_filesize = 0;
-             write_out_header (&file_hdr, out_file_des);
-             break;
-
-#ifndef __MSDOS__
-           case CP_IFCHR:
-           case CP_IFBLK:
-#ifdef CP_IFSOCK
-           case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-           case CP_IFIFO:
-#endif
-             if (archive_format == arf_tar)
-               {
-                 error (0, 0, "%s not dumped: not a regular file",
-                        file_hdr.c_name);
-                 continue;
-               }
-             else if (archive_format == arf_ustar)
-               {
-                 char *otherfile;
-                 if ((otherfile = find_inode_file (file_hdr.c_ino,
-                                                   file_hdr.c_dev_maj,
-                                                   file_hdr.c_dev_min)))
-                   {
-                     /* This file is linked to another file already in the 
-                        archive, so write it out as a hard link. */
-                     file_hdr.c_mode = (file_stat.st_mode & 07777);
-                     file_hdr.c_mode |= CP_IFREG;
-                     file_hdr.c_tar_linkname = otherfile;
-                     write_out_header (&file_hdr, out_file_des);
-                     break;
-                   }
-                 add_inode (file_hdr.c_ino, file_hdr.c_name, 
-                            file_hdr.c_dev_maj, file_hdr.c_dev_min);
-               }
-             file_hdr.c_filesize = 0;
-             write_out_header (&file_hdr, out_file_des);
-             break;
-#endif
-
-#ifdef CP_IFLNK
-           case CP_IFLNK:
-             {
-               char *link_name = (char *) xmalloc (file_stat.st_size + 1);
-               int link_size;
-
-               link_size = readlink (input_name.ds_string, link_name,
-                                     file_stat.st_size);
-               if (link_size < 0)
-                 {
-                   error (0, errno, "%s", input_name.ds_string);
-                   free (link_name);
-                   continue;
-                 }
-               file_hdr.c_filesize = link_size;
-               if (archive_format == arf_tar || archive_format == arf_ustar)
-                 {
-                   if (link_size + 1 > 100)
-                     {
-                       error (0, 0, "%s: symbolic link too long",
-                              file_hdr.c_name);
-                     }
-                   else
-                     {
-                       link_name[link_size] = '\0';
-                       file_hdr.c_tar_linkname = link_name;
-                       write_out_header (&file_hdr, out_file_des);
-                     }
-                 }
-               else
-                 {
-                   write_out_header (&file_hdr, out_file_des);
-                   tape_buffered_write (link_name, out_file_des, link_size);
-                   tape_pad_output (out_file_des, link_size);
-                 }
-               free (link_name);
-             }
-             break;
-#endif
-
-           default:
-             error (0, 0, "%s: unknown file type", input_name.ds_string);
-           }
-
-         if (verbose_flag)
-           fprintf (stderr, "%s\n", input_name.ds_string);
-         if (dot_flag)
-           fputc ('.', stderr);
-       }
-    }
-
-  writeout_final_defers(out_file_des);
-  /* The collection is complete; append the trailer.  */
-  file_hdr.c_ino = 0;
-  file_hdr.c_mode = 0;
-  file_hdr.c_uid = 0;
-  file_hdr.c_gid = 0;
-  file_hdr.c_nlink = 1;                /* Must be 1 for crc format.  */
-  file_hdr.c_dev_maj = 0;
-  file_hdr.c_dev_min = 0;
-  file_hdr.c_rdev_maj = 0;
-  file_hdr.c_rdev_min = 0;
-  file_hdr.c_mtime = 0;
-  file_hdr.c_chksum = 0;
-
-  file_hdr.c_filesize = 0;
-  file_hdr.c_namesize = 11;
-  file_hdr.c_name = "TRAILER!!!";
-  if (archive_format != arf_tar && archive_format != arf_ustar)
-    write_out_header (&file_hdr, out_file_des);
-  else
-    {
-      tape_buffered_write (zeros_512, out_file_des, 512);
-      tape_buffered_write (zeros_512, out_file_des, 512);
-    }
-
-  /* Fill up the output block.  */
-  tape_clear_rest_of_block (out_file_des);
-  tape_empty_output_buffer (out_file_des);
-  if (dot_flag)
-    fputc ('\n', stderr);
-  if (!quiet_flag)
-    {
-      res = (output_bytes + io_block_size - 1) / io_block_size;
-      if (res == 1)
-       fprintf (stderr, "1 block\n");
-      else
-       fprintf (stderr, "%d blocks\n", res);
-    }
-}
-
-/* Read FILE_SIZE bytes of FILE_NAME from IN_FILE_DES and
-   compute and return a checksum for them.  */
-
-static unsigned long
-read_for_checksum (in_file_des, file_size, file_name)
-     int in_file_des;
-     int file_size;
-     char *file_name;
-{
-  unsigned long crc;
-  char buf[BUFSIZ];
-  int bytes_left;
-  int bytes_read;
-  int i;
-
-  crc = 0;
-
-  for (bytes_left = file_size; bytes_left > 0; bytes_left -= bytes_read)
-    {
-      bytes_read = read (in_file_des, buf, BUFSIZ);
-      if (bytes_read < 0)
-       error (1, errno, "cannot read checksum for %s", file_name);
-      if (bytes_read == 0)
-       break;
-      for (i = 0; i < bytes_read; ++i)
-       crc += buf[i] & 0xff;
-    }
-  if (lseek (in_file_des, 0L, SEEK_SET))
-    error (1, errno, "cannot read checksum for %s", file_name);
-
-  return crc;
-}
-
-/* Write out NULs to fill out the rest of the current block on
-   OUT_FILE_DES.  */
-
-static void
-tape_clear_rest_of_block (out_file_des)
-     int out_file_des;
-{
-  while (output_size < io_block_size)
-    {
-      if ((io_block_size - output_size) > 512)
-       tape_buffered_write (zeros_512, out_file_des, 512);
-      else
-       tape_buffered_write (zeros_512, out_file_des, io_block_size - output_size);
-    }
-}
-
-/* Write NULs on OUT_FILE_DES to move from OFFSET (the current location)
-   to the end of the header.  */
-
-static void
-tape_pad_output (out_file_des, offset)
-     int out_file_des;
-     int offset;
-{
-  int pad;
-
-  if (archive_format == arf_newascii || archive_format == arf_crcascii)
-    pad = (4 - (offset % 4)) % 4;
-  else if (archive_format == arf_tar || archive_format == arf_ustar)
-    pad = (512 - (offset % 512)) % 512;
-  else if (archive_format != arf_oldascii && archive_format != arf_hpoldascii)
-    pad = (2 - (offset % 2)) % 2;
-  else
-    pad = 0;
-
-  if (pad != 0)
-    tape_buffered_write (zeros_512, out_file_des, pad);
-}
-
-
-/* When creating newc and crc archives if a file has multiple (hard)
-   links, we don't put any of them into the archive until we have seen
-   all of them (or until we get to the end of the list of files that
-   are going into the archive and know that we have seen all of the links
-   to the file that we will see).  We keep these "defered" files on
-   this list.   */
-
-struct deferment *deferouts = NULL;
-
-
-/* Is this file_hdr the last (hard) link to a file?  I.e., have
-   we already seen and defered all of the other links?  */
-
-static int
-last_link (file_hdr)
-  struct new_cpio_header *file_hdr;
-{
-  int  other_files_sofar;
-
-  other_files_sofar = count_defered_links_to_dev_ino (file_hdr);
-  if (file_hdr->c_nlink == (other_files_sofar + 1) )
-    {
-      return 1;
-    }
-  return 0;
-}
-
-/* Count the number of other (hard) links to this file that have
-   already been defered.  */
-
-static int
-count_defered_links_to_dev_ino (file_hdr)
-  struct new_cpio_header *file_hdr;
-{
-  struct deferment *d;
-  int  ino;
-  int  maj;
-  int   min;
-  int  count;
-  ino = file_hdr->c_ino;
-  maj = file_hdr->c_dev_maj;
-  min = file_hdr->c_dev_min;
-  count = 0;
-  for (d = deferouts; d != NULL; d = d->next)
-    {
-      if ( (d->header.c_ino == ino) && (d->header.c_dev_maj == maj)
-         && (d->header.c_dev_min == min) )
-       ++count;
-    }
-  return count;
-}
-
-/* Add the file header for a link that is being defered to the deferouts
-   list.  */
-
-static void
-add_link_defer (file_hdr)
-  struct new_cpio_header *file_hdr;
-{
-  struct deferment *d;
-  d = create_deferment (file_hdr);
-  d->next = deferouts;
-  deferouts = d;
-}
-
-/* We are about to put a file into a newc or crc archive that is
-   multiply linked.  We have already seen and defered all of the
-   other links to the file but haven't written them into the archive.
-   Write the other links into the archive, and remove them from the
-   deferouts list.  */
-
-static void
-writeout_other_defers (file_hdr, out_des)
-  struct new_cpio_header *file_hdr;
-  int out_des;
-{
-  struct deferment *d;
-  struct deferment *d_prev;
-  int  ino;
-  int  maj;
-  int   min;
-  ino = file_hdr->c_ino;
-  maj = file_hdr->c_dev_maj;
-  min = file_hdr->c_dev_min;
-  d_prev = NULL;
-  d = deferouts;
-  while (d != NULL)
-    {
-      if ( (d->header.c_ino == ino) && (d->header.c_dev_maj == maj)
-         && (d->header.c_dev_min == min) )
-       {
-         struct deferment *d_free;
-         d->header.c_filesize = 0;
-         write_out_header (&d->header, out_des);
-         if (d_prev != NULL)
-           d_prev->next = d->next;
-         else
-           deferouts = d->next;
-         d_free = d;
-         d = d->next;
-         free_deferment (d_free);
-       }
-      else
-       {
-         d_prev = d;
-         d = d->next;
-       }
-    }
-  return;
-}
-/* When writing newc and crc format archives we defer multiply linked
-   files until we have seen all of the links to the file.  If a file
-   has links to it that aren't going into the archive, then we will
-   never see the "last" link to the file, so at the end we just write 
-   all of the leftover defered files into the archive.  */
-
-static void
-writeout_final_defers(out_des)
-  int  out_des;
-{
-  struct deferment *d;
-  int other_count;
-  while (deferouts != NULL)
-    {
-      d = deferouts;
-      other_count = count_defered_links_to_dev_ino (&d->header);
-      if (other_count == 1)
-       {
-         writeout_defered_file (&d->header, out_des);
-       }
-      else
-       {
-         struct new_cpio_header file_hdr;
-         file_hdr = d->header;
-         file_hdr.c_filesize = 0;
-         write_out_header (&file_hdr, out_des);
-       }
-      deferouts = deferouts->next;
-    }
-}
-
-/* Write a file into the archive.  This code is the same as
-   the code in process_copy_out(), but we need it here too
-   for writeout_final_defers() to call.  */
-
-static void
-writeout_defered_file (header, out_file_des)
-  struct new_cpio_header *header;
-  int out_file_des;
-{
-  int in_file_des;
-  struct new_cpio_header file_hdr;
-  struct utimbuf times;                /* For setting file times.  */
-  /* Initialize this in case it has members we don't know to set.  */
-  bzero (&times, sizeof (struct utimbuf));
-
-  file_hdr = *header;
-
-
-  in_file_des = open (header->c_name,
-                     O_RDONLY | O_BINARY, 0);
-  if (in_file_des < 0)
-    {
-      error (0, errno, "%s", header->c_name);
-      return;
-    }
-
-  if (archive_format == arf_crcascii)
-    file_hdr.c_chksum = read_for_checksum (in_file_des,
-                                          file_hdr.c_filesize,
-                                          header->c_name);
-
-  write_out_header (&file_hdr, out_file_des);
-  copy_files_disk_to_tape (in_file_des, out_file_des, file_hdr.c_filesize, header->c_name);
-
-#ifndef __MSDOS__
-  if (archive_format == arf_tar || archive_format == arf_ustar)
-    add_inode (file_hdr.c_ino, file_hdr.c_name, file_hdr.c_dev_maj,
-              file_hdr.c_dev_min);
-#endif
-
-  tape_pad_output (out_file_des, file_hdr.c_filesize);
-
-  if (close (in_file_des) < 0)
-    error (0, errno, "%s", header->c_name);
-  if (reset_time_flag)
-    {
-      times.actime = file_hdr.c_mtime;
-      times.modtime = file_hdr.c_mtime;
-      if (utime (file_hdr.c_name, &times) < 0)
-       error (0, errno, "%s", file_hdr.c_name);
-    }
-  return;
-}
-
-
-static int
-check_rdev (file_hdr)
-     struct new_cpio_header *file_hdr;
-{
-  if (archive_format == arf_newascii || archive_format == arf_crcascii)
-    {
-      if ((file_hdr->c_rdev_maj & 0xFFFFFFFF) != file_hdr->c_rdev_maj)
-        return 1;
-      if ((file_hdr->c_rdev_min & 0xFFFFFFFF) != file_hdr->c_rdev_min)
-        return 2;
-    }
-  else if (archive_format == arf_oldascii || archive_format == arf_hpoldascii)
-    {
-#ifndef __MSDOS__
-      dev_t rdev;
-
-      rdev = makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min);
-      if (archive_format == arf_oldascii)
-       {
-         if ((rdev & 0xFFFF) != rdev)
-           return 4;
-       }
-      else
-       {
-         switch (file_hdr->c_mode & CP_IFMT)
-           {
-             case CP_IFCHR:
-             case CP_IFBLK:
-#ifdef CP_IFSOCK
-             case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-             case CP_IFIFO:
-#endif
-               /* We could handle one more bit if longs are >= 33 bits.  */
-               if ((rdev & 037777777777) != rdev)
-                 return 4;
-               break;
-             default:
-               if ((rdev & 0xFFFF) != rdev)
-                 return 4;
-               break;
-           }
-       }
-#endif
-    }
-  else if (archive_format == arf_tar || archive_format == arf_ustar)
-    {
-      /* The major and minor formats are limited to 7 octal digits in ustar
-        format, and to_oct () adds a gratuitous trailing blank to further
-        limit the format to 6 octal digits.  */
-      if ((file_hdr->c_rdev_maj & 0777777) != file_hdr->c_rdev_maj)
-        return 1;
-      if ((file_hdr->c_rdev_min & 0777777) != file_hdr->c_rdev_min)
-        return 2;
-    }
-  else
-    {
-#ifndef __MSDOS__
-      dev_t rdev;
-
-      rdev = makedev (file_hdr->c_rdev_maj, file_hdr->c_rdev_min);
-      if (archive_format != arf_hpbinary)
-       {
-         if ((rdev & 0xFFFF) != rdev)
-       return 4;
-    }
-  else
-    {
-      switch (file_hdr->c_mode & CP_IFMT)
-       {
-         case CP_IFCHR:
-         case CP_IFBLK:
-#ifdef CP_IFSOCK
-         case CP_IFSOCK:
-#endif
-#ifdef CP_IFIFO
-         case CP_IFIFO:
-#endif
-           if ((rdev & 0xFFFFFFFF) != rdev)
-             return 4;
-           file_hdr->c_filesize = rdev;
-           rdev = makedev (0, 1);
-           break;
-         default:
-           if ((rdev & 0xFFFF) != rdev)
-             return 4;
-           break;
-       }
-    }
-#endif
-  }
-  return 0;
-}
diff --git a/contrib/cpio/copypass.c b/contrib/cpio/copypass.c
deleted file mode 100644 (file)
index 9c27ac5..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
-/* copypass.c - cpio copy pass sub-function.
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include "filetypes.h"
-#include "system.h"
-#include "cpiohdr.h"
-#include "dstring.h"
-#include "extern.h"
-
-#ifndef HAVE_LCHOWN
-#define lchown chown
-#endif
-
-/* Copy files listed on the standard input into directory `directory_name'.
-   If `link_flag', link instead of copying.  */
-
-void
-process_copy_pass ()
-{
-  dynamic_string input_name;   /* Name of file from stdin.  */
-  dynamic_string output_name;  /* Name of new file.  */
-  int dirname_len;             /* Length of `directory_name'.  */
-  int res;                     /* Result of functions.  */
-  char *slash;                 /* For moving past slashes in input name.  */
-  struct utimbuf times;                /* For resetting file times after copy.  */
-  struct stat in_file_stat;    /* Stat record for input file.  */
-  struct stat out_file_stat;   /* Stat record for output file.  */
-  int in_file_des;             /* Input file descriptor.  */
-  int out_file_des;            /* Output file descriptor.  */
-  int existing_dir;            /* True if file is a dir & already exists.  */
-#ifdef HPUX_CDF
-  int cdf_flag;
-  int cdf_char;
-#endif
-
-  /* Initialize the copy pass.  */
-  dirname_len = strlen (directory_name);
-  ds_init (&input_name, 128);
-  ds_init (&output_name, dirname_len + 2);
-  strcpy (output_name.ds_string, directory_name);
-  output_name.ds_string[dirname_len] = '/';
-  output_is_seekable = TRUE;
-  /* Initialize this in case it has members we don't know to set.  */
-  bzero (&times, sizeof (struct utimbuf));
-
-  /* Copy files with names read from stdin.  */
-  while (ds_fgetstr (stdin, &input_name, name_end) != NULL)
-    {
-      int link_res = -1;
-
-      /* Check for blank line and ignore it if found.  */
-      if (input_name.ds_string[0] == '\0')
-       {
-         error (0, 0, "blank line ignored");
-         continue;
-       }
-
-      /* Check for current directory and ignore it if found.  */
-      if (input_name.ds_string[0] == '.'
-         && (input_name.ds_string[1] == '\0'
-             || (input_name.ds_string[1] == '/'
-                 && input_name.ds_string[2] == '\0')))
-       continue;
-
-      if ((*xstat) (input_name.ds_string, &in_file_stat) < 0)
-       {
-         error (0, errno, "%s", input_name.ds_string);
-         continue;
-       }
-
-      /* Make the name of the new file.  */
-      for (slash = input_name.ds_string; *slash == '/'; ++slash)
-       ;
-#ifdef HPUX_CDF
-      /* For CDF's we add a 2nd `/' after all "hidden" directories.
-        This kind of a kludge, but it's what we do when creating
-        archives, and it's easier to do this than to separately
-        keep track of which directories in a path are "hidden".  */
-      slash = add_cdf_double_slashes (slash);
-#endif
-      ds_resize (&output_name, dirname_len + strlen (slash) + 2);
-      strcpy (output_name.ds_string + dirname_len + 1, slash);
-
-      existing_dir = FALSE;
-      if (lstat (output_name.ds_string, &out_file_stat) == 0)
-       {
-         if (S_ISDIR (out_file_stat.st_mode)
-             && S_ISDIR (in_file_stat.st_mode))
-           {
-             /* If there is already a directory there that
-                we are trying to create, don't complain about it.  */
-             existing_dir = TRUE;
-           }
-         else if (!unconditional_flag
-                  && in_file_stat.st_mtime <= out_file_stat.st_mtime)
-           {
-             error (0, 0, "%s not created: newer or same age version exists",
-                    output_name.ds_string);
-             continue;         /* Go to the next file.  */
-           }
-         else if (S_ISDIR (out_file_stat.st_mode)
-                       ? rmdir (output_name.ds_string)
-                       : unlink (output_name.ds_string))
-           {
-             error (0, errno, "cannot remove current %s",
-                    output_name.ds_string);
-             continue;         /* Go to the next file.  */
-           }
-       }
-
-      /* Do the real copy or link.  */
-      if (S_ISREG (in_file_stat.st_mode))
-       {
-#ifndef __MSDOS__
-         /* Can the current file be linked to a another file?
-            Set link_name to the original file name.  */
-         if (link_flag)
-           /* User said to link it if possible.  Try and link to
-              the original copy.  If that fails we'll still try
-              and link to a copy we've already made.  */
-           link_res = link_to_name (output_name.ds_string, 
-                                    input_name.ds_string);
-         if ( (link_res < 0) && (in_file_stat.st_nlink > 1) )
-           link_res = link_to_maj_min_ino (output_name.ds_string, 
-                               major (in_file_stat.st_dev), 
-                               minor (in_file_stat.st_dev), 
-                               in_file_stat.st_ino);
-#endif
-
-         /* If the file was not linked, copy contents of file.  */
-         if (link_res < 0)
-           {
-             in_file_des = open (input_name.ds_string,
-                                 O_RDONLY | O_BINARY, 0);
-             if (in_file_des < 0)
-               {
-                 error (0, errno, "%s", input_name.ds_string);
-                 continue;
-               }
-             out_file_des = open (output_name.ds_string,
-                                  O_CREAT | O_WRONLY | O_BINARY, 0600);
-             if (out_file_des < 0 && create_dir_flag)
-               {
-                 create_all_directories (output_name.ds_string);
-                 out_file_des = open (output_name.ds_string,
-                                      O_CREAT | O_WRONLY | O_BINARY, 0600);
-               }
-             if (out_file_des < 0)
-               {
-                 error (0, errno, "%s", output_name.ds_string);
-                 close (in_file_des);
-                 continue;
-               }
-
-             copy_files_disk_to_disk (in_file_des, out_file_des, in_file_stat.st_size, input_name.ds_string);
-             disk_empty_output_buffer (out_file_des);
-             if (close (in_file_des) < 0)
-               error (0, errno, "%s", input_name.ds_string);
-             if (close (out_file_des) < 0)
-               error (0, errno, "%s", output_name.ds_string);
-
-             /* Set the attributes of the new file.  */
-             if (!no_chown_flag)
-               if ((chown (output_name.ds_string,
-                           set_owner_flag ? set_owner : in_file_stat.st_uid,
-                     set_group_flag ? set_group : in_file_stat.st_gid) < 0)
-                   && errno != EPERM)
-                 error (0, errno, "%s", output_name.ds_string);
-             /* chown may have turned off some permissions we wanted. */
-             if (chmod (output_name.ds_string, in_file_stat.st_mode) < 0)
-               error (0, errno, "%s", output_name.ds_string);
-             if (reset_time_flag)
-               {
-                 times.actime = in_file_stat.st_atime;
-                 times.modtime = in_file_stat.st_mtime;
-                 if (utime (input_name.ds_string, &times) < 0)
-                   error (0, errno, "%s", input_name.ds_string);
-                 if (utime (output_name.ds_string, &times) < 0)
-                   error (0, errno, "%s", output_name.ds_string);
-               }
-             if (retain_time_flag)
-               {
-                 times.actime = times.modtime = in_file_stat.st_mtime;
-                 if (utime (output_name.ds_string, &times) < 0)
-                   error (0, errno, "%s", output_name.ds_string);
-               }
-           }
-       }
-      else if (S_ISDIR (in_file_stat.st_mode))
-       {
-#ifdef HPUX_CDF
-         cdf_flag = 0;
-#endif
-         if (!existing_dir)
-           {
-#ifdef HPUX_CDF
-             /* If the directory name ends in a + and is SUID,
-                then it is a CDF.  Strip the trailing + from the name
-                before creating it.  */
-             cdf_char = strlen (output_name.ds_string) - 1;
-             if ( (cdf_char > 0) &&
-                  (in_file_stat.st_mode & 04000) &&
-                  (output_name.ds_string [cdf_char] == '+') )
-               {
-                 output_name.ds_string [cdf_char] = '\0';
-                 cdf_flag = 1;
-               }
-#endif
-             res = mkdir (output_name.ds_string, in_file_stat.st_mode);
-
-           }
-         else
-           res = 0;
-         if (res < 0 && create_dir_flag)
-           {
-             create_all_directories (output_name.ds_string);
-             res = mkdir (output_name.ds_string, in_file_stat.st_mode);
-           }
-         if (res < 0)
-           {
-             /* In some odd cases where the output_name includes `.',
-                the directory may have actually been created by
-                create_all_directories(), so the mkdir will fail
-                because the directory exists.  If that's the case,
-                don't complain about it.  */
-             if ( (errno != EEXIST) ||
-                  (lstat (output_name.ds_string, &out_file_stat) != 0) ||
-                  !(S_ISDIR (out_file_stat.st_mode) ) )
-               {
-                 error (0, errno, "%s", output_name.ds_string);
-                 continue;
-               }
-           }
-         if (!no_chown_flag)
-           if ((chown (output_name.ds_string,
-                       set_owner_flag ? set_owner : in_file_stat.st_uid,
-                     set_group_flag ? set_group : in_file_stat.st_gid) < 0)
-               && errno != EPERM)
-             error (0, errno, "%s", output_name.ds_string);
-         /* chown may have turned off some permissions we wanted. */
-         if (chmod (output_name.ds_string, in_file_stat.st_mode) < 0)
-           error (0, errno, "%s", output_name.ds_string);
-#ifdef HPUX_CDF
-         if (cdf_flag)
-           /* Once we "hide" the directory with the chmod(),
-              we have to refer to it using name+ isntead of name.  */
-           output_name.ds_string [cdf_char] = '+';
-#endif
-         if (retain_time_flag)
-           {
-             times.actime = times.modtime = in_file_stat.st_mtime;
-             if (utime (output_name.ds_string, &times) < 0)
-               error (0, errno, "%s", output_name.ds_string);
-           }
-       }
-#ifndef __MSDOS__
-      else if (S_ISCHR (in_file_stat.st_mode) ||
-              S_ISBLK (in_file_stat.st_mode) ||
-#ifdef S_ISFIFO
-              S_ISFIFO (in_file_stat.st_mode) ||
-#endif
-#ifdef S_ISSOCK
-              S_ISSOCK (in_file_stat.st_mode) ||
-#endif
-              0)
-       {
-         /* Can the current file be linked to a another file?
-            Set link_name to the original file name.  */
-         if (link_flag)
-           /* User said to link it if possible.  */
-           link_res = link_to_name (output_name.ds_string, 
-                                    input_name.ds_string);
-         if ( (link_res < 0) && (in_file_stat.st_nlink > 1) )
-           link_res = link_to_maj_min_ino (output_name.ds_string, 
-                       major (in_file_stat.st_dev),
-                       minor (in_file_stat.st_dev),
-                       in_file_stat.st_ino);
-
-         if (link_res < 0)
-           {
-#ifdef S_ISFIFO
-             if (S_ISFIFO (in_file_stat.st_mode))
-               res = mkfifo (output_name.ds_string, in_file_stat.st_mode);
-             else
-#endif
-               res = mknod (output_name.ds_string, in_file_stat.st_mode,
-                            in_file_stat.st_rdev);
-             if (res < 0 && create_dir_flag)
-               {
-                 create_all_directories (output_name.ds_string);
-#ifdef S_ISFIFO
-                 if (S_ISFIFO (in_file_stat.st_mode))
-                   res = mkfifo (output_name.ds_string, in_file_stat.st_mode);
-                 else
-#endif
-                   res = mknod (output_name.ds_string, in_file_stat.st_mode,
-                                in_file_stat.st_rdev);
-               }
-             if (res < 0)
-               {
-                 error (0, errno, "%s", output_name.ds_string);
-                 continue;
-               }
-             if (!no_chown_flag)
-               if ((chown (output_name.ds_string,
-                           set_owner_flag ? set_owner : in_file_stat.st_uid,
-                         set_group_flag ? set_group : in_file_stat.st_gid) < 0)
-                   && errno != EPERM)
-                 error (0, errno, "%s", output_name.ds_string);
-             /* chown may have turned off some permissions we wanted. */
-             if (chmod (output_name.ds_string, in_file_stat.st_mode) < 0)
-               error (0, errno, "%s", output_name.ds_string);
-             if (retain_time_flag)
-               {
-                 times.actime = times.modtime = in_file_stat.st_mtime;
-                 if (utime (output_name.ds_string, &times) < 0)
-                   error (0, errno, "%s", output_name.ds_string);
-               }
-           }
-       }
-#endif
-
-#ifdef S_ISLNK
-      else if (S_ISLNK (in_file_stat.st_mode))
-       {
-         char *link_name;
-         int link_size;
-         link_name = (char *) xmalloc ((unsigned int) in_file_stat.st_size + 1);
-
-         link_size = readlink (input_name.ds_string, link_name,
-                               in_file_stat.st_size);
-         if (link_size < 0)
-           {
-             error (0, errno, "%s", input_name.ds_string);
-             free (link_name);
-             continue;
-           }
-         link_name[link_size] = '\0';
-
-         res = UMASKED_SYMLINK (link_name, output_name.ds_string,
-                                in_file_stat.st_mode);
-         if (res < 0 && create_dir_flag)
-           {
-             create_all_directories (output_name.ds_string);
-             res = UMASKED_SYMLINK (link_name, output_name.ds_string,
-                                    in_file_stat.st_mode);
-           }
-         if (res < 0)
-           {
-             error (0, errno, "%s", output_name.ds_string);
-             free (link_name);
-             continue;
-           }
-
-         /* Set the attributes of the new link.  */
-         if (!no_chown_flag)
-           if ((lchown (output_name.ds_string,
-                        set_owner_flag ? set_owner : in_file_stat.st_uid,
-                     set_group_flag ? set_group : in_file_stat.st_gid) < 0)
-               && errno != EPERM)
-             error (0, errno, "%s", output_name.ds_string);
-         free (link_name);
-       }
-#endif
-      else
-       {
-         error (0, 0, "%s: unknown file type", input_name.ds_string);
-       }
-
-      if (verbose_flag)
-       fprintf (stderr, "%s\n", output_name.ds_string);
-      if (dot_flag)
-       fputc ('.', stderr);
-    }
-
-  if (dot_flag)
-    fputc ('\n', stderr);
-  if (!quiet_flag)
-    {
-      res = (output_bytes + io_block_size - 1) / io_block_size;
-      if (res == 1)
-       fprintf (stderr, "1 block\n");
-      else
-       fprintf (stderr, "%d blocks\n", res);
-    }
-}
-\f
-/* Try and create a hard link from FILE_NAME to another file 
-   with the given major/minor device number and inode.  If no other
-   file with the same major/minor/inode numbers is known, add this file
-   to the list of known files and associated major/minor/inode numbers
-   and return -1.  If another file with the same major/minor/inode
-   numbers is found, try and create another link to it using
-   link_to_name, and return 0 for success and -1 for failure.  */
-
-int
-link_to_maj_min_ino (file_name, st_dev_maj, st_dev_min, st_ino)
-  char *file_name;
-  int st_dev_maj;
-  int st_dev_min;
-  int st_ino;
-{
-  int  link_res;
-  char *link_name;
-  link_res = -1;
-#ifndef __MSDOS__
-  /* Is the file a link to a previously copied file?  */
-  link_name = find_inode_file (st_ino,
-                              st_dev_maj,
-                              st_dev_min);
-  if (link_name == NULL)
-    add_inode (st_ino, file_name,
-              st_dev_maj,
-              st_dev_min);
-  else
-    link_res = link_to_name (file_name, link_name);
-#endif
-  return link_res;
-}
-\f
-/* Try and create a hard link from LINK_NAME to LINK_TARGET.  If
-   `create_dir_flag' is set, any non-existent (parent) directories 
-   needed by LINK_NAME will be created.  If the link is successfully
-   created and `verbose_flag' is set, print "LINK_TARGET linked to LINK_NAME\n".
-   If the link can not be created and `link_flag' is set, print
-   "cannot link LINK_TARGET to LINK_NAME\n".  Return 0 if the link
-   is created, -1 otherwise.  */
-
-int
-link_to_name (link_name, link_target)
-  char *link_name;
-  char *link_target;
-{
-  int res;
-#ifdef __MSDOS__
-  res = -1;
-#else /* not __MSDOS__ */
-  res = link (link_target, link_name);
-  if (res < 0 && create_dir_flag)
-    {
-      create_all_directories (link_name);
-      res = link (link_target, link_name);
-    }
-  if (res == 0)
-    {
-      if (verbose_flag)
-       error (0, 0, "%s linked to %s",
-              link_target, link_name);
-    }
-  else if (link_flag)
-    {
-      error (0, errno, "cannot link %s to %s",
-            link_target, link_name);
-    }
-#endif /* not __MSDOS__ */
-  return res;
-}
diff --git a/contrib/cpio/cpio.1 b/contrib/cpio/cpio.1
deleted file mode 100644 (file)
index b1ba472..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-.TH CPIO 1L \" -*- nroff -*-
-.SH NAME
-cpio \- copy files to and from archives
-.SH SYNOPSIS
-.B cpio
-{\-o|\-\-create} [\-0acvABLV] [\-C bytes] [\-H format] [\-M message]
-[\-O [[user@]host:]archive] [\-F [[user@]host:]archive]
-[\-\-file=[[user@]host:]archive] [\-\-format=format] [\-\-message=message]
-[\-\-null] [\-\-reset-access-time] [\-\-verbose] [\-\-dot] [\-\-append]
-[\-\-block-size=blocks] [\-\-dereference] [\-\-io-size=bytes] [\-\-quiet]
-[\-\-force\-local] [\-\-help] [\-\-version] < name-list [> archive]
-
-.B cpio
-{\-i|\-\-extract} [\-bcdfmnrtsuvBSV] [\-C bytes] [\-E file] [\-H format]
-[\-M message] [\-R [user][:.][group]] [\-I [[user@]host:]archive]
-[\-F [[user@]host:]archive] [\-\-file=[[user@]host:]archive]
-[\-\-make-directories] [\-\-nonmatching] [\-\-preserve-modification-time]
-[\-\-numeric-uid-gid] [\-\-rename] [\-\-list] [\-\-swap-bytes] [\-\-swap] [\-\-dot]
-[\-\-unconditional] [\-\-verbose] [\-\-block-size=blocks] [\-\-swap-halfwords]
-[\-\-io-size=bytes] [\-\-pattern-file=file] [\-\-format=format]
-[\-\-owner=[user][:.][group]] [\-\-no-preserve-owner] [\-\-message=message]
-[\-\-force\-local] [\-\-no\-absolute\-filenames] [\-\-sparse] [\-\-only\-verify\-crc]
-[\-\-quiet] [\-\-help] [\-\-version] [pattern...] [< archive]
-
-.B cpio
-{\-p|\-\-pass-through} [\-0adlmuvLV] [\-R [user][:.][group]]
-[\-\-null] [\-\-reset-access-time] [\-\-make-directories] [\-\-link] [\-\-quiet]
-[\-\-preserve-modification-time] [\-\-unconditional] [\-\-verbose] [\-\-dot]
-[\-\-dereference] [\-\-owner=[user][:.][group]] [\-\-no-preserve-owner]
-[\-\-sparse] [\-\-help] [\-\-version] destination-directory < name-list
-.SH DESCRIPTION
-This manual page
-documents the GNU version of
-.BR cpio .
-.B cpio
-copies files into or out of a cpio or tar archive, which is a file that
-contains other files plus information about them, such as their
-file name, owner, timestamps, and access permissions.  The archive can
-be another file on the disk, a magnetic tape, or a pipe.
-.B cpio
-has three operating modes.
-.PP
-In copy-out mode,
-.B cpio
-copies files into an archive.  It reads a list of filenames, one per
-line, on the standard input, and writes the archive onto the standard
-output.  A typical way to generate the list of filenames is with the
-.B find
-command; you should give
-.B find
-the \-d option to minimize problems with permissions on
-directories that are unwritable or not searchable.
-.PP
-In copy-in mode,
-.B cpio
-copies files out of an archive or lists the archive contents.  It
-reads the archive from the standard input.  Any non-option command
-line arguments are shell globbing patterns; only files in the archive
-whose names match one or more of those patterns are copied from the
-archive.  Unlike in the shell, an initial `.' in a filename does
-match a wildcard at the start of a pattern, and a `/' in a filename
-can match wildcards.  If no patterns are given, all files are
-extracted.
-.PP
-In copy-pass mode,
-.B cpio
-copies files from one directory tree to another, combining the
-copy-out and copy-in steps without actually using an archive.
-It reads the list of files to copy from the standard input; the
-directory into which it will copy them is given as a non-option
-argument.
-.PP
-.B cpio
-supports the following archive formats: binary, old ASCII, new
-ASCII, crc, HPUX binary, HPUX old ASCII, old tar, and POSIX.1 tar.  
-The binary format 
-is obsolete because it encodes information about the files in a way
-that is not portable between different machine architectures.
-The old ASCII format is portable between different machine architectures,
-but should not be used on file systems with more than 65536 i-nodes.
-The new ASCII format is portable between different machine architectures
-and can be used on any size file system, but is not supported by all
-versions of
-.BR cpio ;
-currently, it is only supported by GNU and Unix System V R4.
-The crc format is
-like the new ASCII format, but also contains a checksum for each file
-which
-.B cpio 
-calculates when creating an archive
-and verifies when the file is extracted from the archive.
-The HPUX formats are provided for compatibility with HPUX's cpio which
-stores device files differently.
-.PP
-The tar format is provided for compatibility with
-the
-.B tar
-program.  It can not be used to archive files with names
-longer than 100 characters, and can not be used to archive "special"
-(block or character devices) files.
-The POSIX.1 tar format can not be used to archive files with names longer
-than 255 characters (less unless they have a "/" in just the right place).
-.PP
-By default,  
-.B cpio
-creates binary format archives, for compatibility with
-older
-.B cpio
-programs.
-When extracting from archives,
-.B cpio
-automatically recognizes which kind of archive it is reading and can
-read archives created on machines with a different byte-order.
-.PP
-Some of the options to
-.B cpio
-apply only to certain operating modes; see the SYNOPSIS section for a
-list of which options are allowed in which modes.
-.SS OPTIONS
-.TP
-.I "\-0, \-\-null"
-In copy-out and copy-pass modes, read a list of filenames terminated
-by a null character instead of a newline, so that files whose names
-contain newlines can be archived.  GNU
-.B find
-is one way to produce a list of null-terminated filenames.
-.TP
-.I "\-a, \-\-reset-access-time"
-Reset the access times of files after reading them, so that it does
-not look like they have just been read.
-.TP
-.I "\-A, \-\-append"
-Append to an existing archive.  Only works in copy-out mode.  The
-archive must be a disk file specified with the
-.I \-O
-or
-.I "\-F (\-\-file)"
-option.
-.TP
-.I "\-b, \-\-swap"
-In copy-in mode, swap both halfwords of words and bytes of halfwords
-in the data.  Equivalent to
-.IR "\-sS" .
-Use this option to convert 32-bit integers between big-endian and
-little-endian machines.
-.TP
-.I "\-B"
-Set the I/O block size to 5120 bytes.  Initially the block size is 512
-bytes.
-.TP
-.I "\-\-block-size=BLOCK-SIZE"
-Set the I/O block size to BLOCK-SIZE * 512 bytes.
-.TP
-.I "\-c"
-Use the old portable (ASCII) archive format.
-.TP
-.I "\-C IO-SIZE, \-\-io-size=IO-SIZE"
-Set the I/O block size to IO-SIZE bytes.
-.TP
-.I "\-d, \-\-make-directories"
-Create leading directories where needed.
-.TP
-.I "\-E FILE, \-\-pattern-file=FILE"
-In copy-in mode, read additional patterns specifying filenames to
-extract or list from FILE.  The lines of FILE are treated as if they
-had been non-option arguments to
-.BR cpio .
-.TP
-.I "\-f, \-\-nonmatching"
-Only copy files that do not match any of the given patterns.
-.TP
-.I "\-F, \-\-file=archive"
-Archive filename to use instead of standard input or output.  To use a
-tape drive on another machine as the archive, use a filename that
-starts with `HOSTNAME:'.  The hostname can be preceded by a
-username and an `@' to access the remote tape drive as that user, if
-you have permission to do so (typically an entry in that user's
-`~/.rhosts' file).
-.TP
-.I "\-\-force-local"
-With
-.IR \-F ,
-.IR \-I ,
-or
-.IR \-O ,
-take the archive file name to be a local file even if it contains a
-colon, which would ordinarily indicate a remote host name.
-.TP
-.I "\-H FORMAT, \-\-format=FORMAT"
-Use archive format FORMAT.  The valid formats are listed below;
-the same names are also recognized in all-caps.  The default in
-copy-in mode is to automatically detect the archive format, and in
-copy-out mode is "bin".
-.RS
-.IP bin
-The obsolete binary format.
-.IP odc
-The old (POSIX.1) portable format.
-.IP newc
-The new (SVR4) portable format, which supports file systems having
-more than 65536 i-nodes.
-.IP crc
-The new (SVR4) portable format with a checksum added.
-.IP tar
-The old tar format.
-.IP ustar
-The POSIX.1 tar format.  Also recognizes GNU
-.B tar
-archives, which are similar but not identical.
-.IP hpbin
-The obsolete binary format used by HPUX's cpio (which stores device files
-differently).
-.IP hpodc
-The portable format used by HPUX's cpio (which stores device files differently).
-.RE
-.TP
-.I "\-i, \-\-extract"
-Run in copy-in mode.
-.TP
-.I "\-I archive"
-Archive filename to use instead of standard input.  To use a
-tape drive on another machine as the archive, use a filename that
-starts with `HOSTNAME:'.  The hostname can be preceded by a
-username and an `@' to access the remote tape drive as that user, if
-you have permission to do so (typically an entry in that user's
-`~/.rhosts' file).
-.TP
-.I \-k
-Ignored; for compatibility with other versions of
-.BR cpio .
-.TP
-.I "\-l, \-\-link"
-Link files instead of copying them, when possible (usable only with the
-.I \-p
-option).
-.TP
-.I "\-L, \-\-dereference"
-Dereference symbolic links (copy the files that they point to instead
-of copying the links).
-.TP
-.I "\-m, \-\-preserve-modification-time"
-Retain previous file modification times when creating files.
-.TP
-.I "\-M MESSAGE, \-\-message=MESSAGE"
-Print MESSAGE when the end of a volume of the backup media (such as a
-tape or a floppy disk) is reached, to prompt the user to insert a new
-volume.  If MESSAGE contains the string "%d", it is replaced by the
-current volume number (starting at 1).
-.TP
-.I "\-n, \-\-numeric-uid-gid"
-In the verbose table of contents listing, show numeric UID and GID
-instead of translating them into names.
-.TP
-.I " \-\-no-absolute-filenames"
-In copy-in mode, create all files relative to the current directory,
-even if they have an absolute file name in the archive.
-.TP
-.I " \-\-no-preserve-owner"
-In copy-in mode and copy-pass mode, do not change the ownership of the
-files; leave them owned by the user extracting them.  This is the
-default for non-root users, so that users on System V don't
-inadvertently give away files.
-.TP
-.I "\-o, \-\-create"
-Run in copy-out mode.
-.TP
-.I "\-O archive"
-Archive filename to use instead of standard output.  To use a tape
-drive on another machine as the archive, use a filename that starts
-with `HOSTNAME:'.  The hostname can be preceded by a username and an
-`@' to access the remote tape drive as that user, if you have
-permission to do so (typically an entry in that user's `~/.rhosts'
-file).
-.TP
-.I " \-\-only-verify-crc"
-When reading a CRC format archive in copy-in mode, only verify the
-CRC's of each file in the archive, don't actually extract the files.
-.TP
-.I "\-p, \-\-pass-through"
-Run in copy-pass mode.
-.TP
-.I "\-\-quiet"
-Do not print the number of blocks copied.
-.TP
-.I "\-r, \-\-rename"
-Interactively rename files.
-.TP
-.I "\-R [user][:.][group], \-\-owner [user][:.][group]"
-In copy-out and copy-pass modes, set the ownership of all files created
-to the specified user and/or group.  Either the user or the group, or
-both, must be present.  If the group is omitted but the ":" or "."
-separator is given, use the given user's login group.  Only the
-super-user can change files' ownership.
-.TP
-.I "\-\-sparse"
-In copy-out and copy-pass modes, write files with large blocks of zeros
-as sparse files.
-.TP
-.I "\-s, \-\-swap-bytes"
-In copy-in mode, swap the bytes of each halfword (pair of bytes) in the
-files.
-.TP
-.I "\-S, \-\-swap-halfwords"
-In copy-in mode, swap the halfwords of each word (4 bytes) in the
-files.
-.TP
-.I "\-t, \-\-list"
-Print a table of contents of the input.
-.TP
-.I "\-u, \-\-unconditional"
-Replace all files, without asking whether to replace existing newer
-files with older files.
-.TP
-.I "\-v, \-\-verbose"
-List the files processed, or with
-.IR \-t ,
-give an `ls \-l' style table of contents listing.  In a verbose table
-of contents of a ustar archive, user and group names in the archive
-that do not exist on the local system are replaced by the names that
-correspond locally to the numeric UID and GID stored in the archive.
-.TP
-.I "\-V \-\-dot"
-Print a "." for each file processed.
-.TP
-.I "\-\-version"
-Print the
-.B cpio
-program version number and exit.
diff --git a/contrib/cpio/cpio.h b/contrib/cpio/cpio.h
deleted file mode 100644 (file)
index 537da72..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Extended cpio format from POSIX.1.
-   Copyright (C) 1992 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.  */
-
-#ifndef _CPIO_H
-
-#define _CPIO_H 1
-
-/* A cpio archive consists of a sequence of files.
-   Each file has a 76 byte header,
-   a variable length, NUL terminated filename,
-   and variable length file data.
-   A header for a filename "TRAILER!!!" indicates the end of the archive.  */
-
-/* All the fields in the header are ISO 646 (approximately ASCII) strings
-   of octal numbers, left padded, not NUL terminated.
-
-   Field Name  Length in Bytes Notes
-   c_magic     6               must be "070707"
-   c_dev       6
-   c_ino       6
-   c_mode      6               see below for value
-   c_uid       6
-   c_gid       6
-   c_nlink     6
-   c_rdev      6               only valid for chr and blk special files
-   c_mtime     11
-   c_namesize  6               count includes terminating NUL in pathname
-   c_filesize  11              must be 0 for FIFOs and directories  */
-
-/* Values for c_mode, OR'd together: */
-
-#define C_IRUSR                000400
-#define C_IWUSR                000200
-#define C_IXUSR                000100
-#define C_IRGRP                000040
-#define C_IWGRP                000020
-#define C_IXGRP                000010
-#define C_IROTH                000004
-#define C_IWOTH                000002
-#define C_IXOTH                000001
-
-#define C_ISUID                004000
-#define C_ISGID                002000
-#define C_ISVTX                001000
-
-#define C_ISBLK                060000
-#define C_ISCHR                020000
-#define C_ISDIR                040000
-#define C_ISFIFO       010000
-#define C_ISSOCK       0140000
-#define C_ISLNK                0120000
-#define C_ISCTG                0110000
-#define C_ISREG                0100000
-
-#endif /* cpio.h */
diff --git a/contrib/cpio/cpio.texi b/contrib/cpio/cpio.texi
deleted file mode 100644 (file)
index 6b0fd45..0000000
+++ /dev/null
@@ -1,558 +0,0 @@
-\input texinfo   @c -*-texinfo-*-
-@c %**start of header
-@setfilename cpio.info
-@settitle cpio
-@setchapternewpage off
-@set VERSION GNU cpio 2.4
-@set RELEASEDATE November 1995
-@c %**end of header
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* cpio: (cpio).                 Making tape (or disk) archives.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@ifinfo
-This file documents @value{VERSION}.
-
-Copyright (C) 1995 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-@end ifinfo
-
-
-@titlepage
-@title GNU CPIO
-@subtitle @value{VERSION} @value{RELEASEDATE}
-@author by Robert Carleton
-@c copyright page
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1995 Free Software Foundation, Inc.
-@sp 2
-This is the first edition of the GNU cpio documentation,@*
-and is consistent with @value{VERSION}.@*
-@sp 2
-Published by the Free Software Foundation @*
-59 Temple Place - Suite 330, @*
-Boston, MA 02111-1307, USA @*
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation
-approved by the Free Software Foundation.
-@end titlepage
-
-@ifinfo
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top
-
-GNU cpio is a tool for creating and extracting archives, or copying
-files from one place to another.  It handles a number of cpio formats as
-well as reading and writing tar files.  This is the first edition of the 
-GNU cpio documentation and is consistant with @value{VERSION}.
-
-@menu
-* Introduction::                
-* Tutorial::                    Getting started.
-* Invoking `cpio'::             How to invoke `cpio'.
-* Media::                       Using tapes and other archive media.
-* Concept Index::               Concept index.
-
- --- The Detailed Node Listing ---
-
-Invoking cpio
-
-* Copy-out mode::               
-* Copy-in mode::                
-* Copy-pass mode::              
-* Options::                     
-@end menu
-
-@end ifinfo
-
-@node Introduction, Tutorial, Top, Top
-@comment  node-name,  next,  previous,  up
-@chapter Introduction
-
-GNU cpio copies files into or out of a cpio or tar archive, The archive
-can be another file on the disk, a magnetic tape, or a pipe.
-
-GNU cpio supports the following archive formats: binary, old ASCII, new
-ASCII, crc, HPUX binary, HPUX old ASCII, old tar, and POSIX.1 tar.  The
-tar format is provided for compatability with the tar program. By
-default, cpio creates binary format archives, for compatibility with
-older cpio programs.  When extracting from archives, cpio automatically
-recognizes which kind of archive it is reading and can read archives
-created on machines with a different byte-order.
-
-@node Tutorial, Invoking `cpio', Introduction, Top
-@comment  node-name,  next,  previous,  up
-@chapter Tutorial
-@cindex creating a cpio archive
-@cindex extracting a cpio archive
-@cindex copying directory structures
-@cindex passing directory structures
-
-
-GNU cpio performs three primary functions.  Copying files to an
-archive, Extracting files from an archive, and passing files to another
-directory tree.  An archive can be a file on disk, one or more floppy
-disks, or one or more tapes.
-
-When creating an archive, cpio takes the list of files to be processed
-from the standard input, and then sends the archive to the standard
-output, or to the device defined by the @samp{-F} option.
-@xref{Copy-out mode}.  Usually find or ls is used to provide this list
-to the standard input.  In the following example you can see the
-possibilities for archiving the contents of a single directory.
-
-
-@example
-@cartouche
-% ls | cpio -ov > directory.cpio
-@end cartouche
-@end example
-
-The @samp{-o} option creates the archive, and the @samp{-v} option
-prints the names of the files archived as they are added.  Notice that
-the options can be put together after a single @samp{-} or can be placed
-separately on the command line.  The @samp{>} redirects the cpio output
-to the file @samp{directory.cpio}.
-
-
-If you wanted to archive an entire directory tree, the find command can
-provide the file list to cpio:
-
-
-@example
-@cartouche
-% find . -print -depth | cpio -ov > tree.cpio
-@end cartouche
-@end example
-
-
-This will take all the files in the current directory, the directories
-below and place them in the archive tree.cpio.  Again the @samp{-o}
-creates an archive, and the @samp{-v} option shows you the name of the
-files as they are archived.  @xref{Copy-out mode}.  Using the `.' in the
-find statement will give you more flexibility when doing restores, as it
-will save file names with a relative path vice a hard wired, absolute
-path.  The @samp{-depth} option forces @samp{find} to print of the
-entries in a directory before printing the directory itself.  This
-limits the effects of restrictive directory permissions by printing the
-directory entries in a directory before the directory name itself.
-
-
-
-
-Extracting an archive requires a bit more thought because cpio will not
-create directories by default.  Another characteristic, is it will not
-overwrite existing files unless you tell it to.
-
-
-@example
-@cartouche
-% cpio -iv < directory.cpio
-@end cartouche
-@end example
-
-This will retrieve the files archived in the file directory.cpio and
-place them in the present directory.  The @samp{-i} option extracts the
-archive and the @samp{-v} shows the file names as they are extracted.
-If you are dealing with an archived directory tree, you need to use the
-@samp{-d} option to create directories as necessary, something like:
-
-@example
-@cartouche
-% cpio -idv < tree.cpio
-@end cartouche
-@end example
-
-This will take the contents of the archive tree.cpio and extract it to
-the current directory.  If you try to extract the files on top of files
-of the same name that already exist (and have the same or later
-modification time) cpio will not extract the file unless told to do so
-by the -u option.  @xref{Copy-in mode}.
-
-
-In copy-pass mode, cpio copies files from one directory tree to another,
-combining the copy-out and copy-in steps without actually using an
-archive.  It reads the list of files to copy from the standard input;
-the directory into which it will copy them is given as a non-option
-argument.  @xref{Copy-pass mode}.
-
-@example
-@cartouche
-% find . -depth -print0 | cpio --null -pvd new-dir
-@end cartouche
-@end example
-
-
-The example shows copying the files of the present directory, and
-sub-directories to a new directory called new-dir.  Some new options are
-the @samp{-print0} available with GNU find, combined with the
-@samp{--null} option of cpio.  These two options act together to send
-file names between find and cpio, even if special characters are
-embedded in the file names.  Another is @samp{-p}, which tells cpio to
-pass the files it finds to the directory @samp{new-dir}.
-
-@node Invoking `cpio', Media, Tutorial, Top
-@comment  node-name,  next,  previous,  up
-@chapter Invoking cpio
-@cindex invoking cpio
-@cindex command line options
-
-@menu
-* Copy-out mode::               
-* Copy-in mode::                
-* Copy-pass mode::              
-* Options::                     
-@end menu
-
-@node Copy-out mode, Copy-in mode, Invoking `cpio', Invoking `cpio'
-@comment  node-name,  next,  previous,  up
-@section Copy-out mode
-
-In copy-out mode, cpio copies files into an archive.  It reads a list
-of filenames, one per line, on the standard input, and writes the
-archive onto the standard output.  A typical way to generate the list
-of filenames is with the find command; you should give find the -depth
-option to minimize problems with permissions on directories that are
-unreadable.
-@xref{Options}.
-
-@example
-cpio @{-o|--create@} [-0acvABLV] [-C bytes] [-H format]
-[-M message] [-O [[user@@]host:]archive] [-F [[user@@]host:]archive]
-[--file=[[user@@]host:]archive] [--format=format] [--sparse]
-[--message=message][--null] [--reset-access-time] [--verbose]
-[--dot] [--append] [--block-size=blocks] [--dereference]
-[--io-size=bytes] [--help] [--version] < name-list [> archive]
-@end example
-
-@node Copy-in mode, Copy-pass mode, Copy-out mode, Invoking `cpio'
-@comment  node-name,  next,  previous,  up
-@section Copy-in mode
-
-In copy-in mode, cpio copies files out of an archive or lists the
-archive contents.  It reads the archive from the standard input.  Any
-non-option command line arguments are shell globbing patterns; only
-files in the archive whose names match one or more of those patterns are
-copied from the archive.  Unlike in the shell, an initial `.' in a
-filename does match a wildcard at the start of a pattern, and a `/' in a
-filename can match wildcards.  If no patterns are given, all files are
-extracted.  @xref{Options}.
-
-@example
-cpio @{-i|--extract@} [-bcdfmnrtsuvBSV] [-C bytes] [-E file]
-[-H format] [-M message] [-R [user][:.][group]]
-[-I [[user@@]host:]archive] [-F [[user@@]host:]archive]
-[--file=[[user@@]host:]archive] [--make-directories]
-[--nonmatching] [--preserve-modification-time]
-[--numeric-uid-gid] [--rename] [--list] [--swap-bytes] [--swap]
-[--dot] [--unconditional] [--verbose] [--block-size=blocks]
-[--swap-halfwords] [--io-size=bytes] [--pattern-file=file]
-[--format=format] [--owner=[user][:.][group]]
-[--no- preserve-owner] [--message=message] [--help] [--version]
-[-no-abosolute-filenames] [-only-verify-crc] [-quiet]
-[pattern...] [< archive]
-@end example
-
-@node Copy-pass mode, Options, Copy-in mode, Invoking `cpio'
-@comment  node-name,  next,  previous,  up
-@section Copy-pass mode
-
-In copy-pass mode, cpio copies files from one directory tree to
-another, combining the copy-out and copy-in steps without actually
-using an archive.  It reads the list of files to copy from the
-standard input; the directory into which it will copy them is given as
-a non-option argument.
-@xref{Options}.
-
-@example
-cpio @{-p|--pass-through@} [-0adlmuvLV] [-R [user][:.][group]]
-[--null] [--reset-access-time] [--make-directories] [--link]
-[--preserve-modification-time] [--unconditional] [--verbose]
-[--dot] [--dereference] [--owner=[user][:.][group]] [--sparse]
-[--no-preserve-owner] [--help] [--version] destination-directory
-< name-list
-@end example
-
-
-
-@node Options,  , Copy-pass mode, Invoking `cpio'
-@comment  node-name,  next,  previous,  up
-@section Options
-
-
-@table @code
-
-
-@item -0, --null
-Read a list of filenames terminated by a null character, instead of a
-newline, so that files whose names contain newlines can be archived.
-GNU find is one way to produce a list of null-terminated filenames.
-This option may be used in copy-out and copy-pass modes.
-
-@item -a, --reset-access-time
-Reset the access times of files after reading them, so
-that it does not look like they have just been read.
-
-@item -A, --append
-Append to an existing archive.  Only works in copy-out
-mode.  The archive must be a disk file specified with
-the -O or -F (--file) option.
-
-@item -b, --swap
-Swap both halfwords of words and bytes of halfwords in the data.
-Equivalent to -sS.  This option may be used in copy-in mode.  Use this
-option to convert 32-bit integers between big-endian and little-endian
-machines.
-
-@item -B   
-Set the I/O block size to 5120 bytes.  Initially the
-block size is 512 bytes.
-
-@item --block-size=BLOCK-SIZE
-Set the I/O block size to BLOCK-SIZE * 512 bytes.
-
-@item -c
-Use the old portable (ASCII) archive format.
-
-@item -C IO-SIZE, --io-size=IO-SIZE
-Set the I/O block size to IO-SIZE bytes.
-
-@item -d, --make-directories
-Create leading directories where needed.
-
-@item -E FILE, --pattern-file=FILE
-Read additional patterns specifying filenames to extract or list from
-FILE.  The lines of FILE are treated as if they had been non-option
-arguments to cpio.  This option is used in copy-in mode,
-
-@item -f, --nonmatching
-Only copy files that do not match any of the given
-patterns.
-
-@item -F, --file=archive
-Archive filename to use instead of standard input or output.  To use a
-tape drive on another machine as the archive, use a filename that starts
-with `HOSTNAME:'.  The hostname can be preceded by a username and an
-`@@' to access the remote tape drive as that user, if you have
-permission to do so (typically an entry in that user's `~/.rhosts'
-file).
-
-@item --force-local
-With -F, -I, or -O, take the archive file name to be a
-local file even if it contains a colon, which would
-ordinarily indicate a remote host name.
-
-@item -H FORMAT, --format=FORMAT
-Use archive format FORMAT.  The valid formats are listed below; the same
-names are also recognized in all-caps.  The default in copy-in mode is
-to automatically detect the archive format, and in copy-out mode is
-@samp{bin}.
-
-@table @samp
-@item bin  
-The obsolete binary format.
-
-@item odc
-The old (POSIX.1) portable format.
-
-@item newc
-The new (SVR4) portable format, which supports file systems having more
-than 65536 i-nodes.
-
-@item crc
-The new (SVR4) portable format with a checksum added.
-
-@item tar
-The old tar format.
-
-@item ustar
-The POSIX.1 tar format.  Also recognizes GNU tar archives, which are
-similar but not identical.
-
-@item hpbin
-The obsolete binary format used by HPUX's cpio (which stores device
-files differently).
-
-@item hpodc
-The portable format used by HPUX's cpio (which stores device files
-differently).
-@end table
-
-@item -i, --extract
-Run in copy-in mode.
-@xref{Copy-in mode}.
-
-@item -I archive
-Archive filename to use instead of standard input.  To use a tape drive
-on another machine as the archive, use a filename that starts with
-`HOSTNAME:'.  The hostname can be preceded by a username and an `@@' to
-access the remote tape drive as that user, if you have permission to do
-so (typically an entry in that user's `~/.rhosts' file).
-
-@item -k
-Ignored; for compatibility with other versions of cpio.
-
-@item -l, --link
-Link files instead of copying them, when possible.
-
-@item -L, --dereference
-Copy the file that a symbolic link points to, rather than the symbolic
-link itself.
-
-@item -m, --preserve-modification-time
-Retain previous file modification times when creating files.
-
-@item -M MESSAGE, --message=MESSAGE
-Print MESSAGE when the end of a volume of the backup media (such as a
-tape or a floppy disk) is reached, to prompt the user to insert a new
-volume.  If MESSAGE contains the string "%d", it is replaced by the
-current volume number (starting at 1).
-
-@item -n, --numeric-uid-gid
-Show numeric UID and GID instead of translating them into names when using the
-@samp{--verbose option}.
-
-@item --no-absolute-filenames
-Create all files relative to the current directory in copy-in mode, even
-if they have an absolute file name in the archive.
-
-@item --no-preserve-owner
-Do not change the ownership of the files; leave them owned by the user
-extracting them.  This is the default for non-root users, so that users
-on System V don't inadvertantly give away files.  This option can be
-used in copy-in mode and copy-pass mode
-
-@item -o, --create
-Run in copy-out mode.
-@xref{Copy-out mode}.
-
-@item -O archive
-Archive filename to use instead of standard output.  To use a tape drive
-on another machine as the archive, use a filename that starts with
-`HOSTNAME:'.  The hostname can be preceded by a username and an `@@' to
-access the remote tape drive as that user, if you have permission to do
-so (typically an entry in that user's `~/.rhosts' file).
-
-@item --only-verify-crc
-Verify the CRC's of each file in the archive, when reading a CRC format
-archive. Don't actually extract the files.
-
-@item -p, --pass-through
-Run in copy-pass mode.
-@xref{Copy-pass mode}.
-
-@item --quiet
-Do not print the number of blocks copied.
-
-@item -r, --rename
-Interactively rename files.
-
-@item -R [user][:.][group], --owner [user][:.][group]
-Set the ownership of all files created to the specified user and/or
-group in copy-out and copy-pass modes.  Either the user, the group, or
-both, must be present.  If the group is omitted but the ":" or "."
-separator is given, use the given user's login group.  Only the
-super-user can change files' ownership.
-
-@item -s, --swap-bytes
-Swap the bytes of each halfword (pair of bytes) in the files.This option
-can be used in copy-in mode.
-
-@item -S, --swap-halfwords
-Swap the halfwords of each word (4 bytes) in the files.  This option may
-be used in copy-in mode.
-
-@item --sparse
-Write files with large blocks of zeros as sparse files.  This option is
-used in copy-out and copy-pass modes.
-
-@item -t, --list
-Print a table of contents of the input.
-
-@item -u, --unconditional
-Replace all files, without asking whether to replace
-existing newer files with older files.
-
-@item -v, --verbose
-List the files processed, or with @samp{-t}, give an @samp{ls -l} style
-table of contents listing.  In a verbose table of contents of a ustar
-archive, user and group names in the archive that do not exist on the
-local system are replaced by the names that correspond locally to the
-numeric UID and GID stored in the archive.
-
-@item -V --dot
-Print a @kbd{.} for each file processed.
-
-@item --version
-Print the cpio program version number and exit.
-@end table
-
-
-@node Media, Concept Index, Invoking `cpio', Top
-@comment  node-name,  next,  previous,  up
-@chapter Magnetic Media
-@cindex magnetic media
-
-Archives are usually written on removable media--tape cartridges, mag
-tapes, or floppy disks.
-
-The amount of data a tape or disk holds depends not only on its size,
-but also on how it is formatted.  A 2400 foot long reel of mag tape
-holds 40 megabytes of data when formated at 1600 bits per inch.  The
-physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
-
-Magnetic media are re-usable--once the archive on a tape is no longer
-needed, the archive can be erased and the tape or disk used over. Media
-quality does deteriorate with use, however.  Most tapes or disks should
-be disgarded when they begin to produce data errors.
-
-Magnetic media are written and erased using magnetic fields, and should
-be protected from such fields to avoid damage to stored data.  Sticking
-a floppy disk to a filing cabinet using a magnet is probably not a good
-idea.
-
-
-@node Concept Index,  , Media, Top
-@comment  node-name,  next,  previous,  up
-@unnumbered Concept Index
-@printindex cp
-@contents
-@bye
diff --git a/contrib/cpio/cpiohdr.h b/contrib/cpio/cpiohdr.h
deleted file mode 100644 (file)
index 9694af6..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Extended cpio header from POSIX.1.
-   Copyright (C) 1992 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.  */
-
-#ifndef _CPIOHDR_H
-
-#define _CPIOHDR_H 1
-
-#include <cpio.h>
-
-struct old_cpio_header
-{
-  unsigned short c_magic;
-  short c_dev;
-  unsigned short c_ino;
-  unsigned short c_mode;
-  unsigned short c_uid;
-  unsigned short c_gid;
-  unsigned short c_nlink;
-  short c_rdev;
-  unsigned short c_mtimes[2];
-  unsigned short c_namesize;
-  unsigned short c_filesizes[2];
-  unsigned long c_mtime;       /* Long-aligned copy of `c_mtimes'. */
-  unsigned long c_filesize;    /* Long-aligned copy of `c_filesizes'. */
-  char *c_name;
-};
-
-/* "New" portable format and CRC format:
-
-   Each file has a 110 byte header,
-   a variable length, NUL terminated filename,
-   and variable length file data.
-   A header for a filename "TRAILER!!!" indicates the end of the archive.  */
-
-/* All the fields in the header are ISO 646 (approximately ASCII) strings
-   of hexadecimal numbers, left padded, not NUL terminated.
-
-   Field Name  Length in Bytes Notes
-   c_magic     6               "070701" for "new" portable format
-                               "070702" for CRC format
-   c_ino       8
-   c_mode      8
-   c_uid       8
-   c_gid       8
-   c_nlink     8
-   c_mtime     8
-   c_filesize  8               must be 0 for FIFOs and directories
-   c_maj       8
-   c_min       8
-   c_rmaj      8               only valid for chr and blk special files
-   c_rmin      8               only valid for chr and blk special files
-   c_namesize  8               count includes terminating NUL in pathname
-   c_chksum    8               0 for "new" portable format; for CRC format
-                               the sum of all the bytes in the file  */
-
-struct new_cpio_header
-{
-  unsigned short c_magic;
-  unsigned long c_ino;
-  unsigned long c_mode;
-  unsigned long c_uid;
-  unsigned long c_gid;
-  unsigned long c_nlink;
-  unsigned long c_mtime;
-  unsigned long c_filesize;
-  long c_dev_maj;
-  long c_dev_min;
-  long c_rdev_maj;
-  long c_rdev_min;
-  unsigned long c_namesize;
-  unsigned long c_chksum;
-  char *c_name;
-  char *c_tar_linkname;
-};
-
-#endif /* cpiohdr.h */
diff --git a/contrib/cpio/defer.c b/contrib/cpio/defer.c
deleted file mode 100644 (file)
index efe60e0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* defer.c - handle "defered" links in newc and crc archives
-   Copyright (C) 1993 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.  */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include "system.h"
-#include "cpiohdr.h"
-#include "extern.h"
-#include "defer.h"
-
-struct deferment *
-create_deferment (file_hdr)
-  struct new_cpio_header *file_hdr;
-{
-  struct deferment *d;
-  d = (struct deferment *) xmalloc (sizeof (struct deferment) );
-  d->header = *file_hdr;
-  d->header.c_name = (char *) xmalloc (strlen (file_hdr->c_name) + 1);
-  strcpy (d->header.c_name, file_hdr->c_name);
-  return d;
-}
-
-void
-free_deferment (d)
-  struct deferment *d;
-{
-  free (d->header.c_name);
-  free (d);
-}
diff --git a/contrib/cpio/defer.h b/contrib/cpio/defer.h
deleted file mode 100644 (file)
index 89abffe..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-struct deferment
-  {
-    struct deferment *next;
-    struct new_cpio_header header;
-  };
-
-struct deferment *create_deferment P_((struct new_cpio_header *file_hdr));
-void free_deferment P_((struct deferment *d));
diff --git a/contrib/cpio/dirname.c b/contrib/cpio/dirname.c
deleted file mode 100644 (file)
index 15d2596..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* dirname.c -- return all but the last element in a path
-   Copyright (C) 1990 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#else
-char *malloc ();
-#endif
-#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
-#include <string.h>
-#else
-#include <strings.h>
-#ifndef strrchr
-#define strrchr rindex
-#endif
-#endif
-
-/* Return the leading directories part of PATH,
-   allocated with malloc.  If out of memory, return 0.
-   Assumes that trailing slashes have already been
-   removed.  */
-
-char *
-dirname (path)
-     char *path;
-{
-  char *newpath;
-  char *slash;
-  int length;                  /* Length of result, not including NUL.  */
-
-  slash = strrchr (path, '/');
-  if (slash == 0)
-    {
-      /* File is in the current directory.  */
-      path = ".";
-      length = 1;
-    }
-  else
-    {
-      /* Remove any trailing slashes from the result.  */
-      while (slash > path && *slash == '/')
-       --slash;
-
-      length = slash - path + 1;
-    }
-  newpath = (char *) malloc (length + 1);
-  if (newpath == 0)
-    return 0;
-  strncpy (newpath, path, length);
-  newpath[length] = 0;
-  return newpath;
-}
diff --git a/contrib/cpio/dstring.c b/contrib/cpio/dstring.c
deleted file mode 100644 (file)
index 26d6bbc..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/* dstring.c - The dynamic string handling routines used by cpio.
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-#include <stdio.h>
-#if defined(HAVE_STRING_H) || defined(STDC_HEADERS)
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-#include "dstring.h"
-
-#if __STDC__
-# define P_(s) s
-#else
-# define P_(s) ()
-#endif
-char *xmalloc P_((unsigned n));
-char *xrealloc P_((char *p, unsigned n));
-
-/* Initialiaze dynamic string STRING with space for SIZE characters.  */
-
-void
-ds_init (string, size)
-     dynamic_string *string;
-     int size;
-{
-  string->ds_length = size;
-  string->ds_string = (char *) xmalloc (size);
-}
-
-/* Expand dynamic string STRING, if necessary, to hold SIZE characters.  */
-
-void
-ds_resize (string, size)
-     dynamic_string *string;
-     int size;
-{
-  if (size > string->ds_length)
-    {
-      string->ds_length = size;
-      string->ds_string = (char *) xrealloc ((char *) string->ds_string, size);
-    }
-}
-
-/* Dynamic string S gets a string terminated by the EOS character
-   (which is removed) from file F.  S will increase
-   in size during the function if the string from F is longer than
-   the current size of S.
-   Return NULL if end of file is detected.  Otherwise,
-   Return a pointer to the null-terminated string in S.  */
-
-char *
-ds_fgetstr (f, s, eos)
-     FILE *f;
-     dynamic_string *s;
-     char eos;
-{
-  int insize;                  /* Amount needed for line.  */
-  int strsize;                 /* Amount allocated for S.  */
-  int next_ch;
-
-  /* Initialize.  */
-  insize = 0;
-  strsize = s->ds_length;
-
-  /* Read the input string.  */
-  next_ch = getc (f);
-  while (next_ch != eos && next_ch != EOF)
-    {
-      if (insize >= strsize - 1)
-       {
-         ds_resize (s, strsize * 2 + 2);
-         strsize = s->ds_length;
-       }
-      s->ds_string[insize++] = next_ch;
-      next_ch = getc (f);
-    }
-  s->ds_string[insize++] = '\0';
-
-  if (insize == 1 && next_ch == EOF)
-    return NULL;
-  else
-    return s->ds_string;
-}
-
-char *
-ds_fgets (f, s)
-     FILE *f;
-     dynamic_string *s;
-{
-  return ds_fgetstr (f, s, '\n');
-}
-
-char *
-ds_fgetname (f, s)
-     FILE *f;
-     dynamic_string *s;
-{
-  return ds_fgetstr (f, s, '\0');
-}
diff --git a/contrib/cpio/dstring.h b/contrib/cpio/dstring.h
deleted file mode 100644 (file)
index 369da0b..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* dstring.h - Dynamic string handling include file.  Requires strings.h.
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* A dynamic string consists of record that records the size of an
-   allocated string and the pointer to that string.  The actual string
-   is a normal zero byte terminated string that can be used with the
-   usual string functions.  The major difference is that the
-   dynamic_string routines know how to get more space if it is needed
-   by allocating new space and copying the current string.  */
-
-typedef struct
-{
-  int ds_length;               /* Actual amount of storage allocated.  */
-  char *ds_string;             /* String.  */
-} dynamic_string;
-
-
-/* Macros that look similar to the original string functions.
-   WARNING:  These macros work only on pointers to dynamic string records.
-   If used with a real record, an "&" must be used to get the pointer.  */
-#define ds_strlen(s)           strlen ((s)->ds_string)
-#define ds_strcmp(s1, s2)      strcmp ((s1)->ds_string, (s2)->ds_string)
-#define ds_strncmp(s1, s2, n)  strncmp ((s1)->ds_string, (s2)->ds_string, n)
-#define ds_index(s, c)         index ((s)->ds_string, c)
-#define ds_rindex(s, c)                rindex ((s)->ds_string, c)
-
-void ds_init ();
-void ds_resize ();
-char *ds_fgetname ();
-char *ds_fgets ();
-char *ds_fgetstr ();
diff --git a/contrib/cpio/error.c b/contrib/cpio/error.c
deleted file mode 100644 (file)
index a36198b..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/* error.c -- error handler for noninteractive utilities
-   Copyright (C) 1990, 91, 92, 93, 94, 95 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.  */
-
-/* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
-# if __STDC__
-#  include <stdarg.h>
-#  define VA_START(args, lastarg) va_start(args, lastarg)
-# else
-#  include <varargs.h>
-#  define VA_START(args, lastarg) va_start(args)
-# endif
-#else
-# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
-# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
-#endif
-
-#if STDC_HEADERS || _LIBC
-# include <stdlib.h>
-# include <string.h>
-#else
-void exit ();
-#endif
-
-/* This variable is incremented each time `error' is called.  */
-unsigned int error_message_count;
-
-/* If NULL, error will flush stdout, then print on stderr the program
-   name, a colon and a space.  Otherwise, error will call this
-   function without parameters instead.  */
-void (*error_print_progname) () = NULL;
-
-#ifdef _LIBC
-#define program_name program_invocation_name
-#endif
-
-/* The calling program should define program_name and set it to the
-   name of the executing program.  */
-extern char *program_name;
-
-#if HAVE_STRERROR || _LIBC
-# ifndef strerror              /* On some systems, strerror is a macro */
-char *strerror ();
-# endif
-#else
-static char *
-private_strerror (errnum)
-     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
-
-/* Print the program name and error message MESSAGE, which is a printf-style
-   format string with optional args.
-   If ERRNUM is nonzero, print its corresponding system error message.
-   Exit with status STATUS if it is nonzero.  */
-/* VARARGS */
-
-void
-#if defined(VA_START) && __STDC__
-error (int status, int errnum, const char *message, ...)
-#else
-error (status, errnum, message, va_alist)
-     int status;
-     int errnum;
-     char *message;
-     va_dcl
-#endif
-{
-#ifdef VA_START
-  va_list args;
-#endif
-
-  if (error_print_progname)
-    (*error_print_progname) ();
-  else
-    {
-      fflush (stdout);
-      fprintf (stderr, "%s: ", program_name);
-    }
-
-#ifdef VA_START
-  VA_START (args, message);
-# if HAVE_VPRINTF || _LIBC
-  vfprintf (stderr, message, args);
-# else
-  _doprnt (message, args, stderr);
-# endif
-  va_end (args);
-#else
-  fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8);
-#endif
-
-  ++error_message_count;
-
-  if (errnum)
-    fprintf (stderr, ": %s", strerror (errnum));
-  putc ('\n', stderr);
-  fflush (stderr);
-  if (status)
-    exit (status);
-}
diff --git a/contrib/cpio/extern.h b/contrib/cpio/extern.h
deleted file mode 100644 (file)
index 0e1344f..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/* extern.h - External declarations for cpio.  Requires system.h.
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-enum archive_format
-{
-  arf_unknown, arf_binary, arf_oldascii, arf_newascii, arf_crcascii,
-  arf_tar, arf_ustar, arf_hpoldascii, arf_hpbinary
-};
-extern enum archive_format archive_format;
-extern int reset_time_flag;
-extern int io_block_size;
-extern int create_dir_flag;
-extern int rename_flag;
-extern char *rename_batch_file;
-extern int table_flag;
-extern int unconditional_flag;
-extern int verbose_flag;
-extern int dot_flag;
-extern int link_flag;
-extern int retain_time_flag;
-extern int crc_i_flag;
-extern int append_flag;
-extern int swap_bytes_flag;
-extern int swap_halfwords_flag;
-extern int swapping_bytes;
-extern int swapping_halfwords;
-extern int set_owner_flag;
-extern uid_t set_owner;
-extern int set_group_flag;
-extern gid_t set_group;
-extern int no_chown_flag;
-extern int sparse_flag;
-extern int quiet_flag;
-extern int only_verify_crc_flag;
-extern int no_abs_paths_flag;
-
-extern int last_header_start;
-extern int copy_matching_files;
-extern int numeric_uid;
-extern char *pattern_file_name;
-extern char *new_media_message;
-extern char *new_media_message_with_number;
-extern char *new_media_message_after_number;
-extern int archive_des;
-extern char *archive_name;
-extern unsigned long crc;
-#ifdef DEBUG_CPIO
-extern int debug_flag;
-#endif
-
-extern char *input_buffer, *output_buffer;
-extern char *in_buff, *out_buff;
-extern long input_buffer_size;
-extern long input_size, output_size;
-#ifdef __GNUC__
-extern long long input_bytes, output_bytes;
-#else
-extern long input_bytes, output_bytes;
-#endif
-extern char zeros_512[];
-extern char *directory_name;
-extern char **save_patterns;
-extern int num_patterns;
-extern char name_end;
-extern char input_is_special;
-extern char output_is_special;
-extern char input_is_seekable;
-extern char output_is_seekable;
-extern int f_force_local;
-extern char *program_name;
-extern int (*xstat) ();
-extern void (*copy_function) ();
-\f
-#if __STDC__ || defined(__MSDOS__)
-# define P_(s) s
-#else
-# define P_(s) ()
-#endif
-
-/* copyin.c */
-void read_in_header P_((struct new_cpio_header *file_hdr, int in_des));
-void read_in_old_ascii P_((struct new_cpio_header *file_hdr, int in_des));
-void read_in_new_ascii P_((struct new_cpio_header *file_hdr, int in_des));
-void read_in_binary P_((struct new_cpio_header *file_hdr, int in_des));
-void swab_array P_((char *arg, int count));
-void process_copy_in P_((void));
-void long_format P_((struct new_cpio_header *file_hdr, char *link_name));
-void print_name_with_quoting P_((char *p));
-
-/* copyout.c */
-void write_out_header P_((struct new_cpio_header *file_hdr, int out_des));
-void process_copy_out P_((void));
-
-/* copypass.c */
-void process_copy_pass P_((void));
-int link_to_maj_min_ino P_((char *file_name, int st_dev_maj, 
-                           int st_dev_min, int st_ino));
-int link_to_name P_((char *link_name, char *link_target));
-
-/* dirname.c */
-char *dirname P_((char *path));
-
-/* error.c */
-void error P_((int status, int errnum, char *message, ...));
-
-/* filemode.c */
-void mode_string P_((unsigned int mode, char *str));
-
-/* idcache.c */
-#ifndef __MSDOS__
-char *getgroup ();
-char *getuser ();
-uid_t *getuidbyname ();
-gid_t *getgidbyname ();
-#endif
-
-/* lchown.c */
-#ifdef HAVE_LCHOWN
-int lchown P_((const char *path, uid_t owner, gid_t group));
-#endif
-
-/* main.c */
-void process_args P_((int argc, char *argv[]));
-void initialize_buffers P_((void));
-
-/* makepath.c */
-int make_path P_((char *argpath, int mode, int parent_mode,
-                 uid_t owner, gid_t group, char *verbose_fmt_string));
-
-/* stripslash.c */
-void strip_trailing_slashes P_((char *path));
-
-/* tar.c */
-void write_out_tar_header P_((struct new_cpio_header *file_hdr, int out_des));
-int null_block P_((long *block, int size));
-void read_in_tar_header P_((struct new_cpio_header *file_hdr, int in_des));
-int otoa P_((char *s, unsigned long *n));
-int is_tar_header P_((char *buf));
-int is_tar_filename_too_long P_((char *name));
-
-/* userspec.c */
-#ifndef __MSDOS__
-char *parse_user_spec P_((char *name, uid_t *uid, gid_t *gid,
-                         char **username, char **groupname));
-#endif
-
-/* util.c */
-void tape_empty_output_buffer P_((int out_des));
-void disk_empty_output_buffer P_((int out_des));
-void swahw_array P_((char *ptr, int count));
-void tape_buffered_write P_((char *in_buf, int out_des, long num_bytes));
-void tape_buffered_read P_((char *in_buf, int in_des, long num_bytes));
-int tape_buffered_peek P_((char *peek_buf, int in_des, int num_bytes));
-void tape_toss_input P_((int in_des, long num_bytes));
-void copy_files_tape_to_disk P_((int in_des, int out_des, long num_bytes));
-void copy_files_disk_to_tape P_((int in_des, int out_des, long num_bytes, char *filename));
-void copy_files_disk_to_disk P_((int in_des, int out_des, long num_bytes, char *filename));
-void create_all_directories P_((char *name));
-void prepare_append P_((int out_file_des));
-char *find_inode_file P_((unsigned long node_num,
-                         unsigned long major_num, unsigned long minor_num));
-void add_inode P_((unsigned long node_num, char *file_name,
-                  unsigned long major_num, unsigned long minor_num));
-int open_archive P_((char *file));
-void tape_offline P_((int tape_des));
-void get_next_reel P_((int tape_des));
-void set_new_media_message P_((char *message));
-#if defined(__MSDOS__) && !defined(__GNUC__)
-int chown P_((char *path, int owner, int group));
-#endif
-#ifdef __TURBOC__
-int utime P_((char *filename, struct utimbuf *utb));
-#endif
-#ifdef HPUX_CDF
-char *add_cdf_double_slashes P_((char *filename));
-#endif
-
-/* xmalloc.c */
-char *xmalloc P_((unsigned n));
-char *xrealloc P_((char *p, unsigned n));
-
-/* xstrdup.c */
-char *xstrdup P_((char *string));
-
-#define DISK_IO_BLOCK_SIZE     (512)
diff --git a/contrib/cpio/filemode.c b/contrib/cpio/filemode.c
deleted file mode 100644 (file)
index 20c65c4..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/* filemode.c -- make a string describing file modes
-   Copyright (C) 1985, 1990, 1993 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.  */
-\f
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#if !S_IRUSR
-# if S_IREAD
-#  define S_IRUSR S_IREAD
-# else
-#  define S_IRUSR 00400
-# endif
-#endif
-
-#if !S_IWUSR
-# if S_IWRITE
-#  define S_IWUSR S_IWRITE
-# else
-#  define S_IWUSR 00200
-# endif
-#endif
-
-#if !S_IXUSR
-# if S_IEXEC
-#  define S_IXUSR S_IEXEC
-# else
-#  define S_IXUSR 00100
-# endif
-#endif
-
-#ifdef STAT_MACROS_BROKEN
-#undef S_ISBLK
-#undef S_ISCHR
-#undef S_ISDIR
-#undef S_ISFIFO
-#undef S_ISLNK
-#undef S_ISMPB
-#undef S_ISMPC
-#undef S_ISNWK
-#undef S_ISREG
-#undef S_ISSOCK
-#endif /* STAT_MACROS_BROKEN.  */
-
-#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)
-#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
-
-void mode_string ();
-static char ftypelet ();
-static void rwx ();
-static void setst ();
-
-/* filemodestring - fill in string STR with an ls-style ASCII
-   representation of the st_mode field of file stats block STATP.
-   10 characters are stored in STR; no terminating null is added.
-   The characters stored in STR are:
-
-   0   File type.  'd' for directory, 'c' for character
-       special, 'b' for block special, 'm' for multiplex,
-       'l' for symbolic link, 's' for socket, 'p' for fifo,
-       '-' for regular, '?' for any other file type
-
-   1   'r' if the owner may read, '-' otherwise.
-
-   2   'w' if the owner may write, '-' otherwise.
-
-   3   'x' if the owner may execute, 's' if the file is
-       set-user-id, '-' otherwise.
-       'S' if the file is set-user-id, but the execute
-       bit isn't set.
-
-   4   'r' if group members may read, '-' otherwise.
-
-   5   'w' if group members may write, '-' otherwise.
-
-   6   'x' if group members may execute, 's' if the file is
-       set-group-id, '-' otherwise.
-       'S' if it is set-group-id but not executable.
-
-   7   'r' if any user may read, '-' otherwise.
-
-   8   'w' if any user may write, '-' otherwise.
-
-   9   'x' if any user may execute, 't' if the file is "sticky"
-       (will be retained in swap space after execution), '-'
-       otherwise.
-       'T' if the file is sticky but not executable.  */
-
-void
-filemodestring (statp, str)
-     struct stat *statp;
-     char *str;
-{
-  mode_string (statp->st_mode, str);
-}
-
-/* Like filemodestring, but only the relevant part of the `struct stat'
-   is given as an argument.  */
-
-void
-mode_string (mode, str)
-     unsigned short mode;
-     char *str;
-{
-  str[0] = ftypelet ((long) mode);
-  rwx ((mode & 0700) << 0, &str[1]);
-  rwx ((mode & 0070) << 3, &str[4]);
-  rwx ((mode & 0007) << 6, &str[7]);
-  setst (mode, str);
-}
-
-/* Return a character indicating the type of file described by
-   file mode BITS:
-   'd' for directories
-   'b' for block special files
-   'c' for character special files
-   'm' for multiplexor files
-   'l' for symbolic links
-   's' for sockets
-   'p' for fifos
-   '-' for regular files
-   '?' for any other file type.  */
-
-static char
-ftypelet (bits)
-     long bits;
-{
-#ifdef S_ISBLK
-  if (S_ISBLK (bits))
-    return 'b';
-#endif
-  if (S_ISCHR (bits))
-    return 'c';
-  if (S_ISDIR (bits))
-    return 'd';
-  if (S_ISREG (bits))
-    return '-';
-#ifdef S_ISFIFO
-  if (S_ISFIFO (bits))
-    return 'p';
-#endif
-#ifdef S_ISLNK
-  if (S_ISLNK (bits))
-    return 'l';
-#endif
-#ifdef S_ISSOCK
-  if (S_ISSOCK (bits))
-    return 's';
-#endif
-#ifdef S_ISMPC
-  if (S_ISMPC (bits))
-    return 'm';
-#endif
-#ifdef S_ISNWK
-  if (S_ISNWK (bits))
-    return 'n';
-#endif
-  return '?';
-}
-
-/* Look at read, write, and execute bits in BITS and set
-   flags in CHARS accordingly.  */
-
-static void
-rwx (bits, chars)
-     unsigned short bits;
-     char *chars;
-{
-  chars[0] = (bits & S_IRUSR) ? 'r' : '-';
-  chars[1] = (bits & S_IWUSR) ? 'w' : '-';
-  chars[2] = (bits & S_IXUSR) ? 'x' : '-';
-}
-
-/* Set the 's' and 't' flags in file attributes string CHARS,
-   according to the file mode BITS.  */
-
-static void
-setst (bits, chars)
-     unsigned short bits;
-     char *chars;
-{
-#ifdef S_ISUID
-  if (bits & S_ISUID)
-    {
-      if (chars[3] != 'x')
-       /* Set-uid, but not executable by owner.  */
-       chars[3] = 'S';
-      else
-       chars[3] = 's';
-    }
-#endif
-#ifdef S_ISGID
-  if (bits & S_ISGID)
-    {
-      if (chars[6] != 'x')
-       /* Set-gid, but not executable by group.  */
-       chars[6] = 'S';
-      else
-       chars[6] = 's';
-    }
-#endif
-#ifdef S_ISVTX
-  if (bits & S_ISVTX)
-    {
-      if (chars[9] != 'x')
-       /* Sticky, but not executable by others.  */
-       chars[9] = 'T';
-      else
-       chars[9] = 't';
-    }
-#endif
-}
diff --git a/contrib/cpio/filetypes.h b/contrib/cpio/filetypes.h
deleted file mode 100644 (file)
index 46a79a9..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/* filetypes.h - deal with POSIX annoyances
-   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.  */
-
-/* Include sys/types.h and sys/stat.h before this file.  */
-
-#ifndef S_ISREG                        /* Doesn't have POSIX.1 stat stuff.  */
-#define mode_t unsigned short
-#endif
-
-/* Define the POSIX macros for systems that lack them.  */
-#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)
-#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_ISNWK) && defined(S_IFNWK) /* HP/UX network special */
-#define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
-#endif
-
-/* Define the file type bits used in cpio archives.
-   They have the same values as the S_IF bits in traditional Unix.  */
-
-#define        CP_IFMT 0170000         /* Mask for all file type bits.  */
-
-#if defined(S_ISBLK)
-#define CP_IFBLK 0060000
-#endif
-#if defined(S_ISCHR)
-#define CP_IFCHR 0020000
-#endif
-#if defined(S_ISDIR)
-#define CP_IFDIR 0040000
-#endif
-#if defined(S_ISREG)
-#define CP_IFREG 0100000
-#endif
-#if defined(S_ISFIFO)
-#define CP_IFIFO 0010000
-#endif
-#if defined(S_ISLNK)
-#define CP_IFLNK 0120000
-#endif
-#if defined(S_ISSOCK)
-#define CP_IFSOCK 0140000
-#endif
-#if defined(S_ISNWK)
-#define CP_IFNWK 0110000
-#endif
-
-#ifndef S_ISLNK
-#define lstat stat
-#endif
-int lstat ();
-int stat ();
diff --git a/contrib/cpio/getopt.c b/contrib/cpio/getopt.c
deleted file mode 100644 (file)
index beb7450..0000000
+++ /dev/null
@@ -1,765 +0,0 @@
-/* Getopt for GNU.
-   NOTE: getopt is now part of the C library, so if you don't know what
-   "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
-   before changing it!
-
-   Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95
-       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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-\f
-/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
-   Ditto for AIX 3.2 and <stdlib.h>.  */
-#ifndef _NO_PROTO
-#define _NO_PROTO
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#if !defined (__STDC__) || !__STDC__
-/* This is a separate conditional since some stdc systems
-   reject `defined (const)'.  */
-#ifndef const
-#define const
-#endif
-#endif
-
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
-   actually compiling the library itself.  This code is part of the GNU C
-   Library, but also included in many other GNU distributions.  Compiling
-   and linking in this code is a waste when using the GNU C library
-   (especially if it is a shared library).  Rather than having every GNU
-   program understand `configure --with-gnu-libc' and omit the object files,
-   it is simpler to just do this in the source for each such file.  */
-
-#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
-
-
-/* This needs to come after some library #include
-   to get __GNU_LIBRARY__ defined.  */
-#ifdef __GNU_LIBRARY__
-/* Don't include stdlib.h for non-GNU C libraries because some of them
-   contain conflicting prototypes for getopt.  */
-#include <stdlib.h>
-#endif /* GNU C library.  */
-
-#ifndef _
-/* This is for other GNU distributions with internationalized messages.
-   When compiling libc, the _ macro is predefined.  */
-#ifdef HAVE_LIBINTL_H
-# include <libintl.h>
-# define _(msgid)      gettext (msgid)
-#else
-# define _(msgid)      (msgid)
-#endif
-#endif
-
-/* This version of `getopt' appears to the caller like standard Unix `getopt'
-   but it behaves differently for the user, since it allows the user
-   to intersperse the options with the other arguments.
-
-   As `getopt' works, it permutes the elements of ARGV so that,
-   when it is done, all the options precede everything else.  Thus
-   all application programs are extended to handle flexible argument order.
-
-   Setting the environment variable POSIXLY_CORRECT disables permutation.
-   Then the behavior is completely standard.
-
-   GNU application programs can use a third alternative mode in which
-   they can distinguish the relative order of options and other arguments.  */
-
-#include "getopt.h"
-
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
-   the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
-   each non-option ARGV-element is returned here.  */
-
-char *optarg = NULL;
-
-/* Index in ARGV of the next element to be scanned.
-   This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
-
-   On entry to `getopt', zero means this is the first call; initialize.
-
-   When `getopt' returns EOF, this is the index of the first of the
-   non-option elements that the caller should itself scan.
-
-   Otherwise, `optind' communicates from one call to the next
-   how much of ARGV has been scanned so far.  */
-
-/* XXX 1003.2 says this must be 1 before any call.  */
-int optind = 0;
-
-/* The next char to be scanned in the option-element
-   in which the last option character we returned was found.
-   This allows us to pick up the scan where we left off.
-
-   If this is zero, or a null string, it means resume the scan
-   by advancing to the next ARGV-element.  */
-
-static char *nextchar;
-
-/* Callers store zero here to inhibit the error message
-   for unrecognized options.  */
-
-int opterr = 1;
-
-/* Set to an option character which was unrecognized.
-   This must be initialized on some systems to avoid linking in the
-   system's own getopt implementation.  */
-
-int optopt = '?';
-
-/* Describe how to deal with options that follow non-option ARGV-elements.
-
-   If the caller did not specify anything,
-   the default is REQUIRE_ORDER if the environment variable
-   POSIXLY_CORRECT is defined, PERMUTE otherwise.
-
-   REQUIRE_ORDER means don't recognize them as options;
-   stop option processing when the first non-option is seen.
-   This is what Unix does.
-   This mode of operation is selected by either setting the environment
-   variable POSIXLY_CORRECT, or using `+' as the first character
-   of the list of option characters.
-
-   PERMUTE is the default.  We permute the contents of ARGV as we scan,
-   so that eventually all the non-options are at the end.  This allows options
-   to be given in any order, even with programs that were not written to
-   expect this.
-
-   RETURN_IN_ORDER is an option available to programs that were written
-   to expect options and other ARGV-elements in any order and that care about
-   the ordering of the two.  We describe each non-option ARGV-element
-   as if it were the argument of an option with character code 1.
-   Using `-' as the first character of the list of option characters
-   selects this mode of operation.
-
-   The special argument `--' forces an end of option-scanning regardless
-   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
-   `--' can cause `getopt' to return EOF with `optind' != ARGC.  */
-
-static enum
-{
-  REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-} ordering;
-
-/* Value of POSIXLY_CORRECT environment variable.  */
-static char *posixly_correct;
-\f
-#ifdef __GNU_LIBRARY__
-/* We want to avoid inclusion of string.h with non-GNU libraries
-   because there are many ways it can cause trouble.
-   On some systems, it contains special magic macros that don't work
-   in GCC.  */
-#include <string.h>
-#define        my_index        strchr
-#else
-
-/* Avoid depending on library functions or files
-   whose names are inconsistent.  */
-
-char *getenv ();
-
-static char *
-my_index (str, chr)
-     const char *str;
-     int chr;
-{
-  while (*str)
-    {
-      if (*str == chr)
-       return (char *) str;
-      str++;
-    }
-  return 0;
-}
-
-/* If using GCC, we can safely declare strlen this way.
-   If not using GCC, it is ok not to declare it.  */
-#ifdef __GNUC__
-/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
-   That was relevant to code that was here before.  */
-#if !defined (__STDC__) || !__STDC__
-/* gcc with -traditional declares the built-in strlen to return int,
-   and has done so at least since version 2.4.5. -- rms.  */
-extern int strlen (const char *);
-#endif /* not __STDC__ */
-#endif /* __GNUC__ */
-
-#endif /* not __GNU_LIBRARY__ */
-\f
-/* Handle permutation of arguments.  */
-
-/* Describe the part of ARGV that contains non-options that have
-   been skipped.  `first_nonopt' is the index in ARGV of the first of them;
-   `last_nonopt' is the index after the last of them.  */
-
-static int first_nonopt;
-static int last_nonopt;
-
-/* Exchange two adjacent subsequences of ARGV.
-   One subsequence is elements [first_nonopt,last_nonopt)
-   which contains all the non-options that have been skipped so far.
-   The other is elements [last_nonopt,optind), which contains all
-   the options processed since those non-options were skipped.
-
-   `first_nonopt' and `last_nonopt' are relocated so that they describe
-   the new indices of the non-options in ARGV after they are moved.  */
-
-static void
-exchange (argv)
-     char **argv;
-{
-  int bottom = first_nonopt;
-  int middle = last_nonopt;
-  int top = optind;
-  char *tem;
-
-  /* Exchange the shorter segment with the far end of the longer segment.
-     That puts the shorter segment into the right place.
-     It leaves the longer segment in the right place overall,
-     but it consists of two parts that need to be swapped next.  */
-
-  while (top > middle && middle > bottom)
-    {
-      if (top - middle > middle - bottom)
-       {
-         /* Bottom segment is the short one.  */
-         int len = middle - bottom;
-         register int i;
-
-         /* Swap it with the top part of the top segment.  */
-         for (i = 0; i < len; i++)
-           {
-             tem = argv[bottom + i];
-             argv[bottom + i] = argv[top - (middle - bottom) + i];
-             argv[top - (middle - bottom) + i] = tem;
-           }
-         /* Exclude the moved bottom segment from further swapping.  */
-         top -= len;
-       }
-      else
-       {
-         /* Top segment is the short one.  */
-         int len = top - middle;
-         register int i;
-
-         /* Swap it with the bottom part of the bottom segment.  */
-         for (i = 0; i < len; i++)
-           {
-             tem = argv[bottom + i];
-             argv[bottom + i] = argv[middle + i];
-             argv[middle + i] = tem;
-           }
-         /* Exclude the moved top segment from further swapping.  */
-         bottom += len;
-       }
-    }
-
-  /* Update records for the slots the non-options now occupy.  */
-
-  first_nonopt += (optind - last_nonopt);
-  last_nonopt = optind;
-}
-
-/* Initialize the internal data when the first call is made.  */
-
-static const char *
-_getopt_initialize (optstring)
-     const char *optstring;
-{
-  /* Start processing options with ARGV-element 1 (since ARGV-element 0
-     is the program name); the sequence of previously skipped
-     non-option ARGV-elements is empty.  */
-
-  first_nonopt = last_nonopt = optind = 1;
-
-  nextchar = NULL;
-
-  posixly_correct = getenv ("POSIXLY_CORRECT");
-
-  /* Determine how to handle the ordering of options and nonoptions.  */
-
-  if (optstring[0] == '-')
-    {
-      ordering = RETURN_IN_ORDER;
-      ++optstring;
-    }
-  else if (optstring[0] == '+')
-    {
-      ordering = REQUIRE_ORDER;
-      ++optstring;
-    }
-  else if (posixly_correct != NULL)
-    ordering = REQUIRE_ORDER;
-  else
-    ordering = PERMUTE;
-
-  return optstring;
-}
-\f
-/* Scan elements of ARGV (whose length is ARGC) for option characters
-   given in OPTSTRING.
-
-   If an element of ARGV starts with '-', and is not exactly "-" or "--",
-   then it is an option element.  The characters of this element
-   (aside from the initial '-') are option characters.  If `getopt'
-   is called repeatedly, it returns successively each of the option characters
-   from each of the option elements.
-
-   If `getopt' finds another option character, it returns that character,
-   updating `optind' and `nextchar' so that the next call to `getopt' can
-   resume the scan with the following option character or ARGV-element.
-
-   If there are no more option characters, `getopt' returns `EOF'.
-   Then `optind' is the index in ARGV of the first ARGV-element
-   that is not an option.  (The ARGV-elements have been permuted
-   so that those that are not options now come last.)
-
-   OPTSTRING is a string containing the legitimate option characters.
-   If an option character is seen that is not listed in OPTSTRING,
-   return '?' after printing an error message.  If you set `opterr' to
-   zero, the error message is suppressed but we still return '?'.
-
-   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
-   so the following text in the same ARGV-element, or the text of the following
-   ARGV-element, is returned in `optarg'.  Two colons mean an option that
-   wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
-
-   If OPTSTRING starts with `-' or `+', it requests different methods of
-   handling the non-option ARGV-elements.
-   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
-
-   Long-named options begin with `--' instead of `-'.
-   Their names may be abbreviated as long as the abbreviation is unique
-   or is an exact match for some defined option.  If they have an
-   argument, it follows the option name in the same ARGV-element, separated
-   from the option name by a `=', or else the in next ARGV-element.
-   When `getopt' finds a long-named option, it returns 0 if that option's
-   `flag' field is nonzero, the value of the option's `val' field
-   if the `flag' field is zero.
-
-   The elements of ARGV aren't really const, because we permute them.
-   But we pretend they're const in the prototype to be compatible
-   with other systems.
-
-   LONGOPTS is a vector of `struct option' terminated by an
-   element containing a name which is zero.
-
-   LONGIND returns the index in LONGOPT of the long-named option found.
-   It is only valid when a long-named option has been found by the most
-   recent call.
-
-   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
-   long-named options.  */
-
-int
-_getopt_internal (argc, argv, optstring, longopts, longind, long_only)
-     int argc;
-     char *const *argv;
-     const char *optstring;
-     const struct option *longopts;
-     int *longind;
-     int long_only;
-{
-  optarg = NULL;
-
-  if (optind == 0)
-    {
-      optstring = _getopt_initialize (optstring);
-      optind = 1;              /* Don't scan ARGV[0], the program name.  */
-    }
-
-  if (nextchar == NULL || *nextchar == '\0')
-    {
-      /* Advance to the next ARGV-element.  */
-
-      if (ordering == PERMUTE)
-       {
-         /* If we have just processed some options following some non-options,
-            exchange them so that the options come first.  */
-
-         if (first_nonopt != last_nonopt && last_nonopt != optind)
-           exchange ((char **) argv);
-         else if (last_nonopt != optind)
-           first_nonopt = optind;
-
-         /* Skip any additional non-options
-            and extend the range of non-options previously skipped.  */
-
-         while (optind < argc
-                && (argv[optind][0] != '-' || argv[optind][1] == '\0'))
-           optind++;
-         last_nonopt = optind;
-       }
-
-      /* The special ARGV-element `--' means premature end of options.
-        Skip it like a null option,
-        then exchange with previous non-options as if it were an option,
-        then skip everything else like a non-option.  */
-
-      if (optind != argc && !strcmp (argv[optind], "--"))
-       {
-         optind++;
-
-         if (first_nonopt != last_nonopt && last_nonopt != optind)
-           exchange ((char **) argv);
-         else if (first_nonopt == last_nonopt)
-           first_nonopt = optind;
-         last_nonopt = argc;
-
-         optind = argc;
-       }
-
-      /* If we have done all the ARGV-elements, stop the scan
-        and back over any non-options that we skipped and permuted.  */
-
-      if (optind == argc)
-       {
-         /* Set the next-arg-index to point at the non-options
-            that we previously skipped, so the caller will digest them.  */
-         if (first_nonopt != last_nonopt)
-           optind = first_nonopt;
-         return EOF;
-       }
-
-      /* If we have come to a non-option and did not permute it,
-        either stop the scan or describe it to the caller and pass it by.  */
-
-      if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
-       {
-         if (ordering == REQUIRE_ORDER)
-           return EOF;
-         optarg = argv[optind++];
-         return 1;
-       }
-
-      /* We have found another option-ARGV-element.
-        Skip the initial punctuation.  */
-
-      nextchar = (argv[optind] + 1
-                 + (longopts != NULL && argv[optind][1] == '-'));
-    }
-
-  /* Decode the current option-ARGV-element.  */
-
-  /* Check whether the ARGV-element is a long option.
-
-     If long_only and the ARGV-element has the form "-f", where f is
-     a valid short option, don't consider it an abbreviated form of
-     a long option that starts with f.  Otherwise there would be no
-     way to give the -f short option.
-
-     On the other hand, if there's a long option "fubar" and
-     the ARGV-element is "-fu", do consider that an abbreviation of
-     the long option, just like "--fu", and not "-f" with arg "u".
-
-     This distinction seems to be the most useful approach.  */
-
-  if (longopts != NULL
-      && (argv[optind][1] == '-'
-         || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
-    {
-      char *nameend;
-      const struct option *p;
-      const struct option *pfound = NULL;
-      int exact = 0;
-      int ambig = 0;
-      int indfound;
-      int option_index;
-
-      for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
-       /* Do nothing.  */ ;
-
-      /* Test all long options for either exact match
-        or abbreviated matches.  */
-      for (p = longopts, option_index = 0; p->name; p++, option_index++)
-       if (!strncmp (p->name, nextchar, nameend - nextchar))
-         {
-           if (nameend - nextchar == strlen (p->name))
-             {
-               /* Exact match found.  */
-               pfound = p;
-               indfound = option_index;
-               exact = 1;
-               break;
-             }
-           else if (pfound == NULL)
-             {
-               /* First nonexact match found.  */
-               pfound = p;
-               indfound = option_index;
-             }
-           else
-             /* Second or later nonexact match found.  */
-             ambig = 1;
-         }
-
-      if (ambig && !exact)
-       {
-         if (opterr)
-           fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
-                    argv[0], argv[optind]);
-         nextchar += strlen (nextchar);
-         optind++;
-         return '?';
-       }
-
-      if (pfound != NULL)
-       {
-         option_index = indfound;
-         optind++;
-         if (*nameend)
-           {
-             /* Don't test has_arg with >, because some C compilers don't
-                allow it to be used on enums.  */
-             if (pfound->has_arg)
-               optarg = nameend + 1;
-             else
-               {
-                 if (opterr)
-                  if (argv[optind - 1][1] == '-')
-                   /* --option */
-                   fprintf (stderr,
-                    _("%s: option `--%s' doesn't allow an argument\n"),
-                    argv[0], pfound->name);
-                  else
-                   /* +option or -option */
-                   fprintf (stderr,
-                    _("%s: option `%c%s' doesn't allow an argument\n"),
-                    argv[0], argv[optind - 1][0], pfound->name);
-
-                 nextchar += strlen (nextchar);
-                 return '?';
-               }
-           }
-         else if (pfound->has_arg == 1)
-           {
-             if (optind < argc)
-               optarg = argv[optind++];
-             else
-               {
-                 if (opterr)
-                   fprintf (stderr,
-                          _("%s: option `%s' requires an argument\n"),
-                          argv[0], argv[optind - 1]);
-                 nextchar += strlen (nextchar);
-                 return optstring[0] == ':' ? ':' : '?';
-               }
-           }
-         nextchar += strlen (nextchar);
-         if (longind != NULL)
-           *longind = option_index;
-         if (pfound->flag)
-           {
-             *(pfound->flag) = pfound->val;
-             return 0;
-           }
-         return pfound->val;
-       }
-
-      /* Can't find it as a long option.  If this is not getopt_long_only,
-        or the option starts with '--' or is not a valid short
-        option, then it's an error.
-        Otherwise interpret it as a short option.  */
-      if (!long_only || argv[optind][1] == '-'
-         || my_index (optstring, *nextchar) == NULL)
-       {
-         if (opterr)
-           {
-             if (argv[optind][1] == '-')
-               /* --option */
-               fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
-                        argv[0], nextchar);
-             else
-               /* +option or -option */
-               fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
-                        argv[0], argv[optind][0], nextchar);
-           }
-         nextchar = (char *) "";
-         optind++;
-         return '?';
-       }
-    }
-
-  /* Look at and handle the next short option-character.  */
-
-  {
-    char c = *nextchar++;
-    char *temp = my_index (optstring, c);
-
-    /* Increment `optind' when we start to process its last character.  */
-    if (*nextchar == '\0')
-      ++optind;
-
-    if (temp == NULL || c == ':')
-      {
-       if (opterr)
-         {
-           if (posixly_correct)
-             /* 1003.2 specifies the format of this message.  */
-             fprintf (stderr, _("%s: illegal option -- %c\n"),
-                      argv[0], c);
-           else
-             fprintf (stderr, _("%s: invalid option -- %c\n"),
-                      argv[0], c);
-         }
-       optopt = c;
-       return '?';
-      }
-    if (temp[1] == ':')
-      {
-       if (temp[2] == ':')
-         {
-           /* This is an option that accepts an argument optionally.  */
-           if (*nextchar != '\0')
-             {
-               optarg = nextchar;
-               optind++;
-             }
-           else
-             optarg = NULL;
-           nextchar = NULL;
-         }
-       else
-         {
-           /* This is an option that requires an argument.  */
-           if (*nextchar != '\0')
-             {
-               optarg = nextchar;
-               /* If we end this ARGV-element by taking the rest as an arg,
-                  we must advance to the next element now.  */
-               optind++;
-             }
-           else if (optind == argc)
-             {
-               if (opterr)
-                 {
-                   /* 1003.2 specifies the format of this message.  */
-                   fprintf (stderr,
-                          _("%s: option requires an argument -- %c\n"),
-                          argv[0], c);
-                 }
-               optopt = c;
-               if (optstring[0] == ':')
-                 c = ':';
-               else
-                 c = '?';
-             }
-           else
-             /* We already incremented `optind' once;
-                increment it again when taking next ARGV-elt as argument.  */
-             optarg = argv[optind++];
-           nextchar = NULL;
-         }
-      }
-    return c;
-  }
-}
-
-int
-getopt (argc, argv, optstring)
-     int argc;
-     char *const *argv;
-     const char *optstring;
-{
-  return _getopt_internal (argc, argv, optstring,
-                          (const struct option *) 0,
-                          (int *) 0,
-                          0);
-}
-
-#endif /* _LIBC or not __GNU_LIBRARY__.  */
-\f
-#ifdef TEST
-
-/* Compile with -DTEST to make an executable for use in testing
-   the above definition of `getopt'.  */
-
-int
-main (argc, argv)
-     int argc;
-     char **argv;
-{
-  int c;
-  int digit_optind = 0;
-
-  while (1)
-    {
-      int this_option_optind = optind ? optind : 1;
-
-      c = getopt (argc, argv, "abc:d:0123456789");
-      if (c == EOF)
-       break;
-
-      switch (c)
-       {
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-       case '8':
-       case '9':
-         if (digit_optind != 0 && digit_optind != this_option_optind)
-           printf ("digits occur in two different argv-elements.\n");
-         digit_optind = this_option_optind;
-         printf ("option %c\n", c);
-         break;
-
-       case 'a':
-         printf ("option a\n");
-         break;
-
-       case 'b':
-         printf ("option b\n");
-         break;
-
-       case 'c':
-         printf ("option c with value `%s'\n", optarg);
-         break;
-
-       case '?':
-         break;
-
-       default:
-         printf ("?? getopt returned character code 0%o ??\n", c);
-       }
-    }
-
-  if (optind < argc)
-    {
-      printf ("non-option ARGV-elements: ");
-      while (optind < argc)
-       printf ("%s ", argv[optind++]);
-      printf ("\n");
-    }
-
-  exit (0);
-}
-
-#endif /* TEST */
diff --git a/contrib/cpio/getopt.h b/contrib/cpio/getopt.h
deleted file mode 100644 (file)
index 4ac33b7..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Declarations for getopt.
-   Copyright (C) 1989, 90, 91, 92, 93, 94 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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-
-#ifndef _GETOPT_H
-#define _GETOPT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
-   the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
-   each non-option ARGV-element is returned here.  */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
-   This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
-
-   On entry to `getopt', zero means this is the first call; initialize.
-
-   When `getopt' returns EOF, this is the index of the first of the
-   non-option elements that the caller should itself scan.
-
-   Otherwise, `optind' communicates from one call to the next
-   how much of ARGV has been scanned so far.  */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
-   for unrecognized options.  */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized.  */
-
-extern int optopt;
-
-/* Describe the long-named options requested by the application.
-   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
-   of `struct option' terminated by an element containing a name which is
-   zero.
-
-   The field `has_arg' is:
-   no_argument         (or 0) if the option does not take an argument,
-   required_argument   (or 1) if the option requires an argument,
-   optional_argument   (or 2) if the option takes an optional argument.
-
-   If the field `flag' is not NULL, it points to a variable that is set
-   to the value given in the field `val' when the option is found, but
-   left unchanged if the option is not found.
-
-   To have a long-named option do something other than set an `int' to
-   a compiled-in constant, such as set a value from `optarg', set the
-   option's `flag' field to zero and its `val' field to a nonzero
-   value (the equivalent single-letter option character, if there is
-   one).  For long options that have a zero `flag' field, `getopt'
-   returns the contents of the `val' field.  */
-
-struct option
-{
-#if defined (__STDC__) && __STDC__
-  const char *name;
-#else
-  char *name;
-#endif
-  /* has_arg can't be an enum because some compilers complain about
-     type mismatches in all the code that assumes it is an int.  */
-  int has_arg;
-  int *flag;
-  int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'.  */
-
-#define        no_argument             0
-#define required_argument      1
-#define optional_argument      2
-
-#if defined (__STDC__) && __STDC__
-#ifdef __GNU_LIBRARY__
-/* Many other libraries have conflicting prototypes for getopt, with
-   differences in the consts, in stdlib.h.  To avoid compilation
-   errors, only prototype getopt for the GNU C library.  */
-extern int getopt (int argc, char *const *argv, const char *shortopts);
-#else /* not __GNU_LIBRARY__ */
-extern int getopt ();
-#endif /* __GNU_LIBRARY__ */
-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
-                       const struct option *longopts, int *longind);
-extern int getopt_long_only (int argc, char *const *argv,
-                            const char *shortopts,
-                            const struct option *longopts, int *longind);
-
-/* Internal only.  Users should not call this directly.  */
-extern int _getopt_internal (int argc, char *const *argv,
-                            const char *shortopts,
-                            const struct option *longopts, int *longind,
-                            int long_only);
-#else /* not __STDC__ */
-extern int getopt ();
-extern int getopt_long ();
-extern int getopt_long_only ();
-
-extern int _getopt_internal ();
-#endif /* __STDC__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GETOPT_H */
diff --git a/contrib/cpio/getopt1.c b/contrib/cpio/getopt1.c
deleted file mode 100644 (file)
index 4580211..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
-       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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
-\f
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "getopt.h"
-
-#if !defined (__STDC__) || !__STDC__
-/* This is a separate conditional since some stdc systems
-   reject `defined (const)'.  */
-#ifndef const
-#define const
-#endif
-#endif
-
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
-   actually compiling the library itself.  This code is part of the GNU C
-   Library, but also included in many other GNU distributions.  Compiling
-   and linking in this code is a waste when using the GNU C library
-   (especially if it is a shared library).  Rather than having every GNU
-   program understand `configure --with-gnu-libc' and omit the object files,
-   it is simpler to just do this in the source for each such file.  */
-
-#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
-
-
-/* This needs to come after some library #include
-   to get __GNU_LIBRARY__ defined.  */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#else
-char *getenv ();
-#endif
-
-#ifndef        NULL
-#define NULL 0
-#endif
-
-int
-getopt_long (argc, argv, options, long_options, opt_index)
-     int argc;
-     char *const *argv;
-     const char *options;
-     const struct option *long_options;
-     int *opt_index;
-{
-  return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
-}
-
-/* Like getopt_long, but '-' as well as '--' can indicate a long option.
-   If an option that starts with '-' (not '--') doesn't match a long option,
-   but does match a short option, it is parsed as a short option
-   instead.  */
-
-int
-getopt_long_only (argc, argv, options, long_options, opt_index)
-     int argc;
-     char *const *argv;
-     const char *options;
-     const struct option *long_options;
-     int *opt_index;
-{
-  return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
-}
-
-
-#endif /* _LIBC or not __GNU_LIBRARY__.  */
-\f
-#ifdef TEST
-
-#include <stdio.h>
-
-int
-main (argc, argv)
-     int argc;
-     char **argv;
-{
-  int c;
-  int digit_optind = 0;
-
-  while (1)
-    {
-      int this_option_optind = optind ? optind : 1;
-      int option_index = 0;
-      static struct option long_options[] =
-      {
-       {"add", 1, 0, 0},
-       {"append", 0, 0, 0},
-       {"delete", 1, 0, 0},
-       {"verbose", 0, 0, 0},
-       {"create", 0, 0, 0},
-       {"file", 1, 0, 0},
-       {0, 0, 0, 0}
-      };
-
-      c = getopt_long (argc, argv, "abc:d:0123456789",
-                      long_options, &option_index);
-      if (c == EOF)
-       break;
-
-      switch (c)
-       {
-       case 0:
-         printf ("option %s", long_options[option_index].name);
-         if (optarg)
-           printf (" with arg %s", optarg);
-         printf ("\n");
-         break;
-
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-       case '8':
-       case '9':
-         if (digit_optind != 0 && digit_optind != this_option_optind)
-           printf ("digits occur in two different argv-elements.\n");
-         digit_optind = this_option_optind;
-         printf ("option %c\n", c);
-         break;
-
-       case 'a':
-         printf ("option a\n");
-         break;
-
-       case 'b':
-         printf ("option b\n");
-         break;
-
-       case 'c':
-         printf ("option c with value `%s'\n", optarg);
-         break;
-
-       case 'd':
-         printf ("option d with value `%s'\n", optarg);
-         break;
-
-       case '?':
-         break;
-
-       default:
-         printf ("?? getopt returned character code 0%o ??\n", c);
-       }
-    }
-
-  if (optind < argc)
-    {
-      printf ("non-option ARGV-elements: ");
-      while (optind < argc)
-       printf ("%s ", argv[optind++]);
-      printf ("\n");
-    }
-
-  exit (0);
-}
-
-#endif /* TEST */
diff --git a/contrib/cpio/global.c b/contrib/cpio/global.c
deleted file mode 100644 (file)
index 7fb66b2..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/* global.c - global variables and initial values for cpio.
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-#include <sys/types.h>
-#include "cpiohdr.h"
-#include "dstring.h"
-#include "system.h"
-#include "extern.h"
-
-/* If TRUE, reset access times after reading files (-a).  */
-int reset_time_flag = FALSE;
-
-/* Block size value, initially 512.  -B sets to 5120.  */
-int io_block_size = 512;
-
-/* The header format to recognize and produce.  */
-enum archive_format archive_format = arf_unknown;
-
-/* If TRUE, create directories as needed. (-d with -i or -p) */
-int create_dir_flag = FALSE;
-
-/* If TRUE, interactively rename files. (-r) */
-int rename_flag = FALSE;
-
-/* If non-NULL, the name of a file that will be read to
-   rename all of the files in the archive.  --rename-batch-file.  */
-char *rename_batch_file = NULL;
-
-/* If TRUE, print a table of contents of input. (-t) */
-int table_flag = FALSE;
-
-/* If TRUE, copy unconditionally (older replaces newer). (-u) */
-int unconditional_flag = FALSE;
-
-/* If TRUE, list the files processed, or ls -l style output with -t. (-v) */
-int verbose_flag = FALSE;
-
-/* If TRUE, print a . for each file processed. (-V) */
-int dot_flag = FALSE;
-
-/* If TRUE, link files whenever possible.  Used with -p option. (-l) */
-int link_flag = FALSE;
-
-/* If TRUE, retain previous file modification time. (-m) */
-int retain_time_flag = FALSE;
-
-/* Set TRUE if crc_flag is TRUE and we are doing a cpio -i.  Used
-   by copy_files so it knows whether to compute the crc.  */
-int crc_i_flag = FALSE;
-
-/* If TRUE, append to end of archive. (-A) */
-int append_flag = FALSE;
-
-/* If TRUE, swap bytes of each file during cpio -i.  */
-int swap_bytes_flag = FALSE;
-
-/* If TRUE, swap halfwords of each file during cpio -i.  */
-int swap_halfwords_flag = FALSE;
-
-/* If TRUE, we are swapping halfwords on the current file.  */
-int swapping_halfwords = FALSE;
-
-/* If TRUE, we are swapping bytes on the current file.  */
-int swapping_bytes = FALSE;
-
-/* If TRUE, set ownership of all files to UID `set_owner'.  */
-int set_owner_flag = FALSE;
-uid_t set_owner;
-
-/* If TRUE, set group ownership of all files to GID `set_group'.  */
-int set_group_flag = FALSE;
-gid_t set_group;
-
-/* If TRUE, do not chown the files.  */
-int no_chown_flag = FALSE;
-
-/* If TRUE, try to write sparse ("holey") files.  */
-int sparse_flag = FALSE;
-
-/* If TRUE, don't report number of blocks copied.  */
-int quiet_flag = FALSE;
-
-/* If TRUE, only read the archive and verify the files' CRC's, don't
-   actually extract the files. */
-int only_verify_crc_flag = FALSE;
-
-/* If TRUE, don't use any absolute paths, prefix them by `./'.  */
-int no_abs_paths_flag = FALSE;
-
-#ifdef DEBUG_CPIO
-/* If TRUE, print debugging information.  */
-int debug_flag = FALSE;
-#endif
-
-/* File position of last header read.  Only used during -A to determine
-   where the old TRAILER!!! record started.  */
-int last_header_start = 0;
-
-/* With -i; if TRUE, copy only files that match any of the given patterns;
-   if FALSE, copy only files that do not match any of the patterns. (-f) */
-int copy_matching_files = TRUE;
-
-/* With -itv; if TRUE, list numeric uid and gid instead of translating them
-   into names.  */
-int numeric_uid = FALSE;
-
-/* Name of file containing additional patterns (-E).  */
-char *pattern_file_name = NULL;
-
-/* Message to print when end of medium is reached (-M).  */
-char *new_media_message = NULL;
-
-/* With -M with %d, message to print when end of medium is reached.  */
-char *new_media_message_with_number = NULL;
-char *new_media_message_after_number = NULL;
-
-/* File descriptor containing the archive.  */
-int archive_des;
-
-/* Name of file containing the archive, if known; NULL if stdin/out.  */
-char *archive_name = NULL;
-
-/* CRC checksum.  */
-unsigned long crc;
-
-/* Input and output buffers.  */
-char *input_buffer, *output_buffer;
-
-/* The size of the input buffer.  */
-long input_buffer_size;
-
-/* Current locations in `input_buffer' and `output_buffer'.  */
-char *in_buff, *out_buff;
-
-/* Current number of bytes stored at `input_buff' and `output_buff'.  */
-long input_size, output_size;
-
-/* Total number of bytes read and written for all files.  
-   Now that many tape drives hold more than 4Gb we need more than 32
-   bits to hold input_bytes and output_bytes.  But it's not worth
-   the trouble of adding special multi-precision arithmetic if the 
-   compiler doesn't support 64 bit ints since input_bytes and
-   output_bytes are only used to print the number of blocks copied.  */
-#ifdef __GNUC__
-long long input_bytes, output_bytes;
-#else
-long input_bytes, output_bytes;
-#endif
-
-/* 512 bytes of 0; used for various padding operations.  */
-char zeros_512[512];
-
-/* Saving of argument values for later reference.  */
-char *directory_name = NULL;
-char **save_patterns;
-int num_patterns;
-
-/* Character that terminates file names read from stdin.  */
-char name_end = '\n';
-
-/* TRUE if input (cpio -i) or output (cpio -o) is a device node.  */
-char input_is_special = FALSE;
-char output_is_special = FALSE;
-
-/* TRUE if lseek works on the input.  */
-char input_is_seekable = FALSE;
-
-/* TRUE if lseek works on the output.  */
-char output_is_seekable = FALSE;
-
-/* If nonzero, don't consider file names that contain a `:' to be
-   on remote hosts; all files are local.  */
-int f_force_local = 0;
-
-/* The name this program was run with.  */
-char *program_name;
-
-/* A pointer to either lstat or stat, depending on whether
-   dereferencing of symlinks is done for input files.  */
-int (*xstat) ();
-
-/* Which copy operation to perform. (-i, -o, -p) */
-void (*copy_function) () = 0;
diff --git a/contrib/cpio/idcache.c b/contrib/cpio/idcache.c
deleted file mode 100644 (file)
index 34dcc07..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/* idcache.c -- map user and group IDs, cached for speed
-   Copyright (C) 1985, 1988, 1989, 1990 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <grp.h>
-
-#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
-#include <string.h>
-#else
-#include <strings.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifndef _POSIX_VERSION
-struct passwd *getpwuid ();
-struct passwd *getpwnam ();
-struct group *getgrgid ();
-struct group *getgrnam ();
-#endif
-
-char *xmalloc ();
-char *xstrdup ();
-
-struct userid
-{
-  union
-    {
-      uid_t u;
-      gid_t g;
-    } id;
-  char *name;
-  struct userid *next;
-};
-
-static struct userid *user_alist;
-
-/* The members of this list have names not in the local passwd file.  */
-static struct userid *nouser_alist;
-
-/* Translate UID to a login name or a stringified number,
-   with cache.  */
-
-char *
-getuser (uid)
-     uid_t uid;
-{
-  register struct userid *tail;
-  struct passwd *pwent;
-  char usernum_string[20];
-
-  for (tail = user_alist; tail; tail = tail->next)
-    if (tail->id.u == uid)
-      return tail->name;
-
-  pwent = getpwuid (uid);
-  tail = (struct userid *) xmalloc (sizeof (struct userid));
-  tail->id.u = uid;
-  if (pwent == 0)
-    {
-      sprintf (usernum_string, "%u", (unsigned) uid);
-      tail->name = xstrdup (usernum_string);
-    }
-  else
-    tail->name = xstrdup (pwent->pw_name);
-
-  /* Add to the head of the list, so most recently used is first.  */
-  tail->next = user_alist;
-  user_alist = tail;
-  return tail->name;
-}
-
-/* Translate USER to a UID, with cache.
-   Return NULL if there is no such user.
-   (We also cache which user names have no passwd entry,
-   so we don't keep looking them up.)  */
-
-uid_t *
-getuidbyname (user)
-     char *user;
-{
-  register struct userid *tail;
-  struct passwd *pwent;
-
-  for (tail = user_alist; tail; tail = tail->next)
-    /* Avoid a function call for the most common case.  */
-    if (*tail->name == *user && !strcmp (tail->name, user))
-      return &tail->id.u;
-
-  for (tail = nouser_alist; tail; tail = tail->next)
-    /* Avoid a function call for the most common case.  */
-    if (*tail->name == *user && !strcmp (tail->name, user))
-      return 0;
-
-  pwent = getpwnam (user);
-
-  tail = (struct userid *) xmalloc (sizeof (struct userid));
-  tail->name = xstrdup (user);
-
-  /* Add to the head of the list, so most recently used is first.  */
-  if (pwent)
-    {
-      tail->id.u = pwent->pw_uid;
-      tail->next = user_alist;
-      user_alist = tail;
-      return &tail->id.u;
-    }
-
-  tail->next = nouser_alist;
-  nouser_alist = tail;
-  return 0;
-}
-
-/* Use the same struct as for userids.  */
-static struct userid *group_alist;
-static struct userid *nogroup_alist;
-
-/* Translate GID to a group name or a stringified number,
-   with cache.  */
-
-char *
-getgroup (gid)
-     gid_t gid;
-{
-  register struct userid *tail;
-  struct group *grent;
-  char groupnum_string[20];
-
-  for (tail = group_alist; tail; tail = tail->next)
-    if (tail->id.g == gid)
-      return tail->name;
-
-  grent = getgrgid (gid);
-  tail = (struct userid *) xmalloc (sizeof (struct userid));
-  tail->id.g = gid;
-  if (grent == 0)
-    {
-      sprintf (groupnum_string, "%u", (unsigned int) gid);
-      tail->name = xstrdup (groupnum_string);
-    }
-  else
-    tail->name = xstrdup (grent->gr_name);
-
-  /* Add to the head of the list, so most recently used is first.  */
-  tail->next = group_alist;
-  group_alist = tail;
-  return tail->name;
-}
-
-/* Translate GROUP to a UID, with cache.
-   Return NULL if there is no such group.
-   (We also cache which group names have no group entry,
-   so we don't keep looking them up.)  */
-
-gid_t *
-getgidbyname (group)
-     char *group;
-{
-  register struct userid *tail;
-  struct group *grent;
-
-  for (tail = group_alist; tail; tail = tail->next)
-    /* Avoid a function call for the most common case.  */
-    if (*tail->name == *group && !strcmp (tail->name, group))
-      return &tail->id.g;
-
-  for (tail = nogroup_alist; tail; tail = tail->next)
-    /* Avoid a function call for the most common case.  */
-    if (*tail->name == *group && !strcmp (tail->name, group))
-      return 0;
-
-  grent = getgrnam (group);
-
-  tail = (struct userid *) xmalloc (sizeof (struct userid));
-  tail->name = xstrdup (group);
-
-  /* Add to the head of the list, so most recently used is first.  */
-  if (grent)
-    {
-      tail->id.g = grent->gr_gid;
-      tail->next = group_alist;
-      group_alist = tail;
-      return &tail->id.g;
-    }
-
-  tail->next = nogroup_alist;
-  nogroup_alist = tail;
-  return 0;
-}
diff --git a/contrib/cpio/main.c b/contrib/cpio/main.c
deleted file mode 100644 (file)
index ad9d67d..0000000
+++ /dev/null
@@ -1,534 +0,0 @@
-/* main.c - main program and argument processing for cpio.
-   Copyright (C) 1990, 1991, 1992 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.  */
-
-/* Written by Phil Nelson <phil@cs.wwu.edu>,
-   David MacKenzie <djm@gnu.ai.mit.edu>,
-   and John Oleynick <juo@klinzhai.rutgers.edu>.  */
-
-/* $FreeBSD: src/contrib/cpio/main.c,v 1.3 1999/09/15 01:47:13 peter Exp $ */
-/* $DragonFly: src/contrib/cpio/main.c,v 1.2 2003/06/17 04:23:58 dillon Exp $ */
-
-#include <stdio.h>
-#include <getopt.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#if (defined(BSD) && (BSD >= 199306))
-#include <locale.h>
-#endif
-#include "filetypes.h"
-#include "system.h"
-#include "cpiohdr.h"
-#include "dstring.h"
-#include "extern.h"
-#include "rmt.h"
-
-struct option long_opts[] =
-{
-  {"null", 0, 0, '0'},
-  {"append", 0, 0, 'A'},
-  {"block-size", 1, 0, 130},
-  {"create", 0, 0, 'o'},
-  {"dereference", 0, 0, 'L'},
-  {"dot", 0, 0, 'V'},
-  {"extract", 0, 0, 'i'},
-  {"file", 1, 0, 'F'},
-  {"force-local", 0, &f_force_local, 1},
-  {"format", 1, 0, 'H'},
-  {"help", 0, 0, 132},
-  {"io-size", 1, 0, 'C'},
-  {"link", 0, &link_flag, TRUE},
-  {"list", 0, &table_flag, TRUE},
-  {"make-directories", 0, &create_dir_flag, TRUE},
-  {"message", 1, 0, 'M'},
-  {"no-absolute-filenames", 0, 0, 136},
-  {"no-preserve-owner", 0, 0, 134},
-  {"nonmatching", 0, &copy_matching_files, FALSE},
-  {"numeric-uid-gid", 0, &numeric_uid, TRUE},
-  {"only-verify-crc", 0, 0, 139},
-  {"owner", 1, 0, 'R'},
-  {"pass-through", 0, 0, 'p'},
-  {"pattern-file", 1, 0, 'E'},
-  {"preserve-modification-time", 0, &retain_time_flag, TRUE},
-  {"rename", 0, &rename_flag, TRUE},
-  {"rename-batch-file", 1, 0, 137},
-  {"quiet", 0, 0, 138},
-  {"sparse", 0, 0, 135},
-  {"swap", 0, 0, 'b'},
-  {"swap-bytes", 0, 0, 's'},
-  {"swap-halfwords", 0, 0, 'S'},
-  {"reset-access-time", 0, &reset_time_flag, TRUE},
-  {"unconditional", 0, &unconditional_flag, TRUE},
-  {"verbose", 0, &verbose_flag, TRUE},
-  {"version", 0, 0, 131},
-#ifdef DEBUG_CPIO
-  {"debug", 0, &debug_flag, TRUE},
-#endif
-  {0, 0, 0, 0}
-};
-
-/*  Print usage message and exit with error.  */
-
-void
-usage (fp, status)
-  FILE *fp;
-  int status;
-{
-  fprintf (fp, "\
-Usage: %s {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message]\n\
-       [-O [[user@]host:]archive] [-F [[user@]host:]archive]\n\
-       [--file=[[user@]host:]archive] [--format=format] [--message=message]\n\
-       [--null] [--reset-access-time] [--verbose] [--dot] [--append]\n\
-       [--block-size=blocks] [--dereference] [--io-size=bytes] [--quiet]\n\
-       [--force-local] [--help] [--version] < name-list [> archive]\n", program_name);
-  fprintf (fp, "\
-       %s {-i|--extract} [-bcdfmnrtsuvBSV] [-C bytes] [-E file] [-H format]\n\
-       [-M message] [-R [user][:.][group]] [-I [[user@]host:]archive]\n\
-       [-F [[user@]host:]archive] [--file=[[user@]host:]archive]\n\
-       [--make-directories] [--nonmatching] [--preserve-modification-time]\n\
-       [--numeric-uid-gid] [--rename] [--list] [--swap-bytes] [--swap] [--dot]\n\
-       [--unconditional] [--verbose] [--block-size=blocks] [--swap-halfwords]\n\
-       [--io-size=bytes] [--pattern-file=file] [--format=format]\n\
-       [--owner=[user][:.][group]] [--no-preserve-owner] [--message=message]\n\
-       [--force-local] [--no-absolute-filenames] [--sparse] [--only-verify-crc]\n\
-       [--quiet] [--help] [--version] [pattern...] [< archive]\n",
-          program_name);
-  fprintf (fp, "\
-       %s {-p|--pass-through} [-0adlmuvLV] [-R [user][:.][group]]\n\
-       [--null] [--reset-access-time] [--make-directories] [--link] [--quiet]\n\
-       [--preserve-modification-time] [--unconditional] [--verbose] [--dot]\n\
-       [--dereference] [--owner=[user][:.][group]] [--no-preserve-owner]\n\
-       [--sparse] [--help] [--version] destination-directory < name-list\n", program_name);
-  exit (status);
-}
-
-/* Process the arguments.  Set all options and set up the copy pass
-   directory or the copy in patterns.  */
-
-void
-process_args (argc, argv)
-     int argc;
-     char *argv[];
-{
-  extern char *version_string;
-  void (*copy_in) ();          /* Work around for pcc bug.  */
-  void (*copy_out) ();
-  int c;
-  char *input_archive_name = 0;
-  char *output_archive_name = 0;
-
-  if (argc < 2)
-    usage (stderr, 2);
-
-  xstat = lstat;
-
-  while ((c = getopt_long (argc, argv,
-                          "0aAbBcC:dfE:F:H:iI:lLmM:noO:prR:sStuvVz",
-                          long_opts, (int *) 0)) != -1)
-    {
-      switch (c)
-       {
-       case 0:                 /* A long option that just sets a flag.  */
-         break;
-
-       case '0':               /* Read null-terminated filenames.  */
-         name_end = '\0';
-         break;
-
-       case 'a':               /* Reset access times.  */
-         reset_time_flag = TRUE;
-         break;
-
-       case 'A':               /* Append to the archive.  */
-         append_flag = TRUE;
-         break;
-
-       case 'b':               /* Swap bytes and halfwords.  */
-         swap_bytes_flag = TRUE;
-         swap_halfwords_flag = TRUE;
-         break;
-
-       case 'B':               /* Set block size to 5120.  */
-         io_block_size = 5120;
-         break;
-
-       case 130:               /* --block-size */
-         io_block_size = atoi (optarg);
-         if (io_block_size < 1)
-           error (2, 0, "invalid block size");
-         io_block_size *= 512;
-         break;
-
-       case 'c':               /* Use the old portable ASCII format.  */
-         if (archive_format != arf_unknown)
-           usage (stderr, 2);
-#ifdef SVR4_COMPAT
-         archive_format = arf_newascii; /* -H newc.  */
-#else
-         archive_format = arf_oldascii; /* -H odc.  */
-#endif
-         break;
-
-       case 'C':               /* Block size.  */
-         io_block_size = atoi (optarg);
-         if (io_block_size < 1)
-           error (2, 0, "invalid block size");
-         break;
-
-       case 'd':               /* Create directories where needed.  */
-         create_dir_flag = TRUE;
-         break;
-
-       case 'f':               /* Only copy files not matching patterns.  */
-         copy_matching_files = FALSE;
-         break;
-
-       case 'E':               /* Pattern file name.  */
-         pattern_file_name = optarg;
-         break;
-
-       case 'F':               /* Archive file name.  */
-         archive_name = optarg;
-         break;
-
-       case 'H':               /* Header format name.  */
-         if (archive_format != arf_unknown)
-           usage (stderr, 2);
-         if (!strcmp (optarg, "crc") || !strcmp (optarg, "CRC"))
-           archive_format = arf_crcascii;
-         else if (!strcmp (optarg, "newc") || !strcmp (optarg, "NEWC"))
-           archive_format = arf_newascii;
-         else if (!strcmp (optarg, "odc") || !strcmp (optarg, "ODC"))
-           archive_format = arf_oldascii;
-         else if (!strcmp (optarg, "bin") || !strcmp (optarg, "BIN"))
-           archive_format = arf_binary;
-         else if (!strcmp (optarg, "ustar") || !strcmp (optarg, "USTAR"))
-           archive_format = arf_ustar;
-         else if (!strcmp (optarg, "tar") || !strcmp (optarg, "TAR"))
-           archive_format = arf_tar;
-         else if (!strcmp (optarg, "hpodc") || !strcmp (optarg, "HPODC"))
-           archive_format = arf_hpoldascii;
-         else if (!strcmp (optarg, "hpbin") || !strcmp (optarg, "HPBIN"))
-           archive_format = arf_hpbinary;
-         else
-           error (2, 0, "\
-invalid archive format `%s'; valid formats are:\n\
-crc newc odc bin ustar tar (all-caps also recognized)", optarg);
-         break;
-
-       case 'i':               /* Copy-in mode.  */
-         if (copy_function != 0)
-           usage (stderr, 2);
-         copy_function = process_copy_in;
-         break;
-
-       case 'I':               /* Input archive file name.  */
-         input_archive_name = optarg;
-         break;
-
-       case 'k':               /* Handle corrupted archives.  We always handle
-                                  corrupted archives, but recognize this
-                                  option for compatability.  */
-         break;
-
-       case 'l':               /* Link files when possible.  */
-         link_flag = TRUE;
-         break;
-
-       case 'L':               /* Dereference symbolic links.  */
-         xstat = stat;
-         break;
-
-       case 'm':               /* Retain previous file modify times.  */
-         retain_time_flag = TRUE;
-         break;
-
-       case 'M':               /* New media message.  */
-         set_new_media_message (optarg);
-         break;
-
-       case 'n':               /* Long list owner and group as numbers.  */
-         numeric_uid = TRUE;
-         break;
-
-       case 136:               /* --no-absolute-filenames */
-         no_abs_paths_flag = TRUE;
-         break;
-       
-       case 134:               /* --no-preserve-owner */
-         if (set_owner_flag || set_group_flag)
-           usage (stderr, 2);
-         no_chown_flag = TRUE;
-         break;
-
-       case 'o':               /* Copy-out mode.  */
-         if (copy_function != 0)
-           usage (stderr, 2);
-         copy_function = process_copy_out;
-         break;
-
-       case 'O':               /* Output archive file name.  */
-         output_archive_name = optarg;
-         break;
-
-       case 139:
-         only_verify_crc_flag = TRUE;
-         break;
-
-       case 'p':               /* Copy-pass mode.  */
-         if (copy_function != 0)
-           usage (stderr, 2);
-         copy_function = process_copy_pass;
-         break;
-
-       case 'r':               /* Interactively rename.  */
-         rename_flag = TRUE;
-         break;
-
-       case 137:
-         rename_batch_file = optarg;
-         break;
-
-       case 138:
-         quiet_flag = TRUE;
-         break;
-
-       case 'R':               /* Set the owner.  */
-         if (no_chown_flag)
-           usage (stderr, 2);
-#ifndef __MSDOS__
-         {
-           char *e, *u, *g;
-
-           e = parse_user_spec (optarg, &set_owner, &set_group, &u, &g);
-           if (e)
-             error (2, 0, "%s: %s", optarg, e);
-           if (u)
-             {
-               free (u);
-               set_owner_flag = TRUE;
-             }
-           if (g)
-             {
-               free (g);
-               set_group_flag = TRUE;
-             }
-         }
-#endif
-         break;
-
-       case 's':               /* Swap bytes.  */
-         swap_bytes_flag = TRUE;
-         break;
-
-       case 'S':               /* Swap halfwords.  */
-         swap_halfwords_flag = TRUE;
-         break;
-
-       case 't':               /* Only print a list.  */
-         table_flag = TRUE;
-         break;
-
-       case 'u':               /* Replace all!  Unconditionally!  */
-         unconditional_flag = TRUE;
-         break;
-
-       case 'v':               /* Verbose!  */
-         verbose_flag = TRUE;
-         break;
-
-       case 'V':               /* Print `.' for each file.  */
-         dot_flag = TRUE;
-         break;
-
-       case 131:
-         printf ("GNU cpio %s", version_string);
-         exit (0);
-         break;
-
-       case 135:
-         sparse_flag = TRUE;
-         break;
-
-       case 132:               /* --help */
-         usage (stdout, 0);
-         break;
-
-       default:
-         usage (stderr, 2);
-       }