瀏覽代碼

Optimize directory search

master
Arun Prakash Jana 8 年之前
父節點
當前提交
4bc2ce0fbc
沒有發現已知的金鑰在資料庫的簽署中 GPG 金鑰 ID: A75979F35C080412
共有 1 個檔案被更改,包括 20 行新增12 行删除
  1. +20
    -12
      nnn.c

+ 20
- 12
nnn.c 查看文件

@@ -515,6 +515,9 @@ canopendir(char *path)
return 1;
}

/*
* Returns "dir/name or "/name"
*/
static char *
mkpath(char *dir, char *name, char *out, size_t n)
{
@@ -656,20 +659,25 @@ dentfree(struct entry *dents)

/* Return the position of the matching entry or 0 otherwise */
static int
dentfind(struct entry *dents, int n, char *cwd, char *path)
dentfind(struct entry *dents, int n, char *path)
{
char tmp[PATH_MAX];
int i;

if (path == NULL)
if (!path)
return 0;
for (i = 0; i < n; i++) {
mkpath(cwd, dents[i].name, tmp, sizeof(tmp));
DPRINTF_S(path);
DPRINTF_S(tmp);
if (strcmp(tmp, path) == 0)

char *p = xmemrchr(path, '/', strlen(path));
if (!p)
p = path;
else
/* We are assuming an entry with actual
name ending in '/' will not appear */
p++;

DPRINTF_S(p);

for (int i = 0; i < n; i++)
if (strcmp(p, dents[i].name) == 0)
return i;
}
return 0;
}

@@ -698,7 +706,7 @@ populate(char *path, char *oldpath, char *fltr)
qsort(dents, ndents, sizeof(*dents), entrycmp);

/* Find cur from history */
cur = dentfind(dents, ndents, path, oldpath);
cur = dentfind(dents, ndents, oldpath);
return 0;
}



Loading…
取消
儲存