mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 15:27:29 +00:00
Squashfs: extend decompressor framework to handle compression options
Extend decompressor framework to handle compression options stored in the filesystem. These options can be used by the relevant decompressor at initialisation time to over-ride defaults. The presence of compression options in the filesystem is indicated by the COMP_OPT filesystem flag. If present the data is read from the filesystem and passed to the decompressor init function. The decompressor init function signature has been extended to take this data. Also update the init function signature in the glib, lzo and xz decompressor wrappers. Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
This commit is contained in:
parent
100b33c8bd
commit
b7fc0ff09d
8 changed files with 54 additions and 16 deletions
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/buffer_head.h>
|
||||
|
||||
#include "squashfs_fs.h"
|
||||
|
@ -74,3 +75,36 @@ const struct squashfs_decompressor *squashfs_lookup_decompressor(int id)
|
|||
|
||||
return decompressor[i];
|
||||
}
|
||||
|
||||
|
||||
void *squashfs_decompressor_init(struct super_block *sb, unsigned short flags)
|
||||
{
|
||||
struct squashfs_sb_info *msblk = sb->s_fs_info;
|
||||
void *strm, *buffer = NULL;
|
||||
int length = 0;
|
||||
|
||||
/*
|
||||
* Read decompressor specific options from file system if present
|
||||
*/
|
||||
if (SQUASHFS_COMP_OPTS(flags)) {
|
||||
buffer = kmalloc(PAGE_CACHE_SIZE, GFP_KERNEL);
|
||||
if (buffer == NULL)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
length = squashfs_read_data(sb, &buffer,
|
||||
sizeof(struct squashfs_super_block), 0, NULL,
|
||||
PAGE_CACHE_SIZE, 1);
|
||||
|
||||
if (length < 0) {
|
||||
strm = ERR_PTR(length);
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
strm = msblk->decompressor->init(msblk, buffer, length);
|
||||
|
||||
finished:
|
||||
kfree(buffer);
|
||||
|
||||
return strm;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue