void ReadFixedTag(P_WBXML_INFO buffer, WBXML_TAG tag) { if (buffer) { if (BytesLeft(buffer) >= sizeof(WBXML_TAG)) { if ((*((WBXML_TAG*) buffer->m_curpos)) == tag) { buffer->m_curpos += sizeof(WBXML_TAG); } else { ParseError(ERR_TAG_NOT_FOUND); } } else { ParseError(ERR_END_OF_DATA); } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } }
void Read_mb_u_int32(P_WBXML_INFO buffer, P_WBXML_MB_U_INT32 result) { if (buffer && result) { int i; for (i = 0; i < MAX_MB_U_INT32_BYTES; i++) { if (BytesLeft(buffer) >= 1) { (*result)[i] = *(buffer->m_curpos); (buffer->m_curpos)++; if ( !( (*result)[i] & 0x80 ) ) break; } else { ParseError(ERR_END_OF_DATA); } } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } }
TInt CDescriptorDataSource::ReadBytesL(const TDesC8& aDescriptor) { TInt left = BytesLeft(); if (left) { // We have some excess to carry across into the next parse. iBuffer->Delete(0, iPosition); } else { // Otherwise remove all old data for efficiency // but don't compress the buffer iBuffer->Delete(0, iBuffer->Size()); } iPosition = 0; // Need to reflect any changes from the above Delete iBufferPtr.Set(iBuffer->Ptr(0)); iBuffer->InsertL(iBufferPtr.Length(), aDescriptor); // Need to reflect any changes from the above Insert iBufferPtr.Set(iBuffer->Ptr(0)); iBytesInBuffer = iBufferPtr.Length(); return aDescriptor.Length(); }
WBXML_TAG ReadCodepageTag (P_WBXML_INFO buffer, CP_TAG_TYPE type) { WBXML_TAG tag = 0; if (buffer) { if (BytesLeft(buffer) >= sizeof(WBXML_TAG)) { tag = *((WBXML_TAG*) buffer->m_curpos); switch (type) { case CP_TAG_TAG: buffer->m_curpos += sizeof(WBXML_TAG); break; case CP_TAG_ATTRSTART: if ((tag & 0x80) != 0x80) { buffer->m_curpos += sizeof(WBXML_TAG); } else { ParseError(ERR_TAG_NOT_FOUND); } break; case CP_TAG_ATTRVALUE: if ((tag & 0x80) == 0x80) { buffer->m_curpos += sizeof(WBXML_TAG); } else { ParseError(ERR_TAG_NOT_FOUND); } break; default: ParseError(ERR_TAG_NOT_FOUND); break; } } else { ParseError(ERR_END_OF_DATA); } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } return tag; }
void Read_termstr_rtn(P_WBXML_INFO buffer, char** result) { #define STRING_BLOCK_SIZE 256 int buflen = STRING_BLOCK_SIZE; char* strbuf = (char*) malloc(buflen); BOOL doubled = FALSE; int i = 0; if (!result) ParseError(ERR_INTERNAL_BAD_PARAM); while ( (BytesLeft(buffer) >= 1) && (*(buffer->m_curpos) != 0) ) { if (i>=buflen) { buflen += STRING_BLOCK_SIZE; strbuf = realloc(strbuf, buflen); } if (*(buffer->m_curpos) != '$' || doubled == TRUE) { strbuf[i] = *(buffer->m_curpos); buffer->m_curpos++; i++; if (doubled == TRUE) doubled = FALSE; } else { strbuf[i] = *(buffer->m_curpos); i++; doubled = TRUE; } } strbuf[i] = 0; buffer->m_curpos++; if (*result) free(*result); *result = strbuf; }
void Read_u_int8(P_WBXML_INFO buffer, P_WBXML_U_INT8 result) { if (buffer && result) { if (BytesLeft(buffer) >= 1) { *result = *(buffer->m_curpos); (buffer->m_curpos)++; } else { ParseError(ERR_END_OF_DATA); } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } }
void Read_bytes(P_WBXML_INFO buffer, WBXML_LENGTH length, P_WBXML_BYTES result) { if (buffer && result) { if (BytesLeft(buffer) >= length) { *result = (WBXML_BYTES) malloc(length*sizeof(unsigned char)); memcpy(*result, buffer->m_curpos, length); buffer->m_curpos += length; } else { ParseError(ERR_END_OF_DATA); } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } }
BOOL Is_zero(P_WBXML_INFO buffer) { BOOL result = FALSE; if (buffer) { if (BytesLeft(buffer) >= 1) { result = ((*buffer->m_curpos) == 0); } else { ParseError(ERR_END_OF_DATA); } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } return result; }
BOOL IsTag(P_WBXML_INFO buffer, WBXML_TAG tag) { BOOL result = FALSE; if (buffer) { if (BytesLeft(buffer) >= sizeof(WBXML_TAG)) { result = ((*((WBXML_TAG*) buffer->m_curpos)) == tag); } else { /* No more data, so nope, not this tag */ result = FALSE; } } else { ParseError(ERR_INTERNAL_BAD_PARAM); } return result; }
bool AtEnd() { // No bytes left and process no longer running, sounds like we're done to me. return BytesLeft() <= 0 && !IsRunning(); }