123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <string.h>
- #include "jam.h"
- s_JamSubPacket* JAM_NewSubPacket( void )
- {
- s_JamSubPacket* Sub_PS;
-
- Sub_PS = (s_JamSubPacket*) malloc( sizeof( s_JamSubPacket ) );
- if ( !Sub_PS )
- return NULL;
- Sub_PS->NumAlloc = 20;
- Sub_PS->NumFields = 0;
-
- Sub_PS->Fields = (s_JamSubfield**) calloc( Sub_PS->NumAlloc,
- sizeof( s_JamSubfield* ) );
- if ( !Sub_PS->Fields ) {
- free (Sub_PS);
- return NULL;
- }
- return Sub_PS;
- }
- int JAM_DelSubPacket( s_JamSubPacket* SubPack_PS )
- {
- uint32_t i;
- if (!SubPack_PS)
- return JAM_BAD_PARAM;
- for ( i=0; i < SubPack_PS->NumFields; i++ ) {
- s_JamSubfield* Field_PS = SubPack_PS->Fields[i];
- if ( Field_PS->Buffer )
- free( Field_PS->Buffer );
- free( Field_PS );
- }
- free( SubPack_PS->Fields );
- free( SubPack_PS );
- return 0;
- }
- s_JamSubfield* JAM_GetSubfield( s_JamSubPacket* SubPack_PS )
- {
- static s_JamSubPacket* LastPack_PS = NULL;
- static uint32_t NextIndex_I = 0;
- if ( SubPack_PS ) {
- LastPack_PS = SubPack_PS;
- NextIndex_I = 0;
- }
- if ( NextIndex_I < LastPack_PS->NumFields )
- return LastPack_PS->Fields[ NextIndex_I++ ];
- return NULL;
- }
- s_JamSubfield* JAM_GetSubfield_R( s_JamSubPacket* SubPack_PS , uint32_t* Count_PI)
- {
- if ( *Count_PI < SubPack_PS->NumFields )
- return SubPack_PS->Fields[ (*Count_PI)++ ];
- return NULL;
- }
- int JAM_PutSubfield( s_JamSubPacket* SubPack_PS, s_JamSubfield* Field_PS )
- {
- s_JamSubfield* NewField_PS;
- char* NewBuf_PC;
-
- if ( SubPack_PS->NumFields == SubPack_PS->NumAlloc ) {
- s_JamSubfield** Fields_PPS;
- SubPack_PS->NumAlloc *= 2;
- Fields_PPS = (s_JamSubfield**) realloc( SubPack_PS->Fields,
- SubPack_PS->NumAlloc *
- sizeof( s_JamSubfield* ) );
- if ( !Fields_PPS )
- return JAM_NO_MEMORY;
- SubPack_PS->Fields=Fields_PPS;
- }
-
-
- NewField_PS = (s_JamSubfield*) malloc( sizeof( s_JamSubfield ) );
- if ( !NewField_PS )
- return JAM_NO_MEMORY;
-
- if ( Field_PS->DatLen ) {
- NewBuf_PC = (char*) malloc( Field_PS->DatLen );
- if ( !NewBuf_PC ) {
- free (NewField_PS);
- return JAM_NO_MEMORY;
- }
- memcpy( NewBuf_PC, Field_PS->Buffer, Field_PS->DatLen );
- }
- else
- NewBuf_PC = NULL;
-
- NewField_PS->LoID = Field_PS->LoID;
- NewField_PS->HiID = Field_PS->HiID;
- NewField_PS->DatLen = Field_PS->DatLen;
- NewField_PS->Buffer = NewBuf_PC;
-
- SubPack_PS->Fields[ SubPack_PS->NumFields ] = NewField_PS;
- SubPack_PS->NumFields++;
- return 0;
- }
|