cregit-Linux how code gets into the kernel

Release 4.11 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
Linus Torvalds (pre-git)12192.37%240.00%
David Woodhouse53.82%120.00%
Fabian Frederick32.29%120.00%
David 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
Linus Torvalds (pre-git)3555.56%133.33%
Linus Torvalds2641.27%133.33%
David Woodhouse23.17%133.33%
Total63100.00%3100.00%


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

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1760.71%125.00%
Linus Torvalds932.14%125.00%
David Woodhouse13.57%125.00%
Alexey Dobriyan13.57%125.00%
Total28100.00%4100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)18874.02%220.00%
Linus Torvalds4116.14%110.00%
Fabian Frederick103.94%220.00%
David Woodhouse93.54%110.00%
Adrian Bunk20.79%110.00%
David VomLehn20.79%110.00%
Al Viro10.39%110.00%
Alexey Dobriyan10.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.
Created with cregit.