⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cms_wapoctstr.c

📁 wap 协议栈 包括1.2 和2.0 由c开发 基于brew平台
💻 C
字号:
/******************************************************************************

 C   M O D U L E   F I L E

 (c) Copyright MobileSoft Technology (NanJing) Co., LTD. 2001-2002
 ALL RIGHTS RESERVED
	
*******************************************************************************

 Project Name: WAP STACK Ver1.20

 Written By  : MobileSoft Technology

 File Name   : Cms_Malloc.c 

 Last Modify : 06/22/2002

******************************************************************************/

#include "string.h"

#include "Cms_WAPMalloc.h"
#include "Cms_WAPGWLIB.h"

//#include "cms_debug.h"

/*=============================================*/

Octstr *octstr_create_empty(CMS_VOID) 
{
	Octstr *ostr;
	
	ostr = (Octstr *)malloc((CMS_U32)sizeof(Octstr));
	ostr->data = NULL;
	ostr->size = 0;
	ostr->len = 0;
	
	return ostr;
}


/* Reserve space for at least 'size' octets */
static CMS_VOID octstr_grow(Octstr *ostr, CMS_S64 size) 
{	
	if(ostr)
	{
		if (size > ostr->size) 
		{
			ostr->data = (P_CMS_U8)Cms_WAPrealloc(ostr->data, ostr->size, &size);/*(unsigned char *)CMSReallocMemory(ostr->data, size);*/
			ostr->size = size;
		}
	}
	
}


Octstr *octstr_create(P_CMS_U8 cstr) 
{
	if(!cstr)
		return octstr_create_empty();
	return octstr_create_from_data((P_CMS_VOID)cstr, (CMS_S64)Cms_StrLen((const char*)cstr));
}


Octstr *octstr_create_from_data(P_CMS_VOID data, CMS_S64 len) 
{
	Octstr *ostr=NULL;
	
	ostr = octstr_create_empty();
	
	if(ostr != NULL)
	{	
		if (len > 0) 
		{
			ostr->len = len;
			ostr->size = len + 1;
			ostr->data = (P_CMS_U8)malloc((CMS_U64)ostr->size);
			memcpy(ostr->data, data, (CMS_U64)len);
			ostr->data[len] = '\0';
		}
	}		
	
	return ostr;
}

Octstr *OTA_octstr_create_from_data(P_CMS_VOID data, CMS_S64 len) 
{
	Octstr *ostr=NULL;
	
	ostr = octstr_create_empty();
	
	if(ostr != NULL)
	{	
		if (len > 0) 
		{
			ostr->len = len;
			ostr->size = len + 1;
			ostr->data = (P_CMS_U8)malloc((CMS_U64)ostr->size);
			memcpy(ostr->data, data, (CMS_U64)len);
			/* 内存省不掉的 */
			//tr->data = data;
			//tr->data[len] = '\0';
		}
	}		
	
	return ostr;
}

CMS_VOID octstr_destroy(Octstr *ostr) 
{
	if (ostr != NULL)
	{
		if (ostr->data != NULL)		
		{	
			free(ostr->data);
			ostr->data = NULL;
		}
		
		if (ostr != NULL)			
		{	
			free(ostr);
			ostr = NULL;
		}
	}
}


CMS_S64 octstr_len(Octstr *ostr)
{
	if (ostr == NULL)
		return 0;
	
	return ostr->len;
}


Octstr *octstr_copy(Octstr *ostr, CMS_S64 from, CMS_S64 len) 
{
	if (from >= ostr->len)
		return octstr_create_empty();
	
	if (from + len > ostr->len)
		len = ostr->len - from;
	
	return octstr_create_from_data(ostr->data + from, len);
}


Octstr *octstr_duplicate(Octstr *ostr) 
{
	if (ostr == NULL)
		return NULL;
	
	return octstr_create_from_data(ostr->data, ostr->len);
}


