summaryrefslogtreecommitdiff
path: root/apps/open_plugin.c
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2022-11-17 01:25:41 -0500
committerWilliam Wilgus <wilgus.william@gmail.com>2022-11-17 01:43:16 -0500
commit0b7a387671a56a1b526b3672cd695b5764597f3e (patch)
tree07c9c337f002a647c5e6c7eaf0a6b3c5245097cb /apps/open_plugin.c
parent4c3937591c510a22c724d18dae9367bb1b786698 (diff)
downloadrockbox-0b7a387671a56a1b526b3672cd695b5764597f3e.tar.gz
rockbox-0b7a387671a56a1b526b3672cd695b5764597f3e.zip
open_plugins add name when plugin can't open & check LANG_LAST_INDEX_IN_ARRAY
can't open '' was confusing for users so pass the key to open plugin in theory you could have a plugin that defaulted to these lang_ids run but its good enough to tell the user what failed to open IMO lang_id changes mess with open_plugin since it uses them as look-up keys so add checks for LANG_LAST_INDEX_IN_ARRAY to the checksum the plugin now removes entries with an invalid checksum devices with harddrives only append their .dat file so have them skip entries with invalid checksums and only notify user if a valid entry wasn't found (these users can run the open_plugins plugin to remove invalid entries) Change-Id: Icf157675beaccda785643d5a9ed032a7cde30f12
Diffstat (limited to 'apps/open_plugin.c')
-rw-r--r--apps/open_plugin.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/apps/open_plugin.c b/apps/open_plugin.c
index 67b6f6d318..45dd7cdd2c 100644
--- a/apps/open_plugin.c
+++ b/apps/open_plugin.c
@@ -28,7 +28,7 @@
28#include "lang.h" 28#include "lang.h"
29 29
30/* Define LOGF_ENABLE to enable logf output in this file */ 30/* Define LOGF_ENABLE to enable logf output in this file */
31//#define LOGF_ENABLE 31/*#define LOGF_ENABLE*/
32#include "logf.h" 32#include "logf.h"
33 33
34#define ROCK_EXT "rock" 34#define ROCK_EXT "rock"
@@ -60,8 +60,12 @@ static inline void op_clear_entry(struct open_plugin_entry_t *entry)
60 60
61static int op_entry_checksum(struct open_plugin_entry_t *entry) 61static int op_entry_checksum(struct open_plugin_entry_t *entry)
62{ 62{
63 if (entry == NULL || entry->checksum != open_plugin_csum) 63 if (entry == NULL || entry->checksum != open_plugin_csum +
64 (entry->lang_id <= OPEN_PLUGIN_LANG_INVALID ? 0 : LANG_LAST_INDEX_IN_ARRAY))
65 {
66 logf("OP entry bad checksum");
64 return 0; 67 return 0;
68 }
65 return 1; 69 return 1;
66} 70}
67 71
@@ -81,6 +85,14 @@ static int op_find_entry(int fd, struct open_plugin_entry_t *entry,
81 if (entry->lang_id == lang_id || entry->hash == hash || 85 if (entry->lang_id == lang_id || entry->hash == hash ||
82 (lang_id == OPEN_PLUGIN_LANG_IGNOREALL))/* return first entry found */ 86 (lang_id == OPEN_PLUGIN_LANG_IGNOREALL))/* return first entry found */
83 { 87 {
88#if (CONFIG_STORAGE & STORAGE_ATA)
89 /* may have invalid entries but we append the file so continue looking*/
90 if (op_entry_checksum(entry) <= 0)
91 {
92 ret = OPEN_PLUGIN_INVALID_ENTRY;
93 continue;
94 }
95#endif
84 ret = record; 96 ret = record;
85 /* NULL terminate fields NOTE -- all are actually +1 larger */ 97 /* NULL terminate fields NOTE -- all are actually +1 larger */
86 entry->name[OPEN_PLUGIN_NAMESZ] = '\0'; 98 entry->name[OPEN_PLUGIN_NAMESZ] = '\0';
@@ -98,7 +110,12 @@ static int op_find_entry(int fd, struct open_plugin_entry_t *entry,
98 } 110 }
99 111
100 /* sanity check */ 112 /* sanity check */
101 if (ret > OPEN_PLUGIN_NOT_FOUND && op_entry_checksum(entry) <= 0) 113#if (CONFIG_STORAGE & STORAGE_ATA)
114 if (ret == OPEN_PLUGIN_INVALID_ENTRY ||
115#else
116 if(
117#endif
118 (ret > OPEN_PLUGIN_NOT_FOUND && op_entry_checksum(entry) <= 0))
102 { 119 {
103 splash(HZ * 2, "OpenPlugin Invalid entry"); 120 splash(HZ * 2, "OpenPlugin Invalid entry");
104 ret = OPEN_PLUGIN_NOT_FOUND; 121 ret = OPEN_PLUGIN_NOT_FOUND;
@@ -144,7 +161,7 @@ static int op_update_dat(struct open_plugin_entry_t *entry, bool clear)
144 hash_langid_csum[2] == open_plugin_csum) 161 hash_langid_csum[2] == open_plugin_csum)
145 { 162 {
146 logf("OP update *Entry Exists* hash: %x langid: %d", 163 logf("OP update *Entry Exists* hash: %x langid: %d",
147 hash_langid_csum[0], (int32_t)hash_langid[1]); 164 hash_langid_csum[0], (int32_t)hash_langid_csum[1]);
148 lseek(fd, 0-hlc_sz, SEEK_CUR);/* back to the start of record */ 165 lseek(fd, 0-hlc_sz, SEEK_CUR);/* back to the start of record */
149 break; 166 break;
150 } 167 }
@@ -261,7 +278,8 @@ uint32_t open_plugin_add_path(const char *key, const char *plugin, const char *p
261 { 278 {
262 open_plugin_entry.hash = hash; 279 open_plugin_entry.hash = hash;
263 open_plugin_entry.lang_id = lang_id; 280 open_plugin_entry.lang_id = lang_id;
264 open_plugin_entry.checksum = open_plugin_csum; 281 open_plugin_entry.checksum = open_plugin_csum +
282 (lang_id <= OPEN_PLUGIN_LANG_INVALID ? 0 : LANG_LAST_INDEX_IN_ARRAY);
265 /* name */ 283 /* name */
266 if (path_basename(plugin, (const char **)&pos) == 0) 284 if (path_basename(plugin, (const char **)&pos) == 0)
267 pos = "\0"; 285 pos = "\0";
@@ -337,7 +355,7 @@ int open_plugin_get_entry(const char *key, struct open_plugin_entry_t *entry)
337 opret = op_get_entry(hash, lang_id, entry, OPEN_PLUGIN_DAT); 355 opret = op_get_entry(hash, lang_id, entry, OPEN_PLUGIN_DAT);
338 logf("OP entry hash: %x lang id: %d ret: %d key: %s", hash, lang_id, opret, skey); 356 logf("OP entry hash: %x lang id: %d ret: %d key: %s", hash, lang_id, opret, skey);
339 357
340 if (opret == OPEN_PLUGIN_NOT_FOUND && lang_id > OPEN_PLUGIN_LANG_INVALID) 358 if (opret == OPEN_PLUGIN_NOT_FOUND && lang_id > OPEN_PLUGIN_LANG_INVALID)
341 { /* try rb defaults */ 359 { /* try rb defaults */
342 opret = op_get_entry(hash, lang_id, entry, OPEN_RBPLUGIN_DAT); 360 opret = op_get_entry(hash, lang_id, entry, OPEN_RBPLUGIN_DAT);
343 logf("OP rb_entry hash: %x lang id: %d ret: %d key: %s", hash, lang_id, opret, skey); 361 logf("OP rb_entry hash: %x lang id: %d ret: %d key: %s", hash, lang_id, opret, skey);
@@ -364,6 +382,8 @@ int open_plugin_run(const char *key)
364 382
365 if (param[0] == '\0') 383 if (param[0] == '\0')
366 param = NULL; 384 param = NULL;
385 if (path[0] == '\0' && key)
386 path = P2STR((unsigned char *)key);
367 387
368 ret = plugin_load(path, param); 388 ret = plugin_load(path, param);
369 389