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

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

?? tfs_with_appexit_support.c

?? flash文件系統實現
?? C
?? 第 1 頁 / 共 5 頁
字號:
            TEST_EXIT_POINT(14,tfssector);        }        else {            TEST_EXIT_POINT(15,tfssector);            /* Copy TFS sector to SPARE, then update state. */            if (tfsflashwrite(TFSSPARE,sbase,ssize) < 0) {                printf("Flash sector %d copy failed\n",tfssector);                return(TFSERR_FLASHFAILURE);            }            TEST_EXIT_POINT(16,tfssector);            if (setdefragstate(sidx,SECTOR_COPIED_TO_SPARE,verbose)!=TFS_OKAY)                return(TFSERR_FLASHFAILURE);            TEST_EXIT_POINT(17,tfssector);sector_copied_to_spare:            dummy = 1;        }        TEST_EXIT_POINT(18,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(19,tfssector);        if (setdefragstate(sidx,SECTOR_UPDATE_STARTED,verbose) != TFS_OKAY)            return(TFSERR_FLASHFAILURE);sector_update_started:        /* Step through the defrag file header table and copy all files that */        /* have valid data in the sector that is now in SPARE space. Then */        /* update state. */        dp = defraghdrtbl;        while (dp < (struct defraghdr *)DefragStateTbl) {            if ((tfssector < dp->bsn) || (tfssector > dp->esn)) {                dp++;                continue;            }            if (verbose > 1)                printf("   File %s:\n",dp->fhdr.name);            if (dp->bsn == dp->esn) {       /* Whole file is in SPARE */                if (verbose > 1)                    printf("    Complete_copy (nda=0x%x,nxt=0x%x,size=%d)\n",                        dp->nda,dp->fhdr.next,dp->fhdr.filsize+TFSHDRSIZ);                TEST_EXIT_POINT(20,tfssector);                /* Copy the header from defraghdrtbl[]... */                if (tfsflashwrite(dp->nda,&dp->fhdr,TFSHDRSIZ) == -1) {                    printf("Sector-update1.1 (dp=0x%x) failed\n",dp);                    return(TFSERR_FLASHFAILURE);                }                TEST_EXIT_POINT(21,tfssector);                /* Copy the file data from SPARE... */                if (tfsflashwrite(dp->nda+TFSHDRSIZ,TFSSPARE+dp->bso+TFSHDRSIZ,                    dp->fhdr.filsize) == -1) {                    printf("Sector-update1.2 (dp=0x%x) failed\n",dp);                    return(TFSERR_FLASHFAILURE);                }            }            else if (tfssector == dp->bsn) {/* Start of file is in SPARE */                fsize = (ssize - dp->bso) - TFSHDRSIZ;                if (verbose > 1)                    printf("    Startof_copy (nda=0x%x,nxt=0x%x,size=%d)\n",                        dp->nda,dp->fhdr.next,fsize+TFSHDRSIZ);                TEST_EXIT_POINT(22,tfssector);                /* Copy the header from defraghdrtbl[]... */                if (tfsflashwrite(dp->nda,&dp->fhdr,TFSHDRSIZ) == -1) {                    printf("Sector-update2.1 (dp=0x%x) failed\n",dp);                    return(TFSERR_FLASHFAILURE);                }                TEST_EXIT_POINT(23,tfssector);                if (tfsflashwrite(dp->nda+TFSHDRSIZ,                    TFSSPARE+dp->bso+TFSHDRSIZ,fsize) == -1) {                    printf("Sector-update2 (dp=0x%x) failed\n",dp);                    return(TFSERR_FLASHFAILURE);                }                TEST_EXIT_POINT(24,tfssector);            }            else if (tfssector == dp->esn) {/* End of file is in SPARE */                int offset;                if (getndaoffset(dp,tfssector,&offset) == -1)                    return(TFSERR_FLASHFAILURE);                                if (verbose > 1)                    printf("    Endof_copy (nda offset=0x%x, size=%d)\n",                        offset,dp->eso);                TEST_EXIT_POINT(25,tfssector);                if (tfsflashwrite(dp->nda+offset,TFSSPARE,dp->eso) == -1) {                    printf("Sector-update3 (dp=0x%x) failed\n",dp);                    return(TFSERR_FLASHFAILURE);                }                TEST_EXIT_POINT(26,tfssector);            }            else {                          /* Middle of file is in SPARE */                int offset;                if (getndaoffset(dp,tfssector,&offset) == -1)                    return(TFSERR_FLASHFAILURE);                if (verbose > 1)                    printf("    Middleof_copy (nda offset=0x%x, size=%d)\n",                        offset,ssize);                TEST_EXIT_POINT(27,tfssector);                if (tfsflashwrite(dp->nda+offset,TFSSPARE,ssize) == -1) {                    printf("Sector-update4 (dp=0x%x) failed\n",dp);                    return(TFSERR_FLASHFAILURE);                }                TEST_EXIT_POINT(28,tfssector);            }            dp++;        }        TEST_EXIT_POINT(29,tfssector);        if (setdefragstate(sidx,SECTOR_UPDATE_COMPLETE,verbose)!=TFS_OKAY)            return(TFSERR_FLASHFAILURE);        TEST_EXIT_POINT(30,tfssector);sector_update_complete:        /* Erase the SPARE sector, then update state. */        if (tfssector != lasttfssector) {            if (tfsflasherase(sparesnum) < 0) {                printf("Flash SPARE sector erase failed\n");                return(TFSERR_FLASHFAILURE);            }            TEST_EXIT_POINT(31,tfssector);        }        TEST_EXIT_POINT(32,tfssector);sector_defrag_skip:        if (setdefragstate(sidx,SECTOR_DEFRAG_COMPLETE,verbose)!=TFS_OKAY)            return(TFSERR_FLASHFAILURE);sector_defrag_complete:        sbase += ssize;        if (addrtosector(sbase,0,&ssize,0) < 0)            return(TFSERR_MEMFAIL);    }    /* If the last file copy did not enter the last tfssector, then erase */    /* the last tfssector... */    if (addrtosector(TFSEND,0,0,&sbase) < 0)        return(TFSERR_MEMFAIL);    dp = (struct defraghdr *)DefragStateTbl - 1;    if ((dp->nda + dp->fhdr.filsize + TFSHDRSIZ) < sbase) {        /* Must use spare sector to record this state because this is */        /* the same sector that we were using to keep track of state. */        DefragStateTbl = (ulong *)(TFSSPARE + sparesize - 4);        if (setdefragstate(0,ERASING_LAST_SECTOR,verbose)!=TFS_OKAY)            return(TFSERR_FLASHFAILURE);        TEST_EXIT_POINT(33,-1);erasing_last_sector:        if (tfsflasherase(lasttfssector) < 0) {            printf("Final sector erase (%d) failed\n",lasttfssector);            return(TFSERR_FLASHFAILURE);        }        TEST_EXIT_POINT(34,-1);    }    /* All defragmentation is done, so verify sanity of files... */    dummy = tfscheck(verbose);    TEST_EXIT_POINT(35,-1);    if (tfsflasherase(sparesnum) < 0) {        printf("Final spare sector (%d) failed\n",sparesnum);        return(TFSERR_FLASHFAILURE);    }    /* If resetwhendone flag is set, then reset here; else return result of */    /* the file system check. */    if (resetwhendone)        monrestart(INITIALIZE);    return(dummy);}/* setdefragstate():    The state of the defragmentation process is maintained by a table of    longs that is located at the end of the last sector of TFS space.    Each long represents the state of a TFS sector.  This function simply    modifies the bits in one of the longs to maintain the state of a    particular sector.    Note that the incoming sector number is relative to TFS space, so    tfssector=0 does not represent the first sector of flash, it represents    the first sector of TFS flash.*/static intsetdefragstate(tfssector,state,verbose)int     tfssector, verbose;ulong   state;{    if (verbose > 2)        printf("  DefragState: %s\n",tfsdefragmsg(state));    if (tfsflashwrite(&DefragStateTbl[tfssector],&state,sizeof(state)) < 0) {        printf("setdefragstate(tfssec=%d,state=0x%x) failed\n",tfssector,state);        return(TFSERR_FLASHFAILURE);    }    return(TFS_OKAY);}/* getndaoffset():    This function is used by tfsclean when a file that is being defragmented    spans across multiple sectors.  Since the defrag header only cotains    the sector number of the starting and ending sectors that the file spans    across, this is used to retrieve the total offset from the start of    the new file (new_destination_address) as each additional sector is    defragmented.*/static intgetndaoffset(struct defraghdr *dp,int sec,int *retoffset){    int     i, ssize, offset;    uchar   *addr, *nextbase, *base;    offset = 0;    sectortoaddr(dp->bsn,0,&nextbase);    for(i=dp->bsn;i<sec;i++) {        if (addrtosector(nextbase,0,&ssize,&base) < 0) {            printf("getndaoffset (dp=0x%x,sector=%d) failed\n",dp,sec);            return(TFSERR_MEMFAIL);        }        if (i == dp->bsn)            offset = ssize - dp->bso;        else if (i == dp->esn)            offset += (ssize - dp->eso);        else            offset += ssize;        nextbase = base+ssize;    }        *retoffset = offset;    return(TFS_OKAY);}/* tfsfixup():    See if a defragmentation was in progress.  If yes, finish it; else    return.*/static inttfsfixup(verbose)int verbose;{    struct  defraghdr   *dfhp;    struct  tfshdr      thdr;    ulong   *statetbl, *spare_statetbl;    int     sparesize, ftot, i, tfssector, snum;#if DEFRAG_TEST_ENABLED    ExitPoint=0;    ExitSector=0;#endif    if (addrtosector(TFSSPARE,0,&sparesize,0) < 0)        return(TFSERR_MEMFAIL);    /* Set statetbl to point to what would be the first TFS sector's state */    /* information bitfield (if defrag were in progress). */    statetbl = (ulong *)(TFSEND+1);    statetbl -= TFSSECTORCOUNT;    /* Set spare_statetbl to point to the last 'long' in the spare sector. */    spare_statetbl = (ulong *)(TFSSPARE + sparesize) - 1;    /* Check the end of the TFS space to see if a state table exists, and */    /* also check to see if the last location in the spare sector contains */    /* state.  If neither, then defragmentation was not in progress so just */    /* return here. */    if ((*statetbl == (ulong)ERASED32) && (*spare_statetbl == (ulong)ERASED32))    {        return(0);    }        /* Maybe only the last sector (and spare) needs to be erased... */    /* This means that all the files are up-to-date, but the */    /* final stages of sector cleanup didn't finish. */    /* This messiness is caused by the fact that the defragmentation could */    /* have been interrupted when it was erasing the same sector that it */    /* was storing state in.  For this sector, the defragmentor uses the */    /* spare sector to store state. */    if (*spare_statetbl == ERASING_LAST_SECTOR) {        spare_statetbl -= (TFSSECTORCOUNT-1);        if (verbose > 1) {            printf("Defrag restart at TFS sector %d\n",                tfssector+TFSSECTORCOUNT-1);        }        _tfsclean(1,spare_statetbl,0,TFSSECTORCOUNT-1,0,verbose);        return(0);    }        if (verbose)        printf("File system fixup in progress\n");    if (*statetbl == (ulong)ERASED32) {        statetbl = (ulong *)(TFSSPARE + sparesize);        statetbl -= TFSSECTORCOUNT;    }    dfhp = (struct defraghdr *)statetbl - 1;    ftot = 0;    while(1) {        if (dfhp->fhdr.hdrsize == 0xffff)            break;        thdr = dfhp->fhdr;        thdr.next = 0;        thdr.hdrcrc = 0;        if (crc32(&thdr,TFSHDRSIZ) != dfhp->fhdr.hdrcrc)            break;        ftot++;        dfhp--;    }    dfhp++;    /* If ftot is zero, then we are fixing up an empty file system that */    /* was in the process of being defragmented, so just erase all sectors */    /* and be done... */    if (ftot == 0) {        if (verbose)            printf("Cleaning up empty TFS...\n");        if (tfsflasheraseall() < 0)            printf("TFS erase-all failed\n");        return(TFS_OKAY);    }    if (verbose)        printf("%d files being defragmented\n",ftot);    if (addrtosector(TFSSTART,&tfssector,0,0) < 0)        return(TFSERR_MEMFAIL);    snum = -1;    /* Find currently active sector by stepping through the state table */    /* until SECTOR_DEFRAG_INACTIVE state is detected, then step back 1. */    for(i=0;i<TFSSECTORCOUNT;i++) {        if (verbose > 1)            printf("TFS Sector %d state: 0x%x (%s)\n",                tfssector+i, statetbl[i], tfsdefragmsg(statetbl[i]));        if ((snum == -1) && (statetbl[i] == SECTOR_DEFRAG_INACTIVE))            snum = i-1;     }    if (snum == -1) {        printf("*****Starting at last sector\n");        snum = TFSSECTORCOUNT-1;        if (statetbl[snum] == COPY_HDRS_TO_SPARE) {            spare_statetbl = (ulong *)(TFSSPARE + sparesize) - 1;            if ((*spare_statetbl == HDRS_IN_SPARE) ||                (*spare_statetbl == LASTSECTOR_IN_SPARE)) {                printf("Adjusting statetbl from 0x%x to 0x%x\n",                    statetbl,spare_statetbl - (TFSSECTORCOUNT-1));                statetbl = spare_statetbl - (TFSSECTORCOUNT-1);            }        }    }    if (verbose > 1)        printf("Defrag restart at TFS sector %d\n",tfssector+snum);    return(_tfsclean(ftot,statetbl,dfhp,snum,0,verbose));}#if INCLUDE_OLDTFSCLEAN/* oldtfsclean():    Go through the file list and if any deleted files exist,     remove them from the flash to eliminate dead space.    Copies all valid tfs files to RAM, then erases flash, then    reloads what is in RAM back into flash.    The function can be told to use a particular starting point in     memory or default to APPLICATION_RAMSTART.    <<< WARNING >>> THIS FUNCTION SHOULD NOT BE INTERRUPTED*/static intoldtfsclean(verbose,usedefault,tspace,reset)int verbose, reset, usedefault;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩在线看| 99久久精品情趣| 亚洲午夜久久久久久久久久久| 久久亚洲捆绑美女| 精品国产伦一区二区三区观看方式| 91精品免费在线| 日韩欧美国产wwwww| 日韩女同互慰一区二区| 日韩精品一区二区三区三区免费| 日韩欧美国产高清| 国产丝袜美腿一区二区三区| 欧美经典一区二区| 国产精品妹子av| 亚洲男人天堂av网| 日韩精品电影在线观看| 成人激情小说乱人伦| 顶级嫩模精品视频在线看| 成人99免费视频| 色综合天天综合色综合av| 欧美日本在线一区| 日韩免费看的电影| 国产精品国产三级国产a| 亚洲欧美日韩一区二区 | 日韩欧美二区三区| 国产欧美日韩中文久久| 一区二区三区不卡在线观看 | 欧美成人性福生活免费看| 久久人人97超碰com| 亚洲欧美欧美一区二区三区| 日韩和的一区二区| 成人黄色大片在线观看| 7777女厕盗摄久久久| 国产调教视频一区| 亚洲第一福利视频在线| 欧美三日本三级三级在线播放| 337p粉嫩大胆色噜噜噜噜亚洲 | 欧美一级黄色录像| 国产精品久久影院| 蜜臀久久99精品久久久画质超高清| 国产精品99久久久久久有的能看| 在线观看视频一区二区| 久久精品男人天堂av| 亚洲成人777| 99国产精品一区| 久久综合中文字幕| 亚洲高清免费在线| www.亚洲免费av| 久久女同性恋中文字幕| 日本不卡一区二区三区 | 一区二区三区欧美日韩| 国产一区二区三区在线观看精品 | 成人黄色在线网站| 精品欧美乱码久久久久久1区2区| 一区二区三区av电影| 成人午夜大片免费观看| 日韩欧美综合在线| 日韩精品免费专区| 欧美日韩一区久久| 亚洲女人小视频在线观看| 久久99精品网久久| 91精品国产日韩91久久久久久| 亚洲女人的天堂| 99在线热播精品免费| 国产日韩视频一区二区三区| 奇米精品一区二区三区四区| 91久久精品国产91性色tv| 中文字幕一区二区日韩精品绯色| 国产精品一二三| 久久久欧美精品sm网站| 国内成人自拍视频| 精品国产伦一区二区三区观看方式| 日韩不卡一区二区三区| 欧美一区中文字幕| 日韩精品五月天| 这里只有精品99re| 美女视频第一区二区三区免费观看网站| 欧美三级中文字| 天天爽夜夜爽夜夜爽精品视频| 欧美性三三影院| 日韩高清不卡在线| 日韩一区二区三区三四区视频在线观看 | 欧美日韩国产乱码电影| 亚洲老妇xxxxxx| 欧美影视一区二区三区| 亚洲图片有声小说| 欧美一区二区三区在线| 日本不卡的三区四区五区| 日韩久久精品一区| 国产伦精品一区二区三区视频青涩 | 国产精品一二三区在线| 国产精品卡一卡二| 色菇凉天天综合网| 视频一区视频二区在线观看| 日韩欧美国产精品| 国产精品1区2区3区在线观看| 国产欧美日韩视频在线观看| 成人97人人超碰人人99| 亚洲国产三级在线| 日韩欧美一二区| 国产·精品毛片| 亚洲在线一区二区三区| 精品国产乱码久久久久久老虎| 国产精品77777| 亚洲高清三级视频| 亚洲 欧美综合在线网络| 日韩一区二区免费视频| 国产·精品毛片| 日韩电影免费在线观看网站| 久久欧美一区二区| 精品视频1区2区| 岛国精品一区二区| 免费成人在线影院| 一区二区三区高清在线| 精品国产乱码久久久久久免费 | 欧美一区二区在线观看| 福利一区二区在线| 婷婷丁香久久五月婷婷| 国产片一区二区三区| 欧美群妇大交群中文字幕| 国产成人av一区二区三区在线观看| 亚洲一线二线三线视频| 国产视频一区在线播放| 欧美一区永久视频免费观看| 一本久道久久综合中文字幕| 国产在线精品国自产拍免费| 亚洲一卡二卡三卡四卡无卡久久| 久久综合成人精品亚洲另类欧美 | 在线观看一区不卡| 国产成人精品免费一区二区| 日韩avvvv在线播放| 亚洲综合激情网| 国产精品女同一区二区三区| 精品久久久久久久久久久久久久久久久 | 一区二区三区自拍| 国产精品欧美极品| 久久亚洲精精品中文字幕早川悠里| 777久久久精品| 欧美丰满嫩嫩电影| 欧美日韩久久一区| 在线观看亚洲精品| 色94色欧美sute亚洲线路二| 97精品电影院| 99麻豆久久久国产精品免费优播| 国产精品白丝av| 国产九九视频一区二区三区| 久久精品99国产国产精| 石原莉奈在线亚洲二区| 亚洲成人激情综合网| 亚洲成人综合视频| 亚洲午夜一区二区| 性做久久久久久免费观看| 亚洲成人黄色影院| 天堂成人国产精品一区| 偷拍亚洲欧洲综合| 日韩国产在线观看| 久久97超碰国产精品超碰| 麻豆成人av在线| 国产一区二区三区高清播放| 国产精品原创巨作av| 国产成人午夜精品5599| 成人免费黄色大片| 色天使色偷偷av一区二区| 在线观看精品一区| 69久久夜色精品国产69蝌蚪网| 91精品国产综合久久精品| 欧美大片在线观看| 国产精品网站在线| 亚洲精品菠萝久久久久久久| 亚洲高清视频在线| 激情综合网激情| 国产成人h网站| 91福利社在线观看| 日韩视频在线一区二区| 久久天天做天天爱综合色| 国产精品国产a级| 亚洲国产欧美另类丝袜| 麻豆传媒一区二区三区| 成人免费av资源| 欧美日韩综合一区| 亚洲一区二区四区蜜桃| 手机精品视频在线观看| 国产成人精品aa毛片| 欧美性猛交一区二区三区精品 | 国产视频一区二区在线观看| 一色屋精品亚洲香蕉网站| 亚洲国产精品人人做人人爽| 久久99精品久久久久婷婷| 91视视频在线观看入口直接观看www | 欧美性猛片xxxx免费看久爱| 精品免费国产二区三区| 亚洲精品免费视频| 麻豆成人免费电影| 色国产综合视频| 国产亚洲婷婷免费| 亚洲1区2区3区4区| 不卡av免费在线观看| 日韩欧美国产综合一区 | 夜夜揉揉日日人人青青一国产精品| 六月丁香婷婷色狠狠久久| 91在线精品一区二区三区|