Fix crash during check for TWRP app

Make sure that opendir succeeds before continuing.

Change-Id: I3c96002ab830f4df2041044d411a7bac42a5b8f4
diff --git a/gui/action.cpp b/gui/action.cpp
index 9c8af35..3899f50 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -1910,21 +1910,21 @@
 			}
 		}
 		if (PartitionManager.Mount_By_Path("/data", false)) {
-			string parent_path = "/data/app";
-			DIR *d = opendir("/data/app");
-			struct dirent *p;
-			size_t len = strlen("me.twrp.twrpapp-");
-			while ((p = readdir(d))) {
-				if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, ".."))
-					continue;
-				if (p->d_type == DT_DIR && strlen(p->d_name) >= len && strncmp(p->d_name, "me.twrp.twrpapp-", len) == 0) {
-					LOGINFO("App found at %s/%s\n", parent_path.c_str(), p->d_name);
+			const char parent_path[] = "/data/app";
+			const char app_prefix[] = "me.twrp.twrpapp-";
+			DIR *d = opendir(parent_path);
+			if (d) {
+				struct dirent *p;
+				while ((p = readdir(d))) {
+					if (p->d_type != DT_DIR || strlen(p->d_name) < strlen(app_prefix) || strncmp(p->d_name, app_prefix, strlen(app_prefix)))
+						continue;
 					closedir(d);
+					LOGINFO("App found at '%s/%s'\n", parent_path, p->d_name);
 					DataManager::SetValue("tw_app_install_status", 2); // 0 = no status, 1 = not installed, 2 = already installed
 					goto exit;
 				}
+				closedir(d);
 			}
-			closedir(d);
 		}
 	} else
 		simulate_progress_bar();