Blame


1 d1f529f4 2005-10-29 devnull #include <u.h>
2 d1f529f4 2005-10-29 devnull #include <libc.h>
3 d1f529f4 2005-10-29 devnull #include <bio.h>
4 d1f529f4 2005-10-29 devnull #include <regexp.h>
5 d1f529f4 2005-10-29 devnull #include "hash.h"
6 d1f529f4 2005-10-29 devnull
7 d1f529f4 2005-10-29 devnull Hash hash;
8 d1f529f4 2005-10-29 devnull
9 d1f529f4 2005-10-29 devnull void
10 d1f529f4 2005-10-29 devnull usage(void)
11 d1f529f4 2005-10-29 devnull {
12 d1f529f4 2005-10-29 devnull fprint(2, "addhash [-o out] file scale [file scale]...\n");
13 d1f529f4 2005-10-29 devnull exits("usage");
14 d1f529f4 2005-10-29 devnull }
15 d1f529f4 2005-10-29 devnull
16 d1f529f4 2005-10-29 devnull void
17 d1f529f4 2005-10-29 devnull main(int argc, char **argv)
18 d1f529f4 2005-10-29 devnull {
19 d1f529f4 2005-10-29 devnull int i, fd, n;
20 d1f529f4 2005-10-29 devnull char err[ERRMAX], *out;
21 d1f529f4 2005-10-29 devnull Biobuf *b, bout;
22 d1f529f4 2005-10-29 devnull
23 d1f529f4 2005-10-29 devnull out = nil;
24 d1f529f4 2005-10-29 devnull ARGBEGIN{
25 d1f529f4 2005-10-29 devnull case 'o':
26 d1f529f4 2005-10-29 devnull out = EARGF(usage());
27 d1f529f4 2005-10-29 devnull break;
28 d1f529f4 2005-10-29 devnull default:
29 d1f529f4 2005-10-29 devnull usage();
30 d1f529f4 2005-10-29 devnull }ARGEND;
31 d1f529f4 2005-10-29 devnull
32 d1f529f4 2005-10-29 devnull if(argc==0 || argc%2)
33 d1f529f4 2005-10-29 devnull usage();
34 d1f529f4 2005-10-29 devnull
35 d1f529f4 2005-10-29 devnull while(argc > 0){
36 d1f529f4 2005-10-29 devnull if((b = Bopenlock(argv[0], OREAD)) == nil)
37 d1f529f4 2005-10-29 devnull sysfatal("open %s: %r", argv[0]);
38 d1f529f4 2005-10-29 devnull n = atoi(argv[1]);
39 d1f529f4 2005-10-29 devnull if(n == 0)
40 d1f529f4 2005-10-29 devnull sysfatal("0 scale given");
41 d1f529f4 2005-10-29 devnull Breadhash(b, &hash, n);
42 d1f529f4 2005-10-29 devnull Bterm(b);
43 d1f529f4 2005-10-29 devnull argv += 2;
44 d1f529f4 2005-10-29 devnull argc -= 2;
45 d1f529f4 2005-10-29 devnull }
46 d1f529f4 2005-10-29 devnull
47 d1f529f4 2005-10-29 devnull fd = 1;
48 d1f529f4 2005-10-29 devnull if(out){
49 d1f529f4 2005-10-29 devnull for(i=0; i<120; i++){
50 d1f529f4 2005-10-29 devnull if((fd = create(out, OWRITE, 0666|DMEXCL)) >= 0)
51 d1f529f4 2005-10-29 devnull break;
52 d1f529f4 2005-10-29 devnull rerrstr(err, sizeof err);
53 d1f529f4 2005-10-29 devnull if(strstr(err, "file is locked")==nil && strstr(err, "exclusive lock")==nil)
54 d1f529f4 2005-10-29 devnull break;
55 d1f529f4 2005-10-29 devnull sleep(1000);
56 d1f529f4 2005-10-29 devnull }
57 d1f529f4 2005-10-29 devnull if(fd < 0)
58 d1f529f4 2005-10-29 devnull sysfatal("could not open %s: %r\n", out);
59 d1f529f4 2005-10-29 devnull }
60 fa325e9b 2020-01-10 cross
61 d1f529f4 2005-10-29 devnull Binit(&bout, fd, OWRITE);
62 d1f529f4 2005-10-29 devnull Bwritehash(&bout, &hash);
63 d1f529f4 2005-10-29 devnull Bterm(&bout);
64 d1f529f4 2005-10-29 devnull exits(0);
65 d1f529f4 2005-10-29 devnull }