コード例 #1
0
  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);
  }
コード例 #2
0
  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;
  }
コード例 #3
0
  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));
  }
コード例 #4
0
  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));
  }
コード例 #5
0
  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);
  }
コード例 #6
0
  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);
  }