Support old APK paths and don't crash when not match

This commit is contained in:
topjohnwu 2019-02-14 16:38:28 -05:00
parent 014105f0a0
commit 4872df6a46

View File

@ -210,25 +210,26 @@ static void find_apks(char *path, char *eof) {
if (dir == nullptr) if (dir == nullptr)
return; return;
// assert(*eof == '\0');
struct dirent *entry; struct dirent *entry;
while ((entry = xreaddir(dir))) { char *dash;
for (; (entry = xreaddir(dir)); *eof = '\0') {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue; continue;
if (entry->d_type == DT_DIR) { if (entry->d_type == DT_DIR) {
find_apks(path, append_path(eof, entry->d_name)); find_apks(path, append_path(eof, entry->d_name));
*eof = '\0';
} else if (strend(entry->d_name, ".apk") == 0) { } else if (strend(entry->d_name, ".apk") == 0) {
// Path will be in this format: /data/app/[pkg]-[hash or 1 or 2] append_path(eof, entry->d_name);
char *dash = strchr(path, '-'); /* Supported path will be in either format:
* /data/app/[pkg]-[hash or 1 or 2]/base.apk
* /data/app/[pkg]-[1 or 2].apk */
if ((dash = strchr(path, '-')) == nullptr)
continue;
*dash = '\0'; *dash = '\0';
for (auto &s : hide_list) { for (auto &s : hide_list) {
if (s == path + sizeof(DATA_APP)) { if (s == path + sizeof(DATA_APP)) {
*dash = '-'; *dash = '-';
append_path(eof, entry->d_name); append_path(eof, entry->d_name);
xinotify_add_watch(new_inotify, path, IN_OPEN | IN_DELETE); xinotify_add_watch(new_inotify, path, IN_OPEN | IN_DELETE);
*eof = '\0';
break; break;
} }
} }