aboutsummaryrefslogtreecommitdiff
path: root/src/lsh_builtins.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lsh_builtins.c')
-rw-r--r--src/lsh_builtins.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/lsh_builtins.c b/src/lsh_builtins.c
index dda49c4..51a44cd 100644
--- a/src/lsh_builtins.c
+++ b/src/lsh_builtins.c
@@ -40,6 +40,7 @@ int lsh_num_builtins() {
/*
Builtin function implementations.
*/
+#define LSH_CWD_BUF_SIZE 1024;
int lsh_cd(char **args)
{
if (args[1] == NULL) {
@@ -49,8 +50,14 @@ int lsh_cd(char **args)
if (err != 0) {
perror("lsh");
}
- char *cwd=(char*)malloce(sizeof(char)*4096);
- getcwd(cwd,sizeof(char*)*4096);
+
+ int bufsize=LSH_CWD_BUF_SIZE;
+ char *cwd=(char*)malloce(sizeof(char)*bufsize+1);
+ while(getcwd(cwd,sizeof(char)*bufsize)==NULL){
+ bufsize += LSH_CWD_BUF_SIZE;
+ cwd=(char*)realloce(cwd,sizeof(char)*bufsize+1);
+ }
+
setenv("PWD",cwd,1);
free(cwd);
}