Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

commit 6b41b5f665c26985e9ce24e6bb9ad7a031d9c22e Author: Raniconduh <clagv.randomgames@gmail.com> Date: Tue Oct 18 09:04:03 2022 +0000 add get_home() & pw fallback for home dir diff --git a/include/dir.h b/include/dir.h index 34ef7c1..e7d2aa1 100644 --- a/include/dir.h +++ b/include/dir.h @@ -676 +677 @@ void remove_marked(void);  char * mode_to_s(struct dir_entry_t *);  bool check_dpath(char *);  struct dir_entry_t * gen_dir_entry(char *, char *); +void get_home(void);      // number of directory entries @@ -806 +817 @@ extern struct dir_entry_t ** dir_entries;    // current working directory  extern char * cwd; +extern char * homedir;    extern bool permission_denied;  extern bool cwd_is_file; diff --git a/src/dir.c b/src/dir.c index 4bf0689..eccb28d 100644 --- a/src/dir.c +++ b/src/dir.c @@ -166 +167 @@      char * cwd = NULL; +char * homedir = NULL;    size_t n_dir_entries = 0;  size_t dir_longest_owner = 0; @@ -3273 +32814 @@ bool check_dpath(char * s) {   if ((buf.st_mode & S_IFMT) == S_IFDIR) return true;   return false;  } + + +void get_home(void) { + char * s = getenv("HOME"); + if (!s || *s == '\0') { // no var or empty + struct passwd * pw = getpwuid(geteuid()); + homedir = strdup(pw->pw_dir); + } else { + homedir = strdup(s); + } +} diff --git a/src/main.c b/src/main.c index 2844944..78e27ad 100644 --- a/src/main.c +++ b/src/main.c @@ -216 +219 @@ size_t first_f = 0, last_f = 0, cursor = 0;  int main(int argc, char ** argv) {   var_init();   + // config file needs home directory + get_home(); +   if (!check_config()) create_config();   else read_config();   terminate_opts(); @@ -4516 +4547 @@ done:   if (print_path) puts(cwd);     free(cwd); + free(homedir);     return 0;  } diff --git a/src/opts.c b/src/opts.c index 6299596..d157d83 100644 --- a/src/opts.c +++ b/src/opts.c @@ -469 +468 @@ bool check_config(void) {   char * xdg_config = getenv("XDG_CONFIG_HOME");   char * cfg_path = NULL;   if (!xdg_config) { - char * home = getenv("HOME"); - cfg_path = malloc(strlen(home) + 9 + csc_len + 1); - sprintf(cfg_path, "%s/.config", home); + cfg_path = malloc(strlen(homedir) + 9 + csc_len + 1); + sprintf(cfg_path, "%s/.config", homedir);   } else {   cfg_path = malloc(strlen(xdg_config) + 2 + csc_len);   strcpy(cfg_path, xdg_config);