--- vanilla-2.4.1/fs/isofs/dir.c Sat Dec 30 01:13:45 2000 +++ cisofs/fs/isofs/dir.c Mon Feb 19 18:40:16 2001 @@ -5,8 +5,11 @@ * * (C) 1991 Linus Torvalds - minix filesystem * - * Steve Beynon : Missing last directory entries fixed + * Steve Beynon : Missing last directory entries fixed * (stephen@askone.demon.co.uk) : 21st June 1996 + * + * zhaoway : Transparent *.cramed uncompressing + * (zw@debian.org) : 15th February 2001 * * isofs directory handling functions */ @@ -108,8 +111,7 @@ unsigned int block, offset; int inode_number = 0; /* Quiet GCC */ struct buffer_head *bh = NULL; - int len; - int map; + int len = 0; int high_sierra; int first_de = 1; char *p = NULL; /* Quiet GCC */ @@ -181,8 +183,6 @@ continue; } - len = 0; - /* Handle the case of the '..' directory */ if (de->name_len[0] == 1 && de->name[0] == 1) { inode_number = filp->f_dentry->d_parent->d_inode->i_ino; @@ -202,32 +202,37 @@ } } - map = 1; - if (inode->i_sb->u.isofs_sb.s_rock) { - len = get_rock_ridge_filename(de, tmpname, inode); - if (len != 0) { /* may be -1 */ - p = tmpname; - map = 0; + if (inode->i_sb->u.isofs_sb.s_rock && + (len = get_rock_ridge_filename(de, tmpname, inode))) { /* may be -1 */ +#ifdef CONFIG_CISOFS + /* Drop trailing '.cramed' */ + if (len > 7 && (! strncmp(&tmpname[len - 7], ".cramed", 7))) { + len -= 7; + tmpname[len] = '\0'; } - } - if (map) { -#ifdef CONFIG_JOLIET - if (inode->i_sb->u.isofs_sb.s_joliet_level) { - len = get_joliet_filename(de, tmpname, inode); - p = tmpname; - } else #endif - if (inode->i_sb->u.isofs_sb.s_mapping == 'a') { - len = get_acorn_filename(de, tmpname, inode); - p = tmpname; - } else - if (inode->i_sb->u.isofs_sb.s_mapping == 'n') { - len = isofs_name_translate(de, tmpname, inode); - p = tmpname; - } else { - p = de->name; - len = de->name_len[0]; + p = tmpname; +#ifdef CONFIG_JOLIET + } else if (inode->i_sb->u.isofs_sb.s_joliet_level) { + len = get_joliet_filename(de, tmpname, inode); +# ifdef CONFIG_CISOFS + /* Drop trailing '.cramed' */ + if (len > 7 && (! strncmp(&tmpname[len - 7], ".cramed", 7))) { + len -= 7; + tmpname[len] = '\0'; } +# endif + p = tmpname; +#endif + } else if (inode->i_sb->u.isofs_sb.s_mapping == 'a') { + len = get_acorn_filename(de, tmpname, inode); + p = tmpname; + } else if (inode->i_sb->u.isofs_sb.s_mapping == 'n') { + len = isofs_name_translate(de, tmpname, inode); + p = tmpname; + } else { + p = de->name; + len = de->name_len[0]; } if (len > 0) { if (filldir(dirent, p, len, filp->f_pos, inode_number, DT_UNKNOWN) < 0)