⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cookie.cpp

📁 很好用的ftp源码
💻 CPP
字号:
/*****************************************************************************
 *
 *      cookies.cpp - Take care of the status bar.
 *
 *****************************************************************************/

#include "priv.h"
#include "cookie.h"

int CCookieList::_FreeStringEnum(LPVOID pString, LPVOID pData)
{
    LPTSTR pszString = (LPTSTR) pString;
    Str_SetPtr(&pszString, NULL);

    return 1;
}

DWORD CCookieList::_Find(LPCTSTR pszString)
{
    DWORD dwCookie = -1;        // -1 means not found.
    DWORD dwIndex;
    DWORD dwSize = DPA_GetPtrCount(m_hdpa);

    for (dwIndex = 0; dwIndex < dwSize; dwIndex++)
    {
        LPCTSTR pszCurrent = (LPCTSTR) DPA_FastGetPtr(m_hdpa, dwIndex);
        if (pszCurrent && !StrCmp(pszCurrent, pszString))
        {
            dwCookie = dwIndex;
            break;          // Found, it's already in the list so recycle.
        }
    }

    return dwCookie;
}

DWORD CCookieList::GetCookie(LPCTSTR pszString)
{
    ENTERCRITICAL;
    DWORD dwCookie = -1;

    if (!EVAL(pszString))
        return -1;

    if (!m_hdpa)
        m_hdpa = DPA_Create(10);
    
    if (EVAL(m_hdpa))
    {
        dwCookie = _Find(pszString);
        // Did we not find it in the list?
        if (-1 == dwCookie)
        {
            LPTSTR pszCopy = NULL;

            dwCookie = DPA_GetPtrCount(m_hdpa);
            Str_SetPtr(&pszCopy, pszString);
            DPA_AppendPtr(m_hdpa, pszCopy);
        }
    }
    LEAVECRITICAL;

    return dwCookie;
}

HRESULT CCookieList::GetString(DWORD dwCookie, LPTSTR pszString, DWORD cchSize)
{
    ENTERCRITICAL;
    HRESULT hr = S_FALSE;

    if (m_hdpa &&
       (dwCookie < (DWORD)DPA_GetPtrCount(m_hdpa)))
    {
        LPCTSTR pszCurrent = (LPCTSTR) DPA_FastGetPtr(m_hdpa, dwCookie);

        StrCpyN(pszString, pszCurrent, cchSize);
        hr = S_OK;
    }

    LEAVECRITICAL;
    return hr;
}



/****************************************************\
    Constructor
\****************************************************/
CCookieList::CCookieList()
{
    DllAddRef();

    // This needs to be allocated in Zero Inited Memory.
    // Assert that all Member Variables are inited to Zero.
    ASSERT(!m_hdpa);

    LEAK_ADDREF(LEAK_CCookieList);
}


/****************************************************\
    Destructor
\****************************************************/
CCookieList::~CCookieList(void)
{
    ENTERCRITICAL;
    if (m_hdpa)
        DPA_DestroyCallback(m_hdpa, _FreeStringEnum, NULL);
    LEAVECRITICAL;

    ASSERTNONCRITICAL;

    DllRelease();
    LEAK_DELREF(LEAK_CCookieList);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -