[syslinux:master] ntfs: make ntfs_match_longname() faster
syslinux-bot for Paulo Alcantara
pcacjr at gmail.com
Sat Dec 17 21:19:25 PST 2011
Commit-ID: 85b5eb13e626715361cb5835b5f1f9a58c4a44d6
Gitweb: http://www.syslinux.org/commit/85b5eb13e626715361cb5835b5f1f9a58c4a44d6
Author: Paulo Alcantara <pcacjr at gmail.com>
AuthorDate: Thu, 28 Jul 2011 21:35:07 +0000
Committer: Paulo Alcantara <pcacjr at gmail.com>
CommitDate: Sun, 11 Sep 2011 04:09:58 +0000
ntfs: make ntfs_match_longname() faster
Signed-off-by: Paulo Alcantara <pcacjr at gmail.com>
---
core/fs/ntfs/ntfs.c | 35 +++++------------------------------
1 files changed, 5 insertions(+), 30 deletions(-)
diff --git a/core/fs/ntfs/ntfs.c b/core/fs/ntfs/ntfs.c
index dd11198..2a06053 100644
--- a/core/fs/ntfs/ntfs.c
+++ b/core/fs/ntfs/ntfs.c
@@ -155,40 +155,13 @@ static ATTR_RECORD *attr_lookup(uint32_t type, const MFT_RECORD *mrec)
return attr;
}
-static bool ntfs_match_longname(const char *str, unsigned long mft_no,
- struct fs_info *fs)
+static bool ntfs_match_longname(const char *str, const uint16_t *match, int len)
{
- uint8_t data[BLOCK_SIZE(fs)];
- int64_t offset;
- MFT_RECORD *mrec;
- block_t block = 0;
- ATTR_RECORD *attr;
- FILE_NAME_ATTR *fn;
- uint8_t len;
unsigned char c = -1; /* Nonzero: we have not yet seen NULL */
uint16_t cp;
- const uint16_t *match;
dprintf("Matching: %s\n", str);
- offset = mft_record_lookup(mft_no, fs, &block, &data);
- if (offset < 0) {
- printf("No MFT record found.\n");
- goto out;
- }
-
- mrec = (MFT_RECORD *)&data[offset];
-
- attr = attr_lookup(NTFS_AT_FILENAME, mrec);
- if (!attr) {
- printf("No attribute found.\n");
- goto out;
- }
-
- fn = (FILE_NAME_ATTR *)((uint8_t *)attr + attr->data.resident.value_offset);
- len = fn->file_name_len;
- match = fn->file_name;
-
while (len) {
cp = *match++;
len--;
@@ -526,7 +499,8 @@ static struct inode *index_lookup(const char *dname, struct inode *dir)
if (ie->flags & INDEX_ENTRY_END)
break;
- if (ntfs_match_longname(dname, ie->data.dir.indexed_file, fs)) {
+ if (ntfs_match_longname(dname, ie->key.file_name.file_name,
+ strlen(dname))) {
dprintf("Filename matches up!\n");
dprintf("MFT record number = %d\n", ie->data.dir.indexed_file);
goto found;
@@ -638,7 +612,8 @@ static struct inode *index_lookup(const char *dname, struct inode *dir)
if (ie->flags & INDEX_ENTRY_END)
break;
- if (ntfs_match_longname(dname, ie->data.dir.indexed_file, fs)) {
+ if (ntfs_match_longname(dname, ie->key.file_name.file_name,
+ strlen(dname))) {
dprintf("Filename matches up!\n");
goto found;
}
More information about the Syslinux-commits
mailing list