https://git.reactos.org/?p=reactos.git;a=commitdiff;h=23b36fc1730022398cbec…
commit 23b36fc1730022398cbec47f100444c9526e73f0
Author:     Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Mon Aug 6 22:36:14 2018 +0200
Commit:     Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Mon Aug 6 22:40:17 2018 +0200
    [CMD] Add speed-optimized checks for dot-directories "." and ".."
.
    Adapted from PR #592 by Katayama Hirofumi MZ.
---
 base/shell/cmd/dir.c | 57 ++++++++++++++++++++++++++++++++--------------------
 1 file changed, 35 insertions(+), 22 deletions(-)
diff --git a/base/shell/cmd/dir.c b/base/shell/cmd/dir.c
index 17627b9bae..b59bf6c6c6 100644
--- a/base/shell/cmd/dir.c
+++ b/base/shell/cmd/dir.c
@@ -233,6 +233,28 @@ DirHelp(VOID)
     ConOutResPaging(TRUE, STRING_DIR_HELP1);
 }
+/* Check whether this is a dot-directory "." or "..", speed-optimized
*/
+FORCEINLINE
+BOOL
+IsDotDirectory(
+    IN LPCTSTR pszPath)
+{
+    return (  pszPath[0] == _T('.') &&
+            ( pszPath[1] == 0 || /* pszPath[1] == _T('\\') || */
+             (pszPath[1] == _T('.') && (pszPath[2] == 0 /* || pszPath[2]
== _T('\\') */))
+            ) );
+}
+
+FORCEINLINE
+BOOL
+IsDotDirectoryN(
+    IN const TCHAR* pPath,
+    IN SIZE_T Length)
+{
+    return ((Length == 1 && pPath[0] == _T('.')) ||
+            (Length == 2 && pPath[0] == _T('.') && pPath[1] ==
_T('.')));
+}
+
 /*
  * DirReadParameters
  *
@@ -822,11 +844,10 @@ getName(const TCHAR* file, TCHAR * dest)
     INT_PTR iLen;
     LPTSTR end;
-    /* Check for "." and ".." folders */
-    if ((_tcscmp(file, _T(".")) == 0) ||
-        (_tcscmp(file, _T("..")) == 0))
+    /* Check for dot-directories "." and ".." */
+    if (IsDotDirectory(file))
     {
-        _tcscpy(dest,file);
+        _tcscpy(dest, file);
         return dest;
     }
@@ -1087,20 +1108,19 @@ DirPrintBareList(PDIRFINDINFO ptrFiles[],       /* [IN] Files'
Info */
     for (i = 0; i < dwCount && !CheckCtrlBreak(BREAK_INPUT); i++)
     {
-        if ((_tcscmp(ptrFiles[i]->stFindInfo.cFileName, _T(".")) == 0) ||
-            (_tcscmp(ptrFiles[i]->stFindInfo.cFileName, _T("..")) == 0))
+        if (IsDotDirectory(ptrFiles[i]->stFindInfo.cFileName))
         {
-            /* at bare format we don't print "." and ".." folder
*/
+            /* At bare format we don't print the dot-directories "." and
".." */
             continue;
         }
         if (lpFlags->bRecursive)
         {
-            /* at recursive mode we print full path of file */
+            /* At recursive mode we print full path of file */
             DirPrintf(lpFlags, _T("%s\\%s\n"), szCurPath,
ptrFiles[i]->stFindInfo.cFileName);
         }
         else
         {
-            /* if we are not in recursive mode we print the file names */
+            /* If we are not in recursive mode we print the file names */
             DirPrintf(lpFlags, _T("%s\n"),
ptrFiles[i]->stFindInfo.cFileName);
         }
     }
@@ -1376,7 +1396,7 @@ DirList(IN OUT LPTSTR szFullPath,   /* [IN] The full path we are
listing with tr
     ptrStartNode->stInfo.ptrHead = NULL;
     ptrNextNode = ptrStartNode;
-    /* Collect the results for the current folder */
+    /* Collect the results for the current directory */
     hSearch = FindFirstFile(szFullPath, &wfdFileInfo);
     if (hSearch != INVALID_HANDLE_VALUE)
     {
@@ -1561,8 +1581,7 @@ DirList(IN OUT LPTSTR szFullPath,   /* [IN] The full path we are
listing with tr
             do
             {
                 /* We search for directories other than "." and ".."
*/
-                if ((_tcsicmp(wfdFileInfo.cFileName, _T("."))  != 0) &&
-                    (_tcsicmp(wfdFileInfo.cFileName, _T("..")) != 0) &&
+                if (!IsDotDirectory(wfdFileInfo.cFileName) &&
                     (wfdFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                 {
                     /* Concat the path and the directory to do recursive */
@@ -1572,7 +1591,7 @@ DirList(IN OUT LPTSTR szFullPath,   /* [IN] The full path we are
listing with tr
                     pszSubFilePart = &szSubPath[_tcslen(szSubPath)];
                     _tcscat(pszSubFilePart, pszFilePart);
-                    /* We do the same for the folder */
+                    /* We do the same for the directory */
                     if (DirList(szSubPath, pszSubFilePart, lpFlags) != 0)
                     {
                         FindClose(hRecSearch);
@@ -1660,9 +1679,7 @@ ResolvePattern(
             break;
         /* Ignore the special "." and ".." directories that are
correctly handled */
-        if ((pNextDir - pCurDir == 0) ||
-            (pNextDir - pCurDir == 1 && pCurDir[0] == _T('.')) ||
-            (pNextDir - pCurDir == 2 && pCurDir[0] == _T('.') &&
pCurDir[1] == _T('.')))
+        if ((pNextDir - pCurDir == 0) || IsDotDirectoryN(pCurDir, pNextDir - pCurDir))
         {
             /* Found such a directory, ignore */
             ++pNextDir;
@@ -1758,9 +1775,7 @@ ResolvePattern(
         ASSERT(pszFullPath[_tcslen(pszFullPath)-1] == _T('\\'));
         /* Anything NOT being "." or ".." (the special directories)
must be fully restored */
-        if (*pNextDir &&
-            (_tcsicmp(pNextDir, _T("."))  != 0) &&
-            (_tcsicmp(pNextDir, _T("..")) != 0))
+        if (*pNextDir && !IsDotDirectory(pNextDir))
         {
             pszPatternPart = &pszFullPath[_tcslen(pszFullPath)];
             _tcscpy(pszPatternPart, pNextDir);
@@ -1777,9 +1792,7 @@ ResolvePattern(
         TRACE("pszPatternPart: %S is DIFFERENT from file criterion: %S\n",
pszPatternPart, pNextDir);
         /* Anything NOT being "." or ".." (the special directories)
must be fully restored */
-        if (*pNextDir &&
-            (_tcsicmp(pNextDir, _T("."))  != 0) &&
-            (_tcsicmp(pNextDir, _T("..")) != 0))
+        if (*pNextDir && !IsDotDirectory(pNextDir))
         {
             /* Restore the correct file criterion */
             _tcscpy(pszPatternPart, pNextDir);