]>
Commit | Line | Data |
---|---|---|
22a2d3d5 UG |
1 | /* |
2 | * Copyright (C) the libgit2 contributors. All rights reserved. | |
3 | * | |
4 | * This file is part of libgit2, distributed under the GNU GPL v2 with | |
5 | * a Linking Exception. For full terms see the included COPYING file. | |
6 | */ | |
7 | ||
8 | #include "util.h" | |
9 | ||
10 | #include "common.h" | |
11 | ||
12 | int git_strarray_copy(git_strarray *tgt, const git_strarray *src) | |
13 | { | |
14 | size_t i; | |
15 | ||
c25aa7cd PP |
16 | GIT_ASSERT_ARG(tgt); |
17 | GIT_ASSERT_ARG(src); | |
22a2d3d5 UG |
18 | |
19 | memset(tgt, 0, sizeof(*tgt)); | |
20 | ||
21 | if (!src->count) | |
22 | return 0; | |
23 | ||
24 | tgt->strings = git__calloc(src->count, sizeof(char *)); | |
25 | GIT_ERROR_CHECK_ALLOC(tgt->strings); | |
26 | ||
27 | for (i = 0; i < src->count; ++i) { | |
28 | if (!src->strings[i]) | |
29 | continue; | |
30 | ||
31 | tgt->strings[tgt->count] = git__strdup(src->strings[i]); | |
32 | if (!tgt->strings[tgt->count]) { | |
33 | git_strarray_dispose(tgt); | |
34 | memset(tgt, 0, sizeof(*tgt)); | |
35 | return -1; | |
36 | } | |
37 | ||
38 | tgt->count++; | |
39 | } | |
40 | ||
41 | return 0; | |
42 | } | |
43 | ||
44 | void git_strarray_dispose(git_strarray *array) | |
45 | { | |
46 | size_t i; | |
47 | ||
48 | if (array == NULL) | |
49 | return; | |
50 | ||
51 | for (i = 0; i < array->count; ++i) | |
52 | git__free(array->strings[i]); | |
53 | ||
54 | git__free(array->strings); | |
55 | ||
56 | memset(array, 0, sizeof(*array)); | |
57 | } | |
58 | ||
59 | #ifndef GIT_DEPRECATE_HARD | |
60 | void git_strarray_free(git_strarray *array) | |
61 | { | |
62 | git_strarray_dispose(array); | |
63 | } | |
64 | #endif |