1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#define FOR_comm
26#include "toys.h"
27
28static void writeline(const char *line, int col)
29{
30 if (!col && FLAG(1)) return;
31 else if (col == 1) {
32 if (FLAG(2)) return;
33 if (!FLAG(1)) putchar('\t');
34 } else if (col == 2) {
35 if (FLAG(3)) return;
36 if (!FLAG(1)) putchar('\t');
37 if (!FLAG(2)) putchar('\t');
38 }
39 puts(line);
40}
41
42void comm_main(void)
43{
44 FILE *file[2];
45 char *line[2];
46 int i;
47
48 if (toys.optflags == 7) return;
49
50 for (i = 0; i < 2; i++) {
51 file[i] = xfopen(toys.optargs[i], "r");
52 line[i] = xgetline(file[i]);
53 }
54
55 while (line[0] && line[1]) {
56 int order = strcmp(line[0], line[1]);
57
58 if (order == 0) {
59 writeline(line[0], 2);
60 for (i = 0; i < 2; i++) {
61 free(line[i]);
62 line[i] = xgetline(file[i]);
63 }
64 } else {
65 i = order < 0 ? 0 : 1;
66 writeline(line[i], i);
67 free(line[i]);
68 line[i] = xgetline(file[i]);
69 }
70 }
71
72
73 for (i = line[0] ? 0 : 1; line[i];) {
74 writeline(line[i], i);
75 free(line[i]);
76 line[i] = xgetline(file[i]);
77 }
78
79 if (CFG_TOYBOX_FREE) for (i = 0; i < 2; i++) fclose(file[i]);
80}
81