Add search function to libtar

 Function entryExists() can be called in order
 to check if an entry exists inside an archive.

Change-Id: Id3d13d20dfb74a1779dbd8ba6f0ab08c3ca46319
diff --git a/twrpTar.cpp b/twrpTar.cpp
index dd6d5c3..1ab1ab7 100644
--- a/twrpTar.cpp
+++ b/twrpTar.cpp
@@ -308,23 +308,34 @@
 	return 0;
 }
 
+int twrpTar::getArchiveType() {
+        int type = 0;
+        string::size_type i = 0;
+        int firstbyte = 0, secondbyte = 0;
+	char header[3];
+        
+        ifstream f;
+        f.open(tarfn.c_str(), ios::in | ios::binary);
+        f.get(header, 3);
+        f.close();
+        firstbyte = header[i] & 0xff;
+        secondbyte = header[++i] & 0xff;
+
+        if (firstbyte == 0x1f && secondbyte == 0x8b)
+		type = 1; // Compressed
+	else
+		type = 0; // Uncompressed
+
+	return type;
+}
+
 int twrpTar::extract() {
-	int len = 3;
-	char header[len];
-	string::size_type i = 0;
-	int firstbyte = 0;
-	int secondbyte = 0;
-	int ret;
-	ifstream f;
-	f.open(tarfn.c_str(), ios::in | ios::binary);
-	f.get(header, len);
-	firstbyte = header[i] & 0xff;
-	secondbyte = header[++i] & 0xff;
-	f.close();
-	if (firstbyte == 0x1f && secondbyte == 0x8b) {
+	int Archive_Current_Type = getArchiveType();
+
+	if (Archive_Current_Type == 1) {
 		//if you return the extractTGZ function directly, stack crashes happen
 		LOGI("Extracting gzipped tar\n");
-		ret = extractTGZ();
+		int ret = extractTGZ();
 		return ret;
 	}
 	else {
@@ -580,6 +591,23 @@
 	return 0;
 }
 
+int twrpTar::entryExists(string entry) {
+	char* searchstr = (char*)entry.c_str();
+	int ret;
+
+	int Archive_Current_Type = getArchiveType();
+
+	if (openTar(Archive_Current_Type) == -1)
+		ret = 0;
+	else
+		ret = tar_find(t, searchstr);
+
+	if (tar_close(t) != 0)
+		LOGI("Unable to close tar file after searching for entry '%s'.\n", entry.c_str());
+
+	return ret;
+}
+
 extern "C" ssize_t write_tar(int fd, const void *buffer, size_t size) {
 	return (ssize_t) write_libtar_buffer(fd, buffer, size);
 }