123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include <u.h>
- #include <libc.h>
- #include <bio.h>
- #include <regexp.h>
- #include "hash.h"
- Hash hash;
- void
- usage(void)
- {
- fprint(2, "addhash [-o out] file scale [file scale]...\n");
- exits("usage");
- }
- void
- main(int argc, char **argv)
- {
- int i, fd, n;
- char err[ERRMAX], *out;
- Biobuf *b, bout;
- out = nil;
- ARGBEGIN{
- case 'o':
- out = EARGF(usage());
- break;
- default:
- usage();
- }ARGEND;
- if(argc==0 || argc%2)
- usage();
- while(argc > 0){
- if((b = Bopenlock(argv[0], OREAD)) == nil)
- sysfatal("open %s: %r", argv[0]);
- n = atoi(argv[1]);
- if(n == 0)
- sysfatal("0 scale given");
- Breadhash(b, &hash, n);
- Bterm(b);
- argv += 2;
- argc -= 2;
- }
- fd = 1;
- if(out){
- for(i=0; i<120; i++){
- if((fd = create(out, OWRITE, 0666|DMEXCL)) >= 0)
- break;
- rerrstr(err, sizeof err);
- if(strstr(err, "file is locked") == nil)
- break;
- sleep(1000);
- }
- if(fd < 0)
- sysfatal("could not open %s: %r\n", out);
- }
-
- Binit(&bout, fd, OWRITE);
- Bwritehash(&bout, &hash);
- Bterm(&bout);
- exits(0);
- }
|