db_archive.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1996-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char copyright[] =
  10.     "Copyright (c) 1996-2002nSleepycat Software Inc.  All rights reserved.n";
  11. static const char revid[] =
  12.     "$Id: db_archive.c,v 11.36 2002/03/28 20:13:34 bostic Exp $";
  13. #endif
  14. #ifndef NO_SYSTEM_INCLUDES
  15. #include <sys/types.h>
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <unistd.h>
  20. #endif
  21. #include "db_int.h"
  22. int main __P((int, char *[]));
  23. int usage __P((void));
  24. int version_check __P((const char *));
  25. int
  26. main(argc, argv)
  27. int argc;
  28. char *argv[];
  29. {
  30. extern char *optarg;
  31. extern int optind;
  32. const char *progname = "db_archive";
  33. DB_ENV *dbenv;
  34. u_int32_t flags;
  35. int ch, e_close, exitval, ret, verbose;
  36. char **file, *home, **list, *passwd;
  37. if ((ret = version_check(progname)) != 0)
  38. return (ret);
  39. flags = 0;
  40. e_close = exitval = verbose = 0;
  41. home = passwd = NULL;
  42. while ((ch = getopt(argc, argv, "ah:lP:sVv")) != EOF)
  43. switch (ch) {
  44. case 'a':
  45. LF_SET(DB_ARCH_ABS);
  46. break;
  47. case 'h':
  48. home = optarg;
  49. break;
  50. case 'l':
  51. LF_SET(DB_ARCH_LOG);
  52. break;
  53. case 'P':
  54. passwd = strdup(optarg);
  55. memset(optarg, 0, strlen(optarg));
  56. if (passwd == NULL) {
  57. fprintf(stderr, "%s: strdup: %sn",
  58.     progname, strerror(errno));
  59. return (EXIT_FAILURE);
  60. }
  61. break;
  62. case 's':
  63. LF_SET(DB_ARCH_DATA);
  64. break;
  65. case 'V':
  66. printf("%sn", db_version(NULL, NULL, NULL));
  67. return (EXIT_SUCCESS);
  68. case 'v':
  69. verbose = 1;
  70. break;
  71. case '?':
  72. default:
  73. return (usage());
  74. }
  75. argc -= optind;
  76. argv += optind;
  77. if (argc != 0)
  78. return (usage());
  79. /* Handle possible interruptions. */
  80. __db_util_siginit();
  81. /*
  82.  * Create an environment object and initialize it for error
  83.  * reporting.
  84.  */
  85. if ((ret = db_env_create(&dbenv, 0)) != 0) {
  86. fprintf(stderr,
  87.     "%s: db_env_create: %sn", progname, db_strerror(ret));
  88. goto shutdown;
  89. }
  90. e_close = 1;
  91. dbenv->set_errfile(dbenv, stderr);
  92. dbenv->set_errpfx(dbenv, progname);
  93. if (verbose)
  94. (void)dbenv->set_verbose(dbenv, DB_VERB_CHKPOINT, 1);
  95. if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
  96.     passwd, DB_ENCRYPT_AES)) != 0) {
  97. dbenv->err(dbenv, ret, "set_passwd");
  98. goto shutdown;
  99. }
  100. /*
  101.  * If attaching to a pre-existing environment fails, create a
  102.  * private one and try again.
  103.  */
  104. if ((ret = dbenv->open(dbenv,
  105.     home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
  106.     (ret = dbenv->open(dbenv, home, DB_CREATE |
  107.     DB_INIT_LOG | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0) {
  108. dbenv->err(dbenv, ret, "open");
  109. goto shutdown;
  110. }
  111. /* Get the list of names. */
  112. if ((ret = dbenv->log_archive(dbenv, &list, flags)) != 0) {
  113. dbenv->err(dbenv, ret, "DB_ENV->log_archive");
  114. goto shutdown;
  115. }
  116. /* Print the list of names. */
  117. if (list != NULL) {
  118. for (file = list; *file != NULL; ++file)
  119. printf("%sn", *file);
  120. free(list);
  121. }
  122. if (0) {
  123. shutdown: exitval = 1;
  124. }
  125. if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
  126. exitval = 1;
  127. fprintf(stderr,
  128.     "%s: dbenv->close: %sn", progname, db_strerror(ret));
  129. }
  130. /* Resend any caught signal. */
  131. __db_util_sigresend();
  132. return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
  133. }
  134. int
  135. usage()
  136. {
  137. (void)fprintf(stderr,
  138.     "usage: db_archive [-alsVv] [-h home] [-P password]n");
  139. return (EXIT_FAILURE);
  140. }
  141. int
  142. version_check(progname)
  143. const char *progname;
  144. {
  145. int v_major, v_minor, v_patch;
  146. /* Make sure we're loaded with the right version of the DB library. */
  147. (void)db_version(&v_major, &v_minor, &v_patch);
  148. if (v_major != DB_VERSION_MAJOR ||
  149.     v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
  150. fprintf(stderr,
  151. "%s: version %d.%d.%d doesn't match library version %d.%d.%dn",
  152.     progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
  153.     DB_VERSION_PATCH, v_major, v_minor, v_patch);
  154. return (EXIT_FAILURE);
  155. }
  156. return (0);
  157. }