private static int[] ReadNodeOffsets(Stream stream, byte[] header) { var offsetSize = header[6]; var nodeCount = EndianConverter.NetworkToHostOrder(BitConverter.ToInt32(header, 12)); var offsetTableOffset = EndianConverter.NetworkToHostOrder(BitConverter.ToInt32(header, 28)); var offsetTableBuffer = new byte[nodeCount * offsetSize]; stream.Seek(offsetTableOffset, SeekOrigin.Begin); if (stream.Read(offsetTableBuffer, 0, offsetTableBuffer.Length) != offsetTableBuffer.Length) { throw new PListFormatException("Invalid offsetTable Size"); } var nodeOffsets = new int[nodeCount]; for (var i = 0; i < nodeCount; i++) { var cur = new byte[sizeof(uint)]; for (var j = 0; j < offsetSize; j++) { cur[offsetSize - 1 - j] = offsetTableBuffer[i * offsetSize + j]; } nodeOffsets[i] = BitConverter.ToInt32(cur, 0); } return(nodeOffsets); }
// Token: 0x0600002C RID: 44 RVA: 0x00002830 File Offset: 0x00000A30 private void ReadInDictionary(IDictionary <string, PNode> node, int nodeLength, BinaryFormatReader.ReaderState readerState) { byte[] array = new byte[nodeLength * readerState.IndexSize]; byte[] array2 = new byte[nodeLength * readerState.IndexSize]; if (readerState.Stream.Read(array, 0, array.Length) != array.Length) { throw new PListFormatException(); } if (readerState.Stream.Read(array2, 0, array2.Length) != array2.Length) { throw new PListFormatException(); } for (int i = 0; i < nodeLength; i++) { short elemIdx = (readerState.IndexSize == 1) ? ((short)array[i]) : EndianConverter.NetworkToHostOrder(BitConverter.ToInt16(array, 2 * i)); StringNode stringNode = this.ReadInternal(readerState, (int)elemIdx) as StringNode; if (stringNode == null) { throw new PListFormatException("Key is not a string"); } elemIdx = ((readerState.IndexSize == 1) ? ((short)array2[i]) : EndianConverter.NetworkToHostOrder(BitConverter.ToInt16(array2, 2 * i))); PNode value = this.ReadInternal(readerState, (int)elemIdx); node.Add(stringNode.Value, value); } }
// Token: 0x06000026 RID: 38 RVA: 0x0000259C File Offset: 0x0000079C public PNode Read(Stream stream) { byte[] array = BinaryFormatReader.ReadHeader(stream); int[] nodeOffsets = BinaryFormatReader.ReadNodeOffsets(stream, array); byte indexSize = array[7]; BinaryFormatReader.ReaderState readerState = new BinaryFormatReader.ReaderState(stream, nodeOffsets, (int)indexSize); int elemIdx = EndianConverter.NetworkToHostOrder(BitConverter.ToInt32(array, 20)); return(this.ReadInternal(readerState, elemIdx)); }
// Token: 0x0600002B RID: 43 RVA: 0x000027C0 File Offset: 0x000009C0 private void ReadInArray(ICollection <PNode> node, int nodeLength, BinaryFormatReader.ReaderState readerState) { byte[] array = new byte[nodeLength * readerState.IndexSize]; if (readerState.Stream.Read(array, 0, array.Length) != array.Length) { throw new PListFormatException(); } for (int i = 0; i < nodeLength; i++) { short elemIdx = (readerState.IndexSize == 1) ? ((short)array[i]) : EndianConverter.NetworkToHostOrder(BitConverter.ToInt16(array, 2 * i)); node.Add(this.ReadInternal(readerState, (int)elemIdx)); } }
/// <summary> /// Reads a binary formated <see cref="T:PListNet.PNode"/> from the specified stream. /// </summary> /// <param name="stream">The stream.</param> /// <returns>The <see cref="T:PListNet.PNode"/>, read from the specified stream</returns> public PNode Read(Stream stream) { // read in file header var header = ReadHeader(stream); // read in node offsets var nodeOffsets = ReadNodeOffsets(stream, header); var indexSize = header[7]; var readerState = new ReaderState(stream, nodeOffsets, indexSize); var topNode = EndianConverter.NetworkToHostOrder(BitConverter.ToInt32(header, 20)); return(ReadInternal(readerState, topNode)); }
private void ReadInArray(ICollection <PNode> node, int nodeLength, ReaderState readerState) { var buf = new byte[nodeLength * readerState.IndexSize]; if (readerState.Stream.Read(buf, 0, buf.Length) != buf.Length) { throw new PListFormatException(); } for (int i = 0; i < nodeLength; i++) { var topNode = readerState.IndexSize == 1 ? buf[i] : EndianConverter.NetworkToHostOrder(BitConverter.ToInt16(buf, 2 * i)); node.Add(ReadInternal(readerState, topNode)); } }
private void ReadInDictionary(IDictionary <string, PNode> node, int nodeLength, ReaderState readerState) { var bufKeys = new byte[nodeLength * readerState.IndexSize]; var bufVals = new byte[nodeLength * readerState.IndexSize]; if (readerState.Stream.Read(bufKeys, 0, bufKeys.Length) != bufKeys.Length) { throw new PListFormatException(); } if (readerState.Stream.Read(bufVals, 0, bufVals.Length) != bufVals.Length) { throw new PListFormatException(); } for (int i = 0; i < nodeLength; i++) { var topNode = readerState.IndexSize == 1 ? bufKeys[i] : EndianConverter.NetworkToHostOrder(BitConverter.ToInt16(bufKeys, 2 * i)); var plKey = ReadInternal(readerState, topNode); var stringKey = plKey as StringNode; if (stringKey == null) { throw new PListFormatException("Key is not a string"); } topNode = readerState.IndexSize == 1 ? bufVals[i] : EndianConverter.NetworkToHostOrder(BitConverter.ToInt16(bufVals, 2 * i)); var plVal = ReadInternal(readerState, topNode); node.Add(stringKey.Value, plVal); } }
// Token: 0x06000028 RID: 40 RVA: 0x0000261C File Offset: 0x0000081C private static int[] ReadNodeOffsets(Stream stream, byte[] header) { byte b = header[6]; int num = EndianConverter.NetworkToHostOrder(BitConverter.ToInt32(header, 12)); int num2 = EndianConverter.NetworkToHostOrder(BitConverter.ToInt32(header, 28)); byte[] array = new byte[num * (int)b]; stream.Seek((long)num2, SeekOrigin.Begin); if (stream.Read(array, 0, array.Length) != array.Length) { throw new PListFormatException("Invalid offsetTable Size"); } int[] array2 = new int[num]; for (int i = 0; i < num; i++) { byte[] array3 = new byte[4]; for (int j = 0; j < (int)b; j++) { array3[(int)(b - 1) - j] = array[i * (int)b + j]; } array2[i] = BitConverter.ToInt32(array3, 0); } return(array2); }