void flipCatalogFile(HFSPlusCatalogFile* record) { FLIPENDIAN(record->recordType); FLIPENDIAN(record->flags); FLIPENDIAN(record->fileID); FLIPENDIAN(record->createDate); FLIPENDIAN(record->contentModDate); FLIPENDIAN(record->attributeModDate); FLIPENDIAN(record->accessDate); FLIPENDIAN(record->backupDate); flipBSDInfo(&record->permissions); flipFileInfo(&record->userInfo); flipExtendedFileInfo(&record->finderInfo); FLIPENDIAN(record->textEncoding); flipForkData(&record->dataFork); flipForkData(&record->resourceFork); }
static int writeVolumeHeader(io_func *io, HFSPlusVolumeHeader *volumeHeaderToWrite, off_t offset) { HFSPlusVolumeHeader *volumeHeader; volumeHeader = (HFSPlusVolumeHeader *)malloc(sizeof(HFSPlusVolumeHeader)); memcpy(volumeHeader, volumeHeaderToWrite, sizeof(HFSPlusVolumeHeader)); FLIPENDIAN(volumeHeader->signature); FLIPENDIAN(volumeHeader->version); FLIPENDIAN(volumeHeader->attributes); FLIPENDIAN(volumeHeader->lastMountedVersion); FLIPENDIAN(volumeHeader->journalInfoBlock); FLIPENDIAN(volumeHeader->createDate); FLIPENDIAN(volumeHeader->modifyDate); FLIPENDIAN(volumeHeader->backupDate); FLIPENDIAN(volumeHeader->checkedDate); FLIPENDIAN(volumeHeader->fileCount); FLIPENDIAN(volumeHeader->folderCount); FLIPENDIAN(volumeHeader->blockSize); FLIPENDIAN(volumeHeader->totalBlocks); FLIPENDIAN(volumeHeader->freeBlocks); FLIPENDIAN(volumeHeader->nextAllocation); FLIPENDIAN(volumeHeader->rsrcClumpSize); FLIPENDIAN(volumeHeader->dataClumpSize); FLIPENDIAN(volumeHeader->nextCatalogID); FLIPENDIAN(volumeHeader->writeCount); FLIPENDIAN(volumeHeader->encodingsBitmap); flipForkData(&volumeHeader->allocationFile); flipForkData(&volumeHeader->extentsFile); flipForkData(&volumeHeader->catalogFile); flipForkData(&volumeHeader->attributesFile); flipForkData(&volumeHeader->startupFile); if (!(WRITE(io, offset, sizeof(HFSPlusVolumeHeader), volumeHeader))) { return FALSE; } free(volumeHeader); return TRUE; }
static HFSPlusVolumeHeader* readVolumeHeader(io_func* io, off_t offset) { HFSPlusVolumeHeader* volumeHeader; volumeHeader = (HFSPlusVolumeHeader*) malloc(sizeof(HFSPlusVolumeHeader)); if(!volumeHeader) { bufferPrintf("hfs: cannot allocate memory for volume header\r\n"); return NULL; } if(!(READ(io, offset, sizeof(HFSPlusVolumeHeader), volumeHeader))) return NULL; FLIPENDIAN(volumeHeader->signature); FLIPENDIAN(volumeHeader->version); FLIPENDIAN(volumeHeader->attributes); FLIPENDIAN(volumeHeader->lastMountedVersion); FLIPENDIAN(volumeHeader->journalInfoBlock); FLIPENDIAN(volumeHeader->createDate); FLIPENDIAN(volumeHeader->modifyDate); FLIPENDIAN(volumeHeader->backupDate); FLIPENDIAN(volumeHeader->checkedDate); FLIPENDIAN(volumeHeader->fileCount); FLIPENDIAN(volumeHeader->folderCount); FLIPENDIAN(volumeHeader->blockSize); FLIPENDIAN(volumeHeader->totalBlocks); FLIPENDIAN(volumeHeader->freeBlocks); FLIPENDIAN(volumeHeader->nextAllocation); FLIPENDIAN(volumeHeader->rsrcClumpSize); FLIPENDIAN(volumeHeader->dataClumpSize); FLIPENDIAN(volumeHeader->nextCatalogID); FLIPENDIAN(volumeHeader->writeCount); FLIPENDIAN(volumeHeader->encodingsBitmap); flipForkData(&volumeHeader->allocationFile); flipForkData(&volumeHeader->extentsFile); flipForkData(&volumeHeader->catalogFile); flipForkData(&volumeHeader->attributesFile); flipForkData(&volumeHeader->startupFile); return volumeHeader; }
static inline void flipAttrForkData(HFSPlusAttrForkData* data) { FLIPENDIAN(data->recordType); flipForkData(&data->theFork); }