mtime support for cpio and tar
This commit is contained in:
parent
15abb5547f
commit
db64f5b167
1 changed files with 11 additions and 3 deletions
|
@ -78,7 +78,7 @@ static grub_dl_t my_mod;
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
||||||
grub_uint32_t * ofs)
|
grub_int32_t *mtime, grub_uint32_t * ofs)
|
||||||
{
|
{
|
||||||
#ifndef MODE_USTAR
|
#ifndef MODE_USTAR
|
||||||
struct head hd;
|
struct head hd;
|
||||||
|
@ -91,6 +91,8 @@ grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "invalid cpio archive");
|
return grub_error (GRUB_ERR_BAD_FS, "invalid cpio archive");
|
||||||
|
|
||||||
data->size = (((grub_uint32_t) hd.filesize_1) << 16) + hd.filesize_2;
|
data->size = (((grub_uint32_t) hd.filesize_1) << 16) + hd.filesize_2;
|
||||||
|
if (mtime)
|
||||||
|
*mtime = (((grub_uint32_t) hd.mtime_1) << 16) + hd.mtime_2;
|
||||||
|
|
||||||
if (hd.namesize & 1)
|
if (hd.namesize & 1)
|
||||||
hd.namesize++;
|
hd.namesize++;
|
||||||
|
@ -139,6 +141,8 @@ grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
||||||
data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE;
|
data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE;
|
||||||
*ofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) &
|
*ofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) &
|
||||||
~(GRUB_DISK_SECTOR_SIZE - 1));
|
~(GRUB_DISK_SECTOR_SIZE - 1));
|
||||||
|
if (mtime)
|
||||||
|
*mtime = grub_strtoul (hd.mtime, NULL, 8);
|
||||||
#endif
|
#endif
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
@ -204,7 +208,9 @@ grub_cpio_dir (grub_device_t device, const char *path,
|
||||||
data->hofs = 0;
|
data->hofs = 0;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (grub_cpio_find_file (data, &name, &ofs))
|
grub_int32_t mtime;
|
||||||
|
|
||||||
|
if (grub_cpio_find_file (data, &name, &mtime, &ofs))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!ofs)
|
if (!ofs)
|
||||||
|
@ -227,6 +233,8 @@ grub_cpio_dir (grub_device_t device, const char *path,
|
||||||
struct grub_dirhook_info info;
|
struct grub_dirhook_info info;
|
||||||
grub_memset (&info, 0, sizeof (info));
|
grub_memset (&info, 0, sizeof (info));
|
||||||
info.dir = (p != NULL);
|
info.dir = (p != NULL);
|
||||||
|
info.mtime = mtime;
|
||||||
|
info.mtimeset = 1;
|
||||||
|
|
||||||
hook (name + len, &info);
|
hook (name + len, &info);
|
||||||
if (prev)
|
if (prev)
|
||||||
|
@ -269,7 +277,7 @@ grub_cpio_open (grub_file_t file, const char *name)
|
||||||
data->hofs = 0;
|
data->hofs = 0;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (grub_cpio_find_file (data, &fn, &ofs))
|
if (grub_cpio_find_file (data, &fn, NULL, &ofs))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (!ofs)
|
if (!ofs)
|
||||||
|
|
Loading…
Reference in a new issue