diff options
Diffstat (limited to 'src/gdbmtool.c')
-rw-r--r-- | src/gdbmtool.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/gdbmtool.c b/src/gdbmtool.c index 33bdf93..9c6eebe 100644 --- a/src/gdbmtool.c +++ b/src/gdbmtool.c | |||
@@ -543,42 +543,47 @@ reorganize_handler (struct handler_param *param GDBM_ARG_UNUSED) | |||
543 | 543 | ||
544 | static void | 544 | static void |
545 | err_printer (void *data GDBM_ARG_UNUSED, char const *fmt, ...) | 545 | err_printer (void *data GDBM_ARG_UNUSED, char const *fmt, ...) |
546 | { | 546 | { |
547 | va_list ap; | 547 | va_list ap; |
548 | 548 | ||
549 | va_start (ap, fmt); | 549 | va_start (ap, fmt); |
550 | vfprintf (stderr, fmt, ap); | 550 | vfprintf (stderr, fmt, ap); |
551 | va_end (ap); | 551 | va_end (ap); |
552 | fprintf (stderr, "\n"); | 552 | fprintf (stderr, "\n"); |
553 | } | 553 | } |
554 | 554 | ||
555 | /* recover verbose backup max-failed-keys=N max-failed-buckets=N max-failures=N */ | 555 | /* recover sumamry verbose backup max-failed-keys=N max-failed-buckets=N max-failures=N */ |
556 | void | 556 | void |
557 | recover_handler (struct handler_param *param) | 557 | recover_handler (struct handler_param *param) |
558 | { | 558 | { |
559 | gdbm_recovery rcvr; | 559 | gdbm_recovery rcvr; |
560 | int flags = 0; | 560 | int flags = 0; |
561 | int rc; | 561 | int rc; |
562 | int i; | 562 | int i; |
563 | char *p; | 563 | char *p; |
564 | int summary = 0; | ||
564 | 565 | ||
565 | for (i = 1; i < param->argc; i++) | 566 | for (i = 0; i < param->argc; i++) |
566 | { | 567 | { |
567 | char *arg = PARAM_STRING (param, i); | 568 | char *arg = PARAM_STRING (param, i); |
568 | if (strcmp (arg, "verbose") == 0) | 569 | if (strcmp (arg, "verbose") == 0) |
569 | { | 570 | { |
570 | rcvr.errfun = err_printer; | 571 | rcvr.errfun = err_printer; |
571 | flags |= GDBM_RCVR_ERRFUN; | 572 | flags |= GDBM_RCVR_ERRFUN; |
572 | } | 573 | } |
574 | else if (strcmp (arg, "summary") == 0) | ||
575 | { | ||
576 | summary = 1; | ||
577 | } | ||
573 | else if (strcmp (arg, "backup") == 0) | 578 | else if (strcmp (arg, "backup") == 0) |
574 | { | 579 | { |
575 | rcvr.errfun = err_printer; | 580 | rcvr.errfun = err_printer; |
576 | flags |= GDBM_RCVR_BACKUP; | 581 | flags |= GDBM_RCVR_BACKUP; |
577 | } | 582 | } |
578 | else if (strncmp (arg, "max-failures=", 13) == 0) | 583 | else if (strncmp (arg, "max-failures=", 13) == 0) |
579 | { | 584 | { |
580 | rcvr.max_failures = strtoul (arg + 13, &p, 10); | 585 | rcvr.max_failures = strtoul (arg + 13, &p, 10); |
581 | if (*p) | 586 | if (*p) |
582 | { | 587 | { |
583 | printf (_("not a number (stopped near %s)\n"), p); | 588 | printf (_("not a number (stopped near %s)\n"), p); |
584 | return; | 589 | return; |
@@ -608,24 +613,37 @@ recover_handler (struct handler_param *param) | |||
608 | else | 613 | else |
609 | { | 614 | { |
610 | terror (_("unrecognized argument: %s"), arg); | 615 | terror (_("unrecognized argument: %s"), arg); |
611 | return; | 616 | return; |
612 | } | 617 | } |
613 | } | 618 | } |
614 | 619 | ||
615 | rc = gdbm_recover (gdbm_file, &rcvr, flags); | 620 | rc = gdbm_recover (gdbm_file, &rcvr, flags); |
616 | 621 | ||
617 | if (rc == 0) | 622 | if (rc == 0) |
618 | { | 623 | { |
619 | fprintf (param->fp, _("Recovery succeeded.\n")); | 624 | fprintf (param->fp, _("Recovery succeeded.\n")); |
625 | if (summary) | ||
626 | { | ||
627 | fprintf (param->fp, | ||
628 | _("Keys recovered: %lu, failed: %lu, duplicate: %lu\n"), | ||
629 | (unsigned long) rcvr.recovered_keys, | ||
630 | (unsigned long) rcvr.failed_keys, | ||
631 | (unsigned long) rcvr.duplicate_keys); | ||
632 | fprintf (param->fp, | ||
633 | _("Buckets recovered: %lu, failed: %lu\n"), | ||
634 | (unsigned long) rcvr.recovered_buckets, | ||
635 | (unsigned long) rcvr.failed_buckets); | ||
636 | } | ||
637 | |||
620 | if (rcvr.backup_name) | 638 | if (rcvr.backup_name) |
621 | { | 639 | { |
622 | fprintf (param->fp, | 640 | fprintf (param->fp, |
623 | _("Original database preserved in file %s"), | 641 | _("Original database preserved in file %s"), |
624 | rcvr.backup_name); | 642 | rcvr.backup_name); |
625 | free (rcvr.backup_name); | 643 | free (rcvr.backup_name); |
626 | } | 644 | } |
627 | fputc ('\n', param->fp); | 645 | fputc ('\n', param->fp); |
628 | } | 646 | } |
629 | else | 647 | else |
630 | { | 648 | { |
631 | fprintf (stderr, _("Recovery failed: %s"), gdbm_strerror (gdbm_errno)); | 649 | fprintf (stderr, _("Recovery failed: %s"), gdbm_strerror (gdbm_errno)); |
@@ -916,25 +934,25 @@ quit_handler (struct handler_param *param GDBM_ARG_UNUSED) | |||
916 | exit (EXIT_OK); | 934 | exit (EXIT_OK); |
917 | } | 935 | } |
918 | 936 | ||
919 | /* export FILE [truncate] - export to a flat file format */ | 937 | /* export FILE [truncate] - export to a flat file format */ |
920 | void | 938 | void |
921 | export_handler (struct handler_param *param) | 939 | export_handler (struct handler_param *param) |
922 | { | 940 | { |
923 | int format = GDBM_DUMP_FMT_ASCII; | 941 | int format = GDBM_DUMP_FMT_ASCII; |
924 | int flags = GDBM_WRCREAT; | 942 | int flags = GDBM_WRCREAT; |
925 | int i; | 943 | int i; |
926 | int filemode; | 944 | int filemode; |
927 | 945 | ||
928 | for (i = 1; i < param->argc; i++) | 946 | for (i = 0; i < param->argc; i++) |
929 | { | 947 | { |
930 | if (strcmp (PARAM_STRING (param, i), "truncate") == 0) | 948 | if (strcmp (PARAM_STRING (param, i), "truncate") == 0) |
931 | flags = GDBM_NEWDB; | 949 | flags = GDBM_NEWDB; |
932 | else if (strcmp (PARAM_STRING (param, i), "binary") == 0) | 950 | else if (strcmp (PARAM_STRING (param, i), "binary") == 0) |
933 | format = GDBM_DUMP_FMT_BINARY; | 951 | format = GDBM_DUMP_FMT_BINARY; |
934 | else if (strcmp (PARAM_STRING (param, i), "ascii") == 0) | 952 | else if (strcmp (PARAM_STRING (param, i), "ascii") == 0) |
935 | format = GDBM_DUMP_FMT_ASCII; | 953 | format = GDBM_DUMP_FMT_ASCII; |
936 | else | 954 | else |
937 | { | 955 | { |
938 | terror (_("unrecognized argument: %s"), PARAM_STRING (param, i)); | 956 | terror (_("unrecognized argument: %s"), PARAM_STRING (param, i)); |
939 | return; | 957 | return; |
940 | } | 958 | } |
@@ -950,25 +968,25 @@ export_handler (struct handler_param *param) | |||
950 | } | 968 | } |
951 | 969 | ||
952 | /* import FILE [replace] [nometa] - import from a flat file */ | 970 | /* import FILE [replace] [nometa] - import from a flat file */ |
953 | void | 971 | void |
954 | import_handler (struct handler_param *param) | 972 | import_handler (struct handler_param *param) |
955 | { | 973 | { |
956 | int flag = GDBM_INSERT; | 974 | int flag = GDBM_INSERT; |
957 | unsigned long err_line; | 975 | unsigned long err_line; |
958 | int meta_mask = 0; | 976 | int meta_mask = 0; |
959 | int i; | 977 | int i; |
960 | int rc; | 978 | int rc; |
961 | 979 | ||
962 | for (i = 1; i < param->argc; i++) | 980 | for (i = 0; i < param->argc; i++) |
963 | { | 981 | { |
964 | if (strcmp (PARAM_STRING (param, i), "replace") == 0) | 982 | if (strcmp (PARAM_STRING (param, i), "replace") == 0) |
965 | flag = GDBM_REPLACE; | 983 | flag = GDBM_REPLACE; |
966 | else if (strcmp (PARAM_STRING (param, i), "nometa") == 0) | 984 | else if (strcmp (PARAM_STRING (param, i), "nometa") == 0) |
967 | meta_mask = GDBM_META_MASK_MODE | GDBM_META_MASK_OWNER; | 985 | meta_mask = GDBM_META_MASK_MODE | GDBM_META_MASK_OWNER; |
968 | else | 986 | else |
969 | { | 987 | { |
970 | terror (_("unrecognized argument: %s"), | 988 | terror (_("unrecognized argument: %s"), |
971 | PARAM_STRING (param, i)); | 989 | PARAM_STRING (param, i)); |
972 | return; | 990 | return; |
973 | } | 991 | } |
974 | } | 992 | } |
@@ -1211,24 +1229,25 @@ struct command command_tab[] = { | |||
1211 | FALSE, | 1229 | FALSE, |
1212 | REPEAT_NEVER, | 1230 | REPEAT_NEVER, |
1213 | N_("firstkey") }, | 1231 | N_("firstkey") }, |
1214 | { S(reorganize), T_CMD, | 1232 | { S(reorganize), T_CMD, |
1215 | checkdb, reorganize_handler, NULL, | 1233 | checkdb, reorganize_handler, NULL, |
1216 | { { NULL } }, | 1234 | { { NULL } }, |
1217 | FALSE, | 1235 | FALSE, |
1218 | REPEAT_NEVER, | 1236 | REPEAT_NEVER, |
1219 | N_("reorganize") }, | 1237 | N_("reorganize") }, |
1220 | { S(recover), T_CMD, | 1238 | { S(recover), T_CMD, |
1221 | checkdb, recover_handler, NULL, | 1239 | checkdb, recover_handler, NULL, |
1222 | { { "[verbose]", GDBM_ARG_STRING }, | 1240 | { { "[verbose]", GDBM_ARG_STRING }, |
1241 | { "[summary]", GDBM_ARG_STRING }, | ||
1223 | { "[backup]", GDBM_ARG_STRING }, | 1242 | { "[backup]", GDBM_ARG_STRING }, |
1224 | { "[max-failed-keys=N]", GDBM_ARG_STRING }, | 1243 | { "[max-failed-keys=N]", GDBM_ARG_STRING }, |
1225 | { "[max-failed-buckets=N]", GDBM_ARG_STRING }, | 1244 | { "[max-failed-buckets=N]", GDBM_ARG_STRING }, |
1226 | { "[max-failures=N]", GDBM_ARG_STRING }, | 1245 | { "[max-failures=N]", GDBM_ARG_STRING }, |
1227 | { NULL } }, | 1246 | { NULL } }, |
1228 | FALSE, | 1247 | FALSE, |
1229 | REPEAT_NEVER, | 1248 | REPEAT_NEVER, |
1230 | N_("recover the database") }, | 1249 | N_("recover the database") }, |
1231 | { S(avail), T_CMD, | 1250 | { S(avail), T_CMD, |
1232 | avail_begin, avail_handler, NULL, | 1251 | avail_begin, avail_handler, NULL, |
1233 | { { NULL } }, | 1252 | { { NULL } }, |
1234 | FALSE, | 1253 | FALSE, |