301 PyObject *sa, *sb, *rl = NULL, *m; |
301 PyObject *sa, *sb, *rl = NULL, *m; |
302 struct line *a, *b; |
302 struct line *a, *b; |
303 struct hunk l, *h; |
303 struct hunk l, *h; |
304 int an, bn, count, pos = 0; |
304 int an, bn, count, pos = 0; |
305 |
305 |
|
306 l.next = NULL; |
|
307 |
306 if (!PyArg_ParseTuple(args, "SS:bdiff", &sa, &sb)) |
308 if (!PyArg_ParseTuple(args, "SS:bdiff", &sa, &sb)) |
307 return NULL; |
309 return NULL; |
308 |
310 |
309 an = splitlines(PyBytes_AsString(sa), PyBytes_Size(sa), &a); |
311 an = splitlines(PyBytes_AsString(sa), PyBytes_Size(sa), &a); |
310 bn = splitlines(PyBytes_AsString(sb), PyBytes_Size(sb), &b); |
312 bn = splitlines(PyBytes_AsString(sb), PyBytes_Size(sb), &b); |
311 |
313 |
312 if (!a || !b) |
314 if (!a || !b) |
313 goto nomem; |
315 goto nomem; |
314 |
316 |
315 l.next = NULL; |
|
316 count = diff(a, an, b, bn, &l); |
317 count = diff(a, an, b, bn, &l); |
317 if (count < 0) |
318 if (count < 0) |
318 goto nomem; |
319 goto nomem; |
319 |
320 |
320 rl = PyList_New(count); |
321 rl = PyList_New(count); |
342 struct hunk l, *h; |
343 struct hunk l, *h; |
343 int an, bn, count; |
344 int an, bn, count; |
344 Py_ssize_t len = 0, la, lb; |
345 Py_ssize_t len = 0, la, lb; |
345 PyThreadState *_save; |
346 PyThreadState *_save; |
346 |
347 |
|
348 l.next = NULL; |
|
349 |
347 if (!PyArg_ParseTuple(args, "s#s#:bdiff", &sa, &la, &sb, &lb)) |
350 if (!PyArg_ParseTuple(args, "s#s#:bdiff", &sa, &la, &sb, &lb)) |
348 return NULL; |
351 return NULL; |
349 |
352 |
350 if (la > UINT_MAX || lb > UINT_MAX) { |
353 if (la > UINT_MAX || lb > UINT_MAX) { |
351 PyErr_SetString(PyExc_ValueError, "bdiff inputs too large"); |
354 PyErr_SetString(PyExc_ValueError, "bdiff inputs too large"); |
356 an = splitlines(sa, la, &al); |
359 an = splitlines(sa, la, &al); |
357 bn = splitlines(sb, lb, &bl); |
360 bn = splitlines(sb, lb, &bl); |
358 if (!al || !bl) |
361 if (!al || !bl) |
359 goto nomem; |
362 goto nomem; |
360 |
363 |
361 l.next = NULL; |
|
362 count = diff(al, an, bl, bn, &l); |
364 count = diff(al, an, bl, bn, &l); |
363 if (count < 0) |
365 if (count < 0) |
364 goto nomem; |
366 goto nomem; |
365 |
367 |
366 /* calculate length of output */ |
368 /* calculate length of output */ |