Skip to content
API Documentation
BastionGuard™
hfs::anonymous_namespace{hfs_decmpfs.cpp} Namespace Reference

Functions

uint32_t le32 (const unsigned char *p)
uint32_t be32 (const unsigned char *p)
bool inflate_chunk (const unsigned char *in_buf, size_t in_size, unsigned char *out_buf, size_t out_size, size_t &out_produced, std::string &error)

Function Documentation

◆ be32()

uint32_t hfs::anonymous_namespace{hfs_decmpfs.cpp}::be32 ( const unsigned char * p)
inline

Definition at line 24 of file hfs_decmpfs.cpp.

24 {
25 return (static_cast<uint32_t>(p[0]) << 24)
26 | (static_cast<uint32_t>(p[1]) << 16)
27 | (static_cast<uint32_t>(p[2]) << 8)
28 | static_cast<uint32_t>(p[3]);
29}

References be32().

Referenced by be32().

◆ inflate_chunk()

bool hfs::anonymous_namespace{hfs_decmpfs.cpp}::inflate_chunk ( const unsigned char * in_buf,
size_t in_size,
unsigned char * out_buf,
size_t out_size,
size_t & out_produced,
std::string & error )

Definition at line 37 of file hfs_decmpfs.cpp.

39 {
40 if (in_size == 0) {
41 error = "empty chunk";
42 return false;
43 }
44 // Check for the 0xFF "raw" marker
45 if (in_buf[0] == 0xFF) {
46 const size_t raw_len = in_size - 1;
47 if (raw_len > out_size) {
48 error = "raw chunk larger than output buffer";
49 return false;
50 }
51 std::memcpy(out_buf, in_buf + 1, raw_len);
52 out_produced = raw_len;
53 return true;
54 }
55
56 // Standard zlib stream
57 z_stream zs{};
58 zs.next_in = const_cast<Bytef*>(in_buf);
59 zs.avail_in = static_cast<uInt>(in_size);
60 zs.next_out = out_buf;
61 zs.avail_out = static_cast<uInt>(out_size);
62 int ret = inflateInit(&zs);
63 if (ret != Z_OK) {
64 error = "inflateInit failed";
65 return false;
66 }
67 ret = inflate(&zs, Z_FINISH);
68 if (ret != Z_STREAM_END && ret != Z_OK) {
69 error = std::string("inflate failed: ") +
70 (zs.msg ? zs.msg : "unknown error");
71 inflateEnd(&zs);
72 return false;
73 }
74 out_produced = static_cast<size_t>(zs.total_out);
75 inflateEnd(&zs);
76 return true;
77}

References inflate_chunk().

Referenced by inflate_chunk().

◆ le32()

uint32_t hfs::anonymous_namespace{hfs_decmpfs.cpp}::le32 ( const unsigned char * p)
inline

Definition at line 16 of file hfs_decmpfs.cpp.

16 {
17 return static_cast<uint32_t>(p[0])
18 | (static_cast<uint32_t>(p[1]) << 8)
19 | (static_cast<uint32_t>(p[2]) << 16)
20 | (static_cast<uint32_t>(p[3]) << 24);
21}

References le32().

Referenced by le32().