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

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

?? fatfs_ncache.c

?? 該工程是從ecos嵌入式系統下移植過來的一個小型的fat16文件系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
//==========================================================================////      fatfs_ncache.c////      FAT file system node cache functions////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 2003 Savin Zlobec //// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):           savin // Date:                2003-06-26////####DESCRIPTIONEND####////==========================================================================#include "cyg_type.h"#include "cyg_ass.h"#include "types.h"#include "fatfs.h"#include "stdio.h"#include "malloc.h"//==========================================================================// Defines & macros #ifdef CYGDBG_USE_ASSERTS# define USE_ASSERTS 1#endif#ifdef FATFS_NODE_CACHE_EXTRA_CHECKS# define USE_XCHECKS 1#endif#ifdef FATFS_TRACE_NODE_CACHE# define TNC 1#else# define TNC 0#endif// This defines how many nodes should always be kept in// dead list regardless of node allocation treshold - it // should always be >= 2 or the file finding code may not// work correctly!#define DLIST_KEEP_NUM 2 //==========================================================================// Node list functions static voidnode_list_init(fatfs_node_list_t *list){    list->size = 0;    list->first = list->last = NULL;}static int node_list_get_size(fatfs_node_list_t *list){    return (list->size);}static fatfs_node_t*node_list_get_head(fatfs_node_list_t *list){    return (list->first);}static fatfs_node_t*node_list_get_tail(fatfs_node_list_t *list){    return (list->last);}static fatfs_node_t*node_list_get_next(fatfs_node_t *node){    return (node->list_next);}static fatfs_node_t*node_list_get_prev(fatfs_node_t *node){    return (node->list_prev);}static boolnode_list_is_last(fatfs_node_t *node){    return (NULL == node->list_next);}static boolnode_list_is_first(fatfs_node_t *node){    return (NULL == node->list_prev);}static voidnode_list_head_add(fatfs_node_list_t *list, fatfs_node_t *node){    node->list_prev = NULL;    node->list_next = list->first;        if (NULL == list->first)    {        CYG_ASSERTC(list->size == 0);        list->last = node;    }    else    {        list->first->list_prev = node;    }        list->first = node;    list->size++;}#if 0static fatfs_node_t*node_list_head_get(fatfs_node_list_t *list){    return list->first;}static voidnode_list_tail_add(fatfs_node_list_t *list, fatfs_node_t *node){    node->list_prev = list->last;    node->list_next = NULL;        if (NULL == list->last)    {        CYG_ASSERTC(list->size == 0);        list->first = node;    }    else    {        list->last->list_next = node;    }        list->last = node;    list->size++;}#endifstatic fatfs_node_t*node_list_tail_get(fatfs_node_list_t *list){    return list->last;}static voidnode_list_remove(fatfs_node_list_t *list, fatfs_node_t *node){    if (list->first == list->last)    {        if (list->first == node)        {            CYG_ASSERTC(list->size == 1);            list->first = list->last = NULL;        }        else        {            CYG_ASSERT(false, "chain node not in list!");        }    }    else if (list->first == node)    {        CYG_ASSERTC(node->list_prev == NULL);         list->first = node->list_next;        list->first->list_prev = NULL;    }    else if (list->last == node)    {        CYG_ASSERTC(node->list_next == NULL);         list->last = node->list_prev;        list->last->list_next = NULL;    }    else    {        CYG_ASSERTC(node->list_prev != NULL && node->list_next != NULL);         node->list_prev->list_next = node->list_next;        node->list_next->list_prev = node->list_prev;            }    list->size--;}#ifdef USE_XCHECKSstatic voidnode_list_check(fatfs_node_list_t *list, int min_ref, int max_ref){    int i;    fatfs_node_t *node, *pnode;    CYG_ASSERT((list->last == NULL && list->first == NULL) ||               (list->last != NULL && list->first != NULL),                "list->first and list->last broken!");    if (list->first == NULL)    {        CYG_ASSERTC(list->size == 0);        return;    }        CYG_ASSERTC(list->first->list_prev == NULL);    CYG_ASSERTC(list->last->list_next == NULL);    CYG_ASSERTC(list->first->refcnt >= min_ref &&                 list->first->refcnt <= max_ref);    CYG_ASSERTC(list->last->refcnt >= min_ref &&                 list->last->refcnt <= max_ref);        i = 1;    node = list->first;     pnode = NULL;    while (node->list_next != NULL)    {        i++;        CYG_ASSERTC(node->list_prev == pnode);        CYG_ASSERTC(node->refcnt >= min_ref && node->refcnt <= max_ref);        pnode = node;        node = node->list_next;    }    CYG_ASSERTC(node->list_prev == pnode);    CYG_ASSERTC(list->size == i);    CYG_ASSERTC(node == list->last);}static voidnode_lists_check(fatfs_disk_t* disk){    node_list_check(&disk->live_nlist, 1, 99999);                            node_list_check(&disk->dead_nlist, 0, 0);                               if ((disk->live_nlist.size + disk->dead_nlist.size) >         FATFS_NODE_ALLOC_THRESHOLD)        CYG_ASSERTC(disk->dead_nlist.size <= DLIST_KEEP_NUM);}#endif // USE_XCHECKS//==========================================================================// Node hash functions static unsigned int hash_fn(const char *str, unsigned int strlen){    unsigned int i = 0, val = 0;    while (i++ < strlen)        val = (val ^ (int)toupper(*str++)) << 1;    return(val);}static voidnode_hash_init(fatfs_hash_table_t *tbl){    int i;    // Set size and clear all slots    tbl->size = FATFS_HASH_TABLE_SIZE;    for (i = 0; i < tbl->size; i++)        tbl->nodes[i] = NULL;    tbl->n = 0;}static boolnode_hash_add(fatfs_hash_table_t *tbl, fatfs_node_t *node){    unsigned int hval;       // Calculate hash of given node filename    hval = hash_fn(node->filename, strlen(node->filename)) % tbl->size;    printf( "name='%s' hval=%d", node->filename, hval);    if (tbl->nodes[hval] == NULL)    {        // First node in this slot        node->hash_next  = NULL;        tbl->nodes[hval] = node;        tbl->n++;         return true;    }    else    {         // More nodes in this slot        fatfs_node_t *lnode, *pnode;               pnode = NULL;        lnode = tbl->nodes[hval];        // Insert node into list so that it is sorted by filename                while (lnode != NULL)        {            if (lnode == node)                return false;                        if (strcasecmp(lnode->filename, node->filename) > 0)            {                if (pnode != NULL)                    pnode->hash_next = node; // Insert in the middle                else                    tbl->nodes[hval] = node; // Insert at the beginning                node->hash_next = lnode;                tbl->n++;                 return true;            }                            pnode = lnode;                lnode = lnode->hash_next;        }        // Insert at the end        pnode->hash_next = node;        node->hash_next  = NULL;        tbl->n++;         return true;    }}static fatfs_node_t*node_hash_find(fatfs_hash_table_t *tbl,                const char         *name,               unsigned int        namelen,               unsigned int        parent_cluster){       unsigned int hval;     fatfs_node_t *node;    // Calculate hash of name and get the first node in slot    hval = hash_fn(name, namelen) % tbl->size;    node = tbl->nodes[hval];    printf( "name='%s' hval=%d\n", name, hval);     // Find the node in list wich matches the     // given name and parent_cluster    while (node != NULL)    {        // First compare the parent cluster number and         // check filename length since it is faster than         // comparing filenames        if (parent_cluster == node->parent_cluster &&            '\0' == node->filename[namelen])        {            int i = strncasecmp(node->filename, name, namelen);            if (i == 0)                return node;            else if (i > 0)                return NULL; // Stop searching - we have a                              // sorted list so there can't be                             // any matching filename further on                             // if i > 0 - look at node_hash_add        }        node = node->hash_next;    }        // No such node found    return NULL; }static boolnode_hash_remove_keyless(fatfs_hash_table_t *tbl, fatfs_node_t *node){    int i;    fatfs_node_t *lnode, *pnode;    // Look in all slots, since we have no key    for (i = 0; i < tbl->size; i++)    {        // Look in list and remove it if there        lnode = tbl->nodes[i];        pnode = NULL;        while (lnode != NULL)        {            if (lnode == node)            {                if (pnode == NULL)                    tbl->nodes[i]    = lnode->hash_next;                else                    pnode->hash_next = lnode->hash_next;                node->hash_next = NULL;                tbl->n--;                            // All done                return true;            }            pnode = lnode;            lnode = lnode->hash_next;        }        }    return false;}static bool node_hash_remove(fatfs_hash_table_t *tbl, fatfs_node_t *node){    unsigned int hval;    fatfs_node_t *lnode, *pnode;       // Calculate hash of name and get the first node in slot    hval = hash_fn(node->filename, strlen(node->filename)) % tbl->size;    lnode = tbl->nodes[hval];    // Now find the node in list and remove it    pnode = NULL;    while (lnode != NULL)    {        if (lnode == node)        {            if (pnode == NULL)                tbl->nodes[hval] = lnode->hash_next;            else                pnode->hash_next = lnode->hash_next;            node->hash_next = NULL;            tbl->n--;                        // All done            return true;        }        pnode = lnode;        lnode = lnode->hash_next;    }     // Node not in list     return false;}#ifdef USE_XCHECKSstatic void

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人久久影院| 色国产精品一区在线观看| 91亚洲精华国产精华精华液| 欧美日韩日日摸| 国产喷白浆一区二区三区| 亚洲福中文字幕伊人影院| 国产不卡一区视频| 精品区一区二区| 亚洲一级不卡视频| 99久久精品免费精品国产| 精品电影一区二区| 亚洲成人tv网| 色综合中文字幕国产| 精品少妇一区二区三区免费观看 | 成人av免费网站| 国产精品麻豆一区二区| 日日夜夜精品免费视频| 91免费精品国自产拍在线不卡| 亚洲精品一区二区三区福利| 日本成人在线网站| 欧美体内she精视频| 亚洲青青青在线视频| av一二三不卡影片| 国产精品日韩精品欧美在线| 国产精品中文有码| 久久亚洲私人国产精品va媚药| 久久电影网站中文字幕| 欧美一级午夜免费电影| 免费成人在线视频观看| 日韩一区二区电影网| 奇米四色…亚洲| 精品日韩成人av| 国产在线一区观看| 中文字幕欧美激情一区| www.在线成人| 亚洲一区在线看| 制服丝袜日韩国产| 久久爱另类一区二区小说| 精品少妇一区二区三区免费观看 | 精品国产自在久精品国产| 奇米精品一区二区三区在线观看一| 欧美精品一级二级| 丝袜美腿亚洲综合| 欧美大度的电影原声| 国产不卡一区视频| 日韩美女视频一区二区| 欧美三日本三级三级在线播放| 视频一区视频二区中文字幕| 精品国产不卡一区二区三区| 国产麻豆91精品| 亚洲乱码日产精品bd| 欧美欧美欧美欧美| 国内久久婷婷综合| 国产精品美女久久久久久2018| 一道本成人在线| 日韩成人精品视频| 国产欧美精品区一区二区三区 | 午夜精品福利一区二区三区蜜桃| 欧美一区二区在线看| 精品写真视频在线观看| 欧美国产精品一区| 欧美日韩精品欧美日韩精品| 精品影院一区二区久久久| 国产精品美女一区二区三区| 欧美少妇性性性| 国产精品一区二区x88av| 亚洲激情综合网| 精品久久久影院| 在线日韩一区二区| 精品一区二区三区的国产在线播放| 欧美高清在线视频| 欧美猛男gaygay网站| 国产成人精品一区二区三区网站观看 | 国产亚洲成aⅴ人片在线观看| 欧美影院精品一区| 国产裸体歌舞团一区二区| 亚洲一区二区四区蜜桃| 久久久久久夜精品精品免费| 欧美伊人久久久久久午夜久久久久| 极品美女销魂一区二区三区免费| 尤物视频一区二区| 欧美韩国日本综合| 日韩视频一区二区三区| 色94色欧美sute亚洲线路一ni| 久久超级碰视频| 午夜日韩在线观看| 亚洲男人的天堂av| 亚洲国产精品黑人久久久| 日韩欧美一级片| 欧美日韩国产综合一区二区| av网站一区二区三区| 国产精品一区在线观看乱码| 日韩国产精品久久久久久亚洲| 一区二区三区日韩欧美| 国产精品无码永久免费888| 欧美va在线播放| 欧美日韩成人综合在线一区二区| 99精品一区二区三区| 丁香天五香天堂综合| 国产在线播放一区二区三区| 久久精品国产久精国产| 日韩成人午夜电影| 天天综合天天做天天综合| 亚洲一区二区在线视频| 一个色在线综合| 亚洲视频在线观看一区| 成人欧美一区二区三区白人| 国产日产精品一区| 欧美国产欧美综合| 欧美国产精品v| 国产精品国产三级国产aⅴ中文 | 捆绑变态av一区二区三区| 奇米影视一区二区三区| 日本在线观看不卡视频| 天天操天天综合网| 午夜精品视频一区| 肉丝袜脚交视频一区二区| 日韩国产成人精品| 六月丁香综合在线视频| 久久超碰97人人做人人爱| 国产剧情一区二区| 国产成人一级电影| 北条麻妃一区二区三区| 色综合天天综合狠狠| 欧美综合一区二区| 欧美精品乱码久久久久久| 欧美一区二区精品在线| www国产成人免费观看视频 深夜成人网| 欧美电视剧在线观看完整版| 久久久久久久久久久久久久久99| 国产午夜精品一区二区三区嫩草 | 久久久九九九九| 国产精品久久久久三级| 亚洲码国产岛国毛片在线| 亚洲动漫第一页| 久久91精品久久久久久秒播 | 美女高潮久久久| 成人免费毛片app| 欧美三级中文字幕| 欧美www视频| 亚洲图片你懂的| 日本亚洲一区二区| 成人少妇影院yyyy| 欧美日本一道本| 久久久久亚洲蜜桃| 一区二区三区视频在线看| 久久国产成人午夜av影院| 99精品久久久久久| 欧美精品xxxxbbbb| 中文av字幕一区| 日韩av一区二| av午夜精品一区二区三区| 欧美一区二区免费观在线| 国产精品久久777777| 午夜精品国产更新| hitomi一区二区三区精品| 欧美一区二区私人影院日本| 国产精品成人网| 老色鬼精品视频在线观看播放| 色悠悠久久综合| 国产视频视频一区| 日本不卡免费在线视频| 91亚洲精品久久久蜜桃网站| 久久综合九色综合97婷婷女人| 亚洲图片自拍偷拍| 国产成人h网站| 日韩无一区二区| 亚洲精品一二三| 国产ts人妖一区二区| 欧美电视剧免费全集观看| 亚洲综合激情网| 99久久精品费精品国产一区二区| 日韩欧美色综合网站| 午夜久久久久久久久久一区二区| 成人黄页毛片网站| 久久久午夜精品理论片中文字幕| 三级欧美在线一区| 91精品办公室少妇高潮对白| 国产精品三级在线观看| 国产一区二区剧情av在线| 91精品国产欧美一区二区| 有坂深雪av一区二区精品| a在线欧美一区| 国产日韩影视精品| 国产一区在线视频| 欧美岛国在线观看| 麻豆国产一区二区| 56国语精品自产拍在线观看| 午夜视黄欧洲亚洲| 欧美丝袜丝交足nylons图片| 一区在线观看免费| 99视频超级精品| 国产精品久久久一本精品| 国产不卡在线播放| 欧美高清在线精品一区| 国产sm精品调教视频网站| 国产欧美一区二区在线观看| 国产精品中文字幕欧美| 中文无字幕一区二区三区| 懂色av一区二区三区免费观看 |