while (p = strchr(p, ',')) 
while ((p = strchr(p, ',')) != NULL) 
static Quantity **config_parse_modulation(const char *name, int line, const char *cp, int *num, int mod_type){	const char *p, *px, *err;	char buf[128], *delim;	Quantity **mod_list;	int i, j;	static const char * qtypestr[] = {"tremolo", "vibrato"};	static const uint16 qtypes[] = {		QUANTITY_UNIT_TYPE(TREMOLO_SWEEP), QUANTITY_UNIT_TYPE(TREMOLO_RATE), QUANTITY_UNIT_TYPE(DIRECT_INT),		QUANTITY_UNIT_TYPE(VIBRATO_SWEEP), QUANTITY_UNIT_TYPE(VIBRATO_RATE), QUANTITY_UNIT_TYPE(DIRECT_INT)	};		/* count num */	*num = 1, p = cp;	while (p = strchr(p, ','))		(*num)++, p++;	/* alloc */	mod_list = (Quantity **) safe_malloc((*num) * sizeof(Quantity *));	for (i = 0; i < *num; i++)		mod_list[i] = (Quantity *) safe_malloc(3 * sizeof(Quantity));	/* init */	for (i = 0; i < *num; i++)		for (j = 0; j < 3; j++)			INIT_QUANTITY(mod_list[i][j]);	buf[sizeof buf - 1] = '\0';	/* regist */	for (i = 0, p = cp; i < *num; i++, p++) {		px = strchr(p, ',');		for (j = 0; j < 3; j++, p++) {			if (*p == ':')				continue;			if ((delim = strpbrk(strncpy(buf, p, sizeof buf - 1), ":,")) != NULL)				*delim = '\0';			if (*buf != '\0' && (err = string_to_quantity(buf, &mod_list[i][j], qtypes[mod_type * 3 + j])) != NULL) {				ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: %s: parameter %d of item %d: %s (%s)",						name, line, qtypestr[mod_type], j+1, i+1, err, buf);				free_ptr_list(mod_list, *num);				mod_list = NULL;				*num = 0;				return NULL;			}			if (! (p = strchr(p, ':')))				break;			if (px && p > px)				break;		}		if (! (p = px))			break;	}	return mod_list;}
4357	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4357/64c3a98e5ef08ab323c2ea983ca497f2df9f9db2/timidity.c/buggy/timidity/timidity.c