X-Git-Url: http://git.tuebingen.mpg.de/?p=adu.git;a=blobdiff_plain;f=adu.c;h=dda9fd24ccd33fa1875d0a8f2e8a33d02ba2d723;hp=657adb244dd138281f68d10c48487dcd4d567e86;hb=0789c863b88e2f1978146e7b4f852fba5398e381;hpb=26ace9b8c1dc872e5da1b1122b45f01419761aab diff --git a/adu.c b/adu.c index 657adb2..dda9fd2 100644 --- a/adu.c +++ b/adu.c @@ -1,4 +1,10 @@ -/** \file adu.c The main functions used by all modes of operation. */ +/* + * Copyright (C) 2008 Andre Noll + * + * Licensed under the GPL v2. For licencing details see COPYING. + */ + +/** \file adu.c \brief The main functions used by all modes of operation. */ #include "adu.h" #include /* readdir() */ #include @@ -23,8 +29,6 @@ struct gengetopt_args_info conf; /** Options passed to --select-options. */ struct select_args_info select_conf; -/** The number of different uids found so far. */ -uint32_t num_uids = 0; /** * The table containing the directory names and statistics. @@ -108,6 +112,7 @@ static void close_dir_table(void) if (!dir_table) return; + NOTICE_LOG("closing dir table\n"); ret = osl(osl_close_table(dir_table, OSL_MARK_CLEAN)); if (ret < 0) ERROR_LOG("failed to close dir table: %s\n", adu_strerror(-ret)); @@ -119,7 +124,6 @@ void close_all_tables(void) { close_dir_table(); close_user_tables(); - free_hash_table(); } static void signal_handler(int s) @@ -149,15 +153,20 @@ static int init_signals(void) int open_dir_table(int create) { + + if (dir_table) + return 1; dir_table_desc.dir = adu_strdup(conf.database_dir_arg); if (create) { + NOTICE_LOG("creating dir table\n"); int ret = osl(osl_create_table(&dir_table_desc)); if (ret < 0) { free((char *)dir_table_desc.dir); return ret; } } + INFO_LOG("opening dir table\n"); return osl(osl_open_table(&dir_table_desc, &dir_table)); } @@ -185,7 +194,6 @@ static int check_args(void) static int print_complete_help_and_die(void) { const char **line; - select_cmdline_parser_init(&select_conf); printf("%s-%s\n", CMDLINE_PARSER_PACKAGE, CMDLINE_PARSER_VERSION); printf("%s\n\n", gengetopt_args_info_purpose); @@ -208,6 +216,8 @@ static int print_complete_help_and_die(void) printf("Interactive commands:\n"); print_interactive_help(); + cmdline_parser_free(&conf); + select_cmdline_parser_free(&select_conf); exit(EXIT_FAILURE); } @@ -215,16 +225,19 @@ int main(int argc, char **argv) { int ret; struct cmdline_parser_params params = { - .override = 0, + .override = 1, .initialize = 1, .check_required = 0, .check_ambiguity = 0, .print_errors = 0 }; + select_cmdline_parser_init(&select_conf); + cmdline_parser_init(&conf); /* ignore errors and print complete help if --help was given */ cmdline_parser_ext(argc, argv, &conf, ¶ms); if (conf.help_given || conf.detailed_help_given) print_complete_help_and_die(); + cmdline_parser_free(&conf); params.check_required = 1; params.check_ambiguity = 1; params.print_errors = 1; @@ -248,9 +261,12 @@ int main(int argc, char **argv) if (ret < 0) goto out; out: + close_all_tables(); if (ret < 0) { ERROR_LOG("%s\n", adu_strerror(-ret)); return -EXIT_FAILURE; } + cmdline_parser_free(&conf); + select_cmdline_parser_free(&select_conf); return EXIT_SUCCESS; }