123186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley/* pwdx.c - report current directory of a process.
223186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley *
323186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley * Copyright 2013 Lukasz Skalski <l.skalski@partner.samsung.com>
423186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley
523186636fcb261d263f417e605cbe8b7e2103ca5Rob LandleyUSE_PWDX(NEWTOY(pwdx, "<1a", TOYFLAG_USR|TOYFLAG_BIN))
623186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley
723186636fcb261d263f417e605cbe8b7e2103ca5Rob Landleyconfig PWDX
823186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley  bool "pwdx"
923186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley  default y
1023186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley  help
117f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    usage: pwdx PID...
127f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley
137f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    Print working directory of processes listed on command line.
1423186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley*/
1523186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley
1623186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley#include "toys.h"
1723186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley
1823186636fcb261d263f417e605cbe8b7e2103ca5Rob Landleyvoid pwdx_main(void)
1923186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley{
206db8529a785e2cab142e840b6e3fbdcc2c02dd1fRob Landley  char **optargs;
216db8529a785e2cab142e840b6e3fbdcc2c02dd1fRob Landley
226db8529a785e2cab142e840b6e3fbdcc2c02dd1fRob Landley  for (optargs = toys.optargs; *optargs; optargs++) {
237f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    char *path;
247f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    int num_bytes;
257f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley
2659d85e2bb065a3bdc27868acb7a65f89d872c7faRob Landley    path = xmprintf("/proc/%s/cwd", *optargs);
277f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    num_bytes = readlink(path, toybuf, sizeof(toybuf)-1);
287f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    free(path);
297f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley
307f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    if (num_bytes==-1) {
317f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley      path = strerror(errno);
327f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley      toys.exitval = 1;
337f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    } else {
347f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley      path = toybuf;
357f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley      toybuf[num_bytes] = 0;
367f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley    }
376db8529a785e2cab142e840b6e3fbdcc2c02dd1fRob Landley    xprintf("%s: %s\n", *optargs, path);
387f8f9ec5113bff8c0f7bd3e9341b688d8af91258Rob Landley  }
3923186636fcb261d263f417e605cbe8b7e2103ca5Rob Landley}
40