⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uncompress.c

📁 嵌入式系统设计与实例开发实验教材二源码 多线程应用程序设计 串行端口程序设计 AD接口实验 CAN总线通信实验 GPS通信实验 Linux内核移植与编译实验 IC卡读写实验 SD驱动使
💻 C
字号:
/* * uncompress.c * * (C) Copyright 1999 Linus Torvalds * * cramfs interfaces to the uncompression library. There's really just * three entrypoints: * *  - cramfs_uncompress_init() - called to initialize the thing. *  - cramfs_uncompress_exit() - tell me when you're done *  - cramfs_uncompress_block() - uncompress a block. * * NOTE NOTE NOTE! The uncompression is entirely single-threaded. We * only have one stream, and we'll initialize it only once even if it * then is used by multiple filesystems. */#include <linux/kernel.h>#include <linux/errno.h>#include <linux/vmalloc.h>#include <linux/zlib_fs.h>static z_stream stream;static int initialized;/* Returns length of decompressed data. */int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen){	int err;	stream.next_in = src;	stream.avail_in = srclen;	stream.next_out = dst;	stream.avail_out = dstlen;	err = zlib_fs_inflateReset(&stream);	if (err != Z_OK) {		printk("zlib_fs_inflateReset error %d\n", err);		zlib_fs_inflateEnd(&stream);		zlib_fs_inflateInit(&stream);	}	err = zlib_fs_inflate(&stream, Z_FINISH);	if (err != Z_STREAM_END)		goto err;	return stream.total_out;err:	printk("Error %d while decompressing!\n", err);	printk("%p(%d)->%p(%d)\n", src, srclen, dst, dstlen);	return 0;}int cramfs_uncompress_init(void){	if (!initialized++) {		stream.workspace = vmalloc(zlib_fs_inflate_workspacesize());		if ( !stream.workspace ) {			initialized = 0;			return -ENOMEM;		}		stream.next_in = NULL;		stream.avail_in = 0;		zlib_fs_inflateInit(&stream);	}	return 0;}int cramfs_uncompress_exit(void){	if (!--initialized) {		zlib_fs_inflateEnd(&stream);		vfree(stream.workspace);	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -