@@ -70,27 +70,33 @@ pygit2_odb_backend_read(void **ptr, size_t *sz,
70
70
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
71
71
72
72
py_oid = git_oid_to_python (oid );
73
- args = Py_BuildValue ("(O )" , py_oid );
73
+ args = Py_BuildValue ("(N )" , py_oid );
74
74
result = PyObject_CallObject (be -> read , args );
75
75
Py_DECREF (py_oid );
76
+ Py_DECREF (args );
76
77
77
78
if ((err = git_error_for_exc ()) != 0 ) {
78
- return err ;
79
+ goto out ;
79
80
}
80
81
81
82
if (result == NULL )
82
- return GIT_EUSER ;
83
+ goto euser ;
83
84
84
85
const char * bytes ;
85
86
if (!PyArg_ParseTuple (result , "ny#" , type , & bytes , sz ) || !bytes )
86
- return GIT_EUSER ;
87
+ goto euser ;
87
88
88
89
* ptr = git_odb_backend_data_alloc (_be , * sz );
89
90
if (!* ptr )
90
- return GIT_EUSER ;
91
-
91
+ goto euser ;
92
92
memcpy (* ptr , bytes , * sz );
93
- return 0 ;
93
+
94
+ out :
95
+ Py_DECREF (result );
96
+ return err ;
97
+ euser :
98
+ err = GIT_EUSER ;
99
+ goto out ;
94
100
}
95
101
96
102
static int
@@ -103,29 +109,35 @@ pygit2_odb_backend_read_prefix(git_oid *oid_out, void **ptr, size_t *sz,
103
109
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
104
110
105
111
py_oid = git_oid_to_python (short_oid );
106
- args = Py_BuildValue ("(O )" , py_oid );
112
+ args = Py_BuildValue ("(N )" , py_oid );
107
113
result = PyObject_CallObject (be -> read_prefix , args );
108
114
Py_DECREF (py_oid );
115
+ Py_DECREF (args );
109
116
110
- if ((err = git_error_for_exc ()) != 0 ) {
111
- return err ;
112
- }
117
+ if ((err = git_error_for_exc ()) != 0 )
118
+ goto out ;
113
119
114
120
if (result == NULL )
115
- return GIT_EUSER ;
121
+ goto euser ;
116
122
117
123
const char * bytes ;
118
124
if (!PyArg_ParseTuple (result , "Ony#" ,
119
125
& py_oid_out , type , & bytes , sz ) || !bytes )
120
- return GIT_EUSER ;
126
+ goto euser ;
121
127
122
128
* ptr = git_odb_backend_data_alloc (_be , * sz );
123
129
if (!* ptr )
124
- return GIT_EUSER ;
130
+ goto euser ;
125
131
126
132
memcpy (* ptr , bytes , * sz );
127
133
py_oid_to_git_oid (py_oid_out , oid_out );
128
- return 0 ;
134
+
135
+ out :
136
+ Py_DECREF (result );
137
+ return err ;
138
+ euser :
139
+ err = GIT_EUSER ;
140
+ goto out ;
129
141
}
130
142
131
143
static int
@@ -137,21 +149,26 @@ pygit2_odb_backend_read_header(size_t *len, git_object_t *type,
137
149
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
138
150
139
151
py_oid = git_oid_to_python (oid );
140
- args = Py_BuildValue ("(O )" , py_oid );
152
+ args = Py_BuildValue ("(N )" , py_oid );
141
153
result = PyObject_CallObject (be -> read_header , args );
142
154
Py_DECREF (py_oid );
155
+ Py_DECREF (args );
143
156
144
- if ((err = git_error_for_exc ()) != 0 ) {
145
- return err ;
146
- }
157
+ if ((err = git_error_for_exc ()) != 0 )
158
+ goto out ;
147
159
148
160
if (result == NULL )
149
- return GIT_EUSER ;
161
+ goto euser ;
150
162
151
163
if (!PyArg_ParseTuple (result , "nn" , type , len ))
152
- return GIT_EUSER ;
153
-
154
- return 0 ;
164
+ goto euser ;
165
+
166
+ out :
167
+ Py_DECREF (result );
168
+ return err ;
169
+ euser :
170
+ err = GIT_EUSER ;
171
+ goto out ;
155
172
}
156
173
157
174
static int
@@ -163,18 +180,20 @@ pygit2_odb_backend_write(git_odb_backend *_be, const git_oid *oid,
163
180
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
164
181
165
182
py_oid = git_oid_to_python (oid );
166
- args = Py_BuildValue ("(Oy #n)" , py_oid , data , sz , typ );
183
+ args = Py_BuildValue ("(Ny #n)" , py_oid , data , sz , typ );
167
184
result = PyObject_CallObject (be -> write , args );
168
185
Py_DECREF (py_oid );
186
+ Py_DECREF (args );
169
187
170
- if ((err = git_error_for_exc ()) != 0 ) {
171
- return err ;
172
- }
188
+ if ((err = git_error_for_exc ()) != 0 )
189
+ goto out ;
173
190
174
191
if (result == NULL )
175
- return GIT_EUSER ;
192
+ err = GIT_EUSER ;
176
193
177
- return 0 ;
194
+ out :
195
+ Py_DECREF (result );
196
+ return err ;
178
197
}
179
198
180
199
static int
@@ -185,18 +204,21 @@ pygit2_odb_backend_exists(git_odb_backend *_be, const git_oid *oid)
185
204
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
186
205
187
206
py_oid = git_oid_to_python (oid );
188
- args = Py_BuildValue ("(O )" , py_oid );
207
+ args = Py_BuildValue ("(N )" , py_oid );
189
208
result = PyObject_CallObject (be -> exists , args );
190
209
Py_DECREF (py_oid );
191
210
192
211
if ((err = git_error_for_exc ()) != 0 ) {
212
+ Py_DECREF (result );
193
213
return err ;
194
214
}
195
215
196
216
if (!result )
197
217
return GIT_EUSER ;
198
218
199
- return PyObject_IsTrue (result );
219
+ int r = PyObject_IsTrue (result );
220
+ Py_DECREF (result );
221
+ return r ;
200
222
}
201
223
202
224
static int
@@ -208,47 +230,47 @@ pygit2_odb_backend_exists_prefix(git_oid *out, git_odb_backend *_be,
208
230
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
209
231
210
232
py_oid = git_oid_to_python (partial );
211
- args = Py_BuildValue ("(O )" , py_oid );
233
+ args = Py_BuildValue ("(N )" , py_oid );
212
234
result = PyObject_CallObject (be -> exists_prefix , args );
213
235
Py_DECREF (py_oid );
236
+ Py_DECREF (args );
214
237
10000
215
- if ((err = git_error_for_exc ()) != 0 ) {
216
- return err ;
217
- }
238
+ if ((err = git_error_for_exc ()) != 0 )
239
+ goto out ;
218
240
219
241
if (result == NULL )
220
- return GIT_EUSER ;
242
+ goto euser ;
221
243
222
244
if (!PyArg_ParseTuple (result , "O" , & py_oid_out ))
223
- return GIT_EUSER ;
245
+ goto euser ;
224
246
225
- if (py_oid_out == Py_None )
226
- return GIT_ENOTFOUND ;
247
+ if (py_oid_out == Py_None ) {
248
+ err = GIT_ENOTFOUND ;
249
+ goto out ;
250
+ }
227
251
228
252
py_oid_to_git_oid (py_oid_out , out );
229
253
Py_DECREF (py_oid_out );
254
+ out :
255
+ Py_DECREF (result );
230
256
return 0 ;
257
+ euser :
258
+ Py_DECREF (result );
259
+ return GIT_EUSER ;
231
260
}
232
261
233
262
static int
234
263
pygit2_odb_backend_refresh (git_odb_backend * _be )
235
264
{
236
- int err ;
237
265
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
238
-
239
266
PyObject_CallObject (be -> exists_prefix , NULL );
240
- if ((err = git_error_for_exc ()) != 0 ) {
241
- return err ;
242
- }
243
-
244
- return 0 ;
267
+ return git_error_for_exc ();
245
268
}
246
269
247
270
static int
248
271
pygit2_odb_backend_foreach (git_odb_backend * _be ,
249
272
git_odb_foreach_cb cb , void * payload )
250
273
{
251
- int err ;
252
274
PyObject * item ;
253
275
git_oid oid ;
254
276
struct pygit2_odb_backend * be = (struct pygit2_odb_backend * )_be ;
@@ -261,11 +283,7 @@ pygit2_odb_backend_foreach(git_odb_backend *_be,
261
283
Py_DECREF (item );
262
284
}
263
285
264
- if ((err = git_error_for_exc ()) != 0 ) {
265
- return err ;
266
- }
267
-
268
- return 0 ;
286
+ return git_error_for_exc ();
269
287
}
270
288
271
289
static void
0 commit comments