From a783e2c18c6b566b2f4c2b06e6c388a9645c826c Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Fri, 27 Feb 2004 13:28:40 +0000 Subject: Added to the repository --- doc/.cvsignore | 2 + doc/Makefile.am | 20 + doc/cpio.1 | 340 ++++++++++++ doc/cpio.info | 493 +++++++++++++++++ doc/cpio.texi | 563 +++++++++++++++++++ doc/mt.1 | 126 +++++ src/.cvsignore | 11 + src/Makefile.am | 81 +++ src/alloca.c | 495 +++++++++++++++++ src/argmatch.c | 87 +++ src/bcopy.c | 19 + src/copyin.c | 1605 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/copyout.c | 827 ++++++++++++++++++++++++++++ src/copypass.c | 482 ++++++++++++++++ src/cpio.h | 69 +++ src/cpiohdr.h | 90 +++ src/defer.c | 46 ++ src/defer.h | 25 + src/dirname.c | 70 +++ src/dstring.c | 118 ++++ src/dstring.h | 49 ++ src/error.c | 109 ++++ src/extern.h | 198 +++++++ src/filemode.c | 255 +++++++++ src/filetypes.h | 84 +++ src/fnmatch.c | 200 +++++++ src/fnmatch.h | 67 +++ src/getopt.c | 765 ++++++++++++++++++++++++++ src/getopt.h | 129 +++++ src/getopt1.c | 180 ++++++ src/gettext.h | 68 +++ src/global.c | 204 +++++++ src/idcache.c | 210 +++++++ src/main.c | 550 +++++++++++++++++++ src/makepath.c | 311 +++++++++++ src/mkdir.c | 100 ++++ src/mt.c | 366 +++++++++++++ src/rmt.c | 473 ++++++++++++++++ src/rmt.h | 98 ++++ src/rtapelib.c | 601 ++++++++++++++++++++ src/safe-stat.h | 1 + src/strdup.c | 43 ++ src/strerror.c | 63 +++ src/stripslash.c | 43 ++ src/system.h | 146 +++++ src/tar.c | 528 ++++++++++++++++++ src/tar.h | 112 ++++ src/tarhdr.h | 62 +++ src/userspec.c | 265 +++++++++ src/util.c | 1376 ++++++++++++++++++++++++++++++++++++++++++++++ src/xmalloc.c | 103 ++++ src/xstrdup.c | 36 ++ 52 files changed, 13364 insertions(+) create mode 100644 doc/.cvsignore create mode 100644 doc/Makefile.am create mode 100644 doc/cpio.1 create mode 100644 doc/cpio.info create mode 100644 doc/cpio.texi create mode 100644 doc/mt.1 create mode 100644 src/.cvsignore create mode 100644 src/Makefile.am create mode 100644 src/alloca.c create mode 100644 src/argmatch.c create mode 100644 src/bcopy.c create mode 100644 src/copyin.c create mode 100644 src/copyout.c create mode 100644 src/copypass.c create mode 100644 src/cpio.h create mode 100644 src/cpiohdr.h create mode 100644 src/defer.c create mode 100644 src/defer.h create mode 100644 src/dirname.c create mode 100644 src/dstring.c create mode 100644 src/dstring.h create mode 100644 src/error.c create mode 100644 src/extern.h create mode 100644 src/filemode.c create mode 100644 src/filetypes.h create mode 100644 src/fnmatch.c create mode 100644 src/fnmatch.h create mode 100644 src/getopt.c create mode 100644 src/getopt.h create mode 100644 src/getopt1.c create mode 100644 src/gettext.h create mode 100644 src/global.c create mode 100644 src/idcache.c create mode 100644 src/main.c create mode 100644 src/makepath.c create mode 100644 src/mkdir.c create mode 100644 src/mt.c create mode 100644 src/rmt.c create mode 100644 src/rmt.h create mode 100644 src/rtapelib.c create mode 100644 src/safe-stat.h create mode 100644 src/strdup.c create mode 100644 src/strerror.c create mode 100644 src/stripslash.c create mode 100644 src/system.h create mode 100644 src/tar.c create mode 100644 src/tar.h create mode 100644 src/tarhdr.h create mode 100644 src/userspec.c create mode 100644 src/util.c create mode 100644 src/xmalloc.c create mode 100644 src/xstrdup.c diff --git a/doc/.cvsignore b/doc/.cvsignore new file mode 100644 index 0000000..3dda729 --- /dev/null +++ b/doc/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +Makefile diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..c3ec682 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,20 @@ +# This file is part of GNU cpio +# Copyright (C) 2004 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +info_TEXINFOS = cpio.texi +man_MANS = cpio.1 mt.1 +EXTRA_DIST = $(man_MANS) diff --git a/doc/cpio.1 b/doc/cpio.1 new file mode 100644 index 0000000..5051f8d --- /dev/null +++ b/doc/cpio.1 @@ -0,0 +1,340 @@ +.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] [\-\-rsh-command=command] [\-\-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] [\-t|\-\-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] [\-\-rsh-command=command] [\-\-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 \-depth 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 compatability 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. +.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. +Also extracts tar archives using the numeric UID and GID instead of the +user/group names. +.RB ( cpio +archives are always extracted using the numeric UID and GID.) +.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 +inadvertantly 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 "\-\-rsh-command=COMMAND" +Notifies +.B mt +that it should use COMMAND to communicate with remote devices instead of +.I /usr/bin/ssh +or +.IR /usr/bin/rsh . +.TP +.I "\-\-sparse" +In copy-in 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/doc/cpio.info b/doc/cpio.info new file mode 100644 index 0000000..19a75f4 --- /dev/null +++ b/doc/cpio.info @@ -0,0 +1,493 @@ +This is cpio.info, produced by makeinfo version 4.6 from cpio.texi. + +START-INFO-DIR-ENTRY +* cpio: (cpio). Making tape (or disk) archives. +END-INFO-DIR-ENTRY + + This file documents GNU cpio 2.5. + + Copyright (C) 1995, 2001, 2002 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. + + 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. + + +File: cpio.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) + + + +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 GNU cpio 2.5. + +* 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:: + + +File: cpio.info, Node: Introduction, Next: Tutorial, Prev: Top, Up: Top + +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. + + +File: cpio.info, Node: Tutorial, Next: Invoking `cpio', Prev: Introduction, Up: Top + +Tutorial +******** + +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 `-F' option. *Note +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. + + % ls | cpio -ov > directory.cpio + + The `-o' option creates the archive, and the `-v' option prints the +names of the files archived as they are added. Notice that the options +can be put together after a single `-' or can be placed separately on +the command line. The `>' redirects the cpio output to the file +`directory.cpio'. + + If you wanted to archive an entire directory tree, the find command +can provide the file list to cpio: + + % find . -print -depth | cpio -ov > tree.cpio + + This will take all the files in the current directory, the +directories below and place them in the archive tree.cpio. Again the +`-o' creates an archive, and the `-v' option shows you the name of the +files as they are archived. *Note 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 `-depth' option forces `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. + + % cpio -iv < directory.cpio + + This will retrieve the files archived in the file directory.cpio and +place them in the present directory. The `-i' option extracts the +archive and the `-v' shows the file names as they are extracted. If +you are dealing with an archived directory tree, you need to use the +`-d' option to create directories as necessary, something like: + + % cpio -idv < tree.cpio + + 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. *Note 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. *Note Copy-pass mode::. + + % find . -depth -print0 | cpio --null -pvd new-dir + + 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 `-print0' available with GNU find, combined with the `--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 `-p', which tells cpio to pass the files it +finds to the directory `new-dir'. + + +File: cpio.info, Node: Invoking `cpio', Next: Media, Prev: Tutorial, Up: Top + +Invoking cpio +************* + +* Menu: + +* Copy-out mode:: +* Copy-in mode:: +* Copy-pass mode:: +* Options:: + + +File: cpio.info, Node: Copy-out mode, Next: Copy-in mode, Prev: Invoking `cpio', Up: Invoking `cpio' + +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. *Note Options::. + + 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] [--rsh-command=command] [--help] [--version] + < name-list [> archive] + + +File: cpio.info, Node: Copy-in mode, Next: Copy-pass mode, Prev: Copy-out mode, Up: Invoking `cpio' + +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. *Note Options::. + + 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-absolute-filenames] [--sparse] [-only-verify-crc] [-quiet] + [--rsh-command=command] [pattern...] [< archive] + + +File: cpio.info, Node: Copy-pass mode, Next: Options, Prev: Copy-in mode, Up: Invoking `cpio' + +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. *Note Options::. + + 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 + + +File: cpio.info, Node: Options, Prev: Copy-pass mode, Up: Invoking `cpio' + +Options +======= + +`-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. + +`-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. + +`-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. + +`-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. + +`-B' + Set the I/O block size to 5120 bytes. Initially the block size is + 512 bytes. + +`--block-size=BLOCK-SIZE' + Set the I/O block size to BLOCK-SIZE * 512 bytes. + +`-c' + Use the old portable (ASCII) archive format. + +`-C IO-SIZE, --io-size=IO-SIZE' + Set the I/O block size to IO-SIZE bytes. + +`-d, --make-directories' + Create leading directories where needed. + +`-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, + +`-f, --nonmatching' + Only copy files that do not match any of the given patterns. + +`-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). + +`--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. + +`-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'. + + `bin' + The obsolete binary format. + + `odc' + The old (POSIX.1) portable format. + + `newc' + The new (SVR4) portable format, which supports file systems + having more than 65536 i-nodes. + + `crc' + The new (SVR4) portable format with a checksum added. + + `tar' + The old tar format. + + `ustar' + The POSIX.1 tar format. Also recognizes GNU tar archives, + which are similar but not identical. + + `hpbin' + The obsolete binary format used by HPUX's cpio (which stores + device files differently). + + `hpodc' + The portable format used by HPUX's cpio (which stores device + files differently). + +`-i, --extract' + Run in copy-in mode. *Note Copy-in mode::. + +`-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). + +`-k' + Ignored; for compatibility with other versions of cpio. + +`-l, --link' + Link files instead of copying them, when possible. + +`-L, --dereference' + Copy the file that a symbolic link points to, rather than the + symbolic link itself. + +`-m, --preserve-modification-time' + Retain previous file modification times when creating files. + +`-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). + +`-n, --numeric-uid-gid' + Show numeric UID and GID instead of translating them into names + when using the `--verbose option'. + +`--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. + +`--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 + +`-o, --create' + Run in copy-out mode. *Note Copy-out mode::. + +`-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). + +`--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. + +`-p, --pass-through' + Run in copy-pass mode. *Note Copy-pass mode::. + +`--quiet' + Do not print the number of blocks copied. + +`-r, --rename' + Interactively rename files. + +`-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. + +`--rsh-command=COMMAND' + Notifies cpio that is should use COMMAND to communicate with remote + devices. + +`-s, --swap-bytes' + Swap the bytes of each halfword (pair of bytes) in the files.This + option can be used in copy-in mode. + +`-S, --swap-halfwords' + Swap the halfwords of each word (4 bytes) in the files. This + option may be used in copy-in mode. + +`--sparse' + Write files with large blocks of zeros as sparse files. This + option is used in copy-in and copy-pass modes. + +`-t, --list' + Print a table of contents of the input. + +`-u, --unconditional' + Replace all files, without asking whether to replace existing + newer files with older files. + +`-v, --verbose' + List the files processed, or with `-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. + +`-V --dot' + Print a `.' for each file processed. + +`--version' + Print the cpio program version number and exit. + + +File: cpio.info, Node: Media, Next: Concept Index, Prev: Invoking `cpio', Up: Top + +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. + + +File: cpio.info, Node: Concept Index, Prev: Media, Up: Top + +Concept Index +************* + +* Menu: + +* command line options: Invoking `cpio'. +* copying directory structures: Tutorial. +* creating a cpio archive: Tutorial. +* extracting a cpio archive: Tutorial. +* invoking cpio: Invoking `cpio'. +* magnetic media: Media. +* passing directory structures: Tutorial. + + + +Tag Table: +Node: Top938 +Node: Introduction1657 +Node: Tutorial2369 +Node: Invoking `cpio'6038 +Node: Copy-out mode6227 +Node: Copy-in mode7153 +Node: Copy-pass mode8531 +Node: Options9324 +Node: Media16592 +Node: Concept Index17575 + +End Tag Table diff --git a/doc/cpio.texi b/doc/cpio.texi new file mode 100644 index 0000000..ae534f4 --- /dev/null +++ b/doc/cpio.texi @@ -0,0 +1,563 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename cpio.info +@settitle cpio +@setchapternewpage off +@set VERSION GNU cpio 2.5 +@set RELEASEDATE June 2002 +@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, 2001, 2002 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, 2001, 2002 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] +[--message=message][--null] [--reset-access-time] [--verbose] +[--dot] [--append] [--block-size=blocks] [--dereference] +[--io-size=bytes] [--rsh-command=command] [--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-absolute-filenames] [--sparse] [-only-verify-crc] [-quiet] +[--rsh-command=command] [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 --rsh-command=COMMAND +Notifies cpio that is should use COMMAND to communicate with remote +devices. + +@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-in 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/doc/mt.1 b/doc/mt.1 new file mode 100644 index 0000000..ee10add --- /dev/null +++ b/doc/mt.1 @@ -0,0 +1,126 @@ +.TH MT 1L \" -*- nroff -*- +.SH NAME +mt \- control magnetic tape drive operation +.SH SYNOPSIS +.B mt +[\-V] [\-f device] [\-\-file=device] [\-\-rsh-command=command] [\-\-version] +operation [count] +.SH DESCRIPTION +This manual page +documents the GNU version of +.BR mt . +.B mt +performs the given +.IR operation , +which must be one of the tape operations listed below, on a tape +drive. +.PP +The default tape device to operate on is taken from the file +.I /usr/include/sys/mtio.h +when +.B mt +is compiled. It can be overridden by giving a device file name in +the environment variable +.BR TAPE +or by a command line option (see below), which also overrides the +environment variable. +.PP +The device must be either a character special file or a +remote tape drive. 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). +.PP +The available operations are listed below. Unique abbreviations are +accepted. Not all operations are available on all systems, or work on +all types of tape drives. +Some operations optionally take a repeat count, which can be given +after the operation name and defaults to 1. +.IP "eof, weof" +Write +.I count +EOF marks at current position. +.IP fsf +Forward space +.I count +files. +The tape is positioned on the first block of the next file. +.IP bsf +Backward space +.I count +files. +The tape is positioned on the first block of the next file. +.IP fsr +Forward space +.I count +records. +.IP bsr +Backward space +.I count +records. +.IP bsfm +Backward space +.I count +file marks. +The tape is positioned on the beginning-of-the-tape side of +the file mark. +.IP fsfm +Forward space +.I count +file marks. +The tape is positioned on the beginning-of-the-tape side of +the file mark. +.IP asf +Absolute space to file number +.IR count . +Equivalent to rewind followed by fsf +.IR count . +.IP seek +Seek to block number +.IR count . +.IP eom +Space to the end of the recorded media on the tape +(for appending files onto tapes). +.IP rewind +Rewind the tape. +.IP "offline, rewoffl" +Rewind the tape and, if applicable, unload the tape. +.IP status +Print status information about the tape unit. +.IP retension +Rewind the tape, then wind it to the end of the reel, +then rewind it again. +.IP erase +Erase the tape. +.PP +.B mt +exits with a status of 0 if the operation succeeded, 1 if the +operation or device name given was invalid, or 2 if the operation +failed. +.SS OPTIONS +.TP +.I "\-f, \-\-file=device" +Use +.I device +as the file name of the tape drive to operate on. +To use a +tape drive on another machine, 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 "\-\-rsh-command=command" +Notifies +.B mt +that it should use +.I command +to communicate with remote devices instead of +.I /usr/bin/ssh +or +.IR /usr/bin/rsh . +.TP +.I "\-V, \-\-version" +Print the version number of +.BR mt . diff --git a/src/.cvsignore b/src/.cvsignore new file mode 100644 index 0000000..729dc3f --- /dev/null +++ b/src/.cvsignore @@ -0,0 +1,11 @@ +Makefile.in +Makefile +.deps +.libs +cpio +mt +rmt +.gdbinit +*.tar.gz +*.tar.bz2 +localedir.h diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..1e5da40 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,81 @@ +# This file is part of GNU cpio +# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +bin_PROGRAMS=cpio @CPIO_MT_PROG@ +libexec_PROGRAMS=@CPIO_RMT_PROG@ +EXTRA_PROGRAMS=mt rmt + +cpio_SOURCES = \ + copyin.c\ + copyout.c\ + copypass.c\ + defer.c\ + dstring.c\ + global.c\ + main.c\ + tar.c\ + util.c\ + error.c\ + filemode.c\ + dirname.c\ + idcache.c\ + makepath.c\ + xmalloc.c\ + stripslash.c\ + userspec.c\ + xstrdup.c + +noinst_HEADERS =\ + cpio.h\ + cpiohdr.h\ + tar.h\ + tarhdr.h\ + defer.h\ + dstring.h\ + extern.h\ + filetypes.h\ + gettext.h\ + system.h\ + rmt.h\ + safe-stat.h\ + fnmatch.h\ + getopt.h + +cpio_LDADD = @LIBOBJS@ + +mt_SOURCES = \ + mt.c argmatch.c +mt_LDADD = @LIBOBJS@ + +rmt_SOURCES = rmt.c +rmt_LDADD = @LIBOBJS@ + +EXTRA_DIST=\ + getopt.c\ + getopt1.c\ + bcopy.c\ + fnmatch.c\ + mkdir.c\ + strdup.c + +localedir = $(datadir)/locale + +DISTCLEANFILES = localedir.h +localedir.h : Makefile + echo '#define LOCALEDIR "$(localedir)"' >$@ + +mt.o main.o: localedir.h diff --git a/src/alloca.c b/src/alloca.c new file mode 100644 index 0000000..7061cec --- /dev/null +++ b/src/alloca.c @@ -0,0 +1,495 @@ +/* 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 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 +#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_DIR