/* read a hfsp_cat_file from memory */ static void* record_readfile(void *p, hfsp_cat_file* file) { file->flags = bswabU16_inc(p); file->reserved1 = bswabU32_inc(p); file->id = bswabU32_inc(p); file->create_date = bswabU32_inc(p); file->content_mod_date = bswabU32_inc(p); file->attribute_mod_date = bswabU32_inc(p); file->access_date = bswabU32_inc(p); file->backup_date = bswabU32_inc(p); p = record_readperm (p, &file->permissions); p = record_readFInfo (p, &file->user_info); p = record_readFXInfo (p, &file->finder_info); file->text_encoding = bswabU32_inc(p); file->reserved2 = bswabU32_inc(p); p = volume_readfork (p, &file->data_fork); return volume_readfork (p, &file->res_fork); }
/* Read the volume from the given buffer and swap the bytes. * * ToDo: add more consitency checks. */ static int volume_readbuf(hfsp_vh* vh, char * p) { if( (vh->signature = bswabU16_inc(p)) != HFSP_VOLHEAD_SIG) HFSP_ERROR(-1, "This is not a HFS+ volume"); vh->version = bswabU16_inc(p); vh->attributes = bswabU32_inc(p); vh->last_mount_vers = bswabU32_inc(p); vh->reserved = bswabU32_inc(p); vh->create_date = bswabU32_inc(p); vh->modify_date = bswabU32_inc(p); vh->backup_date = bswabU32_inc(p); vh->checked_date = bswabU32_inc(p); vh->file_count = bswabU32_inc(p); vh->folder_count = bswabU32_inc(p); vh->blocksize = bswabU32_inc(p); vh->total_blocks = bswabU32_inc(p); vh->free_blocks = bswabU32_inc(p); vh->next_alloc = bswabU32_inc(p); vh->rsrc_clump_sz = bswabU32_inc(p); vh->data_clump_sz = bswabU32_inc(p); vh->next_cnid = bswabU32_inc(p); vh->write_count = bswabU32_inc(p); vh->encodings_bmp = bswabU64_inc(p); memcpy(vh->finder_info, p, 32); p += 32; // So finderinfo must be swapped later, *** p = volume_readfork(p, &vh->alloc_file ); p = volume_readfork(p, &vh->ext_file ); p = volume_readfork(p, &vh->cat_file ); p = volume_readfork(p, &vh->attr_file ); p = volume_readfork(p, &vh->start_file ); return 0; fail: return -1; }