/** * Convert sequence of 8 bytes (network byte order) into unsigned value. * * @param intbuf * buffer to acquire the 8 bytes of data from. * @param offset * position within the buffer to begin reading from. This * position and the next 7 bytes after it (for a total of 8 * bytes) will be read. * @return unsigned integer value that matches the 64 bits read. */ public static long decodeUInt64(final byte[] intbuf, final int offset) { return (decodeUInt32(intbuf, offset) << 32) | decodeUInt32(intbuf, offset + 4); }
@Override public MutableEntry next() { for (; levelOne < idxdata.length; levelOne++) { if (idxdata[levelOne] == null) continue; if (levelTwo < idxdata[levelOne].length) { entry.offset = NB.decodeUInt32(idxdata[levelOne], levelTwo); levelTwo += Constants.OBJECT_ID_LENGTH + 4; returnedNumber++; return entry; } levelTwo = 0; } throw new NoSuchElementException(); } }
/** * Read unsigned int * * @return a long. * @throws java.io.IOException * if any. */ public long readUnsignedInt() throws IOException { readFully(buf, 0, 4); return NB.decodeUInt32(buf, 0); }
private long getOffset(int levelOne, int levelTwo) { final long p = NB.decodeUInt32(offset32[levelOne], levelTwo << 2); if ((p & IS_O64) != 0) return NB.decodeUInt64(offset64, (8 * (int) (p & ~IS_O64))); return p; }
@Override public MutableEntry next() { for (; levelOne < names.length; levelOne++) { if (levelTwo < names[levelOne].length) { int idx = levelTwo / (Constants.OBJECT_ID_LENGTH / 4) * 4; long offset = NB.decodeUInt32(offset32[levelOne], idx); if ((offset & IS_O64) != 0) { idx = (8 * (int) (offset & ~IS_O64)); offset = NB.decodeUInt64(offset64, idx); } entry.offset = offset; levelTwo += Constants.OBJECT_ID_LENGTH / 4; returnedNumber++; return entry; } levelTwo = 0; } throw new NoSuchElementException(); } }
@Override long getOffset(long nthPosition) { final int levelOne = findLevelOne(nthPosition); final int levelTwo = getLevelTwo(nthPosition, levelOne); final int p = (4 + Constants.OBJECT_ID_LENGTH) * levelTwo; return NB.decodeUInt32(idxdata[levelOne], p); }
private void readPackHeader() throws IOException { if (expectDataAfterPackFooter) { if (!in.markSupported()) throw new IOException( JGitText.get().inputStreamMustSupportMark); in.mark(buf.length); } final int hdrln = Constants.PACK_SIGNATURE.length + 4 + 4; final int p = fill(Source.INPUT, hdrln); for (int k = 0; k < Constants.PACK_SIGNATURE.length; k++) if (buf[p + k] != Constants.PACK_SIGNATURE[k]) throw new IOException(JGitText.get().notAPACKFile); final long vers = NB.decodeUInt32(buf, p + 4); if (vers != 2 && vers != 3) throw new IOException(MessageFormat.format( JGitText.get().unsupportedPackVersion, Long.valueOf(vers))); final long objectCount = NB.decodeUInt32(buf, p + 8); use(hdrln); setExpectedObjectCount(objectCount); onPackHeader(objectCount); }
PackIndexV1(final InputStream fd, final byte[] hdr) throws CorruptObjectException, IOException { final byte[] fanoutTable = new byte[IDX_HDR_LEN]; System.arraycopy(hdr, 0, fanoutTable, 0, hdr.length); IO.readFully(fd, fanoutTable, hdr.length, IDX_HDR_LEN - hdr.length); idxHeader = new long[256]; // really unsigned 32-bit... for (int k = 0; k < idxHeader.length; k++) idxHeader[k] = NB.decodeUInt32(fanoutTable, k * 4); idxdata = new byte[idxHeader.length][]; for (int k = 0; k < idxHeader.length; k++) { int n; if (k == 0) { n = (int) (idxHeader[k]); } else { n = (int) (idxHeader[k] - idxHeader[k - 1]); } if (n > 0) { final long len = n * (Constants.OBJECT_ID_LENGTH + 4); if (len > Integer.MAX_VALUE - 8) // http://stackoverflow.com/a/8381338 throw new IOException(JGitText.get().indexFileIsTooLargeForJgit); idxdata[k] = new byte[(int) len]; IO.readFully(fd, idxdata[k], 0, idxdata[k].length); } } objectCnt = idxHeader[255]; packChecksum = new byte[20]; IO.readFully(fd, packChecksum, 0, packChecksum.length); }
/** {@inheritDoc} */ @Override public long findCRC32(AnyObjectId objId) throws MissingObjectException { final int levelOne = objId.getFirstByte(); final int levelTwo = binarySearchLevelTwo(objId, levelOne); if (levelTwo == -1) throw new MissingObjectException(objId.copy(), "unknown"); //$NON-NLS-1$ return NB.decodeUInt32(crc32[levelOne], levelTwo << 2); }
private void onOpenPack() throws IOException { final PackIndex idx = idx(); final byte[] buf = new byte[20]; fd.seek(0); fd.readFully(buf, 0, 12); if (RawParseUtils.match(buf, 0, Constants.PACK_SIGNATURE) != 4) { throw new NoPackSignatureException(JGitText.get().notAPACKFile); } final long vers = NB.decodeUInt32(buf, 4); final long packCnt = NB.decodeUInt32(buf, 8); if (vers != 2 && vers != 3) { throw new UnsupportedPackVersionException(vers); } if (packCnt != idx.getObjectCount()) { throw new PackMismatchException(MessageFormat.format( JGitText.get().packObjectCountMismatch, Long.valueOf(packCnt), Long.valueOf(idx.getObjectCount()), getPackFile())); } fd.seek(length - 20); fd.readFully(buf, 0, 20); if (!Arrays.equals(buf, packChecksum)) { throw new PackMismatchException(MessageFormat.format( JGitText.get().packObjectCountMismatch , ObjectId.fromRaw(buf).name() , ObjectId.fromRaw(idx.packChecksum).name() , getPackFile())); } }
long numEntries = NB.decodeUInt32(scratch, 8); if (numEntries > Integer.MAX_VALUE) throw new IOException(JGitText.get().indexFileIsTooLargeForJgit);
fanoutTable = new long[FANOUT]; for (int k = 0; k < FANOUT; k++) fanoutTable[k] = NB.decodeUInt32(fanoutRaw, k * 4); objectCnt = fanoutTable[FANOUT - 1];
if (crc.getValue() != NB.decodeUInt32(ftr, ftrLen - 4)) { throw new IOException(JGitText.get().invalidReftableCRC);
IO.skipFully(in, 8); long sz = NB.decodeUInt32(hdr, 4); switch (NB.decodeInt32(hdr, 0)) { case EXT_TREE: {
/** * Read unsigned int * * @return a long. * @throws java.io.IOException * if any. */ public long readUnsignedInt() throws IOException { readFully(buf, 0, 4); return NB.decodeUInt32(buf, 0); }
private long getOffset(final int levelOne, final int levelTwo) { final long p = NB.decodeUInt32(offset32[levelOne], levelTwo << 2); if ((p & IS_O64) != 0) return NB.decodeUInt64(offset64, (8 * (int) (p & ~IS_O64))); return p; }
private long getOffset(int levelOne, int levelTwo) { final long p = NB.decodeUInt32(offset32[levelOne], levelTwo << 2); if ((p & IS_O64) != 0) return NB.decodeUInt64(offset64, (8 * (int) (p & ~IS_O64))); return p; }
@Override long getOffset(long nthPosition) { final int levelOne = findLevelOne(nthPosition); final int levelTwo = getLevelTwo(nthPosition, levelOne); final int p = (4 + Constants.OBJECT_ID_LENGTH) * levelTwo; return NB.decodeUInt32(idxdata[levelOne], p); }
@Override public long findCRC32(AnyObjectId objId) throws MissingObjectException { final int levelOne = objId.getFirstByte(); final int levelTwo = binarySearchLevelTwo(objId, levelOne); if (levelTwo == -1) throw new MissingObjectException(objId.copy(), "unknown"); //$NON-NLS-1$ return NB.decodeUInt32(crc32[levelOne], levelTwo << 2); }
/** {@inheritDoc} */ @Override public long findCRC32(AnyObjectId objId) throws MissingObjectException { final int levelOne = objId.getFirstByte(); final int levelTwo = binarySearchLevelTwo(objId, levelOne); if (levelTwo == -1) throw new MissingObjectException(objId.copy(), "unknown"); //$NON-NLS-1$ return NB.decodeUInt32(crc32[levelOne], levelTwo << 2); }