[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] cpio and tar filesystem
From: |
Bean |
Subject: |
[PATCH] cpio and tar filesystem |
Date: |
Mon, 24 Dec 2007 03:52:37 +0800 |
I write a filesystem driver for cpio and tar archive file. now you can
open the archive with loopback command:
loopback aa (hd0,1)/cpio_file
loopback bb (hd0,1)/tar_file
If you also apply my previous patch on transparent decompression, you
can even open a gzip archive, for example:
loopback aa (hd0,1)/aa.tar.gz
I also fix a serious bug in the loopback device.
Note: I only write code for binary mode cpio and new format tar, text
mode cpio and old format tar is not supported.
2007-12-24 Bean <address@hidden>
* conf/common.rmk (pkgdata_MODULES): Add cpio.mod.
(cpio_mod_SOURCES): New variable.
(cpio_mod_CFLAGS): Likewise.
(cpio_mod_LDFLAGS): Likewise.
* fs/cpio.c: New file.
* disk/loopback.c (grub_loopback_read): Bug fix.
* conf/i386-pc.rmk (grub_emu_SOURCES): Add cpio.c.
* conf/i386-efi.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-linuxbios.rmk (grub_emu_SOURCES): Likewise.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise.
diff --git a/conf/common.rmk b/conf/common.rmk
index 0e6b81b..f7c8fdb 100644
--- a/conf/common.rmk
+++ b/conf/common.rmk
@@ -81,7 +81,7 @@ update-grub_DATA += util/grub.d/README
# Filing systems.
pkgdata_MODULES += fshelp.mod fat.mod ufs.mod ext2.mod ntfs.mod
\
ntfscomp.mod minix.mod hfs.mod jfs.mod iso9660.mod xfs.mod \
- affs.mod sfs.mod hfsplus.mod
+ affs.mod sfs.mod hfsplus.mod cpio.mod
# For fshelp.mod.
fshelp_mod_SOURCES = fs/fshelp.c
@@ -153,6 +153,11 @@ hfsplus_mod_SOURCES = fs/hfsplus.c
hfsplus_mod_CFLAGS = $(COMMON_CFLAGS)
hfsplus_mod_LDFLAGS = $(COMMON_LDFLAGS)
+# For cpio.mod.
+cpio_mod_SOURCES = fs/cpio.c
+cpio_mod_CFLAGS = $(COMMON_CFLAGS)
+cpio_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
# Partition maps.
pkgdata_MODULES += amiga.mod apple.mod pc.mod sun.mod acorn.mod gpt.mod
diff --git a/conf/i386-efi.rmk b/conf/i386-efi.rmk
index 305cbe4..397cfbb 100644
--- a/conf/i386-efi.rmk
+++ b/conf/i386-efi.rmk
@@ -51,7 +51,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c
commands/cmp.c \
disk/loopback.c \
fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c \
fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs/hfsplus.c \
- fs/ntfs.c fs/ntfscomp.c \
+ fs/ntfs.c fs/ntfscomp.c fs/cpio.c \
io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
diff --git a/conf/i386-linuxbios.rmk b/conf/i386-linuxbios.rmk
index 8b98d3b..c33d937 100644
--- a/conf/i386-linuxbios.rmk
+++ b/conf/i386-linuxbios.rmk
@@ -76,7 +76,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c
commands/cmp.c \
disk/host.c disk/loopback.c disk/raid.c disk/lvm.c \
fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c \
fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs/hfsplus.c \
- fs/ntfs.c fs/ntfscomp.c \
+ fs/ntfs.c fs/ntfscomp.c fs/cpio.c \
io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk
index 8c100d7..8e0f31b 100644
--- a/conf/i386-pc.rmk
+++ b/conf/i386-pc.rmk
@@ -103,7 +103,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c
commands/cmp.c \
disk/host.c disk/loopback.c disk/raid.c disk/lvm.c \
fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c \
fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs/hfsplus.c \
- fs/ntfs.c fs/ntfscomp.c \
+ fs/ntfs.c fs/ntfscomp.c fs/cpio.c \
io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c \
diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk
index eb440f1..af0773b 100644
--- a/conf/powerpc-ieee1275.rmk
+++ b/conf/powerpc-ieee1275.rmk
@@ -62,7 +62,7 @@ grub_emu_SOURCES = commands/boot.c commands/cat.c
commands/cmp.c \
disk/loopback.c \
fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c \
fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs/hfsplus.c \
- fs/ntfs.c fs/ntfscomp.c \
+ fs/ntfs.c fs/ntfscomp.c fs/cpio.c \
io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
kern/err.c kern/file.c kern/fs.c kern/loader.c kern/main.c \
diff --git a/disk/loopback.c b/disk/loopback.c
index 9d48def..31d8116 100644
--- a/disk/loopback.c
+++ b/disk/loopback.c
@@ -214,7 +214,7 @@ grub_loopback_read (grub_disk_t disk,
grub_disk_addr_t sector,
if (pos > file->size)
{
grub_size_t amount = pos - file->size;
- grub_memset (buf + size - amount, 0, amount);
+ grub_memset (buf + (size << GRUB_DISK_SECTOR_BITS) - amount, 0, amount);
}
return 0;
--
Bean
- [PATCH] cpio and tar filesystem,
Bean <=
Re: [PATCH] cpio and tar filesystem, Robert Millan, 2007/12/23