]> git.proxmox.com Git - libgit2.git/blob - src/strarray.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / src / strarray.c
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
16 GIT_ASSERT_ARG(tgt);
17 GIT_ASSERT_ARG(src);
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