---
Makefile | 1 -
bdiff.1 | 10 +++------
diff.1 | 10 +++------
diff.c | 65 +++++++++++++++++++++++-------------------------------
libutil/ncprintf.c | 50 -----------------------------------------
util.h | 1 -
6 files changed, 34 insertions(+), 103 deletions(-)
delete mode 100644 libutil/ncprintf.c
diff --git a/Makefile b/Makefile
index f17268b..61f5b25 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -60,7 +60,6 @@ LIBUTILSRC =\
libutil/md5.c\
libutil/mkdirp.c\
libutil/mode.c\
- libutil/ncprintf.c\
libutil/parseoffset.c\
libutil/putword.c\
libutil/reallocarray.c\
diff --git a/bdiff.1 b/bdiff.1
index 1e114d6..d793215 100644
--- a/bdiff.1
+++ b/bdiff.1
_AT_@ -7,7 +7,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl c | C Ar n | Fl e | f | u | U Ar n
-.Op Fl bdDr
+.Op Fl bdr
.Ar file1 file2
.Sh DESCRIPTION
.Nm
_AT_@ -39,15 +39,11 @@ is -1, use the entire file for context.
.It Fl d
Ignored. Exists for symmetry with
.Xr diff 1 .
-.It Fl D
-Produce colored output if stdout, is a terminal.
-Always produce colored output if used twice or more.
.It Fl e
Produce output suitable as input to
.Xr ed 1 .
.It Fl f
-Produce output similar to the format of
-.Fl e ,
+Produce \fIed\fP-script like output,
but intended for reading by a human.
.It Fl r
Apply
_AT_@ -66,7 +62,7 @@ lines of unified context. If
is -1, use the entire file for context.
.El
.Sh EXIT STATUS
-.Bl -tag -width Ds
+.Bl -tag -width s
.It 0
The files are identical.
.It 1
diff --git a/diff.1 b/diff.1
index 1898c84..0f4362c 100644
--- a/diff.1
+++ b/diff.1
_AT_@ -7,7 +7,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl c | C Ar n | Fl e | f | u | U Ar n
-.Op Fl bdDr
+.Op Fl bdr
.Ar file1 file2
.Sh DESCRIPTION
.Nm
_AT_@ -46,15 +46,11 @@ Do not fall back to behave like
.Xr bdiff 1 ,
even if its appears to be impossible to calculate
the minimal set of changes.
-.It Fl D
-Produce colored output if stdout, is a terminal.
-Always produce colored output if used twice or more.
.It Fl e
Produce output suitable as input to
.Xr ed 1 .
.It Fl f
-Produce output similar to the format of
-.Fl e ,
+Produce \fIed\fP-script like output,
but intended for reading by a human.
.It Fl r
Apply
_AT_@ -103,5 +99,5 @@ determined to be feasible to calculate with generally
exceptable time and memory usage.
.Pp
The
-.Op Fl dD
+.Op Fl d
flags is an extension to that specification.
diff --git a/diff.c b/diff.c
index 8abcbcd..639361f 100644
--- a/diff.c
+++ b/diff.c
_AT_@ -48,7 +48,6 @@
#define END_OF_PATH 127
#define NO_LF_MARK "\n\\ No newline at end of file"
-#define COLOURED_NO_LF_MARK "\n\033[7m\\ No newline at end of file\033[27m"
#define line_eq(a, b) ((a)->hash == (b)->hash && !strcmp((a)->line, (b)->line))
#define intcmp(a, b) ((a) < (b) ? -1 : (a) > (b))
_AT_@ -107,14 +106,11 @@ static int bdiff = 0;
static int dflag = 0;
static int cheap_algorithm_used = 0;
-static int use_colour = 0;
-static int (*cprintf)(const char *, ...);
-
static void
usage(void)
{
- enprintf(FAILURE, "usage: %s [-c | -C n | -e | -f | -u | -U n] [-bdDr] file1 file2\n", argv0);
+ enprintf(FAILURE, "usage: %s [-c | -C n | -e | -f | -u | -U n] [-bdr] file1 file2\n", argv0);
}
static int
_AT_@ -903,11 +899,11 @@ get_diff_chunks(struct trace *path, size_t an, size_t bn, struct chunk **headp,
if (!path)\
return 0;\
if (diff_line)\
- cprintf("\033[1m%s %s %s\033[m\n", diff_line, old->path_quoted, new->path_quoted)
+ printf("%s %s %s\n", diff_line, old->path_quoted, new->path_quoted)
#define OUTPUT_HEAD(A, B, TIMEFUN)\
- cprintf("\033[1m"A" %s\033[21m\t%s\033[0m\n", old->path_quoted, TIMEFUN(&(old->attr)));\
- cprintf("\033[1m"B" %s\033[21m\t%s\033[0m\n", new->path_quoted, TIMEFUN(&(new->attr)))
+ printf(A" %s\t%s\n", old->path_quoted, TIMEFUN(&(old->attr)));\
+ printf(B" %s\t%s\n", new->path_quoted, TIMEFUN(&(new->attr)))
#define OUTPUT_QUEUE\
get_diff_chunks(path, old->line_count * !old->is_empty, new->line_count * !new->is_empty, &head, &tail);\
_AT_@ -964,18 +960,18 @@ output_unified(struct file_data *old, struct file_data *new, const char *diff_li
}
if (suppressed) {
suppressed = 0;
- cprintf("\033[1;34m_AT_@ -%zu", ai + 1 - !trace.a_len);
+ printf("_AT_@ -%zu", ai + 1 - !trace.a_len);
if (trace.a_len != 1)
printf(",%zu", trace.a_len);
printf(" +%zu", bi + 1 - !trace.b_len);
if (trace.b_len != 1)
printf(",%zu", trace.b_len);
- cprintf(" _AT_@\033[m\n");
+ printf(" _AT_@\n");
}
if (f == 0)
printf(" %s\n", a[ai]);
else
- cprintf("\033[3%im%c%s\033[m\n", (int)f, " -+"[(int)f], f == 1 ? a[ai] : b[bi]);
+ printf("%c%s\n", " -+"[(int)f], f == 1 ? a[ai] : b[bi]);
next:
ai += f != 2;
bi += f != 1;
_AT_@ -989,15 +985,15 @@ static int
output_copied(struct file_data *old, struct file_data *new, const char *diff_line)
{
#define PRINT_PART(L, C, S, A, B)\
- cprintf("\033[1;3"#C"m"A" %zu", L##i + 1);\
+ printf(A" %zu", L##i + 1);\
if (chunk->L##_len > 1)\
printf(",%zu", L##i + chunk->L##_len);\
- cprintf(" "B"\033[m\n");\
+ printf(" "B"\n");\
for (; have_##L && chunk->f != END_OF_PATH && chunk->d <= n_context; chunk++) {\
if (chunk->f == 0)\
printf(" %s\n", L[L##i]);\
else if (chunk->f != (3 - C))\
- cprintf("\033[3%im%c %s\033[m\n", chunk->ch ? 3 : C, S"!"[chunk->ch], L[L##i]);\
+ printf("%c %s\n", S"!"[chunk->ch], L[L##i]);\
L##i += chunk->f != (3 - C);\
}
_AT_@ -1006,7 +1002,7 @@ output_copied(struct file_data *old, struct file_data *new, const char *diff_lin
OUTPUT_HEAD("***", "---", get_time_string_copied);
OUTPUT_QUEUE;
- cprintf("\033[1;34m***************\033[m\n");
+ printf("***************\n");
chunk_old = chunk;
PRINT_PART(a, 1, "-", "***", "****");
chunk = chunk_old;
_AT_@ -1024,7 +1020,7 @@ output_normal(struct file_data *old, struct file_data *new, const char *diff_lin
if (chunk->f == 0)\
printf(" %s\n", L[L##i]);\
else if (chunk->f != (3 - C))\
- cprintf("\033[3"#C"m"S" %s\033[m\n", L[L##i]);\
+ printf(S" %s\n", L[L##i]);\
L##i += chunk->f != (3 - C);\
}
_AT_@ -1032,19 +1028,19 @@ output_normal(struct file_data *old, struct file_data *new, const char *diff_lin
OUTPUT_DIFF;
OUTPUT_QUEUE;
- cprintf("\033[1;34m%zu", ai + 1 - !have_a);
+ printf("%zu", ai + 1 - !have_a);
if (chunk->a_len > 1)
printf(",%zu", ai + chunk->a_len);
printf("%c", " dac"[have_a + 2 * have_b]);
printf("%zu", bi + 1 - !have_b);
if (chunk->b_len > 1)
printf(",%zu", bi + chunk->b_len);
- cprintf("\033[m\n");
+ printf("\n");
chunk_old = chunk;
PRINT_PART(a, 1, "<");
if (have_a && have_b)
- cprintf("\033[34m---\033[m\n");
+ printf("---\n");
chunk = chunk_old;
PRINT_PART(b, 2, ">");
_AT_@ -1068,8 +1064,7 @@ output_ed(struct file_data *old, struct file_data *new, const char *diff_line)
printf("%c\n", "ac"[chunk->ch]);
for (; chunk->f != END_OF_PATH && chunk->d <= n_context; chunk++) {
if (chunk->f != 1)
- cprintf("\033[3%im%s%s\033[m\n", chunk->ch ? 3 : 2,
- b[bi][0] == '.' ? "." : "", b[bi]);
+ printf("%s%s\n", b[bi][0] == '.' ? "." : "", b[bi]);
have_dot = (chunk->f == 2 && b[bi][0] == '.');
if (have_dot) {
printf(".\ns/.//\n");
_AT_@ -1099,7 +1094,7 @@ output_ed_alternative(struct file_data *old, struct file_data *new, const char *
printf("\n");
for (; chunk->f != END_OF_PATH && chunk->d <= n_context; chunk++) {
if (chunk->f != 1)
- cprintf("\033[3%im%s\033[m\n", chunk->ch ? 3 : 2, b[bi]);
+ printf("%s\n", b[bi]);
bi += chunk->f != 1;
}
printf(".\n");
_AT_@ -1201,7 +1196,7 @@ load_lines(const char *pathname)
quoted = quote(pathname);
rc = enrealloc(FAILURE, buffer,
sizeof(*rc) + (n + 1) * sizeof(char *) +
- (ptr + 1 + sizeof(COLOURED_NO_LF_MARK)) + strlen(quoted) + 1);
+ (ptr + 1 + sizeof(NO_LF_MARK)) + strlen(quoted) + 1);
buffer = ((char *)rc) + sizeof(*rc) + (n + 1) * sizeof(char *);
memmove(buffer, rc, ptr);
rc->lines = (char **)((char *)rc + sizeof(*rc));
_AT_@ -1210,7 +1205,7 @@ load_lines(const char *pathname)
buffer[ptr - rc->lf_terminated] = 0;
rc->attr = attr;
rc->path = pathname;
- rc->path_quoted = buffer + ptr + 1 + sizeof(COLOURED_NO_LF_MARK);
+ rc->path_quoted = buffer + ptr + 1 + sizeof(NO_LF_MARK);
strcpy(rc->path_quoted, quoted);
rc->is_binary = bin;
rc->is_empty = (ptr == 0);
_AT_@ -1261,7 +1256,7 @@ compare_files(struct file_data *old, struct file_data *new, const char *diff_lin
if (old->is_binary || new->is_binary) {
if (do_binaries_differ(old, new)) {
- cprintf("\033[1mBinary files %s and %s differ\033[m\n", old->path, new->path);
+ printf("Binary files %s and %s differ\n", old->path, new->path);
return BINARIES_DIFFER;
}
return 0;
_AT_@ -1272,9 +1267,9 @@ compare_files(struct file_data *old, struct file_data *new, const char *diff_lin
if (!eflag && !fflag) {
if (!old->lf_terminated && !old->is_empty)
- strcat(old->lines[old->line_count - 1], use_colour ? COLOURED_NO_LF_MARK : NO_LF_MARK);
+ strcat(old->lines[old->line_count - 1], NO_LF_MARK);
if (!new->lf_terminated && !new->is_empty)
- strcat(new->lines[new->line_count - 1], use_colour ? COLOURED_NO_LF_MARK : NO_LF_MARK);
+ strcat(new->lines[new->line_count - 1], NO_LF_MARK);
}
ret = (uflag ? output_unified :
_AT_@ -1320,7 +1315,7 @@ again:
continue;
b_path = join_paths(paths[j], file->d_name);
if (access(b_path, F_OK)) {
- cprintf("\033[1mOnly in %s: %s\033[m\n", paths[i], file->d_name);
+ printf("Only in %s: %s\n", paths[i], file->d_name);
ret = ret > FILES_DIFFER ? ret : FILES_DIFFER;
goto next;
} else if (i == 1) {
_AT_@ -1340,11 +1335,11 @@ again:
b = load_lines(b_path);
if (!a ^ !b) {
- cprintf("\033[1mFile %s is a %s while file %s is a %s\033[m\n",
+ printf("File %s is a %s while file %s is a %s\n",
a_path, classify(a), b_path, classify(b));
r = FILES_DIFFER;
} else if (!a && !b && !rflag) {
- cprintf("\033[1mCommon subdirectories: %s and %s\033[m\n", a_path, b_path);
+ printf("Common subdirectories: %s and %s\n", a_path, b_path);
r = 0;
} else if (!a && !b) {
r = compare_directories(a_path, b_path, diff_line);
_AT_@ -1399,13 +1394,12 @@ main(int argc, char *argv[])
case 'b': bflag++; break;
case 'c': cflag++; n_context = 3; break;
case 'C': cflag++; n_context = atol(EARGF(usage())); break;
+ case 'd': dflag++; break;
case 'e': eflag++; break;
case 'f': fflag++; break;
+ case 'r': rflag++; break;
case 'u': uflag++; n_context = 3; break;
case 'U': uflag++; n_context = atol(EARGF(usage())); break;
- case 'r': rflag++; break;
- case 'd': dflag++; break;
- case 'D': use_colour++; break;
default:
usage();
} ARGEND;
_AT_@ -1424,15 +1418,12 @@ main(int argc, char *argv[])
bdiff = 1;
}
- use_colour = use_colour == 1 ? isatty(STDOUT_FILENO) : use_colour;
- cprintf = use_colour ? printf : ncprintf;
-
redo:
old = load_lines(old_proper ? old_proper : argv[0]);
new = load_lines(new_proper ? new_proper : argv[1]);
if ((old_proper || new_proper) && (!old || !new)) {
- cprintf("\033[1mFile %s is a %s while file %s is a %s\033[m\n",
+ printf("File %s is a %s while file %s is a %s\n",
old_proper ? old_proper : argv[0], classify(old),
new_proper ? new_proper : argv[1], classify(new));
ret = 1;
diff --git a/libutil/ncprintf.c b/libutil/ncprintf.c
deleted file mode 100644
index f745cfe..0000000
--- a/libutil/ncprintf.c
+++ /dev/null
_AT_@ -1,50 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-
-#include "../util.h"
-
-/* Variant of printf that removes colors from the format string. Only CSI m is
- * recognized, no other appearances of ESC may occour. %i, %u and %c, but not
- * other %-codes, may be used inside the CSI m sequence, but only if they refer
- * to the very first arguments after the format string. Not thread-safe. */
-int
-ncprintf(const char *format, ...)
-{
- static const char *prev_format = 0;
- static size_t skips = 0;
- static char fmt[128];
- size_t r = 0, w = 0;
- va_list args;
- int rc, escape = 0;
-
- va_start(args, format);
-
- if (format == prev_format)
- goto print;
-
- prev_format = format;
-
- skips = 0;
- for (;; r++) {
- if (escape) {
- escape = (format[r] != 'm');
- skips += (format[r] == '%');
- } else if (format[r] == '\033') {
- escape = 1;
- } else {
- if (!(fmt[w++] = format[r]))
- break;
- }
- }
- fmt[w] = 0;
-
-print:
- for (r = skips; r--;)
- (void) va_arg(args, int);
-
- rc = vprintf(fmt, args);
- va_end(args);
- return rc;
-}
diff --git a/util.h b/util.h
index 62fd9ea..4c973d1 100644
--- a/util.h
+++ b/util.h
_AT_@ -76,4 +76,3 @@ long long enstrtonum(int, const char *, long long, long long);
long long estrtonum(const char *, long long, long long);
size_t unescape(char *);
int mkdirp(const char *);
-int ncprintf(const char *, ...);
--
2.7.2
Received on Mon Mar 14 2016 - 20:38:26 CET
This archive was generated by hypermail 2.3.0 : Mon Mar 14 2016 - 20:48:13 CET