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:
robertmh 2009-02-07 23:38:01 +00:00
parent aebfc4b085
commit f821ce593a
16 changed files with 172 additions and 69 deletions

View file

@ -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);
}