[U-Boot] [PATCH] JFFS2: drop support for LZARI compression mode

Wolfgang Denk wd at denx.de
Fri Jan 15 11:19:29 CET 2010


Support for LZARI compression mode was added based on a MTD CVS
snapshot of March 13, 2005. However, fs/jffs2/compr_lzari.c contains
contradictory licensing terms: the original copyright clause says "All
rights reserved. Permission granted for non-commercial use.", but
later reference to the file 'LICENCE' in the jffs2 directory was added
which says GPL v2 or later.

As no boards ever used LZARI compression, and this file is also not
present in recent MTD code, we resolve this conflict by removing the
conflicting file and references to it.

Also copy the referenced but missing file 'LICENCE' from the current
MTD source tree.

Signed-off-by: Wolfgang Denk <wd at denx.de>
---
 fs/jffs2/LICENCE            |   30 +++++
 fs/jffs2/Makefile           |    3 +-
 fs/jffs2/compr_lzari.c      |  259 -------------------------------------------
 fs/jffs2/jffs2_1pass.c      |    8 +-
 fs/jffs2/jffs2_nand_1pass.c |    8 +-
 include/jffs2/jffs2.h       |    9 +-
 6 files changed, 38 insertions(+), 279 deletions(-)
 create mode 100644 fs/jffs2/LICENCE
 delete mode 100644 fs/jffs2/compr_lzari.c

diff --git a/fs/jffs2/LICENCE b/fs/jffs2/LICENCE
new file mode 100644
index 0000000..5628859
--- /dev/null
+++ b/fs/jffs2/LICENCE
@@ -0,0 +1,30 @@
+The files in this directory and elsewhere which refer to this LICENCE
+file are part of JFFS2, the Journalling Flash File System v2.
+
+	Copyright © 2001-2007 Red Hat, Inc. and others
+
+JFFS2 is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 or (at your option) any later 
+version.
+
+JFFS2 is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with JFFS2; if not, write to the Free Software Foundation, Inc.,
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+As a special exception, if other files instantiate templates or use
+macros or inline functions from these files, or you compile these
+files and link them with other works to produce a work based on these
+files, these files do not by themselves cause the resulting work to be
+covered by the GNU General Public License. However the source code for
+these files must still be made available in accordance with section (3)
+of the GNU General Public License.
+
+This exception does not invalidate any other reasons why a work based on
+this file might be covered by the GNU General Public License.
+
diff --git a/fs/jffs2/Makefile b/fs/jffs2/Makefile
index fd6a105..7c9fb41 100644
--- a/fs/jffs2/Makefile
+++ b/fs/jffs2/Makefile
@@ -27,8 +27,7 @@ LIB	= $(obj)libjffs2.a
 
 AOBJS	=
 ifdef CONFIG_CMD_JFFS2
-COBJS-$(CONFIG_JFFS2_LZO_LZARI) += compr_lzari.o
-COBJS-$(CONFIG_JFFS2_LZO_LZARI) += compr_lzo.o
+COBJS-$(CONFIG_JFFS2_LZO) += compr_lzo.o
 COBJS-y += compr_rtime.o
 COBJS-y += compr_rubin.o
 COBJS-y += compr_zlib.o
