1 /* `ln' program to create links between files.
2 Copyright (C) 1986, 1989-1991, 1995-2007 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Written by Mike Parker and David MacKenzie. */
21 #include <sys/types.h>
25 #include "backupfile.h"
27 #include "filenamecat.h"
30 #include "hash-triple.h"
35 /* The official name of this program (e.g., no `g' prefix). */
36 #define PROGRAM_NAME "ln"
38 #define AUTHORS "Mike Parker", "David MacKenzie"
40 #ifndef ENABLE_HARD_LINK_TO_SYMLINK_WARNING
41 # define ENABLE_HARD_LINK_TO_SYMLINK_WARNING 0
44 /* In being careful not even to try to make hard links to directories,
45 we have to know whether link(2) follows symlinks. If it does, then
46 we have to *stat* the `source' to see if the resulting link would be
47 to a directory. Otherwise, we have to use *lstat* so that we allow
48 users to make hard links to symlinks-that-point-to-directories. */
50 #if LINK_FOLLOWS_SYMLINKS
51 # define STAT_LIKE_LINK(File, Stat_buf) \
54 # define STAT_LIKE_LINK(File, Stat_buf) \
55 lstat (File, Stat_buf)
58 /* The name by which the program was run, for error messages. */
62 static enum backup_type backup_type;
64 /* If true, make symbolic links; otherwise, make hard links. */
65 static bool symbolic_link;
67 /* If true, ask the user before removing existing files. */
68 static bool interactive;
70 /* If true, remove existing files unconditionally. */
71 static bool remove_existing_files;
73 /* If true, list each file as it is moved. */
76 /* If true, allow the superuser to *attempt* to make hard links
77 to directories. However, it appears that this option is not useful
78 in practice, since even the superuser is prohibited from hard-linking
79 directories on most (all?) existing systems. */
80 static bool hard_dir_link;
82 /* If nonzero, and the specified destination is a symbolic link to a
83 directory, treat it just as if it were a directory. Otherwise, the
84 command `ln --force --no-dereference file symlink-to-dir' deletes
85 symlink-to-dir before creating the new link. */
86 static bool dereference_dest_dir_symlinks = true;
88 /* This is a set of destination name/inode/dev triples for hard links
89 created by ln. Use this data structure to avoid data loss via a
90 sequence of commands like this:
91 rm -rf a b c; mkdir a b c; touch a/f b/f; ln -f a/f b/f c && rm -r a b */
92 static Hash_table *dest_set;
94 /* Initial size of the dest_set hash table. */
95 enum { DEST_INFO_INITIAL_CAPACITY = 61 };
97 static struct option const long_options[] =
99 {"backup", optional_argument, NULL, 'b'},
100 {"directory", no_argument, NULL, 'F'},
101 {"no-dereference", no_argument, NULL, 'n'},
102 {"no-target-directory", no_argument, NULL, 'T'},
103 {"force", no_argument, NULL, 'f'},
104 {"interactive", no_argument, NULL, 'i'},
105 {"suffix", required_argument, NULL, 'S'},
106 {"target-directory", required_argument, NULL, 't'},
107 {"symbolic", no_argument, NULL, 's'},
108 {"verbose", no_argument, NULL, 'v'},
109 {GETOPT_HELP_OPTION_DECL},
110 {GETOPT_VERSION_OPTION_DECL},
114 /* FILE is the last operand of this command. Return true if FILE is a
115 directory. But report an error there is a problem accessing FILE,
116 or if FILE does not exist but would have to refer to an existing
117 directory if it referred to anything at all. */
120 target_directory_operand (char const *file)
122 char const *b = last_component (file);
123 size_t blen = strlen (b);
124 bool looks_like_a_dir = (blen == 0 || ISSLASH (b[blen - 1]));
127 (dereference_dest_dir_symlinks ? stat (file, &st) : lstat (file, &st));
128 int err = (stat_result == 0 ? 0 : errno);
129 bool is_a_dir = !err && S_ISDIR (st.st_mode);
130 if (err && err != ENOENT)
131 error (EXIT_FAILURE, err, _("accessing %s"), quote (file));
132 if (is_a_dir < looks_like_a_dir)
133 error (EXIT_FAILURE, err, _("target %s is not a directory"), quote (file));
137 /* Make a link DEST to the (usually) existing file SOURCE.
138 Symbolic links to nonexistent files are allowed.
139 Return true if successful. */
142 do_link (const char *source, const char *dest)
144 struct stat source_stats;
145 struct stat dest_stats;
146 char *dest_backup = NULL;
147 bool dest_lstat_ok = false;
148 bool source_is_dir = false;
151 /* Use stat here instead of lstat.
152 On SVR4, link does not follow symlinks, so this check disallows
153 making hard links to symlinks that point to directories. Big deal.
154 On other systems, link follows symlinks, so this check is right. */
157 if (STAT_LIKE_LINK (source, &source_stats) != 0)
159 error (0, errno, _("accessing %s"), quote (source));
163 if (ENABLE_HARD_LINK_TO_SYMLINK_WARNING
164 && S_ISLNK (source_stats.st_mode))
166 error (0, 0, _("%s: warning: making a hard link to a symbolic link\
171 if (S_ISDIR (source_stats.st_mode))
173 source_is_dir = true;
176 error (0, 0, _("%s: hard link not allowed for directory"),
183 if (remove_existing_files || interactive || backup_type != no_backups)
185 dest_lstat_ok = (lstat (dest, &dest_stats) == 0);
186 if (!dest_lstat_ok && errno != ENOENT)
188 error (0, errno, _("accessing %s"), quote (dest));
193 /* If the current target was created as a hard link to another
194 source file, then refuse to unlink it. */
197 && seen_file (dest_set, dest, &dest_stats))
200 _("will not overwrite just-created %s with %s"),
201 quote_n (0, dest), quote_n (1, source));
205 /* If --force (-f) has been specified without --backup, then before
206 making a link ln must remove the destination file if it exists.
207 (with --backup, it just renames any existing destination file)
208 But if the source and destination are the same, don't remove
209 anything and fail right here. */
210 if ((remove_existing_files
211 /* Ensure that "ln --backup f f" fails here, with the
212 "... same file" diagnostic, below. Otherwise, subsequent
213 code would give a misleading "file not found" diagnostic.
214 This case is different than the others handled here, since
215 the command in question doesn't use --force. */
216 || (!symbolic_link && backup_type != no_backups))
218 /* Allow `ln -sf --backup k k' to succeed in creating the
219 self-referential symlink, but don't allow the hard-linking
220 equivalent: `ln -f k k' (with or without --backup) to get
221 beyond this point, because the error message you'd get is
223 && (backup_type == no_backups || !symbolic_link)
224 && (!symbolic_link || stat (source, &source_stats) == 0)
225 && SAME_INODE (source_stats, dest_stats)
226 /* The following detects whether removing DEST will also remove
227 SOURCE. If the file has only one link then both are surely
228 the same link. Otherwise check whether they point to the same
229 name in the same directory. */
230 && (source_stats.st_nlink == 1 || same_name (source, dest)))
232 error (0, 0, _("%s and %s are the same file"),
233 quote_n (0, source), quote_n (1, dest));
239 if (S_ISDIR (dest_stats.st_mode))
241 error (0, 0, _("%s: cannot overwrite directory"), quote (dest));
246 fprintf (stderr, _("%s: replace %s? "), program_name, quote (dest));
249 remove_existing_files = true;
252 if (backup_type != no_backups)
254 dest_backup = find_backup_file_name (dest, backup_type);
255 if (rename (dest, dest_backup) != 0)
257 int rename_errno = errno;
260 if (rename_errno != ENOENT)
262 error (0, rename_errno, _("cannot backup %s"), quote (dest));
269 ok = ((symbolic_link ? symlink (source, dest) : link (source, dest))
272 /* If the attempt to create a link failed and we are removing or
273 backing up destinations, unlink the destination and try again.
275 POSIX 1003.1-2004 requires that ln -f A B must unlink B even on
276 failure (e.g., when A does not exist). This is counterintuitive,
277 and we submitted a defect report
278 <http://www.opengroup.org/austin/mailarchives/ag-review/msg01794.html>
279 (2004-06-24). If the committee does not fix the standard we'll
280 have to change the behavior of ln -f, at least if POSIXLY_CORRECT
281 is set. In the meantime ln -f A B will not unlink B unless the
282 attempt to link A to B failed because B already existed.
284 Try to unlink DEST even if we may have backed it up successfully.
285 In some unusual cases (when DEST and DEST_BACKUP are hard-links
286 that refer to the same file), rename succeeds and DEST remains.
287 If we didn't remove DEST in that case, the subsequent symlink or link
290 if (!ok && errno == EEXIST && (remove_existing_files || dest_backup))
292 if (unlink (dest) != 0)
294 error (0, errno, _("cannot remove %s"), quote (dest));
299 ok = ((symbolic_link ? symlink (source, dest) : link (source, dest))
305 /* Right after creating a hard link, do this: (note dest name and
306 source_stats, which are also the just-linked-destinations stats) */
307 record_file (dest_set, dest, &source_stats);
312 printf ("%s ~ ", quote (dest_backup));
313 printf ("%s %c> %s\n", quote_n (0, dest), (symbolic_link ? '-' : '='),
314 quote_n (1, source));
321 ? (errno != ENAMETOOLONG && *source
322 ? _("creating symbolic link %s")
323 : _("creating symbolic link %s -> %s"))
324 : (errno == EMLINK && !source_is_dir
325 ? _("creating hard link to %.0s%s")
326 : (errno == EDQUOT || errno == EEXIST || errno == ENOSPC
328 ? _("creating hard link %s")
329 : _("creating hard link %s => %s"))),
330 quote_n (0, dest), quote_n (1, source));
334 if (rename (dest_backup, dest) != 0)
335 error (0, errno, _("cannot un-backup %s"), quote (dest));
346 if (status != EXIT_SUCCESS)
347 fprintf (stderr, _("Try `%s --help' for more information.\n"),
352 Usage: %s [OPTION]... [-T] TARGET LINK_NAME (1st form)\n\
353 or: %s [OPTION]... TARGET (2nd form)\n\
354 or: %s [OPTION]... TARGET... DIRECTORY (3rd form)\n\
355 or: %s [OPTION]... -t DIRECTORY TARGET... (4th form)\n\
357 program_name, program_name, program_name, program_name);
359 In the 1st form, create a link to TARGET with the name LINK_NAME.\n\
360 In the 2nd form, create a link to TARGET in the current directory.\n\
361 In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.\n\
362 Create hard links by default, symbolic links with --symbolic.\n\
363 When creating hard links, each TARGET must exist.\n\
367 Mandatory arguments to long options are mandatory for short options too.\n\
370 --backup[=CONTROL] make a backup of each existing destination file\n\
371 -b like --backup but does not accept an argument\n\
372 -d, -F, --directory allow the superuser to attempt to hard link\n\
373 directories (note: will probably fail due to\n\
374 system restrictions, even for the superuser)\n\
375 -f, --force remove existing destination files\n\
378 -n, --no-dereference treat destination that is a symlink to a\n\
379 directory as if it were a normal file\n\
380 -i, --interactive prompt whether to remove destinations\n\
381 -s, --symbolic make symbolic links instead of hard links\n\
384 -S, --suffix=SUFFIX override the usual backup suffix\n\
385 -t, --target-directory=DIRECTORY specify the DIRECTORY in which to create\n\
387 -T, --no-target-directory treat LINK_NAME as a normal file\n\
388 -v, --verbose print name of each linked file\n\
390 fputs (HELP_OPTION_DESCRIPTION, stdout);
391 fputs (VERSION_OPTION_DESCRIPTION, stdout);
394 The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\
395 The version control method may be selected via the --backup option or through\n\
396 the VERSION_CONTROL environment variable. Here are the values:\n\
400 none, off never make backups (even if --backup is given)\n\
401 numbered, t make numbered backups\n\
402 existing, nil numbered if numbered backups exist, simple otherwise\n\
403 simple, never always make simple backups\n\
405 emit_bug_reporting_address ();
411 main (int argc, char **argv)
415 bool make_backups = false;
416 char *backup_suffix_string;
417 char *version_control_string = NULL;
418 char const *target_directory = NULL;
419 bool no_target_directory = false;
423 initialize_main (&argc, &argv);
424 program_name = argv[0];
425 setlocale (LC_ALL, "");
426 bindtextdomain (PACKAGE, LOCALEDIR);
427 textdomain (PACKAGE);
429 atexit (close_stdin);
431 /* FIXME: consider not calling getenv for SIMPLE_BACKUP_SUFFIX unless
432 we'll actually use backup_suffix_string. */
433 backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
435 symbolic_link = remove_existing_files = interactive = verbose
436 = hard_dir_link = false;
438 while ((c = getopt_long (argc, argv, "bdfinst:vFS:T", long_options, NULL))
446 version_control_string = optarg;
450 hard_dir_link = true;
453 remove_existing_files = true;
457 remove_existing_files = false;
461 dereference_dest_dir_symlinks = false;
464 symbolic_link = true;
467 if (target_directory)
468 error (EXIT_FAILURE, 0, _("multiple target directories specified"));
472 if (stat (optarg, &st) != 0)
473 error (EXIT_FAILURE, errno, _("accessing %s"), quote (optarg));
474 if (! S_ISDIR (st.st_mode))
475 error (EXIT_FAILURE, 0, _("target %s is not a directory"),
478 target_directory = optarg;
481 no_target_directory = true;
488 backup_suffix_string = optarg;
490 case_GETOPT_HELP_CHAR;
491 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
493 usage (EXIT_FAILURE);
498 n_files = argc - optind;
499 file = argv + optind;
503 error (0, 0, _("missing file operand"));
504 usage (EXIT_FAILURE);
507 if (no_target_directory)
509 if (target_directory)
510 error (EXIT_FAILURE, 0,
511 _("Cannot combine --target-directory "
512 "and --no-target-directory"));
517 _("missing destination file operand after %s"),
520 error (0, 0, _("extra operand %s"), quote (file[2]));
521 usage (EXIT_FAILURE);
524 else if (!target_directory)
527 target_directory = ".";
528 else if (2 <= n_files && target_directory_operand (file[n_files - 1]))
529 target_directory = file[--n_files];
530 else if (2 < n_files)
531 error (EXIT_FAILURE, 0, _("target %s is not a directory"),
532 quote (file[n_files - 1]));
535 if (backup_suffix_string)
536 simple_backup_suffix = xstrdup (backup_suffix_string);
538 backup_type = (make_backups
539 ? xget_version (_("backup type"), version_control_string)
542 if (target_directory)
546 /* Create the data structure we'll use to record which hard links we
547 create. Used to ensure that ln detects an obscure corner case that
548 might result in user data loss. Create it only if needed. */
550 && remove_existing_files
551 /* Don't bother trying to protect symlinks, since ln clobbering
552 a just-created symlink won't ever lead to real data loss. */
554 /* No destination hard link can be clobbered when making
556 && backup_type != numbered_backups)
559 dest_set = hash_initialize (DEST_INFO_INITIAL_CAPACITY,
564 if (dest_set == NULL)
569 for (i = 0; i < n_files; ++i)
572 char *dest = file_name_concat (target_directory,
573 last_component (file[i]),
575 strip_trailing_slashes (dest_base);
576 ok &= do_link (file[i], dest);
581 ok = do_link (file[0], file[1]);
583 exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);