From d1f529f46f957c78a3db73b42c2fcd2d3c9f8a34 Mon Sep 17 00:00:00 2001 From: rsc Date: Sat, 29 Oct 2005 16:26:32 +0000 Subject: Thanks to John Cummings. --- src/cmd/upas/bayes/addhash.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/cmd/upas/bayes/addhash.c (limited to 'src/cmd/upas/bayes/addhash.c') diff --git a/src/cmd/upas/bayes/addhash.c b/src/cmd/upas/bayes/addhash.c new file mode 100644 index 00000000..6be960ff --- /dev/null +++ b/src/cmd/upas/bayes/addhash.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +#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 && strstr(err, "exclusive lock")==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); +} + -- cgit v1.2.3