소스 검색

JFFS2: drop support for LZARI compression mode

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@denx.de>
Wolfgang Denk 14 년 전
부모
커밋
f098337152
6개의 변경된 파일38개의 추가작업 그리고 279개의 파일을 삭제
  1. 30 0
      fs/jffs2/LICENCE
  2. 1 2
      fs/jffs2/Makefile
  3. 0 259
      fs/jffs2/compr_lzari.c
  4. 2 6
      fs/jffs2/jffs2_1pass.c
  5. 2 6
      fs/jffs2/jffs2_nand_1pass.c
  6. 3 6
      include/jffs2/jffs2.h

+ 30 - 0
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.
+

+ 1 - 2
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

+ 0 - 259
fs/jffs2/compr_lzari.c

@@ -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);
-}

+ 2 - 6
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 */

+ 2 - 6
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 */

+ 3 - 6
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);