readlink.c - sbase - suckless unix tools
(HTM) git clone git://git.suckless.org/sbase
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
readlink.c (846B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <limits.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <unistd.h>
7
8 #include "util.h"
9
10 static void
11 usage(void)
12 {
13 eprintf("usage: %s [-fn] path\n", argv0);
14 }
15
16 int
17 main(int argc, char *argv[])
18 {
19 char buf[PATH_MAX];
20 ssize_t n;
21 int nflag = 0, fflag = 0;
22
23 ARGBEGIN {
24 case 'f':
25 fflag = ARGC();
26 break;
27 case 'n':
28 nflag = 1;
29 break;
30 default:
31 usage();
32 } ARGEND
33
34 if (argc != 1)
35 usage();
36
37 if (strlen(argv[0]) >= PATH_MAX)
38 eprintf("path too long\n");
39
40 if (fflag) {
41 if (!realpath(argv[0], buf))
42 eprintf("realpath %s:", argv[0]);
43 } else {
44 if ((n = readlink(argv[0], buf, PATH_MAX - 1)) < 0)
45 eprintf("readlink %s:", argv[0]);
46 buf[n] = '\0';
47 }
48
49 fputs(buf, stdout);
50 if (!nflag)
51 putchar('\n');
52
53 return fshut(stdout, "<stdout>");
54 }