no more minix diff
This commit is contained in:
parent
6dd606eabf
commit
4c0a9db684
5 changed files with 2 additions and 1629 deletions
|
@ -5,11 +5,11 @@
|
||||||
SUBDIR= aal add_route adduser advent arp ash at autil awk \
|
SUBDIR= aal add_route adduser advent arp ash at autil awk \
|
||||||
backup badblocks banner basename bigmake binpackage \
|
backup badblocks banner basename bigmake binpackage \
|
||||||
binpackages binsizes bzip2 bzip2recover cal calendar \
|
binpackages binsizes bzip2 bzip2recover cal calendar \
|
||||||
cat cawf cd cdiff cdprobe checkhier chmem \
|
cat cawf cd cdprobe checkhier chmem \
|
||||||
chmod chown chroot ci cksum cleantmp clear cmp co \
|
chmod chown chroot ci cksum cleantmp clear cmp co \
|
||||||
comm compress cp crc cron crontab cut datasizes date \
|
comm compress cp crc cron crontab cut datasizes date \
|
||||||
dd de decomp16 DESCRIBE dev2name devsize df dhcpd \
|
dd de decomp16 DESCRIBE dev2name devsize df dhcpd \
|
||||||
dhrystone diff dirname dis88 du dumpcore easypack \
|
dhrystone dirname dis88 du dumpcore easypack \
|
||||||
ed eject elle elvis env expand factor file \
|
ed eject elle elvis env expand factor file \
|
||||||
find finger fingerd fix fold format fortune fsck \
|
find finger fingerd fix fold format fortune fsck \
|
||||||
fsck1 ftp101 ftpd200 getty grep gomoku head host \
|
fsck1 ftp101 ftpd200 getty grep gomoku head host \
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
PROG= cdiff
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <minix.prog.mk>
|
|
|
@ -1,365 +0,0 @@
|
||||||
/* cdiff - context diff Author: Larry Wall */
|
|
||||||
|
|
||||||
/* Cdiff - turns a regular diff into a new-style context diff
|
|
||||||
*
|
|
||||||
* Usage: cdiff file1 file2
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define PATCHLEVEL 2
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
char buff[512];
|
|
||||||
|
|
||||||
FILE *inputfp, *oldfp, *newfp;
|
|
||||||
|
|
||||||
int oldmin, oldmax, newmin, newmax;
|
|
||||||
int oldbeg, oldend, newbeg, newend;
|
|
||||||
int preoldmax, prenewmax;
|
|
||||||
int preoldbeg, preoldend, prenewbeg, prenewend;
|
|
||||||
int oldwanted, newwanted;
|
|
||||||
|
|
||||||
char *oldhunk, *newhunk;
|
|
||||||
char *progname;
|
|
||||||
size_t oldsize, oldalloc, newsize, newalloc;
|
|
||||||
|
|
||||||
_PROTOTYPE(int main, (int argc, char **argv));
|
|
||||||
_PROTOTYPE(void dumphunk, (void));
|
|
||||||
_PROTOTYPE(char *getold, (int targ));
|
|
||||||
_PROTOTYPE(char *getnew, (int targ));
|
|
||||||
_PROTOTYPE(void *xmalloc, (size_t size));
|
|
||||||
_PROTOTYPE(void *xrealloc, (void *ptr, size_t size));
|
|
||||||
|
|
||||||
#define Nullfp (FILE*)0
|
|
||||||
#define Nullch (char*)0
|
|
||||||
#define ENOUGH (NAME_MAX + PATH_MAX + 1)
|
|
||||||
#define CRC_END 12
|
|
||||||
|
|
||||||
int main(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
FILE *crcfp;
|
|
||||||
char *old, *new;
|
|
||||||
int context = 3;
|
|
||||||
struct stat statbuf;
|
|
||||||
register char *s;
|
|
||||||
char op;
|
|
||||||
char *newmark, *oldmark;
|
|
||||||
char sysbuf1[ENOUGH], sysbuf2[ENOUGH];
|
|
||||||
int len;
|
|
||||||
char *line;
|
|
||||||
int i;
|
|
||||||
int status;
|
|
||||||
|
|
||||||
progname = argv[0];
|
|
||||||
oldalloc = 512;
|
|
||||||
oldhunk = (char *) xmalloc(oldalloc);
|
|
||||||
newalloc = 512;
|
|
||||||
newhunk = (char *) xmalloc(newalloc);
|
|
||||||
|
|
||||||
for (argc--, argv++; argc; argc--, argv++) {
|
|
||||||
if (argv[0][0] != '-') break;
|
|
||||||
|
|
||||||
if (argv[0][1] == 'c') context = atoi(argv[0] + 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc != 2) {
|
|
||||||
fprintf(stderr, "Usage: cdiff old new\n");
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
old = argv[0];
|
|
||||||
new = argv[1];
|
|
||||||
|
|
||||||
oldfp = fopen(old, "r");
|
|
||||||
if (!oldfp) {
|
|
||||||
fprintf(stderr, "Can't open %s\n", old);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
newfp = fopen(new, "r");
|
|
||||||
if (!newfp) {
|
|
||||||
fprintf(stderr, "Can't open %s\n", new);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Compute crcs by popen()ing crc and reading the output. Do this before
|
|
||||||
* popen()ing diff to do the work. popen() attempts to support multiple
|
|
||||||
* clients, but the 1.3-1.6.24b versions don't succeed.
|
|
||||||
*/
|
|
||||||
sprintf(sysbuf1, "crc %s", old);
|
|
||||||
crcfp = popen(sysbuf1, "r");
|
|
||||||
if (!crcfp) {
|
|
||||||
/* The only advantage of cdiff over diff is that it prints crcs, so
|
|
||||||
* give up easily if crc fails.
|
|
||||||
*/
|
|
||||||
fprintf(stderr, "Can't execute crc %s\n", old);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
fgets(sysbuf1, sizeof(sysbuf1), crcfp);
|
|
||||||
sysbuf1[CRC_END] = '\0';
|
|
||||||
status = pclose(crcfp);
|
|
||||||
if (status != 0) {
|
|
||||||
fprintf(stderr, "crc %s returned bad status %d\n", old, status);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
sprintf(sysbuf2, "crc %s", new);
|
|
||||||
crcfp = popen(sysbuf2, "r");
|
|
||||||
if (!crcfp) {
|
|
||||||
fprintf(stderr, "Can't execute crc %s\n", new);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
fgets(sysbuf2, sizeof(sysbuf2), crcfp);
|
|
||||||
sysbuf2[CRC_END] = '\0';
|
|
||||||
status = pclose(crcfp);
|
|
||||||
if (status != 0) {
|
|
||||||
fprintf(stderr, "crc %s returned bad status %d\n", new, status);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf(buff, "diff %s %s 2>/dev/null", old, new);
|
|
||||||
inputfp = popen(buff, "r");
|
|
||||||
if (!inputfp) {
|
|
||||||
fprintf(stderr, "Can't execute diff %s %s\n", old, new);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
fstat(fileno(oldfp), &statbuf);
|
|
||||||
printf("*** %s crc=%s\t%s", old, sysbuf1, ctime(&statbuf.st_mtime));
|
|
||||||
fstat(fileno(newfp), &statbuf);
|
|
||||||
printf("--- %s crc=%s\t%s", new, sysbuf2, ctime(&statbuf.st_mtime));
|
|
||||||
|
|
||||||
preoldend = -1000;
|
|
||||||
|
|
||||||
while (fgets(buff, sizeof buff, inputfp) != Nullch) {
|
|
||||||
if (isdigit(*buff)) {
|
|
||||||
oldmin = atoi(buff);
|
|
||||||
for (s = buff; isdigit(*s); s++);
|
|
||||||
if (*s == ',') {
|
|
||||||
s++;
|
|
||||||
oldmax = atoi(s);
|
|
||||||
for (; isdigit(*s); s++);
|
|
||||||
} else {
|
|
||||||
oldmax = oldmin;
|
|
||||||
}
|
|
||||||
if (*s != 'a' && *s != 'd' && *s != 'c') {
|
|
||||||
fprintf(stderr, "Unparseable input: %s\n", s);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
op = *s;
|
|
||||||
s++;
|
|
||||||
newmin = atoi(s);
|
|
||||||
for (; isdigit(*s); s++);
|
|
||||||
if (*s == ',') {
|
|
||||||
s++;
|
|
||||||
newmax = atoi(s);
|
|
||||||
for (; isdigit(*s); s++);
|
|
||||||
} else {
|
|
||||||
newmax = newmin;
|
|
||||||
}
|
|
||||||
if (*s != '\n' && *s != ' ') {
|
|
||||||
fprintf(stderr, "Unparseable input: %s\n", s);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
newmark = oldmark = "! ";
|
|
||||||
if (op == 'a') {
|
|
||||||
oldmin++;
|
|
||||||
newmark = "+ ";
|
|
||||||
}
|
|
||||||
if (op == 'd') {
|
|
||||||
newmin++;
|
|
||||||
oldmark = "- ";
|
|
||||||
}
|
|
||||||
oldbeg = oldmin - context;
|
|
||||||
oldend = oldmax + context;
|
|
||||||
if (oldbeg < 1) oldbeg = 1;
|
|
||||||
newbeg = newmin - context;
|
|
||||||
newend = newmax + context;
|
|
||||||
if (newbeg < 1) newbeg = 1;
|
|
||||||
|
|
||||||
if (preoldend < oldbeg - 1) {
|
|
||||||
if (preoldend >= 0) {
|
|
||||||
dumphunk();
|
|
||||||
}
|
|
||||||
preoldbeg = oldbeg;
|
|
||||||
prenewbeg = newbeg;
|
|
||||||
oldwanted = newwanted = 0;
|
|
||||||
oldsize = newsize = 0;
|
|
||||||
} else { /* we want to append to previous hunk */
|
|
||||||
oldbeg = preoldmax + 1;
|
|
||||||
newbeg = prenewmax + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = oldbeg; i <= oldmax; i++) {
|
|
||||||
line = getold(i);
|
|
||||||
if (!line) {
|
|
||||||
oldend = oldmax = i - 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len = strlen(line) + 2;
|
|
||||||
if (oldsize + len + 1 >= oldalloc) {
|
|
||||||
oldalloc *= 2;
|
|
||||||
oldhunk = (char *) xrealloc(oldhunk, oldalloc);
|
|
||||||
}
|
|
||||||
if (i >= oldmin) {
|
|
||||||
strcpy(oldhunk + oldsize, oldmark);
|
|
||||||
oldwanted++;
|
|
||||||
} else {
|
|
||||||
strcpy(oldhunk + oldsize, " ");
|
|
||||||
}
|
|
||||||
strcpy(oldhunk + oldsize + 2, line);
|
|
||||||
oldsize += len;
|
|
||||||
}
|
|
||||||
preoldmax = oldmax;
|
|
||||||
preoldend = oldend;
|
|
||||||
|
|
||||||
for (i = newbeg; i <= newmax; i++) {
|
|
||||||
line = getnew(i);
|
|
||||||
if (!line) {
|
|
||||||
newend = newmax = i - 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len = strlen(line) + 2;
|
|
||||||
if (newsize + len + 1 >= newalloc) {
|
|
||||||
newalloc *= 2;
|
|
||||||
newhunk = (char *) xrealloc(newhunk, newalloc);
|
|
||||||
}
|
|
||||||
if (i >= newmin) {
|
|
||||||
strcpy(newhunk + newsize, newmark);
|
|
||||||
newwanted++;
|
|
||||||
} else {
|
|
||||||
strcpy(newhunk + newsize, " ");
|
|
||||||
}
|
|
||||||
strcpy(newhunk + newsize + 2, line);
|
|
||||||
newsize += len;
|
|
||||||
}
|
|
||||||
prenewmax = newmax;
|
|
||||||
prenewend = newend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preoldend >= 0) {
|
|
||||||
dumphunk();
|
|
||||||
}
|
|
||||||
status = pclose(inputfp);
|
|
||||||
if (!WIFEXITED(status)) exit(2);
|
|
||||||
status = WEXITSTATUS(status);
|
|
||||||
return(status == 0 || status == 1 ? status : 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void dumphunk()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *line;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
for (i = preoldmax + 1; i <= preoldend; i++) {
|
|
||||||
line = getold(i);
|
|
||||||
if (!line) {
|
|
||||||
preoldend = i - 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len = strlen(line) + 2;
|
|
||||||
if (oldsize + len + 1 >= oldalloc) {
|
|
||||||
oldalloc *= 2;
|
|
||||||
oldhunk = (char *) xrealloc(oldhunk, oldalloc);
|
|
||||||
}
|
|
||||||
strcpy(oldhunk + oldsize, " ");
|
|
||||||
strcpy(oldhunk + oldsize + 2, line);
|
|
||||||
oldsize += len;
|
|
||||||
}
|
|
||||||
for (i = prenewmax + 1; i <= prenewend; i++) {
|
|
||||||
line = getnew(i);
|
|
||||||
if (!line) {
|
|
||||||
prenewend = i - 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len = strlen(line) + 2;
|
|
||||||
if (newsize + len + 1 >= newalloc) {
|
|
||||||
newalloc *= 2;
|
|
||||||
newhunk = (char *) xrealloc(newhunk, newalloc);
|
|
||||||
}
|
|
||||||
strcpy(newhunk + newsize, " ");
|
|
||||||
strcpy(newhunk + newsize + 2, line);
|
|
||||||
newsize += len;
|
|
||||||
}
|
|
||||||
printf("***************\n");
|
|
||||||
if (preoldbeg >= preoldend) {
|
|
||||||
printf("*** %d ****\n", preoldend);
|
|
||||||
} else {
|
|
||||||
printf("*** %d,%d ****\n", preoldbeg, preoldend);
|
|
||||||
}
|
|
||||||
if (oldwanted) {
|
|
||||||
printf("%s", oldhunk);
|
|
||||||
}
|
|
||||||
oldsize = 0;
|
|
||||||
*oldhunk = '\0';
|
|
||||||
if (prenewbeg >= prenewend) {
|
|
||||||
printf("--- %d ----\n", prenewend);
|
|
||||||
} else {
|
|
||||||
printf("--- %d,%d ----\n", prenewbeg, prenewend);
|
|
||||||
}
|
|
||||||
if (newwanted) {
|
|
||||||
printf("%s", newhunk);
|
|
||||||
}
|
|
||||||
newsize = 0;
|
|
||||||
*newhunk = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getold(targ)
|
|
||||||
int targ;
|
|
||||||
{
|
|
||||||
static int oldline = 0;
|
|
||||||
|
|
||||||
while (fgets(buff, sizeof buff, oldfp) != Nullch) {
|
|
||||||
oldline++;
|
|
||||||
if (oldline == targ) return buff;
|
|
||||||
}
|
|
||||||
return Nullch;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getnew(targ)
|
|
||||||
int targ;
|
|
||||||
{
|
|
||||||
static int newline = 0;
|
|
||||||
|
|
||||||
while (fgets(buff, sizeof buff, newfp) != Nullch) {
|
|
||||||
newline++;
|
|
||||||
if (newline == targ) return buff;
|
|
||||||
}
|
|
||||||
return Nullch;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *xmalloc(size)
|
|
||||||
size_t size;
|
|
||||||
{
|
|
||||||
void *ptr;
|
|
||||||
|
|
||||||
ptr = malloc(size);
|
|
||||||
if (ptr == NULL) {
|
|
||||||
fprintf(stderr, "%s: out of memory\n", progname);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
return(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void *xrealloc(ptr, size)
|
|
||||||
void *ptr;
|
|
||||||
size_t size;
|
|
||||||
{
|
|
||||||
ptr = realloc(ptr, size);
|
|
||||||
if (ptr == NULL) {
|
|
||||||
fprintf(stderr, "%s: out of memory\n", progname);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
return(ptr);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
PROG= diff
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <minix.prog.mk>
|
|
1254
commands/diff/diff.c
1254
commands/diff/diff.c
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue