Exemple #1
0
int MultipleFatCheck(RDWRHandle handle)
{
   unsigned short sectorsperfat = GetSectorsPerFat(handle);
   unsigned char  numberoffats  = GetNumberOfFats(handle);

   unsigned long bytesinfat = GetBytesInFat(handle), compared = 0, rest;

   SECTOR fat1start = GetFatStart(handle), fat2start = fat1start, i, j;
   
   char buffer1[BYTESPERSECTOR];
   char buffer2[BYTESPERSECTOR];
   
   if ((sectorsperfat == 0) || (numberoffats == 0) || (fat1start == 0) ||
       (bytesinfat == 0))
      return FAIL;                                  /* Not succeeded. */

   if (numberoffats == 1) return TRUE; /* Succeeded when only one fat? */

   rest = bytesinfat % BYTESPERSECTOR;
   for (i = 0; i < numberoffats - 1; i++)
   {
       fat2start += sectorsperfat;

       for (j = 0; j < sectorsperfat; j++)
       {
           if (ReadSectors(handle, 1, fat1start + j, buffer1) == -1)
              return FAIL;
              
           if (ReadSectors(handle, 1, fat2start + j, buffer2) == -1)
              return FAIL;

           if (compared == bytesinfat - rest)
           {
              if (memcmp(buffer1, buffer2, (int) rest) != 0)
                 return FALSE;

              compared = 0;
           }
           else
           {
              if (memcmp(buffer1, buffer2, BYTESPERSECTOR) != 0)
                 return FALSE;

              compared += BYTESPERSECTOR;
           }
       }
   }
   return TRUE;
}
Exemple #2
0
SECTOR GetDirectoryStart(RDWRHandle handle)
{
    unsigned short reserved;
    unsigned char  fats;
    unsigned long  SectorsPerFat;

    if (handle->dirbegin == 0)
    {    
	reserved = GetReservedSectors(handle);
	if (reserved == 0) RETURN_FTEERR(FALSE);

	fats = GetNumberOfFats(handle);
	if (fats == 0) RETURN_FTEERR(FALSE);

	SectorsPerFat = GetSectorsPerFat(handle);
	if (SectorsPerFat == 0) RETURN_FTEERR(FALSE);

	handle->dirbegin = (SECTOR) reserved + ((SECTOR)fats * SectorsPerFat);
    }
    
    return handle->dirbegin;
}