mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
Introduce git_strlist to manage string lists
This commit is contained in:
@@ -28,6 +28,59 @@ int git_strlist_copy(char ***out, const char **in, size_t len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int git_strlist_copy_with_null(char ***out, const char **in, size_t len)
|
||||
{
|
||||
char **dup;
|
||||
size_t new_len, i;
|
||||
|
||||
GIT_ERROR_CHECK_ALLOC_ADD(&new_len, len, 1);
|
||||
|
||||
dup = git__calloc(new_len, sizeof(char *));
|
||||
GIT_ERROR_CHECK_ALLOC(dup);
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
dup[i] = git__strdup(in[i]);
|
||||
GIT_ERROR_CHECK_ALLOC(dup[i]);
|
||||
}
|
||||
|
||||
*out = dup;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool git_strlist_contains_prefix(
|
||||
const char **strings,
|
||||
size_t len,
|
||||
const char *str,
|
||||
size_t n)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (strncmp(strings[i], str, n) == 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool git_strlist_contains_key(
|
||||
const char **strings,
|
||||
size_t len,
|
||||
const char *key,
|
||||
char delimiter)
|
||||
{
|
||||
const char *c;
|
||||
|
||||
for (c = key; *c; c++) {
|
||||
if (*c == delimiter)
|
||||
break;
|
||||
}
|
||||
|
||||
return *c ?
|
||||
git_strlist_contains_prefix(strings, len, key, (c - key)) :
|
||||
false;
|
||||
}
|
||||
|
||||
void git_strlist_free(char **strings, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
@@ -40,3 +93,16 @@ void git_strlist_free(char **strings, size_t len)
|
||||
|
||||
git__free(strings);
|
||||
}
|
||||
|
||||
void git_strlist_free_with_null(char **strings)
|
||||
{
|
||||
char **s;
|
||||
|
||||
if (!strings)
|
||||
return;
|
||||
|
||||
for (s = strings; *s; s++)
|
||||
git__free(*s);
|
||||
|
||||
git__free(strings);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,26 @@
|
||||
#include "git2_util.h"
|
||||
|
||||
extern int git_strlist_copy(char ***out, const char **in, size_t len);
|
||||
|
||||
extern int git_strlist_copy_with_null(
|
||||
char ***out,
|
||||
const char **in,
|
||||
size_t len);
|
||||
|
||||
extern bool git_strlist_contains_prefix(
|
||||
const char **strings,
|
||||
size_t len,
|
||||
const char *str,
|
||||
size_t n);
|
||||
|
||||
extern bool git_strlist_contains_key(
|
||||
const char **strings,
|
||||
size_t len,
|
||||
const char *key,
|
||||
char delimiter);
|
||||
|
||||
extern void git_strlist_free(char **strings, size_t len);
|
||||
|
||||
extern void git_strlist_free_with_null(char **strings);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user