Return Type | Function name | Arguments |
---|---|---|
hzString& | hzString::UrlDecode | (void) |
Declared in file: hzString.h
Defined in file : hzString.cpp
Function Logic:
Function body:
hzString& hzString::UrlDecode (void) { _hzfunc("hzString::UrlDecode") ; _strItem* thisCtl ; _strItem* destCtl ; char* i ; char* j ; uint32_t destAddr ; uint32_t newLen = 0; uint32_t val ; if (!m_addr) return *this ; thisCtl = (_strItem*) _strXlate(m_addr) ; for (i = thisCtl->_data() ; *i ; i++) { if (*i == CHAR_PERCENT && IsHex(i[1])&& IsHex(i[2])) i += 2; newLen++ ; } if (newLen == thisCtl->_getSize()) return *this ; destAddr = _strAlloc(newLen) ; destCtl = (_strItem*) _strXlate(destAddr) ; destCtl->_setSize(newLen) ; destCtl->m_copy = 1; for (j = destCtl->_data(), i = thisCtl->_data() ; *i ; i++) { if (*i == CHAR_PERCENT) { if (IsHex(i[1])&& IsHex(i[2])) { i++ ; val = (*i >&eq;''0''&&*i <&eq;''9''?*i-''0'':*i >&eq; ''A''&&*i<&eq; ''F''?*i+10-''A'':*i>&eq;''a''&&*i<&eq;''f''?*i+10-''a'':0); val *= 16; i++ ; val += (*i >&eq;''0''&&*i <&eq;''9''?*i-''0'':*i >&eq; ''A''&&*i<&eq; ''F''?*i+10-''A'':*i>&eq;''a''&&*i<&eq;''f''?*i+10-''a'':0); *j++ = (char) val ; continue ; } } *j++ = *i ; } if (thisCtl->m_copy && thisCtl->m_copy < 50) { if (!_hzGlobal_MT) { thisCtl->m_copy-- ; if (!thisCtl->m_copy) _strFree(m_addr, thisCtl->_getSize()) ; } else { thisCtl->m_copy-- ; if (!thisCtl->m_copy) _strFree(m_addr, thisCtl->_getSize()) ; } } m_addr = destAddr ; return *this ; }