Skip to content

Commit 0126d89

Browse files
committed
Merge branch 'sj/string-list-typefix' into seen
Code and test clean-up around string-list API. * sj/string-list-typefix: u-string-list: move "remove duplicates" test to "u-string-list.c" u-string-list: move "filter string" test to "u-string-list.c" u-string-list: move "test_split_in_place" to "u-string-list.c" u-string-list: move "test_split" into "u-string-list.c" string-list: fix sign compare warnings
2 parents a754dde + 608f013 commit 0126d89

File tree

6 files changed

+253
-256
lines changed

6 files changed

+253
-256
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,7 @@ CLAR_TEST_SUITES += u-prio-queue
13671367
CLAR_TEST_SUITES += u-reftable-tree
13681368
CLAR_TEST_SUITES += u-strbuf
13691369
CLAR_TEST_SUITES += u-strcmp-offset
1370+
CLAR_TEST_SUITES += u-string-list
13701371
CLAR_TEST_SUITES += u-strvec
13711372
CLAR_TEST_SUITES += u-trailer
13721373
CLAR_TEST_SUITES += u-urlmatch-normalization

string-list.c

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#define DISABLE_SIGN_COMPARE_WARNINGS
2-
31
#include "git-compat-util.h"
42
#include "string-list.h"
53

@@ -41,16 +39,16 @@ static int get_entry_index(const struct string_list *list, const char *string,
4139
}
4240

