Remove nested functions from disk and file read hooks.

* include/grub/disk.h (grub_disk_read_hook_t): New type.
	(struct grub_disk): Add read_hook_data member.
	* include/grub/file.h (struct grub_file): Likewise.
	* include/grub/fshelp.h (grub_fshelp_read_file): Add read_hook_data
	argument.

	Update all callers.
This commit is contained in:
Colin Watson 2013-02-27 17:19:15 +01:00 committed by Vladimir 'phcoder' Serbinenko
parent df6da5a52d
commit 4eb8b75659
29 changed files with 409 additions and 345 deletions

View file

@ -564,9 +564,7 @@ fail:
static grub_ssize_t
grub_udf_read_file (grub_fshelp_node_t node,
void NESTED_FUNC_ATTR
(*read_hook) (grub_disk_addr_t sector,
unsigned offset, unsigned length),
grub_disk_read_hook_t read_hook, void *read_hook_data,
grub_off_t pos, grub_size_t len, char *buf)
{
switch (U16 (node->block.fe.icbtag.flags) & GRUB_UDF_ICBTAG_FLAG_AD_MASK)
@ -591,10 +589,11 @@ grub_udf_read_file (grub_fshelp_node_t node,
return 0;
}
return grub_fshelp_read_file (node->data->disk, node, read_hook,
pos, len, buf, grub_udf_read_block,
U64 (node->block.fe.file_size),
node->data->lbshift, 0);
return grub_fshelp_read_file (node->data->disk, node,
read_hook, read_hook_data,
pos, len, buf, grub_udf_read_block,
U64 (node->block.fe.file_size),
node->data->lbshift, 0);
}
static unsigned sblocklist[] = { 256, 512, 0 };
@ -861,7 +860,7 @@ grub_udf_iterate_dir (grub_fshelp_node_t dir,
while (offset < U64 (dir->block.fe.file_size))
{
if (grub_udf_read_file (dir, 0, offset, sizeof (dirent),
if (grub_udf_read_file (dir, 0, 0, offset, sizeof (dirent),
(char *) &dirent) != sizeof (dirent))
return 0;
@ -898,7 +897,7 @@ grub_udf_iterate_dir (grub_fshelp_node_t dir,
if (child->block.fe.icbtag.file_type == GRUB_UDF_ICBTAG_TYPE_SYMLINK)
type = GRUB_FSHELP_SYMLINK;
if ((grub_udf_read_file (dir, 0, offset,
if ((grub_udf_read_file (dir, 0, 0, offset,
dirent.file_ident_length,
(char *) raw))
!= dirent.file_ident_length)
@ -937,7 +936,7 @@ grub_udf_read_symlink (grub_fshelp_node_t node)
raw = grub_malloc (sz);
if (!raw)
return NULL;
if (grub_udf_read_file (node, NULL, 0, sz, (char *) raw) < 0)
if (grub_udf_read_file (node, NULL, NULL, 0, sz, (char *) raw) < 0)
{
grub_free (raw);
return NULL;
@ -1149,7 +1148,8 @@ grub_udf_read (grub_file_t file, char *buf, grub_size_t len)
{
struct grub_fshelp_node *node = (struct grub_fshelp_node *) file->data;
return grub_udf_read_file (node, file->read_hook, file->offset, len, buf);
return grub_udf_read_file (node, file->read_hook, file->read_hook_data,
file->offset, len, buf);
}
static grub_err_t