public byte[] getData() { byte[] result = new byte[length()]; int offset = 0; System.arraycopy(sbSig, 0, result, offset, sbSig.length); offset += sbSig.length; System.arraycopy(sbBlkSize, 0, result, offset, sbBlkSize.length); offset += sbBlkSize.length; System.arraycopy(sbBlkCount, 0, result, offset, sbBlkCount.length); offset += sbBlkCount.length; System.arraycopy(sbDevType, 0, result, offset, sbDevType.length); offset += sbDevType.length; System.arraycopy(sbDevId, 0, result, offset, sbDevId.length); offset += sbDevId.length; System.arraycopy(sbData, 0, result, offset, sbData.length); offset += sbData.length; System.arraycopy(sbDrvrCount, 0, result, offset, sbDrvrCount.length); offset += sbDrvrCount.length; for (DriverDescriptorEntry dde : entries) { byte[] tmp = dde.getData(); System.arraycopy(tmp, 0, result, offset, tmp.length); offset += tmp.length; } System.arraycopy(ddPad, 0, result, offset, ddPad.length); offset += ddPad.length; // System.arraycopy(, 0, result, offset, .length); offset += .length; if (offset != length()) throw new RuntimeException("Internal miscalculation..."); else return result; }
public DriverDescriptorRecord(byte[] data, int offset) { if ((data.length - offset) < 18) { throw new RuntimeException( "Insufficient remaining data in " + "buffer for a " + this.getClass().getName() + " " + "(remaining: " + (data.length - offset) + " bytes, " + "required: 18 bytes)."); } System.arraycopy(data, offset + 0, sbSig, 0, 2); System.arraycopy(data, offset + 2, sbBlkSize, 0, 2); System.arraycopy(data, offset + 4, sbBlkCount, 0, 4); System.arraycopy(data, offset + 8, sbDevType, 0, 2); System.arraycopy(data, offset + 10, sbDevId, 0, 2); System.arraycopy(data, offset + 12, sbData, 0, 4); System.arraycopy(data, offset + 16, sbDrvrCount, 0, 2); int numEntries = getSbDrvrCount(); if (numEntries * DriverDescriptorEntry.length() > (data.length - offset - 18)) { numEntries = (data.length - offset - 18) / DriverDescriptorEntry.length(); } entries = new DriverDescriptorEntry[numEntries]; int i; for (i = 0; i < entries.length; ++i) entries[i] = new DriverDescriptorEntry(data, offset + 18 + DriverDescriptorEntry.length() * i); int padOffset = offset + 18 + DriverDescriptorEntry.length() * i; int padLength = getSbBlkSize() - padOffset; if (((data.length - offset) - padOffset) < padLength) { padLength = (data.length - offset) - padOffset; } ddPad = new byte[padLength]; System.arraycopy(data, offset + padOffset, ddPad, 0, ddPad.length); }
public int length() { return 18 + entries.length * DriverDescriptorEntry.length() + ddPad.length; }