fs: add fs_readdir()
Needed to support efi file protocol. The fallback.efi loader wants to be able to read the contents of the /EFI directory to find an OS to boot. Modelled after POSIX opendir()/readdir()/closedir(). Unlike the other fs APIs, this is stateful (ie. state is held in the FS_DIR "directory stream"), to avoid re-traversing of the directory structure at each step. The directory stream must be released with closedir() when it is no longer needed. Signed-off-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Łukasz Majewski <lukma@denx.de> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
31
disk/part.c
31
disk/part.c
@@ -331,6 +331,24 @@ int part_get_info(struct blk_desc *dev_desc, int part,
|
||||
return -1;
|
||||
}
|
||||
|
||||
int part_get_info_whole_disk(struct blk_desc *dev_desc, disk_partition_t *info)
|
||||
{
|
||||
info->start = 0;
|
||||
info->size = dev_desc->lba;
|
||||
info->blksz = dev_desc->blksz;
|
||||
info->bootable = 0;
|
||||
strcpy((char *)info->type, BOOT_PART_TYPE);
|
||||
strcpy((char *)info->name, "Whole Disk");
|
||||
#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
|
||||
info->uuid[0] = 0;
|
||||
#endif
|
||||
#ifdef CONFIG_PARTITION_TYPE_GUID
|
||||
info->type_guid[0] = 0;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int blk_get_device_by_str(const char *ifname, const char *dev_hwpart_str,
|
||||
struct blk_desc **dev_desc)
|
||||
{
|
||||
@@ -523,18 +541,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
|
||||
|
||||
(*dev_desc)->log2blksz = LOG2((*dev_desc)->blksz);
|
||||
|
||||
info->start = 0;
|
||||
info->size = (*dev_desc)->lba;
|
||||
info->blksz = (*dev_desc)->blksz;
|
||||
info->bootable = 0;
|
||||
strcpy((char *)info->type, BOOT_PART_TYPE);
|
||||
strcpy((char *)info->name, "Whole Disk");
|
||||
#if CONFIG_IS_ENABLED(PARTITION_UUIDS)
|
||||
info->uuid[0] = 0;
|
||||
#endif
|
||||
#ifdef CONFIG_PARTITION_TYPE_GUID
|
||||
info->type_guid[0] = 0;
|
||||
#endif
|
||||
part_get_info_whole_disk(*dev_desc, info);
|
||||
|
||||
ret = 0;
|
||||
goto cleanup;
|
||||
|
||||
Reference in New Issue
Block a user