All pastes #77859 Raw Edit

Stuff

public text v1 · immutable
·published 2006-07-03 14:24 UTC
rendered paste body
int ReadSockData( SOCKET sd_in, char **PtrToData )
{
   char         *TempPtr;
   char         *Buffer;
   char         *BufferInit;
   int          i = 0;
   int          j = 0;
   int          Total_Len = DMA_CHUNK_SIZE;   
   
   Buffer = malloc( DMA_CHUNK_SIZE );
   ErrorAsserter( 200, (Buffer == NULL), "Unable to Allocate memory" );
   
   i = 0;
   BufferInit = Buffer;
   while ( recv( sd_in, Buffer, 1, 0) >= 1 )
   {
      if ( i < DMA_CHUNK_SIZE )
      {
         i++;
         printf ("%c", *Buffer );
         Buffer++;
      }
      else
      {
         i = 0;
         Total_Len += DMA_CHUNK_SIZE;
         printf ("\n\n New Chunk Total Len: %d \n\n", Total_Len );
         TempPtr = malloc( Total_Len );
         ErrorAsserter( 800, (TempPtr == NULL), "Unable to allocate memory" );
         memcpy( TempPtr, BufferInit, Total_Len );
         Buffer = BufferInit;
         free( Buffer );
         
         Buffer = (TempPtr + Total_Len - DMA_CHUNK_SIZE);
         BufferInit = TempPtr;   
      }
   }
#ifdef __DEBUG__
   printf ("\nReceive complete.\a\n");
#endif
/*   Buffer[Total_Len + i] = '\0'; */
   j = ( Total_Len + i ) % DMA_CHUNK_SIZE;
   
   if(0 != j)
   {
      Total_Len = Total_Len - DMA_CHUNK_SIZE + i;
   }
   *PtrToData = malloc( Total_Len );
   ErrorAsserter( 201, (*PtrToData == NULL), "Unable to Allocate memory" );
   strncpy( *PtrToData, BufferInit, Total_Len );
   *PtrToData[Total_Len] = '\0';
   free ( BufferInit ); /* This was the problem*/
#ifdef __DEBUG_ENABLED__
   printf ( "\nReceived:\n%s", *PtrToData );
#endif
}