efi_loader: provide file attributes in EFI_FILE_PROTOCOL.Read()

When reading a directory using EFI_FILE_PROTOCOL.Read() provide file
attributes and timestamps.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt 2021-05-15 22:41:26 +02:00
parent cbe3ab986b
commit 79a61ccb23

View file

@ -480,6 +480,17 @@ static efi_status_t file_read(struct file_handle *fh, u64 *buffer_size,
return EFI_SUCCESS;
}
static void rtc2efi(struct efi_time *time, struct rtc_time *tm)
{
memset(time, 0, sizeof(struct efi_time));
time->year = tm->tm_year;
time->month = tm->tm_mon;
time->day = tm->tm_mday;
time->hour = tm->tm_hour;
time->minute = tm->tm_min;
time->second = tm->tm_sec;
}
static efi_status_t dir_read(struct file_handle *fh, u64 *buffer_size,
void *buffer)
{
@ -535,6 +546,10 @@ static efi_status_t dir_read(struct file_handle *fh, u64 *buffer_size,
info->size = required_size;
info->file_size = dent->size;
info->physical_size = dent->size;
info->attribute = dent->attr;
rtc2efi(&info->create_time, &dent->create_time);
rtc2efi(&info->modification_time, &dent->change_time);
rtc2efi(&info->last_access_time, &dent->access_time);
if (dent->type == FS_DT_DIR)
info->attribute |= EFI_FILE_DIRECTORY;