📄 app_usedetails.c
字号:
{
return NULL;
}
}
}
}
end = start;
do
{
end++;
}while ((end-input_data) < dataLen && applib_is_valid_email_char(*end));
if ((end-input_data) <= dataLen)
{
char tmp = *end;
applib_address_node_struct *address;
*end = '\0';
address = (applib_address_node_struct*)mem_alloc_fn(sizeof(applib_address_node_struct));
if (address == NULL)
{
return NULL;
}
address->data = NULL;
address->dataType = APPLIB_ADDR_TYPE_URL;
address->next = NULL;
address->data = (char*)mem_alloc_fn(strlen(start) +1 );
strcpy(address->data, start);
*end = tmp;
address->next = applib_parse_contact_list_from_text(APPLIB_ADDR_TYPE_EMAIL,
mem_alloc_fn,
mem_free_fn,
end,
(dataLen-(end-input_data)));
return address;
}
else
{
return NULL;
}
}
}
return NULL;
}
else
{
return NULL;
}
break;
}
case APPLIB_ADDR_TYPE_PHONENUMBER:
{
if(input_data == NULL)
{
return NULL;
}
phnBuff=(char *)mem_alloc_fn(APPLIB_MAX_PHONE_NUM_LEN);
if (phnBuff==NULL)
{
return NULL;
}
phnBuffPos=phnBuff;
for(i = 0; i < dataLen; i++)
{
if(*tmpPtr=='+')
{
if(current_phn_len == 0)
{
current_phn_len += 1;
*phnBuffPos = *tmpPtr;
phnBuffPos += 1;
}
else
break;
}
else if((*tmpPtr >= '0') && (*tmpPtr <= '9'))
{
if(current_phn_len+1 >= APPLIB_MAX_PHONE_NUM_LEN)
break; //Phone umber is too long.
*phnBuffPos = *tmpPtr;
phnBuffPos += 1;
current_phn_len += 1;
}
else if((*tmpPtr == '(')||(*tmpPtr == ')')||(*tmpPtr == '-'))
{
}
else if((*tmpPtr == 'w')||(*tmpPtr == 'p'))
{
if(current_phn_len == 0)
{
}
else
{
if(current_phn_len+1 >= APPLIB_MAX_PHONE_NUM_LEN)
break; //Phone umber is too long.
current_phn_len += 1;
*phnBuffPos = *tmpPtr;
phnBuffPos += 1;
}
}
else
{
if(current_phn_len > 0)
break;
}
tmpPtr += 1;
}
if((*(phnBuffPos - 1) == 'w')||(*(phnBuffPos - 1) == 'p'))
{
phnBuffPos -= 1;
}
if(current_phn_len >= APPLIB_MIN_PHONE_NUM_LEN)
{
applib_address_node_struct *address;
*phnBuffPos='\0';
address = (applib_address_node_struct*)mem_alloc_fn(sizeof(applib_address_node_struct));
if (address == NULL)
{
return NULL;
}
address->data = NULL;
address->dataType = APPLIB_ADDR_TYPE_PHONENUMBER;
address->next = NULL;
address->data = (char*)mem_alloc_fn(strlen(phnBuff) +1 );
strcpy(address->data, phnBuff);
if(i != dataLen)
{
dataLen = dataLen - (tmpPtr - input_data);
address->next = applib_parse_contact_list_from_text(APPLIB_ADDR_TYPE_PHONENUMBER,
mem_alloc_fn,
mem_free_fn,
tmpPtr,
dataLen);
}
return address;
}
else
{
if(i != dataLen)
{
dataLen = dataLen - (tmpPtr - input_data);
return applib_parse_contact_list_from_text(APPLIB_ADDR_TYPE_PHONENUMBER,
mem_alloc_fn,
mem_free_fn,
tmpPtr,
dataLen);
}
else
{
return NULL;
}
}
break;
}
default:
return NULL;
}
}
/*****************************************************************************
* FUNCTION
* applib_remove_duplicate_address
* DESCRIPTION
* This function is used to remove duplicate addresses
* PARAMETERS
* addr_list [IN] Address list being checked
* mem_free_fn [IN] Memory free function
* RETURNS
* None
*****************************************************************************/
static void applib_remove_duplicate_address(applib_address_node_struct *addr_list, applib_mem_free_fn mem_free_fn)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
applib_address_node_struct *addr_list_tp1 = addr_list;
applib_address_node_struct *addr_list_tp2 = NULL;
applib_address_node_struct *addr_list_tp2_prv = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (addr_list == NULL)
{
return;
}
while(addr_list_tp1 != NULL)
{
addr_list_tp2 = addr_list_tp1->next;
addr_list_tp2_prv = addr_list_tp1;
while(addr_list_tp2 != NULL)
{
if (strcmp(addr_list_tp1->data, addr_list_tp2->data) == 0)
{
addr_list_tp2_prv->next = addr_list_tp2->next;
mem_free_fn(addr_list_tp2->data);
mem_free_fn(addr_list_tp2);
addr_list_tp2 = addr_list_tp2_prv->next;
}
else
{
addr_list_tp2_prv = addr_list_tp2;
addr_list_tp2 = addr_list_tp2->next;
}
}
addr_list_tp1 = addr_list_tp1->next;
}
}
/*****************************************************************************
* FUNCTION
* applib_free_address_list
* DESCRIPTION
* This interface function is used to free all addresses of one list
* PARAMETERS
* addr_list [IN] Addresses list
* mem_free_fn [IN] Memory free function
* RETURNS
* KAL_TRUE or KAL_FALSE
*****************************************************************************/
kal_bool applib_free_address_list(applib_address_node_struct *addr_list, applib_mem_free_fn mem_free_fn)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
applib_address_node_struct *addr_list_tp = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (addr_list == NULL || mem_free_fn == NULL)
{
return KAL_FALSE;
}
while(addr_list)
{
addr_list_tp = addr_list->next;
if (addr_list->data)
{
mem_free_fn(addr_list->data);
}
mem_free_fn(addr_list);
addr_list = addr_list_tp;
}
return KAL_TRUE;
}
/*****************************************************************************
* FUNCTION
* applib_get_address_list_from_text
* DESCRIPTION
* This interface function is used to get all addresses from one UTF8-encoded text
* PARAMETERS
* addr_type [IN] Address Types
* mem_alloc_fn [IN] Memory allication function
* mem_free_fn [IN] Memory free function
* input_data [IN] Input text data
* dataLen [IN] Length of input text data
* RETURNS
* addresses list (applib_address_node_struct)
*****************************************************************************/
applib_address_node_struct *applib_get_address_list_from_text( kal_int32 addr_type,
applib_mem_alloc_fn mem_alloc_fn,
applib_mem_free_fn mem_free_fn,
char *input_data,
kal_int32 dataLen)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
applib_address_node_struct *addr_list = NULL;
applib_address_node_struct *url_addr_list = NULL;
applib_address_node_struct *email_addr_list = NULL;
applib_address_node_struct *phone_addr_list = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Parse URLs*/
if (addr_type || APPLIB_ADDR_TYPE_URL)
{
url_addr_list = applib_parse_contact_list_from_text(
APPLIB_ADDR_TYPE_URL,
mem_alloc_fn,
mem_free_fn,
input_data,
dataLen);
/*Remove duplicate addresses*/
applib_remove_duplicate_address(url_addr_list, mem_free_fn);
addr_list = url_addr_list;
}
/* Parse Email*/
if (addr_type || APPLIB_ADDR_TYPE_EMAIL)
{
email_addr_list = applib_parse_contact_list_from_text(
APPLIB_ADDR_TYPE_EMAIL,
mem_alloc_fn,
mem_free_fn,
input_data,
dataLen);
/*Remove duplicate addresses*/
applib_remove_duplicate_address(email_addr_list, mem_free_fn);
if (addr_list == NULL)
{
addr_list = email_addr_list;
}
else if (email_addr_list != NULL)
{
/*Insert email address list to addr_list*/
applib_address_node_struct *addr_list_tmp = addr_list;
while(addr_list_tmp->next != NULL)
{
addr_list_tmp = addr_list_tmp->next;
}
addr_list_tmp->next = email_addr_list;
}
}
/* Parse Phone Number*/
if (addr_type || APPLIB_ADDR_TYPE_PHONENUMBER)
{
phone_addr_list = applib_parse_contact_list_from_text(
APPLIB_ADDR_TYPE_PHONENUMBER,
mem_alloc_fn,
mem_free_fn,
input_data,
dataLen);
/*Remove duplicate addresses*/
applib_remove_duplicate_address(phone_addr_list, mem_free_fn);
if (addr_list == NULL)
{
addr_list = phone_addr_list;
}
else if (phone_addr_list != NULL)
{
/*Insert phonenumber address list to addr_list*/
applib_address_node_struct *addr_list_tmp = addr_list;
while(addr_list_tmp->next != NULL)
{
addr_list_tmp = addr_list_tmp->next;
}
addr_list_tmp->next = phone_addr_list;
}
}
return addr_list;
}
#endif /* _APP_USEDETAILS_C */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -