- if( *p == '=' || *p == '{' )
- {
- const char *end;
- bool b_keep_brackets = (*p == '{');
-
- if( *p == '=' ) p++;
-
- end = _get_chain_end( p );
- if( end <= p )
- {
- cfg.psz_value = NULL;
- }
- else
- {
- /* Skip heading and trailing spaces.
- * This ain't necessary but will avoid simple
- * user mistakes. */
- SKIPSPACE( p );
- }
-
- if( end <= p )
- {
- cfg.psz_value = NULL;
- }
- else
- {
- if( *p == '\'' || *p == '"' ||
- ( !b_keep_brackets && *p == '{' ) )
- {
- p++;
-
- if( *(end-1) != '\'' && *(end-1) == '"' )
- SKIPTRAILINGSPACE( p, end );
-
- if( end - 1 <= p ) cfg.psz_value = NULL;
- else cfg.psz_value = strndup( p, end -1 - p );
- }
- else
- {
- SKIPTRAILINGSPACE( p, end );
- if( end <= p ) cfg.psz_value = NULL;
- else cfg.psz_value = strndup( p, end - p );
- }
- }
-
- p = end;
- SKIPSPACE( p );
- }
- else
- {
- cfg.psz_value = NULL;
- }
-
- cfg.p_next = NULL;
- if( p_cfg )
- {
- p_cfg->p_next = malloc( sizeof( config_chain_t ) );
- memcpy( p_cfg->p_next, &cfg, sizeof( config_chain_t ) );
+ /* Parse the parameters */
+ psz_chain += strspn( psz_chain, " \t" );
+ if( *psz_chain == '{' )
+ {
+ /* Parse all name=value[,] elements */
+ do
+ {
+ psz_chain++; /* skip previous delimiter */
+ psz_chain += strspn( psz_chain, " \t" );