/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/_static_tuple_c.c

merge bzr.dev into cleanup

Show diffs side-by-side

added added

removed removed

Lines of Context:
183
183
static StaticTuple *
184
184
StaticTuple_FromSequence(PyObject *sequence)
185
185
{
186
 
    StaticTuple *new;
 
186
    StaticTuple *new = NULL;
 
187
    PyObject *as_tuple = NULL;
187
188
    PyObject *item;
188
189
    Py_ssize_t i, size;
189
190
 
192
193
        return (StaticTuple *)sequence;
193
194
    }
194
195
    if (!PySequence_Check(sequence)) {
195
 
        PyErr_Format(PyExc_TypeError, "Type %s is not a sequence type",
196
 
                     Py_TYPE(sequence)->tp_name);
197
 
        return NULL;
 
196
        as_tuple = PySequence_Tuple(sequence);
 
197
        if (as_tuple == NULL)
 
198
            goto done;
 
199
        sequence = as_tuple;
198
200
    }
199
201
    size = PySequence_Size(sequence);
200
 
    if (size == -1)
201
 
        return NULL;
 
202
    if (size == -1) {
 
203
        goto done;
 
204
    }
202
205
    new = StaticTuple_New(size);
203
206
    if (new == NULL) {
204
 
        return NULL;
 
207
        goto done;
205
208
    }
206
209
    for (i = 0; i < size; ++i) {
207
210
        // This returns a new reference, which we then 'steal' with 
209
212
        item = PySequence_GetItem(sequence, i);
210
213
        if (item == NULL) {
211
214
            Py_DECREF(new);
212
 
            return NULL;
 
215
            new = NULL;
 
216
            goto done;
213
217
        }
214
218
        StaticTuple_SET_ITEM(new, i, item);
215
219
    }
 
220
done:
 
221
    Py_XDECREF(as_tuple);
216
222
    return (StaticTuple *)new;
217
223
}
218
224