Deleted Added
full compact
14c14,15
< * -D int Damage
---
> * -D int Damage
> * -q decrease verbosity
16c17
< * -l str control logging.
---
> * (-l str control logging.)
39,40c40,41
< #define DEFAULT_IGNORE "/CVS$|/\\.#"
< #define DEFAULT_BOGUS "\\.core$"
---
> #define DEFAULT_IGNORE "/CVS$|/\\.#|00_TRANS\\.TBL$"
> #define DEFAULT_BOGUS "\\.core$|\\.orig$|\\.rej$"
43a45,48
> int verbose;
> int damage, damage_limit;
> int change;
>
47,48d51
< u_long s_same_dirs, s_same_files, s_same_bytes;
< u_long s_files_chg, s_bytes_add, s_bytes_del;
50,51c53,55
< u_long s_del_dirs, s_del_files, s_del_bytes;
< u_long s_chg_files, s_chg_bytes;
---
> u_long s_del_dirs, s_del_files, s_del_bytes;
> u_long s_files_chg, s_bytes_add, s_bytes_del;
> u_long s_same_dirs, s_same_files, s_same_bytes;
55a60,73
> Usage(void)
> {
> fprintf(stderr, "Usage:\n");
> fprintf(stderr, "\tmkctm [-options] name number timestamp prefix");
> fprintf(stderr, " dir1 dir2");
> fprintf(stderr, "Options:\n");
> fprintf(stderr, "\t\t-B bogus_regexp\n");
> fprintf(stderr, "\t\t-D damage_limit\n");
> fprintf(stderr, "\t\t-I ignore_regexp\n");
> fprintf(stderr, "\t\t-q\n");
> fprintf(stderr, "\t\t-v\n");
> }
>
> void
120a139,141
> if (verbose > 1) {
> fprintf(stderr,"%s %s%s\n", pfx, name, de->d_name);
> }
138c159
< void *p1,*p2;
---
> u_char *p1,*p2;
154c175,176
< #if 1
---
> #if 0
> /* XXX if we could just trust the size to change... */
178a201,202
> damage++;
> change++;
197,199c221,279
< u_long l = s1.st_size + s2.st_size;
< u_char *ob = alloca(l);
< Dissect(p1,p1+s1.st_size,p2,p2+s2.st_size,ob,&l);
---
> u_long l = s2.st_size + 2;
> u_char *cmd = alloca(strlen(buf1)+strlen(buf2)+100);
> u_char *ob = alloca(l), *p;
> int j;
> FILE *F;
>
> if (p1[s1.st_size-1] != '\n') {
> if (verbose > 0)
> fprintf(stderr,
> "last char != \\n in %s\n",
> buf1);
> goto subst;
> }
>
> if (p2[s2.st_size-1] != '\n') {
> if (verbose > 0)
> fprintf(stderr,
> "last char != \\n in %s\n",
> buf2);
> goto subst;
> }
>
> for (p=p1; p<p1+s1.st_size; p++)
> if (!*p) {
> if (verbose > 0)
> fprintf(stderr,
> "NULL char in %s\n",
> buf1);
> goto subst;
> }
>
> for (p=p2; p<p2+s2.st_size; p++)
> if (!*p) {
> if (verbose > 0)
> fprintf(stderr,
> "NULL char in %s\n",
> buf2);
> goto subst;
> }
>
> strcpy(cmd, "diff -n ");
> strcat(cmd, buf1);
> strcat(cmd, " ");
> strcat(cmd, buf2);
> F = popen(cmd,"r");
> for (j = 1, l = 0; l < s2.st_size; ) {
> j = fread(ob+l, 1, s2.st_size - l, F);
> if (j < 1)
> break;
> l += j;
> continue;
> }
> if (j) {
> l = 0;
> while (EOF != fgetc(F))
> continue;
> }
> pclose(F);
>
201,202c281,284
< name_stat("CTMFB",dir2,name,de);
< printf(" %s %s %d\n",m1,m2,(unsigned)s1.st_size);
---
> name_stat("CTMFN",dir2,name,de);
> printf(" %s %s %d\n",m1,m2,(unsigned)l);
> fwrite(ob,1,l,stdout);
> putchar('\n');
206,207d287
< fwrite(ob,1,l,stdout);
< putchar('\n');
208a289
> subst:
211a293
> putchar('\n');
224a307
> change++;
262a346,347
> damage++;
> change++;
302,303d386
< fprintf(stderr,">%d<%s>\n",strlen(nl[*i]->d_name),nl[*i]->d_name);
< fflush(stderr);
305c388,389
< if (flag_ignore && !regexec(&reg_ignore,buf,0,0,0))
---
> if (flag_ignore &&
> !regexec(&reg_ignore,buf,0,0,0)) {
307c391,395
< else if (flag_bogus && !regexec(&reg_bogus,buf,0,0,0))
---
> if (verbose > 2) {
> fprintf(stderr,"Ignore %s\n",buf);
> }
> } else if (flag_bogus &&
> !regexec(&reg_bogus,buf,0,0,0)) {
309c397,400
< else
---
> if (verbose > 0) {
> fprintf(stderr,"Bogus %s\n",buf);
> }
> } else {
310a402
> }
318a411,412
> if (verbose > 0)
> fprintf(stderr,"Wrong %s\n",buf);
339a434,436
> if (damage_limit && damage > damage_limit)
> break;
>
395a493,494
> setbuf(stderr, NULL);
>
406c505
< while ((i = getopt(argc,argv,"I:B:")) != EOF)
---
> while ((i = getopt(argc,argv,"D:I:B:qv")) != EOF)
407a507,511
> case 'D':
> damage_limit = strtol(optarg,0,0);
> if (damage_limit < 0)
> err(1,"Damage limit must be positive");
> break;
431a536,541
> case 'q':
> verbose--;
> break;
> case 'v':
> verbose++;
> break;
434,435c544
< fprintf(stderr,"Usage:\n\t%s: %s\n", argv[0],
< "[-I ignore_re] [-B bogus_re]");
---
> Usage();
442a552,556
> if (argc != 6) {
> Usage();
> return (1);
> }
>
444,447c558,570
< printf("CTM_BEGIN 2.0 tst 0 950326022230Z .\n");
< DoDir(argv[0],argv[1],"");
< printf("CTM_END ");
< print_stat(stderr,"");
---
>
> printf("CTM_BEGIN 2.0 %s %s %s %s\n",
> argv[0], argv[1], argv[2], argv[3]);
> DoDir(argv[4],argv[5],"");
> if (damage_limit && damage > damage_limit) {
> print_stat(stderr,"");
> err(1,"Damage would exceede %d files", damage_limit);
> } else if (!change) {
> err(1,"No changes");
> } else {
> printf("CTM_END ");
> print_stat(stderr,"");
> }