void displayFolder(HFSCatalogNodeID folderID, Volume* volume) { CatalogRecordList* list; CatalogRecordList* theList; HFSPlusCatalogFolder* folder; HFSPlusCatalogFile* file; time_t fileTime; struct tm *date; HFSPlusDecmpfs* compressData; size_t attrSize; theList = list = getFolderContents(folderID, volume); while(list != NULL) { if(list->record->recordType == kHFSPlusFolderRecord) { folder = (HFSPlusCatalogFolder*)list->record; printf("%06o ", folder->permissions.fileMode); printf("%3d ", folder->permissions.ownerID); printf("%3d ", folder->permissions.groupID); printf("%12d ", folder->valence); fileTime = APPLE_TO_UNIX_TIME(folder->contentModDate); } else if(list->record->recordType == kHFSPlusFileRecord) { file = (HFSPlusCatalogFile*)list->record; printf("%06o ", file->permissions.fileMode); printf("%3d ", file->permissions.ownerID); printf("%3d ", file->permissions.groupID); if(file->permissions.ownerFlags & UF_COMPRESSED) { attrSize = getAttribute(volume, file->fileID, "com.apple.decmpfs", (uint8_t**)(&compressData)); flipHFSPlusDecmpfs(compressData); printf("%12" PRId64 " ", compressData->size); free(compressData); } else { printf("%12" PRId64 " ", file->dataFork.logicalSize); } fileTime = APPLE_TO_UNIX_TIME(file->contentModDate); } date = localtime(&fileTime); if(date != NULL) { printf("%2d/%2d/%4d %02d:%02d ", date->tm_mon, date->tm_mday, date->tm_year + 1900, date->tm_hour, date->tm_min); } else { printf(" "); } printUnicode(&list->name); printf("\n"); list = list->next; } releaseCatalogRecordList(theList); }
void displayFolder(HFSCatalogNodeID folderID, Volume* volume) { CatalogRecordList* list; CatalogRecordList* theList; HFSPlusCatalogFolder* folder; HFSPlusCatalogFile* file; time_t fileTime; struct tm *date; theList = list = getFolderContents(folderID, volume); while(list != NULL) { if(list->record->recordType == kHFSPlusFolderRecord) { folder = (HFSPlusCatalogFolder*)list->record; printf("%06o ", folder->permissions.fileMode); printf("%3d ", folder->permissions.ownerID); printf("%3d ", folder->permissions.groupID); printf("%12d ", folder->valence); fileTime = APPLE_TO_UNIX_TIME(folder->contentModDate); } else if(list->record->recordType == kHFSPlusFileRecord) { file = (HFSPlusCatalogFile*)list->record; printf("%06o ", file->permissions.fileMode); printf("%3d ", file->permissions.ownerID); printf("%3d ", file->permissions.groupID); printf("%12" PRId64 " ", file->dataFork.logicalSize); fileTime = APPLE_TO_UNIX_TIME(file->contentModDate); } date = localtime(&fileTime); if(date != NULL) { printf("%2d/%2d/%4d %02d:%02d ", date->tm_mon, date->tm_mday, date->tm_year + 1900, date->tm_hour, date->tm_min); } else { printf(" "); } printUnicode(&list->name); printf("\n"); list = list->next; } releaseCatalogRecordList(theList); }
void displayFileLSLine(HFSPlusCatalogFile* file, const char* name) { time_t fileTime; struct tm *date; printf("%06o ", file->permissions.fileMode); printf("%3d ", file->permissions.ownerID); printf("%3d ", file->permissions.groupID); printf("%12" PRId64 " ", file->dataFork.logicalSize); fileTime = APPLE_TO_UNIX_TIME(file->contentModDate); date = localtime(&fileTime); if(date != NULL) { printf("%2d/%2d/%4d %2d:%02d ", date->tm_mon, date->tm_mday, date->tm_year + 1900, date->tm_hour, date->tm_min); } else { printf(" "); } printf("%s\n", name); }
NSizResource* readNSiz(ResourceKey* resources) { ResourceData* curData; NSizResource* toReturn; NSizResource* curNSiz; char* curLoc; uint32_t modifyDate; curData = getResourceByKey(resources, "nsiz")->data; toReturn = NULL; while(curData != NULL) { curLoc = (char*) curData->data; if(toReturn == NULL) { toReturn = (NSizResource*) malloc(sizeof(NSizResource)); curNSiz = toReturn; } else { curNSiz->next = (NSizResource*) malloc(sizeof(NSizResource)); curNSiz = curNSiz->next; } curNSiz->next = NULL; readNSizResource(curNSiz, &curLoc); printf("block-checksum-2:\t0x%x\n", curNSiz->blockChecksum2); printf("part-num:\t\t0x%x\n", curNSiz->partitionNumber); printf("version:\t\t0x%x\n", curNSiz->version); if(curNSiz->isVolume) { printf("has SHA1:\t\t%d\n", curNSiz->sha1Digest != NULL); printf("bytes:\t\t\t0x%x\n", curNSiz->bytes); modifyDate = APPLE_TO_UNIX_TIME(curNSiz->modifyDate); printf("date:\t\t\t%s", ctime((time_t*)(&modifyDate))); printf("volume-signature:\t0x%x\n", curNSiz->volumeSignature); } printf("\n"); curData = curData->next; } return toReturn; }
void displayFileLSLine(Volume* volume, HFSPlusCatalogFile* file, const char* name) { time_t fileTime; struct tm *date; HFSPlusDecmpfs* compressData; printf("%06o ", file->permissions.fileMode); printf("%3d ", file->permissions.ownerID); printf("%3d ", file->permissions.groupID); if(file->permissions.ownerFlags & UF_COMPRESSED) { getAttribute(volume, file->fileID, "com.apple.decmpfs", (uint8_t**)(&compressData)); flipHFSPlusDecmpfs(compressData); printf("%12" PRId64 " ", compressData->size); free(compressData); } else { printf("%12" PRId64 " ", file->dataFork.logicalSize); } fileTime = APPLE_TO_UNIX_TIME(file->contentModDate); date = localtime(&fileTime); if(date != NULL) { printf("%2d/%2d/%4d %2d:%02d ", date->tm_mon, date->tm_mday, date->tm_year + 1900, date->tm_hour, date->tm_min); } else { printf(" "); } printf("%s\n", name); XAttrList* next; XAttrList* attrs = getAllExtendedAttributes(file->fileID, volume); if(attrs != NULL) { printf("Extended attributes\n"); while(attrs != NULL) { next = attrs->next; printf("\t%s\n", attrs->name); free(attrs->name); free(attrs); attrs = next; } } }