diff --git a/backend.c b/backend.c index b7aea08..779e1b3 100644 --- a/backend.c +++ b/backend.c @@ -39,6 +39,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten scandir(path, &entry, skip_hidden_files, alphasort); } + unsigned long i = 0; for (i = 0; i < *dir_file_count; i++ ) { @@ -51,7 +52,16 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten struct stat *file; file = malloc(sizeof(struct stat)); memset(file, ' ', sizeof(struct stat)); - lstat(dir_content[i].file_name, file); + + /* using the full path allows using the same function for all windows */ + unsigned long path_len = strlen(path); + char *full_path = malloc(strlen(path) + strlen(entry[i]->d_name) + 1 + sizeof("/")); + memcpy(full_path, path, strlen(path)); + memcpy(full_path + path_len, "/", sizeof("/")); + memcpy(full_path + path_len + sizeof("/") - 1, entry[i]->d_name, strlen(entry[i]->d_name) + 1); + + lstat(full_path, file); + free(full_path); if (S_ISDIR(file->st_mode)) { dir_content[i].file_type = FILE_TYPE_DIR; diff --git a/threading.c b/threading.c index 40ffa6c..5dbd3d5 100644 --- a/threading.c +++ b/threading.c @@ -58,6 +58,7 @@ void *thread_lft(void *data){ free(lft_content); + char *path; if((path=getcwd(NULL, 0)) == NULL) { lft_content = malloc(sizeof(file)); @@ -66,18 +67,13 @@ void *thread_lft(void *data){ lft_file_count = 1; } else { - char *parent ; - if((parent = malloc(strlen(path)+strlen("/..")+1)) != NULL){ - parent[0] = '\0'; /* ensures empty string */ - strcat(parent, path); - strcat(parent, "/.."); - } + path[strrchr(path, '/')-path] = '\0'; + path[0] = '/'; - lft_file_count = (unsigned long)get_dir_size(parent); + lft_file_count = (unsigned long)get_dir_size(path); lft_content = malloc(lft_file_count * sizeof(file)); memset(lft_content, ' ', lft_file_count * sizeof(file)); - get_dir_content(parent, &lft_file_count, lft_content); - free(parent); + get_dir_content(path, &lft_file_count, lft_content); } free(path);