hacks/dump-imessages/iphone-dataprotection/emf_decrypter/includes/hfs/hfscompress.h

72 lines
1.4 KiB
C

#ifndef HFSCOMPRESS_H
#define HFSCOMPRESS_H
#include <stdint.h>
#include "common.h"
#define CMPFS_MAGIC 0x636D7066
typedef struct HFSPlusDecmpfs {
uint32_t magic;
uint32_t flags;
uint64_t size;
uint8_t data[0];
} __attribute__ ((packed)) HFSPlusDecmpfs;
typedef struct HFSPlusCmpfRsrcHead {
uint32_t headerSize;
uint32_t totalSize;
uint32_t dataSize;
uint32_t flags;
} __attribute__ ((packed)) HFSPlusCmpfRsrcHead;
typedef struct HFSPlusCmpfRsrcBlock {
uint32_t offset;
uint32_t size;
} __attribute__ ((packed)) HFSPlusCmpfRsrcBlock;
typedef struct HFSPlusCmpfRsrcBlockHead {
uint32_t dataSize;
uint32_t numBlocks;
HFSPlusCmpfRsrcBlock blocks[0];
} __attribute__ ((packed)) HFSPlusCmpfRsrcBlockHead;
typedef struct HFSPlusCmpfEnd {
uint32_t pad[6];
uint16_t unk1;
uint16_t unk2;
uint16_t unk3;
uint32_t magic;
uint32_t flags;
uint64_t size;
uint32_t unk4;
} __attribute__ ((packed)) HFSPlusCmpfEnd;
typedef struct HFSPlusCompressed {
Volume* volume;
HFSPlusCatalogFile* file;
io_func* io;
size_t decmpfsSize;
HFSPlusDecmpfs* decmpfs;
HFSPlusCmpfRsrcHead rsrcHead;
HFSPlusCmpfRsrcBlockHead* blocks;
int dirty;
uint8_t* cached;
uint32_t cachedStart;
uint32_t cachedEnd;
} HFSPlusCompressed;
#ifdef __cplusplus
extern "C" {
#endif
void flipHFSPlusDecmpfs(HFSPlusDecmpfs* compressData);
io_func* openHFSPlusCompressed(Volume* volume, HFSPlusCatalogFile* file);
#ifdef __cplusplus
}
#endif
#endif