1 Star 0 Fork 0

tangtao / latserver

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
lxz_dstring.c 19.49 KB
一键复制 编辑 原始数据 按行查看 历史
tangtao 提交于 2021-03-16 15:34 . no commit message
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713
#include "lxz_config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lxz_types.h"
#include "os_port.h"
#include "lxz_runlog.h"
#include "lxz_debug.h"
#include "lxz_dstring.h"
#include "lxz_dbg_vmem.h"
#define LXZ_MIN_FREE_SIZE 1
/******************************************************************************/
// DESCRIPTION:
// new a buffer.
// PARAM: i_size_free, free size of space
// RETURN: p_new_buffer, NULL, fail; NON-NULL, success.
/******************************************************************************/
lxz_dstring_t* lxz_dstring_new(sint32 i_len_tryget)
{
lxz_dstring_t * p_new_dstring = NULL;
sint32 i_free_size = LXZ_MIN_FREE_SIZE;
p_new_dstring = (lxz_dstring_t *)malloc(sizeof(lxz_dstring_t));
if (NULL == p_new_dstring)
{
return p_new_dstring;
}
memset(p_new_dstring, 0, sizeof(lxz_dstring_t));
p_new_dstring->pt_string = (uint08 *)malloc(i_len_tryget + i_free_size);
if (NULL == p_new_dstring->pt_string)
{
free(p_new_dstring);
p_new_dstring = NULL;
return p_new_dstring;
}
memset(p_new_dstring->pt_string, 0, i_len_tryget + i_free_size);
p_new_dstring->it_length = 0;
p_new_dstring->it_size = i_len_tryget + i_free_size;
return p_new_dstring;
}
/******************************************************************************/
// DESCRIPTION:
// Append and save data into the specified buffer.
// Param: p_lsbuf, specified buffer
// Param: p_data_buf, a data buffer
// Param: i_str_len, the number of bytes data stored in the buffer
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_append(lxz_dstring_t* p_a_dstring, uint08* p_data_buf, sint32 i_str_len)
{
sint32 i_op_status = 0;
sint32 i_free_size = LXZ_MIN_FREE_SIZE;
if (NULL == p_a_dstring)
{
return i_op_status;
}
if (NULL == p_a_dstring->pt_string)
{
p_a_dstring->pt_string = (uint08 *)malloc(i_str_len + i_free_size);
if (NULL == p_a_dstring->pt_string)
{
return i_op_status;
}
i_op_status = 1;
p_a_dstring->it_size = i_str_len + i_free_size;
p_a_dstring->it_length = i_str_len;
memset(p_a_dstring->pt_string, 0, i_str_len + i_free_size);
memcpy(p_a_dstring->pt_string, p_data_buf, i_str_len);
}
else
{
if ((i_str_len + p_a_dstring->it_length)> (p_a_dstring->it_size - i_free_size))
{
sint32 u_total_len = 0;
uint08 * p_tmp_ptr = NULL;
u_total_len = i_str_len + p_a_dstring->it_length;
p_tmp_ptr = (uint08 *)malloc(u_total_len + i_free_size);
if (NULL == p_tmp_ptr)
{
return i_op_status;
}
i_op_status = 1;
memset(p_tmp_ptr, 0, u_total_len + i_free_size);
memcpy(p_tmp_ptr, p_a_dstring->pt_string, p_a_dstring->it_length);
memcpy(&(p_tmp_ptr[p_a_dstring->it_length]), p_data_buf, i_str_len);
free(p_a_dstring->pt_string);
p_a_dstring->pt_string = p_tmp_ptr;
p_a_dstring->it_length += i_str_len;
p_a_dstring->it_size = u_total_len + i_free_size;
}
else
{
i_op_status = 1;
memcpy(&(p_a_dstring->pt_string[p_a_dstring->it_length]), p_data_buf, i_str_len);
p_a_dstring->it_length += i_str_len;
}
}
return i_op_status;
}
/******************************************************************************/
// DESCRIPTION:
// Append and save data into the specified buffer.
// Param: p_lsbuf, specified buffer
// Param: p_data_buf, a data buffer
// Param: i_str_len, the number of bytes data stored in the buffer
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_merge(lxz_dstring_t* p_dst_dstring, lxz_dstring_t* p_src_dstring)
{
sint32 i_op_status = 0;
sint32 i_free_size = LXZ_MIN_FREE_SIZE;
if ((NULL == p_dst_dstring) || (NULL == p_src_dstring))
{
return i_op_status;
}
if ((NULL == p_src_dstring->pt_string) || (0 == p_src_dstring->it_size))
{
i_op_status = 1;
return i_op_status;
}
if (NULL == p_dst_dstring->pt_string)
{
p_dst_dstring->pt_string = (uint08 *)malloc(p_src_dstring->it_size + i_free_size);
if (NULL == p_dst_dstring->pt_string)
{
return i_op_status;
}
i_op_status = 1;
p_dst_dstring->it_size = p_src_dstring->it_size + i_free_size;
p_dst_dstring->it_size = p_src_dstring->it_size;
memset(p_dst_dstring->pt_string, 0, p_dst_dstring->it_size);
memcpy(p_dst_dstring->pt_string, p_src_dstring->pt_string, p_src_dstring->it_size);
}
else
{
if ((p_src_dstring->it_size + p_dst_dstring->it_size) > (p_dst_dstring->it_size - i_free_size))
{
sint32 u_total_len = 0;
uint08 * p_tmp_ptr = NULL;
u_total_len = p_src_dstring->it_size + p_dst_dstring->it_size;
p_tmp_ptr = (uint08 *)malloc(u_total_len + i_free_size);
if (NULL == p_tmp_ptr)
{
return i_op_status;
}
i_op_status = 1;
memset(p_tmp_ptr, 0, u_total_len + i_free_size);
memcpy(p_tmp_ptr, p_dst_dstring->pt_string, p_dst_dstring->it_size);
memcpy(&(p_tmp_ptr[p_dst_dstring->it_size]), p_src_dstring->pt_string, p_src_dstring->it_size);
free(p_dst_dstring->pt_string);
p_dst_dstring->pt_string = p_tmp_ptr;
p_dst_dstring->it_size = u_total_len + i_free_size;
p_dst_dstring->it_size = u_total_len;
}
else
{
i_op_status = 1;
memcpy(&(p_dst_dstring->pt_string[p_dst_dstring->it_size]), p_src_dstring->pt_string, p_src_dstring->it_size);
p_dst_dstring->it_size += p_src_dstring->it_size;
}
}
return i_op_status;
}
/******************************************************************************/
// DESCRIPTION:
// Get string from a dstring object.
// Param: [i]p_a_dstringing, a dstring object
// Param: [io]p_buf_data, string buffer
// Param: [i]i_buf_size, the size of the string buffer;
// Return: i_len_string, the length of the string.
// History:
/******************************************************************************/
sint32 lxz_dstring_get(lxz_dstring_t* p_a_dstringing, uint08* p_buf_data, sint32 i_buf_size)
{
sint32 i_len_string = 0;
if ((NULL == p_a_dstringing) || (NULL == p_a_dstringing->pt_string))
{
return i_len_string;
}
if (i_buf_size < p_a_dstringing->it_length)
{
return i_len_string;
}
memset(p_buf_data, 0, i_buf_size);
memcpy(p_buf_data, p_a_dstringing->pt_string, p_a_dstringing->it_length);
i_len_string = p_a_dstringing->it_length;
return i_len_string;
}
/******************************************************************************/
// DESCRIPTION:
// copy content of a dstring to another.
// Param: [io]p_dst_dstring,
// Param: [i]p_src_dstring,
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_copy(lxz_dstring_t* p_dst_dstring, lxz_dstring_t* p_src_dstring)
{
sint32 i_op_status = 0;
sint32 i_it_size = 0;
if (NULL == p_dst_dstring)
{
return i_op_status;
}
if ((NULL == p_src_dstring) || (NULL == p_src_dstring->pt_string))
{
return i_op_status;
}
i_it_size = p_src_dstring->it_size;
if (NULL == p_dst_dstring->pt_string)
{
p_dst_dstring->pt_string = (uint08 *)malloc(i_it_size);
if (NULL == p_dst_dstring->pt_string)
{
return i_op_status;
}
p_dst_dstring->it_size = i_it_size;
}
else
{
if (i_it_size > (p_dst_dstring->it_size))
{
free(p_dst_dstring->pt_string);
p_dst_dstring->pt_string = (uint08 *)malloc(i_it_size);
if (NULL == p_dst_dstring->pt_string)
{
return i_op_status;
}
p_dst_dstring->it_size = i_it_size;
}
}
i_op_status = 1;
memset(p_dst_dstring->pt_string, 0, i_it_size);
memcpy(p_dst_dstring->pt_string, p_src_dstring->pt_string, i_it_size);
p_dst_dstring->it_length = p_src_dstring->it_length;
return i_op_status;
}
/******************************************************************************/
// DESCRIPTION:
// clear the content of a dstring and release related resources.
// Param: [i]p_lsbuf,
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_clear(lxz_dstring_t* p_a_dstring)
{
sint32 i_op_status = 1;
if (NULL == p_a_dstring)
{
return i_op_status;
}
p_a_dstring->it_size = 0;
p_a_dstring->it_size = 0;
if (NULL != p_a_dstring->pt_string)
{
free(p_a_dstring->pt_string);
p_a_dstring->pt_string = NULL;
}
return i_op_status;
}
/******************************************************************************/
// DESCRIPTION:
// compare the content of two buffers,
// Param: p_dst_dstringfer, specified buffer
// Param: p_src_dstringfer, specified buffer
// Return: i_is_equal, 0, equal; 1, not equal.
// History:
/******************************************************************************/
sint32 lxz_dstring_compare(lxz_dstring_t* p_dst_dstring, lxz_dstring_t* p_src_dstring)
{
sint32 i_is_equal = 1;
if ((NULL == p_dst_dstring) || (NULL == p_src_dstring))
{
return i_is_equal;
}
if ((NULL == p_dst_dstring->pt_string) || (NULL == p_src_dstring->pt_string))
{
return i_is_equal;
}
if (p_dst_dstring->it_size != p_src_dstring->it_size)
{
return i_is_equal;
}
if (0 == memcmp(p_dst_dstring->pt_string, p_src_dstring->pt_string, p_dst_dstring->it_size))
{
i_is_equal = 0;
}
return i_is_equal;
}
/******************************************************************************/
// DESCRIPTION:
// delete the specified buffer
// Param: p_dst_dstringfer, specified buffer
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_delete(lxz_dstring_t* p_a_dstring)
{
sint32 i_op_status = 1;
if (NULL == p_a_dstring)
{
return i_op_status;
}
if (NULL != p_a_dstring->pt_string)
{
free(p_a_dstring->pt_string);
p_a_dstring->pt_string = NULL;
}
free(p_a_dstring);
return i_op_status;
}
/******************************************************************************/
// DESCRIPTION:
// delete the specified buffer
// Param: p_dst_dstringfer, specified buffer
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_upcase(lxz_dstring_t* p_a_dstring)
{
sint32 i_op_status = 1;
sint32 i = 0;
if (NULL == p_a_dstring)
{
return i_op_status;
}
if (NULL != p_a_dstring->pt_string)
{
while (i < p_a_dstring->it_length)
{
if ((p_a_dstring->pt_string[i] >= 'a') && (p_a_dstring->pt_string[i] <= 'z'))
{
p_a_dstring->pt_string[i] = p_a_dstring->pt_string[i] - 'a' + 'A';
}
i++;
}
p_a_dstring->pt_string = NULL;
}
return i_op_status;
}
/******************************************************************************/
// DESCRIPTION:
// compare the content of two buffers,
// Param: p_dst_dstringfer, specified buffer
// Param: p_src_dstringfer, specified buffer
// Return: i_is_equal, 0, equal; 1, not equal.
// History:
/******************************************************************************/
sint32 lxz_dstring_strncmp(lxz_dstring_t* p_dst_dstring, uint08* p_ascii_str, sint32 i_str_len)
{
sint32 i_is_equal = 1;
if (NULL == p_dst_dstring)
{
return i_is_equal;
}
if ((NULL == p_dst_dstring->pt_string) || (NULL == p_ascii_str))
{
return i_is_equal;
}
if (0 == memcmp(p_dst_dstring->pt_string, p_ascii_str, i_str_len))
{
i_is_equal = 0;
}
return i_is_equal;
}
sint32 lxz_dstring_deltail(lxz_dstring_t* p_dst_dstring, uint08 c)
{
sint32 i = 0;
if ((NULL == p_dst_dstring) || (NULL == p_dst_dstring->pt_string))
{
return 0;
}
i = p_dst_dstring->it_length - 1;
while (i > 0)
{
if (p_dst_dstring->pt_string[i] != c)
{
break;
}
i--;
}
p_dst_dstring->it_length = i + 1;
p_dst_dstring->pt_string[p_dst_dstring->it_length] = '\0';
return 1;
}
sint32 lxz_dstring_getlength(lxz_dstring_t* p_a_dstringing)
{
sint32 i_len_dstr = 0;
if ((NULL == p_a_dstringing) || (NULL == p_a_dstringing->pt_string))
{
return 0;
}
if (p_a_dstringing->it_length < p_a_dstringing->it_size)
{
i_len_dstr = p_a_dstringing->it_length;
}
return i_len_dstr;
}
sint32 lxz_dstring_framelength(lxz_dstring_t* p_dst_dstring, uint08 u_cur_endchar)
{
sint32 i = 0;
sint32 i_len_frame = 0;
sint32 i_posi_framehead = 0;
sint32 i_find_framehead = 0;
sint32 i_posi_frametail = 0;
sint32 i_find_frametail = 0;
if ((NULL == p_dst_dstring) || (NULL == p_dst_dstring->pt_string))
{
return 0;
}
/* 当没有数据或者只有一个字符时,没有意义 */
if (p_dst_dstring->it_length <= 1)
{
return 0;
}
i = 1;
while (i < p_dst_dstring->it_length)
{
if ((p_dst_dstring->pt_string[i - 1] == u_cur_endchar)
&& (p_dst_dstring->pt_string[i] != u_cur_endchar))
{
i_posi_framehead = i - 1;
i_find_framehead = 1;
break;
}
i++;
}
if (i_find_framehead != 1)
{
p_dst_dstring->it_length = 0;
return 0;
}
if (i_posi_framehead != 0)
{
i = i_posi_framehead;
memmove(&(p_dst_dstring->pt_string[0]), &(p_dst_dstring->pt_string[i]), p_dst_dstring->it_length - i);
p_dst_dstring->it_length = p_dst_dstring->it_length - i;
}
i = 1;
while (i < p_dst_dstring->it_length)
{
if ((p_dst_dstring->pt_string[i - 1] != u_cur_endchar)
&& (p_dst_dstring->pt_string[i] == u_cur_endchar))
{
i_posi_frametail = i;
i_find_frametail = 1;
i_len_frame = i + 1;
break;
}
i++;
}
return i_len_frame;
}
sint32 lxz_dstring_read(lxz_dstring_t* p_cur_dstring, uint08* p_buf_tryread, sint32 i_nb_tryread)
{
sint32 i_ret_len = 0;
sint32 i_str_len = 0;
sint32 i_free_size = LXZ_MIN_FREE_SIZE;
if ((NULL == p_cur_dstring) || (NULL == p_cur_dstring->pt_string))
{
return i_ret_len;
}
if (i_nb_tryread < p_cur_dstring->it_length)
{
memset(p_buf_tryread, 0, i_nb_tryread);
memcpy(p_buf_tryread, p_cur_dstring->pt_string, i_nb_tryread);
i_ret_len = i_nb_tryread;
memmove(&(p_cur_dstring->pt_string[0]), &(p_cur_dstring->pt_string[i_nb_tryread]), p_cur_dstring->it_length - i_nb_tryread);
p_cur_dstring->it_length = p_cur_dstring->it_length - i_nb_tryread;
}
return i_ret_len;
}
/******************************************************************************/
// DESCRIPTION:
// digital string or not.
// Param: [i]p_dst_dstring,
// Return: i_op_status, 0, no; 1, yes.
// History:
/******************************************************************************/
sint32 lxz_dstring_digital_isdigital(lxz_dstring_t* p_a_dstring)
{
sint32 i_is_digital = 0;
sint32 i_is_negative = 0;
sint08 i_1st_char = 0;
sint32 i = 0;
sint32 i_len_string = 0;
sint32 i_nb_dots = 0;
if ((NULL == p_a_dstring) || (NULL == p_a_dstring->pt_string))
{
return i_is_digital;
}
i_len_string = p_a_dstring->it_length;
if (i_len_string <= 0)
{
return i_is_digital;
}
i_1st_char = p_a_dstring->pt_string[0];
if (i_len_string == 1)
{
if ((i_1st_char < '0') || (i_1st_char > '9'))
{
return i_is_digital;
}
else
{
i_is_digital = 1;
return i_is_digital;
}
}
if ('.' == i_1st_char)
{
return i_is_digital;
}
i = 0;
if ('-' == i_1st_char)
{
i = 1;
i_is_negative = 1;
}
i_is_digital = 1;
while (i < i_len_string)
{
if ((p_a_dstring->pt_string[i] < '0') || (p_a_dstring->pt_string[i] > '9'))
{
if ('.' != p_a_dstring->pt_string[i])
{
i_is_digital = 0;
break;
}
i_nb_dots = i_nb_dots + 1;
if (i_nb_dots > 1)
{
i_is_digital = 0;
break;
}
}
i = i + 1;
}
if ((i_is_digital == 1) && (i_is_negative == 1))
{
i_is_digital = -1;
}
return i_is_digital;
}
/******************************************************************************/
// DESCRIPTION:
// copy content of a dstring to another.
// Param: [io]p_dst_dstring,
// Param: [i]p_src_dstring,
// Return: i_op_status, 0, fail; 1, success.
// History:
/******************************************************************************/
sint32 lxz_dstring_add(lxz_dstring_t* p_dst_dstring, lxz_dstring_t* p_src_dstring)
{
sint32 i_op_status = 0;
sint32 i_dst_isdigital = 0;
sint32 i_src_isdigital = 0;
sint32 i_len_dst_integer = 0;
sint32 i_len_dst_decimal = 0;
sint32 i_len_src_integer = 0;
sint32 i_len_src_decimal = 0;
if ((NULL == p_dst_dstring) || (NULL == p_dst_dstring->pt_string))
{
return i_op_status;
}
if ((NULL == p_src_dstring) || (NULL == p_src_dstring->pt_string))
{
return i_op_status;
}
i_dst_isdigital = lxz_dstring_digital_isdigital(p_dst_dstring);
if (i_dst_isdigital == 0)
{
return i_op_status;
}
i_src_isdigital = lxz_dstring_digital_isdigital(p_src_dstring);
if (i_src_isdigital == 0)
{
return i_op_status;
}
if (i_dst_isdigital == i_src_isdigital)
{
if (i_dst_isdigital == 1)
{
}
else
{
}
}
else
{
if (i_dst_isdigital == 1)
{
}
else
{
}
}
return i_op_status;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/cyctspace/latserver.git
git@gitee.com:cyctspace/latserver.git
cyctspace
latserver
latserver
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891