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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fatfs_supp.c

?? 該工程是從ecos嵌入式系統(tǒng)下移植過來的一個小型的fat16文件系統(tǒng)
?? C
?? 第 1 頁 / 共 5 頁
字號:
    *len -= size;    printf( "total len=%d", *len);    return err;}//==========================================================================// Misc functions // -------------------------------------------------------------------------// init_node()// Initializes file attributes of a new node.  static voidinit_node_fattr(fatfs_node_t     *node,                 const char       *name,                 int               namelen,                mode_t            mode,                cyg_uint32        parent_cluster,                 fatfs_data_pos_t *dentry_pos){    if (namelen == 0)        namelen = 12;        strncpy(node->filename, name, namelen);    node->filename[namelen] = '\0';        node->mode  = mode;    node->ctime =     node->atime =    node->mtime = timeGetTime();    node->priv_data      = 0;    node->size           = 0;    node->cluster        = 0;    node->parent_cluster = parent_cluster;    node->dentry_pos     = *dentry_pos;}// -------------------------------------------------------------------------// is_node_root_node()// Check if the given node is the root dir node  static boolis_node_root_node(fatfs_node_t *node){    return (node->filename[0] == '\0' && node->cluster == 0);}//==========================================================================//==========================================================================// Exported functions // -------------------------------------------------------------------------// fatfs_get_disk_info()// Gets disk info.  intfatfs_get_disk_info(fatfs_disk_t *disk){    int err;    cyg_uint32 sec_num, root_dir_sec_num;    cyg_uint32 data_sec_num, data_clu_num;    fat_boot_record_t boot_rec;    CYG_CHECK_DATA_PTRC(disk);     err = read_boot_record(disk, &boot_rec);    if (err != ENOERR)            return err;    // Check some known boot record values    if (0x29 != boot_rec.ext_sig       ||        0x55 != boot_rec.exe_marker[0] ||        0xAA != boot_rec.exe_marker[1])        return EINVAL;    // Determine number of sectors    if (boot_rec.sec_num_32 != 0)        sec_num = boot_rec.sec_num_32;    else        sec_num = boot_rec.sec_num;        // Number of sectors used by root directory     root_dir_sec_num = ((boot_rec.max_root_dents * DENTRY_SIZE) +                        (boot_rec.bytes_per_sec - 1)) / boot_rec.bytes_per_sec;            // Number of data sectors    data_sec_num = sec_num - (boot_rec.res_sec_num +         (boot_rec.fat_tbls_num * boot_rec.sec_per_fat) + root_dir_sec_num);        // Number of data clusters    data_clu_num = data_sec_num / boot_rec.sec_per_clust;    // Determine the type of FAT based on number of data clusters    if (data_clu_num < 4085)         disk->fat_type = FATFS_FAT12;    else if (data_clu_num < 65525)         disk->fat_type = FATFS_FAT16;    else // FAT32        return EINVAL;        // Sector and cluster sizes     disk->sector_size       = boot_rec.bytes_per_sec;    disk->sector_size_log2  = get_val_log2(disk->sector_size);    disk->cluster_size      = boot_rec.bytes_per_sec * boot_rec.sec_per_clust;    disk->cluster_size_log2 = get_val_log2(disk->cluster_size);    // Sector and cluster size should always be a power of 2    if (0 == disk->sector_size_log2 || 0 == disk->cluster_size_log2)        return EINVAL;    // FAT table and root dir sizes and position    disk->fat_tbl_pos        = boot_rec.bytes_per_sec * boot_rec.res_sec_num;    disk->fat_tbl_size       = boot_rec.bytes_per_sec * boot_rec.sec_per_fat;       disk->fat_tbl_nents      = data_clu_num + 2;    disk->fat_tbls_num       = boot_rec.fat_tbls_num;    disk->fat_root_dir_pos   = disk->fat_tbl_pos +                                disk->fat_tbls_num * disk->fat_tbl_size;    disk->fat_root_dir_size  = boot_rec.max_root_dents * DENTRY_SIZE;    disk->fat_root_dir_nents = boot_rec.max_root_dents;    disk->fat_data_pos       = disk->fat_root_dir_pos + disk->fat_root_dir_size;    return ENOERR;}// -------------------------------------------------------------------------// fatfs_get_root_node()// Gets root dir node. voidfatfs_get_root_node(fatfs_disk_t *disk, fatfs_node_t *node){    CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(node);        node->mode           = __stat_mode_DIR;    node->size           = disk->fat_root_dir_size;    node->ctime          = 0;    node->atime          = 0;    node->mtime          = 0;    node->filename[0]    = '\0';    node->cluster        = 0;    node->parent_cluster = 0;    node->dentry_pos.cluster      = 0;    node->dentry_pos.cluster_snum = 0;    node->dentry_pos.cluster_pos  = 0;}// -------------------------------------------------------------------------// fatfs_is_node_root_node()// Check if the given node is root dir node. boolfatfs_is_node_root_node(fatfs_node_t *node){    return(is_node_root_node(node));}// -------------------------------------------------------------------------// fatfs_get_dir_entry_node()// Gets dir entry node at given position.// If there is no dir entry at given position the next closest// dir entry and its position are returned. // If EEOF error is returned, then there are no more dir// entries in given dir. intfatfs_get_dir_entry_node(fatfs_disk_t *disk,                         fatfs_node_t *dir,                         cyg_uint32   *pos,                         fatfs_node_t *node){    fat_dir_entry_t dentry;    int err;    CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(dir);    CYG_CHECK_DATA_PTRC(pos);    CYG_CHECK_DATA_PTRC(node);     err = get_next_dentry(disk, dir, pos, &dentry);      if (err != ENOERR)       return err;    dentry_to_node(&dentry, node);    node->parent_cluster = dir->cluster;    return ENOERR;}// -------------------------------------------------------------------------// fatfs_write_node()// Writes node attributes to its dir entry (to disk). intfatfs_write_file_attr(fatfs_disk_t *disk, fatfs_node_t *node){    fat_dir_entry_t dentry;    int err;    CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(node);     node_to_dentry(node, &dentry);    err = write_dentry(disk, &dentry.pos, &dentry);    return err;}// -------------------------------------------------------------------------// fatfs_delete_file()// Marks file dir entry as deleted. intfatfs_delete_file(fatfs_disk_t *disk, fatfs_node_t *node){    fat_dir_entry_t dentry;    int err;    CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(node);    // Can't delete root    if (is_node_root_node(node))        return EINVAL;        printf( "filename='%s'", node->filename);    node_to_dentry(node, &dentry);    // Check if we are about to delete a directory    if (DENTRY_IS_DIR(&dentry))    {        fat_dir_entry_t cdentry;        cyg_uint32 pos = 0;        int i = 0;                printf( "got directory");        // Count number of entries in this dir            while (true)        {            err = get_next_dentry(disk, node, &pos, &cdentry);            if (EEOF == err)                break;            else if (err != ENOERR)                return err;            i++; pos++;        }        printf( "child count=%d", i);                // Check if the dir is empty (except '.' and '..')        if (i > 2)            return EPERM;     }            // Free file clusters    free_cluster_chain(disk, dentry.cluster);    dentry_set_deleted(disk, &dentry);    err = write_dentry(disk, &dentry.pos, &dentry);    return err;} // -------------------------------------------------------------------------// fatfs_create_file()// Creates a new file. intfatfs_create_file(fatfs_disk_t *disk,                   fatfs_node_t *dir,                   const char   *name,                  int           namelen,                  fatfs_node_t *node){    fat_dir_entry_t dentry;    int err;    CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(dir);    CYG_CHECK_DATA_PTRC(name);    CYG_CHECK_DATA_PTRC(node);     printf( "filename='%s' parent='%s'", name, dir->filename);    dentry.pos.cluster      = dir->cluster;    dentry.pos.cluster_snum = 0;    dentry.pos.cluster_pos  = 0;    // Get free dir entry in parent dir    err = get_free_dentry(disk, &dentry.pos, &dir->tcache);    if (err != ENOERR)        return err;    // Set new file attributes    init_node_fattr(node, name, namelen, __stat_mode_REG,                     dir->cluster, &dentry.pos);     // Write new dir dentry      node_to_dentry(node, &dentry);    err = write_dentry(disk, &dentry.pos, &dentry);    if (err != ENOERR)       return err;     return ENOERR;     }// -------------------------------------------------------------------------// fatfs_create_dir()// Creates a new directory. intfatfs_create_dir(fatfs_disk_t *disk,                  fatfs_node_t *dir,                  const char   *name,                 int           namelen,                 fatfs_node_t *node){    fat_dir_entry_t dentry;    fatfs_node_t    cnode;    cyg_uint32 free_cluster;    int err;    CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(dir);    CYG_CHECK_DATA_PTRC(name);    CYG_CHECK_DATA_PTRC(node);     printf( "filename='%s' parent='%s'", name, dir->filename);    // Get free cluster    err = find_next_free_cluster(disk, 0, &free_cluster,                                  CO_MARK_LAST | CO_ERASE_NEW);    if (err != ENOERR)        return err;    dentry.pos.cluster      = dir->cluster;    dentry.pos.cluster_snum = 0;    dentry.pos.cluster_pos  = 0;    // Get free dir entry in parent dir    err = get_free_dentry(disk, &dentry.pos, &dir->tcache);    if (err != ENOERR)        return err;    // Set new dir attributes    init_node_fattr(node, name, namelen, __stat_mode_DIR,                     dir->cluster, &dentry.pos);     node->cluster = free_cluster;    // Write new dir dentry      node_to_dentry(node, &dentry);    err = write_dentry(disk, &dentry.pos, &dentry);    if (err != ENOERR)       return err;    // Starting position of new dir entries    dentry.pos.cluster      = node->cluster;    dentry.pos.cluster_snum = 0;    dentry.pos.cluster_pos  = 0;    printf( "Creating '.' entry");    // Set '.' dir attributes    init_node_fattr(&cnode, ".", 0, __stat_mode_DIR,                     node->cluster, &dentry.pos);     cnode.cluster = node->cluster;    // Write '.' dentry    node_to_dentry(&cnode, &dentry);     err = write_dentry(disk, &dentry.pos, &dentry);    if (err != ENOERR)        return err;              dentry.pos.cluster_pos += DENTRY_SIZE;    printf( "Creating '..' entry");    // Set '..' dir attributes    init_node_fattr(&cnode, "..", 0, __stat_mode_DIR,                    node->cluster, &dentry.pos);     cnode.cluster = dir->cluster;        // Write '..' dentry    node_to_dentry(&cnode, &dentry);     err = write_dentry(disk, &dentry.pos, &dentry);    if (err != ENOERR)        return err;      return ENOERR;     }// -------------------------------------------------------------------------// fatfs_trunc_file()// Truncates a file to zero length.intfatfs_trunc_file(fatfs_disk_t *disk, fatfs_node_t *node){    fat_dir_entry_t dentry;    int err;        CYG_CHECK_DATA_PTRC(disk);    CYG_CHECK_DATA_PTRC(node);     printf( "file='%s'", node->filename);      // Check for dir    if (S_ISDIR(node->mode))        return EINVAL;     // Trivial case check    if (0 == node->size)        return ENOERR;       // Free cluster chain     err = free_cluster_chain(disk, node->cluster);    if (err != ENOERR)        return err;        // Flush tcache    fatfs_tcache_flush(disk, &node->tcache);        // Update node attributes    node->cluster = 0;    node->size    = 0;    node->mtime   =    node->atime   = timeGetTime();    // Write dentry    node_to_dentry(node, &dentry);    err = write_dentry(disk, &dentry.pos, &dentry);    if (err != ENOERR)        return err;        return ENOERR;}// -------------------------------------------------------------------------// fat

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情五月激情综合网| 综合色中文字幕| 蜜桃视频在线观看一区| 欧美年轻男男videosbes| 天堂蜜桃91精品| 欧美一级片免费看| 久久精品二区亚洲w码| 亚洲在线观看免费视频| 欧美日韩一级片网站| 五月综合激情网| 精品久久久久一区二区国产| 国产露脸91国语对白| 国产精品免费人成网站| 在线欧美小视频| 日韩av网站在线观看| 久久综合九色综合欧美亚洲| 成人的网站免费观看| 亚洲综合久久av| 欧美成人伊人久久综合网| 国产91精品在线观看| 亚洲精品网站在线观看| 这里只有精品电影| 成人黄色小视频在线观看| 一区二区欧美精品| 精品国产污网站| 91在线看国产| 日本成人在线电影网| 国产精品人成在线观看免费 | 99精品欧美一区二区三区综合在线| 国产精品欧美经典| 欧美日韩国产影片| 成人性生交大合| 午夜精品久久久久久久久| 精品国产一区二区三区不卡| 91色|porny| 久久精品国产精品亚洲红杏| 综合久久国产九一剧情麻豆| 日韩欧美国产wwwww| 97se亚洲国产综合自在线观| 免费视频最近日韩| 亚洲理论在线观看| 久久久久久毛片| 69堂国产成人免费视频| 99久久精品免费精品国产| 蜜桃免费网站一区二区三区| 亚洲精品日日夜夜| 久久久精品天堂| 7777女厕盗摄久久久| 一本色道**综合亚洲精品蜜桃冫| 久久国产精品露脸对白| 亚洲国产成人精品视频| 欧美激情综合五月色丁香| 日韩三级.com| 欧美日韩国产在线播放网站| 91麻豆精东视频| 国产精品2024| 国产一区二区视频在线| 免费观看日韩av| 日本在线不卡视频| 亚洲午夜久久久久久久久电影院| 国产一区二区三区最好精华液| 日韩激情一二三区| 亚洲高清免费观看| 亚洲一区二区三区视频在线| 国产精品成人一区二区艾草| 久久久亚洲精华液精华液精华液| 日韩一区二区三| 欧美剧情片在线观看| 在线亚洲人成电影网站色www| 国产不卡视频一区二区三区| 国产一区中文字幕| 黄色成人免费在线| 久久99国产精品麻豆| 久久99精品一区二区三区三区| 五月综合激情日本mⅴ| 五月婷婷久久综合| 日韩高清不卡一区| 日韩一区精品字幕| 免费欧美日韩国产三级电影| 日本不卡一二三区黄网| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜视频在线观看一区二区 | 国产日韩欧美精品电影三级在线| 久久只精品国产| 国产日产欧美精品一区二区三区| 国产欧美一区二区精品秋霞影院| 国产人成亚洲第一网站在线播放| 亚洲国产成人在线| 成人免费在线视频观看| 成人免费在线视频| 亚洲主播在线播放| 午夜伊人狠狠久久| 久久不见久久见免费视频7| 另类调教123区| 国产久卡久卡久卡久卡视频精品| 国产成人高清在线| 色综合一个色综合| 欧美三片在线视频观看| 日韩欧美国产不卡| 国产欧美精品一区二区三区四区 | 久久精品999| 国产黄色91视频| 日本一区二区三区视频视频| 国产精品久久久久桃色tv| 亚洲美女少妇撒尿| 日本aⅴ免费视频一区二区三区| 国内精品不卡在线| 色综合久久综合网97色综合 | 日韩一区二区免费视频| 久久久久久麻豆| 亚洲免费视频中文字幕| 午夜精品成人在线视频| 国产一区二区三区观看| 91女人视频在线观看| 欧美丰满高潮xxxx喷水动漫| 欧美精品一区二区三区四区 | 亚洲一区免费在线观看| 黑人巨大精品欧美一区| 99久久久精品| 欧美一区二区三区视频在线观看| 国产亚洲一区二区在线观看| 日韩美女视频一区二区| 久久福利资源站| 色婷婷国产精品综合在线观看| 欧美xxxxx牲另类人与| 亚洲视频免费在线观看| 青娱乐精品在线视频| 成人听书哪个软件好| 91精品国产一区二区三区蜜臀| 国产日韩欧美电影| 免费美女久久99| 久久精品视频在线免费观看 | 欧美在线观看视频在线| 国产网站一区二区| 日韩精品久久理论片| 成人亚洲精品久久久久软件| 91精品综合久久久久久| 亚洲精品视频免费看| 成人综合婷婷国产精品久久 | 精品少妇一区二区三区日产乱码| 玉足女爽爽91| 成人免费福利片| 欧美精品一区二区三区视频| 亚洲一区欧美一区| 91视频国产观看| 国产精品久久毛片a| 黄页网站大全一区二区| 欧美视频自拍偷拍| 日韩伦理电影网| 国产不卡视频在线播放| 精品99一区二区| 另类小说欧美激情| 欧美一区二区在线观看| 亚洲国产精品精华液网站| 色狠狠av一区二区三区| 国产精品电影院| 成人性生交大片免费看中文| 久久久久亚洲蜜桃| 久久成人麻豆午夜电影| 欧美一区二区久久久| 三级在线观看一区二区 | 成人av免费在线观看| 国产日韩高清在线| 国产精品亚洲专一区二区三区| xf在线a精品一区二区视频网站| 免费的成人av| 日韩精品一区在线观看| 免费看黄色91| 欧美大肚乱孕交hd孕妇| 老汉av免费一区二区三区| 欧美一区二区在线免费播放| 日本欧美大码aⅴ在线播放| 在线播放中文一区| 男人的天堂亚洲一区| 日韩女优制服丝袜电影| 精品一区二区影视| 久久综合久久鬼色| 成人精品鲁一区一区二区| 国产精品视频你懂的| 91亚洲资源网| 亚洲一二三区在线观看| 88在线观看91蜜桃国自产| 免费久久99精品国产| 精品日韩av一区二区| 国产精品一区二区免费不卡| 国产精品三级久久久久三级| 94-欧美-setu| 午夜精品国产更新| 久久综合久久久久88| 成人h动漫精品一区二| 亚洲女同一区二区| 欧美日本不卡视频| 国产一区二区三区久久久| 中文字幕中文字幕一区二区| 91黄色免费网站| 欧美中文字幕一二三区视频| 日韩高清国产一区在线| 久久久精品国产免费观看同学| 91免费视频观看| 奇米精品一区二区三区在线观看一|