DL_ERR _DL_ISO8583_MSG_AllocField ( DL_UINT16 iField, DL_UINT16 iSize, DL_ISO8583_MSG *ioMsg, DL_UINT8 **oPtr ) { DL_ERR err = kDL_ERR_NONE; DL_UINT8 *tmpPtr = NULL; *oPtr = NULL; if ( ioMsg->sPtrNext ) /* static mode */ { /* we cannot over-write an existing entry in static mode */ if ( NULL != ioMsg->field[iField].ptr ) /* error */ { return kDL_ERR_OTHER; } else /* ok */ { /* allocate from static buffer */ if ( (ioMsg->sPtrNext + iSize + 1) > ioMsg->sPtrEnd ) /* error */ { return kDL_ERR_OTHER; } else /* ok */ { ioMsg->field[iField].len = iSize; tmpPtr = ioMsg->sPtrNext; ioMsg->field[iField].ptr = tmpPtr; ioMsg->sPtrNext += iSize + 1; } } } else /* dynamic mode */ { err = DL_MEM_malloc(iSize+1,&tmpPtr); if ( !err ) { DL_MEM_free(ioMsg->field[iField].ptr); ioMsg->field[iField].len = iSize; ioMsg->field[iField].ptr = tmpPtr; } } *oPtr = tmpPtr; return err; }
void DL_ISO8583_MSG_Free ( DL_ISO8583_MSG *ioMsg ) { if ( NULL == ioMsg->sPtrNext ) /* dynamic mode */ { int i; for ( i=0; i<=kDL_ISO8583_MAX_FIELD_IDX ; i++ ) { /* free memory (if allocated) */ DL_MEM_free(ioMsg->field[i].ptr); } /* end-for(i) */ } /* init structure */ DL_MEM_memset((void*)ioMsg,0,sizeof(DL_ISO8583_MSG)); return; }