CMS_U8 octstr_get_char(Octstr *ostr, CMS_S64 pos) 
{
	if(!ostr)
		return 0;
	if (pos >= ostr->len)
		return -1;
	
	return ostr->data[pos];
}


CMS_VOID octstr_set_char(Octstr *ostr, CMS_S64 pos, CMS_U8 ch) 
{
	if(!ostr)
		return;
	if (pos < ostr->len)
		ostr->data[pos] = ch;
}


P_CMS_U8 octstr_get_cstr(Octstr *ostr)
{
	if(!ostr)
		return NULL;
	if (ostr->len == 0)
		return NULL;
	
	return ostr->data;
}

int octstr_insert_data(Octstr *ostr, CMS_S64 pos, P_CMS_U8 data, CMS_U32 len) 
{
	int old_size = 0;

	if (!ostr||!data||!len )
		return -1;
	
//	cms_trace("octstr_insert_data in \n");
//	cms_trace("octstr_insert_data in \n");
//	cms_trace("octstr_insert_data in \n");
//	cms_trace("octstr_insert_data in \n");
//	cms_trace("octstr_insert_data in \n");
	
	old_size = ostr->size;

	if(ostr->len + len + 1 > ostr->size)
	{
//		cms_trace("before grow\n");
//		cms_trace("before grow\n");
//		cms_trace("before grow\n");
		octstr_grow(ostr, ostr->len + len + 1);
		
		if(ostr->size == old_size)
		{
//			cms_trace("grow error\n");
//			cms_trace("grow error\n");
			//cms_trace("grow error\n
			return -1;
		}
	}
	
	if (ostr->len > pos)
	{
//		cms_trace("before memmove \n");
//		cms_trace("before memmove \n");
//		cms_trace("before memmove \n");
		memmove(ostr->data+pos+len, ostr->data+pos, (CMS_U32)(ostr->len - pos));
	}
//	cms_trace("before copy\n");
//	cms_trace("before copy\n");
//	cms_trace("before copy\n");
//	cms_trace("before copy\n");

	memcpy(ostr->data + pos, data, (CMS_U32)len);
	ostr->len += len;
	ostr->data[ostr->len] = '\0';

	return 1;	
}

CMS_VOID octstr_append_data(Octstr *ostr, P_CMS_U8 data, CMS_U32 len) 
{
	octstr_insert_data(ostr, ostr->len, data, len);
}


CMS_VOID octstr_append_cstr(Octstr *ostr, P_CMS_U8 cstr) 
{
	octstr_insert_data(ostr, ostr->len, cstr, Cms_StrLen((const char*)cstr));
}


CMS_VOID octstr_append_char(Octstr *ostr, CMS_U32 ch)
{
      CMS_U8 c = (CMS_U8)ch;

	octstr_insert_data(ostr, ostr->len, (P_CMS_U8)&c, 1);
}


CMS_VOID octstr_delete(Octstr *ostr1, CMS_S64 pos, CMS_S64 len) 
{

	if (pos > ostr1->len)
		pos = ostr1->len;
	
	if (pos + len > ostr1->len)
		len = ostr1->len - pos;
	
	if (len > 0) 
	{
		memmove(ostr1->data + pos, ostr1->data + pos + len,
			(CMS_U32)(ostr1->len - pos - len));
		ostr1->len -= len;
	        ostr1->data[ostr1->len] = '\0';
	}

}


CMS_VOID octstr_insert(Octstr *ostr1, Octstr *ostr2, CMS_S64  pos) 
{

	if (ostr2->len == 0)
		return;
	
	octstr_grow(ostr1, ostr1->len + ostr2->len + 1);
	memmove(ostr1->data + pos + ostr2->len, ostr1->data + pos,
		(CMS_U32)(ostr1->len - pos));
	memcpy(ostr1->data + pos, ostr2->data, (CMS_U32)ostr2->len);
	ostr1->len += ostr2->len;
	ostr1->data[ostr1->len] = '\0';
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -