Example #1
0
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;
}
Example #2
0
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;
}