diff --git a/src/cmd/ksh93/include/defs.h b/src/cmd/ksh93/include/defs.h index 32e09b4e7..1ce6fbc97 100644 --- a/src/cmd/ksh93/include/defs.h +++ b/src/cmd/ksh93/include/defs.h @@ -400,6 +400,7 @@ extern void *sh_realloc(void *ptr, size_t size); extern void *sh_calloc(size_t nmemb, size_t size); extern char *sh_strdup(const char *s); extern void *sh_memdup(const void *s, size_t n); +extern char *sh_getcwd(void); #define new_of(type,x) ((type*)sh_malloc((unsigned)sizeof(type)+(x))) #define sh_newof(p,t,n,x) ((p)?(t*)sh_realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)sh_calloc(1,sizeof(t)*(n)+(x))) diff --git a/src/cmd/ksh93/sh/init.c b/src/cmd/ksh93/sh/init.c index 4543dda93..e3fa657af 100644 --- a/src/cmd/ksh93/sh/init.c +++ b/src/cmd/ksh93/sh/init.c @@ -271,6 +271,14 @@ void *sh_memdup(const void *s, size_t n) return(dup); } +char *sh_getcwd(void) +{ + char *cwd = getcwd(NIL(char*), 0); + if(!cwd && errno==ENOMEM) + nomemory(0); + return(cwd); +} + #if SHOPT_VSH || SHOPT_ESH /* Trap for VISUAL and EDITOR variables */ static void put_ed(register Namval_t* np,const char *val,int flags,Namfun_t *fp) diff --git a/src/cmd/ksh93/sh/path.c b/src/cmd/ksh93/sh/path.c index eb18d8cf8..796c772af 100644 --- a/src/cmd/ksh93/sh/path.c +++ b/src/cmd/ksh93/sh/path.c @@ -262,7 +262,7 @@ char *path_pwd(Shell_t *shp,int flag) if(!(cp && *cp=='/' && test_inode(cp,e_dot))) { /* Get physical PWD (no symlinks) using getcwd(3), fall back to "." */ - cp = getcwd(NIL(char*),0); + cp = sh_getcwd(); if(!cp) return((char*)e_dot); tofree++;