1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#include "libbb.h"
27
28int pwdx_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
29int pwdx_main(int argc UNUSED_PARAM, char **argv)
30{
31 opt_complementary = "-1";
32 getopt32(argv, "");
33 argv += optind;
34
35 do {
36 char buf[sizeof("/proc/%u/cwd") + sizeof(int)*3];
37 unsigned pid;
38 char *s;
39 char *arg = *argv;
40
41
42
43
44 if (is_prefixed_with(arg, "/proc/"))
45 arg += 6;
46
47 pid = bb_strtou(arg, NULL, 10);
48 if (errno)
49 bb_error_msg_and_die("invalid process id: '%s'", arg);
50
51 sprintf(buf, "/proc/%u/cwd", pid);
52
53 s = xmalloc_readlink(buf);
54
55 printf("%s: %s\n", *argv, s ? s : strerror(errno == ENOENT ? ESRCH : errno));
56 free(s);
57 } while (*++argv);
58
59 return EXIT_SUCCESS;
60}
61