/* * Given the path to the file, open it and load the internal * partition table structure * * offset is the byte offset to the start of the volume system * * If test is 1 then additional tests are performed to make sure * it isn't a FAT or NTFS file system. This is used when autodetection * is being used to detect the volume system type. */ TSK_VS_INFO * tsk_vs_dos_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset, uint8_t test) { TSK_VS_INFO *vs; // clean up any errors that are lying around tsk_error_reset(); vs = (TSK_VS_INFO *) tsk_malloc(sizeof(*vs)); if (vs == NULL) return NULL; vs->vstype = TSK_VS_TYPE_DOS; vs->tag = TSK_VS_INFO_TAG; vs->img_info = img_info; vs->offset = offset; /* initialize settings */ vs->part_list = NULL; vs->part_count = 0; vs->endian = 0; vs->block_size = img_info->sector_size; /* Assign functions */ vs->close = dos_close; /* Load the partitions into the sorted list */ if (dos_load_prim_table(vs, test)) { dos_close(vs); return NULL; } /* fill in the sorted list with the 'unknown' values */ if (tsk_vs_part_unused(vs)) { dos_close(vs); return NULL; } return vs; }
/* * Given the path to the file, open it and load the internal * partition table structure * * offset is the byte offset to the start of the volume system * * If test is 1 then additional tests are performed to make sure * it isn't a FAT or NTFS file system */ MM_INFO * dos_open(IMG_INFO * img_info, DADDR_T offset, uint8_t test) { MM_INFO *mm = (MM_INFO *) mymalloc(sizeof(*mm)); if (mm == NULL) return NULL; mm->mmtype = MM_DOS; mm->str_type = "DOS Partition Table"; mm->img_info = img_info; mm->offset = offset; /* inititialize settings */ mm->part_list = NULL; mm->first_part = mm->last_part = 0; mm->endian = 0; mm->dev_bsize = 512; mm->block_size = 512; /* Assign functions */ mm->part_walk = dos_part_walk; mm->close = dos_close; /* Load the partitions into the sorted list */ if (dos_load_prim_table(mm, test)) { dos_close(mm); return NULL; } /* fill in the sorted list with the 'unknown' values */ if (mm_part_unused(mm)) { dos_close(mm); return NULL; } return mm; }