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

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

?? cpipeinflate.cpp

?? 研讀AxCrypt對加解密的處理方法
?? CPP
字號:
/*! \file
    \brief Implementation of AxPipe::Stock::CPipeInflate

    @(#) $Id: CPipeInflate.cpp,v 1.2 2004/02/02 12:10:47 svante Exp $

    AxPipe - Binary Stream Framework

    Copyright (C) 2003 Svante Seleborg/Axon Data, All rights reserved.

    This program 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 of the License, or (at your option) any later version.

    This program 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 this program;
    if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
    Boston, MA 02111-1307 USA

    The author may be reached at mailto:axpipe@axondata.se and http://axpipe.sourceforge.net

    Why is this framework released as GPL and not LGPL? See http://www.gnu.org/philosophy/why-not-lgpl.html

----
\verbatim
    E-mail                          YYYY-MM-DD              Reason
    axpipe@axondata.se              2003-12-15              Initial
\endverbatim
*/
#include "stdafx.h"
#include "CPipeInflate.h"
#include "AxAssert.h"
#define AXLIB_ASSERT_FILE "CPipeInflate.cpp"

// Can't use this for convenient notation below:
// using AxPipe::Stock::CPipeInflate;
// because the Doxygen get's confused.

namespace AxPipe {
    namespace Stock {
        static voidpf zalloc OF((voidpf opaque, uInt items, uInt size)) {
            // The semantics of zalloc are a bit unclear, so we always zero the memory...
            return memset(new unsigned char[items * size], 0, items * size);
        }

        static void zfree OF((voidpf opaque, voidpf address)) {
            delete[] static_cast<unsigned char *>(address);
        }

        /// \brief Initialize member variables
        CPipeInflate::CPipeInflate() {
            m_pOutSeg = NULL;
            m_cb = 0;
            ZeroMemory(&m_Zstream, sizeof m_Zstream);
        }

        /// Clean up if necessary, should only need
        /// work to be done on error.
        CPipeInflate::~CPipeInflate() {
            if (m_pOutSeg) {
                m_pOutSeg->Release();
            }
        }

        /// Initialize zlib for this inflation.
        /// \return true to continue cascading of Open()
        bool
        CPipeInflate::OutOpen() {
            bool fReturn = CPipe::OutOpen();        // Open base first, like constructor
            m_cb = 0;                               // Total output bytes counter
            ZeroMemory(&m_Zstream, sizeof m_Zstream);
            m_Zstream.next_in = Z_NULL;	            // Defer check to first call to inflate
            m_Zstream.zalloc = zalloc;              // Use our custom alloc()
            m_Zstream.zfree = zfree;                // Use our custom free()

            if (inflateInit(&m_Zstream) != Z_OK) {
                SetError(ERROR_CODE_STOCK, _T("ZLIB initialization error"));
            }
            ASSCHK(m_pOutSeg == NULL, _T("CPipeInflate::OutOpen() [m_pOutSeg non-NULL]"));

            return fReturn;                         // Return the saved return code.
        }

        /// Clean up and call base class CPipe::OutClose()
        /// \return true to continue cascading the Open()
        bool
        CPipeInflate::OutClose() {
            // This is a safety first measure, should not really be needed.
            if (m_pOutSeg) {
                m_pOutSeg->Release();
                m_pOutSeg = NULL;
            }

            // Clean up memory allocations etc
            if (inflateEnd(&m_Zstream) != Z_OK) {
                SetError(ERROR_CODE_DERIVED, _T("ZLIB error in inflateEnd error"));
                return false;
            }

            return CPipe::OutClose();               // End by closing base, like destructor
        }

