Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / KernelLand / Modules / IPStack / buffer.c
index b3c8093..3fe8b89 100644 (file)
@@ -5,6 +5,7 @@
  * buffer.c
  * - Scatter-gather handling
  */
+#define DEBUG  0
 #include "ipstack.h"
 #include "include/buffer.h"
 
@@ -23,7 +24,6 @@ struct sIPStackBuffer
                size_t  PostLength;
                tIPStackBufferCb        Cb;
                void    *CbArg;
-               // TODO: Callbacks?
        } SubBuffers[];
 };
 
@@ -63,6 +63,7 @@ void IPStack_Buffer_ClearBuffer(tIPStackBuffer *Buffer)
 
 void IPStack_Buffer_DestroyBuffer(tIPStackBuffer *Buffer)
 {
+       LOG("Called with %p by %p", Buffer, __builtin_return_address(0));
        ASSERT(Buffer);
        IPStack_Buffer_ClearBuffer(Buffer);
        Buffer->MaxSubBufffers = 0;
@@ -119,6 +120,13 @@ size_t IPStack_Buffer_GetData(tIPStackBuffer *Buffer, void *Dest, size_t MaxByte
        for( int i = Buffer->nSubBuffers; i -- && rem_space != 0; )
        {
                len = MIN(Buffer->SubBuffers[i].PreLength, rem_space);
+               #if !DISABLE_ASSERTS
+               if( !CheckMem(Buffer->SubBuffers[i].Data, len) ) {
+                       Log_Error("IPStack", "Buffer pre %i invalid (%p+0x%x)",
+                               i, Buffer->SubBuffers[i].Data, len);
+                       return 0;
+               }
+               #endif
                memcpy(dest,
                        Buffer->SubBuffers[i].Data,
                        len
@@ -132,10 +140,9 @@ size_t IPStack_Buffer_GetData(tIPStackBuffer *Buffer, void *Dest, size_t MaxByte
                        continue ;
                
                len = MIN(Buffer->SubBuffers[i].PostLength, rem_space);
-               memcpy(dest,
-                       (Uint8*)Buffer->SubBuffers[i].Data + Buffer->SubBuffers[i].PreLength,
-                       len
-                       );
+               void *ptr = (Uint8*)Buffer->SubBuffers[i].Data + Buffer->SubBuffers[i].PreLength;
+               ASSERT( CheckMem(ptr, len) );
+               memcpy(dest, ptr, len);
                dest += len;
                rem_space -= len;
        }

UCC git Repository :: git.ucc.asn.au