diff options
author | rsc <devnull@localhost> | 2005-10-29 16:26:32 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-10-29 16:26:32 +0000 |
commit | d1f529f46f957c78a3db73b42c2fcd2d3c9f8a34 (patch) | |
tree | a4d6f28106cca984926b9dd5ecddd6053b654617 /src/cmd/upas/bayes/addhash.c | |
parent | 9f1fdc128738b2ed76258ac22a8574c681f3df3a (diff) | |
download | plan9port-d1f529f46f957c78a3db73b42c2fcd2d3c9f8a34.tar.gz plan9port-d1f529f46f957c78a3db73b42c2fcd2d3c9f8a34.tar.bz2 plan9port-d1f529f46f957c78a3db73b42c2fcd2d3c9f8a34.zip |
Thanks to John Cummings.
Diffstat (limited to 'src/cmd/upas/bayes/addhash.c')
-rw-r--r-- | src/cmd/upas/bayes/addhash.c | 66 |
1 files changed, 66 insertions, 0 deletions
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 <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 && 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); +} + |