mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-25 00:29:23 +00:00
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:
1 parent
aebfc4b085
commit
f821ce593a
16 files changed
+172
-69
No files matched your search
@@ -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);
|
||||
}
|
||||
Reference in new issue
Block a user