X-Git-Url: http://dolda2000.com/gitweb/?p=statserve.git;a=blobdiff_plain;f=statdbput.c;h=3f5ea08277f47201d406507ec89ffa858df1c492;hp=8369efe01ce6faec0507271545a1e9c342d539d8;hb=HEAD;hpb=34d725a595138f81ba84d67d7b84766c3a270d9f diff --git a/statdbput.c b/statdbput.c index 8369efe..3f5ea08 100644 --- a/statdbput.c +++ b/statdbput.c @@ -15,7 +15,7 @@ static DB_TXN *txn; static struct charvbuf files; static int verbose = 0; -static void opendb(char *path) +static void opendb(char *path, int pagesize) { char *envpath, *p; int ret; @@ -40,6 +40,12 @@ static void opendb(char *path) fprintf(stderr, "statdbput: could not create db handle: %s\n", db_strerror(ret)); exit(1); } + if(pagesize) { + if((ret = db->set_pagesize(db, pagesize)) != 0) { + fprintf(stderr, "statdbput: could not set db page size (to %i): %s", pagesize, db_strerror(ret)); + exit(1); + } + } if((ret = db->open(db, NULL, path, NULL, DB_HASH, DB_AUTO_COMMIT | DB_CREATE, 0666)) != 0) { fprintf(stderr, "statdbput: %s: %s\n", path, db_strerror(ret)); exit(1); @@ -152,13 +158,13 @@ static int dodir(char *path, char *ctype) } buffree(fnbuf); closedir(dir); - return(0); + return(rv); } static void usage(FILE *out) { - fprintf(out, "usage: statdbput [-hvD] [-n NAME] DB CONTENT-TYPE {FILE|-}...\n"); - fprintf(out, " statdbput [-hvD] [-d] DB CONTENT-TYPE DIR...\n"); + fprintf(out, "usage: statdbput [-hvD] [-P PAGESIZE] [-n NAME] DB CONTENT-TYPE {FILE|-}...\n"); + fprintf(out, " statdbput [-hvD] [-P PAGESIZE] [-d] DB CONTENT-TYPE DIR...\n"); } int main(int argc, char **argv) @@ -166,10 +172,12 @@ int main(int argc, char **argv) int c, rv, ret; int dm, ul, i, a; char *name, *ctype, *dbpath; + int pagesize; dm = ul = 0; name = NULL; - while((c = getopt(argc, argv, "+hvDdn:")) >= 0) { + pagesize = 0; + while((c = getopt(argc, argv, "+hvDdn:P:")) >= 0) { switch(c) { case 'd': dm = 1; @@ -183,6 +191,9 @@ int main(int argc, char **argv) case 'n': name = optarg; break; + case 'P': + pagesize = atoi(optarg); + break; case 'h': usage(stdout); return(0); @@ -197,10 +208,12 @@ int main(int argc, char **argv) } dbpath = argv[optind++]; ctype = argv[optind++]; - opendb(dbpath); + opendb(dbpath, pagesize); while(1) { if((ret = env->txn_begin(env, NULL, &txn, 0)) != 0) { fprintf(stderr, "statdbput: could not begin transaction in %s: %s\n", dbpath, db_strerror(ret)); + db->close(db, 0); + env->close(env, 0); return(1); } rv = 0; @@ -244,8 +257,12 @@ int main(int argc, char **argv) } if((ret = txn->commit(txn, 0)) != 0) { fprintf(stderr, "statdbput: could not commit transaction in %s: %s\n", dbpath, db_strerror(ret)); + db->close(db, 0); + env->close(env, 0); return(1); } + db->close(db, 0); + env->close(env, 0); if(ul) { for(i = 0; i < files.d; i++) { if(verbose)