From 11f485cf774e0ed92e986cb8acdfb03ce8f97359 Mon Sep 17 00:00:00 2001 From: Enrico Fraccaroli Date: Fri, 17 Dec 2021 00:49:17 +0100 Subject: [PATCH] Fix login. --- mentos/src/fs/ext2.c | 2 +- programs/login.c | 4 ++-- programs/shell.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mentos/src/fs/ext2.c b/mentos/src/fs/ext2.c index 17b46b0..468580c 100644 --- a/mentos/src/fs/ext2.c +++ b/mentos/src/fs/ext2.c @@ -1488,7 +1488,7 @@ static vfs_file_t *ext2_open(const char *path, int flags, mode_t mode) } ext2_dirent_t direntry; memset(&direntry, 0, sizeof(ext2_dirent_t)); - if (ext2_resolve_path(sb_root, absolute_path, &direntry)) { + if (ext2_resolve_path(sb_root, absolute_path, &direntry) == -1) { pr_err("ext2_open(%s): Failed to find path `%s`.\n", path, absolute_path); return NULL; } diff --git a/programs/login.c b/programs/login.c index c1685e4..b0853be 100644 --- a/programs/login.c +++ b/programs/login.c @@ -137,8 +137,8 @@ static inline int setup_env(passwd_t *pwd) printf( "Failed to set env: `SHELL`\n"); return 0; } - sprintf(env_buffer, "/home/%s", pwd->pw_name); - if (setenv("HOME", env_buffer, 0) == -1) { + // Set the HOME. + if (setenv("HOME", pwd->pw_dir, 0) == -1) { printf("Failed to set env: `HOME`\n"); return 0; } diff --git a/programs/shell.c b/programs/shell.c index 24c70ad..77cf2d5 100644 --- a/programs/shell.c +++ b/programs/shell.c @@ -332,7 +332,7 @@ static int __cd(int argc, char *argv[]) return 1; } // Set current working directory. - fchdir(fd); + chdir(path); close(fd); // Get the updated working directory. char cwd[PATH_MAX];