/* pwd.c - Print working directory.
 *
 * Copyright 2006 Rob Landley <rob@landley.net>
 *
 * See http://opengroup.org/onlinepubs/9699919799/utilities/pwd.html

USE_PWD(NEWTOY(pwd, ">0LP[-LP]", TOYFLAG_BIN))

config PWD
  bool "pwd"
  default y
  help
    usage: pwd [-L|-P]

    Print working (current) directory.

    -L	Use shell's path from $PWD (when applicable)
    -P	Print cannonical absolute path
*/

#define FOR_pwd
#include "toys.h"

void pwd_main(void)
{
  char *s, *pwd = getcwd(0, 0), *PWD;

  // Only use $PWD if it's an absolute path alias for cwd with no "." or ".."
  if (!(toys.optflags & FLAG_P) && (s = PWD = getenv("PWD"))) {
    struct stat st1, st2;

    while (*s == '/') {
      if (*(++s) == '.') {
        if (s[1] == '/' || !s[1]) break;
        if (s[1] == '.' && (s[2] == '/' || !s[2])) break;
      }
      while (*s && *s != '/') s++;
    }
    if (!*s && s != PWD) s = PWD;
    else s = NULL;

    // If current directory exists, make sure it matches.
    if (s && pwd)
        if (stat(pwd, &st1) || stat(PWD, &st2) || st1.st_ino != st2.st_ino ||
            st1.st_dev != st2.st_dev) s = NULL;
  } else s = NULL;

  // If -L didn't give us a valid path, use cwd.
  if (!s && !(s = pwd)) perror_exit("xgetcwd");

  xprintf("%s\n", s);

  if (CFG_TOYBOX_FREE) free(pwd);
}
