mixer.c: Fix doxygen \file description.
[paraslash.git] / audioc.c
index ed39ce6efa942e58773d891e2ffb28acc39eecf3..af67063367044b675877173a1ed351bdd28f2dd1 100644 (file)
--- a/audioc.c
+++ b/audioc.c
@@ -1,8 +1,4 @@
-/*
- * Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
 
 /** \file audioc.c The client program used to connect to para_audiod. */
 
@@ -21,6 +17,7 @@
 
 #include "para.h"
 #include "error.h"
+#include "lsu.h"
 #include "net.h"
 #include "string.h"
 #include "fd.h"
@@ -99,9 +96,15 @@ I9E_DUMMY_COMPLETER(tasks);
 I9E_DUMMY_COMPLETER(term);
 
 static void help_completer(struct i9e_completion_info *ci,
-               struct i9e_completion_result *result)
+               struct i9e_completion_result *cr)
 {
-       result->matches = i9e_complete_commands(ci->word, audiod_completers);
+       char *opts[] = {LSG_AUDIOD_CMD_HELP_OPTS, NULL};
+
+       if (ci->word[0] == '-') {
+               i9e_complete_option(opts, ci, cr);
+               return;
+       }
+       cr->matches = i9e_complete_commands(ci->word, audiod_completers);
 }
 
 static void version_completer(struct i9e_completion_info *ci,
@@ -288,20 +291,6 @@ __noreturn static void print_completions(void)
 
 #endif /* HAVE_READLINE */
 
-static char *configfile_exists(void)
-{
-       char *config_file;
-       struct stat statbuf;
-       char *home = para_homedir();
-
-       config_file = make_message("%s/.paraslash/audioc.conf", home);
-       free(home);
-       if (!stat(config_file, &statbuf))
-               return config_file;
-       free(config_file);
-       return NULL;
-}
-
 static void handle_help_flag(void)
 {
        char *help;
@@ -335,54 +324,21 @@ static void handle_help_flag(void)
  */
 int main(int argc, char *argv[])
 {
-       const struct lls_command *cmd = CMD_PTR;
        int ret, fd;
-       char *cf = NULL, *buf, *args, *errctx = NULL;
+       char *buf, *args, *errctx = NULL;
        size_t bufsize;
-       struct lls_parse_result *lpr1, *lpr2, *lpr3;
        unsigned num_inputs;
 
-       ret = lls(lls_parse(argc, argv, cmd, &lpr1, &errctx));
+       ret = lls(lls_parse(argc, argv, CMD_PTR, &lpr, &errctx));
        if (ret < 0)
                goto fail;
-       lpr = lpr1;
-       loglevel = OPT_UINT32_VAL(LOGLEVEL);
        version_handle_flag("audioc", OPT_GIVEN(VERSION));
        handle_help_flag();
-       cf = configfile_exists();
-       if (cf) {
-               void *map;
-               size_t sz;
-               int cf_argc;
-               char **cf_argv;
-               ret = mmap_full_file(cf, O_RDONLY, &map, &sz, NULL);
-               if (ret != -E_EMPTY) {
-                       if (ret < 0)
-                               goto out;
-                       ret = lls(lls_convert_config(map, sz, NULL, &cf_argv,
-                               &errctx));
-                       para_munmap(map, sz);
-                       if (ret < 0) {
-                               PARA_ERROR_LOG("syntax error in %s\n", cf);
-                               goto out;
-                       }
-                       cf_argc = ret;
-                       ret = lls(lls_parse(cf_argc, cf_argv, cmd, &lpr2,
-                               &errctx));
-                       lls_free_argv(cf_argv);
-                       if (ret < 0) {
-                               PARA_ERROR_LOG("parse error in %s\n", cf);
-                               goto out;
-                       }
-                       ret = lls(lls_merge(lpr1, lpr2, cmd, &lpr3, &errctx));
-                       lls_free_parse_result(lpr2, cmd);
-                       if (ret < 0)
-                               goto out;
-                       lls_free_parse_result(lpr1, cmd);
-                       lpr = lpr3;
-                       loglevel = OPT_UINT32_VAL(LOGLEVEL);
-               }
-       }
+       ret = lsu_merge_config_file_options(NULL, "audioc.conf",
+               &lpr, CMD_PTR, audioc_suite, 0 /* default flags */);
+       if (ret < 0)
+               goto fail;
+       loglevel = OPT_UINT32_VAL(LOGLEVEL);
        if (OPT_GIVEN(COMPLETE))
                print_completions();
        if (OPT_GIVEN(SOCKET))
@@ -417,8 +373,7 @@ int main(int argc, char *argv[])
        } while (ret >= 0);
        free(buf);
 out:
-       lls_free_parse_result(lpr, cmd);
-       free(cf);
+       lls_free_parse_result(lpr, CMD_PTR);
 fail:
        if (errctx)
                PARA_ERROR_LOG("%s\n", errctx);