]> git.tdb.fi Git - gldbg.git/blobdiff - source/gldecoder.c
Query implementation limits on process startup
[gldbg.git] / source / gldecoder.c
index f5540c09077930b0a1875031610df71008642dbb..35a365a76fff1735a19069cb76a0c0078fea7f2f 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of gldbg
-Copyright © 2009-2010  Mikko Rasa, Mikkosoft Productions
-Distributed under the GPL
-*/
-
 #include <stdlib.h>
 #include <string.h>
 #include "functions.h"
@@ -44,17 +37,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 +60,20 @@ 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;
+       unsigned char flag;
+       packet_read_short(pkt, (short *)&func);
+       packet_read_char(pkt, (char *)&flag);
+       if(dec->gldBreak)
+               dec->gldBreak(dec->user_data, func, flag);
+       else if(dec->unhandled)
+               dec->unhandled(dec->user_data, FUNC_GLDBREAK);
 }
 
 static int decode_gldfunc(GlDecoder *dec, unsigned short func, GlPacket *pkt)
@@ -77,6 +81,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;