diff options
-rw-r--r-- | shell/msh.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/shell/msh.c b/shell/msh.c index a2da540b3..968f073cd 100644 --- a/shell/msh.c +++ b/shell/msh.c | |||
@@ -3157,12 +3157,15 @@ static int dochdir(struct op *t) | |||
3157 | cp = t->words[1]; | 3157 | cp = t->words[1]; |
3158 | if (cp == NULL) { | 3158 | if (cp == NULL) { |
3159 | cp = homedir->value; | 3159 | cp = homedir->value; |
3160 | if (cp == NULL) | 3160 | if (cp != NULL) |
3161 | er = ": no home directory"; | 3161 | goto do_cd; |
3162 | } else if (chdir(cp) < 0) | 3162 | er = ": no home directory"; |
3163 | } else { | ||
3164 | do_cd: | ||
3165 | if (chdir(cp) >= 0) | ||
3166 | return 0; | ||
3163 | er = ": bad directory"; | 3167 | er = ": bad directory"; |
3164 | else | 3168 | } |
3165 | return 0; | ||
3166 | prs(cp != NULL ? cp : "cd"); | 3169 | prs(cp != NULL ? cp : "cd"); |
3167 | err(er); | 3170 | err(er); |
3168 | return 1; | 3171 | return 1; |