2009-02-08 Robert Millan <rmh@aybabtu.com>
* fs/cpio.c: Split tar functionality to ... * fs/tar.c: ... here (new file). Update all users.
This commit is contained in:
parent
aebfc4b085
commit
f821ce593a
16 changed files with 172 additions and 69 deletions
47
fs/cpio.c
47
fs/cpio.c
|
@ -66,16 +66,12 @@ struct HEAD_USTAR
|
|||
|
||||
#define HEAD_LENG sizeof(struct HEAD_USTAR)
|
||||
|
||||
#define MODE_BCPIO 1
|
||||
#define MODE_USTAR 2
|
||||
|
||||
struct grub_cpio_data
|
||||
{
|
||||
grub_disk_t disk;
|
||||
grub_uint32_t hofs;
|
||||
grub_uint32_t dofs;
|
||||
grub_uint32_t size;
|
||||
int mode;
|
||||
};
|
||||
|
||||
#ifndef GRUB_UTIL
|
||||
|
@ -86,8 +82,7 @@ static grub_err_t
|
|||
grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
||||
grub_uint32_t * ofs)
|
||||
{
|
||||
if (data->mode == MODE_BCPIO)
|
||||
{
|
||||
#ifndef MODE_USTAR
|
||||
struct HEAD_BCPIO hd;
|
||||
|
||||
if (grub_disk_read
|
||||
|
@ -123,9 +118,7 @@ grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
|||
*ofs = data->dofs + data->size;
|
||||
if (data->size & 1)
|
||||
(*ofs)++;
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
struct HEAD_USTAR hd;
|
||||
|
||||
if (grub_disk_read
|
||||
|
@ -148,7 +141,7 @@ grub_cpio_find_file (struct grub_cpio_data *data, char **name,
|
|||
data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE;
|
||||
*ofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) &
|
||||
~(GRUB_DISK_SECTOR_SIZE - 1));
|
||||
}
|
||||
#endif
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
|
@ -157,17 +150,16 @@ grub_cpio_mount (grub_disk_t disk)
|
|||
{
|
||||
char hd[HEAD_LENG];
|
||||
struct grub_cpio_data *data;
|
||||
int mode;
|
||||
|
||||
if (grub_disk_read (disk, 0, 0, sizeof (hd), hd))
|
||||
goto fail;
|
||||
|
||||
if (((struct HEAD_BCPIO *) hd)->magic == MAGIC_BCPIO)
|
||||
mode = MODE_BCPIO;
|
||||
else if (!grub_memcmp (((struct HEAD_USTAR *) hd)->magic, MAGIC_USTAR,
|
||||
#ifndef MODE_USTAR
|
||||
if (((struct HEAD_BCPIO *) hd)->magic != MAGIC_BCPIO)
|
||||
#else
|
||||
if (grub_memcmp (((struct HEAD_USTAR *) hd)->magic, MAGIC_USTAR,
|
||||
sizeof (MAGIC_USTAR) - 1))
|
||||
mode = MODE_USTAR;
|
||||
else
|
||||
#endif
|
||||
goto fail;
|
||||
|
||||
data = (struct grub_cpio_data *) grub_malloc (sizeof (*data));
|
||||
|
@ -175,12 +167,17 @@ grub_cpio_mount (grub_disk_t disk)
|
|||
goto fail;
|
||||
|
||||
data->disk = disk;
|
||||
data->mode = mode;
|
||||
|
||||
return data;
|
||||
|
||||
fail:
|
||||
grub_error (GRUB_ERR_BAD_FS, "not a cpio filesystem");
|
||||
grub_error (GRUB_ERR_BAD_FS, "not a "
|
||||
#ifdef MODE_USTAR
|
||||
"tar"
|
||||
#else
|
||||
"cpio"
|
||||
#endif
|
||||
" filesystem");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -350,16 +347,22 @@ grub_cpio_close (grub_file_t file)
|
|||
}
|
||||
|
||||
static struct grub_fs grub_cpio_fs = {
|
||||
#ifdef MODE_USTAR
|
||||
.name = "tarfs",
|
||||
#else
|
||||
.name = "cpiofs",
|
||||
#endif
|
||||
.dir = grub_cpio_dir,
|
||||
.open = grub_cpio_open,
|
||||
.read = grub_cpio_read,
|
||||
.close = grub_cpio_close,
|
||||
.label = 0,
|
||||
.next = 0
|
||||
};
|
||||
|
||||
#ifdef MODE_USTAR
|
||||
GRUB_MOD_INIT (cpio)
|
||||
#else
|
||||
GRUB_MOD_INIT (tar)
|
||||
#endif
|
||||
{
|
||||
grub_fs_register (&grub_cpio_fs);
|
||||
#ifndef GRUB_UTIL
|
||||
|
@ -367,7 +370,11 @@ GRUB_MOD_INIT (cpio)
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef MODE_USTAR
|
||||
GRUB_MOD_FINI (cpio)
|
||||
#else
|
||||
GRUB_MOD_FINI (tar)
|
||||
#endif
|
||||
{
|
||||
grub_fs_unregister (&grub_cpio_fs);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue