Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
static inline void flipAttrForkData(HFSPlusAttrForkData* data) {
  FLIPENDIAN(data->recordType);
  flipForkData(&data->theFork);
}