3 Copyright 2020 Zhang Maiyun.
5 This file is part of Psh, P shell.
7 Psh is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 Psh is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <https://www.gnu.org/licenses/>.
31 #include "libpsh/util.h"
32 #include "libpsh/xmalloc.h"
35 int builtin_pwd(int argc
, char **argv
, psh_state
*state
)
39 /* Ignore any args after [1]
40 unless it is started by '-' as in bash */
43 for (arg_count
= 1; argv
[arg_count
] && argv
[arg_count
][0] == '-';
46 switch (argv
[arg_count
][1])
53 default: /* Invalid option */
54 OUT2E("%s: %s: -%c: invalid option\n", state
->argv0
,
55 argv
[0], argv
[arg_count
][1]);
60 if (!flag
) /* No -P */
62 char *path
= (char *)psh_vf_getstr(state
, "PWD"), *p
;
64 if (!path
|| path
[0] != '/')
67 while ((p
= strstr(p
, "/.")))
69 if (!p
[2] || p
[2] == '/' || (p
[2] == '.' && (!p
[3] || p
[3] == '/')))
77 path
= psh_backend_getcwd_dm();