add function to partition.cpp to return max file size to mtp responder
Change-Id: If8114b5eac741db6c512fb35cb48e3825c2ff098
diff --git a/mtp/MtpServer.cpp b/mtp/MtpServer.cpp
index c044cad..66a6414 100755
--- a/mtp/MtpServer.cpp
+++ b/mtp/MtpServer.cpp
@@ -1078,8 +1078,10 @@
 		unlink(mSendObjectFilePath);
 		if (errno == ECANCELED)
 			result = MTP_RESPONSE_TRANSACTION_CANCELLED;
-		else
+		else {
+		    	MTPD("errno: %d\n", errno);
 			result = MTP_RESPONSE_GENERAL_ERROR;
+		}
 	}
 
 done:
@@ -1093,7 +1095,7 @@
 	mSendObjectHandle = kInvalidObjectHandle;
 	MTPD("result: %d\n", result);
 	mSendObjectFormat = 0;
-	return MTP_RESPONSE_OK;
+	return result;
 }
 
 static void deleteRecursive(const char* path) {
diff --git a/mtp/mtp_MtpServer.cpp b/mtp/mtp_MtpServer.cpp
index 9df564f..17facdd 100755
--- a/mtp/mtp_MtpServer.cpp
+++ b/mtp/mtp_MtpServer.cpp
@@ -123,7 +123,7 @@
 				int storageID = stores->at(i)->mtpid;
 				long reserveSpace = 1;
 				bool removable = false;
-				long maxFileSize = 1000000000L;
+				long maxFileSize = stores->at(i)->maxFileSize;
 				if (descriptionStr != "") {
 					MtpStorage* storage = new MtpStorage(storageID, &pathStr[0], &descriptionStr[0], reserveSpace, removable, maxFileSize, refserver);
 					server->addStorage(storage);
diff --git a/mtp/mtp_MtpServer.hpp b/mtp/mtp_MtpServer.hpp
index ce6b13c..3153e80 100755
--- a/mtp/mtp_MtpServer.hpp
+++ b/mtp/mtp_MtpServer.hpp
@@ -36,6 +36,7 @@
 	std::string display;
 	std::string mount;
 	int mtpid;
+	uint64_t maxFileSize;
 } storage;
 
 typedef std::vector<storage*> storages;
diff --git a/mtp/twrpMtp.cpp b/mtp/twrpMtp.cpp
index 9a7df5b..d9db424 100755
--- a/mtp/twrpMtp.cpp
+++ b/mtp/twrpMtp.cpp
@@ -107,11 +107,12 @@
 	return 0;
 }
 
-void twrpMtp::addStorage(std::string display, std::string path, int mtpid) {
+void twrpMtp::addStorage(std::string display, std::string path, int mtpid, uint64_t maxFileSize) {
 	s = new storage;
 	s->display = display;
 	s->mount = path;
 	s->mtpid = mtpid;
+	s->maxFileSize = maxFileSize;
 	MTPD("twrpMtp mtpid: %d\n", s->mtpid);
 	mtpstorages->push_back(s);
 }
diff --git a/mtp/twrpMtp.hpp b/mtp/twrpMtp.hpp
index f0d8f4b..3aaa964 100755
--- a/mtp/twrpMtp.hpp
+++ b/mtp/twrpMtp.hpp
@@ -36,7 +36,7 @@
 		twrpMtp(int debug_enabled /* = 0 */);
 		pthread_t threadserver(void);
 		pid_t forkserver(void);
-		void addStorage(std::string display, std::string path, int mtpid);
+		void addStorage(std::string display, std::string path, int mtpid, uint64_t maxFileSize);
 	private:
 		int start(void);
 		typedef int (twrpMtp::*ThreadPtr)(void);
diff --git a/partition.cpp b/partition.cpp
index 123e9fa..6225f22 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -2035,3 +2035,28 @@
 		PartitionManager.UnMount_By_Path(Symlink_Mount_Point, true);
 	}
 }
+
+uint64_t TWPartition::Get_Max_FileSize() {
+	uint64_t maxFileSize = 0;
+	const uint64_t constGB = (uint64_t) 1024 * 1024 * 1024;
+	const uint64_t constTB = (uint64_t) constGB * 1024;
+	const uint64_t constPB = (uint64_t) constTB * 1024;
+	const uint64_t constEB = (uint64_t) constPB * 1024;
+
+				if (Current_File_System == "ext4")
+								maxFileSize = 16 * constTB; //16 TB
+				else if (Current_File_System == "vfat")
+								maxFileSize = 4 * constGB; //4 GB
+				else if (Current_File_System == "ntfs")
+								maxFileSize = 256 * constTB; //256 TB
+				if (Current_File_System == "exfat")
+								maxFileSize = 16 * constPB; //16 PB
+				else if (Current_File_System == "ext3")
+								maxFileSize = 2 * constTB; //2 TB
+				else if (Current_File_System == "f2fs")
+							maxFileSize = 3.94 * constTB; //3.94 TB
+	else
+		maxFileSize = 100000000L;
+	return maxFileSize - 1;
+}
+
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index 93caf20..de45493 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -1914,7 +1914,7 @@
 		if ((*iter)->Is_Storage && (*iter)->Is_Present && (*iter)->Mount(false)) {
 			++storageid;
 			printf("twrp addStorage %s, mtpstorageid: %u\n", (*iter)->Storage_Path.c_str(), storageid);
-			mtp->addStorage((*iter)->Storage_Name, (*iter)->Storage_Path, storageid);
+			mtp->addStorage((*iter)->Storage_Name, (*iter)->Storage_Path, storageid, (*iter)->Get_Max_FileSize());
 			count++;
 		}
 	}
diff --git a/partitions.hpp b/partitions.hpp
index 48c339d..8458e93 100644
--- a/partitions.hpp
+++ b/partitions.hpp
@@ -56,6 +56,7 @@
 	bool Wipe();                                                              // Wipes the partition
 	bool Wipe_AndSec();                                                       // Wipes android secure
 	bool Can_Repair();                                                        // Checks to see if we have everything needed to be able to repair the current file system
+	uint64_t Get_Max_FileSize();					  	  //get partition maxFileSie
 	bool Repair();                                                            // Repairs the current file system
 	bool Backup(string backup_folder, const unsigned long long *overall_size, const unsigned long long *other_backups_size); // Backs up the partition to the folder specified
 	bool Check_MD5(string restore_folder);                                    // Checks MD5 of a backup