diff --git a/fs/jffs2/compr_lzari.c b/fs/jffs2/compr_lzari.c
deleted file mode 100644
index 6a29608..0000000
--- a/fs/jffs2/compr_lzari.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * JFFS2 -- Journalling Flash File System, Version 2.
- *
- * Copyright (C) 2004 Patrik Kluba,
- *                    University of Szeged, Hungary
- *
- * For licensing information, see the file 'LICENCE' in the
- * jffs2 directory.
- *
- * $Id: compr_lzari.c,v 1.3 2004/06/23 16:34:39 havasi Exp $
- *
- */
-
-/*
-   Lempel-Ziv-Arithmetic coding compression module for jffs2
-   Based on the LZARI source included in LDS (lossless datacompression sources)
-*/
-
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
-
-/*
-Original copyright follows:
-
-**************************************************************
-	LZARI.C -- A Data Compression Program
-	(tab = 4 spaces)
-**************************************************************
-	4/7/1989 Haruhiko Okumura
-	Use, distribute, and modify this program freely.
-	Please send me your improved versions.
-		PC-VAN		SCIENCE
-		NIFTY-Serve	PAF01022
-		CompuServe	74050,1022
-**************************************************************
-
-LZARI.C (c)1989 by Haruyasu Yoshizaki, Haruhiko Okumura, and Kenji Rikitake.
-All rights reserved. Permission granted for non-commercial use.
-
-*/
-
-/*
-
-	2004-02-18  pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
-				Removed unused variables and fixed no return value
-
-	2004-02-16  pajko <pajko(AT)halom(DOT)u-szeged(DOT)hu>
-				Initial release
-
-*/
-
-
-#include <config.h>
-#include <linux/stddef.h>
-#include <jffs2/jffs2.h>
-
-
-#define N			4096	/* size of ring buffer */
-#define F			60	/* upper limit for match_length */
-#define THRESHOLD		2	/* encode string into position and length
-					   if match_length is greater than this */
-#define NIL			N	/* index for root of binary search trees */
-
-static unsigned char
-		text_buf[N + F - 1];	/* ring buffer of size N,
-			with extra F-1 bytes to facilitate string comparison */
-
-/********** Arithmetic Compression **********/
-
-/*  If you are not familiar with arithmetic compression, you should read
-		I. E. Witten, R. M. Neal, and J. G. Cleary,
-			Communications of the ACM, Vol. 30, pp. 520-540 (1987),
-	from which much have been borrowed.  */
-
-#define M   15
-
-/*	Q1 (= 2 to the M) must be sufficiently large, but not so
-	large as the unsigned long 4 * Q1 * (Q1 - 1) overflows.  */
-
-#define Q1  (1UL << M)
-#define Q2  (2 * Q1)
-#define Q3  (3 * Q1)
-#define Q4  (4 * Q1)
-#define MAX_CUM (Q1 - 1)
-
-#define N_CHAR  (256 - THRESHOLD + F)
-	/* character code = 0, 1, ..., N_CHAR - 1 */
-
-static unsigned long char_to_sym[N_CHAR], sym_to_char[N_CHAR + 1];
-static unsigned long
-	sym_freq[N_CHAR + 1],  /* frequency for symbols */
-	sym_cum[N_CHAR + 1],   /* cumulative freq for symbols */
-	position_cum[N + 1];   /* cumulative freq for positions */
-
-static void StartModel(void)  /* Initialize model */
-{
-	unsigned long ch, sym, i;
-
-	sym_cum[N_CHAR] = 0;
-	for (sym = N_CHAR; sym >= 1; sym--) {
-		ch = sym - 1;
-		char_to_sym[ch] = sym;  sym_to_char[sym] = ch;
-		sym_freq[sym] = 1;
-		sym_cum[sym - 1] = sym_cum[sym] + sym_freq[sym];
-	}
-	sym_freq[0] = 0;  /* sentinel (!= sym_freq[1]) */
-	position_cum[N] = 0;
-	for (i = N; i >= 1; i--)
-		position_cum[i - 1] = position_cum[i] + 10000 / (i + 200);
-			/* empirical distribution function (quite tentative) */
-			/* Please devise a better mechanism! */
-}
-
-static void UpdateModel(unsigned long sym)
-{
-	unsigned long c, ch_i, ch_sym;
-	unsigned long i;
-	if (sym_cum[0] >= MAX_CUM) {
-		c = 0;
-		for (i = N_CHAR; i > 0; i--) {
-			sym_cum[i] = c;
-			c += (sym_freq[i] = (sym_freq[i] + 1) >> 1);
-		}
-		sym_cum[0] = c;
-	}
-	for (i = sym; sym_freq[i] == sym_freq[i - 1]; i--) ;
-	if (i < sym) {
-		ch_i = sym_to_char[i];    ch_sym = sym_to_char[sym];
-		sym_to_char[i] = ch_sym;  sym_to_char[sym] = ch_i;
-		char_to_sym[ch_i] = sym;  char_to_sym[ch_sym] = i;
-	}
-	sym_freq[i]++;
-	while (--i > 0) sym_cum[i]++;
-	sym_cum[0]++;
-}
-
-static unsigned long BinarySearchSym(unsigned long x)
-	/* 1      if x >= sym_cum[1],
-	   N_CHAR if sym_cum[N_CHAR] > x,
-	   i such that sym_cum[i - 1] > x >= sym_cum[i] otherwise */
-{
-	unsigned long i, j, k;
-
-	i = 1;  j = N_CHAR;
-	while (i < j) {
-		k = (i + j) / 2;
-		if (sym_cum[k] > x) i = k + 1;  else j = k;
-	}
-	return i;
-}
-
-unsigned long BinarySearchPos(unsigned long x)
-	/* 0 if x >= position_cum[1],
-	   N - 1 if position_cum[N] > x,
-	   i such that position_cum[i] > x >= position_cum[i + 1] otherwise */
-{
-	unsigned long i, j, k;
-
-	i = 1;  j = N;
-	while (i < j) {
-		k = (i + j) / 2;
-		if (position_cum[k] > x) i = k + 1;  else j = k;
-	}
-	return i - 1;
-}
-
-static int Decode(unsigned char *srcbuf, unsigned char *dstbuf, unsigned long srclen,
-					unsigned long dstlen)	/* Just the reverse of Encode(). */
-{
-	unsigned long i, r, j, k, c, range, sym;
-	unsigned char *ip, *op;
-	unsigned char *srcend = srcbuf + srclen;
-	unsigned char *dstend = dstbuf + dstlen;
-	unsigned char buffer = 0;
-	unsigned char mask = 0;
-	unsigned long low = 0;
-	unsigned long high = Q4;
-	unsigned long value = 0;
-
-	ip = srcbuf;
-	op = dstbuf;
-	for (i = 0; i < M + 2; i++) {
-		value *= 2;
-		if ((mask >>= 1) == 0) {
-			buffer = (ip >= srcend) ? 0 : *(ip++);
-			mask = 128;
-		}
-		value += ((buffer & mask) != 0);
-	}
-
-	StartModel();
-	for (i = 0; i < N - F; i++) text_buf[i] = ' ';
-	r = N - F;
-
-	while (op < dstend) {
-		range = high - low;
-		sym = BinarySearchSym((unsigned long)
-				(((value - low + 1) * sym_cum[0] - 1) / range));
-		high = low + (range * sym_cum[sym - 1]) / sym_cum[0];
-		low +=       (range * sym_cum[sym    ]) / sym_cum[0];
-		for ( ; ; ) {
-			if (low >= Q2) {
-				value -= Q2;  low -= Q2;  high -= Q2;
-			} else if (low >= Q1 && high <= Q3) {
-				value -= Q1;  low -= Q1;  high -= Q1;
-			} else if (high > Q2) break;
-			low += low;  high += high;
-			value *= 2;
-			if ((mask >>= 1) == 0) {
-				buffer = (ip >= srcend) ? 0 : *(ip++);
-				mask = 128;
-			}
-			value += ((buffer & mask) != 0);
-		}
-		c = sym_to_char[sym];
-		UpdateModel(sym);
-		if (c < 256) {
-			if (op >= dstend) return -1;
-			*(op++) = c;
-			text_buf[r++] = c;
-			r &= (N - 1);
-		} else {
-			j = c - 255 + THRESHOLD;
-			range = high - low;
-			i = BinarySearchPos((unsigned long)
-				(((value - low + 1) * position_cum[0] - 1) / range));
-			high = low + (range * position_cum[i    ]) / position_cum[0];
-			low +=       (range * position_cum[i + 1]) / position_cum[0];
-			for ( ; ; ) {
-				if (low >= Q2) {
-					value -= Q2;  low -= Q2;  high -= Q2;
-				} else if (low >= Q1 && high <= Q3) {
-					value -= Q1;  low -= Q1;  high -= Q1;
-				} else if (high > Q2) break;
-				low += low;  high += high;
-				value *= 2;
-				if ((mask >>= 1) == 0) {
-					buffer = (ip >= srcend) ? 0 : *(ip++);
-					mask = 128;
-				}
-				value += ((buffer & mask) != 0);
-			}
-			i = (r - i - 1) & (N - 1);
-			for (k = 0; k < j; k++) {
-				c = text_buf[(i + k) & (N - 1)];
-				if (op >= dstend) return -1;
-				*(op++) = c;
-				text_buf[r++] = c;
-				r &= (N - 1);
-			}
-		}
-	}
-	return 0;
-}
-
-int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
-		      u32 srclen, u32 destlen)
-{
-    return Decode(data_in, cpage_out, srclen, destlen);
-}
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index 1923ed9..93651f5 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -471,9 +471,8 @@ static char *compr_names[] = {
 	"COPY",
 	"DYNRUBIN",
 	"ZLIB",
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 	"LZO",
-	"LZARI",
 #endif
 };
 
