Commit d4faaecbcc6d9ea4f7c05f6de6af98e2336a4afb

Authored by David S. Miller
1 parent 9ce768ead8

[ZLIB]: Fix external builds of zlib_inflate code.

Move zlib_inflate_blob() out into it's own source file,
infutil.c, so that things like the powerpc zImage builder
in arch/powerpc/boot/Makefile don't end up trying to
compile it.

Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 3 changed files with 50 additions and 48 deletions Side-by-side Diff

lib/zlib_inflate/Makefile
... ... @@ -15,6 +15,6 @@
15 15  
16 16 obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate.o
17 17  
18   -zlib_inflate-objs := inffast.o inflate.o \
  18 +zlib_inflate-objs := inffast.o inflate.o infutil.o \
19 19 inftrees.o inflate_syms.o
lib/zlib_inflate/inflate.c
... ... @@ -916,51 +916,4 @@
916 916  
917 917 return Z_OK;
918 918 }
919   -
920   -#include <linux/errno.h>
921   -#include <linux/slab.h>
922   -#include <linux/vmalloc.h>
923   -
924   -/* Utility function: initialize zlib, unpack binary blob, clean up zlib,
925   - * return len or negative error code. */
926   -int zlib_inflate_blob(void *gunzip_buf, unsigned sz, const void *buf, unsigned len)
927   -{
928   - const u8 *zbuf = buf;
929   - struct z_stream_s *strm;
930   - int rc;
931   -
932   - rc = -ENOMEM;
933   - strm = kmalloc(sizeof(*strm), GFP_KERNEL);
934   - if (strm == NULL)
935   - goto gunzip_nomem1;
936   - strm->workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
937   - if (strm->workspace == NULL)
938   - goto gunzip_nomem2;
939   -
940   - /* gzip header (1f,8b,08... 10 bytes total + possible asciz filename)
941   - * expected to be stripped from input */
942   -
943   - strm->next_in = zbuf;
944   - strm->avail_in = len;
945   - strm->next_out = gunzip_buf;
946   - strm->avail_out = sz;
947   -
948   - rc = zlib_inflateInit2(strm, -MAX_WBITS);
949   - if (rc == Z_OK) {
950   - rc = zlib_inflate(strm, Z_FINISH);
951   - /* after Z_FINISH, only Z_STREAM_END is "we unpacked it all" */
952   - if (rc == Z_STREAM_END)
953   - rc = sz - strm->avail_out;
954   - else
955   - rc = -EINVAL;
956   - zlib_inflateEnd(strm);
957   - } else
958   - rc = -EINVAL;
959   -
960   - kfree(strm->workspace);
961   -gunzip_nomem2:
962   - kfree(strm);
963   -gunzip_nomem1:
964   - return rc; /* returns Z_OK (0) if successful */
965   -}
lib/zlib_inflate/infutil.c
  1 +#include <linux/zutil.h>
  2 +#include <linux/errno.h>
  3 +#include <linux/slab.h>
  4 +#include <linux/vmalloc.h>
  5 +
  6 +/* Utility function: initialize zlib, unpack binary blob, clean up zlib,
  7 + * return len or negative error code.
  8 + */
  9 +int zlib_inflate_blob(void *gunzip_buf, unsigned int sz,
  10 + const void *buf, unsigned int len)
  11 +{
  12 + const u8 *zbuf = buf;
  13 + struct z_stream_s *strm;
  14 + int rc;
  15 +
  16 + rc = -ENOMEM;
  17 + strm = kmalloc(sizeof(*strm), GFP_KERNEL);
  18 + if (strm == NULL)
  19 + goto gunzip_nomem1;
  20 + strm->workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
  21 + if (strm->workspace == NULL)
  22 + goto gunzip_nomem2;
  23 +
  24 + /* gzip header (1f,8b,08... 10 bytes total + possible asciz filename)
  25 + * expected to be stripped from input
  26 + */
  27 + strm->next_in = zbuf;
  28 + strm->avail_in = len;
  29 + strm->next_out = gunzip_buf;
  30 + strm->avail_out = sz;
  31 +
  32 + rc = zlib_inflateInit2(strm, -MAX_WBITS);
  33 + if (rc == Z_OK) {
  34 + rc = zlib_inflate(strm, Z_FINISH);
  35 + /* after Z_FINISH, only Z_STREAM_END is "we unpacked it all" */
  36 + if (rc == Z_STREAM_END)
  37 + rc = sz - strm->avail_out;
  38 + else
  39 + rc = -EINVAL;
  40 + zlib_inflateEnd(strm);
  41 + } else
  42 + rc = -EINVAL;
  43 +
  44 + kfree(strm->workspace);
  45 +gunzip_nomem2:
  46 + kfree(strm);
  47 +gunzip_nomem1:
  48 + return rc; /* returns Z_OK (0) if successful */
  49 +}