Updated to current mtstdopen interface.
[statserve.git] / statdbput.c
index 8369efe..3f5ea08 100644 (file)
@@ -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)