rem: unsigned char  *p;
add: char  *p;
context: inline unsigned char *run_mail( struct cpl_interpreter *intr ){	unsigned short attr_name;	unsigned short n;	unsigned char  *p;	str subject = {0,0};	str body    = {0,0};	str to      = {0,0};	int i;	/* sanity check */	if (NR_OF_KIDS(intr->ip)>1) {		LOG(L_ERR,"ERROR:cpl_c:run_mail: MAIL node suppose to have max one"			" child, not %d!\n",NR_OF_KIDS(intr->ip));		goto script_error;	}	/* read the attributes of the MAIL node*/	for( i=NR_OF_ATTR(intr->ip),p=ATTR_PTR(intr->ip) ; i>0 ; i-- ) {		get_basic_attr(p, attr_name, n, intr, script_error);		switch (attr_name) {			case TO_ATTR:				get_str_attr(p, to.s, n, intr, script_error,0);				to.len = n;				break;			case SUBJECT_ATTR:				get_str_attr(p, subject.s, n, intr, script_error,0);				subject.len = n;				break;			case BODY_ATTR:				get_str_attr(p, body.s, n, intr, script_error,0);				body.len = n;				break;			default:				LOG(L_ERR,"ERROR:run_mail: unknown attribute "					"(%d) in MAIL node\n",attr_name);				goto script_error;		}	}	if (to.len==0) {		LOG(L_ERR,"ERROR:cpl_c:run_mail: email has an empty TO hdr!\n");		goto script_error;	}	if (body.len==0 && subject.len==0) {		LOG(L_WARN,"WARNING:cpl_c:run_mail: I refuse to send email with no "			"body and no subject -> skipping...\n");		goto done;	}	/* duplicate the attrs in shm memory */	p = (char*)shm_malloc( to.len + subject.len + body.len );	if (!p) {		LOG(L_ERR,"ERROR:cpl_c:run_mail: no more shm memory!\n");		goto runtime_error;	}	/* copy the TO */	memcpy( p, to.s, to.len );	to.s = p;	p += to.len;	/* copy the subject */	if (subject.len) {		memcpy( p, subject.s, subject.len );		subject.s = p;		p += subject.len;	}	/* copy the body */	if (body.len) {		memcpy( p, body.s, body.len );		body.s = p;		p += body.len;	}	/* send the command */	write_cpl_cmd( CPL_MAIL_CMD, &to, &subject, &body);done:	return get_first_child(intr->ip);runtime_error:	return CPL_RUNTIME_ERROR;script_error:	return CPL_SCRIPT_ERROR;}