commit - 72311eba1e091f581f894b17962842d212a0a73a
commit + 2b9186217b1d8cca1354498715e7fddb01ccd481
blob - b4a9acb0cdc71e2d714c76d3f510873470cb8236
blob + 222a4a24891b9bbe1b5841616efa323af443afa4
--- diff.1
+++ diff.1
.Nd compare files
.Sh SYNOPSIS
.Nm diff
+.Op Fl u
+.Op Fl U Ar number
.Ar file1 file2
.Sh DESCRIPTION
The
and
.Ar file2
line by line.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl u
+Produces a unified diff with 3 lines of context.
+.It Fl U Ar number
+Similar to
+.Fl u
+with
+.Ar number
+lines of context.
+.El
.Sh EXIT STATUS
The
.Nm
blob - 3344aeac27a0c5d0e85706e5967a72c931ebb1b1
blob + 1052643f3e50a4a715acce0247da56ddc6b786af
--- diff.c
+++ diff.c
#include <err.h>
#include <fcntl.h>
+#include <limits.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "diff_main.h"
+#define DEFAULT_CONTEXT 3
+
+#define F_UNIFIED (1 << 0)
+
__dead void usage(void);
-int diffreg(char *, char *, int);
+int diffreg(char *, char *, int, int);
char *mmapfile(const char *, struct stat *);
const struct diff_algo_config myers, patience, myers_divide;
int
main(int argc, char *argv[])
{
- int ch;
+ int ch, context = DEFAULT_CONTEXT, flags = 0;
+ long lval;
+ char *ep;
- while ((ch = getopt(argc, argv, "")) != -1) {
+ while ((ch = getopt(argc, argv, "uU:")) != -1) {
switch (ch) {
+ case 'U':
+ lval = strtol(optarg, &ep, 10);
+ if (*ep != '\0' || lval < 0 || lval >= INT_MAX)
+ usage();
+ context = (int)lval;
+ /* FALLTHROUGH */
+ case 'u':
+ flags |= F_UNIFIED;
+ break;
default:
usage();
}
if (argc != 2)
usage();
- return diffreg(argv[0], argv[1], 0);
+ return diffreg(argv[0], argv[1], flags, context);
}
int
-diffreg(char *file1, char *file2, int flags)
+diffreg(char *file1, char *file2, int flags, int context)
{
char *str1, *str2;
struct stat st1, st2;
str1 = mmapfile(file1, &st1);
str2 = mmapfile(file2, &st2);
- diff_unidiff(stdout, &diff_config, &info, str1, st1.st_size, str2,
- st2.st_size, 3);
+ if (flags & F_UNIFIED)
+ diff_unidiff(stdout, &diff_config, &info, str1, st1.st_size,
+ str2, st2.st_size, context);
+ else
+ diff_plain(stdout, &diff_config, &info, str1, st1.st_size,
+ str2, st2.st_size);
munmap(str1, st1.st_size);
munmap(str2, st2.st_size);
blob - 480a582f5d2848c9cb614cf98532f97a5bfb5ba2
blob + e35c921f7b05f08a48e761caa0c410bfd5525ac9
--- test/verify_all.sh
+++ test/verify_all.sh
return 1
fi
fi
- echo "OK: $diff_prog $orig_left $orig_right"
+ echo "OK: $diff_prog -u $orig_left $orig_right"
return 0
}
expected_diff="$(echo "$left" | sed 's/test\([0-9]*\)\..*/expect\1.diff/')"
got_diff="verify.$expected_diff"
- "$diff_prog" "$left" "$right" > "$got_diff"
+ "$diff_prog" -u "$left" "$right" > "$got_diff"
set -e
verify_diff_script "$left" "$right" "$got_diff"