nbool wbxmlDecoder_decode(NWbxmlDecoder* decoder) { nbool result = N_FALSE; WBXMLParser *wbxml_parser = NULL; WBXMLContentHandler parse_handler = { NULL, NULL, wbxml_start_element, wbxml_end_element, wbxml_characters, NULL}; if (decoder->srcPos <= 0) return N_FALSE; wbxml_parser = wbxml_parser_create(); if (wbxml_parser) { WBXMLError ret = WBXML_OK; decoder->dstMax = decoder->srcMax * 2; decoder->dst = (char*)NBK_malloc(decoder->dstMax); decoder->dstPos = 0; #if DEBUG_DECODER dump_char(decoder->page, "decoding...", -1); dump_return(decoder->page); #endif wbxml_parser_set_user_data(wbxml_parser, decoder); wbxml_parser_set_content_handler(wbxml_parser, &parse_handler); ret = wbxml_parser_parse(wbxml_parser, decoder->src, decoder->srcPos); wbxml_parser_destroy(wbxml_parser); #if DEBUG_DECODER dump_char(decoder->page, "decoded!", -1); dump_int(decoder->page, decoder->srcPos); dump_int(decoder->page, decoder->dstPos); dump_return(decoder->page); #endif if (ret == WBXML_OK) result = N_TRUE; } return result; }
static void grow_buffer(uint8** buf, int* max, int length, void* page) { int size = BUFFER_GROW * ((length * 2 / BUFFER_GROW) + 1); *max += size; *buf = (uint8*)NBK_realloc(*buf, *max); #if DEBUG_DECODER dump_char(page, "grow buffer", -1); dump_int(page, *max); dump_return(page); #endif }
void wbxmlDecoder_addSourceData(NWbxmlDecoder* decoder, uint8* data, int length) { #if DEBUG_DECODER dump_char(decoder->page, "add data", -1); dump_int(decoder->page, length); dump_return(decoder->page); #endif if (decoder->srcMax - decoder->srcPos < length) grow_buffer(&decoder->src, &decoder->srcMax, length, decoder->page); NBK_memcpy(&decoder->src[decoder->srcPos], data, length); decoder->srcPos += length; }
void dump_bkod() { opcode_type opcode; int i, line; char text[50000]; char opcode_char; static int last_line = 0; // printf("at %08X\n",index); inst_start = index; line = find_linenum(index); if (line != last_line) { printf("*** Line %d\n", line); last_line = line; } opcode_char = get_byte(); memcpy(&opcode,&opcode_char,1); /* opcode = (opcode_type)get_byte(); can't get to compile */ switch (opcode.command) { case UNARY_ASSIGN : dump_unary_assign(opcode,text); break; case BINARY_ASSIGN : dump_binary_assign(opcode,text); break; case GOTO : dump_goto(opcode,text); break; case CALL : dump_call(opcode,text); break; case RETURN : dump_return(opcode,text); break; case DEBUG_LINE : dump_debug_line(opcode,text); break; default : sprintf(text,"INVALID"); break; } if (dump_hex) { printf("BKOD raw: "); for (i=0;i<index-inst_start;i++) print_hex_byte(file_mem[inst_start+i]); printf("\n"); } printf("@%08X: ",inst_start); printf("%s\n",text); }
void wbxmlDecoder_setSourceLength(NWbxmlDecoder* decoder, int length) { int size = 0; if (length > 0) size = BUFFER_GROW * ((length / BUFFER_GROW) + 1); else size = BUFFER_GROW; decoder->src = (uint8*)NBK_malloc(size); decoder->dstMax = size; #if DEBUG_DECODER dump_char(decoder->page, "init alloc", -1); dump_int(decoder->page, length); dump_int(decoder->page, decoder->srcMax); dump_return(decoder->page); #endif }