diff options
Diffstat (limited to 'bdb/db_checkpoint/db_checkpoint.c')
-rw-r--r-- | bdb/db_checkpoint/db_checkpoint.c | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/bdb/db_checkpoint/db_checkpoint.c b/bdb/db_checkpoint/db_checkpoint.c index c7d16e02334..a59572c5f76 100644 --- a/bdb/db_checkpoint/db_checkpoint.c +++ b/bdb/db_checkpoint/db_checkpoint.c @@ -1,7 +1,7 @@ /*- * See the file LICENSE for redistribution information. * - * Copyright (c) 1996, 1997, 1998, 1999, 2000 + * Copyright (c) 1996-2002 * Sleepycat Software. All rights reserved. */ @@ -9,9 +9,9 @@ #ifndef lint static const char copyright[] = - "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n"; + "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n"; static const char revid[] = - "$Id: db_checkpoint.c,v 11.25 2001/01/18 18:36:57 bostic Exp $"; + "$Id: db_checkpoint.c,v 11.46 2002/08/08 03:50:31 bostic Exp $"; #endif #ifndef NO_SYSTEM_INCLUDES @@ -31,25 +31,17 @@ static const char revid[] = #include <limits.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <unistd.h> #endif #include "db_int.h" -#include "db_page.h" -#include "btree.h" -#include "hash.h" -#include "qam.h" -#include "common_ext.h" -#include "clib_ext.h" - -char *check __P((DB_ENV *, long, long)); -int main __P((int, char *[])); -void usage __P((void)); -void version_check __P((void)); +#include "dbinc/db_page.h" +#include "dbinc/db_am.h" -DB_ENV *dbenv; -const char - *progname = "db_checkpoint"; /* Program name. */ +int main __P((int, char *[])); +int usage __P((void)); +int version_check __P((const char *)); int main(argc, argv) @@ -58,13 +50,16 @@ main(argc, argv) { extern char *optarg; extern int optind; + DB_ENV *dbenv; + const char *progname = "db_checkpoint"; time_t now; long argval; u_int32_t flags, kbytes, minutes, seconds; int ch, e_close, exitval, once, ret, verbose; - char *home, *logfile; + char *home, *logfile, *passwd; - version_check(); + if ((ret = version_check(progname)) != 0) + return (ret); /* * !!! @@ -76,8 +71,8 @@ main(argc, argv) kbytes = minutes = 0; e_close = exitval = once = verbose = 0; flags = 0; - home = logfile = NULL; - while ((ch = getopt(argc, argv, "1h:k:L:p:Vv")) != EOF) + home = logfile = passwd = NULL; + while ((ch = getopt(argc, argv, "1h:k:L:P:p:Vv")) != EOF) switch (ch) { case '1': once = 1; @@ -87,40 +82,50 @@ main(argc, argv) home = optarg; break; case 'k': - (void)__db_getlong(NULL, progname, - optarg, 1, (long)MAX_UINT32_T, &argval); + if (__db_getlong(NULL, progname, + optarg, 1, (long)MAX_UINT32_T, &argval)) + return (EXIT_FAILURE); kbytes = argval; break; case 'L': logfile = optarg; break; + case 'P': + passwd = strdup(optarg); + memset(optarg, 0, strlen(optarg)); + if (passwd == NULL) { + fprintf(stderr, "%s: strdup: %s\n", + progname, strerror(errno)); + return (EXIT_FAILURE); + } + break; case 'p': - (void)__db_getlong(NULL, progname, - optarg, 1, (long)MAX_UINT32_T, &argval); + if (__db_getlong(NULL, progname, + optarg, 1, (long)MAX_UINT32_T, &argval)) + return (EXIT_FAILURE); minutes = argval; break; case 'V': printf("%s\n", db_version(NULL, NULL, NULL)); - exit(0); + return (EXIT_SUCCESS); case 'v': verbose = 1; break; case '?': default: - usage(); - goto shutdown; + return (usage()); } argc -= optind; argv += optind; if (argc != 0) - usage(); + return (usage()); if (once == 0 && kbytes == 0 && minutes == 0) { (void)fprintf(stderr, "%s: at least one of -1, -k and -p must be specified\n", progname); - exit (1); + return (EXIT_FAILURE); } /* Handle possible interruptions. */ @@ -144,6 +149,11 @@ main(argc, argv) dbenv->set_errfile(dbenv, stderr); dbenv->set_errpfx(dbenv, progname); + if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv, + passwd, DB_ENCRYPT_AES)) != 0) { + dbenv->err(dbenv, ret, "set_passwd"); + goto shutdown; + } /* Initialize the environment. */ if ((ret = dbenv->open(dbenv, home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0) { @@ -152,10 +162,10 @@ main(argc, argv) } /* Register the standard pgin/pgout functions, in case we do I/O. */ - if ((ret = - memp_register(dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0) { + if ((ret = dbenv->memp_register( + dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0) { dbenv->err(dbenv, ret, - "failed to register access method functions"); + "DB_ENV->memp_register: failed to register access method functions"); goto shutdown; } @@ -171,15 +181,8 @@ main(argc, argv) dbenv->errx(dbenv, "checkpoint: %s", ctime(&now)); } - ret = txn_checkpoint(dbenv, kbytes, minutes, flags); - while (ret == DB_INCOMPLETE) { - if (verbose) - dbenv->errx(dbenv, - "checkpoint did not finish, retrying\n"); - (void)__os_sleep(dbenv, 2, 0); - ret = txn_checkpoint(dbenv, 0, 0, flags); - } - if (ret != 0) { + if ((ret = dbenv->txn_checkpoint(dbenv, + kbytes, minutes, flags)) != 0) { dbenv->err(dbenv, ret, "txn_checkpoint"); goto shutdown; } @@ -208,19 +211,21 @@ shutdown: exitval = 1; /* Resend any caught signal. */ __db_util_sigresend(); - return (exitval); + return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE); } -void +int usage() { - (void)fprintf(stderr, - "usage: db_checkpoint [-1Vv] [-h home] [-k kbytes] [-L file] [-p min]\n"); - exit(1); + (void)fprintf(stderr, "%s\n\t%s\n", + "usage: db_checkpoint [-1Vv]", + "[-h home] [-k kbytes] [-L file] [-P password] [-p min]"); + return (EXIT_FAILURE); } -void -version_check() +int +version_check(progname) + const char *progname; { int v_major, v_minor, v_patch; @@ -232,6 +237,7 @@ version_check() "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n", progname, DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, v_major, v_minor, v_patch); - exit (1); + return (EXIT_FAILURE); } + return (0); } |