source: MondoRescue/branches/3.3/mindi-busybox/procps/pwdx.c@ 3909

Last change on this file since 3909 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

  • Property svn:eol-style set to native
File size: 1.4 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * pwdx implementation for busybox
4 *
5 * Copyright (c) 2004 Nicholas Miell
6 * ported from procps by Pere Orga <gotrunks@gmail.com> 2011
7 *
8 * Licensed under GPLv2, see file LICENSE in this source tree.
9 */
10
11//config:config PWDX
12//config: bool "pwdx"
13//config: default y
14//config: help
15//config: Report current working directory of a process
16
17//applet:IF_PWDX(APPLET(pwdx, BB_DIR_USR_BIN, BB_SUID_DROP))
18
19//kbuild:lib-$(CONFIG_PWDX) += pwdx.o
20
21//usage:#define pwdx_trivial_usage
22//usage: "PID..."
23//usage:#define pwdx_full_usage "\n\n"
24//usage: "Show current directory for PIDs"
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 // Allowed on the command line:
42 // /proc/NUM
43 // NUM
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 // "pwdx /proc/1" says "/proc/1: DIR", not "1: DIR"
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}
Note: See TracBrowser for help on using the repository browser.