From: Edward Thomson <ethomson@edwardthomson.com>
To: git@vger.kernel.org
Cc: johannes.schindelin@gmx.de,
"Phillip Wood" <phillip.wood123@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH v2 1/1] xdiff: provide indirection to git functions
Date: Thu, 17 Feb 2022 22:54:08 +0000 [thread overview]
Message-ID: <20220217225408.GB7@edef91d97c94> (raw)
In-Reply-To: <20220217225218.GA7@edef91d97c94>
Provide an indirection layer into the git-specific functionality and
utilities in `git-xdiff.h`, prefixing those types and functions with
`xdl_` (and `XDL_` for macros). This allows other projects that use
git's xdiff implementation to keep up-to-date; they can now take all the
files _except_ `git-xdiff.h`, which they have customized for their own
environment.
Signed-off-by: Edward Thomson <ethomson@edwardthomson.com>
---
xdiff/git-xdiff.h | 16 ++++++++++++++++
xdiff/xdiff.h | 8 +++-----
xdiff/xdiffi.c | 20 ++++++++++----------
xdiff/xinclude.h | 2 +-
xdiff/xmerge.c | 4 ++--
5 files changed, 32 insertions(+), 18 deletions(-)
create mode 100644 xdiff/git-xdiff.h
diff --git a/xdiff/git-xdiff.h b/xdiff/git-xdiff.h
new file mode 100644
index 0000000000..664a7c1351
--- /dev/null
+++ b/xdiff/git-xdiff.h
@@ -0,0 +1,16 @@
+#ifndef GIT_XDIFF_H
+#define GIT_XDIFF_H
+
+#include "git-compat-util.h"
+
+#define xdl_malloc(x) xmalloc(x)
+#define xdl_free(ptr) free(ptr)
+#define xdl_realloc(ptr,x) xrealloc(ptr,x)
+
+#define xdl_regex_t regex_t
+#define xdl_regmatch_t regmatch_t
+#define xdl_regexec_buf(p, b, s, n, m, f) regexec_buf(p, b, s, n, m, f)
+
+#define XDL_BUG(msg) BUG(msg)
+
+#endif
diff --git a/xdiff/xdiff.h b/xdiff/xdiff.h
index 72e25a9ffa..fb47f63fbf 100644
--- a/xdiff/xdiff.h
+++ b/xdiff/xdiff.h
@@ -27,6 +27,8 @@
extern "C" {
#endif /* #ifdef __cplusplus */
+#include "git-xdiff.h"
+
/* xpparm_t.flags */
#define XDF_NEED_MINIMAL (1 << 0)
@@ -82,7 +84,7 @@ typedef struct s_xpparam {
unsigned long flags;
/* -I<regex> */
- regex_t **ignore_regex;
+ xdl_regex_t **ignore_regex;
size_t ignore_regex_nr;
/* See Documentation/diff-options.txt. */
@@ -119,10 +121,6 @@ typedef struct s_bdiffparam {
} bdiffparam_t;
-#define xdl_malloc(x) xmalloc(x)
-#define xdl_free(ptr) free(ptr)
-#define xdl_realloc(ptr,x) xrealloc(ptr,x)
-
void *xdl_mmfile_first(mmfile_t *mmf, long *size);
long xdl_mmfile_size(mmfile_t *mmf);
diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c
index 69689fab24..af31b7f4b3 100644
--- a/xdiff/xdiffi.c
+++ b/xdiff/xdiffi.c
@@ -832,7 +832,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
/* Shift the group backward as much as possible: */
while (!group_slide_up(xdf, &g))
if (group_previous(xdfo, &go))
- BUG("group sync broken sliding up");
+ XDL_BUG("group sync broken sliding up");
/*
* This is this highest that this group can be shifted.
@@ -848,7 +848,7 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
if (group_slide_down(xdf, &g))
break;
if (group_next(xdfo, &go))
- BUG("group sync broken sliding down");
+ XDL_BUG("group sync broken sliding down");
if (go.end > go.start)
end_matching_other = g.end;
@@ -873,9 +873,9 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
*/
while (go.end == go.start) {
if (group_slide_up(xdf, &g))
- BUG("match disappeared");
+ XDL_BUG("match disappeared");
if (group_previous(xdfo, &go))
- BUG("group sync broken sliding to match");
+ XDL_BUG("group sync broken sliding to match");
}
} else if (flags & XDF_INDENT_HEURISTIC) {
/*
@@ -916,9 +916,9 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
while (g.end > best_shift) {
if (group_slide_up(xdf, &g))
- BUG("best shift unreached");
+ XDL_BUG("best shift unreached");
if (group_previous(xdfo, &go))
- BUG("group sync broken sliding to blank line");
+ XDL_BUG("group sync broken sliding to blank line");
}
}
@@ -927,11 +927,11 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
if (group_next(xdf, &g))
break;
if (group_next(xdfo, &go))
- BUG("group sync broken moving to next group");
+ XDL_BUG("group sync broken moving to next group");
}
if (!group_next(xdfo, &go))
- BUG("group sync broken at end of file");
+ XDL_BUG("group sync broken at end of file");
return 0;
}
@@ -1011,11 +1011,11 @@ static void xdl_mark_ignorable_lines(xdchange_t *xscr, xdfenv_t *xe, long flags)
}
static int record_matches_regex(xrecord_t *rec, xpparam_t const *xpp) {
- regmatch_t regmatch;
+ xdl_regmatch_t regmatch;
int i;
for (i = 0; i < xpp->ignore_regex_nr; i++)
- if (!regexec_buf(xpp->ignore_regex[i], rec->ptr, rec->size, 1,
+ if (!xdl_regexec_buf(xpp->ignore_regex[i], rec->ptr, rec->size, 1,
®match, 0))
return 1;
diff --git a/xdiff/xinclude.h b/xdiff/xinclude.h
index a4285ac0eb..75db1d8f35 100644
--- a/xdiff/xinclude.h
+++ b/xdiff/xinclude.h
@@ -23,7 +23,7 @@
#if !defined(XINCLUDE_H)
#define XINCLUDE_H
-#include "git-compat-util.h"
+#include "git-xdiff.h"
#include "xmacros.h"
#include "xdiff.h"
#include "xtypes.h"
diff --git a/xdiff/xmerge.c b/xdiff/xmerge.c
index fff0b594f9..433e2d7415 100644
--- a/xdiff/xmerge.c
+++ b/xdiff/xmerge.c
@@ -88,7 +88,7 @@ static int xdl_cleanup_merge(xdmerge_t *c)
if (c->mode == 0)
count++;
next_c = c->next;
- free(c);
+ xdl_free(c);
}
return count;
}
@@ -456,7 +456,7 @@ static void xdl_merge_two_conflicts(xdmerge_t *m)
m->chg1 = next_m->i1 + next_m->chg1 - m->i1;
m->chg2 = next_m->i2 + next_m->chg2 - m->i2;
m->next = next_m->next;
- free(next_m);
+ xdl_free(next_m);
}
/*
--
2.35.1
next prev parent reply other threads:[~2022-02-17 22:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-17 22:52 [PATCH v2 0/1] xdiff: provide indirection to git functions Edward Thomson
2022-02-17 22:54 ` Edward Thomson [this message]
2022-02-22 11:14 ` [PATCH v2 1/1] " Phillip Wood
2022-02-25 15:41 ` Johannes Schindelin
2022-02-25 18:24 ` Junio C Hamano
2022-02-25 18:38 ` Edward Thomson
2022-02-25 18:58 ` Junio C Hamano
2022-02-25 19:03 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220217225408.GB7@edef91d97c94 \
--to=ethomson@edwardthomson.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=phillip.wood123@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.