Mercurial > hg
changeset 29692:6b3a8d034b69
mpatch: provide things that will be exported later with a prefixed name
For cffi a bunch of mpatch functions need to be visible through a .h file.
This change renames them so it won't create potential c namespace conflicts.
author | Maciej Fijalkowski <fijall@gmail.com> |
---|---|
date | Mon, 18 Jul 2016 16:25:14 +0200 |
parents | e9a0bcc9314d |
children | b9b9f9a92481 |
files | mercurial/mpatch.c |
diffstat | 1 files changed, 40 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/mpatch.c Mon Jul 18 15:14:40 2016 +0200 +++ b/mercurial/mpatch.c Mon Jul 18 16:25:14 2016 +0200 @@ -32,25 +32,25 @@ static char mpatch_doc[] = "Efficient binary patching."; static PyObject *mpatch_Error; -struct frag { +struct mpatch_frag { int start, end, len; const char *data; }; -struct flist { - struct frag *base, *head, *tail; +struct mpatch_flist { + struct mpatch_frag *base, *head, *tail; }; -static struct flist *lalloc(ssize_t size) +static struct mpatch_flist *lalloc(ssize_t size) { - struct flist *a = NULL; + struct mpatch_flist *a = NULL; if (size < 1) size = 1; - a = (struct flist *)malloc(sizeof(struct flist)); + a = (struct mpatch_flist *)malloc(sizeof(struct mpatch_flist)); if (a) { - a->base = (struct frag *)malloc(sizeof(struct frag) * size); + a->base = (struct mpatch_frag *)malloc(sizeof(struct mpatch_frag) * size); if (a->base) { a->head = a->tail = a->base; return a; @@ -63,7 +63,7 @@ return NULL; } -static void lfree(struct flist *a) +static void mpatch_lfree(struct mpatch_flist *a) { if (a) { free(a->base); @@ -71,7 +71,7 @@ } } -static ssize_t lsize(struct flist *a) +static ssize_t lsize(struct mpatch_flist *a) { return a->tail - a->head; } @@ -79,9 +79,10 @@ /* move hunks in source that are less cut to dest, compensating for changes in offset. the last hunk may be split if necessary. */ -static int gather(struct flist *dest, struct flist *src, int cut, int offset) +static int gather(struct mpatch_flist *dest, struct mpatch_flist *src, int cut, + int offset) { - struct frag *d = dest->tail, *s = src->head; + struct mpatch_frag *d = dest->tail, *s = src->head; int postend, c, l; while (s != src->tail) { @@ -124,9 +125,9 @@ } /* like gather, but with no output list */ -static int discard(struct flist *src, int cut, int offset) +static int discard(struct mpatch_flist *src, int cut, int offset) { - struct frag *s = src->head; + struct mpatch_frag *s = src->head; int postend, c, l; while (s != src->tail) { @@ -161,10 +162,11 @@ /* combine hunk lists a and b, while adjusting b for offset changes in a/ this deletes a and b and returns the resultant list. */ -static struct flist *combine(struct flist *a, struct flist *b) +static struct mpatch_flist *combine(struct mpatch_flist *a, + struct mpatch_flist *b) { - struct flist *c = NULL; - struct frag *bh, *ct; + struct mpatch_flist *c = NULL; + struct mpatch_frag *bh, *ct; int offset = 0, post; if (a && b) @@ -190,20 +192,20 @@ } /* hold on to tail from a */ - memcpy(c->tail, a->head, sizeof(struct frag) * lsize(a)); + memcpy(c->tail, a->head, sizeof(struct mpatch_frag) * lsize(a)); c->tail += lsize(a); } - lfree(a); - lfree(b); + mpatch_lfree(a); + mpatch_lfree(b); return c; } /* decode a binary patch into a hunk list */ -static struct flist *decode(const char *bin, ssize_t len) +static struct mpatch_flist *mpatch_decode(const char *bin, ssize_t len) { - struct flist *l; - struct frag *lt; + struct mpatch_flist *l; + struct mpatch_frag *lt; int pos = 0; /* assume worst case size, we won't have many of these lists */ @@ -227,7 +229,7 @@ if (pos != len) { if (!PyErr_Occurred()) PyErr_SetString(mpatch_Error, "patch cannot be decoded"); - lfree(l); + mpatch_lfree(l); return NULL; } @@ -236,10 +238,10 @@ } /* calculate the size of resultant text */ -static ssize_t calcsize(ssize_t len, struct flist *l) +static ssize_t mpatch_calcsize(ssize_t len, struct mpatch_flist *l) { ssize_t outlen = 0, last = 0; - struct frag *f = l->head; + struct mpatch_frag *f = l->head; while (f != l->tail) { if (f->start < last || f->end > len) { @@ -258,9 +260,10 @@ return outlen; } -static int apply(char *buf, const char *orig, ssize_t len, struct flist *l) +static int mpatch_apply(char *buf, const char *orig, ssize_t len, + struct mpatch_flist *l) { - struct frag *f = l->head; + struct mpatch_frag *f = l->head; int last = 0; char *p = buf; @@ -283,7 +286,8 @@ } /* recursively generate a patch of all bins between start and end */ -static struct flist *fold(PyObject *bins, ssize_t start, ssize_t end) +static struct mpatch_flist *mpatch_fold(PyObject *bins, ssize_t start, + ssize_t end) { ssize_t len, blen; const char *buffer; @@ -295,20 +299,20 @@ return NULL; if (PyObject_AsCharBuffer(tmp, &buffer, &blen)) return NULL; - return decode(buffer, blen); + return mpatch_decode(buffer, blen); } /* divide and conquer, memory management is elsewhere */ len = (end - start) / 2; - return combine(fold(bins, start, start + len), - fold(bins, start + len, end)); + return combine(mpatch_fold(bins, start, start + len), + mpatch_fold(bins, start + len, end)); } static PyObject * patches(PyObject *self, PyObject *args) { PyObject *text, *bins, *result; - struct flist *patch; + struct mpatch_flist *patch; const char *in; char *out; Py_ssize_t len, outlen, inlen; @@ -326,11 +330,11 @@ if (PyObject_AsCharBuffer(text, &in, &inlen)) return NULL; - patch = fold(bins, 0, len); + patch = mpatch_fold(bins, 0, len); if (!patch) return NULL; - outlen = calcsize(inlen, patch); + outlen = mpatch_calcsize(inlen, patch); if (outlen < 0) { result = NULL; goto cleanup; @@ -341,12 +345,12 @@ goto cleanup; } out = PyBytes_AsString(result); - if (!apply(out, in, inlen, patch)) { + if (!mpatch_apply(out, in, inlen, patch)) { Py_DECREF(result); result = NULL; } cleanup: - lfree(patch); + mpatch_lfree(patch); return result; }