source: npl/system/klibc/patches/readlink-add-f-option.patch @ c5c522c

gcc484ntopperl-5.22
Last change on this file since c5c522c was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100644
File size: 1.3 KB
  • usr/utils/readlink.c

    From: Ben Hutchings <ben@decadent.org.uk>
    Date: Sat, 27 Sep 2014 15:18:21 +0100
    Subject: readlink: Add -f option
    Bug-Debian: https://bugs.debian.org/763049
    Forwarded: http://www.zytor.com/pipermail/klibc/2016-January/003886.html
    
    This is needed to support mounting non-root filesystems in
    initramfs-tools.
    
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    a b const char *progname; 
    77
    88static __noreturn usage(void)
    99{
    10         fprintf(stderr, "Usage: %s link...\n", progname);
     10        fprintf(stderr, "Usage: %s [-f] link...\n", progname);
    1111        exit(1);
    1212}
    1313
    1414int main(int argc, char *argv[])
    1515{
     16        int c, f_flag = 0;
    1617        const char *name;
    1718        char link_name[PATH_MAX];
    1819        int rv;
    1920        int i;
    2021
    21         progname = *argv++;
     22        progname = argv[0];
    2223
    23         if (argc < 2)
     24        do {
     25                c = getopt(argc, argv, "f");
     26                if (c == EOF)
     27                        break;
     28                switch (c) {
     29                case 'f':
     30                        f_flag = 1;
     31                        break;
     32
     33                case '?':
     34                        fprintf(stderr, "%s: invalid option -%c\n",
     35                                progname, optopt);
     36                        usage();
     37                }
     38        } while (1);
     39
     40        if (optind == argc)
    2441                usage();
    2542
     43        argv += optind;
    2644        while ((name = *argv++)) {
    27                 rv = readlink(name, link_name, sizeof link_name - 1);
     45                if (f_flag)
     46                        rv = realpath(name, link_name) ? strlen(link_name) : -1;
     47                else
     48                        rv = readlink(name, link_name, sizeof link_name - 1);
    2849                if (rv < 0) {
    2950                        perror(name);
    3051                        exit(1);
Note: See TracBrowser for help on using the repository browser.