mercurial/bdiff.c
branchstable
changeset 19962 66b21ce60a19
parent 18551 d6fb7bbec16a
child 29010 e868d8ee7c8f
equal deleted inserted replaced
19961:1d7a36ff2615 19962:66b21ce60a19
   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 */