Changeset 3232 in MondoRescue for branches/3.2/mindi-busybox/coreutils/ln.c


Ignore:
Timestamp:
Jan 1, 2014, 12:47:38 AM (10 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.21.1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/coreutils/ln.c

    r2725 r3232  
    1212/* http://www.opengroup.org/onlinepubs/007904975/utilities/ln.html */
    1313
     14//usage:#define ln_trivial_usage
     15//usage:       "[OPTIONS] TARGET... LINK|DIR"
     16//usage:#define ln_full_usage "\n\n"
     17//usage:       "Create a link LINK or DIR/TARGET to the specified TARGET(s)\n"
     18//usage:     "\n    -s  Make symlinks instead of hardlinks"
     19//usage:     "\n    -f  Remove existing destinations"
     20//usage:     "\n    -n  Don't dereference symlinks - treat like normal file"
     21//usage:     "\n    -b  Make a backup of the target (if exists) before link operation"
     22//usage:     "\n    -S suf  Use suffix instead of ~ when making backup files"
     23//usage:     "\n    -T  2nd arg must be a DIR"
     24//usage:     "\n    -v  Verbose"
     25//usage:
     26//usage:#define ln_example_usage
     27//usage:       "$ ln -s BusyBox /tmp/ls\n"
     28//usage:       "$ ls -l /tmp/ls\n"
     29//usage:       "lrwxrwxrwx    1 root     root            7 Apr 12 18:39 ls -> BusyBox*\n"
     30
    1431#include "libbb.h"
    1532
     
    1734
    1835
    19 #define LN_SYMLINK          1
    20 #define LN_FORCE            2
    21 #define LN_NODEREFERENCE    4
    22 #define LN_BACKUP           8
    23 #define LN_SUFFIX           16
     36#define LN_SYMLINK          (1 << 0)
     37#define LN_FORCE            (1 << 1)
     38#define LN_NODEREFERENCE    (1 << 2)
     39#define LN_BACKUP           (1 << 3)
     40#define LN_SUFFIX           (1 << 4)
     41#define LN_VERBOSE          (1 << 5)
     42#define LN_LINKFILE         (1 << 6)
    2443
    2544int ln_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
     
    3655
    3756    opt_complementary = "-1"; /* min one arg */
    38     opts = getopt32(argv, "sfnbS:", &suffix);
     57    opts = getopt32(argv, "sfnbS:vT", &suffix);
    3958
    4059    last = argv[argc - 1];
    4160    argv += optind;
     61    argc -= optind;
    4262
    43     if (argc == optind + 1) {
     63    if ((opts & LN_LINKFILE) && argc > 2) {
     64        bb_error_msg_and_die("-T accepts 2 args max");
     65    }
     66
     67    if (!argv[1]) {
     68        /* "ln PATH/TO/FILE" -> "ln PATH/TO/FILE FILE" */
    4469        *--argv = last;
     70        /* xstrdup is needed: "ln -s PATH/TO/FILE/" is equivalent to
     71         * "ln -s PATH/TO/FILE/ FILE", not "ln -s PATH/TO/FILE FILE"
     72         */
    4573        last = bb_get_last_path_component_strip(xstrdup(last));
    4674    }
     
    5179
    5280        if (is_directory(src,
    53                         (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE,
    54                         NULL)
     81                        (opts & LN_NODEREFERENCE) ^ LN_NODEREFERENCE
     82                        )
    5583        ) {
     84            if (opts & LN_LINKFILE) {
     85                bb_error_msg_and_die("'%s' is a directory", src);
     86            }
    5687            src_name = xstrdup(*argv);
    5788            src = concat_path_file(src, bb_get_last_path_component_strip(src_name));
     
    94125        }
    95126
     127        if (opts & LN_VERBOSE) {
     128            printf("'%s' -> '%s'\n", src, *argv);
     129        }
     130
    96131        if (link_func(*argv, src) != 0) {
    97132            bb_simple_perror_msg(src);
Note: See TracChangeset for help on using the changeset viewer.