-\r
- if (Info->Attribute & EFI_FILE_DIRECTORY) {\r
- //\r
- // The GetFileInformationByHandle.nFileSizeLow is bogus for dir so we \r
- // need to do the same thing the caller would do to get the right value\r
- //\r
- ASSERT (PrivateFile->EfiFile.Read != NULL);\r
- DirStatus = PrivateFile->EfiFile.GetPosition (&PrivateFile->EfiFile, &Location);\r
- if (EFI_ERROR (DirStatus)) {\r
- Location = 0;\r
- }\r
-\r
- PrivateFile->EfiFile.SetPosition (&PrivateFile->EfiFile, 0);\r
- Info->FileSize = 0; \r
- do {\r
- ReadSize = 0;\r
- DirInfo = NULL;\r
- DirStatus = PrivateFile->EfiFile.Read (&PrivateFile->EfiFile, &ReadSize, DirInfo);\r
- if (DirStatus == EFI_BUFFER_TOO_SMALL) {\r
- DirInfo = AllocatePool (ReadSize);\r
- if (DirInfo != NULL) {\r
- //\r
- // Read each dir entry to figure out how big the directory is\r
- //\r
- DirStatus = PrivateFile->EfiFile.Read (&PrivateFile->EfiFile, &ReadSize, DirInfo);\r
- if (!EFI_ERROR (DirStatus) && (ReadSize != 0)) {\r
- Info->FileSize += ReadSize;\r
- }\r
- FreePool (DirInfo);\r
- }\r
- }\r
- \r
- } while (!EFI_ERROR (DirStatus) && (ReadSize != 0));\r
-\r
- //\r
- // reset the file possition back to the previous location\r
- //\r
- PrivateFile->EfiFile.SetPosition (&PrivateFile->EfiFile, Location);\r
- }\r