www.pudn.com > Net_apps.rar > str_function.c


/* 
********************************************************************************************************* 
* Copyright 2003 Service & Quality Technology CO., LTD. ALL RIGHTS RESERVED. 
* This software is provided under license and contains proprietary and 
* confidential material which is the property of SQ tech. 
* 
* FileName     : str_function.c 
* Description  : 
* 
* 
* Version control: 
*  $Revision: 0.1 $    Date: 2003/12/15 12:00:00  gofly 
*      first implemetation 
* 
********************************************************************************************************* 
*/ 
#include "..\include\L3\net_apps\str_function.h" 
 
/****************************************************************************/ 
/* FUNCTION NAME : extra_strncmp 
/* DESCRIPTION   :  strncmp str 
/* in PARAMETERS :  2 str 
/* 
/* out PARAMETERS:   a,b   => if a == b                   return 0 
/*                         => if a== NULL  ||  b == NULL  return 0  *** 
/*                         => if a!=b                     return 1 
/* 
/* RETURN VALUES : 
/* 
/* 
/* EXAMPLE	 : 
*****************************************************************************/ 
 
INT8U extra_strncmp(INT8U *a,INT8U *b) 
{ 
    INT32U  aLen, bLen, MaxLen; 
    if(a == NULL || b == NULL) 
        return 0; 
 
    aLen    =    strlen((const char*)a); 
    bLen    =    strlen((const char*)b); 
    MaxLen  =    (aLen > bLen) ? aLen :bLen; 
 
    if(aLen != bLen) 
        return 1; 
 
    if(strncmp((const char*)a,(const char*)b,(size_t)MaxLen)) 
        return 1; 
 
    return 0; 
 
} 
/* 
********************************************************************************************************* 
* ustrlen() 
* Description   : find the length of a string 
* 
* Arguments     : @s        The string to be sized 
* Returns       : 
********************************************************************************************************* 
*/ 
INT32U ustrlen(const char * s) 
{ 
    HINT8U *sc; 
    HINT8U *se = (HINT8U *) s; 
 
 
    for (sc = se; *sc != '\0'; ++sc) 
        /* nothing */; 
 
    return sc - se; 
} 
 
/****************************************************************************/ 
/* FUNCTION NAME :  s_f_replace_k_w 
/* DESCRIPTION   :   replace key word 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
*****************************************************************************/ 
// s_f  string function k_w  key word 
 
INT8S   s_f_replace_k_w(S_p_replace s) 
{    
    INT8U       search[64];//key word   64 keywordmaxsize 
    INT8U       temp[128]; //replace   128 replace maxsize 
    INT8U       *begin,*end,*p8,*p8t; 
    INT32U      *data; 
    INT16U      i;    
   
    data        =   (INT32U*)(&s->data);// for debug printf msg   ex: behalf show UID PID 
     
    if(s->source == NULL || s->tag == NULL || s->source_size <= 0 || s->tag_size <= 0 ) 
    { 
        #if DEBUG_S_F_REPLACE_K_W 
        printf("ERR: DEBUG_S_F_REPLACE_K_W R_PARAMETER_ER\n"); 
        #endif 
        return R_PARAMETER_ER; 
    } 
 
    begin = end = p8   =    s->source;  
    *s->tag =   0x00; 
 
     
    for(i=0; i < 60000; i++) 
    { 
        
        begin    =   (INT8U*) strchr((const INT8S*)p8 ,'$'); 
 
        if(begin == NULL) 
        {    
            break; 
        } 
 
        p8t = (INT8U*)memccpy(s->tag + strlen((const INT8S*)s->tag), end,'$',s->tag_size); 
 
        *(p8t -1) = 0x00; 
 
        end      =    (INT8U*) strchr((const INT8S*)begin,'='); 
 
        if(end == NULL) 
        { 
            break; 
        } 
 
        if(end - begin < 0 || end - begin >= sizeof(search)) 
        { 
            #if DEBUG_S_F_REPLACE_K_W 
            printf("ERR: DEBUG_S_F_REPLACE_K_W replace search size = %d >= %d\n",end-begin,sizeof(search)); 
            #endif 
            return R_ER; 
        } 
 
        p8t           =   (INT8U*) memccpy(search,begin+1,'=',sizeof(search)); 
        *(p8t - 1)    =    0x00; 
         
        #if DEBUG_S_F_REPLACE_K_W 
        printf("DEBUG_S_F_REPLACE_K_W search %s \n",search); 
        #endif 
        s->replace_law(search,temp,IOR,0);// 0 = root 
 
        strcpy(( INT8S*)((INT8S*)(s->tag+strlen((const INT8S*)s->tag))),(const INT8S*)temp); 
         
 
              
 
        p8            =    end  +   1;  
 
        if(*end == '=') 
        { 
         end++; 
        } 
     
    }     
 
 
    if(end != NULL && end <= s->source + s->source_size) 
    { 
        strcpy((INT8S*)(s->tag + strlen((const INT8S*)s->tag)),(const INT8S*)end); 
    } 
 
    return R_OK; 
} 
/*       example 
    s_replace.source                =   smtp_text_head; 
    s_replace.tag                   =   G_big_temp_buf; 
    s_replace.source_size           =   sizeof(smtp_text_head); 
    s_replace.tag_size              =   sizeof(G_big_temp_buf); 
    s_replace.data                  =   NULL; 
    s_replace.replace_law           =   smtp_replace_law; 
 
    s_f_replace_k_w(&s_replace); 
 
    INT8S smtp_replace_law(INT8U *search,INT8U *search_tag) 
{ 
    static     INT8U  r_g_b = 0; 
    *search_tag =   0x00; 
    if(search == NULL || search_tag == NULL) 
    { 
        return R_ER; 
    } 
 
    if(!strncmp((const INT8S*)search,(INT8S*)"SMTP_SUBJECT",strlen((const INT8S*)search))) 
    { 
        strcpy((INT8S*)search_tag,"SMTP_SUBJECT"); 
    } 
    else if(!strncmp((const INT8S*)search,(INT8S*)"SMTP_TIME",strlen((const INT8S*)search))) 
    { 
        strcpy((INT8S*)search_tag,"SMTP_TIME"); 
    } 
 
    #if DEBUG_S_F_REPLACE_K_W 
    printf("DEBUG_S_F_REPLACE_K_W REPLACE : %s %s\n", search, search_tag); 
    #endif 
    return R_OK; 
} 
*/