Lines Matching refs:shp

69     Shell_t *shp = context->shp;  in b_cd()  local
75 int dirfd = shp->pwdfd; in b_cd()
79 if (sh_isoption(shp, SH_RESTRICTED)) { in b_cd()
88 builtin_print_help(shp, cmd); in b_cd()
111 builtin_missing_argument(shp, cmd, argv[optget_ind - 1]); in b_cd()
115 builtin_unknown_option(shp, cmd, argv[optget_ind - 1]); in b_cd()
126 builtin_usage_error(shp, cmd, "Too many arguments (expected at most two args)"); in b_cd()
129 shp->pwd = path_pwd(shp); in b_cd()
130 oldpwd = (char *)shp->pwd; in b_cd()
131 opwdnod = (shp->subshell ? sh_assignok(VAR_OLDPWD, 1) : VAR_OLDPWD); in b_cd()
132 pwdnod = (shp->subshell ? sh_assignok(VAR_PWD, 1) : VAR_PWD); in b_cd()
133 if (dirfd != shp->pwdfd && dir == 0) dir = (char *)e_dot; in b_cd()
135 dir = sh_substitute(shp, oldpwd, dir, argv[1]); in b_cd()
141 dir = FETCH_VT(sh_scoped(shp, opwdnod)->nvalue, cp); in b_cd()
151 if (dirfd == shp->pwdfd && *dir != '/') in b_cd()
154 cdpath = shp->cdpathlist; in b_cd()
156 dp = FETCH_VT(sh_scoped(shp, VAR_CDPATH)->nvalue, const_cp); in b_cd()
158 cdpath = path_addpath(shp, NULL, dp, PATH_CDPATH); in b_cd()
160 shp->cdpathlist = cdpath; in b_cd()
161 cdpath->shp = shp; in b_cd()
165 if (!oldpwd) oldpwd = path_pwd(shp); in b_cd()
167 if (dirfd == shp->pwdfd && *dir != '/') { in b_cd()
171 j = sfprintf(shp->strbuf, "%s", dir); in b_cd()
172 cp = sfstruse(shp->strbuf); in b_cd()
175 if (!shp->strbuf2) shp->strbuf2 = sfstropen(); in b_cd()
176 j = sfprintf(shp->strbuf2, "%s/%s", oldpwd, cp); in b_cd()
177 dir = sfstruse(shp->strbuf2); in b_cd()
184 cdpath = path_nextcomp(shp, cdpath, dir, 0); in b_cd()
191 if (*stkptr(stkstd, PATH_OFFSET) != '/' && dirfd == shp->pwdfd) { in b_cd()
209 newdirfd = sh_diropenat(shp, dirfd, path_relative(shp, stkptr(stkstd, PATH_OFFSET))); in b_cd()
214 if (shp->pwdfd >= 0) sh_close(shp->pwdfd); in b_cd()
215 shp->pwdfd = newdirfd; in b_cd()
223 rval = sh_chdir(path_relative(shp, stkptr(stkstd, PATH_OFFSET))); in b_cd()
224 if (rval >= 0 && shp->pwdfd >= 0) { in b_cd()
225 sh_close(shp->pwdfd); in b_cd()
226 shp->pwdfd = AT_FDCWD; in b_cd()
233 if (rval < 0 && *dir == '/' && *(path_relative(shp, stkptr(stkstd, PATH_OFFSET))) != '/') { in b_cd()
234 rval = newdirfd = sh_diropenat(shp, shp->pwdfd, dir); in b_cd()
239 if (shp->pwdfd >= 0) sh_close(shp->pwdfd); in b_cd()
240 shp->pwdfd = newdirfd; in b_cd()
246 else if (sh_chdir(dir) >= 0 && shp->pwdfd >= 0) { in b_cd()
247 sh_close(shp->pwdfd); in b_cd()
248 shp->pwdfd = AT_FDCWD; in b_cd()
260 scoped_dir = FETCH_VT(sh_scoped(shp, opwdnod)->nvalue, cp); in b_cd()
288 shp->pwd = FETCH_VT(pwdnod->nvalue, const_cp); in b_cd()
289 nv_scan(shp->track_tree, invalidate, NULL, NV_TAGGED, NV_TAGGED); in b_cd()
290 path_newdir(shp, shp->pathlist); in b_cd()
291 path_newdir(shp, shp->cdpathlist); in b_cd()