        /// Accept each segment as it is passed. It's important that you do not
        /// send more data than needed. The compression format is self-terminating,
        /// and there must be no data sent after the last byte of the compressed
        /// stream. If so, an error is set and that data is discarded. The output
        /// is decompressed, but may be sent in multiple segments.
        /// \param pSeg A segment with compressed data, and no trailing if last
        void
        CPipeInflate::Out(AxPipe::CSeg *pSeg) {
            m_Zstream.next_in = (unsigned char *)pSeg->PtrRd();
            m_Zstream.avail_in = (UINT)pSeg->Len();
            while (true) {
                if (!m_pOutSeg) {
                    // Allocate the output segment, and point the Zstream structure to it
                    m_pOutSeg = GetSeg(m_Zstream.avail_in + m_Zstream.avail_in);
                    ASSPTR(m_pOutSeg);
                    m_Zstream.avail_out = (UINT)m_pOutSeg->Size();
                    m_Zstream.next_out = m_pOutSeg->PtrWr();
                }
                int iZerror = inflate(&m_Zstream, 0);
                m_cb += m_Zstream.total_out;        // Update total output bytes ctr
                m_Zstream.total_out = 0;            // can't use total_out since it's 32-bit
                switch (iZerror) {
                case Z_OK:
                    // ZLib guarantees to either use all input or all output buffer.
                    if (m_Zstream.avail_in && m_Zstream.avail_out) {
                        SetError(ERROR_CODE_DERIVED, _T("ZLIB sequence error"));
                    }
                    if (!m_Zstream.avail_out) {
                        Pump(m_pOutSeg);
                        m_pOutSeg = NULL;
                    }
                    if (m_Zstream.avail_in) {
                        continue;                   // More data to inflate!
                    }
                    // If we have no more input, we need to return and wait for more
                    break;
                case Z_STREAM_END:
                    m_pOutSeg->Len(m_pOutSeg->Size() - m_Zstream.avail_out);
                    Pump(m_pOutSeg);
                    m_pOutSeg = NULL;
                    if (m_Zstream.avail_in) {
                        SetError(ERROR_CODE_STOCK, _T("Trailing data"));
                    }
                    break;
                default:
                    SetError(ERROR_CODE_STOCK, _T("ZLIB inflate error"));
                    break;
                }
                break;
            }
            pSeg->Release();
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合欧美在线视频区| 一本大道av伊人久久综合| 国产精品伦一区二区三级视频| 色999日韩国产欧美一区二区| 免费精品视频在线| 亚洲欧美成aⅴ人在线观看| 日韩一区二区精品葵司在线| 在线视频一区二区三区| 国产91丝袜在线播放| 日韩精品91亚洲二区在线观看| 国产精品色婷婷久久58| 精品久久久网站| 欧美久久高跟鞋激| 一本色道综合亚洲| 国产酒店精品激情| 免费成人在线网站| 亚洲成人在线观看视频| 亚洲精品成a人| 国产精品欧美精品| 久久精品人人做人人综合| 欧美一区二区国产| 欧美日韩一区二区在线视频| 91美女福利视频| 成人免费看的视频| 国产一区二区网址| 精品无码三级在线观看视频 | 久久久精品黄色| 3751色影院一区二区三区| 91福利社在线观看| 91丨九色丨国产丨porny| 懂色av一区二区三区免费观看| 韩日av一区二区| 久久国产精品99久久久久久老狼| 男男视频亚洲欧美| 日韩av午夜在线观看| 人人精品人人爱| 日本中文字幕一区二区有限公司| 日韩国产在线观看一区| 午夜亚洲福利老司机| 亚洲电影第三页| 日韩一区欧美二区| 美女网站一区二区| 狠狠狠色丁香婷婷综合激情 | 成人激情小说网站| 成人av在线观| 成人av集中营| 99久久99久久精品免费观看| 色噜噜狠狠色综合中国| 在线观看日韩高清av| 欧美日韩一级片网站| 日韩欧美自拍偷拍| 国产女人18水真多18精品一级做| 国产欧美一区二区精品性色 | 麻豆91在线播放| 激情综合五月婷婷| 国产成人av电影在线播放| 成人午夜精品在线| 成人激情开心网| 欧美在线观看一二区| 欧美精品丝袜中出| 欧美成va人片在线观看| 国产日产精品1区| 中文字幕亚洲视频| 日韩综合一区二区| 国产黄人亚洲片| 色综合久久久久久久| 在线播放91灌醉迷j高跟美女| 日韩视频一区在线观看| 国产日韩精品一区| 一区二区三区波多野结衣在线观看| 亚洲国产综合视频在线观看| 久久69国产一区二区蜜臀| 成人av资源站| 91精品视频网| 中文av一区二区| 亚洲成a人v欧美综合天堂| 狠狠狠色丁香婷婷综合久久五月| 99国产麻豆精品| 欧美一区二区网站| 国产精品免费看片| 久久精品噜噜噜成人88aⅴ| 成人福利视频在线看| 欧美疯狂性受xxxxx喷水图片| 精品国产91九色蝌蚪| 亚洲精品免费看| 国产精品原创巨作av| 欧美日韩精品一区二区在线播放| 久久久久久久久久久久久夜| 亚洲综合精品自拍| 成人亚洲精品久久久久软件| 欧美精品第一页| 中文字幕色av一区二区三区| 麻豆成人免费电影| 欧美体内she精视频| 久久精品亚洲乱码伦伦中文 | 午夜免费久久看| 成人综合在线观看| 欧美成人综合网站| 亚洲国产精品一区二区www在线| 国产精品性做久久久久久| 欧美三级韩国三级日本一级| 日本一区二区三区久久久久久久久不 | 97久久人人超碰| 精品va天堂亚洲国产| 亚洲国产精品影院| 91伊人久久大香线蕉| 久久青草国产手机看片福利盒子| 丝袜亚洲另类欧美| 色欧美乱欧美15图片| 国产精品色在线| 国产一区二三区好的| 日韩欧美国产1| 午夜精品在线看| 欧美三级在线视频| 亚洲综合视频在线| 日本高清无吗v一区| 中文幕一区二区三区久久蜜桃| 麻豆91精品91久久久的内涵| 欧美日韩大陆一区二区| 亚洲一二三四在线观看| 91亚洲男人天堂| 亚洲欧洲日韩一区二区三区| 国产91精品一区二区麻豆网站| 精品嫩草影院久久| 麻豆成人久久精品二区三区小说| 欧美一区二区在线视频| 亚洲大片在线观看| 欧美天堂亚洲电影院在线播放| 一区二区三区四区不卡在线| 91色.com| 亚洲国产日韩a在线播放性色| 一本高清dvd不卡在线观看| 亚洲色图欧美激情| 91亚洲精品久久久蜜桃网站| 国产精品久久久久久久久久免费看| 国产成人自拍网| 欧美激情一区二区三区蜜桃视频| 黑人精品欧美一区二区蜜桃| 久久久青草青青国产亚洲免观| 国产一区免费电影| 中文字幕免费不卡| 色偷偷88欧美精品久久久| 一区二区三区视频在线观看| 欧美伊人精品成人久久综合97| 亚洲一区二区五区| 制服丝袜激情欧洲亚洲| 日本美女一区二区三区| 日韩精品一区二区三区在线播放| 精品综合久久久久久8888| 久久久久久日产精品| 成人av网站免费| 亚洲午夜免费电影| 欧美一激情一区二区三区| 激情六月婷婷综合| 亚洲欧洲成人精品av97| 在线看日本不卡| 视频一区视频二区在线观看| 精品国产露脸精彩对白| 粉嫩久久99精品久久久久久夜 | 国产精品伦理在线| 在线观看一区二区精品视频| 日韩av不卡在线观看| 久久精品水蜜桃av综合天堂| 色哟哟精品一区| 日本最新不卡在线| 中文字幕av不卡| 欧美日韩一区二区不卡| 国产一区美女在线| 一区二区在线电影| 欧美mv日韩mv国产| 91在线观看成人| 蜜臀国产一区二区三区在线播放| 中文乱码免费一区二区| 欧美日韩欧美一区二区| 国产成人8x视频一区二区 | 亚洲不卡在线观看| 久久亚洲综合色一区二区三区| 99久久精品99国产精品| 青青国产91久久久久久| 国产精品乱码一区二区三区软件| 欧美午夜不卡在线观看免费| 国产美女视频一区| 一个色综合av| 久久精品欧美日韩| 欧美日韩在线播放| 成人午夜免费电影| 久久综合综合久久综合| 亚洲综合在线第一页| 久久嫩草精品久久久精品| 欧美日韩国产天堂| 99精品久久免费看蜜臀剧情介绍| 免费成人在线网站| 亚洲综合丁香婷婷六月香| 久久久久久99精品| 7777精品伊人久久久大香线蕉最新版| 不卡欧美aaaaa| 国产麻豆精品95视频| 免播放器亚洲一区| 亚洲一区免费视频| 亚洲女人****多毛耸耸8|