4341
/* returns -1-index if already exists */
44-
static int add_entry(int insert_at, struct string_list *list, const char *string)
42+
static int add_entry(struct string_list *list, const char *string)
4543
{
4644
int exact_match = 0;
47-
int index = insert_at != -1 ? insert_at : get_entry_index(list, string, &exact_match);
45+
int index = get_entry_index(list, string, &exact_match);
4846

4947
if (exact_match)
5048
return -1 - index;
5149

5250
ALLOC_GROW(list->items, list->nr+1, list->alloc);
53-
if (index < list->nr)
51+
if ((size_t)index < list->nr)
5452
MOVE_ARRAY(list->items + index + 1, list->items + index,
5553
list->nr - index);
5654
list->items[index].string = list->strdup_strings ?
@@ -63,7 +61,7 @@ static int add_entry(int insert_at, struct string_list *list, const char *string
6361

6462
struct string_list_item *string_list_insert(struct string_list *list, const char *string)
6563
{
66-
int index = add_entry(-1, list, string);
64+
int index = add_entry(list, string);
6765

6866
if (index < 0)
6967
index = -1 - index;
@@ -116,7 +114,7 @@ struct string_list_item *string_list_lookup(struct string_list *list, const char
116114
void string_list_remove_duplicates(struct string_list *list, int free_util)
117115
{
118116
if (list->nr > 1) {
119-
int src, dst;
117+
size_t src, dst;
120118
compare_strings_fn cmp = list->cmp ? list->cmp : strcmp;
121119
for (src = dst = 1; src < list->nr; src++) {
122120
if (!cmp(list->items[dst - 1].string, list->items[src].string)) {
@@ -134,8 +132,8 @@ void string_list_remove_duplicates(struct string_list *list, int free_util)
134132
int for_each_string_list(struct string_list *list,
135133
string_list_each_func_t fn, void *cb_data)
136134
{
137-
int i, ret = 0;
138-
for (i = 0; i < list->nr; i++)
135+
int ret = 0;
136+
for (size_t i = 0; i < list->nr; i++)
139137
if ((ret = fn(&list->items[i], cb_data)))
140138
break;
141139
return ret;
@@ -144,8 +142,8 @@ int for_each_string_list(struct string_list *list,
144142
void filter_string_list(struct string_list *list, int free_util,
145143
string_list_each_func_t want, void *cb_data)
146144
{
147-
int src, dst = 0;
148-
for (src = 0; src < list->nr; src++) {
145+
size_t dst = 0;
146+
for (size_t src = 0; src < list->nr; src++) {
149147
if (want(&list->items[src], cb_data)) {
150148
list->items[dst++] = list->items[src];
151149
} else {
@@ -171,13 +169,12 @@ void string_list_remove_empty_items(struct string_list *list, int free_util)
171169
void string_list_clear(struct string_list *list, int free_util)
172170
{
173171
if (list->items) {
174-
int i;
175172
if (list->strdup_strings) {
176-
for (i = 0; i < list->nr; i++)
173+
for (size_t i = 0; i < list->nr; i++)
177174
free(list->items[i].string);
178175
}
179176
if (free_util) {
180-
for (i = 0; i < list->nr; i++)
177+
for (size_t i = 0; i < list->nr; i++)
181178
free(list->items[i].util);
182179
}
183180
free(list->items);
@@ -189,13 +186,12 @@ void string_list_clear(struct string_list *list, int free_util)
189186
void string_list_clear_func(struct string_list *list, string_list_clear_func_t clearfunc)
190187
{
191188
if (list->items) {
192-
int i;
193189
if (clearfunc) {
194-
for (i = 0; i < list->nr; i++)
190+
for (size_t i = 0; i < list->nr; i++)
195191
clearfunc(list->items[i].util, list->items[i].string);
196192
}
197193
if (list->strdup_strings) {
198-
for (i = 0; i < list->nr; i++)
194+
for (size_t i = 0; i < list->nr; i++)
199195
free(list->items[i].string);
200196
}
201197
free(list->items);

t/helper/test-string-list.c

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,9 @@
1-
#define DISABLE_SIGN_COMPARE_WARNINGS
2-
31
#include "test-tool.h"
42
#include "strbuf.h"
53
#include "string-list.h"
64

7-
/*
8-
* Parse an argument into a string list. arg should either be a
9-
* ':'-separated list of strings, or "-" to indicate an empty string
10-
* list (as opposed to "", which indicates a string list containing a
11-
* single empty string). list->strdup_strings must be set.
12-
*/
13-
static void parse_string_list(struct string_list *list, const char *arg)
14-
{
15-
if (!strcmp(arg, "-"))
16-
return;
17-
18-
(void)string_list_split(list, arg, ':', -1);
19-
}
20-
21-
static void write_list(const struct string_list *list)
22-
{
23-
int i;
24-
for (i = 0; i < list->nr; i++)
25-
printf("[%d]: \"%s\"\n", i, list->items[i].string);
26-
}
27-
28-
static void write_list_compact(const struct string_list *list)
29-
{
30-
int i;
31-
if (!list->nr)
32-
printf("-\n");
33-
else {
34-
printf("%s", list->items[0].string);
35-
for (i = 1; i < list->nr; i++)
36-
printf(":%s", list->items[i].string);
37-
printf("\n");
38-
}
39-
}
40-
41-
static int prefix_cb(struct string_list_item *item, void *cb_data)
42-
{
43-
const char *prefix = (const char *)cb_data;
44-
return starts_with(item->string, prefix);
45-
}
46-
475
int cmd__string_list(int argc, const char **argv)
486
{
49-
if (argc == 5 && !strcmp(argv[1], "split")) {
50-
struct string_list list = STRING_LIST_INIT_DUP;
51-
int i;
52-
const char *s = argv[2];
53-
int delim = *argv[3];
54-
int maxsplit = atoi(argv[4]);
55-
56-
i = string_list_split(&list, s, delim, maxsplit);
57-
printf("%d\n", i);
58-
write_list(&list);
59-
string_list_clear(&list, 0);
60-
return 0;
61-
}
62-
63-
if (argc == 5 && !strcmp(argv[1], "split_in_place")) {
64-
struct string_list list = STRING_LIST_INIT_NODUP;
65-
int i;
66-
char *s = xstrdup(argv[2]);
67-
const char *delim = argv[3];
68-
int maxsplit = atoi(argv[4]);
69-
70-
i = string_list_split_in_place(&list, s, delim, maxsplit);
71-
printf("%d\n", i);
72-
write_list(&list);
73-
string_list_clear(&list, 0);
74-
free(s);
75-
return 0;
76-
}
77-
78-
if (argc == 4 && !strcmp(argv[1], "filter")) {
79-
/*
80-
* Retain only the items that have the specified prefix.
81-
* Arguments: list|- prefix
82-
*/
83-
struct string_list list = STRING_LIST_INIT_DUP;
84-
const char *prefix = argv[3];
85-
86-
parse_string_list(&list, argv[2]);
87-
filter_string_list(&list, 0, prefix_cb, (void *)prefix);
88-
write_list_compact(&list);
89-
string_list_clear(&list, 0);
90-
return 0;
91-
}
92-
93-
if (argc == 3 && !strcmp(argv[1], "remove_duplicates")) {
94-
struct string_list list = STRING_LIST_INIT_DUP;
95-
96-
parse_string_list(&list, argv[2]);
97-
string_list_remove_duplicates(&list, 0);
98-
write_list_compact(&list);
99-
string_list_clear(&list, 0);
100-
return 0;
101-
}
102-
1037
if (argc == 2 && !strcmp(argv[1], "sort")) {
1048
struct string_list list = STRING_LIST_INIT_NODUP;
1059
struct strbuf sb = STRBUF_INIT;

t/meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ clar_test_suites = [
1111
'unit-tests/u-reftable-tree.c',
1212
'unit-tests/u-strbuf.c',
1313
'unit-tests/u-strcmp-offset.c',
14+
'unit-tests/u-string-list.c',
1415
'unit-tests/u-strvec.c',
1516
'unit-tests/u-trailer.c',
1617
'unit-tests/u-urlmatch-normalization.c',
@@ -123,7 +124,6 @@ integration_tests = [
123124
't0060-path-utils.sh',
124125
't0061-run-command.sh',
125126
't0062-revision-walking.sh',
126-
't0063-string-list.sh',
127127
't0066-dir-iterator.sh',
128128
't0067-parse_pathspec_file.sh',
129129
't0068-for-each-repo.sh',

t/t0063-string-list.sh

Lines changed: 0 additions & 142 deletions
This file was deleted.

0 commit comments

Comments
 (0)