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

Last change on this file since 7c410f9 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
RevLine 
[c5c522c]1From: Ben Hutchings <ben@decadent.org.uk>
2Date: Sat, 27 Sep 2014 15:18:21 +0100
3Subject: readlink: Add -f option
4Bug-Debian: https://bugs.debian.org/763049
5Forwarded: http://www.zytor.com/pipermail/klibc/2016-January/003886.html
6
7This is needed to support mounting non-root filesystems in
8initramfs-tools.
9
10Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
11---
12--- a/usr/utils/readlink.c
13+++ b/usr/utils/readlink.c
14@@ -7,24 +7,45 @@ const char *progname;
15 
16 static __noreturn usage(void)
17 {
18-       fprintf(stderr, "Usage: %s link...\n", progname);
19+       fprintf(stderr, "Usage: %s [-f] link...\n", progname);
20        exit(1);
21 }
22 
23 int main(int argc, char *argv[])
24 {
25+       int c, f_flag = 0;
26        const char *name;
27        char link_name[PATH_MAX];
28        int rv;
29        int i;
30 
31-       progname = *argv++;
32+       progname = argv[0];
33 
34-       if (argc < 2)
35+       do {
36+               c = getopt(argc, argv, "f");
37+               if (c == EOF)
38+                       break;
39+               switch (c) {
40+               case 'f':
41+                       f_flag = 1;
42+                       break;
43+
44+               case '?':
45+                       fprintf(stderr, "%s: invalid option -%c\n",
46+                               progname, optopt);
47+                       usage();
48+               }
49+       } while (1);
50+
51+       if (optind == argc)
52                usage();
53 
54+       argv += optind;
55        while ((name = *argv++)) {
56-               rv = readlink(name, link_name, sizeof link_name - 1);
57+               if (f_flag)
58+                       rv = realpath(name, link_name) ? strlen(link_name) : -1;
59+               else
60+                       rv = readlink(name, link_name, sizeof link_name - 1);
61                if (rv < 0) {
62                        perror(name);
63                        exit(1);
Note: See TracBrowser for help on using the repository browser.