⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cyclic.c

📁 ST5518机顶盒系统文件系统源代码!绝对超值!
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************    File Name   : cyclic.c    Description : Tests cyclic files******************************************************************************//* Includes ---------------------------------------------------------------- */#include <stdlib.h>#include <stdio.h>#include <ctype.h>#include <string.h>#include <assert.h>#include "wrapper.h"#include "stavfs.h"#include "avdevice.h"/* Private Types ----------------------------------------------------------- *//* Private Constants ------------------------------------------------------- */                      /* This data is 1.5 sectors (each block is 128 bytes) */static U8 StdData[(3*DISK_SECTOR_SIZE) / 2] = {    0XE0, 0XE1, 0XE2, 0XE3, 0XE4, 0XE5, 0XE6, 0XE7, 0XE8, 0XE9, 0XEA, 0XEB, 0XEC, 0XED, 0XEE, 0XEF,    0XF0, 0XF1, 0XF2, 0XF3, 0XF4, 0XF5, 0XF6, 0XF7, 0XF8, 0XF9, 0XFA, 0XFB, 0XFC, 0XFD, 0XFE, 0XFF,    0X00, 0X01, 0X02, 0X03, 0X04, 0X05, 0X06, 0X07, 0X08, 0X09, 0X0A, 0X0B, 0X0C, 0X0D, 0X0E, 0X0F,    0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X18, 0X19, 0X1A, 0X1B, 0X1C, 0X1D, 0X1E, 0X1F,    0X20, 0X21, 0X22, 0X23, 0X24, 0X25, 0X26, 0X27, 0X28, 0X29, 0X2A, 0X2B, 0X2C, 0X2D, 0X2E, 0X2F,    0X30, 0X31, 0X32, 0X33, 0X34, 0X35, 0X36, 0X37, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F,    0X40, 0X41, 0X42, 0X43, 0X44, 0X45, 0X46, 0X47, 0X48, 0X49, 0X4A, 0X4B, 0X4C, 0X4D, 0X4E, 0X4F,    0X90, 0X91, 0X92, 0X93, 0X94, 0X95, 0X96, 0X97, 0X98, 0X99, 0X9A, 0X9B, 0X9C, 0X9D, 0X9E, 0X9F,    0XB0, 0XB1, 0XB2, 0XB3, 0XB4, 0XB5, 0XB6, 0XB7, 0XB8, 0XB9, 0XBA, 0XBB, 0XBC, 0XBD, 0XBE, 0XBF,    0XA0, 0XA1, 0XA2, 0XA3, 0XA4, 0XA5, 0XA6, 0XA7, 0XA8, 0XA9, 0XAA, 0XAB, 0XAC, 0XAD, 0XAE, 0XAF,    0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F,    0X60, 0X61, 0X62, 0X63, 0X64, 0X65, 0X66, 0X67, 0X68, 0X69, 0X6A, 0X6B, 0X6C, 0X6D, 0X6E, 0X6F,    0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0X7A, 0X7B, 0X7C, 0X7D, 0X7E, 0X7F,    0X80, 0X81, 0X82, 0X83, 0X84, 0X85, 0X86, 0X87, 0X88, 0X89, 0X8A, 0X8B, 0X8C, 0X8D, 0X8E, 0X8F,    0X90, 0X91, 0X92, 0X93, 0X94, 0X95, 0X96, 0X97, 0X98, 0X99, 0X9A, 0X9B, 0X9C, 0X9D, 0X9E, 0X9F,    0XA0, 0XA1, 0XA2, 0XA3, 0XA4, 0XA5, 0XA6, 0XA7, 0XA8, 0XA9, 0XAA, 0XAB, 0XAC, 0XAD, 0XAE, 0XAF,    0XB0, 0XB1, 0XB2, 0XB3, 0XB4, 0XB5, 0XB6, 0XB7, 0XB8, 0XB9, 0XBA, 0XBB, 0XBC, 0XBD, 0XBE, 0XBF,    0XC0, 0XC1, 0XC2, 0XC3, 0XC4, 0XC5, 0XC6, 0XC7, 0XC8, 0XC9, 0XCA, 0XCB, 0XCC, 0XCD, 0XCE, 0XCF,    0XD0, 0XD1, 0XD2, 0XD3, 0XD4, 0XD5, 0XD6, 0XD7, 0XD8, 0XD9, 0XDA, 0XDB, 0XDC, 0XDD, 0XDE, 0XDF,    0XE0, 0XE1, 0XE2, 0XE3, 0XE4, 0XE5, 0XE6, 0XE7, 0XE8, 0XE9, 0XEA, 0XEB, 0XEC, 0XED, 0XEE, 0XEF,    0XF0, 0XF1, 0XF2, 0XF3, 0XF4, 0XF5, 0XF6, 0XF7, 0XF8, 0XF9, 0XFA, 0XFB, 0XFC, 0XFD, 0XFE, 0XFF,    0X00, 0X01, 0X02, 0X03, 0X04, 0X05, 0X06, 0X07, 0X08, 0X09, 0X0A, 0X0B, 0X0C, 0X0D, 0X0E, 0X0F,    0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X18, 0X19, 0X1A, 0X1B, 0X1C, 0X1D, 0X1E, 0X1F,    0X20, 0X21, 0X22, 0X23, 0X24, 0X25, 0X26, 0X27, 0X28, 0X29, 0X2A, 0X2B, 0X2C, 0X2D, 0X2E, 0X2F,    0X30, 0X31, 0X32, 0X33, 0X34, 0X35, 0X36, 0X37, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F,    0X40, 0X41, 0X42, 0X43, 0X44, 0X45, 0X46, 0X47, 0X48, 0X49, 0X4A, 0X4B, 0X4C, 0X4D, 0X4E, 0X4F,    0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F,    0X60, 0X61, 0X62, 0X63, 0X64, 0X65, 0X66, 0X67, 0X68, 0X69, 0X6A, 0X6B, 0X6C, 0X6D, 0X6E, 0X6F,    0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0X7A, 0X7B, 0X7C, 0X7D, 0X7E, 0X7F,    0X80, 0X81, 0X82, 0X83, 0X84, 0X85, 0X86, 0X87, 0X88, 0X89, 0X8A, 0X8B, 0X8C, 0X8D, 0X8E, 0X8F,    0X90, 0X91, 0X92, 0X93, 0X94, 0X95, 0X96, 0X97, 0X98, 0X99, 0X9A, 0X9B, 0X9C, 0X9D, 0X9E, 0X9F,    0XD0, 0XD1, 0XD2, 0XD3, 0XD4, 0XD5, 0XD6, 0XD7, 0XD8, 0XD9, 0XDA, 0XDB, 0XDC, 0XDD, 0XDE, 0XDF,    0X00, 0X01, 0X02, 0X03, 0X04, 0X05, 0X06, 0X07, 0X08, 0X09, 0X0A, 0X0B, 0X0C, 0X0D, 0X0E, 0X0F,    0X80, 0X81, 0X82, 0X83, 0X84, 0X85, 0X86, 0X87, 0X88, 0X89, 0X8A, 0X8B, 0X8C, 0X8D, 0X8E, 0X8F,    0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F,    0X60, 0X61, 0X62, 0X63, 0X64, 0X65, 0X66, 0X67, 0X68, 0X69, 0X6A, 0X6B, 0X6C, 0X6D, 0X6E, 0X6F,    0XE0, 0XE1, 0XE2, 0XE3, 0XE4, 0XE5, 0XE6, 0XE7, 0XE8, 0XE9, 0XEA, 0XEB, 0XEC, 0XED, 0XEE, 0XEF,    0XF0, 0XF1, 0XF2, 0XF3, 0XF4, 0XF5, 0XF6, 0XF7, 0XF8, 0XF9, 0XFA, 0XFB, 0XFC, 0XFD, 0XFE, 0XFF,    0XA0, 0XA1, 0XA2, 0XA3, 0XA4, 0XA5, 0XA6, 0XA7, 0XA8, 0XA9, 0XAA, 0XAB, 0XAC, 0XAD, 0XAE, 0XAF,    0XB0, 0XB1, 0XB2, 0XB3, 0XB4, 0XB5, 0XB6, 0XB7, 0XB8, 0XB9, 0XBA, 0XBB, 0XBC, 0XBD, 0XBE, 0XBF,    0XC0, 0XC1, 0XC2, 0XC3, 0XC4, 0XC5, 0XC6, 0XC7, 0XC8, 0XC9, 0XCA, 0XCB, 0XCC, 0XCD, 0XCE, 0XCF,    0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X18, 0X19, 0X1A, 0X1B, 0X1C, 0X1D, 0X1E, 0X1F,    0X20, 0X21, 0X22, 0X23, 0X24, 0X25, 0X26, 0X27, 0X28, 0X29, 0X2A, 0X2B, 0X2C, 0X2D, 0X2E, 0X2F,    0X30, 0X31, 0X32, 0X33, 0X34, 0X35, 0X36, 0X37, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F,    0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0X7A, 0X7B, 0X7C, 0X7D, 0X7E, 0X7F,    0XC0, 0XC1, 0XC2, 0XC3, 0XC4, 0XC5, 0XC6, 0XC7, 0XC8, 0XC9, 0XCA, 0XCB, 0XCC, 0XCD, 0XCE, 0XCF,    0XD0, 0XD1, 0XD2, 0XD3, 0XD4, 0XD5, 0XD6, 0XD7, 0XD8, 0XD9, 0XDA, 0XDB, 0XDC, 0XDD, 0XDE, 0XDF,    0XE0, 0XE1, 0XE2, 0XE3, 0XE4, 0XE5, 0XE6, 0XE7, 0XE8, 0XE9, 0XEA, 0XEB, 0XEC, 0XED, 0XEE, 0XEF,};/* Private Variables ------------------------------------------------------- */static U8 Buffer[8 * DISK_SECTOR_SIZE];/* Private Macros ---------------------------------------------------------- *//* Private Function Prototypes --------------------------------------------- */static TestResult_t OverFlow         (int TestNo, TestVariant_t Variant);static TestResult_t ReadBack         (int TestNo, TestVariant_t Variant);static TestResult_t BufferRead       (int TestNo, TestVariant_t Variant);static TestResult_t WriteReadBuffer  (int TestNo, TestVariant_t Variant);/* Functions --------------------------------------------------------------- *//******************************************************************************Function Name : Cyclic  Description : Cyclic files test section function.   Parameters :******************************************************************************/BOOL Cyclic (parse_t * pars_p, char *result_sym_p){    char *Description = "Unit Test cyclic file behaviour";    TestCall_t TestList[] = {        OverFlow,               /* Test 001 */        ReadBack,               /* Test 002 */        BufferRead,             /* Test 003 */        WriteReadBuffer,        /* Test 004 */    };    GenericTest (pars_p, result_sym_p, Description, TestList, TABLE_LEN (TestList) - 1, TEST_VARIANT_A);    return (FALSE);}/******************************************************************************Function Name : OverFlow  Description : Simple write to test overflow signal. Assumes 1 sector per cluster                (as created by the partition tests)   Parameters :******************************************************************************/static TestResult_t OverFlow (int TestNo, TestVariant_t Variant){    TestResult_t Result;    STAVFS_Handle_t DiskHandle;    Result = OpenPartition(0, 1, "Dev1", &DiskHandle);    if (TEST_PASSED == Result)    {        STAVFS_FileHandle_t FileHandle;        U64                 FileSize;        U32                 DataWritten;        /* Create a file of a given size */        I64_SetValue (3 * DISK_SECTOR_SIZE, 0, FileSize);        if (ST_NO_ERROR != STAVFS_OpenFile (DiskHandle, STAVFS_NULL_FILE_HANDLE, "tstest",            STAVFS_CYCLIC_MODE | STAVFS_WRITE_MODE | STAVFS_READ_MODE, FileSize, &FileHandle))        {            STTBX_Print (("Error opening cyclic file\n"));            Result = TEST_FAILED;        }        else        {            /* Two sectors should write normally */            if (ST_NO_ERROR != STAVFS_WriteFile (FileHandle, StdData, DISK_SECTOR_SIZE, &DataWritten)                || ST_NO_ERROR != STAVFS_WriteFile (FileHandle, StdData, DISK_SECTOR_SIZE, &DataWritten))            {                STTBX_Print (("Error writing\n"));                Result = TEST_FAILED;            }            /* Last write should cause an overflow. */            else if (STAVFS_ERROR_OVERFLOW != STAVFS_WriteFile (FileHandle, StdData, DISK_SECTOR_SIZE, &DataWritten))            {                STTBX_Print (("Should receive an overflow\n"));                Result = TEST_FAILED;            }            if (ST_NO_ERROR != STAVFS_CloseFile (FileHandle))            {                STTBX_Print (("Error closing file\n"));                Result = TEST_FAILED;            }            if (ST_NO_ERROR != STAVFS_DeleteFile (DiskHandle, STAVFS_NULL_FILE_HANDLE, "tstest"))            {                STTBX_Print (("Error deleting file\n"));                Result = TEST_FAILED;            }        }                if (TEST_PASSED != ClosePartition("Dev1", DiskHandle))        {            Result = TEST_FAILED; /* message already displayed */        }    }    return (Result);}/******************************************************************************Function Name : ReadBack  Description : Test small reads and writes, including flow over a sector boundary   Parameters :******************************************************************************/static TestResult_t ReadBack (int TestNo, TestVariant_t Variant){    TestResult_t Result;    STAVFS_Handle_t DiskHandle;    Result = OpenPartition(0, 1, "Dev1", &DiskHandle);    if (TEST_PASSED == Result)    {        STAVFS_FileHandle_t FileHandle;        U64 FileSize, ReadPos, WritePos;        U32 DataWritten, DataRead;        int i;        /* Create a cyclic file big enough to cover the test */                I64_SetValue (sizeof (StdData), 0, FileSize);        if (ST_NO_ERROR != STAVFS_OpenFile (DiskHandle, STAVFS_NULL_FILE_HANDLE, "tstest",            STAVFS_CYCLIC_MODE | STAVFS_WRITE_MODE | STAVFS_READ_MODE, FileSize, &FileHandle))        {            STTBX_Print (("Error opening cyclic file\n"));            Result = TEST_FAILED;        }        else        {            /* Write many ten-byte chunks within the capacity of the file. This will cross one sector boundary */                        for (i = 0; i < sizeof (StdData); i = i + 10)            {                if (ST_NO_ERROR != STAVFS_WriteFile (FileHandle, StdData + i, 10, &DataWritten))                {                    STTBX_Print (("Error writing file\n"));                    Result = TEST_FAILED;                    break;                }            }            if (TEST_PASSED == Result) /* ie okay so far */            {                STAVFS_GetFilePosition (FileHandle, FALSE, &ReadPos);                STAVFS_GetFilePosition (FileHandle, TRUE, &WritePos);                STTBX_Print (("After writing: read pos: %d, write pos: %d\n", ReadPos.LSW, WritePos.LSW));                /* read those chunks back again. Note we mustn't Close and reOpen the file, as that counts                  as discarding what we've written. Trying to Read more than we wrote would be an overflow */                                  for (i = 0; i < sizeof (StdData); i = i + 10)                {                    if (ST_NO_ERROR != STAVFS_ReadFile (FileHandle, Buffer + i, 10, &DataRead))                    {                        STTBX_Print (("Error reading file\n"));                        Result = TEST_FAILED;                        break;                    }                }            }            if (TEST_PASSED == Result) /* both write and read okay */            {                STAVFS_GetFilePosition (FileHandle, FALSE, &ReadPos);                STAVFS_GetFilePosition (FileHandle, TRUE, &WritePos);                STTBX_Print (("After reading: read pos: %d, write pos: %d\n", ReadPos.LSW, WritePos.LSW));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -