string-list: optionally omit empty string pieces in string_list_split*()
Teach the unified split_string() machinery a new flag bit, STRING_LIST_SPLIT_NONEMPTY, to cause empty split pieces to be omitted from the resulting string list. Signed-off-by: Junio C Hamano <gitster@pobox.com>main
							parent
							
								
									f3a303aef0
								
							
						
					
					
						commit
						27531efa41
					
				| 
						 | 
				
			
			@ -294,6 +294,9 @@ static int append_one(struct string_list *list,
 | 
			
		|||
				break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((flags & STRING_LIST_SPLIT_NONEMPTY) && (end <= p))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (in_place) {
 | 
			
		||||
		*((char *)end) = '\0';
 | 
			
		||||
		string_list_append(list, p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -289,6 +289,8 @@ enum {
 | 
			
		|||
	 * it to the list
 | 
			
		||||
	 */
 | 
			
		||||
	STRING_LIST_SPLIT_TRIM = (1 << 0),
 | 
			
		||||
	/* omit adding empty string piece to the resulting list */
 | 
			
		||||
	STRING_LIST_SPLIT_NONEMPTY = (1 << 1),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int string_list_split_f(struct string_list *, const char *string,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,6 +92,13 @@ void test_string_list__split_f(void)
 | 
			
		|||
			      "foo", "bar", "baz", NULL);
 | 
			
		||||
	t_string_list_split_f("  a  b c  ", " ", 1, STRING_LIST_SPLIT_TRIM,
 | 
			
		||||
			      "a", "b c", NULL);
 | 
			
		||||
	t_string_list_split_f("::foo::bar:baz:", ":", -1, STRING_LIST_SPLIT_NONEMPTY,
 | 
			
		||||
			      "foo", "bar", "baz", NULL);
 | 
			
		||||
	t_string_list_split_f("foo:baz", ":", -1, STRING_LIST_SPLIT_NONEMPTY,
 | 
			
		||||
			      "foo", "baz", NULL);
 | 
			
		||||
	t_string_list_split_f("foo :: : baz", ":", -1,
 | 
			
		||||
			      STRING_LIST_SPLIT_NONEMPTY | STRING_LIST_SPLIT_TRIM,
 | 
			
		||||
			      "foo", "baz", NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void t_string_list_split_in_place_f(const char *data_, const char *delim,
 | 
			
		||||
| 
						 | 
				
			
			@ -125,6 +132,14 @@ void test_string_list__split_in_place_f(void)
 | 
			
		|||
				       "foo", "bar", "baz", NULL);
 | 
			
		||||
	t_string_list_split_in_place_f("  a  b c  ", " ", 1, STRING_LIST_SPLIT_TRIM,
 | 
			
		||||
				       "a", "b c", NULL);
 | 
			
		||||
	t_string_list_split_in_place_f("::foo::bar:baz:", ":", -1,
 | 
			
		||||
				       STRING_LIST_SPLIT_NONEMPTY,
 | 
			
		||||
				       "foo", "bar", "baz", NULL);
 | 
			
		||||
	t_string_list_split_in_place_f("foo:baz", ":", -1, STRING_LIST_SPLIT_NONEMPTY,
 | 
			
		||||
				       "foo", "baz", NULL);
 | 
			
		||||
	t_string_list_split_in_place_f("foo :: : baz", ":", -1,
 | 
			
		||||
				       STRING_LIST_SPLIT_NONEMPTY | STRING_LIST_SPLIT_TRIM,
 | 
			
		||||
				       "foo", "baz", NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_string_list__split(void)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue