Thread

  1. xslt_process with more than ten parameters - patch

    Pavel Stehule <pavel.stehule@gmail.com> — 2010-05-03T13:14:34Z

    Hello
    
    One Czech pg user reported problems with function xslt_process. This
    function is coded with ten parameters limit.
    
    Attached patch add support to unlimited number of parameters.
    
    const char **
    parse_params(text *paramstr)
    {
    	char	   *pos;
    	char	   *pstr;
    	char	   *nvsep = "=";
    	char	   *itsep = ",";
    	const char **params;
    	int	nparams;
    	int	mparams;		/* max params */
    	
    	pstr = text_to_cstring(paramstr);
    	
    	mparams = INIT_PARAMS;
    	params = (const char **) palloc(INIT_PARAMS * sizeof(char *) + 1);
    
    	pos = pstr;
    	nparams = 0;
    	while (*pos != '\0')
    	{
    		if (nparams >= mparams)
    		{
    			/* extend params params */
    			mparams += EXTEND_PARAMS;
    			params = (const char **) repalloc(params, mparams * sizeof(char *) + 1);
    		}
    		params[nparams++] = pos;
    		pos = strstr(pos, nvsep);
    		if (pos != NULL)
    		{
    			*pos = '\0';
    			pos++;
    		}
    		else
    		{
    			/* No equal sign, so ignore this "parameter" */
    			/* We'll reset params[i] to NULL below the loop */
    			nparams--;
    			break;
    		}
    
    		/* since MAXPARAMS is even, we still have i < MAXPARAMS */
    		params[nparams++] = pos;
    		pos = strstr(pos, itsep);
    		if (pos != NULL)
    		{
    			*pos = '\0';
    			pos++;
    		}
    		else
    			break;
    	}
    
    	params[nparams] = NULL;
    
    	return params;
    }
    
    Regards
    Pavel Stehule