diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2021-09-26 20:20:03 -0400 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2021-09-26 20:20:57 -0400 |
commit | 7e7cfe8acdc8e506a5e670e7cfb74e43c031ccaf (patch) | |
tree | fedcb7be8c2b7c200e2fdbe5f9219ca8f567d649 | |
parent | 136901086ecfdd2b5cc106782310355a9c0b1a9a (diff) | |
download | libgit2-7e7cfe8acdc8e506a5e670e7cfb74e43c031ccaf.tar.gz |
buf: common_prefix takes a string arrayethomson/strarray
`git_strarray` is a public-facing type. Change
`git_buf_text_common_prefix` to not use it, and just take an array of
strings instead.
-rw-r--r-- | src/buffer.c | 13 | ||||
-rw-r--r-- | src/buffer.h | 2 | ||||
-rw-r--r-- | src/pathspec.c | 2 | ||||
-rw-r--r-- | tests/core/buffer.c | 29 |
4 files changed, 16 insertions, 30 deletions
diff --git a/src/buffer.c b/src/buffer.c index a57df1284..fe087ea11 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1201,25 +1201,26 @@ int git_buf_lf_to_crlf(git_buf *tgt, const git_buf *src) return git_buf_put(tgt, scan, end - scan); } -int git_buf_common_prefix(git_buf *buf, const git_strarray *strings) +int git_buf_common_prefix(git_buf *buf, char *const *const strings, size_t count) { size_t i; const char *str, *pfx; git_buf_clear(buf); - if (!strings || !strings->count) + if (!strings || !count) return 0; /* initialize common prefix to first string */ - if (git_buf_sets(buf, strings->strings[0]) < 0) + if (git_buf_sets(buf, strings[0]) < 0) return -1; /* go through the rest of the strings, truncating to shared prefix */ - for (i = 1; i < strings->count; ++i) { + for (i = 1; i < count; ++i) { - for (str = strings->strings[i], pfx = buf->ptr; - *str && *str == *pfx; str++, pfx++) + for (str = strings[i], pfx = buf->ptr; + *str && *str == *pfx; + str++, pfx++) /* scanning */; git_buf_truncate(buf, pfx - buf->ptr); diff --git a/src/buffer.h b/src/buffer.h index a356bebea..75930e209 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -324,7 +324,7 @@ extern int git_buf_lf_to_crlf(git_buf *tgt, const git_buf *src); * * Buffer will be set to empty if there is no common prefix */ -extern int git_buf_common_prefix(git_buf *buf, const git_strarray *strs); +extern int git_buf_common_prefix(git_buf *buf, char *const *const strings, size_t count); /** * Check if a buffer begins with a UTF BOM diff --git a/src/pathspec.c b/src/pathspec.c index 8f1bdf0fa..c6ad16571 100644 --- a/src/pathspec.c +++ b/src/pathspec.c @@ -24,7 +24,7 @@ char *git_pathspec_prefix(const git_strarray *pathspec) const char *scan; if (!pathspec || !pathspec->count || - git_buf_common_prefix(&prefix, pathspec) < 0) + git_buf_common_prefix(&prefix, pathspec->strings, pathspec->count) < 0) return NULL; /* diff prefix will only be leading non-wildcards */ diff --git a/tests/core/buffer.c b/tests/core/buffer.c index 22fa75e39..2af4a8712 100644 --- a/tests/core/buffer.c +++ b/tests/core/buffer.c @@ -632,7 +632,6 @@ void test_core_buffer__join3(void) void test_core_buffer__11(void) { git_buf a = GIT_BUF_INIT; - git_strarray t; char *t1[] = { "nothing", "in", "common" }; char *t2[] = { "something", "something else", "some other" }; char *t3[] = { "something", "some fun", "no fun" }; @@ -641,39 +640,25 @@ void test_core_buffer__11(void) char *t6[] = { "no", "nope", "" }; char *t7[] = { "", "doesn't matter" }; - t.strings = t1; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t1, 3)); cl_assert_equal_s(a.ptr, ""); - t.strings = t2; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t2, 3)); cl_assert_equal_s(a.ptr, "some"); - t.strings = t3; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t3, 3)); cl_assert_equal_s(a.ptr, ""); - t.strings = t4; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t4, 3)); cl_assert_equal_s(a.ptr, "happ"); - t.strings = t5; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t5, 3)); cl_assert_equal_s(a.ptr, "happ"); - t.strings = t6; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t6, 3)); cl_assert_equal_s(a.ptr, ""); - t.strings = t7; - t.count = 3; - cl_git_pass(git_buf_common_prefix(&a, &t)); + cl_git_pass(git_buf_common_prefix(&a, t7, 3)); cl_assert_equal_s(a.ptr, ""); git_buf_dispose(&a); |