]> Dogcows Code - chaz/tar/blobdiff - src/tar.c
Minor rewording
[chaz/tar] / src / tar.c
index bd48d7be1f22cc8334d0764de5bb157b697cc741..f16d620b912542237d4a145d38511acbc26ca35d 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -1,13 +1,13 @@
 /* A tar (tape archiver) program.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000,
 /* A tar (tape archiver) program.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000,
-   2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
    Written by John Gilmore, starting 1985-08-25.
 
    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
 
    Written by John Gilmore, starting 1985-08-25.
 
    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
+   Free Software Foundation; either version 3, or (at your option) any later
    version.
 
    This program is distributed in the hope that it will be useful, but
    version.
 
    This program is distributed in the hope that it will be useful, but
@@ -22,7 +22,6 @@
 #include <system.h>
 
 #include <fnmatch.h>
 #include <system.h>
 
 #include <fnmatch.h>
-#include <getline.h>
 #include <argp.h>
 #include <argp-namefrob.h>
 #include <argp-fmtstream.h>
 #include <argp.h>
 #include <argp-namefrob.h>
 #include <argp-fmtstream.h>
 
 #include <argmatch.h>
 #include <closeout.h>
 
 #include <argmatch.h>
 #include <closeout.h>
+#include <configmake.h>
 #include <exitfail.h>
 #include <getdate.h>
 #include <exitfail.h>
 #include <getdate.h>
-#include <localedir.h>
 #include <rmt.h>
 #include <rmt.h>
+#include <rmt-command.h>
 #include <prepargs.h>
 #include <quotearg.h>
 #include <version-etc.h>
 #include <prepargs.h>
 #include <quotearg.h>
 #include <version-etc.h>
@@ -253,7 +253,12 @@ enum
   DELAY_DIRECTORY_RESTORE_OPTION,
   DELETE_OPTION,
   EXCLUDE_CACHES_OPTION,
   DELAY_DIRECTORY_RESTORE_OPTION,
   DELETE_OPTION,
   EXCLUDE_CACHES_OPTION,
+  EXCLUDE_CACHES_UNDER_OPTION,
+  EXCLUDE_CACHES_ALL_OPTION,
   EXCLUDE_OPTION,
   EXCLUDE_OPTION,
+  EXCLUDE_TAG_OPTION,
+  EXCLUDE_TAG_UNDER_OPTION,
+  EXCLUDE_TAG_ALL_OPTION,
   FORCE_LOCAL_OPTION,
   GROUP_OPTION,
   HANG_OPTION,
   FORCE_LOCAL_OPTION,
   GROUP_OPTION,
   HANG_OPTION,
@@ -602,7 +607,20 @@ static struct argp_option options[] = {
   {"exclude-from", 'X', N_("FILE"), 0,
    N_("exclude patterns listed in FILE"), GRID+1 },
   {"exclude-caches", EXCLUDE_CACHES_OPTION, 0, 0,
   {"exclude-from", 'X', N_("FILE"), 0,
    N_("exclude patterns listed in FILE"), GRID+1 },
   {"exclude-caches", EXCLUDE_CACHES_OPTION, 0, 0,
-   N_("exclude directories containing a cache tag"), GRID+1 },
+   N_("exclude contents of directories containing CACHEDIR.TAG, "
+      "except for the tag file itself"), GRID+1 },
+  {"exclude-caches-under", EXCLUDE_CACHES_UNDER_OPTION, 0, 0,
+   N_("exclude everything under directories containing CACHEDIR.TAG"),
+   GRID+1 },
+  {"exclude-caches-all", EXCLUDE_CACHES_ALL_OPTION, 0, 0,
+   N_("exclude directories containing CACHEDIR.TAG"), GRID+1 },
+  {"exclude-tag", EXCLUDE_TAG_OPTION, N_("FILE"), 0,
+   N_("exclude contents of directories containing FILE, except"
+      " for FILE itself"), GRID+1 },
+  {"exclude-tag-under", EXCLUDE_TAG_UNDER_OPTION, N_("FILE"), 0,
+   N_("exclude everything under directories containing FILE"), GRID+1 },
+  {"exclude-tag-all", EXCLUDE_TAG_ALL_OPTION, N_("FILE"), 0,
+   N_("exclude directories containing FILE"), GRID+1 },
   {"no-recursion", NO_RECURSION_OPTION, 0, 0,
    N_("avoid descending automatically in directories"), GRID+1 },
   {"one-file-system", ONE_FILE_SYSTEM_OPTION, 0, 0,
   {"no-recursion", NO_RECURSION_OPTION, 0, 0,
    N_("avoid descending automatically in directories"), GRID+1 },
   {"one-file-system", ONE_FILE_SYSTEM_OPTION, 0, 0,
@@ -980,7 +998,7 @@ read_name_from_file (FILE *fp, struct obstack *stk)
 
   if (counter == 0 && c != EOF)
     return file_list_skip;
 
   if (counter == 0 && c != EOF)
     return file_list_skip;
-  
+
   obstack_1grow (stk, 0);
 
   return (counter == 0 && c == EOF) ? file_list_end : file_list_success;
   obstack_1grow (stk, 0);
 
   return (counter == 0 && c == EOF) ? file_list_end : file_list_success;
@@ -1068,7 +1086,7 @@ update_argv (const char *filename, struct argp_state *state)
        case file_list_success:
          count++;
          break;
        case file_list_success:
          count++;
          break;
-         
+
        case file_list_end: /* won't happen, just to pacify gcc */
          break;
 
        case file_list_end: /* won't happen, just to pacify gcc */
          break;
 
