open_plugins bugfix failure to save

if you added a plugin through the core settings and then used the shortcut
immediately the entry would never get flushed to disk

Change-Id: I62e876bbf0a8fa96acba1cc2582e2563401547f1
This commit is contained in:
William Wilgus 2021-08-02 01:40:18 -04:00 committed by William Wilgus
parent 0501af8b06
commit 3b6c3d769f
2 changed files with 12 additions and 9 deletions

View file

@ -49,7 +49,7 @@ static inline void op_clear_entry(struct open_plugin_entry_t *entry)
}
}
static int op_update_dat(struct open_plugin_entry_t *entry)
static int op_update_dat(struct open_plugin_entry_t *entry, bool clear)
{
int fd, fd1;
uint32_t hash;
@ -79,7 +79,9 @@ static int op_update_dat(struct open_plugin_entry_t *entry)
rename(OPEN_PLUGIN_DAT ".tmp", OPEN_PLUGIN_DAT);
op_clear_entry(&open_plugin_entry);
if (clear)
op_clear_entry(&open_plugin_entry);
return 0;
}
@ -106,7 +108,7 @@ uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *p
if(open_plugin_entry.hash != hash)
{
/* the entry in ram needs saved */
op_update_dat(&open_plugin_entry);
op_update_dat(&open_plugin_entry, true);
}
if (plugin)
@ -182,9 +184,9 @@ static int open_plugin_hash_get_entry(uint32_t hash,
if (hash != 0)
{
if(entry->hash == hash) /* hasn't been flushed yet? */
return 0;
return -2;
else
op_update_dat(&open_plugin_entry);
op_update_dat(&open_plugin_entry, true);
}
int fd = open(dat_file, O_RDONLY);
@ -232,7 +234,8 @@ int open_plugin_run(const char *key)
const char *path;
const char *param;
open_plugin_get_entry(key, &open_plugin_entry);
if (open_plugin_get_entry(key, &open_plugin_entry) == -2) /* entry needs flushed */
op_update_dat(&open_plugin_entry, false);
path = open_plugin_entry.path;
param = open_plugin_entry.param;
@ -250,7 +253,7 @@ int open_plugin_run(const char *key)
void open_plugin_cache_flush(void)
{
op_update_dat(&open_plugin_entry);
op_update_dat(&open_plugin_entry, true);
}
#endif /* ndef __PCTOOL__ */

View file

@ -848,7 +848,7 @@ void root_menu(void)
}
}
open_plugin_get_entry(key, &open_plugin_entry);
bool flush = (open_plugin_get_entry(key, &open_plugin_entry) == -2);
char *path = open_plugin_entry.path;
char *param = open_plugin_entry.param;
if (param[0] == '\0')
@ -856,7 +856,7 @@ void root_menu(void)
next_screen = load_plugin_screen(path, param);
if (next_screen != GO_TO_PLUGIN)
if (!flush && next_screen != GO_TO_PLUGIN)
open_plugin_add_path(NULL, NULL, NULL);
/* shortcuts may take several trips through the GO_TO_PLUGIN case