On 11/14/2013 12:38 AM, Christian Ruppert wrote: > diff --git a/lib/decompress_copy.c b/lib/decompress_copy.c > new file mode 100644 > index 0000000..8a41090 > --- /dev/null > +++ b/lib/decompress_copy.c > @@ -0,0 +1,47 @@ > +#include <linux/decompress/mm.h> > + > +#define NOZIP_BUFSZ (16 * 1024) > +STATIC int INIT nozip(unsigned char *buf, int len, > + int(*fill)(void*, unsigned int), > + int(*flush)(void*, unsigned int), > + unsigned char *outbuf, > + int *pos, > + void(*error)(char *x)) > +{ > + char *b; > + > + if (buf) > + b = buf; > + else > + b = malloc(NOZIP_BUFSZ); > + > + if (!b) { > + error("Out of memory while allocating buffer"); > + return -1; > + } > + > + if (flush) { > + if (!len) > + len = fill(b, NOZIP_BUFSZ); > + > + len = flush(b, len); > + } else { > + if (!len) > + len = fill(outbuf, NOZIP_BUFSZ); > + else { > + int i; > + for (i = 0; i < len; i++) > + outbuf[i] = b[i];
Clever way of doing memcpy(). I know some other compression implementations open-code memmove(), but using it for the entire data set in the most common case is atrocious. If we need to get a default implementation of memmove() we should just do that. -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/