Quellcode durchsuchen

SMB1: Minor optimization of GetFindInformationList

Tal Aloni vor 7 Jahren
Ursprung
Commit
6c08f23751
1 geänderte Dateien mit 8 neuen und 3 gelöschten Zeilen
  1. 8 3
      SMBLibrary/Server/SMB1/SMB1FileStoreHelper.QueryDirectory.cs

+ 8 - 3
SMBLibrary/Server/SMB1/SMB1FileStoreHelper.QueryDirectory.cs

@@ -50,13 +50,18 @@ namespace SMBLibrary.Server.SMB1
         public static FindInformationList GetFindInformationList(List<QueryDirectoryFileInformation> entries, FindInformationLevel informationLevel, bool isUnicode, bool returnResumeKeys, int maxLength)
         public static FindInformationList GetFindInformationList(List<QueryDirectoryFileInformation> entries, FindInformationLevel informationLevel, bool isUnicode, bool returnResumeKeys, int maxLength)
         {
         {
             FindInformationList result = new FindInformationList();
             FindInformationList result = new FindInformationList();
+            int pageLength = 0;
             for (int index = 0; index < entries.Count; index++)
             for (int index = 0; index < entries.Count; index++)
             {
             {
                 FindInformation infoEntry = GetFindInformation(entries[index], informationLevel, isUnicode, returnResumeKeys);
                 FindInformation infoEntry = GetFindInformation(entries[index], informationLevel, isUnicode, returnResumeKeys);
-                result.Add(infoEntry);
-                if (result.GetLength(isUnicode) > maxLength)
+                int entryLength = infoEntry.GetLength(isUnicode);
+                if (pageLength + entryLength <= maxLength)
+                {
+                    result.Add(infoEntry);
+                    pageLength += entryLength;
+                }
+                else
                 {
                 {
-                    result.RemoveAt(result.Count - 1);
                     break;
                     break;
                 }
                 }
             }
             }