Deleted Added
full compact
3,10d2
< * Damage counter
< * Change counter
< * Time stamp
< * prefix
< * cmd-line args
< * %100 deltas
< * delta and Add are different. delta -> Equ.
< *
17c9
< * (-l str control logging.)
---
> * -l file logfile
41c33
< #define DEFAULT_BOGUS "\\.core$|\\.orig$|\\.rej$"
---
> #define DEFAULT_BOGUS "\\.core$|\\.orig$|\\.rej$|\\.o$"
48a41,42
> FILE *logf;
>
76,77c70,71
< fprintf(fd,"%sAvoided:\n",pre);
< fprintf(fd,"%s ignore: %5lu old %5lu new\n",
---
> fprintf(fd, "%sNames:\n", pre);
> fprintf(fd, "%s ignore: %5lu ref %5lu target\n",
79c73
< fprintf(fd,"%s bogus: %5lu old %5lu new\n",
---
> fprintf(fd, "%s bogus: %5lu ref %5lu target\n",
81c75
< fprintf(fd,"%s wrong: %5lu old %5lu new\n",
---
> fprintf(fd, "%s wrong: %5lu ref %5lu target\n",
83,84c77,78
< fprintf(fd,"%sDelta:\n",pre);
< fprintf(fd,"%s new: %5lu dirs %5lu files %9lu plus\n",
---
> fprintf(fd, "%sDelta:\n", pre);
> fprintf(fd, "%s new: %5lu dirs %5lu files %9lu plus\n",
86c80
< fprintf(fd,"%s del: %5lu dirs %5lu files %9lu minus\n",
---
> fprintf(fd, "%s del: %5lu dirs %5lu files %9lu minus\n",
88c82
< fprintf(fd,"%s chg: %5lu files %9lu plus %9lu minus\n",
---
> fprintf(fd, "%s chg: %5lu files %9lu plus %9lu minus\n",
90c84
< fprintf(fd,"%s same: %5lu dirs %5lu files %9lu bytes\n",
---
> fprintf(fd, "%s same: %5lu dirs %5lu files %9lu bytes\n",
92,93c86,87
< fprintf(fd,"%sMethod:\n",pre);
< fprintf(fd,"%s edit: %5lu files %9lu bytes %9lu saved\n",
---
> fprintf(fd, "%sMethod:\n", pre);
> fprintf(fd, "%s edit: %5lu files %9lu bytes %9lu saved\n",
95c89
< fprintf(fd,"%s sub: %5lu files %9lu bytes\n",
---
> fprintf(fd, "%s sub: %5lu files %9lu bytes\n",
96a91
>
102,103c97,98
< signal(SIGINFO,stat_info);
< print_stat(stderr,"INFO: ");
---
> signal(SIGINFO, stat_info);
> print_stat(stderr, "INFO: ");
112,113c107,108
< if (lstat(name,&st) < 0)
< err(1,"Couldn't stat %s\n",name);
---
> if (lstat(name, &st) < 0)
> err(1, "Couldn't stat %s\n", name);
120,121c115,116
< if (!strcmp(de->d_name,".")) return 0;
< if (!strcmp(de->d_name,"..")) return 0;
---
> if (!strcmp(de->d_name, ".")) return 0;
> if (!strcmp(de->d_name, "..")) return 0;
132,134c127,129
< strcpy(buf,dir);
< strcat(buf,"/"); strcat(buf,name);
< strcat(buf,"/"); strcat(buf,de->d_name);
---
> strcpy(buf, dir);
> strcat(buf, "/"); strcat(buf, name);
> strcat(buf, "/"); strcat(buf, de->d_name);
136c131
< printf("%s %s%s %lu %lu %o",
---
> printf("%s %s%s %u %u %o",
138a134
> fprintf(logf, "%s %s%s\n", pfx, name, de->d_name);
140c136
< fprintf(stderr,"%s %s%s\n", pfx, name, de->d_name);
---
> fprintf(stderr, "%s %s%s\n", pfx, name, de->d_name);
150,151c146,147
< strcpy(p,name); strcat(p,de->d_name); strcat(p, "/");
< DoDir(dir1,dir2,p);
---
> strcpy(p, name); strcat(p, de->d_name); strcat(p, "/");
> DoDir(dir1, dir2, p);
158,161c154,157
< char *m1,md5_1[33],*m2, md5_2[33];
< u_char *p1,*p2;
< int fd1,fd2;
< struct stat s1,s2;
---
> char *m1, md5_1[33], *m2, md5_2[33];
> u_char *p1, *p2;
> int fd1, fd2;
> struct stat s1, s2;
163,166c159,162
< strcpy(buf1,dir1);
< strcat(buf1,"/"); strcat(buf1,name);
< strcat(buf1,"/"); strcat(buf1,de->d_name);
< fd1 = open(buf1,O_RDONLY);
---
> strcpy(buf1, dir1);
> strcat(buf1, "/"); strcat(buf1, name);
> strcat(buf1, "/"); strcat(buf1, de->d_name);
> fd1 = open(buf1, O_RDONLY);
168,172c164,168
< fstat(fd1,&s1);
< strcpy(buf2,dir2);
< strcat(buf2,"/"); strcat(buf2,name);
< strcat(buf2,"/"); strcat(buf2,de->d_name);
< fd2 = open(buf2,O_RDONLY);
---
> fstat(fd1, &s1);
> strcpy(buf2, dir2);
> strcat(buf2, "/"); strcat(buf2, name);
> strcat(buf2, "/"); strcat(buf2, de->d_name);
> fd2 = open(buf2, O_RDONLY);
174c170
< fstat(fd2,&s2);
---
> fstat(fd2, &s2);
185c181
< p1=mmap(0,s1.st_size,PROT_READ,MAP_PRIVATE,fd1,0);
---
> p1=mmap(0, s1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0);
189c185
< p2=mmap(0,s2.st_size,PROT_READ,MAP_PRIVATE,fd2,0);
---
> p2=mmap(0, s2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0);
194c190
< if((s1.st_size == s2.st_size) && !memcmp(p1,p2,s1.st_size)) {
---
> if((s1.st_size == s2.st_size) && !memcmp(p1, p2, s1.st_size)) {
201d196
< damage++;
212c207
< if(!strcmp(m1,m2)) {
---
> if(!strcmp(m1, m2)) {
216c211
< buf1,buf2);
---
> buf1, buf2);
265c260
< F = popen(cmd,"r");
---
> F = popen(cmd, "r");
281,283c276,278
< name_stat("CTMFN",dir2,name,de);
< printf(" %s %s %d\n",m1,m2,(unsigned)l);
< fwrite(ob,1,l,stdout);
---
> name_stat("CTMFN", dir2, name, de);
> printf(" %s %s %d\n", m1, m2, (unsigned)l);
> fwrite(ob, 1, l, stdout);
290,292c285,287
< name_stat("CTMFS",dir2,name,de);
< printf(" %s %s %u\n",m1,m2,(unsigned)s2.st_size);
< fwrite(p2,1,s2.st_size,stdout);
---
> name_stat("CTMFS", dir2, name, de);
> printf(" %s %s %u\n", m1, m2, (unsigned)s2.st_size);
> fwrite(p2, 1, s2.st_size, stdout);
299,300c294,295
< munmap(p1,s1.st_size);
< munmap(p2,s2.st_size);
---
> munmap(p1, s1.st_size);
> munmap(p2, s2.st_size);
310,311c305,306
< strcpy(p,name); strcat(p,de->d_name); strcat(p, "/");
< name_stat("CTMDM",dir2,name,de);
---
> strcpy(p, name); strcat(p, de->d_name); strcat(p, "/");
> name_stat("CTMDM", dir2, name, de);
314c309
< DoDir(dir1,dir2,p);
---
> DoDir(dir1, dir2, p);
323,326c318,321
< strcpy(buf2,dir2);
< strcat(buf2,"/"); strcat(buf2,name);
< strcat(buf2,"/"); strcat(buf2,de->d_name);
< fd1 = open(buf2,O_RDONLY);
---
> strcpy(buf2, dir2);
> strcat(buf2, "/"); strcat(buf2, name);
> strcat(buf2, "/"); strcat(buf2, de->d_name);
> fd1 = open(buf2, O_RDONLY);
328,329c323,324
< fstat(fd1,&st);
< p1=mmap(0,st.st_size,PROT_READ,MAP_PRIVATE,fd1,0);
---
> fstat(fd1, &st);
> p1=mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd1, 0);
333,335c328,330
< name_stat("CTMFM",dir2,name,de);
< printf(" %s %u\n",m2,(unsigned)st.st_size);
< fwrite(p1,1,st.st_size,stdout);
---
> name_stat("CTMFM", dir2, name, de);
> printf(" %s %u\n", m2, (unsigned)st.st_size);
> fwrite(p1, 1, st.st_size, stdout);
337c332
< munmap(p1,st.st_size);
---
> munmap(p1, st.st_size);
350,352c345,351
< strcpy(p,name); strcat(p,de->d_name); strcat(p, "/");
< DoDir(dir1,dir2,p);
< printf("CTMDR %s%s\n",name,de->d_name);
---
> strcpy(p, name); strcat(p, de->d_name); strcat(p, "/");
> DoDir(dir1, dir2, p);
> printf("CTMDR %s%s\n", name, de->d_name);
> fprintf(logf, "CTMDR %s%s\n", name, de->d_name);
> if (verbose > 1) {
> fprintf(stderr, "CTMDR %s%s\n", name, de->d_name);
> }
358,360c357,359
< strcpy(buf1,dir1);
< strcat(buf1,"/"); strcat(buf1,name);
< strcat(buf1,"/"); strcat(buf1,de->d_name);
---
> strcpy(buf1, dir1);
> strcat(buf1, "/"); strcat(buf1, name);
> strcat(buf1, "/"); strcat(buf1, de->d_name);
362c361,365
< printf("CTMFR %s%s %s\n",name,de->d_name,m1);
---
> printf("CTMFR %s%s %s\n", name, de->d_name, m1);
> fprintf(logf, "CTMFR %s%s %s\n", name, de->d_name, m1);
> if (verbose > 1) {
> fprintf(stderr, "CTMFR %s%s\n", name, de->d_name);
> }
380,381c383,384
< strcat(buf,"/");
< strcat(buf,dir);
---
> strcat(buf, "/");
> strcat(buf, dir);
383,384c386,387
< strcat(buf,"/");
< strcat(buf,name);
---
> strcat(buf, "/");
> strcat(buf, name);
386,387c389,390
< strcat(buf,"/");
< strcat(buf,nl[*i]->d_name);
---
> strcat(buf, "/");
> strcat(buf, nl[*i]->d_name);
389c392
< !regexec(&reg_ignore,buf,0,0,0)) {
---
> !regexec(&reg_ignore, buf, 0, 0, 0)) {
390a394
> fprintf(logf, "Ignore %s\n", buf);
392c396
< fprintf(stderr,"Ignore %s\n",buf);
---
> fprintf(stderr, "Ignore %s\n", buf);
395c399
< !regexec(&reg_bogus,buf,0,0,0)) {
---
> !regexec(&reg_bogus, buf, 0, 0, 0)) {
397,399c401,403
< if (verbose > 0) {
< fprintf(stderr,"Bogus %s\n",buf);
< }
---
> fprintf(logf, "Bogus %s\n", buf);
> fprintf(stderr, "Bogus %s\n", buf);
> damage++;
412c416
< fprintf(stderr,"Wrong %s\n",buf);
---
> fprintf(stderr, "Wrong %s\n", buf);
420,421c424,425
< int i1,i2,n1,n2,i;
< struct dirent **nl1,**nl2;
---
> int i1, i2, n1, n2, i;
> struct dirent **nl1, **nl2;
425,426c429,430
< strcpy(buf1,dir1); strcat(buf1,"/"); strcat(buf1,name);
< strcpy(buf2,dir2); strcat(buf2,"/"); strcat(buf2,name);
---
> strcpy(buf1, dir1); strcat(buf1, "/"); strcat(buf1, name);
> strcpy(buf2, dir2); strcat(buf2, "/"); strcat(buf2, name);
452c456
< Add(dir1,dir2,name,nl2[i2]);
---
> Add(dir1, dir2, name, nl2[i2]);
456c460
< Del(dir1,dir2,name,nl1[i1]);
---
> Del(dir1, dir2, name, nl1[i1]);
462c466
< Equ(dir1,dir2,name,nl1[i1]);
---
> Equ(dir1, dir2, name, nl1[i1]);
465,466c469,470
< Del(dir1,dir2,name,nl1[i1]);
< Add(dir1,dir2,name,nl2[i2]);
---
> Del(dir1, dir2, name, nl1[i1]);
> Add(dir1, dir2, name, nl2[i2]);
472c476
< Del(dir1,dir2,name,nl1[i1]);
---
> Del(dir1, dir2, name, nl1[i1]);
476c480
< Add(dir1,dir2,name,nl2[i2]);
---
> Add(dir1, dir2, name, nl2[i2]);
495c499,500
< if (regcomp(&reg_bogus,DEFAULT_BOGUS, REG_EXTENDED | REG_NEWLINE))
---
> #if 0
> if (regcomp(&reg_bogus, DEFAULT_BOGUS, REG_EXTENDED | REG_NEWLINE))
497c502
< err(1,"Default regular expression argument to -B is botched");
---
> errx(1, "Default regular expression argument to -B is botched");
500c505
< if (regcomp(&reg_ignore,DEFAULT_IGNORE, REG_EXTENDED | REG_NEWLINE))
---
> if (regcomp(&reg_ignore, DEFAULT_IGNORE, REG_EXTENDED | REG_NEWLINE))
502c507
< err(1,"Default regular expression argument to -I is botched");
---
> errx(1, "Default regular expression argument to -I is botched");
503a509
> #endif
505c511
< while ((i = getopt(argc,argv,"D:I:B:qv")) != EOF)
---
> while ((i = getopt(argc, argv, "D:I:B:l:qv")) != EOF)
508c514
< damage_limit = strtol(optarg,0,0);
---
> damage_limit = strtol(optarg, 0, 0);
510c516
< err(1,"Damage limit must be positive");
---
> errx(1, "Damage limit must be positive");
518c524
< if (regcomp(&reg_ignore,optarg,
---
> if (regcomp(&reg_ignore, optarg,
521c527
< err(1,"Regular expression argument to -I is botched");
---
> errx(1, "Regular expression argument to -I is botched");
530c536
< if (regcomp(&reg_bogus,optarg,
---
> if (regcomp(&reg_bogus, optarg,
533c539
< err(1,"Regular expression argument to -B is botched");
---
> errx(1, "Regular expression argument to -B is botched");
535a542,546
> case 'l':
> logf = fopen(optarg, "w");
> if (!logf)
> err(1, optarg);
> break;
550c561,562
< setbuf(stdout,0);
---
> if (!logf)
> logf = fopen("/dev/null", "w");
551a564,565
> setbuf(stdout, 0);
>
557c571
< signal(SIGINFO,stat_info);
---
> signal(SIGINFO, stat_info);
558a573,576
> fprintf(stderr, "CTM_BEGIN 2.0 %s %s %s %s\n",
> argv[0], argv[1], argv[2], argv[3]);
> fprintf(logf, "CTM_BEGIN 2.0 %s %s %s %s\n",
> argv[0], argv[1], argv[2], argv[3]);
561c579
< DoDir(argv[4],argv[5],"");
---
> DoDir(argv[4], argv[5], "");
563,566c581,585
< print_stat(stderr,"");
< err(1,"Damage would exceede %d files", damage_limit);
< } else if (!change) {
< err(1,"No changes");
---
> print_stat(stderr, "DAMAGE: ");
> errx(1, "Damage of %d would exceed %d files",
> damage, damage_limit);
> } else if (change < 2) {
> errx(1, "No changes");
569c588,589
< print_stat(stderr,"");
---
> fprintf(logf, "CTM_END\n");
> print_stat(stderr, "END: ");