improvenment of path handling

This commit is contained in:
nova
2025-05-30 23:35:37 +02:00
parent bab921dea2
commit 2b52329904
2 changed files with 16 additions and 10 deletions

View File

@ -40,6 +40,7 @@ void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_conten
}
unsigned long i = 0;
for (i = 0; i < *dir_file_count; i++ ) {
if (entry[i]->d_name[0] == '.' && !(file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) {
@ -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;

View File

@ -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);