]> git.sur5r.net Git - u-boot/commitdiff
JFFS2: drop support for LZARI compression mode
authorWolfgang Denk <wd@denx.de>
Fri, 15 Jan 2010 10:10:33 +0000 (11:10 +0100)
committerWolfgang Denk <wd@denx.de>
Fri, 15 Jan 2010 10:16:47 +0000 (11:16 +0100)
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>
fs/jffs2/LICENCE [new file with mode: 0644]
fs/jffs2/Makefile
fs/jffs2/compr_lzari.c [deleted file]
fs/jffs2/jffs2_1pass.c
fs/jffs2/jffs2_nand_1pass.c
include/jffs2/jffs2.h

diff --git a/fs/jffs2/LICENCE b/fs/jffs2/LICENCE
new file mode 100644 (file)
index 0000000..5628859
--- /dev/null
@@ -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.
+
index fd6a1050c67d14a4f7e03e9afd34fc7fa215da59..7c9fb41b8d64c2698eca4c5dd683cb5eebdf6a65 100644 (file)
@@ -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 (file)
index 6a29608..0000000
+++ /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);
-}
index 1923ed909a53db3deee554eedba651cf63748a4c..93651f53e9242d9c2e51672383c9a69d234f6c18 100644 (file)
@@ -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 */
index fe8c70d91d4282b2c06210ba459184b33f28ccfa..3982003a4215d0c3902f6e1c9665af9b07f8ac81 100644 (file)
@@ -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 */
index ed96babf610967cf2cedf3bf9c90167861b5976d..651f94cf381edd2a286dadc9ff4e61225e38f35e 100644 (file)
 #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);