diff: fix style
remove useless macros, bring formatting closer to regular 9front formatting, and use the ARGBEGIN/ARGEND macros. No functional change.
This commit is contained in:
parent
9a1428f41a
commit
1bb7aa60c4
5 changed files with 109 additions and 114 deletions
|
@ -1,15 +1,21 @@
|
|||
char mode; /* '\0', 'e', 'f', 'h' */
|
||||
char bflag; /* ignore multiple and trailing blanks */
|
||||
char rflag; /* recurse down directory trees */
|
||||
char mflag; /* pseudo flag: doing multiple files, one dir */
|
||||
int anychange;
|
||||
typedef struct Line Line;
|
||||
|
||||
struct Line {
|
||||
int serial;
|
||||
int value;
|
||||
};
|
||||
extern Line *file[2];
|
||||
extern int len[2];
|
||||
extern long *ixold, *ixnew;
|
||||
extern int *J;
|
||||
extern char mode;
|
||||
extern char bflag;
|
||||
extern char rflag;
|
||||
extern char mflag;
|
||||
extern int anychange;
|
||||
extern Biobuf stdout;
|
||||
extern int binary;
|
||||
|
||||
#define MALLOC(t, n) ((t *)emalloc((n)*sizeof(t)))
|
||||
#define REALLOC(p, t, n) ((t *)erealloc((void *)(p), (n)*sizeof(t)))
|
||||
#define FREE(p) free((void *)(p))
|
||||
|
||||
#define MAXPATHLEN 1024
|
||||
|
||||
int mkpathname(char *, char *, char *);
|
||||
|
|
|
@ -22,7 +22,7 @@ scandir(char *name)
|
|||
if ((fd = open(name, OREAD)) < 0) {
|
||||
fprint(2, "%s: can't open %s: %r\n", argv0, name);
|
||||
/* fake an empty directory */
|
||||
cp = MALLOC(char*, 1);
|
||||
cp = emalloc(sizeof(char*));
|
||||
cp[0] = 0;
|
||||
return cp;
|
||||
}
|
||||
|
@ -30,14 +30,14 @@ scandir(char *name)
|
|||
nitems = 0;
|
||||
if((n = dirreadall(fd, &db)) > 0){
|
||||
while (n--) {
|
||||
cp = REALLOC(cp, char *, (nitems+1));
|
||||
cp[nitems] = MALLOC(char, strlen((db+n)->name)+1);
|
||||
cp = erealloc(cp, (nitems+1)*sizeof(char*));
|
||||
cp[nitems] = emalloc(strlen((db+n)->name)+1);
|
||||
strcpy(cp[nitems], (db+n)->name);
|
||||
nitems++;
|
||||
}
|
||||
free(db);
|
||||
}
|
||||
cp = REALLOC(cp, char*, (nitems+1));
|
||||
cp = erealloc(cp, (nitems+1)*sizeof(char*));
|
||||
cp[nitems] = 0;
|
||||
close(fd);
|
||||
qsort((char *)cp, nitems, sizeof(char*), itemcmp);
|
||||
|
@ -105,9 +105,9 @@ diffdir(char *f, char *t, int level)
|
|||
df++; dt++;
|
||||
}
|
||||
for (df = dirf; *df; df++)
|
||||
FREE(*df);
|
||||
free(*df);
|
||||
for (dt = dirt; *dt; dt++)
|
||||
FREE(*dt);
|
||||
FREE(dirf);
|
||||
FREE(dirt);
|
||||
free(*dt);
|
||||
free(dirf);
|
||||
free(dirt);
|
||||
}
|
||||
|
|
|
@ -4,15 +4,6 @@
|
|||
#include <ctype.h>
|
||||
#include "diff.h"
|
||||
|
||||
struct line {
|
||||
int serial;
|
||||
int value;
|
||||
};
|
||||
extern struct line *file[2];
|
||||
extern int len[2];
|
||||
extern long *ixold, *ixnew;
|
||||
extern int *J;
|
||||
|
||||
static Biobuf *input[2];
|
||||
static char *file1, *file2;
|
||||
static int firstchange;
|
||||
|
@ -115,7 +106,7 @@ readhash(Biobuf *bp, char *buf)
|
|||
Biobuf *
|
||||
prepare(int i, char *arg)
|
||||
{
|
||||
struct line *p;
|
||||
Line *p;
|
||||
int j, h;
|
||||
Biobuf *bp;
|
||||
char *cp, buf[MAXLINELEN];
|
||||
|
@ -145,9 +136,9 @@ prepare(int i, char *arg)
|
|||
}
|
||||
Bseek(bp, 0, 0);
|
||||
}
|
||||
p = MALLOC(struct line, 3);
|
||||
p = emalloc(3*sizeof(Line));
|
||||
for (j = 0; h = readhash(bp, buf); p[j].value = h)
|
||||
p = REALLOC(p, struct line, (++j+3));
|
||||
p = erealloc(p, (++j+3)*sizeof(Line));
|
||||
len[i] = j;
|
||||
file[i] = p;
|
||||
input[i] = bp; /*fix*/
|
||||
|
|
|
@ -66,25 +66,25 @@
|
|||
* 3*(number of k-candidates installed), typically about
|
||||
* 6n words for files of length n.
|
||||
*/
|
||||
/* TIDY THIS UP */
|
||||
struct cand {
|
||||
typedef struct Cand Cand;
|
||||
|
||||
struct Cand {
|
||||
int x;
|
||||
int y;
|
||||
int pred;
|
||||
} cand;
|
||||
struct line {
|
||||
int serial;
|
||||
int value;
|
||||
} *file[2], line;
|
||||
};
|
||||
|
||||
Cand cand;
|
||||
Line *file[2], line;
|
||||
int len[2];
|
||||
int binary;
|
||||
struct line *sfile[2]; /*shortened by pruning common prefix and suffix*/
|
||||
Line *sfile[2]; /*shortened by pruning common prefix and suffix*/
|
||||
int slen[2];
|
||||
int pref, suff; /*length of prefix and suffix*/
|
||||
int *class; /*will be overlaid on file[0]*/
|
||||
int *member; /*will be overlaid on file[1]*/
|
||||
int *klist; /*will be overlaid on file[0] after class*/
|
||||
struct cand *clist; /* merely a free storage pot for candidates */
|
||||
int *klist; /*will be overlaid on file[0] after class*/
|
||||
Cand *clist; /* merely a free storage pot for candidates */
|
||||
int clen;
|
||||
int *J; /*will be overlaid on class*/
|
||||
long *ixold; /*will be overlaid on klist*/
|
||||
|
@ -92,11 +92,11 @@ long *ixnew; /*will be overlaid on file[1]*/
|
|||
/* END OF SOME TIDYING */
|
||||
|
||||
static void
|
||||
sort(struct line *a, int n) /*shellsort CACM #201*/
|
||||
sort(Line *a, int n) /*shellsort CACM #201*/
|
||||
{
|
||||
int m;
|
||||
struct line *ai, *aim, *j, *k;
|
||||
struct line w;
|
||||
Line *ai, *aim, *j, *k;
|
||||
Line w;
|
||||
int i;
|
||||
|
||||
m = 0;
|
||||
|
@ -124,17 +124,17 @@ sort(struct line *a, int n) /*shellsort CACM #201*/
|
|||
}
|
||||
|
||||
static void
|
||||
unsort(struct line *f, int l, int *b)
|
||||
unsort(Line *f, int l, int *b)
|
||||
{
|
||||
int *a;
|
||||
int i;
|
||||
|
||||
a = MALLOC(int, (l+1));
|
||||
a = malloc((l+1)*sizeof(int));
|
||||
for(i=1;i<=l;i++)
|
||||
a[f[i].serial] = f[i].value;
|
||||
for(i=1;i<=l;i++)
|
||||
b[i] = a[i];
|
||||
FREE(a);
|
||||
free(a);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -157,7 +157,7 @@ prune(void)
|
|||
}
|
||||
|
||||
static void
|
||||
equiv(struct line *a, int n, struct line *b, int m, int *c)
|
||||
equiv(Line *a, int n, Line *b, int m, int *c)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
|
@ -187,9 +187,9 @@ equiv(struct line *a, int n, struct line *b, int m, int *c)
|
|||
static int
|
||||
newcand(int x, int y, int pred)
|
||||
{
|
||||
struct cand *q;
|
||||
Cand *q;
|
||||
|
||||
clist = REALLOC(clist, struct cand, (clen+1));
|
||||
clist = erealloc(clist, (clen+1)*sizeof(Cand));
|
||||
q = clist + clen;
|
||||
q->x = x;
|
||||
q->y = y;
|
||||
|
@ -263,7 +263,7 @@ static void
|
|||
unravel(int p)
|
||||
{
|
||||
int i;
|
||||
struct cand *q;
|
||||
Cand *q;
|
||||
|
||||
for(i=0; i<=len[0]; i++) {
|
||||
if (i <= pref)
|
||||
|
@ -298,8 +298,7 @@ output(void)
|
|||
J[i1] = j1;
|
||||
change(i0, i1, j0, j1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
for (i0 = m; i0 >= 1; i0 = i1-1) {
|
||||
while (i0 >= 1 && J[i0] == J[i0+1]-1 && J[i0])
|
||||
i0--;
|
||||
|
@ -393,28 +392,31 @@ diffreg(char *f, char *t)
|
|||
|
||||
member = (int *)file[1];
|
||||
equiv(sfile[0], slen[0], sfile[1], slen[1], member);
|
||||
member = REALLOC(member, int, slen[1]+2);
|
||||
member = erealloc(member, (slen[1]+2)*sizeof(int));
|
||||
|
||||
class = (int *)file[0];
|
||||
unsort(sfile[0], slen[0], class);
|
||||
class = REALLOC(class, int, slen[0]+2);
|
||||
class = erealloc(class, (slen[0]+2)*sizeof(int));
|
||||
|
||||
klist = MALLOC(int, slen[0]+2);
|
||||
clist = MALLOC(struct cand, 1);
|
||||
klist = emalloc((slen[0]+2)*sizeof(int));
|
||||
clist = emalloc(sizeof(Cand));
|
||||
k = stone(class, slen[0], member, klist);
|
||||
FREE(member);
|
||||
FREE(class);
|
||||
free(member);
|
||||
free(class);
|
||||
|
||||
J = MALLOC(int, len[0]+2);
|
||||
J = emalloc((len[0]+2)*sizeof(int));
|
||||
unravel(klist[k]);
|
||||
FREE(clist);
|
||||
FREE(klist);
|
||||
free(clist);
|
||||
free(klist);
|
||||
|
||||
ixold = MALLOC(long, len[0]+2);
|
||||
ixnew = MALLOC(long, len[1]+2);
|
||||
ixold = emalloc((len[0]+2)*sizeof(long));
|
||||
ixnew = emalloc((len[1]+2)*sizeof(long));
|
||||
Bseek(b0, 0, 0); Bseek(b1, 0, 0);
|
||||
check(b0, b1);
|
||||
output();
|
||||
FREE(J); FREE(ixold); FREE(ixnew);
|
||||
Bterm(b0); Bterm(b1); /* ++++ */
|
||||
free(J);
|
||||
free(ixold);
|
||||
free(ixnew);
|
||||
Bterm(b0);
|
||||
Bterm(b1);
|
||||
}
|
||||
|
|
|
@ -7,11 +7,14 @@
|
|||
#define REGULAR_FILE(s) ((s)->type == 'M' && !DIRECTORY(s))
|
||||
|
||||
Biobuf stdout;
|
||||
char mode; /* '\0', 'e', 'f', 'h' */
|
||||
char bflag; /* ignore multiple and trailing blanks */
|
||||
char rflag; /* recurse down directory trees */
|
||||
char mflag; /* pseudo flag: doing multiple files, one dir */
|
||||
int anychange;
|
||||
|
||||
static char *tmp[] = {"/tmp/diff1XXXXXXXXXXX", "/tmp/diff2XXXXXXXXXXX"};
|
||||
static int whichtmp;
|
||||
static char *progname;
|
||||
static char usage[] = "diff [-abcefmnrw] file1 ... file2\n";
|
||||
|
||||
static void
|
||||
rmtmpfiles(void)
|
||||
|
@ -45,7 +48,7 @@ panic(int status, char *fmt, ...)
|
|||
|
||||
Bflush(&stdout);
|
||||
|
||||
fprint(2, "%s: ", progname);
|
||||
fprint(2, "%s: ", argv0);
|
||||
va_start(arg, fmt);
|
||||
vfprint(2, fmt, arg);
|
||||
va_end(arg);
|
||||
|
@ -114,8 +117,7 @@ statfile(char *file, Dir **sb)
|
|||
}
|
||||
free(dir);
|
||||
return mktmpfile(0, sb);
|
||||
}
|
||||
else if (!REGULAR_FILE(dir) && !DIRECTORY(dir)) {
|
||||
} else if (!REGULAR_FILE(dir) && !DIRECTORY(dir)) {
|
||||
free(dir);
|
||||
if ((input = open(file, OREAD)) == -1) {
|
||||
panic(mflag ? 0: 2, "cannot open %s: %r\n", file);
|
||||
|
@ -123,8 +125,7 @@ statfile(char *file, Dir **sb)
|
|||
}
|
||||
file = mktmpfile(input, sb);
|
||||
close(input);
|
||||
}
|
||||
else
|
||||
} else
|
||||
*sb = dir;
|
||||
return file;
|
||||
}
|
||||
|
@ -145,8 +146,7 @@ diff(char *f, char *t, int level)
|
|||
if (rflag || level == 0)
|
||||
diffdir(fp, tp, level);
|
||||
else
|
||||
Bprint(&stdout, "Common subdirectories: %s and %s\n",
|
||||
fp, tp);
|
||||
Bprint(&stdout, "Common subdirectories: %s and %s\n", fp, tp);
|
||||
}
|
||||
else if (REGULAR_FILE(fsb) && REGULAR_FILE(tsb))
|
||||
diffreg(fp, tp);
|
||||
|
@ -158,8 +158,7 @@ diff(char *f, char *t, int level)
|
|||
p++;
|
||||
if (mkpathname(tb, tp, p) == 0)
|
||||
diffreg(fp, tb);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if ((p = utfrrune(t, '/')) == 0)
|
||||
p = t;
|
||||
else
|
||||
|
@ -174,61 +173,58 @@ Return:
|
|||
rmtmpfiles();
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: %s [-abcefmnrw] file1 ... file2\n", argv0);
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char *p;
|
||||
int i;
|
||||
Dir *fsb, *tsb;
|
||||
|
||||
Binit(&stdout, 1, OWRITE);
|
||||
progname = argv0 = *argv;
|
||||
while (--argc && (*++argv)[0] == '-' && (*argv)[1]) {
|
||||
for (p = *argv+1; *p; p++) {
|
||||
switch (*p) {
|
||||
ARGBEGIN{
|
||||
case 'e':
|
||||
case 'f':
|
||||
case 'n':
|
||||
case 'c':
|
||||
case 'a':
|
||||
case 'u':
|
||||
mode = ARGC();
|
||||
break;
|
||||
case 'w':
|
||||
bflag = 2;
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
case 'f':
|
||||
case 'n':
|
||||
case 'c':
|
||||
case 'a':
|
||||
case 'u':
|
||||
mode = *p;
|
||||
break;
|
||||
case 'b':
|
||||
bflag = 1;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
bflag = 2;
|
||||
break;
|
||||
case 'r':
|
||||
rflag = 1;
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
bflag = 1;
|
||||
break;
|
||||
case 'm':
|
||||
mflag = 1;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
rflag = 1;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
mflag = 1;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
default:
|
||||
progname = "Usage";
|
||||
panic(2, usage);
|
||||
}
|
||||
}
|
||||
}
|
||||
case 'h':
|
||||
default:
|
||||
usage();
|
||||
}ARGEND;
|
||||
if (argc < 2)
|
||||
panic(2, usage, progname);
|
||||
usage();
|
||||
if ((tsb = dirstat(argv[argc-1])) == nil)
|
||||
panic(2, "can't stat %s\n", argv[argc-1]);
|
||||
if (argc > 2) {
|
||||
if (!DIRECTORY(tsb))
|
||||
panic(2, usage, progname);
|
||||
panic(2, "not directory: %s", argv[argc-1]);
|
||||
mflag = 1;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if ((fsb = dirstat(argv[0])) == nil)
|
||||
panic(2, "can't stat %s\n", argv[0]);
|
||||
if (DIRECTORY(fsb) && DIRECTORY(tsb))
|
||||
|
@ -257,7 +253,7 @@ emalloc(unsigned n)
|
|||
void *
|
||||
erealloc(void *p, unsigned n)
|
||||
{
|
||||
register void *rp;
|
||||
void *rp;
|
||||
|
||||
if ((rp = realloc(p, n)) == 0)
|
||||
panic(2, noroom);
|
||||
|
|
Loading…
Reference in a new issue