@@ -1093,7 +1111,7 @@ update_argv (const char *filename, struct argp_state *state)
            filename_terminator = 0;
            break;
          }
            filename_terminator = 0;
            break;
          }
-         
+
        case file_list_skip:
          break;
        }
        case file_list_skip:
          break;
        }
@@ -1159,11 +1177,11 @@ parse_opt (int key, char *arg, struct argp_state *state)
 
   switch (key)
     {
 
   switch (key)
     {
-      case ARGP_KEY_ARG:
-       /* File name or non-parsed option, because of ARGP_IN_ORDER */
-       name_add_name (arg, MAKE_INCL_OPTIONS (args));
-       args->input_files = true;
-       break;
+    case ARGP_KEY_ARG:
+      /* File name or non-parsed option, because of ARGP_IN_ORDER */
+      name_add_name (arg, MAKE_INCL_OPTIONS (args));
+      args->input_files = true;
+      break;
 
     case 'A':
       set_subcommand_option (CAT_SUBCOMMAND);
 
     case 'A':
       set_subcommand_option (CAT_SUBCOMMAND);
@@ -1503,7 +1521,30 @@ parse_opt (int key, char *arg, struct argp_state *state)
       break;
 
     case EXCLUDE_CACHES_OPTION:
       break;
 
     case EXCLUDE_CACHES_OPTION:
-      exclude_caches_option = true;
+      add_exclusion_tag ("CACHEDIR.TAG", exclusion_tag_contents,
+                        cachedir_file_p);
+      break;
+
+    case EXCLUDE_CACHES_UNDER_OPTION:
+      add_exclusion_tag ("CACHEDIR.TAG", exclusion_tag_under,
+                        cachedir_file_p);
+      break;
+
+    case EXCLUDE_CACHES_ALL_OPTION:
+      add_exclusion_tag ("CACHEDIR.TAG", exclusion_tag_all,
+                        cachedir_file_p);
+      break;
+
+    case EXCLUDE_TAG_OPTION:
+      add_exclusion_tag (arg, exclusion_tag_contents, NULL);
+      break;
+
+    case EXCLUDE_TAG_UNDER_OPTION:
+      add_exclusion_tag (arg, exclusion_tag_under, NULL);
+      break;
+
+    case EXCLUDE_TAG_ALL_OPTION:
+      add_exclusion_tag (arg, exclusion_tag_all, NULL);
       break;
 
     case FORCE_LOCAL_OPTION:
       break;
 
     case FORCE_LOCAL_OPTION:
@@ -1892,23 +1933,23 @@ usage (int status)
 /* Parse the options for tar.  */
 
 static struct argp_option *
 /* Parse the options for tar.  */
 
 static struct argp_option *
-find_argp_option (struct argp_option *options, int letter)
+find_argp_option (struct argp_option *o, int letter)
 {
   for (;
 {
   for (;
-       !(options->name == NULL
-        && options->key == 0
-        && options->arg == 0
-        && options->flags == 0
-        && options->doc == NULL); options++)
-    if (options->key == letter)
-      return options;
+       !(o->name == NULL
+        && o->key == 0
+        && o->arg == 0
+        && o->flags == 0
+        && o->doc == NULL); o++)
+    if (o->key == letter)
+      return o;
   return NULL;
 }
 
 static void
 decode_options (int argc, char **argv)
 {
   return NULL;
 }
 
 static void
 decode_options (int argc, char **argv)
 {
-  int index;
+  int idx;
   struct tar_args args;
 
   /* Set some default option values.  */
   struct tar_args args;
 
   /* Set some default option values.  */
@@ -1999,7 +2040,7 @@ decode_options (int argc, char **argv)
   prepend_default_options (getenv ("TAR_OPTIONS"), &argc, &argv);
 
   if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER|ARGP_NO_HELP,
   prepend_default_options (getenv ("TAR_OPTIONS"), &argc, &argv);
 
   if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER|ARGP_NO_HELP,
-                 &index, &args))
+                 &idx, &args))
     exit (TAREXIT_FAILURE);
 
 
     exit (TAREXIT_FAILURE);
 
 