@@ -781,13 +780,10 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 inode, char *dest)
 				case JFFS2_COMPR_ZLIB:
 					ret = zlib_decompress(src, lDest, jNode->csize, jNode->dsize);
 					break;
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 				case JFFS2_COMPR_LZO:
 					ret = lzo_decompress(src, lDest, jNode->csize, jNode->dsize);
 					break;
-				case JFFS2_COMPR_LZARI:
-					ret = lzari_decompress(src, lDest, jNode->csize, jNode->dsize);
-					break;
 #endif
 				default:
 					/* unknown */
diff --git a/fs/jffs2/jffs2_nand_1pass.c b/fs/jffs2/jffs2_nand_1pass.c
index fe8c70d..3982003 100644
--- a/fs/jffs2/jffs2_nand_1pass.c
+++ b/fs/jffs2/jffs2_nand_1pass.c
@@ -34,9 +34,8 @@ static char *compr_names[] = {
 	"COPY",
 	"DYNRUBIN",
 	"ZLIB",
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 	"LZO",
-	"LZARI",
 #endif
 };
 
@@ -344,13 +343,10 @@ jffs2_1pass_read_inode(struct b_lists *pL, u32 ino, char *dest,
 			case JFFS2_COMPR_ZLIB:
 				ret = zlib_decompress(src, dst, inode->csize, inode->dsize);
 				break;
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 			case JFFS2_COMPR_LZO:
 				ret = lzo_decompress(src, dst, inode->csize, inode->dsize);
 				break;
-			case JFFS2_COMPR_LZARI:
-				ret = lzari_decompress(src, dst, inode->csize, inode->dsize);
-				break;
 #endif
 			default:
 				/* unknown */
diff --git a/include/jffs2/jffs2.h b/include/jffs2/jffs2.h
index ed96bab..651f94c 100644
--- a/include/jffs2/jffs2.h
+++ b/include/jffs2/jffs2.h
@@ -68,10 +68,9 @@
 #define JFFS2_COMPR_COPY	0x04
 #define JFFS2_COMPR_DYNRUBIN	0x05
 #define JFFS2_COMPR_ZLIB	0x06
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 #define JFFS2_COMPR_LZO		0x07
-#define JFFS2_COMPR_LZARI	0x08
-#define JFFS2_NUM_COMPR		9
+#define JFFS2_NUM_COMPR		8
 #else
 #define JFFS2_NUM_COMPR		7
 #endif
@@ -226,11 +225,9 @@ void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
 		unsigned long sourcelen, unsigned long dstlen);
 long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
 		__u32 srclen, __u32 destlen);
-#if defined(CONFIG_JFFS2_LZO_LZARI)
+#if defined(CONFIG_JFFS2_LZO)
 int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out,
 		u32 srclen, u32 destlen);
-int lzari_decompress(unsigned char *data_in, unsigned char *cpage_out,
-		u32 srclen, u32 destlen);
 #endif
 
 char *mkmodestr(unsigned long mode, char *str);
-- 
1.6.2.5



More information about the U-Boot mailing list