Пример #1
0
static struct ext2_group_desc *ext2_read_gdt(struct ext2_desc *desc)
{
	ssize_t rdlen;
	struct ext2_group_desc *gdt;
	size_t gdt_size = desc->group_count * sizeof(*gdt);

	gdt = malloc(gdt_size);
	if (gdt == NULL)
	{
		pr_error_info("malloc");
		return NULL;
	}

	rdlen = ffile_readfrom(desc->fd, gdt, gdt_size, BOOT_BLOCK_SIZE + desc->block_size);
	if ((size_t) rdlen != gdt_size)
	{
		pr_error_info("ffile_readfrom");
		goto out_free_gdt;
	}

	return gdt;

out_free_gdt:
	free(gdt);
	return NULL;
}
Пример #2
0
static int ext2_read_directory_entry(struct ext2_desc *desc, off_t offset, struct ext2_directory_entry *entry)
{
	ssize_t rdlen;

	rdlen = ffile_readfrom(desc->fd, entry, EXT2_DIR_ENTRY_HEADER_SIZE, offset);
	if (rdlen < 0)
	{
		pr_error_info("read");
		return rdlen;
	}

	if (entry->inode == 0)
	{
		pr_red_info("inode is zero");
		return -EINVAL;
	}

	if (entry->name_len == 0)
	{
		pr_red_info("name length is zero");
		return -EINVAL;
	}

	if (entry->rec_len < EXT2_DIR_ENTRY_HEADER_SIZE + entry->name_len)
	{
		pr_red_info("rec_len = %d", entry->rec_len);
		return -EINVAL;
	}

	rdlen = ffile_read(desc->fd, entry->name, entry->name_len);
	if (rdlen < 0)
	{
		pr_error_info("read");
		return rdlen;
	}

	entry->name[rdlen] = 0;

#if CAVAN_EXT2_DEBUG
	show_ext2_directory_entry(entry);
#endif

	return 0;
}
Пример #3
0
static ssize_t ext2_read_block(struct ext2_desc *desc, u64 index, void *blocks, size_t count)
{
	off_t offset = block_index_to_offset(desc, index);

	return ffile_readfrom(desc->fd, blocks, desc->block_size * count, offset);
}
Пример #4
0
static ssize_t vfat_app_device_read_byte(struct cavan_block_device *bdev, u64 index, u32 offset, void *buff, size_t size)
{
	return ffile_readfrom(*(int *) bdev->context, buff, size, (index << bdev->block_shift) + offset);
}
Пример #5
0
static ssize_t vfat_app_device_read_block(struct cavan_block_device *bdev, u64 index, void *buff, size_t count)
{
	return ffile_readfrom(*(int *) bdev->context, buff, count << bdev->block_shift, index << bdev->block_shift);
}