1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-19 18:26:32 +02:00

(long_opts): Add --dereference, -L.

(usage): Describe -L and -H.
(cp_option_init): Initialize to DEREF_UNDEFINED, not `1'.
(main): Add `H' and `-L' to getopt spec string.
[case 'a']: Initialize `dereference' to DEREF_NEVER, not 0.
[case 'd']: Likewise.
[case 'H']: New case.
[case 'L']: New case.
[case 'R']: Don't set dereference to `0' here.
If it's not yet defined, set x.dereference to DEREF_NEVER
if -R was specified, else set it to DEREF_ALWAYS.
Set x.xstat accordingly for -H.
This commit is contained in:
Jim Meyering
2000-08-20 20:48:57 +00:00
parent 7b1d35af90
commit c93a607f05

View File

@@ -123,6 +123,7 @@ static struct option const long_opts[] =
{
{"archive", no_argument, NULL, 'a'},
{"backup", optional_argument, NULL, 'b'},
{"dereference", no_argument, NULL, 'L'},
{"force", no_argument, NULL, 'f'},
{"sparse", required_argument, NULL, SPARSE_OPTION},
{"interactive", no_argument, NULL, 'i'},
@@ -168,7 +169,12 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n\
-d, --no-dereference preserve links\n\
-f, --force remove existing destinations, never prompt\n\
-i, --interactive prompt before overwrite\n\
-H follow symbolic links that are explicitly\n\
specified in the command line, but do not\n\
follow symlinks that are found via recursive\n\
traversal\n\
-l, --link link files instead of copying\n\
-L, --dereference always follow symbolic links\n\
-p, --preserve preserve file attributes if possible\n\
--parents append source path to DIRECTORY\n\
-P same as `--parents' for now; soon to change to\n\
@@ -651,7 +657,7 @@ static void
cp_option_init (struct cp_options *x)
{
x->copy_as_regular = 1;
x->dereference = 1;
x->dereference = DEREF_UNDEFINED;
x->force = 0;
x->failed_unlink_is_fatal = 1;
x->hard_link = 0;
@@ -705,7 +711,7 @@ main (int argc, char **argv)
we'll actually use backup_suffix_string. */
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
while ((c = getopt_long (argc, argv, "abdfilprsuvxPRS:V:", long_opts, NULL))
while ((c = getopt_long (argc, argv, "abdfHilLprsuvxPRS:V:", long_opts, NULL))
!= -1)
{
switch (c)
@@ -719,7 +725,7 @@ main (int argc, char **argv)
break;
case 'a': /* Like -dpR. */
x.dereference = 0;
x.dereference = DEREF_NEVER;
x.preserve_owner_and_group = 1;
x.preserve_chmod_bits = 1;
x.preserve_timestamps = 1;
@@ -742,13 +748,17 @@ main (int argc, char **argv)
break;
case 'd':
x.dereference = 0;
x.dereference = DEREF_NEVER;
break;
case 'f':
x.force = 1;
break;
case 'H':
x.dereference = DEREF_COMMAND_LINE_ARGUMENTS;
break;
case 'i':
x.interactive = 1;
break;
@@ -757,6 +767,10 @@ main (int argc, char **argv)
x.hard_link = 1;
break;
case 'L':
x.dereference = DEREF_ALWAYS;
break;
case 'p':
x.preserve_owner_and_group = 1;
x.preserve_chmod_bits = 1;
@@ -778,7 +792,6 @@ main (int argc, char **argv)
case 'R':
x.recursive = 1;
x.dereference = 0;
x.copy_as_regular = 0;
break;
@@ -849,13 +862,27 @@ Use `--parents' for the old meaning, and `--no-dereference' for the new."));
if (x.preserve_chmod_bits == 1)
x.umask_kill = ~ (mode_t) 0;
if (x.dereference == DEREF_UNDEFINED)
{
if (x.recursive)
/* This is compatible with FreeBSD. */
x.dereference = DEREF_NEVER;
else
x.dereference = DEREF_ALWAYS;
}
/* The key difference between -d (--no-dereference) and not is the version
of `stat' to call. */
if (x.dereference)
x.xstat = stat;
else
if (x.dereference == DEREF_NEVER)
x.xstat = lstat;
else
{
/* For DEREF_COMMAND_LINE_ARGUMENTS, x.xstat must be stat for
each command line argument, but must later be `lstat' for
any symlinks that are found via recursive traversal. */
x.xstat = stat;
}
/* Allocate space for remembering copied and created files. */