/src/exiv2/src/orfimage_int.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | | |
3 | | #include "orfimage_int.hpp" |
4 | | |
5 | | namespace Exiv2::Internal { |
6 | 18.2k | OrfHeader::OrfHeader(ByteOrder byteOrder) : TiffHeaderBase(0x4f52, 8, byteOrder, 0x00000008) { |
7 | 18.2k | } |
8 | | |
9 | 18.2k | bool OrfHeader::read(const byte* pData, size_t size) { |
10 | 18.2k | if (size < 8) |
11 | 0 | return false; |
12 | | |
13 | 18.2k | if (pData[0] == 'I' && pData[0] == pData[1]) { |
14 | 189 | setByteOrder(littleEndian); |
15 | 18.0k | } else if (pData[0] == 'M' && pData[0] == pData[1]) { |
16 | 369 | setByteOrder(bigEndian); |
17 | 17.6k | } else { |
18 | 17.6k | return false; |
19 | 17.6k | } |
20 | | |
21 | 558 | uint16_t sig = getUShort(pData + 2, byteOrder()); |
22 | 558 | if (tag() != sig && 0x5352 != sig) |
23 | 49 | return false; // #658: Added 0x5352 "SR" for SP-560UZ |
24 | 509 | sig_ = sig; |
25 | 509 | setOffset(getULong(pData + 4, byteOrder())); |
26 | 509 | return true; |
27 | 558 | } |
28 | | |
29 | 42 | DataBuf OrfHeader::write() const { |
30 | 42 | DataBuf buf(8); |
31 | 42 | switch (byteOrder()) { |
32 | 18 | case littleEndian: |
33 | 18 | buf.write_uint8(0, 'I'); |
34 | 18 | break; |
35 | 24 | case bigEndian: |
36 | 24 | buf.write_uint8(0, 'M'); |
37 | 24 | break; |
38 | 0 | default: |
39 | 0 | break; |
40 | 42 | } |
41 | 42 | buf.write_uint8(1, buf.read_uint8(0)); |
42 | | |
43 | 42 | buf.write_uint16(2, sig_, byteOrder()); |
44 | 42 | buf.write_uint32(4, 0x00000008, byteOrder()); |
45 | 42 | return buf; |
46 | 42 | } |
47 | | |
48 | | } // namespace Exiv2::Internal |