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