diff --git a/dir.c b/dir.c index 17f131f..b27c2fb 100644 --- a/dir.c +++ b/dir.c @@ -308,37 +308,60 @@ void dir_changed(){ } if(strcmp(current_linked_dir->path, path) == 0) { mid_dir.current_file = &mid_dir.file_list[current_linked_dir->index]; - } else { - /*this path should only ever happen on changing the path for the first time - *at least i hope so*/ + /**/ + current_linked_dir->next = malloc(sizeof(linked_dir)); current_linked_dir->next->path = malloc(strlen(global_path)+1); memcpy(current_linked_dir->next->path, global_path, strlen(global_path)+1); current_linked_dir->next->next = NULL; current_linked_dir->next->index = 0; + + mid_dir.current_file = mid_dir.file_list; } } -void change_dir(){ +void change_dir(char *new_path){ + char *old_path = getcwd(NULL, 0); current_linked_dir = list_beginning; while (current_linked_dir->next != NULL) { - if(strcmp(current_linked_dir->path, global_path) == 0) { + if(strcmp(current_linked_dir->path, old_path) == 0) { break; } else { current_linked_dir = current_linked_dir->next; } } - if(strcmp(current_linked_dir->path, global_path) == 0) { + if(strcmp(current_linked_dir->path, old_path) == 0) { current_linked_dir->index = mid_dir.current_file - mid_dir.file_list; - } else { - current_linked_dir->next = malloc(sizeof(linked_dir)); - current_linked_dir->next->path = malloc(strlen(global_path)+1); - memcpy(current_linked_dir->next->path, global_path, strlen(global_path)+1); - current_linked_dir->next->next = NULL; - current_linked_dir->next->index = mid_dir.current_file - mid_dir.file_list; } + + chdir(new_path); + char *new_path_real = getcwd(NULL, 0); + + current_linked_dir = list_beginning; + while (current_linked_dir->next != NULL) { + if(strcmp(current_linked_dir->path, new_path_real) == 0) { + break; + } else { + current_linked_dir = current_linked_dir->next; + } + } + if(strcmp(current_linked_dir->path, new_path_real) != 0) { + current_linked_dir->next = malloc(sizeof(linked_dir)); + current_linked_dir = current_linked_dir->next; + current_linked_dir->path = malloc(strlen(new_path_real)+1); + memcpy(current_linked_dir->path, new_path_real, strlen(new_path_real)+1); + current_linked_dir->next = NULL; + current_linked_dir->index = 0; + /*TODO(2026-05-25T22:49:30) + *handle if new_path == "..", should this case be true, focus the index on which the old_path falls on*/ + } + mid_dir.current_file = &mid_dir.file_list[current_linked_dir->index]; + + free(old_path); + free(new_path_real); + } void dir_init(){ diff --git a/interactions.c b/interactions.c index dd870df..6963033 100644 --- a/interactions.c +++ b/interactions.c @@ -184,12 +184,7 @@ void move_up(unsigned long passes){ void move_left(unsigned long passes){ unsigned long i; for (i = 0; i < passes; i++) { - change_dir(); - if (chdir("..") != 0) { - /* TODO(2025-07-09T00:30:05) fix */ - FAIL("move_left", "unhandled error of chdir"); - } - dir_changed(); + change_dir(".."); } status |= (STATUS_RUN_BACKEND | STATUS_RELOAD_DIRECTORY); @@ -197,17 +192,11 @@ void move_left(unsigned long passes){ void move_right(){ if (mid_dir.current_file->file_type & FILE_TYPE_DIR) { - change_dir(); - if (chdir(mid_dir.current_file->file_name) != 0) { - /* TODO(2026-05-05T20:12:14) fix */ - FAIL("move_right", "unhandled error of chdir"); - } - dir_changed(); + change_dir(mid_dir.current_file->file_name); } else if (mid_dir.current_file->file_type & FILE_TYPE_EXEC) { - chdir("."); - char *cmd = parse_cmd("./"SETTINGS_COMMAND_REPLACE_STR,mid_dir.current_file); - if (system(cmd)) { - } + char *cmd = parse_cmd("./"SETTINGS_COMMAND_REPLACE_STR,mid_dir.current_file); + if (system(cmd)) { + } } else { char *mime = get_mimetype(mid_dir.current_file); char *extension = mid_dir.current_file->file_name;