#endif /* CIFS_EXPERIMENTAL */ 
static int cifs_get_name_from_search_buf(struct qstr *pqst,	char *current_entry, __u16 level, unsigned int unicode,	struct cifs_sb_info * cifs_sb, ino_t *pinum){	int rc = 0;	unsigned int len = 0;	char * filename;	struct nls_table * nlt = cifs_sb->local_nls;	*pinum = 0;	if(level == SMB_FIND_FILE_UNIX) {		FILE_UNIX_INFO * pFindData = (FILE_UNIX_INFO *)current_entry;		filename = &pFindData->FileName[0];		if(unicode) {			len = cifs_unicode_bytelen(filename);		} else {			/* BB should we make this strnlen of PATH_MAX? */			len = strnlen(filename, PATH_MAX);		}		/* BB fixme - hash low and high 32 bits if not 64 bit arch BB fixme */		if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)			*pinum = pFindData->UniqueId;	} else if(level == SMB_FIND_FILE_DIRECTORY_INFO) {		FILE_DIRECTORY_INFO * pFindData = 			(FILE_DIRECTORY_INFO *)current_entry;		filename = &pFindData->FileName[0];		len = le32_to_cpu(pFindData->FileNameLength);	} else if(level == SMB_FIND_FILE_FULL_DIRECTORY_INFO) {		FILE_FULL_DIRECTORY_INFO * pFindData = 			(FILE_FULL_DIRECTORY_INFO *)current_entry;		filename = &pFindData->FileName[0];		len = le32_to_cpu(pFindData->FileNameLength);	} else if(level == SMB_FIND_FILE_ID_FULL_DIR_INFO) {		SEARCH_ID_FULL_DIR_INFO * pFindData = 			(SEARCH_ID_FULL_DIR_INFO *)current_entry;		filename = &pFindData->FileName[0];		len = le32_to_cpu(pFindData->FileNameLength);		*pinum = pFindData->UniqueId;	} else if(level == SMB_FIND_FILE_BOTH_DIRECTORY_INFO) {		FILE_BOTH_DIRECTORY_INFO * pFindData = 			(FILE_BOTH_DIRECTORY_INFO *)current_entry;		filename = &pFindData->FileName[0];		len = le32_to_cpu(pFindData->FileNameLength);	} else {		cFYI(1,("Unknown findfirst level %d",level));		return -EINVAL;	}	if(unicode) {		/* BB fixme - test with long names */		/* Note converted filename can be longer than in unicode */#ifdef CONFIG_CIFS_EXPERIMENTAL		if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR)			pqst->len = cifs_convertUCSpath((char *)pqst->name,					(__le16 *)filename, len/2, nlt);		else#endif /* CIFS_EXPERIMENTAL */			pqst->len = cifs_strfromUCS_le((char *)pqst->name,					(wchar_t *)filename,len/2,nlt);	} else {		pqst->name = filename;		pqst->len = len;	}	pqst->hash = full_name_hash(pqst->name,pqst->len);/*	cFYI(1,("filldir on %s",pqst->name));  */	return rc;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/737b758c965a9b223ac1243ab38d9e507ac86c64/readdir.c/buggy/fs/cifs/readdir.c