@@ -2027,9 +2068,9 @@ decode_options (int argc, char **argv)
     }
 
   /* Handle operands after any "--" argument.  */
     }
 
   /* Handle operands after any "--" argument.  */
-  for (; index < argc; index++)
+  for (; idx < argc; idx++)
     {
     {
-      name_add_name (argv[index], MAKE_INCL_OPTIONS (&args));
+      name_add_name (argv[idx], MAKE_INCL_OPTIONS (&args));
       args.input_files = true;
     }
 
       args.input_files = true;
     }
 
@@ -2260,9 +2301,6 @@ main (int argc, char **argv)
   /* Make sure we have first three descriptors available */
   stdopen ();
 
   /* Make sure we have first three descriptors available */
   stdopen ();
 
-  /* Close all inherited open descriptors, except for the first three */
-  closeopen ();
-
   /* Pre-allocate a few structures.  */
 
   allocated_archive_names = 10;
   /* Pre-allocate a few structures.  */
 
   allocated_archive_names = 10;
@@ -2280,6 +2318,7 @@ main (int argc, char **argv)
   /* Decode options.  */
 
   decode_options (argc, argv);
   /* Decode options.  */
 
   decode_options (argc, argv);
+
   name_init ();
 
   /* Main command execution.  */
   name_init ();
 
   /* Main command execution.  */
@@ -2346,7 +2385,7 @@ main (int argc, char **argv)
 
   if (stdlis == stdout)
     close_stdout ();
 
   if (stdlis == stdout)
     close_stdout ();
-  else if (ferror (stderr) || fclose (stderr) != 0) 
+  else if (ferror (stderr) || fclose (stderr) != 0)
     exit_status = TAREXIT_FAILURE;
 
   return exit_status;
     exit_status = TAREXIT_FAILURE;
 
   return exit_status;
@@ -2368,6 +2407,7 @@ tar_stat_destroy (struct tar_stat_info *st)
   free (st->gname);
   free (st->sparse_map);
   free (st->dumpdir);
   free (st->gname);
   free (st->sparse_map);
   free (st->dumpdir);
+  xheader_destroy (&st->xhdr);
   memset (st, 0, sizeof (*st));
 }
 
   memset (st, 0, sizeof (*st));
 }
 
This page took 0.026862 seconds and 4 git commands to generate.