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

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

?? tfs_with_appexit_support.c

?? flash文件系統(tǒng)實現(xiàn)
?? C
?? 第 1 頁 / 共 5 頁
字號:
}/* tfsclean():    Defragment the file system. During defragmentation, continually save    enough state so that this function may be interrupted by a reset or    power hit and can recover from it.    Requires that one of the largest sectors of the flash device be designated    as a SPARE sector, to be used only by defragmentation.    Defragmentation state is stored at the end of the last TFS sector, so    it is maintained across reset/powerhit also.    Use of the SPARE sector and flash-based defragmentation state eliminates    the vulnerability of the TFS being corrupted if the system is reset during    defragmentation.  It also eliminates the need for a large amount of RAM    space (as was needed in earlier versions of tfsclean()).    The function is designed to be entered at various points of the     defragmentation process.  If defragmentation is starting from scratch,    then all arguments (except verbose) will be zero.  If filtot is non-zero    on entry, then this means that tfsclean() must pick up from a previously    started defragmentation and cannot assume that a sane file system    currently exists.*/static ulong    *DefragStateTbl;#define DEFRAG_TEST_ENABLED 0#if DEFRAG_TEST_ENABLEDint ExitPoint, ExitSector;#define TEST_EXIT_POINT(pt,sno) \    if (ExitPoint == pt) { \        if ((ExitSector == sno) || (sno == -1)) { \            printf("!!!!!!!!!!!!! TestExit at point %d, sector %d\n",pt,sno); \            return(1); \        } \    }#else#define TEST_EXIT_POINT(pt,sno)#endifstatic inttfsclean(filtot,tbl1,tbl2,snum,resetwhendone,verbose)int filtot, verbose, snum, resetwhendone;ulong   *tbl1;struct defraghdr *tbl2;{    int rslt;    rslt = _tfsclean(filtot,tbl1,tbl2,snum,resetwhendone,verbose);    return(rslt);}static int_tfsclean(filtot,tbl1,tbl2,snum,resetwhendone,verbose)int filtot, verbose, snum, resetwhendone;ulong   *tbl1;struct defraghdr *tbl2;{    int     ftot, fcnt, fsize, dtot, sparesnum, sparesize, ssize;    int     firsttfssector, lasttfssector, sectorcheck;    int     tfssector, sidx, dummy;    char    *newaddress, *sbase, *firstdeadfile;    struct  tfshdr  *tfp;    struct  defraghdr   *defraghdrtbl, *dp, defrag;    ulong   *lp, *lp1;        if (verbose > 1) {        printf("tfsclean(%d,0x%x,0x%x,%d,%d,%d)\n",            filtot,tbl1,tbl2,snum,resetwhendone,verbose);    }    /* Do some initial configuration retrieval... */    /* Determine the first and last sector within TFS... */    if (addrtosector(TFSSTART,&firsttfssector,&ssize,&sbase) < 0)        return(TFSERR_MEMFAIL);    lasttfssector = firsttfssector + TFSSECTORCOUNT - 1;    if (addrtosector(TFSEND,&sectorcheck,0,0) < 0)        return(TFSERR_MEMFAIL);    if (lasttfssector != sectorcheck) {        printf("TFS SECTORCOUNT does not match TFSSTART <-> TFSEND\n");        printf("First TFS sector = %d\n",firsttfssector);        printf("Last TFS sector  = %d\n",sectorcheck);        return(TFSERR_MEMFAIL);    }    /* Store away information about spare sector... */    if (addrtosector(TFSSPARE,&sparesnum,&sparesize,0) < 0)        return(TFSERR_MEMFAIL);    if (filtot) {        sidx = snum;        ftot = filtot;        defraghdrtbl = tbl2;        DefragStateTbl = tbl1;        tfssector = firsttfssector+snum;        printf("Continuing defragmentation at sector %3d ",tfssector);        printf("(state=%s)...\n",tfsdefragmsg(DefragStateTbl[snum]));        if (sectortoaddr(tfssector,&ssize,&sbase) == -1)            return(TFSERR_MEMFAIL);        switch(DefragStateTbl[snum]) {            case BUILDING_HEADER_TABLE:                goto building_hdr;            case HEADER_TABLE_READY:                goto hdr_table_ready;            case COPY_HDRS_TO_SPARE:                goto copy_hdrs_to_spare;            case HDRS_IN_SPARE:                goto hdrs_in_spare;            case LASTSECTOR_IN_SPARE:                goto lastsector_in_spare;            case SECTOR_COPIED_TO_SPARE:                goto sector_copied_to_spare;            case SECTOR_UPDATE_STARTED:                goto sector_update_started;            case SECTOR_UPDATE_COMPLETE:                goto sector_update_complete;            case SECTOR_DEFRAG_COMPLETE:                goto sector_defrag_complete;            case ERASING_DEAD_SECTOR:                goto erasing_dead_sector;            case ERASED_DEAD_SECTOR:                goto erased_dead_sector;            case ERASING_LAST_SECTOR:                goto erasing_last_sector;            default:                return(TFSERR_BADARG);        }    }    /* Determine how many "live" files exist so that we can determine */    /* where to start building the defragstate[] and defraghdrtbl[] tables. */    tfp = (struct tfshdr *)TFSSTART;    ftot = dtot = 0;    while(validtfshdr(tfp)) {        if (tfp->flags)            ftot++;        else             dtot++;        tfp = nextfp(tfp);    }    /* If dtot is 0, then all TFS file headers indicate that there is no */    /* need to clean up the flash.  There is still a chance that the flash */    /* (after the end of the last file in TFS) may not be erased, so check */    /* for that also... */    if (dtot == 0) {        printf("No dead files detected.\n");        if (tfsflasherased(1))            return(0);        else            printf("Running defrag to cleanup...\n");    }    /* If ftot is 0, then there are no valid files in the flash, so simply */    /* erase all TFS flash space and return... */    if (ftot == 0) {        printf("No active files detected, erasing all TFS flash...\n");        tfsinit();        return(0);    }    printf("%s with %d dead file%s (%d bytes) removed.\n",        "Defragmenting file system",dtot,dtot>1 ? "s":"",tfsmemdead());    DefragStateTbl = (ulong *)(TFSEND+1);    DefragStateTbl -= TFSSECTORCOUNT;    defraghdrtbl = (struct defraghdr *)(DefragStateTbl) - ftot;    /* Verify that the space to be written to for the */    /* defrag stuff is erased... */    lp = (ulong *)defraghdrtbl;    while(lp < (ulong *)TFSEND) {        if (*lp++ != (ulong)ERASED32) {            printf("Defragmentation table space (0x%x-0x%x) not erased.\n",                defraghdrtbl,TFSEND);            return(TFSERR_FLASHFAILURE);        }    }    TEST_EXIT_POINT(1,-1);    /* Erase SPARE sector. */    if (tfsflasherase(sparesnum) < 0) {        printf("Flash SPARE sector erase failed\n");        return(TFSERR_FLASHFAILURE);    }    TEST_EXIT_POINT(2,-1);    if (verbose > 2) {        printf("Building defrag header for %d files...\n",ftot);        printf("DefragStateTbl=0x%x\n",DefragStateTbl);        printf("defraghdrtbl=0x%x\n",defraghdrtbl);    }    /* Mark the defragmentation state table to indicate that we are */    /* about to begin defragmentation. */    if (setdefragstate(0,BUILDING_HEADER_TABLE,verbose) != TFS_OKAY)        return(TFSERR_FLASHFAILURE);building_hdr:    firstdeadfile = (char *)0;    tfp = (struct tfshdr *)TFSSTART;    while(validtfshdr(tfp)) {        if (!tfp->flags) {            firstdeadfile = (char *)tfp;            break;        }        tfp = nextfp(tfp);    }        tfp = (struct tfshdr *)TFSSTART;    newaddress = (char *)TFSSTART;    fcnt = 0;    if (verbose > 2)        printf("\nDEFRAGMETATION HEADER DATA:\n");    while(validtfshdr(tfp)) {        if (tfp->flags) {            uchar   *base, *eof;            int     size, slot;            struct  tfsdat *slotptr;            defrag.fhdr = *tfp;            if (addrtosector(tfp,&defrag.bsn,0,&base) < 0)                return(TFSERR_MEMFAIL);            defrag.bso = (uchar *)tfp - base;            eof = (uchar *)(tfp+1)+TFS_SIZE(tfp)-1;            if (addrtosector(eof,&defrag.esn,0,&base) < 0)                return(TFSERR_MEMFAIL);            defrag.fdf = firstdeadfile;            defrag.eso = eof - base + 1;            defrag.nda = newaddress;            /* If the file is currently opened, adjust the base address. */            slotptr = fileslots;            for (slot=0;slot<TFS_MAXOPEN;slot++,slotptr++) {                if (slotptr->offset != -1) {                    if (slotptr->base == (uchar *)(TFS_BASE(tfp))) {                        slotptr->base = (uchar *)(newaddress+TFSHDRSIZ);                        if (verbose)                            printf("Base of opened file '%s' shifted from 0x%x to 0x%x\n",                                TFS_NAME(tfp),TFS_BASE(tfp),slotptr->base);                    }                }            }            if (verbose > 2) {                printf(" File %s:\n",TFS_NAME(tfp));                printf("  bsn=%d, bso=0x%08x,",defrag.bsn,defrag.bso);                printf(" esn=%d, eso=0x%08x,",defrag.esn,defrag.eso);                printf(" nda=0x%08x, fdf=0x%08x\n",defrag.nda,defrag.fdf);            }            size = TFS_SIZE(tfp) + TFSHDRSIZ;            if (size & 0xf) {                size += 16;                size &= ~0xf;            }            newaddress += size;            defrag.fhdr.next = (struct tfshdr *)newaddress;            if (tfsflashwrite(&defraghdrtbl[fcnt],&defrag,DEFRAGHDRSIZ) == -1) {                printf("Flash write failed during header build\n");                return(TFSERR_FLASHFAILURE);            }            fcnt++;            TEST_EXIT_POINT(3,-1);        }        tfp = nextfp(tfp);    }    if (fcnt != ftot)        printf("\007 fcnt != ftot!\n");    TEST_EXIT_POINT(4,-1);    /* Mark the defragmentation state table to indicate that the */    /* defragmentation headers have been constructed. */    if (setdefragstate(0,HEADER_TABLE_READY,verbose) != TFS_OKAY)        return(TFSERR_FLASHFAILURE);hdr_table_ready:    /* For each sector dedicated to TFS, do the following... */    if (verbose) {        if (verbose > 1)            printf("\nPER-SECTOR DEFRAGMENTATION STEPS:\n");        printf("Defragmenting sectors %d - %d...\n",            firsttfssector,lasttfssector);    }    sidx = 0;    for(tfssector=firsttfssector;tfssector<=lasttfssector;tfssector++,sidx++) {        if (verbose) {            printf(" Sector %3d (base=0x%x, size=%d)...\n",                tfssector,sbase,ssize);        }        /* If the current sector is prior to the first sector that contains */        /* a file that has been removed, then this sector will not change,  */        /* so we can skip over it... */        dp = defraghdrtbl;        if (dp->fdf > sbase+ssize) {            if (verbose > 2)                printf("  no change",dp->fdf,sbase,ssize);            if (verbose > 3)                printf("   (0x%x > 0x%x+0x%x",dp->fdf,sbase,ssize);            if (verbose > 2)                printf(".\n");            goto sector_defrag_skip;        }                /* Look to see if this sector has any valid file data in it. */        /* If not, continue with next sector. */        dp = defraghdrtbl;        while (dp < (struct defraghdr *)DefragStateTbl) {            if ((tfssector >= dp->bsn) && (tfssector <= dp->esn))                break;            dp++;        }        if (dp >= (struct defraghdr *)DefragStateTbl) {            TEST_EXIT_POINT(5,tfssector);            if (setdefragstate(sidx,ERASING_DEAD_SECTOR,verbose) != TFS_OKAY)                return(TFSERR_FLASHFAILURE);erasing_dead_sector:            TEST_EXIT_POINT(6,tfssector);            /* Erase the sector within valid TFS space, then update state. */            if (tfsflasherase(tfssector) < 0) {                printf("Flash sector erase (%d) failed\n",tfssector);                return(TFSERR_FLASHFAILURE);            }            TEST_EXIT_POINT(7,tfssector);            if (setdefragstate(sidx,ERASED_DEAD_SECTOR,verbose) != TFS_OKAY)                return(TFSERR_FLASHFAILURE);            TEST_EXIT_POINT(8,tfssector);erased_dead_sector:            sbase += ssize;            if (addrtosector(sbase,0,&ssize,0) < 0)                return(TFSERR_MEMFAIL);            continue;        }        /* If this is the last sector of TFS, then we must copy the defrag */        /* tables to the end of the SPARE sector (recall that the defrag   */        /* tables are stored in the last TFS sector).                      */        if (tfssector == lasttfssector) {            ulong   *newdefragstatetbl;            struct defraghdr    *newdefraghdrtbl;            TEST_EXIT_POINT(9,tfssector);            if (setdefragstate(sidx,COPY_HDRS_TO_SPARE,verbose) != TFS_OKAY)                return(TFSERR_FLASHFAILURE);            TEST_EXIT_POINT(10,tfssector);copy_hdrs_to_spare:            newdefragstatetbl = (ulong *)(TFSSPARE+sparesize);            newdefragstatetbl -= TFSSECTORCOUNT;            newdefraghdrtbl = (struct defraghdr *)(newdefragstatetbl) - ftot;            /* Copy defrag tables to end of SPARE sector... */            if (tfsflashwrite(newdefraghdrtbl,defraghdrtbl,                TFSEND-(int)defraghdrtbl+1) < 0) {                printf("Flash defraghdrtbl write failed\n",tfssector);                return(TFSERR_FLASHFAILURE);            }            DefragStateTbl = (ulong *)(TFSSPARE+sparesize);            DefragStateTbl -= TFSSECTORCOUNT;            TEST_EXIT_POINT(11,tfssector);            if (setdefragstate(sidx,HDRS_IN_SPARE,verbose)!=TFS_OKAY)                return(TFSERR_FLASHFAILURE);hdrs_in_spare:            DefragStateTbl = (ulong *)(TFSSPARE+sparesize);            DefragStateTbl -= TFSSECTORCOUNT;            TEST_EXIT_POINT(12,tfssector);            /* Copy remainder of last TFS sector to SPARE... */            if (tfsflashwrite(TFSSPARE,sbase,                ssize-(TFSEND-(int)defraghdrtbl+1)) < 0) {                printf("Flash final sector (%d) copy failed\n",tfssector);                return(TFSERR_FLASHFAILURE);            }            TEST_EXIT_POINT(13,tfssector);            if (setdefragstate(sidx,LASTSECTOR_IN_SPARE,verbose)!=TFS_OKAY)                return(TFSERR_FLASHFAILURE);lastsector_in_spare:            defraghdrtbl = (struct defraghdr *)(DefragStateTbl) - ftot;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re亚洲国产精品| 91精品一区二区三区在线观看| 亚洲成人高清在线| 中文字幕乱码一区二区免费| 久久精品夜色噜噜亚洲aⅴ| 在线免费观看日本欧美| 粉嫩嫩av羞羞动漫久久久| 日韩成人伦理电影在线观看| 日韩理论片一区二区| 久久久久久亚洲综合影院红桃| 欧美日韩精品专区| 99久久精品免费精品国产| 国产一区二区在线观看免费| 天天操天天综合网| 亚洲另类春色校园小说| 国产精品久久久久国产精品日日| 亚洲精品一区二区三区影院| 欧美一级日韩一级| 欧美日韩在线亚洲一区蜜芽| 91浏览器打开| 99v久久综合狠狠综合久久| 国产成人精品综合在线观看| 精品一区二区三区免费观看| 日韩高清欧美激情| 天天综合网天天综合色| 一区二区三区在线观看动漫 | 欧美色精品天天在线观看视频| jiyouzz国产精品久久| 国产自产视频一区二区三区| 久久99精品久久久久久| 精品制服美女丁香| 精品亚洲国内自在自线福利| 蜜臀av一级做a爰片久久| 日韩av成人高清| 天天色图综合网| 日韩国产高清影视| 美女视频黄频大全不卡视频在线播放| 丝袜美腿一区二区三区| 水野朝阳av一区二区三区| 亚洲成年人影院| 日韩av中文字幕一区二区三区| 日韩成人免费电影| 激情深爱一区二区| 国产·精品毛片| jlzzjlzz欧美大全| 欧美在线一区二区| 69堂成人精品免费视频| 日韩免费福利电影在线观看| 精品国产乱码久久久久久夜甘婷婷| 3751色影院一区二区三区| 日韩美女一区二区三区四区| 精品粉嫩超白一线天av| 国产亚洲午夜高清国产拍精品| 日本一区二区综合亚洲| 国产精品灌醉下药二区| 一区二区不卡在线视频 午夜欧美不卡在 | av一区二区不卡| 在线亚洲人成电影网站色www| 欧美日韩电影在线| 欧美成人精品3d动漫h| 久久久久综合网| 亚洲欧美日韩国产一区二区三区| 洋洋av久久久久久久一区| 91精品办公室少妇高潮对白| 欧美精品v国产精品v日韩精品 | av在线播放一区二区三区| 色成人在线视频| 欧美一二三区在线| 欧美激情一区二区三区蜜桃视频| 亚洲欧美成人一区二区三区| 日韩经典中文字幕一区| 国产精品77777竹菊影视小说| 91蜜桃网址入口| 日韩一级大片在线观看| 国产精品久久久久久久久免费樱桃| 亚洲在线中文字幕| 国产乱一区二区| 欧美日韩免费在线视频| 久久精品亚洲麻豆av一区二区| 一区二区三区四区视频精品免费| 久久66热偷产精品| 在线免费观看一区| 久久九九99视频| 日韩精品国产欧美| 成人国产精品视频| 日韩精品一区在线| 亚洲午夜久久久久| 成人综合在线观看| 欧美一级国产精品| 亚洲欧美一区二区三区久本道91| 裸体健美xxxx欧美裸体表演| 色一情一伦一子一伦一区| 日韩精品一区二区在线观看| 亚洲蜜臀av乱码久久精品| 国产一区二区三区蝌蚪| 欧美区视频在线观看| 亚洲欧洲国产日韩| 国产一区二区三区日韩| 这里只有精品视频在线观看| 亚洲特级片在线| 高清成人免费视频| 欧美成人激情免费网| 亚洲影院在线观看| 99久久精品免费看| 国产欧美1区2区3区| 韩国v欧美v日本v亚洲v| 欧美肥大bbwbbw高潮| 亚洲精品中文在线影院| 成人免费av在线| 亚洲精品一区二区三区蜜桃下载| 婷婷综合五月天| 在线观看日产精品| 亚洲黄色免费电影| av一二三不卡影片| 中文字幕巨乱亚洲| 国产精品自拍在线| xfplay精品久久| 婷婷激情综合网| 欧美三级中文字幕| 亚洲一区二区3| 欧美性猛交xxxx黑人交| 亚洲综合999| 欧美色视频在线观看| 亚洲精品国产精华液| 99久久婷婷国产| 中文字幕一区二区在线观看| 成人小视频免费在线观看| 国产性色一区二区| 懂色av一区二区夜夜嗨| 国产精品麻豆欧美日韩ww| 国产成+人+日韩+欧美+亚洲| 国产三级久久久| www.亚洲激情.com| 国产自产视频一区二区三区| 欧美大度的电影原声| 久久狠狠亚洲综合| 久久久久久久久久久黄色| 国产另类ts人妖一区二区| 国产午夜亚洲精品羞羞网站| 成人午夜视频网站| 日韩理论片一区二区| 欧美午夜在线一二页| 午夜天堂影视香蕉久久| 欧美电影精品一区二区| 寂寞少妇一区二区三区| 国产偷国产偷亚洲高清人白洁| 成人黄色大片在线观看| 亚洲色图在线视频| 欧美日韩在线播| 日本人妖一区二区| 久久人人超碰精品| 成人黄色国产精品网站大全在线免费观看 | 麻豆一区二区三| 久久综合色鬼综合色| 国产91在线看| 夜夜嗨av一区二区三区四季av| 欧美视频一区在线观看| 免费成人在线视频观看| 久久精品视频在线看| 一本色道**综合亚洲精品蜜桃冫| 亚洲福利视频三区| 久久亚洲综合色一区二区三区 | 成人在线视频一区| 亚洲美女在线国产| 69堂亚洲精品首页| 国产成人精品一区二区三区网站观看| 一区二区中文字幕在线| 欧美另类久久久品| 国产精品综合视频| 夜夜嗨av一区二区三区四季av| 欧美一区二区三区四区五区| 国产福利一区在线观看| 亚洲永久精品国产| 精品国产电影一区二区| 色综合久久中文字幕综合网| 男女激情视频一区| 国产精品国产精品国产专区不蜜| 欧美日韩久久一区二区| 精品无人区卡一卡二卡三乱码免费卡| 国产精品免费视频观看| 91精品国产91久久综合桃花| 成人av电影免费在线播放| 五月综合激情网| 中文幕一区二区三区久久蜜桃| 欧美日韩精品一区二区三区蜜桃| 国产一区亚洲一区| 亚洲成人精品在线观看| 国产欧美精品一区二区色综合| 欧美巨大另类极品videosbest| 国产精品 欧美精品| 午夜激情久久久| 亚洲欧美色综合| 国产日韩欧美精品综合| 欧美丰满美乳xxx高潮www| 一本一道综合狠狠老| 国产成人av福利| 久久激情五月激情| 日韩高清不卡一区二区| 亚洲激情图片小说视频| 国产亚洲精品aa|