diff options
Diffstat (limited to 'core/ln.c')
-rw-r--r-- | core/ln.c | 28 |
1 files changed, 13 insertions, 15 deletions
@@ -27,21 +27,19 @@ int main(int argc, char *const argv[]) { } param[argument] = argument; } argc -= optind; argv += optind; - for (int i = 0; i < (argc - 1); i++) { - if (param['f']) remove(argv[argc - 1]); - if (errno && errno != ENOENT) return errprint(argv0, argv[i], errno); - errno = 0; /* Not reached if errno == ENOENT (no such file) */ - if (param['s']) symlink(argv[i], argv[argc - 1]); - /* The -P option is the default behavior (at least on musl), - * so no if statement. - */ - else if (param['L']) { - readlink(argv[i], buffer, strlen(buffer)); /* Read the link */ - if (errno) return errprint(argv0, argv[i], errno); - link(buffer, argv[argc - 1]); - } - else link(argv[i], argv[argc - 1]); - if (errno) return errprint(argv0, argv[i], errno); + if (param['f']) remove(argv[1]); + if (errno && errno != ENOENT) return errprint(argv0, argv[0], errno); + errno = 0; /* Not reached if errno == ENOENT (no such file) */ + if (param['s']) symlink(argv[0], argv[1]); + /* The -P option is the default behavior (at least on musl), + * so no if statement. + */ + else if (param['L']) { + readlink(argv[0], buffer, strlen(buffer)); /* Read the link */ + if (errno) return errprint(argv0, argv[0], errno); + link(buffer, argv[1]); } + else link(argv[0], argv[1]); + if (errno) return errprint(argv0, argv[1], errno); return 0; } |