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#include "libbb.h"
26
27int pwdx_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
28int pwdx_main(int argc UNUSED_PARAM, char **argv)
29{
30 getopt32(argv, "^" "" "\0" "-1");
31 argv += optind;
32
33 do {
34 char buf[sizeof("/proc/%u/cwd") + sizeof(int)*3];
35 unsigned pid;
36 char *s;
37 char *arg = *argv;
38
39
40
41
42 if (is_prefixed_with(arg, "/proc/"))
43 arg += 6;
44
45 pid = bb_strtou(arg, NULL, 10);
46 if (errno)
47 bb_error_msg_and_die("invalid process id: '%s'", arg);
48
49 sprintf(buf, "/proc/%u/cwd", pid);
50
51
52 s = xmalloc_readlink(buf);
53
54 printf("%s: %s\n", *argv, s ? s : strerror(errno == ENOENT ? ESRCH : errno));
55 free(s);
56 } while (*++argv);
57
58 return EXIT_SUCCESS;
59}
60