rugged 0.23.2 → 0.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +12 -3
- data/vendor/libgit2/COPYING +46 -0
- data/vendor/libgit2/include/git2/config.h +4 -2
- data/vendor/libgit2/include/git2/cred_helpers.h +1 -1
- data/vendor/libgit2/include/git2/diff.h +0 -19
- data/vendor/libgit2/include/git2/errors.h +12 -0
- data/vendor/libgit2/include/git2/sys/filter.h +1 -4
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +2 -3
- data/vendor/libgit2/include/git2/transport.h +21 -14
- data/vendor/libgit2/include/git2/version.h +2 -2
- data/vendor/libgit2/src/blame.c +1 -1
- data/vendor/libgit2/src/blame_git.c +27 -7
- data/vendor/libgit2/src/blame_git.h +1 -1
- data/vendor/libgit2/src/branch.c +12 -1
- data/vendor/libgit2/src/checkout.c +2 -1
- data/vendor/libgit2/src/clone.c +2 -2
- data/vendor/libgit2/src/common.h +13 -13
- data/vendor/libgit2/src/curl_stream.c +8 -7
- data/vendor/libgit2/src/diff.c +0 -25
- data/vendor/libgit2/src/diff_driver.c +6 -7
- data/vendor/libgit2/src/diff_patch.c +4 -0
- data/vendor/libgit2/src/diff_xdiff.c +7 -0
- data/vendor/libgit2/src/diff_xdiff.h +5 -0
- data/vendor/libgit2/src/errors.c +40 -75
- data/vendor/libgit2/src/filter.c +2 -5
- data/vendor/libgit2/src/global.c +9 -25
- data/vendor/libgit2/src/global.h +0 -1
- data/vendor/libgit2/src/index.c +3 -3
- data/vendor/libgit2/src/iterator.c +2 -2
- data/vendor/libgit2/src/merge.c +0 -56
- data/vendor/libgit2/src/merge_file.c +76 -22
- data/vendor/libgit2/src/openssl_stream.c +2 -3
- data/vendor/libgit2/src/path.c +0 -16
- data/vendor/libgit2/src/path.h +0 -5
- data/vendor/libgit2/src/refdb_fs.c +0 -7
- data/vendor/libgit2/src/remote.c +9 -18
- data/vendor/libgit2/src/stransport_stream.c +1 -1
- data/vendor/libgit2/src/submodule.c +7 -3
- data/vendor/libgit2/src/sysdir.c +8 -22
- data/vendor/libgit2/src/transports/http.c +9 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +1 -1
- data/vendor/libgit2/src/transports/ssh.c +2 -2
- data/vendor/libgit2/src/transports/winhttp.c +1 -1
- data/vendor/libgit2/src/util.c +0 -48
- data/vendor/libgit2/src/util.h +5 -13
- data/vendor/libgit2/src/win32/posix_w32.c +0 -2
- data/vendor/libgit2/src/xdiff/xdiff.h +5 -3
- data/vendor/libgit2/src/xdiff/xdiffi.c +8 -4
- data/vendor/libgit2/src/xdiff/xhistogram.c +4 -2
- data/vendor/libgit2/src/xdiff/xmerge.c +98 -44
- metadata +76 -81
- data/vendor/libgit2/src/merge_file.h +0 -14
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +0 -343
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -93
- data/vendor/libgit2/src/win32/w32_stack.c +0 -192
- data/vendor/libgit2/src/win32/w32_stack.h +0 -138
data/vendor/libgit2/src/common.h
CHANGED
@@ -46,10 +46,6 @@
|
|
46
46
|
# ifdef GIT_THREADS
|
47
47
|
# include "win32/pthread.h"
|
48
48
|
# endif
|
49
|
-
# if defined(GIT_MSVC_CRTDBG)
|
50
|
-
# include "win32/w32_stack.h"
|
51
|
-
# include "win32/w32_crtdbg_stacktrace.h"
|
52
|
-
# endif
|
53
49
|
|
54
50
|
#else
|
55
51
|
|
@@ -141,25 +137,20 @@ void giterr_system_set(int code);
|
|
141
137
|
* Structure to preserve libgit2 error state
|
142
138
|
*/
|
143
139
|
typedef struct {
|
144
|
-
int
|
145
|
-
unsigned int oom : 1;
|
140
|
+
int error_code;
|
146
141
|
git_error error_msg;
|
147
142
|
} git_error_state;
|
148
143
|
|
149
144
|
/**
|
150
145
|
* Capture current error state to restore later, returning error code.
|
151
|
-
* If `error_code` is zero, this does
|
152
|
-
* You must either restore this error state, or free it.
|
146
|
+
* If `error_code` is zero, this does nothing and returns zero.
|
153
147
|
*/
|
154
|
-
|
148
|
+
int giterr_capture(git_error_state *state, int error_code);
|
155
149
|
|
156
150
|
/**
|
157
151
|
* Restore error state to a previous value, returning saved error code.
|
158
152
|
*/
|
159
|
-
|
160
|
-
|
161
|
-
/** Free an error state. */
|
162
|
-
extern void giterr_state_free(git_error_state *state);
|
153
|
+
int giterr_restore(git_error_state *state);
|
163
154
|
|
164
155
|
/**
|
165
156
|
* Check a versioned structure for validity
|
@@ -208,6 +199,15 @@ GIT_INLINE(void) git__init_structure(void *structure, size_t len, unsigned int v
|
|
208
199
|
#define GITERR_CHECK_ALLOC_ADD(out, one, two) \
|
209
200
|
if (GIT_ADD_SIZET_OVERFLOW(out, one, two)) { return -1; }
|
210
201
|
|
202
|
+
#define GITERR_CHECK_ALLOC_ADD3(out, one, two, three) \
|
203
|
+
if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
|
204
|
+
GIT_ADD_SIZET_OVERFLOW(out, *(out), three)) { return -1; }
|
205
|
+
|
206
|
+
#define GITERR_CHECK_ALLOC_ADD4(out, one, two, three, four) \
|
207
|
+
if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
|
208
|
+
GIT_ADD_SIZET_OVERFLOW(out, *(out), three) || \
|
209
|
+
GIT_ADD_SIZET_OVERFLOW(out, *(out), four)) { return -1; }
|
210
|
+
|
211
211
|
/** Check for multiplicative overflow, failing if it would occur. */
|
212
212
|
#define GITERR_CHECK_ALLOC_MULTIPLY(out, nelem, elsize) \
|
213
213
|
if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { return -1; }
|
@@ -67,9 +67,9 @@ static int curls_certificate(git_cert **out, git_stream *stream)
|
|
67
67
|
|
68
68
|
/* No information is available, can happen with SecureTransport */
|
69
69
|
if (certinfo->num_of_certs == 0) {
|
70
|
-
s->cert_info.
|
71
|
-
s->cert_info.data
|
72
|
-
s->cert_info.len
|
70
|
+
s->cert_info.cert_type = GIT_CERT_NONE;
|
71
|
+
s->cert_info.data = NULL;
|
72
|
+
s->cert_info.len = 0;
|
73
73
|
return 0;
|
74
74
|
}
|
75
75
|
|
@@ -85,11 +85,11 @@ static int curls_certificate(git_cert **out, git_stream *stream)
|
|
85
85
|
s->cert_info_strings.strings = (char **) strings.contents;
|
86
86
|
s->cert_info_strings.count = strings.length;
|
87
87
|
|
88
|
-
s->cert_info.
|
89
|
-
s->cert_info.data
|
90
|
-
s->cert_info.len
|
88
|
+
s->cert_info.cert_type = GIT_CERT_STRARRAY;
|
89
|
+
s->cert_info.data = &s->cert_info_strings;
|
90
|
+
s->cert_info.len = strings.length;
|
91
91
|
|
92
|
-
*out = &s->cert_info
|
92
|
+
*out = (git_cert *) &s->cert_info;
|
93
93
|
|
94
94
|
return 0;
|
95
95
|
}
|
@@ -220,6 +220,7 @@ int git_curl_stream_new(git_stream **out, const char *host, const char *port)
|
|
220
220
|
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 1);
|
221
221
|
curl_easy_setopt(handle, CURLOPT_CERTINFO, 1);
|
222
222
|
curl_easy_setopt(handle, CURLOPT_HTTPPROXYTUNNEL, 1);
|
223
|
+
curl_easy_setopt(handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
|
223
224
|
|
224
225
|
/* curl_easy_setopt(handle, CURLOPT_VERBOSE, 1); */
|
225
226
|
|
data/vendor/libgit2/src/diff.c
CHANGED
@@ -1421,31 +1421,6 @@ int git_diff_tree_to_workdir_with_index(
|
|
1421
1421
|
return error;
|
1422
1422
|
}
|
1423
1423
|
|
1424
|
-
int git_diff_index_to_index(
|
1425
|
-
git_diff **diff,
|
1426
|
-
git_repository *repo,
|
1427
|
-
git_index *old_index,
|
1428
|
-
git_index *new_index,
|
1429
|
-
const git_diff_options *opts)
|
1430
|
-
{
|
1431
|
-
int error = 0;
|
1432
|
-
|
1433
|
-
assert(diff && old_index && new_index);
|
1434
|
-
|
1435
|
-
DIFF_FROM_ITERATORS(
|
1436
|
-
git_iterator_for_index(
|
1437
|
-
&a, old_index, GIT_ITERATOR_DONT_IGNORE_CASE, pfx, pfx),
|
1438
|
-
git_iterator_for_index(
|
1439
|
-
&b, new_index, GIT_ITERATOR_DONT_IGNORE_CASE, pfx, pfx)
|
1440
|
-
);
|
1441
|
-
|
1442
|
-
/* if index is in case-insensitive order, re-sort deltas to match */
|
1443
|
-
if (!error && (old_index->ignore_case || new_index->ignore_case))
|
1444
|
-
diff_set_ignore_case(*diff, true);
|
1445
|
-
|
1446
|
-
return error;
|
1447
|
-
}
|
1448
|
-
|
1449
1424
|
size_t git_diff_num_deltas(const git_diff *diff)
|
1450
1425
|
{
|
1451
1426
|
assert(diff);
|
@@ -97,8 +97,7 @@ static int diff_driver_add_patterns(
|
|
97
97
|
for (scan = regex_str; scan; scan = end) {
|
98
98
|
/* get pattern to fill in */
|
99
99
|
if ((pat = git_array_alloc(drv->fn_patterns)) == NULL) {
|
100
|
-
|
101
|
-
break;
|
100
|
+
return -1;
|
102
101
|
}
|
103
102
|
|
104
103
|
pat->flags = regex_flags;
|
@@ -117,10 +116,9 @@ static int diff_driver_add_patterns(
|
|
117
116
|
break;
|
118
117
|
|
119
118
|
if ((error = regcomp(&pat->re, buf.ptr, regex_flags)) != 0) {
|
120
|
-
/*
|
121
|
-
|
122
|
-
|
123
|
-
break;
|
119
|
+
/*
|
120
|
+
* TODO: issue a warning
|
121
|
+
*/
|
124
122
|
}
|
125
123
|
}
|
126
124
|
|
@@ -128,7 +126,8 @@ static int diff_driver_add_patterns(
|
|
128
126
|
(void)git_array_pop(drv->fn_patterns); /* release last item */
|
129
127
|
git_buf_free(&buf);
|
130
128
|
|
131
|
-
return
|
129
|
+
/* We want to ignore bad patterns, so return success regardless */
|
130
|
+
return 0;
|
132
131
|
}
|
133
132
|
|
134
133
|
static int diff_driver_xfuncname(const git_config_entry *entry, void *payload)
|
@@ -30,6 +30,10 @@ static void diff_patch_update_binary(git_patch *patch)
|
|
30
30
|
(patch->nfile.file->flags & GIT_DIFF_FLAG_BINARY) != 0)
|
31
31
|
patch->delta->flags |= GIT_DIFF_FLAG_BINARY;
|
32
32
|
|
33
|
+
else if (patch->ofile.file->size > GIT_XDIFF_MAX_SIZE ||
|
34
|
+
patch->nfile.file->size > GIT_XDIFF_MAX_SIZE)
|
35
|
+
patch->delta->flags |= GIT_DIFF_FLAG_BINARY;
|
36
|
+
|
33
37
|
else if ((patch->ofile.file->flags & DIFF_FLAGS_NOT_BINARY) != 0 &&
|
34
38
|
(patch->nfile.file->flags & DIFF_FLAGS_NOT_BINARY) != 0)
|
35
39
|
patch->delta->flags |= GIT_DIFF_FLAG_NOT_BINARY;
|
@@ -4,6 +4,7 @@
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
6
6
|
*/
|
7
|
+
#include "git2/errors.h"
|
7
8
|
#include "common.h"
|
8
9
|
#include "diff.h"
|
9
10
|
#include "diff_driver.h"
|
@@ -208,6 +209,12 @@ static int git_xdiff(git_diff_output *output, git_patch *patch)
|
|
208
209
|
git_patch__old_data(&info.xd_old_data.ptr, &info.xd_old_data.size, patch);
|
209
210
|
git_patch__new_data(&info.xd_new_data.ptr, &info.xd_new_data.size, patch);
|
210
211
|
|
212
|
+
if (info.xd_old_data.size > GIT_XDIFF_MAX_SIZE ||
|
213
|
+
info.xd_new_data.size > GIT_XDIFF_MAX_SIZE) {
|
214
|
+
giterr_set(GITERR_INVALID, "files too large for diff");
|
215
|
+
return -1;
|
216
|
+
}
|
217
|
+
|
211
218
|
xdl_diff(&info.xd_old_data, &info.xd_new_data,
|
212
219
|
&xo->params, &xo->config, &xo->callback);
|
213
220
|
|
@@ -11,6 +11,11 @@
|
|
11
11
|
#include "diff_patch.h"
|
12
12
|
#include "xdiff/xdiff.h"
|
13
13
|
|
14
|
+
/* xdiff cannot cope with large files. these files should not be passed to
|
15
|
+
* xdiff. callers should treat these large files as binary.
|
16
|
+
*/
|
17
|
+
#define GIT_XDIFF_MAX_SIZE (1024LL * 1024 * 1023)
|
18
|
+
|
14
19
|
/* A git_xdiff_output is a git_diff_output with extra fields necessary
|
15
20
|
* to use libxdiff. Calling git_xdiff_init() will set the diff_cb field
|
16
21
|
* of the output to use xdiff to generate the diffs.
|
data/vendor/libgit2/src/errors.c
CHANGED
@@ -18,30 +18,19 @@ static git_error g_git_oom_error = {
|
|
18
18
|
GITERR_NOMEMORY
|
19
19
|
};
|
20
20
|
|
21
|
-
static void
|
21
|
+
static void set_error(int error_class, char *string)
|
22
22
|
{
|
23
23
|
git_error *error = &GIT_GLOBAL->error_t;
|
24
|
-
git_buf *buf = &GIT_GLOBAL->error_buf;
|
25
24
|
|
26
|
-
error->message
|
25
|
+
if (error->message != string)
|
26
|
+
git__free(error->message);
|
27
|
+
|
28
|
+
error->message = string;
|
27
29
|
error->klass = error_class;
|
28
30
|
|
29
31
|
GIT_GLOBAL->last_error = error;
|
30
32
|
}
|
31
33
|
|
32
|
-
static void set_error(int error_class, char *string)
|
33
|
-
{
|
34
|
-
git_buf *buf = &GIT_GLOBAL->error_buf;
|
35
|
-
|
36
|
-
git_buf_clear(buf);
|
37
|
-
if (string) {
|
38
|
-
git_buf_puts(buf, string);
|
39
|
-
git__free(string);
|
40
|
-
}
|
41
|
-
|
42
|
-
set_error_from_buffer(error_class);
|
43
|
-
}
|
44
|
-
|
45
34
|
void giterr_set_oom(void)
|
46
35
|
{
|
47
36
|
GIT_GLOBAL->last_error = &g_git_oom_error;
|
@@ -49,28 +38,27 @@ void giterr_set_oom(void)
|
|
49
38
|
|
50
39
|
void giterr_set(int error_class, const char *string, ...)
|
51
40
|
{
|
41
|
+
git_buf buf = GIT_BUF_INIT;
|
52
42
|
va_list arglist;
|
53
43
|
#ifdef GIT_WIN32
|
54
44
|
DWORD win32_error_code = (error_class == GITERR_OS) ? GetLastError() : 0;
|
55
45
|
#endif
|
56
46
|
int error_code = (error_class == GITERR_OS) ? errno : 0;
|
57
|
-
git_buf *buf = &GIT_GLOBAL->error_buf;
|
58
47
|
|
59
|
-
git_buf_clear(buf);
|
60
48
|
if (string) {
|
61
49
|
va_start(arglist, string);
|
62
|
-
git_buf_vprintf(buf, string, arglist);
|
50
|
+
git_buf_vprintf(&buf, string, arglist);
|
63
51
|
va_end(arglist);
|
64
52
|
|
65
53
|
if (error_class == GITERR_OS)
|
66
|
-
git_buf_PUTS(buf, ": ");
|
54
|
+
git_buf_PUTS(&buf, ": ");
|
67
55
|
}
|
68
56
|
|
69
57
|
if (error_class == GITERR_OS) {
|
70
58
|
#ifdef GIT_WIN32
|
71
59
|
char * win32_error = git_win32_get_error_message(win32_error_code);
|
72
60
|
if (win32_error) {
|
73
|
-
git_buf_puts(buf, win32_error);
|
61
|
+
git_buf_puts(&buf, win32_error);
|
74
62
|
git__free(win32_error);
|
75
63
|
|
76
64
|
SetLastError(0);
|
@@ -78,29 +66,26 @@ void giterr_set(int error_class, const char *string, ...)
|
|
78
66
|
else
|
79
67
|
#endif
|
80
68
|
if (error_code)
|
81
|
-
git_buf_puts(buf, strerror(error_code));
|
69
|
+
git_buf_puts(&buf, strerror(error_code));
|
82
70
|
|
83
71
|
if (error_code)
|
84
72
|
errno = 0;
|
85
73
|
}
|
86
74
|
|
87
|
-
if (!git_buf_oom(buf))
|
88
|
-
|
75
|
+
if (!git_buf_oom(&buf))
|
76
|
+
set_error(error_class, git_buf_detach(&buf));
|
89
77
|
}
|
90
78
|
|
91
79
|
void giterr_set_str(int error_class, const char *string)
|
92
80
|
{
|
93
|
-
|
81
|
+
char *message;
|
94
82
|
|
95
83
|
assert(string);
|
96
84
|
|
97
|
-
|
98
|
-
return;
|
85
|
+
message = git__strdup(string);
|
99
86
|
|
100
|
-
|
101
|
-
|
102
|
-
if (!git_buf_oom(buf))
|
103
|
-
set_error_from_buffer(error_class);
|
87
|
+
if (message)
|
88
|
+
set_error(error_class, message);
|
104
89
|
}
|
105
90
|
|
106
91
|
int giterr_set_regex(const regex_t *regex, int error_code)
|
@@ -131,65 +116,45 @@ void giterr_clear(void)
|
|
131
116
|
#endif
|
132
117
|
}
|
133
118
|
|
134
|
-
|
135
|
-
{
|
136
|
-
return GIT_GLOBAL->last_error;
|
137
|
-
}
|
138
|
-
|
139
|
-
int giterr_state_capture(git_error_state *state, int error_code)
|
119
|
+
int giterr_detach(git_error *cpy)
|
140
120
|
{
|
141
121
|
git_error *error = GIT_GLOBAL->last_error;
|
142
|
-
git_buf *error_buf = &GIT_GLOBAL->error_buf;
|
143
|
-
|
144
|
-
memset(state, 0, sizeof(git_error_state));
|
145
122
|
|
146
|
-
|
147
|
-
return 0;
|
123
|
+
assert(cpy);
|
148
124
|
|
149
|
-
|
150
|
-
|
125
|
+
if (!error)
|
126
|
+
return -1;
|
151
127
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
if (state->oom)
|
156
|
-
state->error_msg.message = g_git_oom_error.message;
|
157
|
-
else
|
158
|
-
state->error_msg.message = git_buf_detach(error_buf);
|
159
|
-
}
|
128
|
+
cpy->message = error->message;
|
129
|
+
cpy->klass = error->klass;
|
160
130
|
|
131
|
+
error->message = NULL;
|
161
132
|
giterr_clear();
|
162
|
-
|
133
|
+
|
134
|
+
return 0;
|
163
135
|
}
|
164
136
|
|
165
|
-
|
137
|
+
const git_error *giterr_last(void)
|
166
138
|
{
|
167
|
-
|
168
|
-
|
169
|
-
giterr_clear();
|
170
|
-
|
171
|
-
if (state && state->error_msg.message) {
|
172
|
-
if (state->oom)
|
173
|
-
giterr_set_oom();
|
174
|
-
else
|
175
|
-
set_error(state->error_msg.klass, state->error_msg.message);
|
176
|
-
|
177
|
-
ret = state->error_code;
|
178
|
-
memset(state, 0, sizeof(git_error_state));
|
179
|
-
}
|
180
|
-
|
181
|
-
return ret;
|
139
|
+
return GIT_GLOBAL->last_error;
|
182
140
|
}
|
183
141
|
|
184
|
-
|
142
|
+
int giterr_capture(git_error_state *state, int error_code)
|
185
143
|
{
|
186
|
-
|
187
|
-
|
144
|
+
state->error_code = error_code;
|
145
|
+
if (error_code)
|
146
|
+
giterr_detach(&state->error_msg);
|
147
|
+
return error_code;
|
148
|
+
}
|
188
149
|
|
189
|
-
|
190
|
-
|
150
|
+
int giterr_restore(git_error_state *state)
|
151
|
+
{
|
152
|
+
if (state && state->error_code && state->error_msg.message)
|
153
|
+
set_error(state->error_msg.klass, state->error_msg.message);
|
154
|
+
else
|
155
|
+
giterr_clear();
|
191
156
|
|
192
|
-
|
157
|
+
return state ? state->error_code : 0;
|
193
158
|
}
|
194
159
|
|
195
160
|
int giterr_system_last(void)
|
data/vendor/libgit2/src/filter.c
CHANGED
@@ -433,11 +433,8 @@ static int filter_list_check_attributes(
|
|
433
433
|
want_type = git_attr_value(want);
|
434
434
|
found_type = git_attr_value(strs[i]);
|
435
435
|
|
436
|
-
if (want_type != found_type
|
437
|
-
|
438
|
-
else if (want_type == GIT_ATTR_VALUE_T &&
|
439
|
-
strcmp(want, strs[i]) &&
|
440
|
-
strcmp(want, "*"))
|
436
|
+
if (want_type != found_type ||
|
437
|
+
(want_type == GIT_ATTR_VALUE_T && strcmp(want, strs[i])))
|
441
438
|
error = GIT_ENOTFOUND;
|
442
439
|
}
|
443
440
|
|
data/vendor/libgit2/src/global.c
CHANGED
@@ -11,10 +11,7 @@
|
|
11
11
|
#include "git2/global.h"
|
12
12
|
#include "git2/sys/openssl.h"
|
13
13
|
#include "thread-utils.h"
|
14
|
-
|
15
|
-
#include "win32/w32_stack.h"
|
16
|
-
#include "win32/w32_crtdbg_stacktrace.h"
|
17
|
-
#endif
|
14
|
+
|
18
15
|
|
19
16
|
git_mutex git__mwindow_mutex;
|
20
17
|
|
@@ -228,11 +225,6 @@ int git_libgit2_init(void)
|
|
228
225
|
|
229
226
|
/* Only do work on a 0 -> 1 transition of the refcount */
|
230
227
|
if ((ret = git_atomic_inc(&git__n_inits)) == 1) {
|
231
|
-
#if defined(GIT_MSVC_CRTDBG)
|
232
|
-
git_win32__crtdbg_stacktrace_init();
|
233
|
-
git_win32__stack_init();
|
234
|
-
#endif
|
235
|
-
|
236
228
|
if (synchronized_threads_init() < 0)
|
237
229
|
ret = -1;
|
238
230
|
}
|
@@ -262,15 +254,9 @@ int git_libgit2_shutdown(void)
|
|
262
254
|
while (InterlockedCompareExchange(&_mutex, 1, 0)) { Sleep(0); }
|
263
255
|
|
264
256
|
/* Only do work on a 1 -> 0 transition of the refcount */
|
265
|
-
if ((ret = git_atomic_dec(&git__n_inits)) == 0)
|
257
|
+
if ((ret = git_atomic_dec(&git__n_inits)) == 0)
|
266
258
|
synchronized_threads_shutdown();
|
267
259
|
|
268
|
-
#if defined(GIT_MSVC_CRTDBG)
|
269
|
-
git_win32__crtdbg_stacktrace_cleanup();
|
270
|
-
git_win32__stack_cleanup();
|
271
|
-
#endif
|
272
|
-
}
|
273
|
-
|
274
260
|
/* Exit the lock */
|
275
261
|
InterlockedExchange(&_mutex, 0);
|
276
262
|
|
@@ -279,19 +265,18 @@ int git_libgit2_shutdown(void)
|
|
279
265
|
|
280
266
|
git_global_st *git__global_state(void)
|
281
267
|
{
|
282
|
-
|
268
|
+
void *ptr;
|
283
269
|
|
284
270
|
assert(git_atomic_get(&git__n_inits) > 0);
|
285
271
|
|
286
272
|
if ((ptr = TlsGetValue(_tls_index)) != NULL)
|
287
273
|
return ptr;
|
288
274
|
|
289
|
-
ptr =
|
275
|
+
ptr = git__malloc(sizeof(git_global_st));
|
290
276
|
if (!ptr)
|
291
277
|
return NULL;
|
292
278
|
|
293
|
-
|
294
|
-
|
279
|
+
memset(ptr, 0x0, sizeof(git_global_st));
|
295
280
|
TlsSetValue(_tls_index, ptr);
|
296
281
|
return ptr;
|
297
282
|
}
|
@@ -345,8 +330,8 @@ int git_libgit2_init(void)
|
|
345
330
|
{
|
346
331
|
int ret;
|
347
332
|
|
348
|
-
ret = git_atomic_inc(&git__n_inits);
|
349
333
|
pthread_once(&_once_init, init_once);
|
334
|
+
ret = git_atomic_inc(&git__n_inits);
|
350
335
|
|
351
336
|
return init_error ? init_error : ret;
|
352
337
|
}
|
@@ -379,18 +364,18 @@ int git_libgit2_shutdown(void)
|
|
379
364
|
|
380
365
|
git_global_st *git__global_state(void)
|
381
366
|
{
|
382
|
-
|
367
|
+
void *ptr;
|
383
368
|
|
384
369
|
assert(git_atomic_get(&git__n_inits) > 0);
|
385
370
|
|
386
371
|
if ((ptr = pthread_getspecific(_tls_key)) != NULL)
|
387
372
|
return ptr;
|
388
373
|
|
389
|
-
ptr =
|
374
|
+
ptr = git__malloc(sizeof(git_global_st));
|
390
375
|
if (!ptr)
|
391
376
|
return NULL;
|
392
377
|
|
393
|
-
|
378
|
+
memset(ptr, 0x0, sizeof(git_global_st));
|
394
379
|
pthread_setspecific(_tls_key, ptr);
|
395
380
|
return ptr;
|
396
381
|
}
|
@@ -408,7 +393,6 @@ int git_libgit2_init(void)
|
|
408
393
|
ssl_inited = 1;
|
409
394
|
}
|
410
395
|
|
411
|
-
git_buf_init(&__state.error_buf, 0);
|
412
396
|
return git_atomic_inc(&git__n_inits);
|
413
397
|
}
|
414
398
|
|