if (entry.getName().length() >= TarConstants.NAMELEN) { TarEntry longLinkEntry = new TarEntry(TarConstants.GNU_LONGLINK, TarConstants.LF_GNUTYPE_LONGNAME); byte[] name = entry.getName().getBytes("UTF-8"); longLinkEntry.setSize(name.length + 1); putNextEntry(longLinkEntry); write(name); closeEntry(); } else if (longFileMode != LONGFILE_TRUNCATE) { throw new RuntimeException("file name '" + entry.getName() + "' is too long ( > " + TarConstants.NAMELEN + " bytes)"); entry.writeEntryHeader(this.recordBuf); this.buffer.writeRecord(this.recordBuf); if (entry.isDirectory()) { this.currSize = 0; } else { this.currSize = entry.getSize(); currName = entry.getName();
private void setEntry(TarEntry e) { if (e == null) { setExists(false); return; } setName(e.getName()); setExists(true); setLastModified(e.getModTime().getTime()); setDirectory(e.isDirectory()); setSize(e.getSize()); setMode(e.getMode()); userName = e.getUserName(); groupName = e.getGroupName(); uid = e.getLongUserId(); gid = e.getLongGroupId(); }
final TarEntry te = new TarEntry(vPath, preserveLeadingSlashes); te.setModTime(r.getLastModified()); te.setMode(ar.getMode()); if (r instanceof TarResource) { final TarResource tr = (TarResource) r; te.setUserName(tr.getUserName()); te.setUserId(tr.getLongUid()); te.setGroupName(tr.getGroup()); te.setGroupId(tr.getLongGid()); + TarConstants.MAXSIZE + " bytes."); te.setSize(r.getSize()); te.setMode(tarFileSet.getMode()); te.setMode(tarFileSet.getDirMode(this.getProject())); te.setUserName(tarFileSet.getUserName()); te.setGroupName(tarFileSet.getGroup()); te.setUserId(tarFileSet.getUid()); te.setGroupId(tarFileSet.getGid());
private void transferModTime(TarEntry from, TarEntry to) { Date fromModTime = from.getModTime(); long fromModTimeSeconds = fromModTime.getTime() / 1000; if (fromModTimeSeconds < 0 || fromModTimeSeconds > TarConstants.MAXSIZE) { fromModTime = new Date(0); } to.setModTime(fromModTime); } }
+ this.currEntry.getName() + "' SZ " + this.entrySize + " OFF " + this.entryOffset + " skipping " this.currEntry = null; } else { this.currEntry = new TarEntry(headerBuf); + this.currEntry.getName() + "' size = " + this.currEntry.getSize()); this.entrySize = this.currEntry.getSize(); if (this.currEntry != null && this.currEntry.isGNULongNameEntry()) { longName = longName.substring(0,longName.length()-1); this.currEntry.setName(longName);
/** * Reads from a tar stream and stores obtained files to the base dir. */ private static void readFromTar(String name, File baseDir, InputStream in) throws IOException { TarInputStream t = new TarInputStream(in); try { TarEntry te; while ((te = t.getNextEntry()) != null) { File f = new File(baseDir,te.getName()); if(te.isDirectory()) { f.mkdirs(); } else { File parent = f.getParentFile(); if (parent != null) parent.mkdirs(); IOUtils.copy(t,f); f.setLastModified(te.getModTime().getTime()); int mode = te.getMode()&0777; if(mode!=0 && !Functions.isWindows()) // be defensive _chmod(f,mode); } } } catch(IOException e) { throw new IOException2("Failed to extract "+name,e); } finally { t.close(); } }
while ((entry = ti.getNextEntry()) != null) { Resource r = new TarResource(src, entry); String name = entry.getName(); if (entry.isDirectory()) { name = trimSeparator(name); dirEntries.put(name, r);
public void visit(File file, String relativePath) throws IOException { if(Functions.isWindows()) relativePath = relativePath.replace('\\','/'); if(file.isDirectory()) relativePath+='/'; TarEntry te = new TarEntry(relativePath); te.setModTime(file.lastModified()); if(!file.isDirectory()) te.setSize(file.length()); tar.putNextEntry(te); if (!file.isDirectory()) { FileInputStream in = new FileInputStream(file); try { int len; while((len=in.read(buf))>=0) tar.write(buf,0,len); } finally { in.close(); } } tar.closeEntry(); entriesWritten++; }
+ currEntry.getName() + "' SZ " + entrySize + " OFF " + entryOffset + " skipping " currEntry = new TarEntry(headerBuf, encoding); } catch (IllegalArgumentException e) { throw new IOException("Error detected parsing the header", e); + currEntry.getName() + "' size = " + currEntry.getSize()); entrySize = currEntry.getSize(); if (currEntry.isGNULongLinkEntry()) { byte[] longLinkData = getLongNameData(); if (longLinkData == null) { currEntry.setLinkName(encoding.decode(longLinkData)); if (currEntry.isGNULongNameEntry()) { byte[] longNameData = getLongNameData(); if (longNameData == null) { currEntry.setName(encoding.decode(longNameData)); if (currEntry.isPaxHeader()) { // Process Pax headers paxHeaders();
final String entryName = entry.getName(); boolean paxHeaderContainsPath = handleLongName(entry, entryName, paxHeaders, "path", TarConstants.LF_GNUTYPE_LONGNAME, "file name"); final String linkName = entry.getLinkName(); boolean paxHeaderContainsLinkPath = linkName != null && !linkName.isEmpty() && handleLongName(entry, linkName, paxHeaders, "linkpath", && (entry.isLink() || entry.isSymbolicLink()) && !ASCII.canEncode(linkName)) { paxHeaders.put("linkpath", linkName); entry.writeEntryHeader(recordBuf, encoding, bigNumberMode == BIGNUMBER_STAR); buffer.writeRecord(recordBuf); if (entry.isDirectory()) { currSize = 0; } else { currSize = entry.getSize();
/** * @since Ant 1.7 */ private void expandStream(String name, InputStream stream, File dir) throws IOException { try (TarInputStream tis = new TarInputStream( compression.decompress(name, new BufferedInputStream(stream)), getEncoding())) { log("Expanding: " + name + " into " + dir, Project.MSG_INFO); boolean empty = true; FileNameMapper mapper = getMapper(); TarEntry te; while ((te = tis.getNextEntry()) != null) { empty = false; extractFile(FileUtils.getFileUtils(), null, dir, tis, te.getName(), te.getModTime(), te.isDirectory(), mapper); } if (empty && getFailOnEmptyArchive()) { throw new BuildException("archive '%s' is empty", name); } log("expand complete", Project.MSG_VERBOSE); } }
protected int putFileContent(Launcher launcher, String containerId, String path, String filename, byte[] content, Integer mode) throws IOException, InterruptedException { TarEntry entry = new TarEntry(filename); entry.setUserId(0); entry.setGroupId(0); entry.setSize(content.length); if (mode != null) { entry.setMode(mode); } ByteArrayOutputStream out = new ByteArrayOutputStream(); TarOutputStream tar = new TarOutputStream(out); tar.putNextEntry(entry); tar.write(content); tar.closeEntry(); tar.close(); ArgumentListBuilder args = new ArgumentListBuilder() .add("cp", "-", containerId + ":" + path); return launchDockerCLI(launcher, args) .stdin(new ByteArrayInputStream(out.toByteArray())) .stderr(launcher.getListener().getLogger()).join(); }
switch (key) { case "path": currEntry.setName(val); break; case "linkpath": currEntry.setLinkName(val); break; case "gid": currEntry.setGroupId(Long.parseLong(val)); break; case "gname": currEntry.setGroupName(val); break; case "uid": currEntry.setUserId(Long.parseLong(val)); break; case "uname": currEntry.setUserName(val); break; case "size": currEntry.setSize(Long.parseLong(val)); break; case "mtime": currEntry.setModTime((long) (Double.parseDouble(val) * 1000)); break; case "SCHILY.devminor": currEntry.setDevMinor(Integer.parseInt(val)); break; case "SCHILY.devmajor":
/** * If this entry represents a file, and the file is a directory, return * an array of TarEntries for this entry's children. * * @return An array of TarEntry's for this entry's children. */ public TarEntry[] getDirectoryEntries() { if (file == null || !file.isDirectory()) { return new TarEntry[0]; } String[] list = file.list(); TarEntry[] result = new TarEntry[list.length]; for (int i = 0; i < list.length; ++i) { result[i] = new TarEntry(new File(file, list[i])); } return result; }
while (entry != null) { if (!didReplacement && matches(entry.getName(), pathToReplace)) { if (!entry.isDirectory()) { FileUtil.copyStream(tar_in, tar_out, buf); entry = new TarEntry(pathToReplace); addFile(entry, tar_out, replacement, rsize, buf);
private void failForBigNumbers(TarEntry entry) { failForBigNumber("entry size", entry.getSize(), TarConstants.MAXSIZE); failForBigNumberWithPosixMessage("group id", entry.getLongGroupId(), TarConstants.MAXID); failForBigNumber("last modification time", entry.getModTime().getTime() / 1000, TarConstants.MAXSIZE); failForBigNumber("user id", entry.getLongUserId(), TarConstants.MAXID); failForBigNumber("mode", entry.getMode(), TarConstants.MAXID); failForBigNumber("major device number", entry.getDevMajor(), TarConstants.MAXID); failForBigNumber("minor device number", entry.getDevMinor(), TarConstants.MAXID); }
private void visitFile(FileCopyDetails fileDetails) { try { TarEntry archiveEntry = new TarEntry(fileDetails.getRelativePath().getPathString()); archiveEntry.setModTime(getArchiveTimeFor(fileDetails)); archiveEntry.setSize(fileDetails.getSize()); archiveEntry.setMode(UnixStat.FILE_FLAG | fileDetails.getMode()); tarOutStr.putNextEntry(archiveEntry); fileDetails.copyTo(tarOutStr); tarOutStr.closeEntry(); } catch (Exception e) { throw new GradleException(String.format("Could not add %s to TAR '%s'.", fileDetails, tarFile), e); } }