Browse Source

[Export] Read and ZIP project files in 16K chunks instead of reading the whole file at once.

(cherry picked from commit c8f3dd776b54cec54ceba000436035e40218bc3e)
bruvzg 3 years ago
parent
commit
d30b5725a3
1 changed files with 15 additions and 2 deletions
  1. 15 2
      platform/osx/export/export.cpp

+ 15 - 2
platform/osx/export/export.cpp

@@ -1098,8 +1098,21 @@ void EditorExportPlatformOSX::_zip_folder_recursive(zipFile &p_zip, const String
 					0x0314, // "version made by", 0x03 - Unix, 0x14 - ZIP specification version 2.0, required to store Unix file permissions
 					0x0314, // "version made by", 0x03 - Unix, 0x14 - ZIP specification version 2.0, required to store Unix file permissions
 					0);
 					0);
 
 
-			Vector<uint8_t> array = FileAccess::get_file_as_array(dir.plus_file(f));
-			zipWriteInFileInZip(p_zip, array.ptr(), array.size());
+			FileAccessRef fa = FileAccess::open(dir.plus_file(f), FileAccess::READ);
+			if (!fa) {
+				ERR_FAIL_MSG("Can't open file to read from path '" + String(dir.plus_file(f)) + "'.");
+			}
+			const int bufsize = 16384;
+			uint8_t buf[bufsize];
+
+			while (true) {
+				uint64_t got = fa->get_buffer(buf, bufsize);
+				if (got == 0) {
+					break;
+				}
+				zipWriteInFileInZip(p_zip, buf, got);
+			}
+
 			zipCloseFileInZip(p_zip);
 			zipCloseFileInZip(p_zip);
 		}
 		}
 	}
 	}