HashMap doFakeDR(ISO9660Directory dir) throws HandlerException { long position = streamHandler.mark(); HashMap memory = super.doFakeDR(dir); if (RRIPFactory.MKISOFS_COMPATIBILITY) { // RR: Recorded Fields int flags = RRIPFactory.RR_PX_RECORDED | RRIPFactory.RR_NM_RECORDED | RRIPFactory.RR_CL_RECORDED; rripFactory.doRREntry(flags); } // PX: POSIX File Attributes int fileModes = getPOSIXFileModeForObject(dir).getFileMode(); int fileLinks = 2 + dir.getDirectories().size(); rripFactory.doPXEntry(fileModes, fileLinks, 0, 0, 1); // CL: Child link (location of the actual directory record) childLocationFixups.put(dir, rripFactory.doCLEntry()); // Compute length up to here int length = helper.getDifferenceTo(position); // NM: Alternate Name length = doNM(helper.getFilenameDataReference(dir), length); // Update Directory Record Length return finalizeDR(memory, length); }
ISO9660Directory relocate(ISO9660Directory dir) { ISO9660Directory originalParent = super.relocate(dir); helper.matchDirectory(dir).relocate(); if (dir.getRoot() == root) { // Save only mappings from ISO 9660 hierarchy originalParentMapper.put(originalParent, dir); } return originalParent; }
HashMap doDotDotDR(ISO9660Directory dir) throws HandlerException { long position = streamHandler.mark(); HashMap memory = super.doDotDotDR(dir); ISO9660Directory parentDir = dir.getParentDirectory(); if (RRIPFactory.MKISOFS_COMPATIBILITY) { // RR: Recorded Fields int flags = RRIPFactory.RR_PX_RECORDED | RRIPFactory.RR_TF_RECORDED; if (dir.isMoved()) { flags |= RRIPFactory.RR_PL_RECORDED; } rripFactory.doRREntry(flags); } if (dir.isMoved()) { // PL: Real Parent of this relocated directory parentLocationFixups.put(dir, rripFactory.doPLEntry()); } // PX: POSIX File Attributes POSIXFileMode fileMode = getPOSIXFileModeForObject(dir); int fileModes = fileMode.getFileMode(); int fileLinks = 2 + parentDir.getDirectories().size(); rripFactory.doPXEntry(fileModes, fileLinks, 0, 0, 1); // TF: Timestamp ISO9660ShortDateDataReference date = new ISO9660ShortDateDataReference(parentDir.lastModified()); rripFactory.doTFEntry(RRIPFactory.TF_MODIFY, date); // Update Directory Record Length return finalizeDR(memory, helper.getDifferenceTo(position)); }
HashMap doDotDR(ISO9660Directory dir) throws HandlerException { long position = streamHandler.mark(); HashMap memory = super.doDotDR(dir); if (dir == root) { // SP: SUSP Indicator rripFactory.doSPEntry(0); } if (RRIPFactory.MKISOFS_COMPATIBILITY) { // RR: Recorded Fields int flags = RRIPFactory.RR_PX_RECORDED | RRIPFactory.RR_TF_RECORDED; rripFactory.doRREntry(flags); } // PX: POSIX File Attributes POSIXFileMode fileMode = getPOSIXFileModeForObject(dir); int fileModes = fileMode.getFileMode(); int fileLinks = 2 + dir.getDirectories().size(); rripFactory.doPXEntry(fileModes, fileLinks, 0, 0, 1); // TF: Timestamp ISO9660ShortDateDataReference date = new ISO9660ShortDateDataReference(dir.lastModified()); rripFactory.doTFEntry(RRIPFactory.TF_MODIFY, date); if (dir == root) { // CE: Continuation Area for RRIP ER HashMap ceMemory = rripFactory.doCEEntry(); volumeFixups.put("rripERLocationFixup", ceMemory.get("ceLocationFixup")); volumeFixups.put("rripERLengthFixup", ceMemory.get("ceLengthFixup")); // Write and close ER Offset Fixup Fixup rripEROffsetFixup = (Fixup) ceMemory.get("ceOffsetFixup"); rripEROffsetFixup.data(new BothWordDataReference(0)); rripEROffsetFixup.close(); } // Update Directory Record Length return finalizeDR(memory, helper.getDifferenceTo(position)); }
void doDir(ISO9660Directory dir, HashMap parentMapper) throws HandlerException { Integer location = new Integer(helper.getCurrentLocation()); if (originalParentMapper.containsKey(dir)) { // Remember directory location for PL Location Fixup parentLocations.put(originalParentMapper.get(dir), location); } else if (dir.isMoved()) { // Remember directory location for CL Location Fixup childLocations.put(dir, location); } super.doDir(dir, parentMapper); }
HashMap doDR(ISO9660Directory dir) throws HandlerException { long position = streamHandler.mark(); HashMap memory = super.doDR(dir); if (RRIPFactory.MKISOFS_COMPATIBILITY) { // RR: Recorded Fields int flags = RRIPFactory.RR_PX_RECORDED | RRIPFactory.RR_TF_RECORDED | RRIPFactory.RR_NM_RECORDED; if (dir.isMoved()) { flags |= RRIPFactory.RR_RE_RECORDED; } rripFactory.doRREntry(flags); } if (dir.isMoved()) { // RE: Directory has been relocated (moved) rripFactory.doREEntry(); } // PX: POSIX File Attributes POSIXFileMode fileMode = getPOSIXFileModeForObject(dir); int fileModes = fileMode.getFileMode(); int fileLinks = 2 + dir.getDirectories().size(); rripFactory.doPXEntry(fileModes, fileLinks, 0, 0, 1); // TF: Timestamp ISO9660ShortDateDataReference date = new ISO9660ShortDateDataReference(dir.lastModified()); rripFactory.doTFEntry(RRIPFactory.TF_MODIFY, date); // Compute length up to here int length = helper.getDifferenceTo(position); // NM: Alternate Name length = doNM(helper.getFilenameDataReference(dir), length); // Update Directory Record Length return finalizeDR(memory, length); }