/* Tar -- a tape archiver.
- Copyright (C) 1988, 1992 Free Software Foundation
+ Copyright (C) 1988, 1992, 1993 Free Software Foundation
This file is part of GNU Tar.
#include <sys/types.h> /* Needed for typedefs in tar.h */
#include "getopt.h"
#include "regex.h"
-#include "fnmatch.h"
/*
* The following causes "tar.h" to produce definitions of all the
#include "tar.h"
#include "port.h"
-
-#if defined(_POSIX_VERSION) || defined(DIRENT)
-#include <dirent.h>
-#ifdef direct
-#undef direct
-#endif /* direct */
-#define direct dirent
-#define DP_NAMELEN(x) strlen((x)->d_name)
-#endif /* _POSIX_VERSION or DIRENT */
-#if !defined(_POSIX_VERSION) && !defined(DIRENT) && defined(BSD42)
-#include <sys/dir.h>
-#define DP_NAMELEN(x) (x)->d_namlen
-#endif /* not _POSIX_VERSION and BSD42 */
-#ifdef __MSDOS__
-#include "msd_dir.h"
-#define DP_NAMELEN(x) (x)->d_namlen
-#define direct dirent
-#endif
-#if defined(USG) && !defined(_POSIX_VERSION) && !defined(DIRENT)
-#include <ndir.h>
-#define DP_NAMELEN(x) strlen((x)->d_name)
-#endif /* USG and not _POSIX_VERSION and not DIRENT */
+#include "fnmatch.h"
/*
* We should use a conversion routine that does reasonable error
{"to-stdout", 0, &f_exstdout, 1},
{"ignore-zeros", 0, &f_ignorez, 1},
{"keep-old-files", 0, 0, 'k'},
- {"uncompress", 0, &f_compress, 1},
{"same-permissions", 0, &f_use_protection, 1},
{"preserve-permissions", 0, &f_use_protection, 1},
{"modification-time", 0, &f_modified, 1},
{"listed-incremental", 1, 0, 'g'},
{"multi-volume", 0, &f_multivol, 1},
{"info-script", 1, 0, 'F'},
+ {"new-volume-script", 1, 0, 'F'},
{"absolute-paths", 0, &f_absolute_paths, 1},
{"interactive", 0, &f_confirm, 1},
{"confirmation", 0, &f_confirm, 1},
{"one-file-system", 0, &f_local_filesys, 1},
{"old-archive", 0, 0, 'o'},
{"portability", 0, 0, 'o'},
- {"compress", 0, &f_compress, 1},
- {"compress-block", 0, &f_compress, 2},
+ {"compress", 0, 0, 'Z'},
+ {"uncompress", 0, 0, 'Z'},
+ {"block-compress", 0, &f_compress_block, 1},
+ {"gzip", 0, 0, 'z'},
+ {"ungzip", 0, 0, 'z'},
+ {"use-compress-program", 1, 0, 18},
+
+
+ {"same-permissions", 0, &f_use_protection, 1},
{"sparse", 0, &f_sparse_files, 1},
{"tape-length", 1, 0, 'L'},
{"remove-files", 0, &f_remove_files, 1},
/* Set default option values */
blocking = DEFBLOCKING; /* From Makefile */
- ar_files = (char **) malloc (sizeof (char *) * 10);
+ ar_files = (char **) ck_malloc (sizeof (char *) * 10);
ar_files_len = 10;
n_ar_files = 0;
cur_ar_file = 0;
f_volno_file = optarg;
break;
+ case 18:
+ if (f_compressprog)
+ {
+ msg ("Only one compression option permitted\n");
+ exit (EX_ARGSBAD);
+ }
+ f_compressprog = optarg;
+ break;
+
case 'g': /* We are making a GNU dump; save
directories at the beginning of
the archive, and include in each
add_exclude_file (optarg);
break;
- case 'z': /* Easy to type */
- case 'Z': /* Like the filename extension .Z */
- f_compress++;
+ case 'z':
+ if (f_compressprog)
+ {
+ msg ("Only one compression option permitted\n");
+ exit (EX_ARGSBAD);
+ }
+ f_compressprog = "gzip";
+ break;
+
+ case 'Z':
+ if (f_compressprog)
+ {
+ msg ("Only one compression option permitted\n");
+ exit (EX_ARGSBAD);
+ }
+ f_compressprog = "compress";
break;
case '?':
msg ("Multiple archive files requires --multi-volume\n");
exit (EX_ARGSBAD);
}
+ if (f_compress_block && !f_compressprog)
+ {
+ msg ("You must use a compression option (--gzip, --compress\n\
+or --use-compress-program) with --block-compress.\n");
+ exit (EX_ARGSBAD);
+ }
}
DEF_AR_FILE);
fputs ("\
--force-local archive file is local even if has a colon\n\
--F, --info-script F run script at end of each tape (implies -M)\n\
+-F, --info-script F\n\
+ --new-volume-script F run script at end of each tape (implies -M)\n\
-G, --incremental create/list/extract old GNU-format incremental backup\n\
-g, --listed-incremental F create/list/extract new GNU-format incremental backup\n\
-h, --dereference don't dump symlinks; dump the files they point to\n\
-k, --keep-old-files keep existing files; don't overwrite them from archive\n\
-K, --starting-file F begin at file F in the archive\n\
-l, --one-file-system stay in local file system when creating an archive\n\
--L, --tape-length LENGTH change tapes after writing LENGTH\n\
+-L, --tape-length N change tapes after writing N*1024 bytes\n\
", stdout); /* KLUDGE */
fputs ("\
-m, --modification-time don't extract file modified time\n\
-W, --verify attempt to verify the archive after writing it\n\
--exclude FILE exclude file FILE\n\
-X, --exclude-from FILE exclude files listed in FILE\n\
--z, -Z, --compress,\n\
+-Z, --compress,\n\
--uncompress filter the archive through compress\n\
+-z, --gzip,\n\
+ --ungzip filter the archive through gzip\n\
+--use-compress-program PROG\n\
+ filter the archive through PROG (which must accept -d)\n\
+--block-compress block the output of compression program for tapes\n\
-[0-7][lmh] specify drive and density\n\
", stdout);
}
}
/* End of JF quick -C hack */
+#if 0
if (f_exclude && check_exclude (p))
goto tryagain;
+#endif
return un_quote_string (p);
}
while (p = read_name_from_file (buffer, &buffer_siz, namef))
next_name_is_dir = 0;
goto tryagain;
}
+#if 0
if (f_exclude && check_exclude (p))
goto tryagain;
+#endif
return un_quote_string (p);
}
return NULL;
if (chdir_name[0] != '/')
{
char *path = ck_malloc (PATH_MAX);
-#if defined(__MSDOS__) || defined(USG) || defined(_POSIX_VERSION)
+#if defined(__MSDOS__) || defined(HAVE_GETCWD) || defined(_POSIX_VERSION)
if (!getcwd (path, PATH_MAX))
{
msg ("Couldn't get current directory.");
/* Regular expressions (shell globbing, actually). */
if (nlp->regexp)
{
- if (fnmatch (nlp->name, p, FNM_TARPATH) == 0)
+ if (fnmatch (nlp->name, p, FNM_LEADING_DIR) == 0)
{
nlp->found = 1; /* Remember it matched */
if (f_startfile)
/* Regular expressions */
if (nlp->regexp)
{
- if (fnmatch (nlp->name, p, FNM_TARPATH) == 0)
+ if (fnmatch (nlp->name, p, FNM_LEADING_DIR) == 0)
return nlp; /* We got a match */
continue;
}
for (n = 0; n < size_re_exclude; n++)
{
- if (fnmatch (re_exclude[n], name, FNM_TARPATH) == 0)
+ if (fnmatch (re_exclude[n], name, FNM_LEADING_DIR) == 0)
return 1;
}
for (n = 0; n < size_exclude; n++)