X-Git-Url: http://git.tdb.fi/?p=gldbg.git;a=blobdiff_plain;f=source%2Fgldecoder.c;h=81b1a43c128b8f3ddba292f86cc883dff2c9ff17;hp=f5540c09077930b0a1875031610df71008642dbb;hb=17fa41a4dfef75ce671bf71306929d1f5b91025a;hpb=1160900acac2a446deff897c2c8395df1cbc0fce diff --git a/source/gldecoder.c b/source/gldecoder.c index f5540c0..81b1a43 100644 --- a/source/gldecoder.c +++ b/source/gldecoder.c @@ -44,17 +44,14 @@ int gldecoder_decode(GlDecoder *dec, const char *data, unsigned len) packet_read_short(pkt, (short *)&func); - if(dec) - { - int ret = 0; - - if(func&0x8000) - ret = decode_gldfunc(dec, func, pkt); - else - ret = decode_func(dec, func, pkt); - if(ret<0) - return -1; - } + int ret = 0; + + if(func&0x8000) + ret = decode_gldfunc(dec, func, pkt); + else + ret = decode_func(dec, func, pkt); + if(ret<0) + return -1; return len; } @@ -70,6 +67,18 @@ static void decode_gldError(GlDecoder *dec, GlPacket *pkt) packet_read_int(pkt, (int *)&code); if(dec->gldError) dec->gldError(dec->user_data, code); + else if(dec->unhandled) + dec->unhandled(dec->user_data, FUNC_GLDERROR); +} + +static void decode_gldBreak(GlDecoder *dec, GlPacket *pkt) +{ + unsigned short func; + packet_read_short(pkt, (short *)&func); + if(dec->gldBreak) + dec->gldBreak(dec->user_data, func); + else if(dec->unhandled) + dec->unhandled(dec->user_data, FUNC_GLDBREAK); } static int decode_gldfunc(GlDecoder *dec, unsigned short func, GlPacket *pkt) @@ -77,6 +86,7 @@ static int decode_gldfunc(GlDecoder *dec, unsigned short func, GlPacket *pkt) switch(func) { case FUNC_GLDERROR: decode_gldError(dec, pkt); break; + case FUNC_GLDBREAK: decode_gldBreak(dec, pkt); break; default: return -1; } return 0;