add: if (!_s->s) {  DBG("DEBUG: parse_params: empty uri params, skipping\n"); return 0; }
context: int parse_params(str* _s, pclass_t _c, param_hooks_t* _h, param_t** _p){	param_t* t;	if (!_s || !_h || !_p) {		LOG(L_ERR, "parse_params(): Invalid parameter value\n");		return -1;	}	memset(_h, 0, sizeof(param_hooks_t));	*_p = 0;	while(1) {		t = (param_t*)pkg_malloc(sizeof(param_t));		if (t == 0) {			LOG(L_ERR, "parse_params(): No memory left\n");			goto error;		}		memset(t, 0, sizeof(param_t));		parse_param_name(_s, _c, _h, t);		trim_leading(_s);				if (_s->len == 0) { /* The last parameter without body */			goto ok;		}				if (_s->s[0] == '=') {			_s->s++;			_s->len--;			trim_leading(_s);			if (_s->len == 0) {				LOG(L_ERR, "parse_params(): Body missing\n");				goto error;			}			if (parse_param_body(_s, t) < 0) {				LOG(L_ERR, "parse_params(): Error while parsing param body\n");				goto error;			}			t->len = _s->s - t->name.s;			trim_leading(_s);			if (_s->len == 0) {				goto ok;			}		} else {			t->len = _s->s - t->name.s;		}		if (_s->s[0] == ',') goto ok; /* To be able to parse header parameters */		if (_s->s[0] == '>') goto ok; /* To be able to parse URI parameters */		if (_s->s[0] != ';') {			LOG(L_ERR, "parse_params(): Invalid character, ; expected\n");			goto error;		}		_s->s++;		_s->len--;		trim_leading(_s);				if (_s->len == 0) {			LOG(L_ERR, "parse_params(): Param name missing after ;\n");			goto error;		}		t->next = *_p;		*_p = t;	} error:	if (t) pkg_free(t);	free_params(*_p);	return -2; ok:	t->next = *_p;	*_p = t;	return 0;}