\r
#include "Fat.h"\r
\r
-\r
/**\r
\r
Get the FAT entry of the volume, which is identified with the Index.\r
STATIC\r
VOID *\r
FatLoadFatEntry (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN Index\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN Index\r
)\r
{\r
UINTN Pos;\r
EFI_STATUS Status;\r
\r
if (Index > (Volume->MaxCluster + 1)) {\r
- Volume->FatEntryBuffer = (UINT32) -1;\r
+ Volume->FatEntryBuffer = (UINT32)-1;\r
return &Volume->FatEntryBuffer;\r
}\r
+\r
//\r
// Compute buffer position needed\r
//\r
switch (Volume->FatType) {\r
- case Fat12:\r
- Pos = FAT_POS_FAT12 (Index);\r
- break;\r
+ case Fat12:\r
+ Pos = FAT_POS_FAT12 (Index);\r
+ break;\r
\r
- case Fat16:\r
- Pos = FAT_POS_FAT16 (Index);\r
- break;\r
+ case Fat16:\r
+ Pos = FAT_POS_FAT16 (Index);\r
+ break;\r
\r
- default:\r
- Pos = FAT_POS_FAT32 (Index);\r
+ default:\r
+ Pos = FAT_POS_FAT32 (Index);\r
}\r
+\r
//\r
// Set the position and read the buffer\r
//\r
Volume->FatEntryPos = Volume->FatPos + Pos;\r
- Status = FatDiskIo (\r
- Volume,\r
- ReadFat,\r
- Volume->FatEntryPos,\r
- Volume->FatEntrySize,\r
- &Volume->FatEntryBuffer,\r
- NULL\r
- );\r
+ Status = FatDiskIo (\r
+ Volume,\r
+ ReadFat,\r
+ Volume->FatEntryPos,\r
+ Volume->FatEntrySize,\r
+ &Volume->FatEntryBuffer,\r
+ NULL\r
+ );\r
if (EFI_ERROR (Status)) {\r
- Volume->FatEntryBuffer = (UINT32) -1;\r
+ Volume->FatEntryBuffer = (UINT32)-1;\r
}\r
\r
return &Volume->FatEntryBuffer;\r
STATIC\r
UINTN\r
FatGetFatEntry (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN Index\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN Index\r
)\r
{\r
VOID *Pos;\r
Pos = FatLoadFatEntry (Volume, Index);\r
\r
if (Index > (Volume->MaxCluster + 1)) {\r
- return (UINTN) -1;\r
+ return (UINTN)-1;\r
}\r
\r
switch (Volume->FatType) {\r
- case Fat12:\r
- En12 = Pos;\r
- Accum = En12[0] | (En12[1] << 8);\r
- Accum = FAT_ODD_CLUSTER_FAT12 (Index) ? (Accum >> 4) : (Accum & FAT_CLUSTER_MASK_FAT12);\r
- Accum = Accum | ((Accum >= FAT_CLUSTER_SPECIAL_FAT12) ? FAT_CLUSTER_SPECIAL_EXT : 0);\r
- break;\r
-\r
- case Fat16:\r
- En16 = Pos;\r
- Accum = *En16;\r
- Accum = Accum | ((Accum >= FAT_CLUSTER_SPECIAL_FAT16) ? FAT_CLUSTER_SPECIAL_EXT : 0);\r
- break;\r
-\r
- default:\r
- En32 = Pos;\r
- Accum = *En32 & FAT_CLUSTER_MASK_FAT32;\r
- Accum = Accum | ((Accum >= FAT_CLUSTER_SPECIAL_FAT32) ? FAT_CLUSTER_SPECIAL_EXT : 0);\r
+ case Fat12:\r
+ En12 = Pos;\r
+ Accum = En12[0] | (En12[1] << 8);\r
+ Accum = FAT_ODD_CLUSTER_FAT12 (Index) ? (Accum >> 4) : (Accum & FAT_CLUSTER_MASK_FAT12);\r
+ Accum = Accum | ((Accum >= FAT_CLUSTER_SPECIAL_FAT12) ? FAT_CLUSTER_SPECIAL_EXT : 0);\r
+ break;\r
+\r
+ case Fat16:\r
+ En16 = Pos;\r
+ Accum = *En16;\r
+ Accum = Accum | ((Accum >= FAT_CLUSTER_SPECIAL_FAT16) ? FAT_CLUSTER_SPECIAL_EXT : 0);\r
+ break;\r
+\r
+ default:\r
+ En32 = Pos;\r
+ Accum = *En32 & FAT_CLUSTER_MASK_FAT32;\r
+ Accum = Accum | ((Accum >= FAT_CLUSTER_SPECIAL_FAT32) ? FAT_CLUSTER_SPECIAL_EXT : 0);\r
}\r
\r
return Accum;\r
STATIC\r
EFI_STATUS\r
FatSetFatEntry (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN Index,\r
- IN UINTN Value\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN Index,\r
+ IN UINTN Value\r
)\r
{\r
VOID *Pos;\r
}\r
\r
OriginalVal = FatGetFatEntry (Volume, Index);\r
- if (Value == FAT_CLUSTER_FREE && OriginalVal != FAT_CLUSTER_FREE) {\r
+ if ((Value == FAT_CLUSTER_FREE) && (OriginalVal != FAT_CLUSTER_FREE)) {\r
Volume->FatInfoSector.FreeInfo.ClusterCount += 1;\r
if (Index < Volume->FatInfoSector.FreeInfo.NextCluster) {\r
- Volume->FatInfoSector.FreeInfo.NextCluster = (UINT32) Index;\r
+ Volume->FatInfoSector.FreeInfo.NextCluster = (UINT32)Index;\r
}\r
- } else if (Value != FAT_CLUSTER_FREE && OriginalVal == FAT_CLUSTER_FREE) {\r
+ } else if ((Value != FAT_CLUSTER_FREE) && (OriginalVal == FAT_CLUSTER_FREE)) {\r
if (Volume->FatInfoSector.FreeInfo.ClusterCount != 0) {\r
Volume->FatInfoSector.FreeInfo.ClusterCount -= 1;\r
}\r
}\r
+\r
//\r
// Make sure the entry is in memory\r
//\r
// Update the value\r
//\r
switch (Volume->FatType) {\r
- case Fat12:\r
- En12 = Pos;\r
- Accum = En12[0] | (En12[1] << 8);\r
- Value = Value & FAT_CLUSTER_MASK_FAT12;\r
-\r
- if (FAT_ODD_CLUSTER_FAT12 (Index)) {\r
- Accum = (Value << 4) | (Accum & 0xF);\r
- } else {\r
- Accum = Value | (Accum & FAT_CLUSTER_UNMASK_FAT12);\r
- }\r
+ case Fat12:\r
+ En12 = Pos;\r
+ Accum = En12[0] | (En12[1] << 8);\r
+ Value = Value & FAT_CLUSTER_MASK_FAT12;\r
\r
- En12[0] = (UINT8) (Accum & 0xFF);\r
- En12[1] = (UINT8) (Accum >> 8);\r
- break;\r
+ if (FAT_ODD_CLUSTER_FAT12 (Index)) {\r
+ Accum = (Value << 4) | (Accum & 0xF);\r
+ } else {\r
+ Accum = Value | (Accum & FAT_CLUSTER_UNMASK_FAT12);\r
+ }\r
\r
- case Fat16:\r
- En16 = Pos;\r
- *En16 = (UINT16) Value;\r
- break;\r
+ En12[0] = (UINT8)(Accum & 0xFF);\r
+ En12[1] = (UINT8)(Accum >> 8);\r
+ break;\r
+\r
+ case Fat16:\r
+ En16 = Pos;\r
+ *En16 = (UINT16)Value;\r
+ break;\r
\r
- default:\r
- En32 = Pos;\r
- *En32 = (*En32 & FAT_CLUSTER_UNMASK_FAT32) | (UINT32) (Value & FAT_CLUSTER_MASK_FAT32);\r
+ default:\r
+ En32 = Pos;\r
+ *En32 = (*En32 & FAT_CLUSTER_UNMASK_FAT32) | (UINT32)(Value & FAT_CLUSTER_MASK_FAT32);\r
}\r
+\r
//\r
// If the volume's dirty bit is not set, set it now\r
//\r
- if (!Volume->FatDirty && Volume->FatType != Fat12) {\r
+ if (!Volume->FatDirty && (Volume->FatType != Fat12)) {\r
Volume->FatDirty = TRUE;\r
FatAccessVolumeDirty (Volume, WriteFat, &Volume->DirtyValue);\r
}\r
+\r
//\r
// Write the updated fat entry value to the volume\r
// The fat is the first fat, and other fat will be in sync\r
STATIC\r
EFI_STATUS\r
FatFreeClusters (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN Cluster\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN Cluster\r
)\r
{\r
- UINTN LastCluster;\r
+ UINTN LastCluster;\r
\r
while (!FAT_END_OF_FAT_CHAIN (Cluster)) {\r
- if (Cluster == FAT_CLUSTER_FREE || Cluster >= FAT_CLUSTER_SPECIAL) {\r
-\r
+ if ((Cluster == FAT_CLUSTER_FREE) || (Cluster >= FAT_CLUSTER_SPECIAL)) {\r
DEBUG ((DEBUG_INIT | DEBUG_ERROR, "FatShrinkEof: cluster chain corrupt\n"));\r
return EFI_VOLUME_CORRUPTED;\r
}\r
STATIC\r
UINTN\r
FatAllocateCluster (\r
- IN FAT_VOLUME *Volume\r
+ IN FAT_VOLUME *Volume\r
)\r
{\r
- UINTN Cluster;\r
+ UINTN Cluster;\r
\r
//\r
// Start looking at FatFreePos for the next unallocated cluster\r
//\r
if (Volume->DiskError) {\r
- return (UINTN) FAT_CLUSTER_LAST;\r
+ return (UINTN)FAT_CLUSTER_LAST;\r
}\r
\r
- for (;;) {\r
+ for ( ; ;) {\r
//\r
// If the end of the list, return no available cluster\r
//\r
if (Volume->FatInfoSector.FreeInfo.NextCluster > (Volume->MaxCluster + 1)) {\r
- if (Volume->FreeInfoValid && 0 < (INT32) (Volume->FatInfoSector.FreeInfo.ClusterCount)) {\r
+ if (Volume->FreeInfoValid && (0 < (INT32)(Volume->FatInfoSector.FreeInfo.ClusterCount))) {\r
Volume->FreeInfoValid = FALSE;\r
}\r
\r
FatComputeFreeInfo (Volume);\r
if (Volume->FatInfoSector.FreeInfo.NextCluster > (Volume->MaxCluster + 1)) {\r
- return (UINTN) FAT_CLUSTER_LAST;\r
+ return (UINTN)FAT_CLUSTER_LAST;\r
}\r
}\r
\r
if (Cluster == FAT_CLUSTER_FREE) {\r
break;\r
}\r
+\r
//\r
// Try the next cluster\r
//\r
Volume->FatInfoSector.FreeInfo.NextCluster += 1;\r
}\r
\r
- Cluster = Volume->FatInfoSector.FreeInfo.NextCluster;\r
+ Cluster = Volume->FatInfoSector.FreeInfo.NextCluster;\r
Volume->FatInfoSector.FreeInfo.NextCluster += 1;\r
return Cluster;\r
}\r
STATIC\r
UINTN\r
FatSizeToClusters (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN Size\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN Size\r
)\r
{\r
- UINTN Clusters;\r
+ UINTN Clusters;\r
\r
Clusters = Size >> Volume->ClusterAlignment;\r
if ((Size & (Volume->ClusterSize - 1)) > 0) {\r
**/\r
EFI_STATUS\r
FatShrinkEof (\r
- IN FAT_OFILE *OFile\r
+ IN FAT_OFILE *OFile\r
)\r
{\r
FAT_VOLUME *Volume;\r
UINTN Cluster;\r
UINTN LastCluster;\r
\r
- Volume = OFile->Volume;\r
+ Volume = OFile->Volume;\r
ASSERT_VOLUME_LOCKED (Volume);\r
\r
NewSize = FatSizeToClusters (Volume, OFile->FileSize);\r
LastCluster = FAT_CLUSTER_FREE;\r
\r
if (NewSize != 0) {\r
-\r
for (CurSize = 0; CurSize < NewSize; CurSize++) {\r
- if (Cluster == FAT_CLUSTER_FREE || Cluster >= FAT_CLUSTER_SPECIAL) {\r
-\r
+ if ((Cluster == FAT_CLUSTER_FREE) || (Cluster >= FAT_CLUSTER_SPECIAL)) {\r
DEBUG ((DEBUG_INIT | DEBUG_ERROR, "FatShrinkEof: cluster chain corrupt\n"));\r
return EFI_VOLUME_CORRUPTED;\r
}\r
Cluster = FatGetFatEntry (Volume, Cluster);\r
}\r
\r
- FatSetFatEntry (Volume, LastCluster, (UINTN) FAT_CLUSTER_LAST);\r
-\r
+ FatSetFatEntry (Volume, LastCluster, (UINTN)FAT_CLUSTER_LAST);\r
} else {\r
//\r
// Check to see if the file is already completely truncated\r
if (Cluster == FAT_CLUSTER_FREE) {\r
return EFI_SUCCESS;\r
}\r
+\r
//\r
// The file is being completely truncated.\r
//\r
- OFile->FileCluster = FAT_CLUSTER_FREE;\r
+ OFile->FileCluster = FAT_CLUSTER_FREE;\r
}\r
+\r
//\r
// Set CurrentCluster == FileCluster\r
// to force a recalculation of Position related stuffs\r
**/\r
EFI_STATUS\r
FatGrowEof (\r
- IN FAT_OFILE *OFile,\r
- IN UINT64 NewSizeInBytes\r
+ IN FAT_OFILE *OFile,\r
+ IN UINT64 NewSizeInBytes\r
)\r
{\r
FAT_VOLUME *Volume;\r
// If the file is already large enough, do nothing\r
//\r
CurSize = FatSizeToClusters (Volume, OFile->FileSize);\r
- NewSize = FatSizeToClusters (Volume, (UINTN) NewSizeInBytes);\r
+ NewSize = FatSizeToClusters (Volume, (UINTN)NewSizeInBytes);\r
\r
if (CurSize < NewSize) {\r
//\r
// If we haven't found the files last cluster do it now\r
//\r
if ((OFile->FileCluster != 0) && (OFile->FileLastCluster == 0)) {\r
- Cluster = OFile->FileCluster;\r
- ClusterCount = 0;\r
+ Cluster = OFile->FileCluster;\r
+ ClusterCount = 0;\r
\r
while (!FAT_END_OF_FAT_CHAIN (Cluster)) {\r
- if (Cluster < FAT_MIN_CLUSTER || Cluster > Volume->MaxCluster + 1) {\r
-\r
+ if ((Cluster < FAT_MIN_CLUSTER) || (Cluster > Volume->MaxCluster + 1)) {\r
DEBUG (\r
(DEBUG_INIT | DEBUG_ERROR,\r
- "FatGrowEof: cluster chain corrupt\n")\r
+ "FatGrowEof: cluster chain corrupt\n")\r
);\r
Status = EFI_VOLUME_CORRUPTED;\r
goto Done;\r
}\r
\r
ClusterCount++;\r
- OFile->FileLastCluster = Cluster;\r
- Cluster = FatGetFatEntry (Volume, Cluster);\r
+ OFile->FileLastCluster = Cluster;\r
+ Cluster = FatGetFatEntry (Volume, Cluster);\r
}\r
\r
if (ClusterCount != CurSize) {\r
DEBUG (\r
(DEBUG_INIT | DEBUG_ERROR,\r
- "FatGrowEof: cluster chain size does not match file size\n")\r
+ "FatGrowEof: cluster chain size does not match file size\n")\r
);\r
Status = EFI_VOLUME_CORRUPTED;\r
goto Done;\r
}\r
-\r
}\r
+\r
//\r
// Loop until we've allocated enough space\r
//\r
NewCluster = FatAllocateCluster (Volume);\r
if (FAT_END_OF_FAT_CHAIN (NewCluster)) {\r
if (LastCluster != FAT_CLUSTER_FREE) {\r
- FatSetFatEntry (Volume, LastCluster, (UINTN) FAT_CLUSTER_LAST);\r
+ FatSetFatEntry (Volume, LastCluster, (UINTN)FAT_CLUSTER_LAST);\r
OFile->FileLastCluster = LastCluster;\r
}\r
\r
goto Done;\r
}\r
\r
- if (NewCluster < FAT_MIN_CLUSTER || NewCluster > Volume->MaxCluster + 1) {\r
+ if ((NewCluster < FAT_MIN_CLUSTER) || (NewCluster > Volume->MaxCluster + 1)) {\r
Status = EFI_VOLUME_CORRUPTED;\r
goto Done;\r
}\r
}\r
\r
LastCluster = NewCluster;\r
- CurSize += 1;\r
+ CurSize += 1;\r
\r
//\r
// Terminate the cluster list\r
// a second time. There are other, less predictable scenarios\r
// where this could happen, as well.\r
//\r
- FatSetFatEntry (Volume, LastCluster, (UINTN) FAT_CLUSTER_LAST);\r
+ FatSetFatEntry (Volume, LastCluster, (UINTN)FAT_CLUSTER_LAST);\r
OFile->FileLastCluster = LastCluster;\r
}\r
}\r
\r
- OFile->FileSize = (UINTN) NewSizeInBytes;\r
+ OFile->FileSize = (UINTN)NewSizeInBytes;\r
OFile->Dirty = TRUE;\r
return EFI_SUCCESS;\r
\r
**/\r
EFI_STATUS\r
FatOFilePosition (\r
- IN FAT_OFILE *OFile,\r
- IN UINTN Position,\r
- IN UINTN PosLimit\r
+ IN FAT_OFILE *OFile,\r
+ IN UINTN Position,\r
+ IN UINTN PosLimit\r
)\r
{\r
FAT_VOLUME *Volume;\r
// from its fixed info in the fat bpb\r
//\r
if (OFile->IsFixedRootDir) {\r
- OFile->PosDisk = Volume->RootPos + Position;\r
- Run = OFile->FileSize - Position;\r
+ OFile->PosDisk = Volume->RootPos + Position;\r
+ Run = OFile->FileSize - Position;\r
} else {\r
//\r
// Run the file's cluster chain to find the current position\r
// when OFile->FileCluster is updated, so make a check of this\r
// and invalidate the original OFile->Position in this case\r
//\r
- Cluster = OFile->FileCurrentCluster;\r
- StartPos = OFile->Position;\r
- if (Position < StartPos || OFile->FileCluster == Cluster) {\r
- StartPos = 0;\r
- Cluster = OFile->FileCluster;\r
+ Cluster = OFile->FileCurrentCluster;\r
+ StartPos = OFile->Position;\r
+ if ((Position < StartPos) || (OFile->FileCluster == Cluster)) {\r
+ StartPos = 0;\r
+ Cluster = OFile->FileCluster;\r
}\r
\r
while (StartPos + ClusterSize <= Position) {\r
StartPos += ClusterSize;\r
- if (Cluster == FAT_CLUSTER_FREE || (Cluster >= FAT_CLUSTER_SPECIAL)) {\r
- DEBUG ((DEBUG_INIT | DEBUG_ERROR, "FatOFilePosition:"" cluster chain corrupt\n"));\r
+ if ((Cluster == FAT_CLUSTER_FREE) || (Cluster >= FAT_CLUSTER_SPECIAL)) {\r
+ DEBUG ((DEBUG_INIT | DEBUG_ERROR, "FatOFilePosition:" " cluster chain corrupt\n"));\r
return EFI_VOLUME_CORRUPTED;\r
}\r
\r
Cluster = FatGetFatEntry (Volume, Cluster);\r
}\r
\r
- if (Cluster < FAT_MIN_CLUSTER || Cluster > Volume->MaxCluster + 1) {\r
+ if ((Cluster < FAT_MIN_CLUSTER) || (Cluster > Volume->MaxCluster + 1)) {\r
return EFI_VOLUME_CORRUPTED;\r
}\r
\r
- OFile->PosDisk = Volume->FirstClusterPos +\r
- LShiftU64 (Cluster - FAT_MIN_CLUSTER, Volume->ClusterAlignment) +\r
- Position - StartPos;\r
+ OFile->PosDisk = Volume->FirstClusterPos +\r
+ LShiftU64 (Cluster - FAT_MIN_CLUSTER, Volume->ClusterAlignment) +\r
+ Position - StartPos;\r
OFile->FileCurrentCluster = Cluster;\r
OFile->Position = StartPos;\r
\r
**/\r
UINTN\r
FatPhysicalDirSize (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN Cluster\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN Cluster\r
)\r
{\r
- UINTN Size;\r
+ UINTN Size;\r
+\r
ASSERT_VOLUME_LOCKED (Volume);\r
//\r
// Run the cluster chain for the OFile\r
//\r
if (Cluster != 0) {\r
while (!FAT_END_OF_FAT_CHAIN (Cluster)) {\r
- if (Cluster == FAT_CLUSTER_FREE || Cluster >= FAT_CLUSTER_SPECIAL) {\r
+ if ((Cluster == FAT_CLUSTER_FREE) || (Cluster >= FAT_CLUSTER_SPECIAL)) {\r
DEBUG (\r
(DEBUG_INIT | DEBUG_ERROR,\r
- "FATDirSize: cluster chain corrupt\n")\r
+ "FATDirSize: cluster chain corrupt\n")\r
);\r
return 0;\r
}\r
\r
- Size += Volume->ClusterSize;\r
+ Size += Volume->ClusterSize;\r
Cluster = FatGetFatEntry (Volume, Cluster);\r
}\r
}\r
**/\r
UINT64\r
FatPhysicalFileSize (\r
- IN FAT_VOLUME *Volume,\r
- IN UINTN RealSize\r
+ IN FAT_VOLUME *Volume,\r
+ IN UINTN RealSize\r
)\r
{\r
UINTN ClusterSizeMask;\r
UINT64 PhysicalSize;\r
+\r
ClusterSizeMask = Volume->ClusterSize - 1;\r
- PhysicalSize = (RealSize + ClusterSizeMask) & (~((UINT64) ClusterSizeMask));\r
+ PhysicalSize = (RealSize + ClusterSizeMask) & (~((UINT64)ClusterSizeMask));\r
return PhysicalSize;\r
}\r
\r
**/\r
VOID\r
FatComputeFreeInfo (\r
- IN FAT_VOLUME *Volume\r
+ IN FAT_VOLUME *Volume\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
//\r
// If we don't have valid info, compute it now\r
//\r
if (!Volume->FreeInfoValid) {\r
-\r
- Volume->FreeInfoValid = TRUE;\r
- Volume->FatInfoSector.FreeInfo.ClusterCount = 0;\r
+ Volume->FreeInfoValid = TRUE;\r
+ Volume->FatInfoSector.FreeInfo.ClusterCount = 0;\r
for (Index = Volume->MaxCluster + 1; Index >= FAT_MIN_CLUSTER; Index--) {\r
if (Volume->DiskError) {\r
break;\r
\r
if (FatGetFatEntry (Volume, Index) == FAT_CLUSTER_FREE) {\r
Volume->FatInfoSector.FreeInfo.ClusterCount += 1;\r
- Volume->FatInfoSector.FreeInfo.NextCluster = (UINT32) Index;\r
+ Volume->FatInfoSector.FreeInfo.NextCluster = (UINT32)Index;\r
}\r
}\r
\r