if (sbi->s_unhide == 'n') { /* Do not report hidden or associated files */ if (de->flags[-sbi->s_high_sierra] & 5) { filp->f_pos += de_len; continue; } 
 /* * Do not report hidden files if so instructed, or associated * files unless instructed to do so */ if ((sbi->s_hide == 'y' && (de->flags[-sbi->s_high_sierra] & 1)) || (sbi->s_showassoc =='n' && (de->flags[-sbi->s_high_sierra] & 4))) { filp->f_pos += de_len; continue; 
static int do_isofs_readdir(struct inode *inode, struct file *filp,		void *dirent, filldir_t filldir,		char * tmpname, struct iso_directory_record * tmpde){	unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);	unsigned char bufbits = ISOFS_BUFFER_BITS(inode);	unsigned long block, offset, block_saved, offset_saved;	unsigned long inode_number = 0;	/* Quiet GCC */	struct buffer_head *bh = NULL;	int len;	int map;	int first_de = 1;	char *p = NULL;		/* Quiet GCC */	struct iso_directory_record *de;	struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb);	offset = filp->f_pos & (bufsize - 1);	block = filp->f_pos >> bufbits;	while (filp->f_pos < inode->i_size) {		int de_len;		if (!bh) {			bh = isofs_bread(inode, block);			if (!bh)				return 0;		}		de = (struct iso_directory_record *) (bh->b_data + offset);		de_len = *(unsigned char *) de;		/* If the length byte is zero, we should move on to the next		   CDROM sector.  If we are at the end of the directory, we		   kick out of the while loop. */		if (de_len == 0) {			brelse(bh);			bh = NULL;			filp->f_pos = (filp->f_pos + ISOFS_BLOCK_SIZE) & ~(ISOFS_BLOCK_SIZE - 1);			block = filp->f_pos >> bufbits;			offset = 0;			continue;		}		block_saved = block;		offset_saved = offset;		offset += de_len;		/* Make sure we have a full directory entry */		if (offset >= bufsize) {			int slop = bufsize - offset + de_len;			memcpy(tmpde, de, slop);			offset &= bufsize - 1;			block++;			brelse(bh);			bh = NULL;			if (offset) {				bh = isofs_bread(inode, block);				if (!bh)					return 0;				memcpy((void *) tmpde + slop, bh->b_data, offset);			}			de = tmpde;		}		if (first_de) {			isofs_normalize_block_and_offset(de,							 &block_saved,							 &offset_saved);			inode_number = isofs_get_ino(block_saved,						     offset_saved,						     bufbits);		}		if (de->flags[-sbi->s_high_sierra] & 0x80) {			first_de = 0;			filp->f_pos += de_len;			continue;		}		first_de = 1;		/* Handle the case of the '.' directory */		if (de->name_len[0] == 1 && de->name[0] == 0) {			if (filldir(dirent, ".", 1, filp->f_pos, inode->i_ino, DT_DIR) < 0)				break;			filp->f_pos += de_len;			continue;		}		len = 0;		/* Handle the case of the '..' directory */		if (de->name_len[0] == 1 && de->name[0] == 1) {			inode_number = parent_ino(filp->f_dentry);			if (filldir(dirent, "..", 2, filp->f_pos, inode_number, DT_DIR) < 0)				break;			filp->f_pos += de_len;			continue;		}		/* Handle everything else.  Do name translation if there		   is no Rock Ridge NM field. */		if (sbi->s_unhide == 'n') {			/* Do not report hidden or associated files */			if (de->flags[-sbi->s_high_sierra] & 5) {				filp->f_pos += de_len;				continue;			}		}		map = 1;		if (sbi->s_rock) {			len = get_rock_ridge_filename(de, tmpname, inode);			if (len != 0) {		/* may be -1 */				p = tmpname;				map = 0;			}		}		if (map) {#ifdef CONFIG_JOLIET			if (sbi->s_joliet_level) {				len = get_joliet_filename(de, tmpname, inode);				p = tmpname;			} else#endif			if (sbi->s_mapping == 'a') {				len = get_acorn_filename(de, tmpname, inode);				p = tmpname;			} else			if (sbi->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)				break;		}		filp->f_pos += de_len;		continue;	}	if (bh) brelse(bh);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9769f4eb3fad2dd53a5d24c81ee5f7f05450742b/dir.c/buggy/fs/isofs/dir.c