version 1.47, 2005/07/10 13:58:19 |
version 1.48, 2005/07/10 21:50:25 |
|
|
|
|
|
|
static int aflag, bflag, dflag, iflag, Nflag, pflag, tflag, Tflag, wflag; |
static int aflag, bflag, dflag, iflag, Nflag, pflag, tflag, Tflag, wflag; |
static int context, status; |
static int context; |
static int format = D_NORMAL; |
static int format = D_NORMAL; |
static struct stat stb1, stb2; |
static struct stat stb1, stb2; |
static char *ifdefname, *ignore_pats, diffargs[128]; |
static char *ifdefname, *ignore_pats, diffargs[128]; |
|
|
f1 = fopen(file1, "r"); |
f1 = fopen(file1, "r"); |
if (f1 == NULL) { |
if (f1 == NULL) { |
cvs_log(LP_ERRNO, "%s", file1); |
cvs_log(LP_ERRNO, "%s", file1); |
status |= 2; |
|
goto closem; |
goto closem; |
} |
} |
|
|
f2 = fopen(file2, "r"); |
f2 = fopen(file2, "r"); |
if (f2 == NULL) { |
if (f2 == NULL) { |
cvs_log(LP_ERRNO, "%s", file2); |
cvs_log(LP_ERRNO, "%s", file2); |
status |= 2; |
|
goto closem; |
goto closem; |
} |
} |
|
|
|
|
break; |
break; |
default: |
default: |
/* error */ |
/* error */ |
status |= 2; |
|
goto closem; |
goto closem; |
} |
} |
|
|
if (!asciifile(f1) || !asciifile(f2)) { |
if (!asciifile(f1) || !asciifile(f2)) { |
rval = D_BINARY; |
rval = D_BINARY; |
status |= 1; |
|
goto closem; |
goto closem; |
} |
} |
if ((prepare(0, f1, stb1.st_size) < 0) || |
if ((prepare(0, f1, stb1.st_size) < 0) || |
(prepare(1, f2, stb2.st_size) < 0)) { |
(prepare(1, f2, stb2.st_size) < 0)) { |
status |= 2; |
|
goto closem; |
goto closem; |
} |
} |
prune(); |
prune(); |
|
|
|
|
member = (int *)file[1]; |
member = (int *)file[1]; |
equiv(sfile[0], slen[0], sfile[1], slen[1], member); |
equiv(sfile[0], slen[0], sfile[1], slen[1], member); |
if ((tmp = realloc(member, (slen[1] + 2) * sizeof(int))) == NULL) { |
if ((tmp = realloc(member, (slen[1] + 2) * sizeof(int))) == NULL) |
status |= 2; |
|
goto closem; |
goto closem; |
} |
|
member = (int *)tmp; |
member = (int *)tmp; |
|
|
class = (int *)file[0]; |
class = (int *)file[0]; |
unsort(sfile[0], slen[0], class); |
unsort(sfile[0], slen[0], class); |
if ((tmp = realloc(class, (slen[0] + 2) * sizeof(int))) == NULL) { |
if ((tmp = realloc(class, (slen[0] + 2) * sizeof(int))) == NULL) |
status |= 2; |
|
goto closem; |
goto closem; |
} |
|
class = (int *)tmp; |
class = (int *)tmp; |
|
|
if ((klist = malloc((slen[0] + 2) * sizeof(int))) == NULL) { |
if ((klist = malloc((slen[0] + 2) * sizeof(int))) == NULL) { |
cvs_log(LP_ERRNO, "failed to allocate klist"); |
cvs_log(LP_ERRNO, "failed to allocate klist"); |
status |= 2; |
|
goto closem; |
goto closem; |
} |
} |
clen = 0; |
clen = 0; |
clistlen = 100; |
clistlen = 100; |
if ((clist = malloc(clistlen * sizeof(cand))) == NULL) { |
if ((clist = malloc(clistlen * sizeof(cand))) == NULL) { |
cvs_log(LP_ERRNO, "failed to allocate clist"); |
cvs_log(LP_ERRNO, "failed to allocate clist"); |
status |= 2; |
|
goto closem; |
goto closem; |
} |
} |
i = stone(class, slen[0], member, klist); |
|
|
if ((i = stone(class, slen[0], member, klist)) < 0) |
|
goto closem; |
|
|
free(member); |
free(member); |
free(class); |
free(class); |
|
|
|
|
|
|
closem: |
closem: |
if (anychange) { |
if (anychange) { |
status |= 1; |
|
if (rval == D_SAME) |
if (rval == D_SAME) |
rval = D_DIFFER; |
rval = D_DIFFER; |
} |
} |
|
|
static int |
static int |
stone(int *a, int n, int *b, int *c) |
stone(int *a, int n, int *b, int *c) |
{ |
{ |
|
int ret; |
int i, k, y, j, l; |
int i, k, y, j, l; |
int oldc, tc, oldl; |
int oldc, tc, oldl; |
u_int numtries; |
u_int numtries; |
|
|
const u_int bound = dflag ? UINT_MAX : MAX(256, (u_int)isqrt(n)); |
const u_int bound = dflag ? UINT_MAX : MAX(256, (u_int)isqrt(n)); |
|
|
k = 0; |
k = 0; |
c[0] = newcand(0, 0, 0); |
if ((ret = newcand(0, 0, 0)) < 0) |
|
return (-1); |
|
c[0] = ret; |
for (i = 1; i <= n; i++) { |
for (i = 1; i <= n; i++) { |
j = a[i]; |
j = a[i]; |
if (j == 0) |
if (j == 0) |
|
|
if (clist[c[l]].y <= y) |
if (clist[c[l]].y <= y) |
continue; |
continue; |
tc = c[l]; |
tc = c[l]; |
c[l] = newcand(i, y, oldc); |
if ((ret = newcand(i, y, oldc)) < 0) |
|
return (-1); |
|
c[l] = ret; |
oldc = tc; |
oldc = tc; |
oldl = l; |
oldl = l; |
numtries++; |
numtries++; |
} else { |
} else { |
c[l] = newcand(i, y, oldc); |
if ((ret = newcand(i, y, oldc)) < 0) |
|
return (-1); |
|
c[l] = ret; |
k++; |
k++; |
break; |
break; |
} |
} |