rem: str* val_arr[ALL_LOG_FMT_LEN]; str atr_arr[ALL_LOG_FMT_LEN];
context: int acc_log_request( struct sip_msg *rq, struct hdr_field *to, 				str *txt, str *phrase){	int len;	char *log_msg;	char *p;	int attr_cnt;	int attr_len;	str* val_arr[ALL_LOG_FMT_LEN];	str atr_arr[ALL_LOG_FMT_LEN];	int i;	if (skip_cancel(rq)) return 1;	attr_cnt=fmt2strar( log_fmt, rq, to, phrase, 					&len, &attr_len, val_arr, atr_arr);	if (!attr_cnt) {		LOG(L_ERR, "ERROR: acc_log_request: fmt2strar failed\n");		return -1;	}	len+=attr_len+ACC_LEN+txt->len+A_EOL_LEN 		+attr_cnt*(A_SEPARATOR_LEN+A_EQ_LEN)-A_SEPARATOR_LEN;	log_msg=pkg_malloc(len);	if (!log_msg) {		LOG(L_ERR, "ERROR: acc_log_request: no mem\n");		return -1;	}	/* skip leading text and begin with first item's	 * separator ", " which will be overwritten by the	 * leading text later 	 * */	p=log_msg+(ACC_LEN+txt->len-A_SEPARATOR_LEN);	for (i=0; i<attr_cnt; i++) {		memcpy(p, A_SEPARATOR, A_SEPARATOR_LEN );		p+=A_SEPARATOR_LEN;		memcpy(p, atr_arr[i].s, atr_arr[i].len);		p+=atr_arr[i].len;		memcpy(p, A_EQ, A_EQ_LEN);		p+=A_EQ_LEN;		memcpy(p, val_arr[i]->s, val_arr[i]->len);		p+=val_arr[i]->len;	}	/* terminating text */	memcpy(p, A_EOL, A_EOL_LEN); p+=A_EOL_LEN;	/* leading text */	p=log_msg;	memcpy(p, ACC, ACC_LEN ); p+=ACC_LEN;	memcpy(p, txt->s, txt->len); p+=txt->len;	LOG(log_level, "%s", log_msg );	pkg_free(log_msg);	return 1;}