Improve doxygen description of mood.c.
[paraslash.git] / afh.c
diff --git a/afh.c b/afh.c
index f02b47b10404ebd2424f78b922521f6261b86ba6..f3c25a261ea5cc9c3b49398c850dba00e82afd35 100644 (file)
--- a/afh.c
+++ b/afh.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008-2013 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2008 Andre Noll <maan@tuebingen.mpg.de>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -15,6 +15,7 @@
 #include "afh.h"
 #include "error.h"
 #include "version.h"
+#include "ggo.h"
 
 static struct afh_args_info conf;
 INIT_AFH_ERRLISTS;
@@ -56,6 +57,17 @@ static void print_chunk_table(struct afh_info *afhi)
        }
 }
 
+__noreturn static void print_help_and_die(void)
+{
+       struct ggo_help h = DEFINE_GGO_HELP(afh);
+       int d = conf.detailed_help_given;
+       unsigned flags = d? GPH_STANDARD_FLAGS_DETAILED : GPH_STANDARD_FLAGS;
+
+       ggo_print_help(&h, flags);
+       printf("supported audio formats: %s\n", AUDIO_FORMAT_HANDLERS);
+       exit(EXIT_SUCCESS);
+}
+
 /**
  * The main function of para_afh.
  *
@@ -74,10 +86,12 @@ int main(int argc, char **argv)
        afh_cmdline_parser(argc, argv, &conf);
        loglevel = get_loglevel_by_name(conf.loglevel_arg);
        version_handle_flag("afh", conf.version_given);
+       if (conf.help_given || conf.detailed_help_given)
+               print_help_and_die();
+       afh_init();
        ret = -E_AFH_SYNTAX;
        if (conf.inputs_num == 0)
                goto out;
-       afh_init();
        for (i = 0; i < conf.inputs_num; i++) {
                int ret2;
                ret = mmap_full_file(conf.inputs[i], O_RDONLY, &audio_file_data,
@@ -88,16 +102,16 @@ int main(int argc, char **argv)
                }
                ret = compute_afhi(conf.inputs[i], audio_file_data, audio_file_size,
                        fd, &afhi);
-               if (ret < 0)
-                       goto out;
-
-               audio_format_num = ret;
-               printf("File %d: %s\n", i + 1, conf.inputs[i]);
-               print_info(audio_format_num, &afhi);
-               if (conf.chunk_table_given)
-                       print_chunk_table(&afhi);
-               printf("\n");
-               clear_afhi(&afhi);
+               if (ret >= 0) {
+                       audio_format_num = ret;
+                       printf("File %d: %s\n", i + 1, conf.inputs[i]);
+                       print_info(audio_format_num, &afhi);
+                       if (conf.chunk_table_given)
+                               print_chunk_table(&afhi);
+                       printf("\n");
+                       clear_afhi(&afhi);
+               }
+               close(fd);
                ret2 = para_munmap(audio_file_data, audio_file_size);
                if (ret2 < 0 && ret >= 0)
                        ret = ret2;