]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Add support for --no-target-directory option.
authorJim Meyering <jim@meyering.net>
Wed, 30 Jun 2004 18:39:18 +0000 (18:39 +0000)
committerJim Meyering <jim@meyering.net>
Wed, 30 Jun 2004 18:39:18 +0000 (18:39 +0000)
(NO_TARGET_DIRECTORY_OPTION): New constant.
(long_options, usage, main): Add support for

src/ln.c

index e275d723162a1fbe18cffc47ca116921a2e50ce8..2f800a5a5cdf07070b9cd5c4668f5a3af43b06ee 100644 (file)
--- a/src/ln.c
+++ b/src/ln.c
@@ -43,7 +43,8 @@
    non-character as a pseudo short option, starting with CHAR_MAX + 1.  */
 enum
 {
-  TARGET_DIRECTORY_OPTION = CHAR_MAX + 1
+  NO_TARGET_DIRECTORY_OPTION = CHAR_MAX + 1,
+  TARGET_DIRECTORY_OPTION
 };
 
 int link ();                   /* Some systems don't declare this anywhere. */
@@ -126,6 +127,7 @@ static struct option const long_options[] =
   {"backup", optional_argument, NULL, 'b'},
   {"directory", no_argument, NULL, 'F'},
   {"no-dereference", no_argument, NULL, 'n'},
+  {"no-target-directory", no_argument, NULL, NO_TARGET_DIRECTORY_OPTION},
   {"force", no_argument, NULL, 'f'},
   {"interactive", no_argument, NULL, 'i'},
   {"suffix", required_argument, NULL, 'S'},
@@ -386,6 +388,7 @@ Mandatory arguments to long options are mandatory for short options too.\n\
   -S, --suffix=SUFFIX         override the usual backup suffix\n\
       --target-directory=DIRECTORY  specify the DIRECTORY in which to create\n\
                                 the links\n\
+      --no-target-directory   treat LINK_NAME as a normal file\n\
   -v, --verbose               print name of each file before linking\n\
 "), stdout);
       fputs (HELP_OPTION_DESCRIPTION, stdout);
@@ -417,6 +420,7 @@ main (int argc, char **argv)
   char *backup_suffix_string;
   char *version_control_string = NULL;
   char *target_directory = NULL;
+  bool no_target_directory = false;
   int n_files;
   char **file;
 
@@ -471,6 +475,9 @@ main (int argc, char **argv)
        case 'n':
          dereference_dest_dir_symlinks = 0;
          break;
+       case NO_TARGET_DIRECTORY_OPTION:
+         no_target_directory = true;
+         break;
        case 's':
 #ifdef S_ISLNK
          symbolic_link = 1;
@@ -517,7 +524,24 @@ main (int argc, char **argv)
       usage (EXIT_FAILURE);
     }
 
-  if (!target_directory)
+  if (no_target_directory)
+    {
+      if (target_directory)
+       error (EXIT_FAILURE, 0,
+              _("Cannot combine --target-directory "
+                "and --no-target-directory"));
+      if (n_files != 2)
+       {
+         if (n_files < 2)
+           error (0, 0,
+                  _("missing destination file operand after %s"),
+                  quote (file[0]));
+         else
+           error (0, 0, _("extra operand %s"), quote (file[2]));
+         usage (EXIT_FAILURE);
+       }
+    }
+  else if (!target_directory)
     {
       if (n_files < 2)
        target_directory = ".";