Commit Graph

30 Commits

Author SHA1 Message Date
Michael Forney
a211649cfd ln: Only fail if same inode without -f flag 2016-07-09 10:17:16 +01:00
sin
2366164de7 No need for semicolon after ARGEND
This is also the style used in Plan 9.
2015-11-01 10:18:55 +00:00
Eivind Uggedal
9e04a4fcdc ln: allow dangling symlinks 2015-06-07 09:09:42 +01:00
FRIGN
78b285deb6 Fix ln(1) symbolic link handling
This was broken in multiple ways. For instance, the overlay-
check of identical files (name and target) was omitted for
symbolic links for some reason.
While at it, I fixed the stat-handling, improved the error-
messages so the right paths were shown and removed the
illegimite bail-out when the target-fstatat failed (we want
only a warning here as well).
2015-05-29 12:08:37 +01:00
Eivind Uggedal
f5f43dbd5b ln: exit non-zero when errors accured 2015-05-08 10:06:58 +01:00
Eivind Uggedal
8f4b2e8689 ln: only check existence of src/to for hardlinks
This allows for creating dangling symlinks with force applied:

    # Before:
    $ ln -sf non-existant target
    ln: stat non-existent: No such file or directory
    $ ls -l target
    ls: lstat target: No such file or directory

    # After:
    $ ln -sf non-existant target
    $ ls -l target
    lrwxrwxrwx    1 eu    users   12 May 08 07:50 target -> non-existent

This also allows creating relative non-dangling symlinks with force applied:

    touch existant; mkdir dir

    # Before
    $ ln -sf ../existant dir
    ln: stat ../existant: No such file or directory
    $ ls -l dir

    # After
    $ ln -sf ../existant dir
    $ ls -l dir
    lrwxrwxrwx    1 eu    users   11 May 08 07:53 existant -> ../existant

The check for whether each src and to pairs are on the same device with the
same inode are only needed for hardlinks so that a forcefull link does
not remove the underlying file:

    touch f; mkdir dir

    # Before:
    $ ln -f f f dir
    ln: f and f are the same file
    $ ls -i f dir/f
    3670611 dir/f
    3670611 f

    # After:
    $ ln -f f f dir
    ln: f and f are the same file
    $ ls -i f dir/f
    4332236 dir/f
    4332236 f
2015-05-08 10:06:58 +01:00
FRIGN
ab26b5583e Audit ln(1)
1) Clarify behaviour when the f-flag is given and a target is in its
   own way.
2) Fix usage()-style.
3) Group local variable declarations.
4) reorder args
5) argc style, other boolean style changes
6) improve error messages
7) set argv[argc - 1] to NULL to allow argv-centric loop later
8) BUGFIX: POSIX specifies that when with the f-flag there's a
   situation where a file stands in its own way for linking it
   should be ignored.
9) Add weprintf() where possible, so we don't pussy out when there's
   a small issue. This is sbase ffs!
2015-03-05 21:14:43 +01:00
FRIGN
31572c8b0e Clean up #includes 2015-02-14 21:12:23 +01:00
Hiltjo Posthuma
0e01a2db9b ln: usage, just use %s 2015-01-31 15:23:59 +01:00
FRIGN
00e7f4e38a Add mandoc-manpage for ln(1)
and mark it as finished in the README.
2015-01-26 14:54:22 +01:00
sin
d475a6bdf2 Handle ln -sf a foo/ correctly
Previously it would not delete foo/a if it already existed.  Use
unlinkat() instead to do that.
2015-01-22 16:26:30 +00:00
Michael Forney
94ef670b27 ln: Add support for target directories
Also, now that we are using {sym,}linkat, implement the trivial -L and
-P options.
2014-11-23 20:58:15 +00:00
FRIGN
ec8246bbc6 Un-boolify sbase
It actually makes the binaries smaller, the code easier to read
(gems like "val == true", "val == false" are gone) and actually
predictable in the sense of that we actually know what we're
working with (one bitwise operator was quite adventurous and
should now be fixed).

This is also more consistent with the other suckless projects
around which don't use boolean types.
2014-11-14 10:54:20 +00:00
FRIGN
eee98ed3a4 Fix coding style
It was about damn time. Consistency is very important in such a
big codebase.
2014-11-13 18:08:43 +00:00
sin
353ac69a93 Fix a completely broken ln(1) 2014-10-17 16:08:16 +01:00
sin
0c5b7b9155 Stop using EXIT_{SUCCESS,FAILURE} 2014-10-02 23:46:59 +01:00
Hiltjo Posthuma
81bb8422a5 ln: allow with one argument
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
2014-07-21 16:44:06 +01:00
Hiltjo Posthuma
953ebf3573 code style
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
2014-06-01 18:02:30 +01:00
sin
c6f59aadbd Simplify ln(1) 2014-02-17 11:44:18 +00:00
sin
7309302e25 Don't check remove() return value 2014-02-14 11:49:39 +00:00
sin
ac47a21b9b Don't complain if we use -f in ln(1) 2014-02-14 11:25:12 +00:00
sin
b5a511dacf Exit with EXIT_SUCCESS/EXIT_FAILURE instead of 0 and 1
Fixed for consistency purposes.
2013-10-07 16:44:22 +01:00
stateless
7216a53a7e Remove unnecessary exit(1) in usage()
Signed-off-by: Christoph Lohmann <20h@r-36.net>
2013-06-19 19:58:19 +02:00
Christoph Lohmann
4d38f60685 Eliminating the getopt disgrace. 2013-06-14 20:20:47 +02:00
Connor Lane Smith
807d45aa80 ln: try link first 2011-06-22 23:45:03 +01:00
Connor Lane Smith
d90ced2047 consistent error check 2011-06-04 12:20:41 +01:00
Connor Lane Smith
e565522068 ln -f 2011-06-04 02:56:18 +01:00
Connor Lane Smith
f458397d5a no, getopt.h is gnu specific 2011-05-24 18:58:36 +01:00
pancake
da547fb294 add missing #include <getopt.h>
do not override CC in config.mk
2011-05-24 14:34:26 +02:00
Connor Lane Smith
fbb80983ce add ln, util.a 2011-05-24 13:00:30 +01:00