cregit-Linux how code gets into the kernel

Release 4.10 fs/cramfs/uncompress.c

Directory: fs/cramfs
/*
 * 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.
 */


#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/vmalloc.h>
#include <linux/zlib.h>
#include "internal.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_inflateReset(&stream); if (err != Z_OK) { pr_err("zlib_inflateReset error %d\n", err); zlib_inflateEnd(&stream); zlib_inflateInit(&stream); } err = zlib_inflate(&stream, Z_FINISH); if (err != Z_STREAM_END) goto err; return stream.total_out; err: pr_err("Error %d while decompressing!\n", err); pr_err("%p(%d)->%p(%d)\n", src, srclen, dst, dstlen); return -EIO; }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git12192.37%240.00%
david woodhousedavid woodhouse53.82%120.00%
fabian frederickfabian frederick32.29%120.00%
david vomlehndavid vomlehn21.53%120.00%
Total131100.00%5100.00%


int cramfs_uncompress_init(void) { if (!initialized++) { stream.workspace = vmalloc(zlib_inflate_workspacesize()); if (!stream.workspace) { initialized = 0; return -ENOMEM; } stream.next_in = NULL; stream.avail_in = 0; zlib_inflateInit(&stream); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git3555.56%133.33%
linus torvaldslinus torvalds2641.27%133.33%
david woodhousedavid woodhouse23.17%133.33%
Total63100.00%3100.00%


void cramfs_uncompress_exit(void) { if (!--initialized) { zlib_inflateEnd(&stream); vfree(stream.workspace); } }

Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git1760.71%125.00%
linus torvaldslinus torvalds932.14%125.00%
alexey dobriyanalexey dobriyan13.57%125.00%
david woodhousedavid woodhouse13.57%125.00%
Total28100.00%4100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
pre-gitpre-git18874.02%220.00%
linus torvaldslinus torvalds4116.14%110.00%
fabian frederickfabian frederick103.94%220.00%
david woodhousedavid woodhouse93.54%110.00%
adrian bunkadrian bunk20.79%110.00%
david vomlehndavid vomlehn20.79%110.00%
alexey dobriyanalexey dobriyan10.39%110.00%
al viroal viro10.39%110.00%
Total254100.00%10100.00%
Directory: fs/cramfs
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.