📄 cms_wapoctstr.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 + -