diff --git a/src/session/download.cpp b/src/session/download.cpp index b2993fd9..a9e89dc1 100644 --- a/src/session/download.cpp +++ b/src/session/download.cpp @@ -69,6 +69,12 @@ INIT_LIST_OF(struct file_download, downloads); std::map uri_tempfiles; +void +clear_uri_tempfiles(void) +{ + uri_tempfiles.clear(); +} + static char * check_url_tempfiles(const char *url) { diff --git a/src/session/download.h b/src/session/download.h index ba16a70e..f54e69b5 100644 --- a/src/session/download.h +++ b/src/session/download.h @@ -256,6 +256,8 @@ void tp_save(struct type_query *type_query); void tp_cancel(void *data); struct file_download *init_file_download(struct uri *uri, struct session *ses, char *file, int fd); +void clear_uri_tempfiles(void); + #ifdef __cplusplus } #endif diff --git a/src/terminal/Makefile b/src/terminal/Makefile index 31966da6..ac2afaaf 100644 --- a/src/terminal/Makefile +++ b/src/terminal/Makefile @@ -13,7 +13,7 @@ OBJS = \ kbd.o \ screen.o \ tab.o \ - terminal.obj \ + terminal.o \ window.o include $(top_srcdir)/Makefile.lib diff --git a/src/terminal/meson.build b/src/terminal/meson.build index 40b4faa9..9cf23080 100644 --- a/src/terminal/meson.build +++ b/src/terminal/meson.build @@ -7,4 +7,4 @@ endif if conf_data.get('CONFIG_TERMINFO') srcs += files('terminfo.c') endif -srcs += files('color.c', 'draw.c', 'event.c', 'hardio.c', 'kbd.c', 'screen.c', 'tab.c', 'terminal.cpp', 'window.c') +srcs += files('color.c', 'draw.c', 'event.c', 'hardio.c', 'kbd.c', 'screen.c', 'tab.c', 'terminal.c', 'window.c') diff --git a/src/terminal/terminal.cpp b/src/terminal/terminal.c similarity index 94% rename from src/terminal/terminal.cpp rename to src/terminal/terminal.c index 541734ae..f3b4c34a 100644 --- a/src/terminal/terminal.cpp +++ b/src/terminal/terminal.c @@ -29,6 +29,7 @@ #ifdef CONFIG_SCRIPTING_SPIDERMONKEY # include "scripting/smjs/smjs.h" #endif +#include "session/download.h" #include "session/session.h" #include "terminal/draw.h" #include "terminal/event.h" @@ -44,38 +45,60 @@ #endif #include "terminal/window.h" #include "util/error.h" +#include "util/hash.h" #include "util/memory.h" #include "util/string.h" #include "viewer/text/textarea.h" -#include -#include - INIT_LIST_OF(struct terminal, terminals); -std::map temporary_files; -extern std::map uri_tempfiles; - +struct hash *temporary_files; static void check_if_no_terminal(void); void clean_temporary_files(void) { - for (auto it : temporary_files) { - const char *str = (it.first).c_str(); + struct hash_item *item; + int i; - if (str) { - unlink(str); - /* fprintf(stderr, "clean: %s\n", str); */ + if (!temporary_files) { + return; + } + + foreach_hash_item (item, *temporary_files, i) { + if (item->key) { + unlink(item->key); } } - temporary_files.clear(); - uri_tempfiles.clear(); + free_hash(&temporary_files); + clear_uri_tempfiles(); } long get_number_of_temporary_files(void) { - return temporary_files.size(); + struct hash_item *item; + int i; + long counter = 0; + + if (temporary_files) { + foreach_hash_item (item, *temporary_files, i) { + counter++; + } + } + + return counter; +} + +static void +save_temporary_filename(const char *filename) +{ + if (!temporary_files) { + temporary_files = init_hash8(); + } + + if (temporary_files) { + add_hash_item(temporary_files, filename, strlen(filename), NULL); + } } void @@ -429,7 +452,7 @@ exec_on_terminal(struct terminal *term, const char *path, len = strlen(delete_); if (len && get_opt_bool("ui.sessions.postpone_unlink", NULL)) { - temporary_files[delete_] = true; + save_temporary_filename(delete_); len = 0; delete_ = ""; } @@ -441,7 +464,7 @@ exec_on_terminal(struct terminal *term, const char *path, size_t len = strlen(delete_); if (len && *path && get_opt_bool("ui.sessions.postpone_unlink", NULL)) { - temporary_files[delete_] = true; + save_temporary_filename(delete_); len = 0; delete_ = ""; }