aboutsummaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--ui-ssdiff.c33
-rw-r--r--ui-ssdiff.h12
2 files changed, 2 insertions, 43 deletions
diff --git a/ui-ssdiff.c b/ui-ssdiff.c
index 9fb5b11..2481585 100644
--- a/ui-ssdiff.c
+++ b/ui-ssdiff.c
@@ -2,12 +2,10 @@
#include "html.h"
#include "ui-shared.h"
#include "ui-diff.h"
-#include "ui-ssdiff.h"
extern int use_ssdiff;
static int current_old_line, current_new_line;
-static int **L = NULL;
struct deferred_lines {
int line_no;
@@ -18,42 +16,16 @@ struct deferred_lines {
static struct deferred_lines *deferred_old, *deferred_old_last;
static struct deferred_lines *deferred_new, *deferred_new_last;
-static void create_or_reset_lcs_table()
-{
- int i;
-
- if (L != NULL) {
- memset(*L, 0, sizeof(*L) * MAX_SSDIFF_SIZE);
- return;
- }
-
- // xcalloc will die if we ran out of memory;
- // not very helpful for debugging
- L = (int**)xcalloc(MAX_SSDIFF_M, sizeof(int *));
- *L = (int*)xcalloc(MAX_SSDIFF_SIZE, sizeof(int));
-
- for (i = 1; i < MAX_SSDIFF_M; i++) {
- L[i] = *L + i * MAX_SSDIFF_N;
- }
-}
-
static char *longest_common_subsequence(char *A, char *B)
{
int i, j, ri;
int m = strlen(A);
int n = strlen(B);
- int tmp1, tmp2, length;
+ int L[m + 1][n + 1];
+ int tmp1, tmp2;
int lcs_length;
char *result;
- length = (m + 1) * (n + 1);
-
- // We bail if the lines are too long
- if (length > MAX_SSDIFF_SIZE)
- return NULL;
-
- create_or_reset_lcs_table();
-
for (i = m; i >= 0; i--) {
for (j = n; j >= 0; j--) {
if (A[i] == '\0' || B[j] == '\0') {
@@ -87,7 +59,6 @@ static char *longest_common_subsequence(char *A, char *B)
j += 1;
}
}
-
return result;
}
diff --git a/ui-ssdiff.h b/ui-ssdiff.h
index 88627e2..64b4b12 100644
--- a/ui-ssdiff.h
+++ b/ui-ssdiff.h
@@ -1,18 +1,6 @@
#ifndef UI_SSDIFF_H
#define UI_SSDIFF_H
-/*
- * ssdiff line limits
- */
-#ifndef MAX_SSDIFF_M
-#define MAX_SSDIFF_M 128
-#endif
-
-#ifndef MAX_SSDIFF_N
-#define MAX_SSDIFF_N 128
-#endif
-#define MAX_SSDIFF_SIZE ((MAX_SSDIFF_M) * (MAX_SSDIFF_N))
-
extern void cgit_ssdiff_print_deferred_lines();
extern void cgit_ssdiff_line_cb(char *line, int len);