Changeset View
Changeset View
Standalone View
Standalone View
usr.bin/diff3/diff3.c
Show First 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | |||||||||
static int edit(struct diff *, bool, int); | static int edit(struct diff *, bool, int); | ||||||||
static char *getchange(FILE *); | static char *getchange(FILE *); | ||||||||
static char *get_line(FILE *, size_t *); | static char *get_line(FILE *, size_t *); | ||||||||
static int readin(int fd, struct diff **); | static int readin(int fd, struct diff **); | ||||||||
static int skip(int, int, const char *); | static int skip(int, int, const char *); | ||||||||
static void change(int, struct range *, bool); | static void change(int, struct range *, bool); | ||||||||
static void keep(int, struct range *); | static void keep(int, struct range *); | ||||||||
static void merge(int, int); | static void merge(int, int); | ||||||||
static void prange(struct range *); | static void prange(struct range *, bool); | ||||||||
pstef: I would use bool. It's a minor nit, but I think this code is unclear as it is. | |||||||||
static void repos(int); | static void repos(int); | ||||||||
static void edscript(int) __dead2; | static void edscript(int) __dead2; | ||||||||
static void increase(void); | static void increase(void); | ||||||||
static void usage(void) __dead2; | static void usage(void) __dead2; | ||||||||
enum { | enum { | ||||||||
DIFFPROG_OPT, | DIFFPROG_OPT, | ||||||||
STRIPCR_OPT, | STRIPCR_OPT, | ||||||||
▲ Show 20 Lines • Show All 226 Lines • ▼ Show 20 Lines | |||||||||
* printed later. | * printed later. | ||||||||
*/ | */ | ||||||||
static void | static void | ||||||||
change(int i, struct range *rold, bool dup) | change(int i, struct range *rold, bool dup) | ||||||||
{ | { | ||||||||
printf("%d:", i); | printf("%d:", i); | ||||||||
last[i] = rold->to; | last[i] = rold->to; | ||||||||
prange(rold); | prange(rold, false); | ||||||||
if (dup) | if (dup) | ||||||||
return; | return; | ||||||||
i--; | i--; | ||||||||
skip(i, rold->from, NULL); | skip(i, rold->from, NULL); | ||||||||
skip(i, rold->to, " "); | skip(i, rold->to, " "); | ||||||||
} | } | ||||||||
/* | /* | ||||||||
* Print the range of line numbers, rold.from thru rold.to, as n1,n2 or | * Print the range of line numbers, rold.from thru rold.to, as n1,n2 or | ||||||||
* n1. | * n1. | ||||||||
*/ | */ | ||||||||
static void | static void | ||||||||
prange(struct range *rold) | prange(struct range *rold, bool delete) | ||||||||
{ | { | ||||||||
if (rold->to <= rold->from) | if (rold->to <= rold->from) | ||||||||
printf("%da\n", rold->from - 1); | printf("%da\n", rold->from - 1); | ||||||||
else { | else { | ||||||||
printf("%d", rold->from); | printf("%d", rold->from); | ||||||||
if (rold->to > rold->from + 1) | if (rold->to > rold->from + 1) | ||||||||
printf(",%d", rold->to - 1); | printf(",%d", rold->to - 1); | ||||||||
if (delete) | |||||||||
printf("d\n"); | |||||||||
else | |||||||||
printf("c\n"); | printf("c\n"); | ||||||||
} | } | ||||||||
} | } | ||||||||
/* | /* | ||||||||
* No difference was reported by diff between file 1 (or 2) and file 3, | * No difference was reported by diff between file 1 (or 2) and file 3, | ||||||||
* and an artificial dummy difference (trange) must be ginned up to | * and an artificial dummy difference (trange) must be ginned up to | ||||||||
* correspond to the change reported in the other file. | * correspond to the change reported in the other file. | ||||||||
*/ | */ | ||||||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | edit(struct diff *diff, bool dup, int j) | ||||||||
return (j); | return (j); | ||||||||
} | } | ||||||||
/* regurgitate */ | /* regurgitate */ | ||||||||
static void | static void | ||||||||
edscript(int n) | edscript(int n) | ||||||||
{ | { | ||||||||
int k; | int k; | ||||||||
bool delete; | |||||||||
size_t j; | size_t j; | ||||||||
char block[BUFSIZ]; | char block[BUFSIZ]; | ||||||||
for (; n > 0; n--) { | for (; n > 0; n--) { | ||||||||
delete = (de[n].new.from == de[n].new.to); | |||||||||
if (!oflag || !overlap[n]) { | if (!oflag || !overlap[n]) { | ||||||||
prange(&de[n].old); | prange(&de[n].old, delete); | ||||||||
Not Done Inline Actions
The value of the boolean expression is used only once, so maybe it would be better to evaluate it directly in the function call? pstef: The value of the boolean expression is used only once, so maybe it would be better to evaluate… | |||||||||
Done Inline ActionsI'll convert it to bool, I think having a variable helps make the code a little clearer here. When -A and -m output modes come in they use the value of delete and I think consistency between the three output modes is a good idea. thj: I'll convert it to bool, I think having a variable helps make the code a little clearer here. | |||||||||
} else { | } else { | ||||||||
printf("%da\n", de[n].old.to - 1); | printf("%da\n", de[n].old.to - 1); | ||||||||
if (Aflag) { | if (Aflag) { | ||||||||
printf("%s\n", f2mark); | printf("%s\n", f2mark); | ||||||||
fseek(fp[1], de[n].old.from, SEEK_SET); | fseek(fp[1], de[n].old.from, SEEK_SET); | ||||||||
for (k = de[n].old.to - de[n].old.from; k > 0; k -= j) { | for (k = de[n].old.to - de[n].old.from; k > 0; k -= j) { | ||||||||
j = k > BUFSIZ ? BUFSIZ : k; | j = k > BUFSIZ ? BUFSIZ : k; | ||||||||
if (fread(block, 1, j, fp[1]) != j) | if (fread(block, 1, j, fp[1]) != j) | ||||||||
Show All 14 Lines | for (k = de[n].new.to - de[n].new.from; k > 0; k -= j) { | ||||||||
if (feof(fp[2])) | if (feof(fp[2])) | ||||||||
break; | break; | ||||||||
errx(2, "logic error"); | errx(2, "logic error"); | ||||||||
} | } | ||||||||
if (r != j) | if (r != j) | ||||||||
j = r; | j = r; | ||||||||
(void)fwrite(block, 1, j, stdout); | (void)fwrite(block, 1, j, stdout); | ||||||||
} | } | ||||||||
if (!oflag || !overlap[n]) | if (!oflag || !overlap[n]) { | ||||||||
if (!delete) | |||||||||
printf(".\n"); | printf(".\n"); | ||||||||
else { | } else { | ||||||||
printf("%s\n.\n", f3mark); | printf("%s\n.\n", f3mark); | ||||||||
printf("%da\n%s\n.\n", de[n].old.from - 1, f1mark); | printf("%da\n%s\n.\n", de[n].old.from - 1, f1mark); | ||||||||
} | } | ||||||||
} | } | ||||||||
if (iflag) | if (iflag) | ||||||||
printf("w\nq\n"); | printf("w\nq\n"); | ||||||||
exit(eflag == 0 ? overlapcnt : 0); | exit(eflag == 0 ? overlapcnt : 0); | ||||||||
▲ Show 20 Lines • Show All 218 Lines • Show Last 20 Lines |
I would use bool. It's a minor nit, but I think this code is unclear as it is.