summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik.ramaekers@protonmail.com>2020-05-20 14:45:33 +0200
committerAldrik Ramaekers <aldrik.ramaekers@protonmail.com>2020-05-20 14:45:33 +0200
commitd825c25111497547cb39b446b019660614f3a6cb (patch)
tree5d001579c4c5553f790fd378a254b11e929aa4e5
parent67eaee3cc90dbe413d5707b1e259c5036b47f55f (diff)
work
-rw-r--r--src/linux/platform.c8
-rw-r--r--src/platform.h13
-rw-r--r--src/platform_shared.c7
-rw-r--r--src/windows/platform.c21
4 files changed, 36 insertions, 13 deletions
diff --git a/src/linux/platform.c b/src/linux/platform.c
index f87b4ac..35c5745 100644
--- a/src/linux/platform.c
+++ b/src/linux/platform.c
@@ -1408,7 +1408,7 @@ void *platform_open_file_dialog_block(void *arg)
return 0;
}
-void platform_list_files_block(array *list, char *start_dir, array filters, bool recursive, memory_bucket *bucket, bool include_directories, bool *is_cancelled)
+void platform_list_files_block(array *list, char *start_dir, array filters, bool recursive, memory_bucket *bucket, bool include_directories, bool *is_cancelled, search_info *info)
{
assert(list);
@@ -1467,17 +1467,21 @@ void platform_list_files_block(array *list, char *start_dir, array filters, bool
if (recursive)
{
+ if (info) info->dir_count++;
+
string_copyn(subdirname_buf, start_dir, MAX_INPUT_LENGTH);
string_appendn(subdirname_buf, dir->d_name, MAX_INPUT_LENGTH);
string_appendn(subdirname_buf, "/", MAX_INPUT_LENGTH);
// do recursive search
- platform_list_files_block(list, subdirname_buf, filters, recursive, bucket, include_directories, is_cancelled);
+ platform_list_files_block(list, subdirname_buf, filters, recursive, bucket, include_directories, is_cancelled, info);
}
}
// we handle DT_UNKNOWN for file systems that do not support type lookup.
else if (dir->d_type == DT_REG || dir->d_type == DT_UNKNOWN)
{
+ if (info) info->file_count++;
+
// check if name matches pattern
if ((len = filter_matches(&filters, dir->d_name,
&matched_filter)) && len != -1)
diff --git a/src/platform.h b/src/platform.h
index f7ff050..4be3938 100644
--- a/src/platform.h
+++ b/src/platform.h
@@ -32,6 +32,12 @@ typedef struct t_file_match
char *line_info; // will be null when no match is found
} file_match;
+typedef struct t_search_info
+{
+ u64 file_count;
+ u64 dir_count;
+} search_info;
+
typedef struct t_search_result
{
array work_queue;
@@ -55,7 +61,7 @@ typedef struct t_search_result
memory_bucket mem_bucket;
bool is_command_line_search;
bool threads_closed;
-
+ search_info search_info;
char *export_path;
char *file_filter;
char *directory_to_search;
@@ -146,6 +152,7 @@ typedef struct t_list_file_args
bool *state;
bool *is_cancelled;
memory_bucket *bucket;
+ search_info *info;
} list_file_args;
typedef enum t_cursor_type
@@ -199,8 +206,8 @@ bool get_active_directory(char *buffer);
bool set_active_directory(char *path);
void platform_show_message(platform_window *window, char *message, char *title);
array get_filters(char *filter);
-void platform_list_files_block(array *list, char *start_dir, array filters, bool recursive, memory_bucket *bucket, bool include_directories, bool *is_cancelled);
-void platform_list_files(array *list, char *start_dir, char *filter, bool recursive, memory_bucket *bucket, bool *is_cancelled, bool *state);
+void platform_list_files_block(array *list, char *start_dir, array filters, bool recursive, memory_bucket *bucket, bool include_directories, bool *is_cancelled, search_info *info);
+void platform_list_files(array *list, char *start_dir, char *filter, bool recursive, memory_bucket *bucket, bool *is_cancelled, bool *state, search_info *info);
void platform_open_file_dialog(file_dialog_type type, char *buffer, char *file_filter, char *start_path);
bool platform_get_mac_address(char *buffer, s32 buf_size);
bool is_platform_in_darkmode();
diff --git a/src/platform_shared.c b/src/platform_shared.c
index 4107ca3..027be46 100644
--- a/src/platform_shared.c
+++ b/src/platform_shared.c
@@ -81,7 +81,7 @@ void platform_autocomplete_path(char *buffer, bool want_dir)
array files = array_create(sizeof(found_file));
array filters = get_filters(name);
bool is_cancelled = false;
- platform_list_files_block(&files, dir, filters, false, 0, want_dir, &is_cancelled);
+ platform_list_files_block(&files, dir, filters, false, 0, want_dir, &is_cancelled, 0);
s32 index_to_take = -1;
if (want_dir)
@@ -165,7 +165,7 @@ void *platform_list_files_thread(void *args)
char *start_dir = info->start_dir;
bool recursive = info->recursive;
- platform_list_files_block(info->list, info->start_dir, filters, info->recursive, info->bucket, info->include_directories, info->is_cancelled);
+ platform_list_files_block(info->list, info->start_dir, filters, info->recursive, info->bucket, info->include_directories, info->is_cancelled, info->info);
mutex_lock(&info->list->mutex);
//if (!(*info->is_cancelled))
@@ -177,7 +177,7 @@ void *platform_list_files_thread(void *args)
return 0;
}
-void platform_list_files(array *list, char *start_dir, char *filter, bool recursive, memory_bucket *bucket, bool *is_cancelled, bool *state)
+void platform_list_files(array *list, char *start_dir, char *filter, bool recursive, memory_bucket *bucket, bool *is_cancelled, bool *state, search_info *info)
{
list_file_args *args = memory_bucket_reserve(bucket, sizeof(list_file_args));
args->list = list;
@@ -188,6 +188,7 @@ void platform_list_files(array *list, char *start_dir, char *filter, bool recurs
args->include_directories = 0;
args->bucket = bucket;
args->is_cancelled = is_cancelled;
+ args->info = info;
thread thr = thread_start(platform_list_files_thread, args);
thread_detach(&thr);
diff --git a/src/windows/platform.c b/src/windows/platform.c
index 0a1357b..263f8d8 100644
--- a/src/windows/platform.c
+++ b/src/windows/platform.c
@@ -16,7 +16,7 @@
#include <errno.h>
#include <shlwapi.h>
#include <objbase.h>
-#include <shellapi.h>
+//#include <shellapi.h>
#include <gdiplus.h>
#include <winreg.h>
#include <shlobj.h>
@@ -158,7 +158,15 @@ inline void platform_set_cursor(platform_window *window, cursor_type type)
bool platform_directory_exists(char *path)
{
- return PathFileExistsA(path) == TRUE;
+ WIN32_FIND_DATA FindFileData;
+ HANDLE handle = FindFirstFile(path, &FindFileData) ;
+ int found = handle != INVALID_HANDLE_VALUE;
+ if(found)
+ {
+ //FindClose(&handle); this will crash
+ FindClose(handle);
+ }
+ return found;
}
static void create_key_tables()
@@ -1038,7 +1046,7 @@ bool set_active_directory(char *path)
return SetCurrentDirectory(path);
}
-void platform_list_files_block(array *list, char *start_dir, array filters, bool recursive, memory_bucket *bucket, bool include_directories, bool *is_cancelled)
+void platform_list_files_block(array *list, char *start_dir, array filters, bool recursive, memory_bucket *bucket, bool include_directories, bool *is_cancelled, search_info *info)
{
assert(list);
s32 len = 0;
@@ -1121,12 +1129,14 @@ void platform_list_files_block(array *list, char *start_dir, array filters, bool
if (recursive)
{
+ if (info) info->dir_count++;
+
string_copyn(subdirname_buf, start_dir_clean, MAX_INPUT_LENGTH);
string_appendn(subdirname_buf, name, MAX_INPUT_LENGTH);
string_appendn(subdirname_buf, "\\", MAX_INPUT_LENGTH);
// is directory
- platform_list_files_block(list, subdirname_buf, filters, recursive, bucket, include_directories, is_cancelled);
+ platform_list_files_block(list, subdirname_buf, filters, recursive, bucket, include_directories, is_cancelled, info);
}
}
else if ((file_info.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) ||
@@ -1136,6 +1146,8 @@ void platform_list_files_block(array *list, char *start_dir, array filters, bool
(file_info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ||
(file_info.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE))
{
+ if (info) info->file_count++;
+
if ((len = filter_matches(&filters, name,
&matched_filter)) && len != -1)
{
@@ -1274,7 +1286,6 @@ void platform_init(int argc, char **argv)
setlocale(LC_ALL, "en_US.UTF-8");
QueryPerformanceFrequency(&perf_frequency);
- CoInitialize(NULL);
create_key_tables();
instance = GetModuleHandle(NULL);