]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - fs/jffs2/jffs2_1pass.c
Major upate of JFFS2 code; now in sync with snapshot of MTD CVS of
[karo-tx-uboot.git] / fs / jffs2 / jffs2_1pass.c
index 24b446c1a5c124d107533f5a12b499098389cb16..a025116b7f0fc8ecd7db85fdd372e0b5bc02ae6a 100644 (file)
@@ -274,7 +274,13 @@ static char *compr_names[] = {
        "RUBINMIPS",
        "COPY",
        "DYNRUBIN",
-       "ZLIB"
+       "ZLIB",
+#if defined(CONFIG_JFFS2_LZO)
+       "LZO",
+#endif
+#if defined(CONFIG_JFFS2_LZARI)
+       "LZARI",
+#endif
 };
 
 /* Spinning wheel */
@@ -583,6 +589,16 @@ 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_LZARI)
+                               case JFFS2_COMPR_LZARI:
+                                       ret = lzari_decompress(src, lDest, jNode->csize, jNode->dsize);
+                                       break;
+#endif
+#if defined(CONFIG_JFFS2_LZO)
+                               case JFFS2_COMPR_LZO:
+                                       ret = lzo_decompress(src, lDest, jNode->csize, jNode->dsize);
+                                       break;
+#endif
                                default:
                                        /* unknown */
                                        putLabeledWord("UNKOWN COMPRESSION METHOD = ", jNode->compr);
@@ -759,8 +775,12 @@ jffs2_1pass_list_inodes(struct b_lists * pL, u32 pino)
                                        get_fl_mem(b2->offset, sizeof(ojNode), &ojNode);
                                if (jNode->ino == jDir->ino && jNode->version >= i_version) {
                                        if (i)
-                                               put_fl_mem(i);  
-                                       i = get_fl_mem(b2->offset, sizeof(*i), NULL);
+                                               put_fl_mem(i);
+
+                                       if (jDir->type == DT_LNK)
+                                               i = get_node_mem(b2->offset);
+                                       else
+                                               i = get_fl_mem(b2->offset, sizeof(*i), NULL);
                                }
                                b2 = b2->next;
                        }