亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fatfs_supp.c

?? 該工程是從ecos嵌入式系統下移植過來的一個小型的fat16文件系統
?? C
?? 第 1 頁 / 共 5 頁
字號:
// find_and_append_cluster()// Finds a free cluster on disk and appends it to the given cluster. // New cluster is marked as LAST. static intfind_and_append_cluster(fatfs_disk_t  *disk,                         cyg_uint32     cluster,                         cyg_uint32    *new_cluster,                        cluster_opts_t opts){    cyg_uint32 free_cluster;    int err;    printf("cluster=%d", cluster);        err = find_next_free_cluster(disk, cluster,             &free_cluster, opts | CO_MARK_LAST);    if (err != ENOERR)        return err;    printf( "free_cluster=%d", free_cluster);        // Link clusters        err = link_cluster(disk, cluster, free_cluster);    if (err != ENOERR)        return err;    *new_cluster = free_cluster;    printf( "new_cluster=%d", free_cluster);        return ENOERR;}// -------------------------------------------------------------------------// find_nth_cluster0()// Finds nth cluster in chain (ie nth cluster of file).// Searching from given position. static intfind_nth_cluster0(fatfs_disk_t     *disk,                  fatfs_data_pos_t *dpos,                   cyg_uint32        n,                  fatfs_tcache_t   *tcache){    cyg_uint32 cluster, cluster_snum;    int err = ENOERR;    // Trivial case check    if (dpos->cluster_snum == n)        return ENOERR;    // First look in cache    if (NULL != tcache)    {        cyg_uint32 c, ln;        if (fatfs_tcache_get(disk, tcache, n, &c))        {            // Cluster in cache            dpos->cluster = c;            dpos->cluster_snum = n;            printf( "cluster=%d cluster_snum=%d in cache", c, n);            return ENOERR;        }        else if (fatfs_tcache_get_last(disk, tcache, &ln, &c))        {            // Cluster not in cache - get last            // in cache and search from there            dpos->cluster = c;            dpos->cluster_snum = ln;              printf( "cluster=%d cluster_snum=%d last in cache", c, ln);        }        else        {            // Empty cache - put first cluster in            fatfs_tcache_set(disk, tcache, dpos->cluster_snum, dpos->cluster);        }    }       cluster      = dpos->cluster;    cluster_snum = dpos->cluster_snum;       printf( "cluster=%d cluster_snum=%d n=%d n_to_search=%d",                    cluster, cluster_snum, n, n-cluster_snum);       // Adjust t    while (n > 0)    {        cyg_uint32 tentry;        err = read_tentry(disk, cluster, &tentry);        if (err != ENOERR)            return err;        switch (get_tentry_type(disk, tentry))        {            case TENTRY_REGULAR:                break;            case TENTRY_LAST:                // Oops early last cluster                printf( "chain end n=%d", n);                err = EEOF; // File has less clusters than given n                            // this err should be caught by the                             // calling function                 goto out;            default:                // Inconsistant FAT table state !!!                printf("!!! inconsistant FAT tentry=%x n=%d",                                 tentry, n);                err = EIO;                                 goto out;        }        cluster = get_tentry_next_cluster(disk, tentry);        cluster_snum++;        if (NULL != tcache)            fatfs_tcache_set(disk, tcache, cluster_snum, cluster);        n--;    }    out:    dpos->cluster      = cluster;    dpos->cluster_snum = cluster_snum;    printf( "nth cluster=%d cluster_snum=%d", cluster, cluster_snum);    return err;}// -------------------------------------------------------------------------// find_nth_cluster()// Finds nth cluster in chain (ie nth cluster of file) searching // from given position. If the chain ends one cluster before the // given nth cluster and the CO_EXTEND is specifide, than the // chain is extended by one cluster. static intfind_nth_cluster(fatfs_disk_t     *disk,                 fatfs_data_pos_t *dpos,                  cyg_uint32        n,                 fatfs_tcache_t   *tcache,                 cluster_opts_t    opts){    int err;       // Find nth cluster     err = find_nth_cluster0(disk, dpos, n, tcache);        // EEOF meens that the cluster chain ended early    if ((err != EEOF) || !(opts & CO_EXTEND))        return err;        printf( "cluster_snum=%d n=%d", dpos->cluster_snum, n);        // Check if one cluster short    if (dpos->cluster_snum == (n - 1))    {        // Extend the chain for one cluster        cyg_uint32 new_cluster;        // Append new cluster to the end of chain        err = find_and_append_cluster(disk, dpos->cluster,                                       &new_cluster, opts);        if (err != ENOERR)            return err;        // Update position        dpos->cluster = new_cluster;        dpos->cluster_snum++;        dpos->cluster_pos = 0;        printf( "cluster=%d cluster_snum=%d",                         dpos->cluster, dpos->cluster_snum);                // Update cache        if (NULL != tcache)            fatfs_tcache_set(disk, tcache, dpos->cluster_snum, dpos->cluster);    }        return err;}// -------------------------------------------------------------------------// get_next_cluster()// Gets next cluster in chain (ie next cluster of file).// If CO_EXTEND is specified and the current cluster is last in // chain then the chain is extended by one cluster.static intget_next_cluster(fatfs_disk_t     *disk,                 fatfs_data_pos_t *dpos,                 fatfs_tcache_t   *tcache,                 cluster_opts_t    opts){    int err;    printf( "cluster=%d cluster_snum=%d",                     dpos->cluster, dpos->cluster_snum);    err = find_nth_cluster(disk, dpos, dpos->cluster_snum + 1, tcache, opts);    if (err != ENOERR)        return err;    // Update position    dpos->cluster_pos = 0;     printf( "cluster=%d cluster_snum=%d",                     dpos->cluster, dpos->cluster_snum);        return ENOERR;}// -------------------------------------------------------------------------// get_data_position_from_off()// Gets data position from given file offset.// If CO_EXTEND is specified the file is extended if // one cluster too short.  static int get_data_position_from_off(fatfs_disk_t     *disk,                           cyg_uint32        first_cluster,                            cyg_uint32        offset,                            fatfs_data_pos_t *dpos,                           fatfs_tcache_t   *tcache,                           cluster_opts_t    opts){    cyg_uint32 n;    int err;    // Position inside the cluster    dpos->cluster_pos = offset & (disk->cluster_size - 1);    // Cluster seq number to be searched for    n = offset >> disk->cluster_size_log2;    // Start searching from first cluster    dpos->cluster      = first_cluster;    dpos->cluster_snum = 0;    printf( "off=%d first_cluster=%d cluster_pos=%d n=%d\n",                    offset, first_cluster, dpos->cluster_pos, n);    err = find_nth_cluster(disk, dpos, n, tcache, opts);    // Err could be EEOF wich means that the given     // offset if out of given file (cluster chain)    return err;}// -------------------------------------------------------------------------// free_cluster_chain()// Marks all clusters FREE from given cluster to the last cluster in chain.static intfree_cluster_chain(fatfs_disk_t *disk, cyg_uint32 start_cluster){    cyg_uint32 c, next_c, tentry;    bool last;    int err;    printf( "start_cluster=%d", start_cluster);    c = next_c = start_cluster;    last = false;    while (!last)    {        err = read_tentry(disk, c, &tentry);        if (err != ENOERR)            return err;        switch (get_tentry_type(disk, tentry))        {            case TENTRY_LAST:                // Last cluster in chain                last = true;                break;            case TENTRY_REGULAR:                // Get next cluster in chain                next_c = get_tentry_next_cluster(disk, tentry);                break;            default:                printf( "!!! inconsistant FAT tentry=%x c=%d",                                 tentry, c);                return EIO;        }        // Set the current tentry to FREE         set_tentry_type(disk, &tentry, TENTRY_FREE);        err = write_tentry(disk, c, &tentry);        if (err != ENOERR)            return err;        // Next cluster in chain        c = next_c;     }    printf( "last_cluster=%d", c);        return ENOERR;}//==========================================================================// FAT dir entry functions // -------------------------------------------------------------------------// print_dentry()// Prints FAT directory entry. #if TDEstatic voidprint_dentry(fat_dir_entry_t* fde){    if (DENTRY_IS_DELETED(fde))        diag_printf("FAT: FDE name:    '?%.7s'\n", &fde->name[1]);    else            diag_printf("FAT: FDE name:    '%.8s'\n", fde->name);    diag_printf("FAT: FDE ext:     '%.3s'\n", fde->ext);    diag_printf("FAT: FDE attr:     %c%c%c%c%c%c\n",                 (DENTRY_IS_RDONLY(fde)  ? 'R' : '-'),                (DENTRY_IS_HIDDEN(fde)  ? 'H' : '-'),                (DENTRY_IS_SYSTEM(fde)  ? 'S' : '-'),                (DENTRY_IS_VOLUME(fde)  ? 'V' : '-'),                (DENTRY_IS_DIR(fde)     ? 'D' : '-'),                (DENTRY_IS_ARCHIVE(fde) ? 'A' : '-'));    diag_printf("FAT: FDE crt time: %u\n", fde->crt_time);    diag_printf("FAT: FDE crt date: %u\n", fde->crt_date);    diag_printf("FAT: FDE acc date: %u\n", fde->acc_date);    diag_printf("FAT: FDE wrt time: %u\n", fde->wrt_time);    diag_printf("FAT: FDE wrt date: %u\n", fde->wrt_date);    diag_printf("FAT: FDE cluster:  %u\n", fde->cluster);    diag_printf("FAT: FDE size:     %u\n", fde->size);}#endif // TDE// -------------------------------------------------------------------------// read_dentry()// Reads dir entry from disk. // If cluster is 0 reads from root dir. static intread_dentry(fatfs_disk_t     *disk,            fatfs_data_pos_t *dpos,             fat_dir_entry_t  *fde){    unsigned char data[DENTRY_SIZE];    cyg_uint32 apos;    int len, err;       // Check if we are reading the root directory    if (0 == dpos->cluster)        apos = disk->fat_root_dir_pos + dpos->cluster_pos;    else        apos = get_data_disk_apos(disk, dpos->cluster, dpos->cluster_pos);           printf( "cluster=%d pos=%d apos=%d",                    dpos->cluster, dpos->cluster_pos, apos);         len = DENTRY_SIZE;    err = ReadBlock( (void*)data, &len, 0, apos);    if (err != ENOERR)        return err;    GET_BYTES(data, fde->name,     8, 0x00);    GET_BYTES(data, fde->ext,      3, 0x08);    GET_BYTE(data,  fde->attr,        0x0B);    GET_BYTE(data,  fde->nt_reserved, 0x0C);    GET_BYTE(data,  fde->crt_sec_100, 0x0D);    GET_WORD(data,  fde->crt_time,    0x0E);    GET_WORD(data,  fde->crt_date,    0x10);    GET_WORD(data,  fde->acc_date,    0x12);    GET_WORD(data,  fde->cluster_HI,  0x14);    GET_WORD(data,  fde->wrt_time,    0x16);    GET_WORD(data,  fde->wrt_date,    0x18);    GET_WORD(data,  fde->cluster,     0x1A);    GET_DWORD(data, fde->size,        0x1C);     // Zero terminate strings    fde->name[8] = '\0';        fde->ext[3]  = '\0';          // Store position    fde->pos = *dpos;       #if TDE        print_dentry(fde);#endif    return ENOERR;}// -------------------------------------------------------------------------// write_dentry()// Writes dir entry to disk. // If cluster is 0 writes to root dir. static intwrite_dentry(fatfs_disk_t     *disk,             fatfs_data_pos_t *dpos,              fat_dir_entry_t  *fde){    unsigned char data[DENTRY_SIZE];    cyg_uint32 apos;    int len, err;        // Check if we are writting to the root directory    if (0 == dpos->cluster)        apos = disk->fat_root_dir_pos + dpos->cluster_pos;    else        apos = get_data_disk_apos(disk, dpos->cluster, dpos->cluster_pos);         printf( "cluster=%d pos=%d apos=%d",                    dpos->cluster, dpos->cluster_pos, apos);     SET_BYTES(data, fde->name,     8, 0x00);    SET_BYTES(data, fde->ext,      3, 0x08);    SET_BYTE(data,  fde->attr,        0x0B);    SET_BYTE(data,  fde->nt_reserved, 0x0C);    SET_BYTE(data,  fde->crt_sec_100, 0x0D);    SET_WORD(data,  fde->crt_time,    0x0E);    SET_WORD(data,  fde->crt_date,    0x10);    SET_WORD(data,  fde->acc_date,    0x12);    SET_WORD(data,  fde->cluster_HI,  0x14);    SET_WORD(data,  fde->wrt_time,    0x16);    SET_WORD(data,  fde->wrt_date,    0x18);    SET_WORD(data,  fde->cluster,     0x1A);    SET_DWORD(data, fde->size,        0x1C);       len = DENTRY_SIZE;    err = WriteBlock( (void*)data, &len, 0, apos);    if (err != ENOERR)        return err;#if TDE        print_dentry(fde);#endif    return ENOERR;}// -------------------------------------------------------------------------// dentry_set_deleted()// Sets the dentry filename first char to 0xE5 (ie deleted).  static void dentry_set_deleted(fatfs_disk_t *disk, fat_dir_entry_t *dentry)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区免费视频| 在线观看不卡视频| 在线观看成人免费视频| 久久久久久久综合| 日韩成人免费看| 欧美性色综合网| 国产精品每日更新在线播放网址| 日韩国产在线一| 91热门视频在线观看| 国产视频一区二区三区在线观看| 午夜久久久影院| 欧美性色综合网| 亚洲免费观看高清完整版在线观看| 国产精品一区二区视频| 欧美一区日韩一区| 一区二区久久久| 色素色在线综合| 亚洲欧美成aⅴ人在线观看| 国产成人综合在线播放| 久久日一线二线三线suv| 日韩国产欧美在线视频| 欧美剧情电影在线观看完整版免费励志电影| 中文字幕av不卡| 丁香桃色午夜亚洲一区二区三区| 久久久精品2019中文字幕之3| 青青草97国产精品免费观看 | 丝袜美腿成人在线| 欧美午夜精品一区二区三区| 亚洲主播在线播放| 欧美日韩亚洲综合在线| 首页国产欧美日韩丝袜| 51精品秘密在线观看| 青青草成人在线观看| 欧美成人video| 国产中文字幕精品| 久久在线免费观看| 国产成人综合网站| 1000部国产精品成人观看| www.欧美色图| 亚洲精品自拍动漫在线| 色88888久久久久久影院野外| 一区av在线播放| 制服丝袜国产精品| 麻豆91在线看| 国产欧美1区2区3区| 欧美高清性hdvideosex| 日韩不卡在线观看日韩不卡视频| 欧美日韩午夜在线视频| 美腿丝袜一区二区三区| 国产日韩精品一区二区三区 | 91麻豆精品国产无毒不卡在线观看 | 久久久久久夜精品精品免费| 成人一区二区三区中文字幕| 亚洲精品日韩一| 欧美一级在线视频| 成人午夜电影网站| 樱花影视一区二区| 欧美一级二级三级乱码| 成人手机在线视频| 一区二区三区四区不卡视频| 欧美一区午夜视频在线观看| 成人一级视频在线观看| 亚洲一区二区在线观看视频 | 国产一区二区三区四区五区美女 | 欧美一区二区三区日韩视频| 国产高清在线观看免费不卡| 亚洲欧美一区二区三区国产精品| 6080亚洲精品一区二区| 国产不卡视频一区二区三区| 亚洲国产成人tv| 欧美国产一区在线| 91精品国产乱码久久蜜臀| 国产精品一区二区久久精品爱涩 | 国产激情视频一区二区在线观看| 伊人婷婷欧美激情| 26uuu欧美| 欧美日韩视频在线一区二区| 成人黄色国产精品网站大全在线免费观看| 亚洲午夜视频在线| 国产精品美女一区二区三区| 91精品国产色综合久久不卡电影| 高清在线观看日韩| 老司机午夜精品99久久| 亚洲一区二区av在线| 国产精品成人免费| 久久亚洲精精品中文字幕早川悠里 | 日韩欧美精品在线| 欧美性感一区二区三区| 国产激情偷乱视频一区二区三区| 喷白浆一区二区| 亚洲国产aⅴ成人精品无吗| 国产精品乱码一区二三区小蝌蚪| 日韩亚洲欧美高清| 欧美日韩在线电影| 91老司机福利 在线| 成人免费精品视频| 国产原创一区二区三区| 日本成人在线网站| 日日摸夜夜添夜夜添亚洲女人| 亚洲欧美电影院| 黑人巨大精品欧美黑白配亚洲| 亚洲图片自拍偷拍| 伊人一区二区三区| 综合精品久久久| 国产精品午夜电影| 中文字幕久久午夜不卡| 久久精品无码一区二区三区| 欧美电影免费观看高清完整版| 欧美美女一区二区| 884aa四虎影成人精品一区| 欧美日韩在线不卡| 欧美日韩国产高清一区| 欧美三级一区二区| 在线成人av影院| 欧美一区二区三区在线看| 宅男噜噜噜66一区二区66| 欧美精品粉嫩高潮一区二区| 欧美精选一区二区| 日韩视频一区二区在线观看| 日韩欧美综合在线| 久久理论电影网| 日本一区二区视频在线| 一区视频在线播放| 亚洲乱码日产精品bd| 亚洲18色成人| 精品亚洲porn| 99视频在线观看一区三区| 欧美在线观看视频在线| 欧美美女一区二区在线观看| 日韩欧美成人激情| 国产亚洲欧美中文| 亚洲视频综合在线| 洋洋av久久久久久久一区| 亚洲国产日韩a在线播放性色| 三级不卡在线观看| 国产成人免费网站| 色哟哟精品一区| 日韩欧美国产精品| 国产精品成人网| 日韩精品电影一区亚洲| 国产精品一卡二| 欧美私人免费视频| 精品欧美一区二区在线观看| 国产精品麻豆99久久久久久| 亚洲黄色片在线观看| 亚洲成人av在线电影| 国产精品18久久久久| 欧美日韩一区二区在线视频| 精品国产sm最大网站| 亚洲精品乱码久久久久久日本蜜臀| 秋霞成人午夜伦在线观看| 不卡的av电影| 亚洲精品一区二区三区影院| 1区2区3区精品视频| 美国毛片一区二区三区| 91美女福利视频| 久久久久久久久久久久电影| 亚洲图片欧美一区| 国产suv精品一区二区6| 欧美精品第1页| 亚洲欧美成aⅴ人在线观看| 免费高清在线视频一区·| 色综合激情五月| 久久婷婷成人综合色| 日本美女视频一区二区| 色哟哟一区二区| 国产精品久久久久毛片软件| 免费成人在线观看视频| 91精品1区2区| 一区在线中文字幕| 极品少妇xxxx精品少妇| 欧美喷水一区二区| 国产精品午夜免费| 国产乱人伦偷精品视频不卡| 9191国产精品| 亚洲黄色免费电影| 成人91在线观看| 久久婷婷国产综合精品青草| 蜜臀va亚洲va欧美va天堂 | 粉嫩欧美一区二区三区高清影视| 欧美精品久久一区| 亚洲一区在线视频观看| 91视频www| 蜜臀精品久久久久久蜜臀| 欧美日韩国产高清一区| 亚洲午夜电影网| 在线免费观看日韩欧美| 国产精品国产精品国产专区不片| 国产成人av电影免费在线观看| 欧美videossexotv100| 天堂在线亚洲视频| 欧美性受xxxx黑人xyx性爽| 一区二区成人在线观看| 欧美影视一区二区三区| 一区二区理论电影在线观看| 欧美亚洲国产bt| 亚洲成a人v欧美综合天堂| 欧美日韩国产首页| 日本亚洲欧美天堂免费| 日韩午夜小视频|