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

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

?? tfs_with_appexit_support.c

?? flash文件系統實現
?? C
?? 第 1 頁 / 共 5 頁
字號:
    return(flag);}/* tfslog():    This function is called by tfsadd(), tfsunlink() and tfsipmod() to    write to a log file indicating that something in tfs has been changed.    Note that the function can be called at any user level, but it must be    able to modify the TFS_CHANGELOG_FILE that has "u3" flags.  The     user level must be temporarily upped to MAXUSRLEVEL for this.*/static voidtfslog(int action, char *string){    static  char buf[TFS_CHANGELOG_SIZE];    TFILE   *tfp;    char    *bp, *eol, *eob, *logaction, tbuf[32];    int     newfsize, fsize, lsize, tfd, err, len, oulvl, tbuflen;    switch(action) {        case TFSLOG_ADD:        case TFSLOG_DEL:        /* Return here if the tfslog() call is on   */        case TFSLOG_IPM:        /* the TFS_CHANGELOG_FILE itself.           */            if (!strcmp(string,TFS_CHANGELOG_FILE) || !changeLog)                return;            break;        case TFSLOG_ON:            if (changeLog == 1)                return;            changeLog = 1;            break;        case TFSLOG_OFF:            if (changeLog == 0)                return;            changeLog = 0;            break;    }    oulvl = setUserLevel(MAXUSRLEVEL,0);    logaction = tfslogaction[action];    tfp = tfsstat(TFS_CHANGELOG_FILE);    tfsGetAtime(0,tbuf,sizeof(tbuf));    tbuflen = strlen(tbuf);     if (tfp) {        tfd = tfsopen(TFS_CHANGELOG_FILE,TFS_RDONLY,0);        fsize = tfsread(tfd,buf,TFS_CHANGELOG_SIZE);        tfsclose(tfd,0);        newfsize = (fsize+strlen(logaction)+strlen(string)+3);        if (tbuflen)            newfsize += tbuflen + 3;        eob = buf + fsize;        /* If newfsize is greater than the maximum size the file is */        /* allowed to grow, then keep removing the first line */        /* (oldest entry) until new size is within the limit... */        if (newfsize > TFS_CHANGELOG_SIZE) {            lsize = 0;            eol = buf;            while ((newfsize-lsize) > TFS_CHANGELOG_SIZE) {                while((*eol != '\r') && (*eol != '\n')) eol++;                while((*eol == '\r') || (*eol == '\n')) eol++;                lsize = eol-buf;            }            fsize -= lsize;            newfsize -= lsize;            eob -= lsize;            memcpy(buf,eol,fsize);        }        if (tbuflen)            sprintf(eob,"%s: %s @ %s\n",logaction,string,tbuf);        else            sprintf(eob,"%s: %s\n",logaction,string);        err = tfsunlink(TFS_CHANGELOG_FILE);        if (err < 0)            printf("%s: %s\n",TFS_CHANGELOG_FILE,                (char *)tfsctrl(TFS_ERRMSG,err,0));        err = tfsadd(TFS_CHANGELOG_FILE,0,"u3",buf,newfsize);        if (err < 0)            printf("%s: %s\n",TFS_CHANGELOG_FILE,                (char *)tfsctrl(TFS_ERRMSG,err,0));    }    else {        if (tbuflen)            len = sprintf(buf,"%s: %s @ %s\n",logaction,string,tbuf);        else            len = sprintf(buf,"%s: %s\n",logaction,string);        err = tfsadd(TFS_CHANGELOG_FILE,0,"u3",buf,len);        if (err < 0)            printf("%s: %s\n",TFS_CHANGELOG_FILE,                (char *)tfsctrl(TFS_ERRMSG,err,0));    }    setUserLevel(oulvl,0);}/* validtfshdr():    Return 1 if the header pointed to by the incoming header pointer is valid.    Else return 0.  The header crc is calculated based on the hdrcrc    and next members of the structure being zero.    Note that if the file is deleted, then just ignore the crc and return 1.*/static intvalidtfshdr(hdr)struct  tfshdr *hdr;{    struct tfshdr   hdrcpy;    ulong hdrcrc;    /* A few quick checks... */    if (!hdr)                       /* Valid header pointer? */        return(0);    if (hdr->flags == 0)            /* Flags indicate that file is deleted. */        return(1);    if (!(hdr->flags & TFS_AIPNOT)) /* Flags indicate taht file is in AIP */        return(1);                  /* state, so hdr crc will be bad. */    if (hdr->hdrsize == ERASED16)   /* End of stored files. */        return(0);    hdrcpy = *hdr;    hdrcrc = hdr->hdrcrc;    hdrcpy.hdrcrc = 0;    hdrcpy.next = 0;    if (crc32(&hdrcpy,TFSHDRSIZ) == hdrcrc)        return(1);    else        return(0);}/* nextfp():    Used as a common means of retrieving the next file header pointer.  It    does some sanity checks based on the fact that all pointers must fall    within the TFSSTART<->TFSEND memory range and since each file is placed    just after the previous one in linear memory space, fp->next should    always be greater than fp.*/static struct   tfshdr *nextfp(fp)struct  tfshdr *fp;{    if ((fp < (struct tfshdr *)TFSSTART) ||        (fp > (struct tfshdr *)TFSEND) ||        (fp->next < (struct tfshdr *)TFSSTART) ||        (fp->next > (struct tfshdr *)TFSEND)  ||        (fp->next <= fp)) {        printf("Bad TFS file hdr at: 0x%x\n",fp);        return(0);    }    return(fp->next);}/* tfsflasherased():    Jump to the point in flash after the last file in TFS, then verify    that all remaining flash  that is dedicated to TFS is erased (0xff).    If erased, return 1; else return 0.*/static inttfsflasherased(int verbose){    struct  tfshdr *tfp;    ulong   *lp;    if (verbose)        printf("Flash after last TFS file... ");    tfp = (struct tfshdr *)TFSSTART;    while(validtfshdr(tfp))        tfp = nextfp(tfp);    lp = (ulong *)tfp;    while (lp < (ulong *)TFSEND) {        if (*lp != ERASED32) {            if (verbose)                printf("not erased at 0x%x\n",lp);            return(0);        }        lp++;    }    if (verbose)        printf("ok\n");    return(1);}/* tfsld():    If the filename specified is AOUT, COFF or ELF, then load it.*/static inttfsld(char *name,int verbose,int verifyonly){    int     err;    struct  tfshdr *fp;    err = TFS_OKAY;    fp = tfsstat(name);    if (!fp)        return (TFSERR_NOFILE);    if (TFS_USRLVL(fp) > UserLevel)        return(TFSERR_USERDENIED);    if (fp->flags & (TFS_COFF | TFS_ELF | TFS_AOUT)) {        if (fp->flags & TFS_COFF)            err = tfsloadcoff(fp,verbose,0,verifyonly);        else if (fp->flags & TFS_ELF)            err = tfsloadelf(fp,verbose,0,verifyonly);        else if (fp->flags & TFS_AOUT)            err = tfsloadaout(fp,verbose,0,verifyonly);    }    else        err = TFSERR_BADHDR;        return(err);}/* listfilter():    If the incoming filename (fname) passes the incoming filter, then    return 1; else return 0.    Examples:        if filter is "*.html" and fname is "index.html" return 1.        if filter is "dir/*" and fname is "dir/abc" return 1.        if filter is "dir/" and fname is "dir/abc" return 1.    Notes:        * If no asterisk is present, assume it is appended to the end of          the filter; hence the filter is a prefix.        * A valid filter will have the asterisk as either the first or last          character of the filter.  If first, assume filter is a suffix,           if last (or none at all), assume filter is a prefix.        * If there is an asterisk in the middle of the filter, it is chopped          at the asterisk without warning.*/intlistfilter(char *filter,char *fname){    int     flen;    char    *prefix, *suffix, *asterisk, *sp;    if (!filter)        /* No filter means match everything. */        return(1);    flen = 0;    prefix = suffix = (char *)0;    asterisk = strchr(filter,'*');    if (asterisk == filter) {        suffix = asterisk+1;        flen = strlen(suffix);        sp = fname + strlen(fname) - flen;        if (!strcmp(suffix,sp))            return(1);    }    else {        if (asterisk)            *asterisk = 0;        prefix = filter;        flen = strlen(prefix);        if (!strncmp(prefix,fname,flen))            return(1);    }    return(0);}/* tfsvlist():  verbose list...   Display all files currently stored.  Do not put them in alphabetical   order; display them as they are physically listed in the file system.   Display complete structure of file header for each file.   Note1: This version of file listing is only called if "tfs -vv ls"   or "tfs -vvv ls" is called.  The first level of verbosity is handled   by tfsqlist to simply display the "dot" files.*/static inttfsvlist(char *filter, int verbose,int more){    struct  tfshdr *fp;    int     tot;    char    tbuf[32];    fp = (struct tfshdr *) TFSSTART;    tot = 0;    while(validtfshdr(fp)) {        if ((fp->flags == 0) && (verbose < 3)) {            fp = nextfp(fp);            continue;        }        if (!listfilter(filter,TFS_NAME(fp))) {            fp = nextfp(fp);            continue;        }        if ((fp->flags & TFS_UNREAD) && (TFS_USRLVL(fp) > UserLevel)) {            fp = nextfp(fp);            continue;        }        if (fp->flags)            printf(" Name:  '%s'\n", fp->name);        else            printf(" Name:  '%s' (deleted)\n", fp->name);        printf(" Info:  '%s'\n", fp->info);        if (fp->flags)            tfsprflags(fp->flags, 1);        printf(" Addr:  0x%x (hdr @ 0x%x, nxtptr = 0x%x)\n",            TFS_BASE(fp),fp,fp->next);        printf(" Size:  0x%x (%d) bytes\n", fp->filsize, fp->filsize);        if (TFS_TIME(fp) != TIME_UNDEFINED)            printf(" Time:  %s\n", tfsGetAtime(TFS_TIME(fp),tbuf,sizeof(tbuf)));        printf("\n");        tot++;        fp = nextfp(fp);        if ((more) && ((tot % 2) == 0))            if (!More())                return(TFS_OKAY);    }    printf("\nTotal: %d accessible file%s.\n",tot,tot == 1 ? "" : "s");    printf("Memory Usage: %d bytes (%d bytes of that is dead space)\n",        tfsmemuse(), tfsmemdead());     printf("TFS Address Range: 0x%x - 0x%x\n",TFSSTART,TFSEND);    return (TFS_OKAY);}/* tfsqlist():  quiet list...   Display list of files in alphabetical order.   Display only the name and flag summary.   Note: a file with a leading dot ('.') is invisible unless verbose is set.*/static inttfsqlist(char *filter, int verbose, int more){    extern  char *strchr();    struct  tfshdr *fp;    char    *name, fbuf[16], tbuf[32];    int     idx, listed, plen, err;    idx = listed = 0;    if ((err = tfsreorder()) < 0)        return(err);    printf(" Name                       Size    Location   Flags\n");    while(fp = tfsAlist[idx]) {        name = TFS_NAME(fp);        if (((name[0] == '.') && (!verbose)) ||            (!listfilter(filter,name)) ||            ((fp->flags & TFS_UNREAD) && (TFS_USRLVL(fp) > UserLevel))) {            idx++;            continue;        }        printf(" %-23s  %6d   0x%08x   %s\n",TFS_NAME(fp),TFS_SIZE(fp),            TFS_BASE(fp),tfsflagsbtoa(TFS_FLAGS(fp),fbuf));        idx++;        listed++;        if ((more) && ((listed % 12) == 0))            if (!More())                return(TFS_OKAY);    }    printf("\nTotal: %d accessible file%s.\n",listed,listed == 1 ? "" : "s");    return (TFS_OKAY);}/* tefmemuse():    Return the amount of FLASH that is currently being used by the    file system.*/static longtfsmemuse(void){    struct tfshdr *fp;    long    tot;    tot = 0;    fp = (struct tfshdr *) TFSSTART;    while(validtfshdr(fp)) {        tot += TFSHDRSIZ;        tot += fp->filsize;        fp = nextfp(fp);    }    return(tot);}/* tfsmemdead():    Return the amount of memory space currently used by dead (deleted)    files.*/static longtfsmemdead(void){    struct tfshdr *fp;    long    tot;    tot = 0;    fp = (struct tfshdr *) TFSSTART;    while(validtfshdr(fp)) {        if (fp->flags == 0) {            tot += TFSHDRSIZ;            tot += fp->filsize;        }        fp = nextfp(fp);    }    return(tot);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线视频在线| 精品一区二区国语对白| 欧美激情艳妇裸体舞| 欧美精品日日鲁夜夜添| 欧美在线不卡视频| 欧美日韩高清影院| 欧美日本在线观看| 欧美一区二区在线视频| 欧美电影免费观看高清完整版在线观看 | 99久久国产综合色|国产精品| 精品亚洲成a人| 国产成人精品影视| 色综合久久中文综合久久97| 欧美日韩综合在线免费观看| 69p69国产精品| 久久久久久久精| 中文字幕一区二区日韩精品绯色 | 日本精品视频一区二区| 色妹子一区二区| 欧美一区二区不卡视频| 精品久久久久99| 国产精品美女视频| 亚洲成av人片一区二区三区| 久久精品国产精品亚洲红杏| 9色porny自拍视频一区二区| 欧亚一区二区三区| 2022国产精品视频| 一区二区欧美在线观看| 久久精品72免费观看| jizzjizzjizz欧美| 日韩西西人体444www| 国产精品入口麻豆原神| 午夜久久电影网| 欧美性猛交xxxx乱大交退制版| 欧美大片在线观看一区| 亚洲天堂免费看| 人人狠狠综合久久亚洲| 99久久免费国产| 日韩精品一区二| 亚洲影视在线播放| 国产成人免费视频网站高清观看视频 | 美女视频黄频大全不卡视频在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲成人在线网站| 高清beeg欧美| 日韩欧美精品三级| 一区二区三区日韩精品| 国产精品一二三四区| 91精品国产福利在线观看| 综合在线观看色| 国产激情精品久久久第一区二区| 欧美精品久久一区| 日韩理论电影院| 成人网页在线观看| 欧美一级精品大片| 亚洲va欧美va人人爽午夜| 成人小视频在线| 精品国产123| 日韩av电影天堂| 欧美三区在线视频| 亚洲精品视频在线看| 99免费精品在线观看| 2023国产一二三区日本精品2022| 三级久久三级久久| 精品视频在线免费观看| 玉米视频成人免费看| 一本到一区二区三区| 国内精品久久久久影院薰衣草 | av中文字幕一区| 国产精品网曝门| 国产白丝网站精品污在线入口| 日韩欧美国产一二三区| 蜜臀av一区二区在线免费观看| 宅男噜噜噜66一区二区66| 亚洲成人av中文| 欧美三级三级三级爽爽爽| 亚洲激情在线播放| 日本韩国一区二区三区视频| 亚洲欧洲另类国产综合| 99热精品一区二区| 一区二区三区中文字幕精品精品| 色综合久久66| 亚洲午夜久久久久久久久久久| 日本丰满少妇一区二区三区| 亚洲精品国产无天堂网2021| 在线精品视频免费观看| 亚洲成人精品影院| 欧美成人性福生活免费看| 激情六月婷婷久久| 中文字幕一区二区三中文字幕| 波多野结衣在线一区| 国产精品欧美久久久久一区二区| 成人教育av在线| 亚洲色图都市小说| 欧美一区日本一区韩国一区| 狠狠久久亚洲欧美| 国产欧美精品一区二区三区四区| 成人app网站| 成人aaaa免费全部观看| 一个色在线综合| 日韩精品一区二区三区老鸭窝| 国产成人精品一区二| 亚洲久草在线视频| 日韩免费观看高清完整版在线观看| 国产原创一区二区三区| 亚洲人亚洲人成电影网站色| 欧美日韩一区高清| 国产成人综合亚洲网站| 一区二区高清视频在线观看| 日韩欧美精品三级| 91行情网站电视在线观看高清版| 麻豆久久一区二区| 亚洲欧美日韩在线播放| 日韩欧美色综合| 色系网站成人免费| 久久成人免费日本黄色| 一区二区中文字幕在线| 欧美一区二区三区在线电影| 99国产精品国产精品毛片| 日韩电影在线免费观看| 国产精品成人一区二区三区夜夜夜| 欧美一区二区美女| 99久免费精品视频在线观看 | 99久久99久久久精品齐齐| 日韩国产欧美在线视频| 亚洲欧洲成人精品av97| 2023国产精品自拍| 日韩三级电影网址| 欧美性淫爽ww久久久久无| 成人黄页毛片网站| 国内精品写真在线观看| 免费成人性网站| 亚洲第一久久影院| 一区二区三区四区激情| 欧美高清在线一区| 久久综合色综合88| 日韩欧美一级在线播放| 88在线观看91蜜桃国自产| 色噜噜久久综合| 色综合天天在线| 粉嫩欧美一区二区三区高清影视| 免费人成在线不卡| 日本人妖一区二区| 视频一区二区三区入口| 天天色图综合网| 亚洲成人1区2区| 天堂成人国产精品一区| 日日夜夜免费精品| 性欧美疯狂xxxxbbbb| 国产高清成人在线| 国产麻豆视频一区二区| 国产裸体歌舞团一区二区| 久久国产三级精品| 狠狠色丁香久久婷婷综| 国产一区二区91| 国产91精品欧美| hitomi一区二区三区精品| 成人av在线资源网站| 成人精品一区二区三区中文字幕| 成人性生交大片免费| av成人动漫在线观看| 色综合久久66| 欧美一三区三区四区免费在线看| 日韩欧美国产三级电影视频| 欧美精品一区二区三| 久久久天堂av| 亚洲欧洲精品一区二区三区不卡 | 欧美老肥妇做.爰bbww| 欧美日韩亚洲不卡| 91精品国产综合久久久久| 日韩欧美亚洲国产另类| 久久久精品黄色| 亚洲欧美一区二区久久| 亚洲成在人线在线播放| 毛片不卡一区二区| 成人a级免费电影| 欧美日韩国产综合一区二区| 日韩精品影音先锋| 成人欧美一区二区三区黑人麻豆| 亚洲一区二区精品3399| 韩国v欧美v日本v亚洲v| 色综合中文字幕国产| 99精品欧美一区二区三区小说| 欧美三级资源在线| 久久综合久色欧美综合狠狠| 亚洲欧美日韩在线播放| 免费成人在线播放| 91免费看片在线观看| 日韩一级视频免费观看在线| 国产欧美日韩一区二区三区在线观看 | 福利一区福利二区| 91精品国产综合久久久久久久久久 | 国产精品一区二区免费不卡 | 亚洲欧美日韩国产中文在线| 日本欧美加勒比视频| 99久久久无码国产精品| 精品欧美一区二区久久| 一区二区三区四区在线| 成人免费看片app下载| 欧美videos大乳护士334|