rem: !strncasecmp(p-(*len),URL_MAILTO_STR,(*len)) ) {
add: !strncasecmp((char*)(p-(*len)),URL_MAILTO_STR,(*len))) {
context: static inline unsigned char *decode_mail_url(unsigned char *p,						unsigned char *p_end, char *url, unsigned char *nr_attr){	static char buf[ MAX_EMAIL_HDR_SIZE ];	char c;	char foo;	unsigned short hdr_len;	unsigned short *len;	int max_len;	int status;	/* init */	hdr_len = 0;	max_len = 0;	status = EMAIL_TO;	(*nr_attr) ++;	set_attr_type(p, TO_ATTR, p_end, error); /* attr type */	len = ((unsigned short*)(p));  /* attr val's len */	*len = 0; /* init the len */	p += 2;	/* parse the whole url */	do {		/* extract a char from the encoded url */		if (*url=='+') {			/* substitute a blank for a plus */			c=' ';			url++;		/* Look for a hex encoded character */		} else if ( (*url=='%') && *(url+1) && *(url+2) ) {			/* hex encoded - convert to a char */			c = hex2int(url[1]);			foo = hex2int(url[2]);			if (c==-1 || foo==-1) {				LOG(L_ERR, "ERROR:cpl_c:decode_mail_url: non-ASCII escaped "					"character in mail url [%.*s]\n", 3, url);				goto error;			}			c = c<<4 | foo;			url += 3;		} else {			/* normal character - just copy it without changing */			c = *url;			url++;		}		/* finally we got a character !! */		switch (c) {			case '?':				switch (status) {					case EMAIL_TO:						if (*len==0) {							LOG(L_ERR,"ERROR:cpl_c:decode_mail_url: empty TO "								"address found in MAIL node!\n");							goto error;						}						if (((*len)&0x0001)==1) p++;						*len = htons(*len);						hdr_len = 0;						status = EMAIL_HDR_NAME;						break;					default: goto parse_error;				}				break;			case '=':				switch (status) {					case EMAIL_HDR_NAME:						DBG("DEBUG:cpl_c:decode_mail_url: hdr [%.*s] found\n",							hdr_len,buf);						if ( hdr_len==BODY_EMAILHDR_LEN &&						strncasecmp(buf,BODY_EMAILHDR_STR,hdr_len)==0 ) {							/* BODY hdr found */							set_attr_type( p, BODY_ATTR, p_end, error);							max_len = MAX_EMAIL_BODY_SIZE;						} else if ( hdr_len==SUBJECT_EMAILHDR_LEN &&						strncasecmp(buf,SUBJECT_EMAILHDR_STR,hdr_len)==0 ) {							/* SUBJECT hdr found */							set_attr_type( p, SUBJECT_ATTR, p_end, error);							max_len = MAX_EMAIL_SUBJECT_SIZE;						} else {							DBG("DEBUG:cpl_c:decode_mail_url: unknown hdr ->"								" ignoring\n");							status = EMAIL_UNKNOWN_HDR_BODY;							break;						}						(*nr_attr) ++;						len = ((unsigned short*)(p));  /* attr val's len */						*len = 0; /* init the len */						p += 2;						status = EMAIL_KNOWN_HDR_BODY;						break;					default: goto parse_error;				}				break;			case '&':				switch (status) {					case EMAIL_KNOWN_HDR_BODY:						if (((*len)&0x0001)==1) p++;						*len = htons(*len);					case EMAIL_UNKNOWN_HDR_BODY:						hdr_len = 0;						status = EMAIL_HDR_NAME;						break;					default: goto parse_error;				}				break;			case 0:				switch (status) {					case EMAIL_TO:						if (*len==0) {							LOG(L_ERR,"ERROR:cpl_c:decode_mail_url: empty TO "								"address found in MAIL node!\n");							goto error;						}					case EMAIL_KNOWN_HDR_BODY:						if (((*len)&0x0001)==1) p++;						*len = htons(*len);					case EMAIL_UNKNOWN_HDR_BODY:						break;					default: goto parse_error;				}				break;			default:				switch (status) {					case EMAIL_TO:						(*len)++;						*(p++) = c;						if (*len==URL_MAILTO_LEN &&						!strncasecmp(p-(*len),URL_MAILTO_STR,(*len)) ) {							DBG("DEBUG:cpl_c:decode_mail_url: MAILTO: found at"								" the begining of TO -> removed\n");							p -= (*len);							*len = 0;						}						break;					case EMAIL_KNOWN_HDR_BODY:						if ((*len)<max_len) (*len)++;						*(p++) = c;						break;					case EMAIL_HDR_NAME:						if (hdr_len<MAX_EMAIL_HDR_SIZE) hdr_len++;						buf[hdr_len-1] = c;						break;					case EMAIL_UNKNOWN_HDR_BODY:						/* do nothing */						break;					default : goto parse_error;				}		}	}while(c!=0);	return p;parse_error:	LOG(L_ERR,"ERROR:cpl_c:decode_mail_url: unexpected char [%c] in state %d"		" in email url \n",*url,status);error:	return 0;}