static int diff_two(const char *file1, const char *label1, const char *file2, const char *label2) { xpparam_t xpp; xdemitconf_t xecfg; xdemitcb_t ecb; mmfile_t minus, plus; int ret; if (read_mmfile(&minus, file1) || read_mmfile(&plus, file2)) return -1; printf("--- a/%s\n+++ b/%s\n", label1, label2); fflush(stdout); memset(&xpp, 0, sizeof(xpp)); xpp.flags = 0; memset(&xecfg, 0, sizeof(xecfg)); xecfg.ctxlen = 3; ecb.outf = outf; ret = xdi_diff(&minus, &plus, &xpp, &xecfg, &ecb); free(minus.ptr); free(plus.ptr); return ret; }
static void show_diff(struct merge_list *entry) { unsigned long size; mmfile_t src, dst; xpparam_t xpp; xdemitconf_t xecfg; xdemitcb_t ecb; xpp.flags = XDF_NEED_MINIMAL; memset(&xecfg, 0, sizeof(xecfg)); xecfg.ctxlen = 3; ecb.outf = show_outf; ecb.priv = NULL; src.ptr = origin(entry, &size); if (!src.ptr) size = 0; src.size = size; dst.ptr = result(entry, &size); if (!dst.ptr) size = 0; dst.size = size; xdi_diff(&src, &dst, &xpp, &xecfg, &ecb); free(src.ptr); free(dst.ptr); }
static int diff_hunks(mmfile_t *file_a, mmfile_t *file_b, xdl_emit_hunk_consume_func_t hunk_func, void *cb_data, int xdl_opts) { xpparam_t xpp = {0}; xdemitconf_t xecfg = {0}; xdemitcb_t ecb = {NULL}; xpp.flags = xdl_opts; xecfg.hunk_func = hunk_func; ecb.priv = cb_data; return xdi_diff(file_a, file_b, &xpp, &xecfg, &ecb); }
int xdi_diff_hunks(mmfile_t *mf1, mmfile_t *mf2, xdiff_emit_hunk_consume_fn fn, void *consume_callback_data, xpparam_t const *xpp, xdemitconf_t *xecfg) { struct xdiff_emit_hunk_state state; xdemitcb_t ecb; memset(&state, 0, sizeof(state)); memset(&ecb, 0, sizeof(ecb)); state.consume = fn; state.consume_callback_data = consume_callback_data; xecfg->emit_func = (void (*)())process_diff; ecb.priv = &state; return xdi_diff(mf1, mf2, xpp, xecfg, &ecb); }
int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2, xdiff_emit_consume_fn fn, void *consume_callback_data, xpparam_t const *xpp, xdemitconf_t const *xecfg, xdemitcb_t *xecb) { int ret; struct xdiff_emit_state state; memset(&state, 0, sizeof(state)); state.consume = fn; state.consume_callback_data = consume_callback_data; xecb->outf = xdiff_outf; xecb->priv = &state; strbuf_init(&state.remainder, 0); ret = xdi_diff(mf1, mf2, xpp, xecfg, xecb); strbuf_release(&state.remainder); return ret; }
static int generate_common_file(mmfile_t *res, mmfile_t *f1, mmfile_t *f2) { unsigned long size = f1->size < f2->size ? f1->size : f2->size; void *ptr = xmalloc(size); xpparam_t xpp; xdemitconf_t xecfg; xdemitcb_t ecb; xpp.flags = XDF_NEED_MINIMAL; memset(&xecfg, 0, sizeof(xecfg)); xecfg.ctxlen = 3; xecfg.flags = XDL_EMIT_COMMON; ecb.outf = common_outf; res->ptr = ptr; res->size = 0; ecb.priv = res; return xdi_diff(f1, f2, &xpp, &xecfg, &ecb); }
int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2, xdiff_emit_hunk_fn hunk_fn, xdiff_emit_line_fn line_fn, void *consume_callback_data, xpparam_t const *xpp, xdemitconf_t const *xecfg) { int ret; struct xdiff_emit_state state; xdemitcb_t ecb; memset(&state, 0, sizeof(state)); state.hunk_fn = hunk_fn; state.line_fn = line_fn; state.consume_callback_data = consume_callback_data; memset(&ecb, 0, sizeof(ecb)); if (hunk_fn) ecb.out_hunk = xdiff_out_hunk; ecb.out_line = xdiff_outf; ecb.priv = &state; strbuf_init(&state.remainder, 0); ret = xdi_diff(mf1, mf2, xpp, xecfg, &ecb); strbuf_release(&state.remainder); return ret; }