global: convert indentation-TABs to spaces
[coreutils.git] / src / ln.c
blobd9b9285f4176af07b7f09dfafdd52e6dfaa9d98c
1 /* `ln' program to create links between files.
2 Copyright (C) 1986, 1989-1991, 1995-2009 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. */
19 #include <config.h>
20 #include <stdio.h>
21 #include <sys/types.h>
22 #include <getopt.h>
24 #include "system.h"
25 #include "backupfile.h"
26 #include "error.h"
27 #include "filenamecat.h"
28 #include "file-set.h"
29 #include "hash.h"
30 #include "hash-triple.h"
31 #include "quote.h"
32 #include "same.h"
33 #include "yesno.h"
35 /* The official name of this program (e.g., no `g' prefix). */
36 #define PROGRAM_NAME "ln"
38 #define AUTHORS \
39 proper_name ("Mike Parker"), \
40 proper_name ("David MacKenzie")
42 #ifndef ENABLE_HARD_LINK_TO_SYMLINK_WARNING
43 # define ENABLE_HARD_LINK_TO_SYMLINK_WARNING 0
44 #endif
46 /* In being careful not even to try to make hard links to directories,
47 we have to know whether link(2) follows symlinks. If it does, then
48 we have to *stat* the `source' to see if the resulting link would be
49 to a directory. Otherwise, we have to use *lstat* so that we allow
50 users to make hard links to symlinks-that-point-to-directories. */
52 #if LINK_FOLLOWS_SYMLINKS
53 # define STAT_LIKE_LINK(File, Stat_buf) \
54 stat (File, Stat_buf)
55 #else
56 # define STAT_LIKE_LINK(File, Stat_buf) \
57 lstat (File, Stat_buf)
58 #endif
60 /* FIXME: document */
61 static enum backup_type backup_type;
63 /* If true, make symbolic links; otherwise, make hard links. */
64 static bool symbolic_link;
66 /* If true, ask the user before removing existing files. */
67 static bool interactive;
69 /* If true, remove existing files unconditionally. */
70 static bool remove_existing_files;
72 /* If true, list each file as it is moved. */
73 static bool verbose;
75 /* If true, allow the superuser to *attempt* to make hard links
76 to directories. However, it appears that this option is not useful
77 in practice, since even the superuser is prohibited from hard-linking
78 directories on most (all?) existing systems. */
79 static bool hard_dir_link;
81 /* If nonzero, and the specified destination is a symbolic link to a
82 directory, treat it just as if it were a directory. Otherwise, the
83 command `ln --force --no-dereference file symlink-to-dir' deletes
84 symlink-to-dir before creating the new link. */
85 static bool dereference_dest_dir_symlinks = true;
87 /* This is a set of destination name/inode/dev triples for hard links
88 created by ln. Use this data structure to avoid data loss via a
89 sequence of commands like this:
90 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 */
91 static Hash_table *dest_set;
93 /* Initial size of the dest_set hash table. */
94 enum { DEST_INFO_INITIAL_CAPACITY = 61 };
96 static struct option const long_options[] =
98 {"backup", optional_argument, NULL, 'b'},
99 {"directory", no_argument, NULL, 'F'},
100 {"no-dereference", no_argument, NULL, 'n'},
101 {"no-target-directory", no_argument, NULL, 'T'},
102 {"force", no_argument, NULL, 'f'},
103 {"interactive", no_argument, NULL, 'i'},
104 {"suffix", required_argument, NULL, 'S'},
105 {"target-directory", required_argument, NULL, 't'},
106 {"symbolic", no_argument, NULL, 's'},
107 {"verbose", no_argument, NULL, 'v'},
108 {GETOPT_HELP_OPTION_DECL},
109 {GETOPT_VERSION_OPTION_DECL},
110 {NULL, 0, NULL, 0}
113 /* FILE is the last operand of this command. Return true if FILE is a
114 directory. But report an error there is a problem accessing FILE,
115 or if FILE does not exist but would have to refer to an existing
116 directory if it referred to anything at all. */
118 static bool
119 target_directory_operand (char const *file)
121 char const *b = last_component (file);
122 size_t blen = strlen (b);
123 bool looks_like_a_dir = (blen == 0 || ISSLASH (b[blen - 1]));
124 struct stat st;
125 int stat_result =
126 (dereference_dest_dir_symlinks ? stat (file, &st) : lstat (file, &st));
127 int err = (stat_result == 0 ? 0 : errno);
128 bool is_a_dir = !err && S_ISDIR (st.st_mode);
129 if (err && err != ENOENT)
130 error (EXIT_FAILURE, err, _("accessing %s"), quote (file));
131 if (is_a_dir < looks_like_a_dir)
132 error (EXIT_FAILURE, err, _("target %s is not a directory"), quote (file));
133 return is_a_dir;
136 /* Make a link DEST to the (usually) existing file SOURCE.
137 Symbolic links to nonexistent files are allowed.
138 Return true if successful. */
140 static bool
141 do_link (const char *source, const char *dest)
143 struct stat source_stats;
144 struct stat dest_stats;
145 char *dest_backup = NULL;
146 bool dest_lstat_ok = false;
147 bool source_is_dir = false;
148 bool ok;
150 /* Use stat here instead of lstat.
151 On SVR4, link does not follow symlinks, so this check disallows
152 making hard links to symlinks that point to directories. Big deal.
153 On other systems, link follows symlinks, so this check is right. */
154 if (!symbolic_link)
156 if (STAT_LIKE_LINK (source, &source_stats) != 0)
158 error (0, errno, _("accessing %s"), quote (source));
159 return false;
162 if (ENABLE_HARD_LINK_TO_SYMLINK_WARNING
163 && S_ISLNK (source_stats.st_mode))
165 error (0, 0, _("%s: warning: making a hard link to a symbolic link\
166 is not portable"),
167 quote (source));
170 if (S_ISDIR (source_stats.st_mode))
172 source_is_dir = true;
173 if (! hard_dir_link)
175 error (0, 0, _("%s: hard link not allowed for directory"),
176 quote (source));
177 return false;
182 if (remove_existing_files || interactive || backup_type != no_backups)
184 dest_lstat_ok = (lstat (dest, &dest_stats) == 0);
185 if (!dest_lstat_ok && errno != ENOENT)
187 error (0, errno, _("accessing %s"), quote (dest));
188 return false;
192 /* If the current target was created as a hard link to another
193 source file, then refuse to unlink it. */
194 if (dest_lstat_ok
195 && dest_set != NULL
196 && seen_file (dest_set, dest, &dest_stats))
198 error (0, 0,
199 _("will not overwrite just-created %s with %s"),
200 quote_n (0, dest), quote_n (1, source));
201 return false;
204 /* If --force (-f) has been specified without --backup, then before
205 making a link ln must remove the destination file if it exists.
206 (with --backup, it just renames any existing destination file)
207 But if the source and destination are the same, don't remove
208 anything and fail right here. */
209 if ((remove_existing_files
210 /* Ensure that "ln --backup f f" fails here, with the
211 "... same file" diagnostic, below. Otherwise, subsequent
212 code would give a misleading "file not found" diagnostic.
213 This case is different than the others handled here, since
214 the command in question doesn't use --force. */
215 || (!symbolic_link && backup_type != no_backups))
216 && dest_lstat_ok
217 /* Allow `ln -sf --backup k k' to succeed in creating the
218 self-referential symlink, but don't allow the hard-linking
219 equivalent: `ln -f k k' (with or without --backup) to get
220 beyond this point, because the error message you'd get is
221 misleading. */
222 && (backup_type == no_backups || !symbolic_link)
223 && (!symbolic_link || stat (source, &source_stats) == 0)
224 && SAME_INODE (source_stats, dest_stats)
225 /* The following detects whether removing DEST will also remove
226 SOURCE. If the file has only one link then both are surely
227 the same link. Otherwise check whether they point to the same
228 name in the same directory. */
229 && (source_stats.st_nlink == 1 || same_name (source, dest)))
231 error (0, 0, _("%s and %s are the same file"),
232 quote_n (0, source), quote_n (1, dest));
233 return false;
236 if (dest_lstat_ok)
238 if (S_ISDIR (dest_stats.st_mode))
240 error (0, 0, _("%s: cannot overwrite directory"), quote (dest));
241 return false;
243 if (interactive)
245 fprintf (stderr, _("%s: replace %s? "), program_name, quote (dest));
246 if (!yesno ())
247 return true;
248 remove_existing_files = true;
251 if (backup_type != no_backups)
253 dest_backup = find_backup_file_name (dest, backup_type);
254 if (rename (dest, dest_backup) != 0)
256 int rename_errno = errno;
257 free (dest_backup);
258 dest_backup = NULL;
259 if (rename_errno != ENOENT)
261 error (0, rename_errno, _("cannot backup %s"), quote (dest));
262 return false;
268 ok = ((symbolic_link ? symlink (source, dest) : link (source, dest))
269 == 0);
271 /* If the attempt to create a link failed and we are removing or
272 backing up destinations, unlink the destination and try again.
274 POSIX 1003.1-2004 requires that ln -f A B must unlink B even on
275 failure (e.g., when A does not exist). This is counterintuitive,
276 and we submitted a defect report
277 <http://www.opengroup.org/austin/mailarchives/ag-review/msg01794.html>
278 (2004-06-24). If the committee does not fix the standard we'll
279 have to change the behavior of ln -f, at least if POSIXLY_CORRECT
280 is set. In the meantime ln -f A B will not unlink B unless the
281 attempt to link A to B failed because B already existed.
283 Try to unlink DEST even if we may have backed it up successfully.
284 In some unusual cases (when DEST and DEST_BACKUP are hard-links
285 that refer to the same file), rename succeeds and DEST remains.
286 If we didn't remove DEST in that case, the subsequent symlink or link
287 call would fail. */
289 if (!ok && errno == EEXIST && (remove_existing_files || dest_backup))
291 if (unlink (dest) != 0)
293 error (0, errno, _("cannot remove %s"), quote (dest));
294 free (dest_backup);
295 return false;
298 ok = ((symbolic_link ? symlink (source, dest) : link (source, dest))
299 == 0);
302 if (ok)
304 /* Right after creating a hard link, do this: (note dest name and
305 source_stats, which are also the just-linked-destinations stats) */
306 record_file (dest_set, dest, &source_stats);
308 if (verbose)
310 if (dest_backup)
311 printf ("%s ~ ", quote (dest_backup));
312 printf ("%s %c> %s\n", quote_n (0, dest), (symbolic_link ? '-' : '='),
313 quote_n (1, source));
316 else
318 error (0, errno,
319 (symbolic_link
320 ? (errno != ENAMETOOLONG && *source
321 ? _("creating symbolic link %s")
322 : _("creating symbolic link %s -> %s"))
323 : (errno == EMLINK && !source_is_dir
324 ? _("creating hard link to %.0s%s")
325 : (errno == EDQUOT || errno == EEXIST || errno == ENOSPC
326 || errno == EROFS)
327 ? _("creating hard link %s")
328 : _("creating hard link %s => %s"))),
329 quote_n (0, dest), quote_n (1, source));
331 if (dest_backup)
333 if (rename (dest_backup, dest) != 0)
334 error (0, errno, _("cannot un-backup %s"), quote (dest));
338 free (dest_backup);
339 return ok;
342 void
343 usage (int status)
345 if (status != EXIT_SUCCESS)
346 fprintf (stderr, _("Try `%s --help' for more information.\n"),
347 program_name);
348 else
350 printf (_("\
351 Usage: %s [OPTION]... [-T] TARGET LINK_NAME (1st form)\n\
352 or: %s [OPTION]... TARGET (2nd form)\n\
353 or: %s [OPTION]... TARGET... DIRECTORY (3rd form)\n\
354 or: %s [OPTION]... -t DIRECTORY TARGET... (4th form)\n\
356 program_name, program_name, program_name, program_name);
357 fputs (_("\
358 In the 1st form, create a link to TARGET with the name LINK_NAME.\n\
359 In the 2nd form, create a link to TARGET in the current directory.\n\
360 In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.\n\
361 Create hard links by default, symbolic links with --symbolic.\n\
362 When creating hard links, each TARGET must exist. Symbolic links\n\
363 can hold arbitrary text; if later resolved, a relative link is\n\
364 interpreted in relation to its parent directory.\n\
366 "), stdout);
367 fputs (_("\
368 Mandatory arguments to long options are mandatory for short options too.\n\
369 "), stdout);
370 fputs (_("\
371 --backup[=CONTROL] make a backup of each existing destination file\n\
372 -b like --backup but does not accept an argument\n\
373 -d, -F, --directory allow the superuser to attempt to hard link\n\
374 directories (note: will probably fail due to\n\
375 system restrictions, even for the superuser)\n\
376 -f, --force remove existing destination files\n\
377 "), stdout);
378 fputs (_("\
379 -n, --no-dereference treat destination that is a symlink to a\n\
380 directory as if it were a normal file\n\
381 -i, --interactive prompt whether to remove destinations\n\
382 -s, --symbolic make symbolic links instead of hard links\n\
383 "), stdout);
384 fputs (_("\
385 -S, --suffix=SUFFIX override the usual backup suffix\n\
386 -t, --target-directory=DIRECTORY specify the DIRECTORY in which to create\n\
387 the links\n\
388 -T, --no-target-directory treat LINK_NAME as a normal file\n\
389 -v, --verbose print name of each linked file\n\
390 "), stdout);
391 fputs (HELP_OPTION_DESCRIPTION, stdout);
392 fputs (VERSION_OPTION_DESCRIPTION, stdout);
393 fputs (_("\
395 The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n\
396 The version control method may be selected via the --backup option or through\n\
397 the VERSION_CONTROL environment variable. Here are the values:\n\
399 "), stdout);
400 fputs (_("\
401 none, off never make backups (even if --backup is given)\n\
402 numbered, t make numbered backups\n\
403 existing, nil numbered if numbered backups exist, simple otherwise\n\
404 simple, never always make simple backups\n\
405 "), stdout);
406 emit_bug_reporting_address ();
408 exit (status);
412 main (int argc, char **argv)
414 int c;
415 bool ok;
416 bool make_backups = false;
417 char *backup_suffix_string;
418 char *version_control_string = NULL;
419 char const *target_directory = NULL;
420 bool no_target_directory = false;
421 int n_files;
422 char **file;
424 initialize_main (&argc, &argv);
425 set_program_name (argv[0]);
426 setlocale (LC_ALL, "");
427 bindtextdomain (PACKAGE, LOCALEDIR);
428 textdomain (PACKAGE);
430 atexit (close_stdin);
432 /* FIXME: consider not calling getenv for SIMPLE_BACKUP_SUFFIX unless
433 we'll actually use backup_suffix_string. */
434 backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
436 symbolic_link = remove_existing_files = interactive = verbose
437 = hard_dir_link = false;
439 while ((c = getopt_long (argc, argv, "bdfinst:vFS:T", long_options, NULL))
440 != -1)
442 switch (c)
444 case 'b':
445 make_backups = true;
446 if (optarg)
447 version_control_string = optarg;
448 break;
449 case 'd':
450 case 'F':
451 hard_dir_link = true;
452 break;
453 case 'f':
454 remove_existing_files = true;
455 interactive = false;
456 break;
457 case 'i':
458 remove_existing_files = false;
459 interactive = true;
460 break;
461 case 'n':
462 dereference_dest_dir_symlinks = false;
463 break;
464 case 's':
465 symbolic_link = true;
466 break;
467 case 't':
468 if (target_directory)
469 error (EXIT_FAILURE, 0, _("multiple target directories specified"));
470 else
472 struct stat st;
473 if (stat (optarg, &st) != 0)
474 error (EXIT_FAILURE, errno, _("accessing %s"), quote (optarg));
475 if (! S_ISDIR (st.st_mode))
476 error (EXIT_FAILURE, 0, _("target %s is not a directory"),
477 quote (optarg));
479 target_directory = optarg;
480 break;
481 case 'T':
482 no_target_directory = true;
483 break;
484 case 'v':
485 verbose = true;
486 break;
487 case 'S':
488 make_backups = true;
489 backup_suffix_string = optarg;
490 break;
491 case_GETOPT_HELP_CHAR;
492 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
493 default:
494 usage (EXIT_FAILURE);
495 break;
499 n_files = argc - optind;
500 file = argv + optind;
502 if (n_files <= 0)
504 error (0, 0, _("missing file operand"));
505 usage (EXIT_FAILURE);
508 if (no_target_directory)
510 if (target_directory)
511 error (EXIT_FAILURE, 0,
512 _("cannot combine --target-directory "
513 "and --no-target-directory"));
514 if (n_files != 2)
516 if (n_files < 2)
517 error (0, 0,
518 _("missing destination file operand after %s"),
519 quote (file[0]));
520 else
521 error (0, 0, _("extra operand %s"), quote (file[2]));
522 usage (EXIT_FAILURE);
525 else if (!target_directory)
527 if (n_files < 2)
528 target_directory = ".";
529 else if (2 <= n_files && target_directory_operand (file[n_files - 1]))
530 target_directory = file[--n_files];
531 else if (2 < n_files)
532 error (EXIT_FAILURE, 0, _("target %s is not a directory"),
533 quote (file[n_files - 1]));
536 if (backup_suffix_string)
537 simple_backup_suffix = xstrdup (backup_suffix_string);
539 backup_type = (make_backups
540 ? xget_version (_("backup type"), version_control_string)
541 : no_backups);
543 if (target_directory)
545 int i;
547 /* Create the data structure we'll use to record which hard links we
548 create. Used to ensure that ln detects an obscure corner case that
549 might result in user data loss. Create it only if needed. */
550 if (2 <= n_files
551 && remove_existing_files
552 /* Don't bother trying to protect symlinks, since ln clobbering
553 a just-created symlink won't ever lead to real data loss. */
554 && ! symbolic_link
555 /* No destination hard link can be clobbered when making
556 numbered backups. */
557 && backup_type != numbered_backups)
560 dest_set = hash_initialize (DEST_INFO_INITIAL_CAPACITY,
561 NULL,
562 triple_hash,
563 triple_compare,
564 triple_free);
565 if (dest_set == NULL)
566 xalloc_die ();
569 ok = true;
570 for (i = 0; i < n_files; ++i)
572 char *dest_base;
573 char *dest = file_name_concat (target_directory,
574 last_component (file[i]),
575 &dest_base);
576 strip_trailing_slashes (dest_base);
577 ok &= do_link (file[i], dest);
578 free (dest);
581 else
582 ok = do_link (file[0], file[1]);
584 exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);