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

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

?? fatfs_supp.c

?? 該工程是從ecos嵌入式系統下移植過來的一個小型的fat16文件系統
?? C
?? 第 1 頁 / 共 5 頁
字號:
{    dentry->name[0] = 0xE5;}// -------------------------------------------------------------------------// get_dentry_filename()// Gets the filename from given dir entry.  static void get_dentry_filename(fat_dir_entry_t *fde, char *name){    int i = 0;    char *cptr  = fde->name;    char *cname = name;    while (*cptr != ' ' && i < 8)    {        *cname++ = *cptr++; i++;    }    cptr = fde->ext;    if (*cptr != ' ')    {        *cname++ = '.'; i = 0;        while (*cptr != ' ' && i < 3)        {            *cname++ = *cptr++; i++;        }    }    *cname = '\0';    printf( "dos_name='%s' dos_ext='%s' filename='%s'",                    fde->name, fde->ext, name);}// -------------------------------------------------------------------------// set_dentry_filename()// Sets the filename to given dir entry.  static void set_dentry_filename(fat_dir_entry_t *fde, const char *name, int namelen){    int i, nidx;    const char *cname;    char *cptr;    // Special case check    if (name[0] == '.')    {        if (name[1] == '\0')        {            strcpy(fde->name, ".       ");            strcpy(fde->ext,  "   ");            return;        }        else if (name[1] == '.' && name[2] == '\0')        {            strcpy(fde->name, "..      ");            strcpy(fde->ext,  "   ");            return;        }    }        if (0 == namelen)        namelen = 9999;        nidx  = 0;    cname = name;    cptr  = fde->name;    for (i = 0; i < 8; i++)    {        if (*cname != '.' && *cname != '\0' && nidx++ < namelen)            *cptr++ = toupper(*cname++);        else            *cptr++ = ' ';    }    *cptr = '\0';        while (*cname != '.' && *cname != '\0' && nidx++ < namelen)        cname++;       if (*cname == '.' && nidx++ < namelen)         cname++;        cptr = fde->ext;    for (i = 0; i < 3; i++)    {        if (*cname != '.' && *cname != '\0' && nidx++ < namelen)            *cptr++ = toupper(*cname++);        else            *cptr++ = ' ';    }    *cptr = '\0';    printf( "filename='%s' namelen=%d dos_name='%s' dos_ext='%s'",                     name, namelen, fde->name, fde->ext);}// -------------------------------------------------------------------------// get_next_dentry()// Gets next dir entry searching from given position to the end.// Position is expected in DENTRY_SIZE units.// If EEOF is returned there are no more extries in given dir. static intget_next_dentry(fatfs_disk_t    *disk,                fatfs_node_t    *dir,                cyg_uint32      *pos,                fat_dir_entry_t *dentry){    fatfs_data_pos_t dpos;    cyg_uint32 off;    int err = ENOERR;    // Calculate dentry offset    off = *pos * DENTRY_SIZE;        printf( "pos=%d off=%d dir=%p cluster=%d",                    off, *pos, dir, dir->cluster);    // Root dir check    if (0 == dir->cluster)    {        dpos.cluster      = 0;        dpos.cluster_snum = 0;        dpos.cluster_pos  = off;    }    else    {        err = get_data_position_from_off(disk, dir->cluster,             off, &dpos, &dir->tcache, false);        if (err != ENOERR)            return err;    }    while (true)    {        // Root dir check        if (0 != dir->cluster)         {            // Change cluster if needed            if (!is_pos_inside_cluster(disk, dpos.cluster_pos))                err = get_next_cluster(disk, &dpos, &dir->tcache, CO_NONE);        }        else        {            if (*pos >= disk->fat_root_dir_nents)                err = EEOF;        }        if (err != ENOERR)            break;        err = read_dentry(disk, &dpos, dentry);        if (err != ENOERR)            return err;        if (DENTRY_IS_ZERO(dentry))        {            // If we get a ZERO dir entry, we assume that            // there are no more entries in current dir            printf( "ZERO dentry");             err = EEOF;            break;        }        else if (!DENTRY_IS_DELETED(dentry))        {            // Dir entry found            printf( "dentry_pos=%d cluster=%d pos=%d",                            *pos, dpos.cluster, dpos.cluster_pos);            break;        }        // Increment offset and position        dpos.cluster_pos += DENTRY_SIZE;        (*pos)++;    }    if (EEOF == err) printf( "end of dir");                // EEOF could be returned if there are no more entries in this    // dir - this should be cought by the calling function     return err;}// -------------------------------------------------------------------------// get_free_dentry()// Gets free dir entry slot searching from given position.// If an deleated entry is found, its clusters are freed and the// entry is reused. // The directory is extended if needed.static intget_free_dentry(fatfs_disk_t     *disk,                 fatfs_data_pos_t *dpos,                fatfs_tcache_t   *tcache){    fat_dir_entry_t  dentry;    fatfs_data_pos_t cdpos;    int err = ENOERR;        printf( "cluster=%d cluster_snum=%d cluster_pos=%d",                     dpos->cluster, dpos->cluster_snum, dpos->cluster_pos);    cdpos = *dpos;    while (true)    {        // Root dir check        if (0 != cdpos.cluster)         {            // Change cluster if needed            if (!is_pos_inside_cluster(disk, cdpos.cluster_pos))                err = get_next_cluster(disk, &cdpos, tcache,                                        CO_EXTEND | CO_ERASE_NEW);        }        else        {            if (cdpos.cluster_pos >= disk->fat_root_dir_size)                err = ENOSPC;        }        if (err != ENOERR)            return err;        err = read_dentry(disk, &cdpos, &dentry);        if (err != ENOERR)            return err;        if (DENTRY_IS_DELETED(&dentry))        {            printf( "deleted dentry at cluster=%d cluster_snum=%d "                            "cluster_pos=%d", cdpos.cluster, cdpos.cluster_snum,                            cdpos.cluster_pos);            // Retrun found dentry position            *dpos = cdpos;            return ENOERR;        }        else if (DENTRY_IS_ZERO(&dentry))        {            printf( "zero dentry at cluster=%d cluster_snum=%d "                            "cluster_pos=%d", cdpos.cluster, cdpos.cluster_snum,                            cdpos.cluster_pos);            // Retrun found dentry position            *dpos = cdpos;            return ENOERR;          }               // Increment current position        cdpos.cluster_pos += DENTRY_SIZE;    }} // -------------------------------------------------------------------------// dentry_to_node()// Converts FAT dir entry to node.  static voiddentry_to_node(fat_dir_entry_t *dentry,                fatfs_node_t    *node){    get_dentry_filename(dentry, node->filename);    if (DENTRY_IS_DIR(dentry))        node->mode = __stat_mode_DIR;    else        node->mode = __stat_mode_REG;        date_dos2unix(dentry->crt_time, dentry->crt_date, &node->ctime);    date_dos2unix(0,                dentry->acc_date, &node->atime);    date_dos2unix(dentry->wrt_time, dentry->wrt_date, &node->mtime);        node->size       = dentry->size;    node->priv_data  = dentry->nt_reserved;    node->cluster    = dentry->cluster;    node->dentry_pos = dentry->pos;}// -------------------------------------------------------------------------// node_to_dentry()// Converts node to FAT dir entry.  static voidnode_to_dentry(fatfs_node_t *node, fat_dir_entry_t *dentry){    set_dentry_filename(dentry, node->filename, 0);    if (node->mode == __stat_mode_DIR)        dentry->attr = DENTRY_ATTR_DIR;    else        dentry->attr = DENTRY_ATTR_ARCHIVE;            date_unix2dos(node->ctime, &dentry->crt_time, &dentry->crt_date);    date_unix2dos(node->atime, NULL,              &dentry->acc_date);    date_unix2dos(node->mtime, &dentry->wrt_time, &dentry->wrt_date);        dentry->crt_sec_100 = 0; //FIXME    dentry->size        = node->size;    dentry->nt_reserved = node->priv_data;    dentry->cluster     = node->cluster;    dentry->cluster_HI  = 0;    dentry->pos         = node->dentry_pos;}//==========================================================================// FAT data functions // -------------------------------------------------------------------------// read_data()// Reads data from given position.  static intread_data(fatfs_disk_t     *disk,          void             *data,          cyg_uint32       *len,          fatfs_data_pos_t *dpos,          fatfs_tcache_t   *tcache){    unsigned char *buf;    cyg_uint32 apos;    cyg_uint32 size;    int err;    // Initialize variables and get the absolute starting pos on disk    buf   = (unsigned char *)data;    size  = *len;    apos  = get_data_disk_apos(disk, dpos->cluster, dpos->cluster_pos);    err   = ENOERR;      printf( "len=%d cluster=%d cluster_pos=%d "                    "cluster_snum=%d apos=%d", *len, dpos->cluster,                     dpos->cluster_pos, dpos->cluster_snum, apos);    while (size > 0)    {        cyg_uint32 csize;        // Check if we are still inside current cluster        if (!is_pos_inside_cluster(disk, dpos->cluster_pos))        {            // Get next cluster of file and adjust absolute disk position             err = get_next_cluster(disk, dpos, tcache, CO_NONE);            if (err != ENOERR)                goto out;            apos = get_data_disk_apos(disk, dpos->cluster, dpos->cluster_pos);        }                // Adjust the data chunk size to be read to the cluster boundary        if (size > (disk->cluster_size - dpos->cluster_pos))            csize = disk->cluster_size - dpos->cluster_pos;        else            csize = size;        printf( "-- len=%d cluster=%d cluster_pos=%d "                        "cluster_snum=%d apos=%d", csize, dpos->cluster,                        dpos->cluster_pos, dpos->cluster_snum, apos);        // Read data chunk         err = ReadBlock((void*)buf, &csize, 0, apos);        if (err != ENOERR)            goto out;        // Adjust running variables        buf               += csize;        dpos->cluster_pos += csize;        apos              += csize;        size              -= csize;        }    out:    *len -= size;    printf( "total len=%d", *len);    return err;}// -------------------------------------------------------------------------// write_data()// Writes data to given position.  static intwrite_data(fatfs_disk_t     *disk,           void             *data,           cyg_uint32       *len,           fatfs_data_pos_t *dpos,           fatfs_tcache_t   *tcache){    unsigned char *buf;    cyg_uint32 apos;    cyg_uint32 size;    int err;    // Initialize variables and get the absolute starting pos on disk    buf   = (unsigned char *)data;    size  = *len;    apos  = get_data_disk_apos(disk, dpos->cluster, dpos->cluster_pos);    err   = ENOERR;      printf( "len=%d cluster=%d cluster_pos=%d "                    "cluster_snum=%d apos=%d", *len, dpos->cluster,                     dpos->cluster_pos, dpos->cluster_snum, apos);    while (size > 0)    {        cyg_uint32 csize;        // Check if we are still inside current cluster        if (!is_pos_inside_cluster(disk, dpos->cluster_pos))        {            // Get next cluster of file and adjust absolute disk position,            // if at the last cluster try to extend the cluster chain             err = get_next_cluster(disk, dpos, tcache, CO_EXTEND);            if (err != ENOERR)                goto out;            apos = get_data_disk_apos(disk, dpos->cluster, dpos->cluster_pos);        }                // Adjust the data chunk size to be read to the cluster boundary        if (size > (disk->cluster_size - dpos->cluster_pos))            csize = disk->cluster_size - dpos->cluster_pos;        else            csize = size;         printf( "-- len=%d cluster=%d cluster_pos=%d "                        "cluster_snum=%d apos=%d", csize, dpos->cluster,                        dpos->cluster_pos, dpos->cluster_snum, apos);        // Write data chunk         err = WriteBlock( (void*)buf, &csize, 0, apos);        if (err != ENOERR)            goto out;        // Adjust running variables        buf               += csize;        dpos->cluster_pos += csize;        apos              += csize;        size              -= csize;        }    out:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区影院| 亚洲桃色在线一区| 亚洲免费大片在线观看| 日本vs亚洲vs韩国一区三区二区| 成人av在线资源网| 日韩精品中午字幕| 亚洲大片一区二区三区| 国产成人av一区二区| 91精品麻豆日日躁夜夜躁| 专区另类欧美日韩| 成人精品小蝌蚪| 91精品国产黑色紧身裤美女| 亚洲女性喷水在线观看一区| 国产精品一区二区在线播放| 欧美一区二区精品在线| 蜜桃在线一区二区三区| 91久久线看在观草草青青| 国产精品伦一区| 国产激情偷乱视频一区二区三区| 欧美成人a在线| 日本不卡视频一二三区| 欧美日韩视频在线观看一区二区三区 | 亚洲精品老司机| av成人老司机| 亚洲视频一区在线| 99精品黄色片免费大全| 成人欧美一区二区三区小说 | 欧美天天综合网| 一区二区三区视频在线看| 色婷婷久久久综合中文字幕| 中文字幕一区二区视频| 成人app在线观看| 亚洲欧美另类图片小说| 欧美私模裸体表演在线观看| 亚洲一区在线电影| 欧美乱妇一区二区三区不卡视频| 亚洲午夜国产一区99re久久| 欧美日韩国产精品自在自线| 日本大胆欧美人术艺术动态| 精品蜜桃在线看| 国产一区在线不卡| 国产欧美精品国产国产专区 | 欧美日韩一区高清| 日本中文在线一区| 久久只精品国产| 国产成人av影院| 亚洲影视在线观看| 欧美一级免费大片| 国产91富婆露脸刺激对白| 亚洲国产精品精华液ab| 欧美偷拍一区二区| 另类的小说在线视频另类成人小视频在线 | 欧美极品少妇xxxxⅹ高跟鞋| 白白色 亚洲乱淫| 亚洲成人免费视| 精品国产乱子伦一区| 99久久免费视频.com| 亚洲综合图片区| 精品毛片乱码1区2区3区| 成人国产精品免费观看动漫| 亚洲国产精品一区二区久久| 日韩精品一区国产麻豆| 国产成人欧美日韩在线电影| 青青草97国产精品免费观看无弹窗版 | 中文字幕视频一区二区三区久| 色香蕉久久蜜桃| 久草这里只有精品视频| 国产精品久久精品日日| 制服视频三区第一页精品| 成人一区二区三区视频| 天堂成人国产精品一区| 国产精品乱人伦中文| 欧美丰满少妇xxxxx高潮对白| 国产成人综合亚洲网站| 五月婷婷欧美视频| 中文字幕在线一区二区三区| 日韩一级精品视频在线观看| 99久久精品免费精品国产| 久久99精品久久久| 亚洲午夜日本在线观看| 国产精品乱人伦| 精品福利一区二区三区| 欧美视频中文字幕| 成人免费视频app| 精品一区二区三区在线观看| 亚洲一区在线观看网站| 国产精品美女久久久久高潮| 欧美成人在线直播| 欧美喷水一区二区| 91玉足脚交白嫩脚丫在线播放| 国产毛片精品视频| 日本成人在线网站| 天涯成人国产亚洲精品一区av| 中文子幕无线码一区tr| 精品第一国产综合精品aⅴ| 欧美精品123区| 欧美羞羞免费网站| 97国产精品videossex| 国产伦精品一区二区三区在线观看 | 国产精品一区二区男女羞羞无遮挡 | 丰满岳乱妇一区二区三区| 久久99精品久久久久久久久久久久| 亚洲狠狠爱一区二区三区| 亚洲综合999| 亚洲人123区| 亚洲国产成人在线| 国产精品久久久久精k8| 中文字幕国产一区| 国产精品超碰97尤物18| 亚洲视频一区在线| 亚洲桃色在线一区| 一区二区成人在线| 亚洲成人av一区二区三区| 五月天婷婷综合| 日本v片在线高清不卡在线观看| 午夜激情一区二区三区| 偷偷要91色婷婷| 美女在线观看视频一区二区| 乱一区二区av| 久久精品国产在热久久| 国产在线不卡视频| 国产很黄免费观看久久| 国产精品888| 9久草视频在线视频精品| 99精品国产视频| 色88888久久久久久影院按摩| 欧美在线一区二区| 中文字幕永久在线不卡| 亚洲精品免费一二三区| 丝袜国产日韩另类美女| 美腿丝袜一区二区三区| 国产精品一区免费视频| 99久久精品99国产精品| 欧美疯狂性受xxxxx喷水图片| 欧美mv和日韩mv的网站| 国产精品免费视频一区| 一区二区三区色| 麻豆精品久久精品色综合| 国产成人一级电影| 91久久精品一区二区三| 日韩视频免费直播| 国产精品白丝在线| 日韩综合一区二区| 大美女一区二区三区| 欧美日韩中文国产| 国产欧美日韩在线| 亚洲综合一区二区| 国产在线精品一区在线观看麻豆| www.欧美日韩国产在线| 51精品国自产在线| 国产精品久久久久久久第一福利| 亚洲午夜一区二区| 成人深夜视频在线观看| 欧美精品高清视频| 中文字幕在线不卡国产视频| 日日夜夜精品视频免费| 99在线精品免费| 精品国产91乱码一区二区三区| 成人欧美一区二区三区在线播放| 蜜臀av性久久久久av蜜臀妖精| 波多野结衣中文字幕一区二区三区| 欧美精品粉嫩高潮一区二区| 国产精品久久夜| 国产中文字幕一区| 欧美日本在线观看| 亚洲激情在线激情| 懂色av中文一区二区三区| 91精品婷婷国产综合久久性色 | 成人免费观看av| 555www色欧美视频| 亚洲影院久久精品| 99久久精品国产一区| 久久久精品黄色| 蜜桃视频在线观看一区二区| 色88888久久久久久影院野外| 欧美国产日本视频| 美女视频第一区二区三区免费观看网站| 91麻豆精品在线观看| 国产欧美精品一区二区色综合| 麻豆精品蜜桃视频网站| 91精品国产入口| 亚洲444eee在线观看| 欧美色视频一区| 亚洲国产精品视频| 色综合久久久久综合体桃花网| 欧美激情综合网| 国产一区二区不卡| www国产成人| 久久99国产精品久久99 | 国产精品污网站| 国产成人免费9x9x人网站视频| 欧美一区二区三区思思人| 亚洲成人精品一区二区| 欧美理论电影在线| 婷婷开心久久网| 91麻豆精品国产自产在线观看一区 | 成人听书哪个软件好| 国产精品日日摸夜夜摸av| 成人av综合一区| 最新热久久免费视频|