long int std_ftell(FILE *handle) { if (DS::isGBAMPAvailable()) { return FAT_ftell((FAT_FILE *) handle); } return handle->pos; }
uint TestFile4(void) { tIORes res; uint result = 1; tFATFile file; tFATFSStatus FSStatus1, FSStatus2; uint32 aFileSize[]= {0, 1, // ~= 0 FAT_SECTOR_SIZE-1, FAT_SECTOR_SIZE, FAT_SECTOR_SIZE+1, // ~= sector -1, 0, 1, // ~= cluster -1, 0, 1, // ~= 2 clusters -1, 0, 1}; // ~= 4 clusters int FileSizeCount = 5; int FileSizeIndex = 0; int CloseIndex; int ReadSizeIndex = 0; FAT_statvfs (&stdio_FATFS, &res, "\\", &FSStatus1); CHK(res == ior_OK); if (FSStatus1.ClusterSize != FAT_SECTOR_SIZE) { aFileSize[FileSizeCount++] = FSStatus1.ClusterSize - 1; aFileSize[FileSizeCount++] = FSStatus1.ClusterSize; aFileSize[FileSizeCount++] = FSStatus1.ClusterSize + 1; } aFileSize[FileSizeCount++] = 2 * FSStatus1.ClusterSize - 1; aFileSize[FileSizeCount++] = 2 * FSStatus1.ClusterSize; aFileSize[FileSizeCount++] = 2 * FSStatus1.ClusterSize + 1; aFileSize[FileSizeCount++] = 4 * FSStatus1.ClusterSize - 1; aFileSize[FileSizeCount++] = 4 * FSStatus1.ClusterSize; aFileSize[FileSizeCount++] = 4 * FSStatus1.ClusterSize + 1; for (CloseIndex = 0; CloseIndex <= 1; CloseIndex++) { for (FileSizeIndex = 0; FileSizeIndex < FileSizeCount; FileSizeIndex++) { for (ReadSizeIndex = 0; ReadSizeIndex < FileSizeCount; ReadSizeIndex++) { uint32 size, pos=0, ReadPos; size_t ReadSize; size = (size_t)aFileSize[FileSizeIndex]; ReadSize = aFileSize[ReadSizeIndex]; CreateTestFile (&res, &file, "file1", size, CloseIndex); CHK(res == ior_OK); if (!CloseIndex) { FAT_rewind (&stdio_FATFS, &res, &file); CHK(res == ior_OK); } else { FAT_fopen (&stdio_FATFS, &res, &file, "file1", "rb"); CHK(res == ior_OK); } FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(pos == ReadPos); while (pos < size) { FAT_fseek (&stdio_FATFS, &res, &file, pos); CHK(res == ior_OK); FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(pos == ReadPos); pos += MIN(size - pos, ReadSize); if (!ReadSize) break; } FAT_fseek (&stdio_FATFS, &res, &file, 0); CHK(res == ior_OK); FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(ReadPos == 0); FAT_fseek (&stdio_FATFS, &res, &file, size); CHK(res == ior_OK); FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(ReadPos == size); if (CloseIndex) { FAT_fseek (&stdio_FATFS, &res, &file, size + 1); CHK(res == ior_ARGUMENT_OUT_OF_RANGE); FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(ReadPos == size); } FAT_fsize (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(size == ReadPos); FAT_fclose (&stdio_FATFS, &res, &file); CHK(res == ior_OK); FAT_unlink (&stdio_FATFS, &res, "file1"); CHK(res == ior_OK); } } } FAT_statvfs (&stdio_FATFS, &res, "\\", &FSStatus2); CHK(res == ior_OK); CHK(FSStatus2.TotalFreeClusterCount == FSStatus1.TotalFreeClusterCount); result = 0; lend: return result; }
uint TestFile3(void) { tIORes res; uint result = 1; tFATFile file; tFATFSStatus FSStatus1, FSStatus2; uchar buf[4UL*MAX_CLUSTER_SIZE+1]; uint32 aFileSize[]= {0, 1, // ~= 0 FAT_SECTOR_SIZE-1, FAT_SECTOR_SIZE, FAT_SECTOR_SIZE+1, // ~= sector -1, 0, 1, // ~= cluster -1, 0, 1, // ~= 2 clusters -1, 0, 1}; // ~= 4 clusters int FileSizeCount = 5; int FileSizeIndex = 0; int CloseIndex; int ReadSizeIndex = 0; FAT_statvfs (&stdio_FATFS, &res, "\\", &FSStatus1); CHK(res == ior_OK); if (FSStatus1.ClusterSize != FAT_SECTOR_SIZE) { aFileSize[FileSizeCount++] = FSStatus1.ClusterSize - 1; aFileSize[FileSizeCount++] = FSStatus1.ClusterSize; aFileSize[FileSizeCount++] = FSStatus1.ClusterSize + 1; } aFileSize[FileSizeCount++] = 2 * FSStatus1.ClusterSize - 1; aFileSize[FileSizeCount++] = 2 * FSStatus1.ClusterSize; aFileSize[FileSizeCount++] = 2 * FSStatus1.ClusterSize + 1; aFileSize[FileSizeCount++] = 4 * FSStatus1.ClusterSize - 1; aFileSize[FileSizeCount++] = 4 * FSStatus1.ClusterSize; aFileSize[FileSizeCount++] = 4 * FSStatus1.ClusterSize + 1; for (CloseIndex = 0; CloseIndex <= 1; CloseIndex++) { for (FileSizeIndex = 0; FileSizeIndex < FileSizeCount; FileSizeIndex++) { for (ReadSizeIndex = 0; ReadSizeIndex < FileSizeCount; ReadSizeIndex++) { uint32 size, pos=0, ReadPos; size_t ReadSize, s; int IsEof; size = (size_t)aFileSize[FileSizeIndex]; ReadSize = aFileSize[ReadSizeIndex]; CreateTestFile (&res, &file, "file1", size, CloseIndex); CHK(res == ior_OK); if (!CloseIndex) { FAT_rewind (&stdio_FATFS, &res, &file); CHK(res == ior_OK); } else { FAT_fopen (&stdio_FATFS, &res, &file, "file1", "rb"); CHK(res == ior_OK); } FAT_fsize (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(size == ReadPos); FAT_feof (&stdio_FATFS, &res, &file, &IsEof); CHK(res == ior_OK); CHK(size ? !IsEof : IsEof); FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(pos == ReadPos); while (pos < size) { uint32 i; s = FAT_fread (&stdio_FATFS, &res, buf, 1, ReadSize, &file); CHK(res == ior_OK); CHK(s == MIN(size - pos, ReadSize)); if (!ReadSize) break; for (i = 0; i < s; i++) { CHK(buf[i] == (pos + i) % 251); } pos += s; FAT_ftell (&stdio_FATFS, &res, &file, &ReadPos); CHK(res == ior_OK); CHK(pos == ReadPos); } if (ReadSize) { s = FAT_fread (&stdio_FATFS, &res, buf, 1, ReadSize, &file); CHK(res == ior_OK); CHK(s == 0); CHK(pos == size); FAT_feof (&stdio_FATFS, &res, &file, &IsEof); CHK(res == ior_OK); CHK(IsEof); } FAT_fclose (&stdio_FATFS, &res, &file); CHK(res == ior_OK); FAT_unlink (&stdio_FATFS, &res, "file1"); CHK(res == ior_OK); } } } FAT_statvfs (&stdio_FATFS, &res, "\\", &FSStatus2); CHK(res == ior_OK); CHK(FSStatus2.TotalFreeClusterCount == FSStatus1.TotalFreeClusterCount); result = 0; lend: return result; }