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

📄 app_usedetails.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
                                    {
                                        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 + -