From fe6fb1d84fedd36dbe0bc21f196f8dcc4bac117f Mon Sep 17 00:00:00 2001 From: Fnux Date: Fri, 29 Jun 2018 20:35:58 +0200 Subject: [PATCH] Better handling of the creation of LY_CFG_SAVE and normalization of exit codes (#35) * Handle the creation of LY_CFG_SAVE before ncurses initialization * Normalize exit codes --- src/lang.h | 5 +++-- src/login.c | 10 +++++----- src/main.c | 20 ++++++++++++++------ src/ncui.c | 4 +--- src/utils.c | 6 +++--- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/lang.h b/src/lang.h index c4f8412..c686237 100644 --- a/src/lang.h +++ b/src/lang.h @@ -13,8 +13,9 @@ #define LY_LANG_PASSWORD "password : " /* ioctl */ -#define LY_ERR_FD "Failed to create the console file descriptor" -#define LY_ERR_FD_ADVICE "(ly probably wasn't run with enough privileges)" +#define LY_ERR_FD_CONSOLE "Failed to create the console file descriptor" +#define LY_ERR_FD_CONSOLE_ADVICE "(ly probably wasn't run with enough privileges)" +#define LY_ERR_FD_CFG_SAVE "Failed to create the config file" /* pam */ #define LY_ERR_PAM_BUF "Memory buffer error" diff --git a/src/login.c b/src/login.c index 9fe9b3a..dc6cdf7 100644 --- a/src/login.c +++ b/src/login.c @@ -370,7 +370,7 @@ const char* de_command, enum deserv_t display_server) break; } - exit(0); + exit(EXIT_SUCCESS); } /* waits for the de/shell to exit */ @@ -477,7 +477,7 @@ int xinitrc) if(child == 0) { execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL); - exit(0); + exit(EXIT_SUCCESS); } waitpid(child, &status, 0); @@ -489,7 +489,7 @@ int xinitrc) de_command, LY_CMD_X, display_name, vt, getenv("XAUTHORITY")); execve(pwd->pw_shell, argv, environ); - exit(0); + exit(EXIT_SUCCESS); } void launch_wayland(struct passwd* pwd, pam_handle_t* pam_handle, @@ -507,7 +507,7 @@ void launch_shell(struct passwd* pwd, pam_handle_t* pam_handle) strncpy(args + 1, ((pos = strrchr(pwd->pw_shell, '/')) ? pos + 1 : pwd->pw_shell), sizeof(args) - 1); execl(pwd->pw_shell, args, NULL); - exit(0); + exit(EXIT_SUCCESS); } void destroy_env(void) @@ -594,7 +594,7 @@ void reset_terminal(struct passwd* pwd) if(pid == 0) { execl(pwd->pw_shell, pwd->pw_shell, "-c", cmd, NULL); - exit(0); + exit(EXIT_SUCCESS); } waitpid(pid, &status, 0); diff --git a/src/main.c b/src/main.c index 700e7eb..5ce9f0c 100644 --- a/src/main.c +++ b/src/main.c @@ -58,11 +58,20 @@ int main(void) if(!console) { - fprintf(stderr, "%s\n", LY_ERR_FD); - fprintf(stderr, "%s\n", LY_ERR_FD_ADVICE); - return 0; + fprintf(stderr, "%s\n", LY_ERR_FD_CONSOLE); + fprintf(stderr, "%s\n", LY_ERR_FD_CONSOLE_ADVICE); + return EXIT_FAILURE; } + /* create LY_CFG_SAVE if it doesn't exist yet */ + FILE* cfg_save = fopen(LY_CFG_SAVE, "ab+"); + if (!cfg_save) + { + fprintf(stderr, "%s: %s\n", LY_ERR_FD_CFG_SAVE, LY_CFG_SAVE); + return EXIT_FAILURE; + } + fclose(cfg_save); + kernel_log(0); /* initializes ncurses UI */ init_ncurses(console); @@ -102,8 +111,7 @@ int main(void) /* saves the username and DE if enabled */ if(LY_CFG_WRITE_SAVE) { - FILE* file = fopen(LY_CFG_SAVE, "ab+"); - file = fopen(LY_CFG_SAVE, "wb"); + FILE* file = fopen(LY_CFG_SAVE, "wb"); fprintf(file, "%s\n%d", username, de_id); fclose(file); } @@ -209,5 +217,5 @@ int main(void) free_list(de_list); end_form(&form); endwin(); - return 0; + return EXIT_SUCCESS; } diff --git a/src/ncui.c b/src/ncui.c index 70f4c63..568d7a1 100644 --- a/src/ncui.c +++ b/src/ncui.c @@ -40,9 +40,7 @@ void init_form(struct ncform* form, char** list, int max_de, int* de_id) char line[LY_LIM_LINE_FILE]; char user[LY_LIM_LINE_FILE]; int de; - /* creates the file if it can't be found */ - file = fopen(LY_CFG_SAVE, "ab+"); - fclose(file); + /* opens the file */ file = fopen(LY_CFG_SAVE, "rb"); memset(user, '\0', LY_LIM_LINE_FILE); diff --git a/src/utils.c b/src/utils.c index 9214db7..1f6393f 100644 --- a/src/utils.c +++ b/src/utils.c @@ -22,7 +22,7 @@ void kernel_log(int mode) pid = fork(); if(pid < 0) { perror("fork"); - exit(1); + exit(EXIT_FAILURE); } if(pid == 0) @@ -37,12 +37,12 @@ void kernel_log(int mode) } /* execl should not return */ perror("execl"); - exit(1); + exit(EXIT_FAILURE); } waitpid(pid, &status, 0); if(!WIFEXITED(status) || WEXITSTATUS(status)) - exit(1); + exit(EXIT_FAILURE); } char* trim(char* s)