Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eaf35b1e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Steve French
Browse files

cifs: use cifs_dirent in cifs_save_resume_key

parent f16d59b4
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -501,7 +501,7 @@ struct cifs_search_info {
	char *ntwrk_buf_start;
	char *ntwrk_buf_start;
	char *srch_entries_start;
	char *srch_entries_start;
	char *last_entry;
	char *last_entry;
	char *presume_name;
	const char *presume_name;
	unsigned int resume_name_len;
	unsigned int resume_name_len;
	bool endOfSearch:1;
	bool endOfSearch:1;
	bool emptyDir:1;
	bool emptyDir:1;
+9 −57
Original line number Original line Diff line number Diff line
@@ -478,66 +478,18 @@ static int is_dir_changed(struct file *file)
}
}


static int cifs_save_resume_key(const char *current_entry,
static int cifs_save_resume_key(const char *current_entry,
	struct cifsFileInfo *cifsFile)
	struct cifsFileInfo *file_info)
{
{
	int rc = 0;
	struct cifs_dirent de;
	unsigned int len = 0;
	int rc;
	__u16 level;
	char *filename;

	if ((cifsFile == NULL) || (current_entry == NULL))
		return -EINVAL;

	level = cifsFile->srch_inf.info_level;

	if (level == SMB_FIND_FILE_UNIX) {
		FILE_UNIX_INFO *pFindData = (FILE_UNIX_INFO *)current_entry;


		filename = &pFindData->FileName[0];
	rc = cifs_fill_dirent(&de, current_entry, file_info->srch_inf.info_level,
		if (cifsFile->srch_inf.unicode) {
			      file_info->srch_inf.unicode);
			len = cifs_unicode_bytelen(filename);
	if (!rc) {
		} else {
		file_info->srch_inf.presume_name = de.name;
			/* BB should we make this strnlen of PATH_MAX? */
		file_info->srch_inf.resume_name_len = de.namelen;
			len = strnlen(filename, PATH_MAX);
		file_info->srch_inf.resume_key = de.resume_key;
		}
		cifsFile->srch_inf.resume_key = pFindData->ResumeKey;
	} 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);
		cifsFile->srch_inf.resume_key = pFindData->FileIndex;
	} 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);
		cifsFile->srch_inf.resume_key = pFindData->FileIndex;
	} 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);
		cifsFile->srch_inf.resume_key = pFindData->FileIndex;
	} 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);
		cifsFile->srch_inf.resume_key = pFindData->FileIndex;
	} else if (level == SMB_FIND_FILE_INFO_STANDARD) {
		FIND_FILE_STANDARD_INFO *pFindData =
			(FIND_FILE_STANDARD_INFO *)current_entry;
		filename = &pFindData->FileName[0];
		/* one byte length, no name conversion */
		len = (unsigned int)pFindData->FileNameLength;
		cifsFile->srch_inf.resume_key = pFindData->ResumeKey;
	} else {
		cFYI(1, "Unknown findfirst level %d", level);
		return -EINVAL;
	}
	}
	cifsFile->srch_inf.resume_name_len = len;
	cifsFile->srch_inf.presume_name = filename;
	return rc;
	return rc;
}
}