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

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

?? zip.c

?? 嵌入式環境下的GUI
?? C
?? 第 1 頁 / 共 3 頁
字號:
            break;        filepos -= (maxread - 4);    } /* while */    BAIL_IF_MACRO(!found, ERR_NOT_AN_ARCHIVE, -1);    if (len != NULL)        *len = filelen;    return(filepos + i);} /* zip_find_end_of_central_dir */static int ZIP_isArchive(const char *filename, int forWriting){    PHYSFS_uint32 sig;    int retval = 0;    void *in;    in = __PHYSFS_platformOpenRead(filename);    BAIL_IF_MACRO(in == NULL, NULL, 0);    /*     * The first thing in a zip file might be the signature of the     *  first local file record, so it makes for a quick determination.     */    if (readui32(in, &sig))    {        retval = (sig == ZIP_LOCAL_FILE_SIG);        if (!retval)        {            /*             * No sig...might be a ZIP with data at the start             *  (a self-extracting executable, etc), so we'll have to do             *  it the hard way...             */            retval = (zip_find_end_of_central_dir(in, NULL) != -1);        } /* if */    } /* if */    __PHYSFS_platformClose(in);    return(retval);} /* ZIP_isArchive */static void zip_free_entries(ZIPentry *entries, PHYSFS_uint32 max){    PHYSFS_uint32 i;    for (i = 0; i < max; i++)    {        ZIPentry *entry = &entries[i];        if (entry->name != NULL)            free(entry->name);    } /* for */    free(entries);} /* zip_free_entries *//* * This will find the ZIPentry associated with a path in platform-independent *  notation. Directories don't have ZIPentries associated with them, but  *  (*isDir) will be set to non-zero if a dir was hit. */static ZIPentry *zip_find_entry(ZIPinfo *info, const char *path, int *isDir){    ZIPentry *a = info->entries;    PHYSFS_sint32 pathlen = strlen(path);    PHYSFS_sint32 lo = 0;    PHYSFS_sint32 hi = (PHYSFS_sint32) (info->entryCount - 1);    PHYSFS_sint32 middle;    const char *thispath = NULL;    int rc;    while (lo <= hi)    {        middle = lo + ((hi - lo) / 2);        thispath = a[middle].name;        rc = strncmp(path, thispath, pathlen);        if (rc > 0)            lo = middle + 1;        else if (rc < 0)            hi = middle - 1;        else /* substring match...might be dir or entry or nothing. */        {            if (isDir != NULL)            {                *isDir = (thispath[pathlen] == '/');                if (*isDir)                    return(NULL);            } /* if */            if (thispath[pathlen] == '\0') /* found entry? */                return(&a[middle]);            else                hi = middle - 1;  /* adjust search params, try again. */        } /* if */    } /* while */    if (isDir != NULL)        *isDir = 0;    BAIL_MACRO(ERR_NO_SUCH_FILE, NULL);} /* zip_find_entry *//* Convert paths from old, buggy DOS zippers... */static void zip_convert_dos_path(ZIPentry *entry, char *path){    PHYSFS_uint8 hosttype = (PHYSFS_uint8) ((entry->version >> 8) & 0xFF);    if (hosttype == 0)  /* FS_FAT_ */    {        while (*path)        {            if (*path == '\\')                *path = '/';            path++;        } /* while */    } /* if */} /* zip_convert_dos_path */static void zip_expand_symlink_path(char *path){    char *ptr = path;    char *prevptr = path;    while (1)    {        ptr = strchr(ptr, '/');        if (ptr == NULL)            break;        if (*(ptr + 1) == '.')        {            if (*(ptr + 2) == '/')            {                /* current dir in middle of string: ditch it. */                memmove(ptr, ptr + 2, strlen(ptr + 2) + 1);            } /* else if */            else if (*(ptr + 2) == '\0')            {                /* current dir at end of string: ditch it. */                *ptr = '\0';            } /* else if */            else if (*(ptr + 2) == '.')            {                if (*(ptr + 3) == '/')                {                    /* parent dir in middle: move back one, if possible. */                    memmove(prevptr, ptr + 4, strlen(ptr + 4) + 1);                    ptr = prevptr;                    while (prevptr != path)                    {                        prevptr--;                        if (*prevptr == '/')                        {                            prevptr++;                            break;                        } /* if */                    } /* while */                } /* if */                if (*(ptr + 3) == '\0')                {                    /* parent dir at end: move back one, if possible. */                    *prevptr = '\0';                } /* if */            } /* if */        } /* if */        else        {            prevptr = ptr;        } /* else */    } /* while */} /* zip_expand_symlink_path *//* * Look for the entry named by (path). If it exists, resolve it, and return *  a pointer to that entry. If it's another symlink, keep resolving until you *  hit a real file and then return a pointer to the final non-symlink entry. *  If there's a problem, return NULL. (path) is always free()'d by this *  function. */static ZIPentry *zip_follow_symlink(void *in, ZIPinfo *info, char *path){    ZIPentry *entry;    zip_expand_symlink_path(path);    entry = zip_find_entry(info, path, NULL);    if (entry != NULL)    {        if (!zip_resolve(in, info, entry))  /* recursive! */            entry = NULL;        else        {            if (entry->symlink != NULL)                entry = entry->symlink;        } /* else */    } /* if */    free(path);    return(entry);} /* zip_follow_symlink */static int zip_resolve_symlink(void *in, ZIPinfo *info, ZIPentry *entry){    char *path;    PHYSFS_uint32 size = entry->uncompressed_size;    int rc = 0;    /*     * We've already parsed the local file header of the symlink at this     *  point. Now we need to read the actual link from the file data and     *  follow it.     */    BAIL_IF_MACRO(!__PHYSFS_platformSeek(in, entry->offset), NULL, 0);    path = (char *) malloc(size + 1);    BAIL_IF_MACRO(path == NULL, ERR_OUT_OF_MEMORY, 0);        if (entry->compression_method == COMPMETH_NONE)        rc = (__PHYSFS_platformRead(in, path, size, 1) == 1);    else  /* symlink target path is compressed... */    {        z_stream stream;        PHYSFS_uint32 compsize = entry->compressed_size;        PHYSFS_uint8 *compressed = (PHYSFS_uint8 *) malloc(compsize);        if (compressed != NULL)        {            if (__PHYSFS_platformRead(in, compressed, compsize, 1) == 1)            {                memset(&stream, '\0', sizeof (z_stream));                stream.next_in = compressed;                stream.avail_in = compsize;                stream.next_out = (unsigned char *) path;                stream.avail_out = size;                if (zlib_err(inflateInit2(&stream, -MAX_WBITS)) == Z_OK)                {                    rc = zlib_err(inflate(&stream, Z_FINISH));                    inflateEnd(&stream);                    /* both are acceptable outcomes... */                    rc = ((rc == Z_OK) || (rc == Z_STREAM_END));                } /* if */            } /* if */            free(compressed);        } /* if */    } /* else */    if (!rc)        free(path);    else    {        path[entry->uncompressed_size] = '\0';    /* null-terminate it. */        zip_convert_dos_path(entry, path);        entry->symlink = zip_follow_symlink(in, info, path);    } /* else */    return(entry->symlink != NULL);} /* zip_resolve_symlink *//* * Parse the local file header of an entry, and update entry->offset. */static int zip_parse_local(void *in, ZIPentry *entry){    PHYSFS_uint32 ui32;    PHYSFS_uint16 ui16;    PHYSFS_uint16 fnamelen;    PHYSFS_uint16 extralen;    /*     * crc and (un)compressed_size are always zero if this is a "JAR"     *  archive created with Sun's Java tools, apparently. We only     *  consider this archive corrupted if those entries don't match and     *  aren't zero. That seems to work well.     */    BAIL_IF_MACRO(!__PHYSFS_platformSeek(in, entry->offset), NULL, 0);    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);    BAIL_IF_MACRO(ui32 != ZIP_LOCAL_FILE_SIG, ERR_CORRUPTED, 0);    BAIL_IF_MACRO(!readui16(in, &ui16), NULL, 0);    BAIL_IF_MACRO(ui16 != entry->version_needed, ERR_CORRUPTED, 0);    BAIL_IF_MACRO(!readui16(in, &ui16), NULL, 0);  /* general bits. */    BAIL_IF_MACRO(!readui16(in, &ui16), NULL, 0);    BAIL_IF_MACRO(ui16 != entry->compression_method, ERR_CORRUPTED, 0);    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);  /* date/time */    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);    BAIL_IF_MACRO(ui32 && (ui32 != entry->crc), ERR_CORRUPTED, 0);    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);    BAIL_IF_MACRO(ui32 && (ui32 != entry->compressed_size), ERR_CORRUPTED, 0);    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);    BAIL_IF_MACRO(ui32 && (ui32 != entry->uncompressed_size),ERR_CORRUPTED,0);    BAIL_IF_MACRO(!readui16(in, &fnamelen), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &extralen), NULL, 0);    entry->offset += fnamelen + extralen + 30;    return(1);} /* zip_parse_local */static int zip_resolve(void *in, ZIPinfo *info, ZIPentry *entry){    int retval = 1;    ZipResolveType resolve_type = entry->resolved;    /* Don't bother if we've failed to resolve this entry before. */    BAIL_IF_MACRO(resolve_type == ZIP_BROKEN_FILE, ERR_CORRUPTED, 0);    BAIL_IF_MACRO(resolve_type == ZIP_BROKEN_SYMLINK, ERR_CORRUPTED, 0);    /* uhoh...infinite symlink loop! */    BAIL_IF_MACRO(resolve_type == ZIP_RESOLVING, ERR_SYMLINK_LOOP, 0);    /*     * We fix up the offset to point to the actual data on the     *  first open, since we don't want to seek across the whole file on     *  archive open (can be SLOW on large, CD-stored files), but we     *  need to check the local file header...not just for corruption,     *  but since it stores offset info the central directory does not.     */    if (resolve_type != ZIP_RESOLVED)    {        entry->resolved = ZIP_RESOLVING;        retval = zip_parse_local(in, entry);        if (retval)        {            /*             * If it's a symlink, find the original file. This will cause             *  resolution of other entries (other symlinks and, eventually,             *  the real file) if all goes well.             */            if (resolve_type == ZIP_UNRESOLVED_SYMLINK)                retval = zip_resolve_symlink(in, info, entry);        } /* if */        if (resolve_type == ZIP_UNRESOLVED_SYMLINK)            entry->resolved = ((retval) ? ZIP_RESOLVED : ZIP_BROKEN_SYMLINK);        else if (resolve_type == ZIP_UNRESOLVED_FILE)            entry->resolved = ((retval) ? ZIP_RESOLVED : ZIP_BROKEN_FILE);    } /* if */    return(retval);} /* zip_resolve */static int zip_version_does_symlinks(PHYSFS_uint32 version){    int retval = 0;    PHYSFS_uint8 hosttype = (PHYSFS_uint8) ((version >> 8) & 0xFF);    switch (hosttype)    {            /*             * These are the platforms that can NOT build an archive with             *  symlinks, according to the Info-ZIP project.             */        case 0:  /* FS_FAT_  */        case 1:  /* AMIGA_   */        case 2:  /* VMS_     */        case 4:  /* VM_CSM_  */        case 6:  /* FS_HPFS_ */        case 11: /* FS_NTFS_ */        case 14: /* FS_VFAT_ */        case 13: /* ACORN_   */        case 15: /* MVS_     */        case 18: /* THEOS_   */            break;  /* do nothing. */        default:  /* assume the rest to be unix-like. */            retval = 1;            break;    } /* switch */    return(retval);} /* zip_version_does_symlinks */static int zip_entry_is_symlink(ZIPentry *entry){    return((entry->resolved == ZIP_UNRESOLVED_SYMLINK) ||           (entry->resolved == ZIP_BROKEN_SYMLINK) ||           (entry->symlink));} /* zip_entry_is_symlink */static int zip_has_symlink_attr(ZIPentry *entry, PHYSFS_uint32 extern_attr){    PHYSFS_uint16 xattr = ((extern_attr >> 16) & 0xFFFF);    return (              (zip_version_does_symlinks(entry->version)) &&              (entry->uncompressed_size > 0) &&              ((xattr & UNIX_FILETYPE_MASK) == UNIX_FILETYPE_SYMLINK)           );} /* zip_has_symlink_attr */static PHYSFS_sint64 zip_dos_time_to_physfs_time(PHYSFS_uint32 dostime){#ifdef _WIN32_WCE	/* We have no struct tm and no mktime right now.	   FIXME: This should probably be fixed at some point.	*/    return -1;#else    PHYSFS_uint32 dosdate;    struct tm unixtime;    memset(&unixtime, '\0', sizeof (unixtime));    dosdate = (PHYSFS_uint32) ((dostime >> 16) & 0xFFFF);    dostime &= 0xFFFF;    /* dissect date */    unixtime.tm_year = ((dosdate >> 9) & 0x7F) + 80;    unixtime.tm_mon  = ((dosdate >> 5) & 0x0F) - 1;    unixtime.tm_mday = ((dosdate     ) & 0x1F);    /* dissect time */    unixtime.tm_hour = ((dostime >> 11) & 0x1F);    unixtime.tm_min  = ((dostime >>  5) & 0x3F);    unixtime.tm_sec  = ((dostime <<  1) & 0x3E);    /* let mktime calculate daylight savings time. */    unixtime.tm_isdst = -1;    return((PHYSFS_sint64) mktime(&unixtime));#endif} /* zip_dos_time_to_physfs_time */static int zip_load_entry(void *in, ZIPentry *entry, PHYSFS_uint32 ofs_fixup){    PHYSFS_uint16 fnamelen, extralen, commentlen;    PHYSFS_uint32 external_attr;    PHYSFS_uint16 ui16;    PHYSFS_uint32 ui32;    PHYSFS_sint64 si64;    /* sanity check with central directory signature... */    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);    BAIL_IF_MACRO(ui32 != ZIP_CENTRAL_DIR_SIG, ERR_CORRUPTED, 0);    /* Get the pertinent parts of the record... */    BAIL_IF_MACRO(!readui16(in, &entry->version), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &entry->version_needed), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &ui16), NULL, 0);  /* general bits */    BAIL_IF_MACRO(!readui16(in, &entry->compression_method), NULL, 0);    BAIL_IF_MACRO(!readui32(in, &ui32), NULL, 0);    entry->last_mod_time = zip_dos_time_to_physfs_time(ui32);    BAIL_IF_MACRO(!readui32(in, &entry->crc), NULL, 0);    BAIL_IF_MACRO(!readui32(in, &entry->compressed_size), NULL, 0);    BAIL_IF_MACRO(!readui32(in, &entry->uncompressed_size), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &fnamelen), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &extralen), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &commentlen), NULL, 0);    BAIL_IF_MACRO(!readui16(in, &ui16), NULL, 0);  /* disk number start */    BAIL_IF_MACRO(!readui16(in, &ui16), NULL, 0);  /* internal file attribs */    BAIL_IF_MACRO(!readui32(in, &external_attr), NULL, 0);    BAIL_IF_MACRO(!readui32(in, &entry->offset), NULL, 0);    entry->offset += ofs_fixup;    entry->symlink = NULL;  /* will be resolved later, if necessary. */    entry->resolved = (zip_has_symlink_attr(entry, external_attr)) ?                            ZIP_UNRESOLVED_SYMLINK : ZIP_UNRESOLVED_FILE;    entry->name = (char *) malloc(fnamelen + 1);    BAIL_IF_MACRO(entry->name == NULL, ERR_OUT_OF_MEMORY, 0);    if (__PHYSFS_platformRead(in, entry->name, fnamelen, 1) != 1)        goto zip_load_entry_puked;    entry->name[fnamelen] = '\0';  /* null-terminate the filename. */    zip_convert_dos_path(entry, entry->name);    si64 = __PHYSFS_platformTell(in);    if (si64 == -1)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久9999亚洲精品| 久久影视一区二区| 国产乱码精品1区2区3区| 亚洲欧洲在线观看av| 日韩一区二区三区精品视频| 成人av影视在线观看| 免费在线观看一区二区三区| 中文字幕一区二区三区在线不卡| 日韩三级在线免费观看| 色先锋资源久久综合| 国产精品一区二区三区99| 亚洲h精品动漫在线观看| 欧美国产视频在线| 欧美电影免费提供在线观看| 色婷婷亚洲综合| 国产成人在线网站| 免费观看成人鲁鲁鲁鲁鲁视频| 一区二区三区美女| 国产精品视频线看| 久久综合狠狠综合久久综合88| 欧美午夜精品理论片a级按摩| 成人精品视频.| 精品在线一区二区| 日本女优在线视频一区二区| 亚洲男人的天堂在线aⅴ视频| 国产欧美一区二区精品久导航 | 国产成人夜色高潮福利影视| 婷婷中文字幕一区三区| 又紧又大又爽精品一区二区| 国产精品剧情在线亚洲| 国产亚洲综合在线| 久久人人超碰精品| 日韩精品在线一区| 日韩一区二区在线免费观看| 欧美夫妻性生活| 欧美日韩一区成人| 欧美色图一区二区三区| 91黄视频在线| 在线精品视频免费播放| 色综合色狠狠天天综合色| 99国内精品久久| av亚洲精华国产精华| 成人短视频下载| 99精品视频一区| 91在线观看成人| 91性感美女视频| 一本大道久久a久久综合| 91在线无精精品入口| 91蝌蚪porny九色| 91精品国产色综合久久不卡蜜臀| 欧美日韩不卡在线| 欧美一区二区三区性视频| 欧美人与z0zoxxxx视频| 欧美一区二区三区视频| 日韩精品一区二区三区在线| 亚洲精品一区二区三区香蕉| 久久嫩草精品久久久久| 欧美激情一二三区| 亚洲日本在线视频观看| 亚洲一二三专区| 日韩在线一二三区| 久久99精品一区二区三区三区| 国产精品一区专区| 91视频观看免费| 精品视频在线视频| 精品三级在线看| 国产欧美日韩不卡免费| 亚洲激情校园春色| 日韩成人精品在线| 国内精品久久久久影院一蜜桃| 国产91色综合久久免费分享| 91丨porny丨在线| 欧美另类高清zo欧美| 亚洲精品在线网站| 亚洲视频资源在线| 亚洲h动漫在线| 国产精品一区二区男女羞羞无遮挡| av男人天堂一区| 7777精品伊人久久久大香线蕉 | 毛片av一区二区| 国产一区三区三区| av在线这里只有精品| 欧美高清精品3d| 国产亚洲精品久| 玉米视频成人免费看| 国内精品久久久久影院一蜜桃| 色综合久久久久综合99| 欧美成人在线直播| 亚洲欧美色一区| 精品伊人久久久久7777人| 91香蕉视频mp4| 精品区一区二区| 亚洲免费毛片网站| 韩国欧美一区二区| 在线看国产一区| 日本一区二区三区dvd视频在线| 亚洲一卡二卡三卡四卡五卡| 国产在线观看免费一区| 欧美亚洲综合一区| 国产视频一区在线播放| 午夜在线成人av| www.一区二区| 亚洲国产精品久久人人爱| 国产精品一级片在线观看| 欧美日本一区二区在线观看| 国产三级一区二区三区| 欧美aaa在线| 欧美又粗又大又爽| 国产精品麻豆一区二区| 久草这里只有精品视频| 欧美日韩在线一区二区| 国产精品免费av| 国产主播一区二区三区| 欧美久久久久免费| 一区二区三区精品| 99久久免费精品| 国产三级欧美三级日产三级99| 五月天亚洲婷婷| 欧美午夜精品久久久| 亚洲免费在线播放| 91网页版在线| 国产精品妹子av| 丁香婷婷深情五月亚洲| 精品捆绑美女sm三区| 免费久久99精品国产| 欧美剧情电影在线观看完整版免费励志电影 | 色综合天天做天天爱| 久久精品视频在线看| 男男视频亚洲欧美| 欧美日韩黄色影视| 亚洲一区二区三区视频在线| 波波电影院一区二区三区| 中文子幕无线码一区tr| 国产米奇在线777精品观看| 精品国产一区二区三区久久久蜜月| 免费高清在线一区| 日韩欧美中文字幕精品| 蜜桃视频第一区免费观看| 4438x成人网最大色成网站| 婷婷激情综合网| 制服视频三区第一页精品| 日韩福利电影在线| 91精品国产日韩91久久久久久| 奇米精品一区二区三区在线观看一| 4438成人网| 精品伊人久久久久7777人| 久久久久久9999| 大美女一区二区三区| 中文字幕亚洲综合久久菠萝蜜| jizz一区二区| 亚洲一区二区欧美日韩| 欧美日韩国产美| 欧美aⅴ一区二区三区视频| www成人在线观看| 国产福利精品一区| 亚洲三级在线播放| 欧美吞精做爰啪啪高潮| 日韩黄色免费网站| 精品成人一区二区三区四区| 国产精品香蕉一区二区三区| 中文天堂在线一区| 在线看日本不卡| 青青草97国产精品免费观看无弹窗版| 欧美mv和日韩mv的网站| 成人精品国产一区二区4080| 亚洲精品日日夜夜| 欧美久久免费观看| 国产精品自产自拍| 亚洲欧美日韩成人高清在线一区| 欧美日韩视频在线一区二区| 美女一区二区三区| 国产精品天美传媒沈樵| 欧美探花视频资源| 狠狠色狠狠色综合系列| 国产精品不卡在线观看| 欧美精品久久久久久久多人混战 | 亚洲欧美中日韩| 3atv一区二区三区| 国产高清一区日本| 亚洲午夜一区二区| 久久久久久一二三区| 99re热这里只有精品免费视频| 五月天欧美精品| 国产精品美女久久久久久久| 欧美日韩国产区一| 成人一级黄色片| 免费欧美日韩国产三级电影| 国产精品毛片大码女人| 日韩一区二区在线免费观看| av福利精品导航| 九九热在线视频观看这里只有精品| 国产精品久久久久7777按摩 | 精品国产乱码久久久久久蜜臀 | 天天影视网天天综合色在线播放| 久久影音资源网| 欧美日高清视频| 91最新地址在线播放| 韩国女主播一区二区三区| 一级做a爱片久久| 久久久久久久久久电影|