protected void read(SignalInputStream in) throws IOException { int fileNameOffset; // U32 super.read(in); from = in.readS32(); exec = in.readBoolean(); error = in.readS32(); extra = in.readS32(); lineNumber = in.readS32(); fileNameOffset = in.readS32(); euId = in.readS16(); in.readS16(); // Unused U16 reserved0 reserved1 = in.readS32(); // offset to where Extended Info starts int before = in.getReadPosition(); if (reserved1 < fileNameOffset) { // read ExtendedErrorInfo first monitorExtendedErrorInfo = skipAndReadExtended(reserved1 > 0, reserved1, in); int skipBytes = getBytesToSkip(before, fileNameOffset, in); fileName = skipAndReadFileName(lineNumber > 0, skipBytes, in); } else if (fileNameOffset <= reserved1) { // read Filename first fileName = skipAndReadFileName(lineNumber > 0, fileNameOffset, in); int skipbytes = getBytesToSkip(before, reserved1, in); monitorExtendedErrorInfo = skipAndReadExtended(reserved1 > 0, skipbytes, in); } }
private int getBytesToSkip(int before, int offset, SignalInputStream in) { int current = in.getReadPosition(); int readLength = current - before; return offset - readLength; }