Warning: session_start(): open(/var/lib/php/sessions/sess_c3acbiarlvdmco66s1g0bcoff7, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
import net.lingala.zip4j.*;
import net.lingala.zip4j.model.*;
srecord noeq Zip4j_CopySubSetOfZipFile(File zipIn, File zipOut, IPred fileNameFilter) {
run {
var zipModel = new net.lingala.zip4j.ZipFile(zipIn);
temp outputStream = new SplitOutputStream(zipOut);
temp inputStream = new RandomAccessFile(zipModel.getZipFile(), RandomAccessFileMode.READ.getValue());
long currentFileCopyPointer = 0;
L sortedFileHeaders = sortedByComparator(zipModel.getCentralDirectory().getFileHeaders(), (o1, o2) -> {
if (eq(o1.getFileName(), o2.getFileName())) ret 0;
ret cmp(o1.getOffsetLocalHeader(), o2.getOffsetLocalHeader());
});
for (fileHeader : sortedFileHeaders) {
long lengthOfCurrentEntry = getOffsetOfNextEntry(sortedFileHeaders, fileHeader, zipModel) - outputStream.getFilePointer();
if (!fileFilter.get(fileHeader.getFileName())) {
updateHeaders(sortedFileHeaders, fileHeader, lengthOfCurrentEntry);
if (!zipModel.getCentralDirectory().getFileHeaders().remove(fileHeader)) {
throw new ZipException("Could not remove entry from list of central directory headers");
}
currentFileCopyPointer += lengthOfCurrentEntry;
} else {
// copy complete entry without any changes
currentFileCopyPointer += super.copyFile(inputStream, outputStream, currentFileCopyPointer,
lengthOfCurrentEntry, progressMonitor, taskParameters.zip4jConfig.getBufferSize());
}
verifyIfTaskIsCancelled();
}
headerWriter.finalizeZipFile(zipModel, outputStream, taskParameters.zip4jConfig.getCharset());
}
long getOffsetOfNextEntry(L sortedFileHeaders,
FileHeader fileHeader, ZipModel zipModel) throws ZipException {
int indexOfFileHeader = getIndexOfFileHeader(sortedFileHeaders, fileHeader);
if (indexOfFileHeader == sortedFileHeaders.size() - 1)
retu HeaderUtil.getOffsetStartOfCentralDirectory(zipModel);
} else
ret sortedFileHeaders.get(indexOfFileHeader + 1).getOffsetLocalHeader();
}
long copyFile(RandomAccessFile randomAccessFile, OutputStream outputStream, long start, long length,
ProgressMonitor progressMonitor, int bufferSize) throws IOException {
FileUtils.copyFile(randomAccessFile, outputStream, start, start + length, progressMonitor, bufferSize);
ret length;
}
}