mercurial/bdiff.c
branchstable
changeset 16477 70b5e25f1598
parent 16437 d126a0d16856
child 16749 eab8ca175262
equal deleted inserted replaced
16476:83622954b64d 16477:70b5e25f1598
   337 	char *sa, *sb, *rb;
   337 	char *sa, *sb, *rb;
   338 	PyObject *result = NULL;
   338 	PyObject *result = NULL;
   339 	struct line *al, *bl;
   339 	struct line *al, *bl;
   340 	struct hunk l, *h;
   340 	struct hunk l, *h;
   341 	int an, bn, len = 0, la, lb, count;
   341 	int an, bn, len = 0, la, lb, count;
       
   342 	PyThreadState *_save;
   342 
   343 
   343 	if (!PyArg_ParseTuple(args, "s#s#:bdiff", &sa, &la, &sb, &lb))
   344 	if (!PyArg_ParseTuple(args, "s#s#:bdiff", &sa, &la, &sb, &lb))
   344 		return NULL;
   345 		return NULL;
   345 
   346 
       
   347 	_save = PyEval_SaveThread();
   346 	an = splitlines(sa, la, &al);
   348 	an = splitlines(sa, la, &al);
   347 	bn = splitlines(sb, lb, &bl);
   349 	bn = splitlines(sb, lb, &bl);
   348 	if (!al || !bl)
   350 	if (!al || !bl)
   349 		goto nomem;
   351 		goto nomem;
   350 
   352 
   359 		if (h->a1 != la || h->b1 != lb)
   361 		if (h->a1 != la || h->b1 != lb)
   360 			len += 12 + bl[h->b1].l - bl[lb].l;
   362 			len += 12 + bl[h->b1].l - bl[lb].l;
   361 		la = h->a2;
   363 		la = h->a2;
   362 		lb = h->b2;
   364 		lb = h->b2;
   363 	}
   365 	}
       
   366 	PyEval_RestoreThread(_save);
       
   367 	_save = NULL;
   364 
   368 
   365 	result = PyBytes_FromStringAndSize(NULL, len);
   369 	result = PyBytes_FromStringAndSize(NULL, len);
   366 
   370 
   367 	if (!result)
   371 	if (!result)
   368 		goto nomem;
   372 		goto nomem;
   383 		la = h->a2;
   387 		la = h->a2;
   384 		lb = h->b2;
   388 		lb = h->b2;
   385 	}
   389 	}
   386 
   390 
   387 nomem:
   391 nomem:
       
   392 	if (_save)
       
   393 		PyEval_RestoreThread(_save);
   388 	free(al);
   394 	free(al);
   389 	free(bl);
   395 	free(bl);
   390 	freehunks(l.next);
   396 	freehunks(l.next);
   391 	return result ? result : PyErr_NoMemory();
   397 	return result ? result : PyErr_NoMemory();
   392 }
   398 }