X-Git-Url: http://git.tuebingen.mpg.de/?p=adu.git;a=blobdiff_plain;f=adu.c;h=8ce7317cdd207719f924523a0d7aa5ca32fcf288;hp=47eee7762cbb5b04a4f5d2156d58e279ad415de4;hb=fd37e9fafb8fd103b530ab45f0624fb5d67c0a89;hpb=e6b9f49fcde364aeff6c0d38e66694eeac0573b4 diff --git a/adu.c b/adu.c index 47eee77..8ce7317 100644 --- a/adu.c +++ b/adu.c @@ -1,6 +1,8 @@ #include "adu.h" #include /* readdir() */ #include +#include "format.h" +#include "select.h" #include "gcc-compat.h" #include "cmdline.h" @@ -139,6 +141,15 @@ static struct osl_table_description dir_table_desc = { .column_descriptions = dir_table_cols, }; +/* + * The columns of the per-user tables. + * + * Adu tracks disk usage on a per-user basis. For each user, a user table is + * being created. The rows of the user table have three columns: The directory + * number that may be resolved to the path using the directory table, the + * number of bytes and the number of files in that directory owned by the given + * user. + */ static struct osl_column_description user_table_cols[] = { [UT_DIR_NUM] = { .storage_type = OSL_MAPPED_STORAGE, @@ -457,18 +468,55 @@ static int check_args(void) return 1; } +static int print_complete_help_and_die(void) +{ + const char **line; + select_cmdline_parser_init(&select_conf); + + if (conf.help_given) + line = gengetopt_args_info_help; + else + line = gengetopt_args_info_detailed_help; + + printf("adu command line options:\n"); + printf("=========================\n"); + for (; *line; line++) + printf("%s\n", *line); + if (conf.help_given) + line = select_args_info_help; + else + line = select_args_info_detailed_help; + printf("select options:\n"); + printf("===============\n"); + for (; *line; line++) + printf("%s\n", *line); + printf("interactive commands:\n"); + printf("=====================\n"); + print_interactive_help(); + exit(EXIT_FAILURE); +} + int main(int argc, char **argv) { int ret; struct cmdline_parser_params params = { .override = 0, .initialize = 1, - .check_required = 1, - .check_ambiguity = 1, - .print_errors = 1 + .check_required = 0, + .check_ambiguity = 0, + .print_errors = 0 }; + /* 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(); + params.check_required = 1; + params.check_ambiguity = 1; + params.print_errors = 1; + ret = cmdline_parser_ext(argc, argv, &conf, ¶ms); + if (ret) + exit(EXIT_FAILURE); - cmdline_parser_ext(argc, argv, &conf, ¶ms); /* aborts on errors */ ret = check_args(); if (ret < 0) goto out;