4 This file is part of polypaudio.
6 polypaudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published
8 by the Free Software Foundation; either version 2 of the License,
9 or (at your option) any later version.
11 polypaudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with polypaudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
38 #define ENV_CONFIG_FILE "POLYP_CONFIG"
40 char* config_file(void) {
43 if ((p
= getenv(ENV_CONFIG_FILE
)))
46 if ((h
= getenv("HOME"))) {
48 p
= pa_sprintf_malloc("%s/.polypaudio", h
);
49 if (stat(p
, &st
) >= 0)
55 return pa_xstrdup(DEFAULT_CONFIG_FILE
);
58 void pa_cmdline_help(const char *argv0
) {
60 char *cfg
= config_file();
62 if ((e
= strrchr(argv0
, '/')))
67 printf("%s [options]\n"
68 " -r Try to set high process priority (only available as root)\n"
69 " -R Don't drop root if SETUID root\n"
70 " -L MODULE Load the specified plugin module with the specified argument\n"
71 " -F FILE Run the specified script\n"
72 " -C Open a command line on the running TTY\n"
73 " -n Don't load configuration file (%s)\n"
74 " -D Daemonize after loading the modules\n"
75 " -d Disallow module loading after startup\n"
76 " -f Dont quit when the startup fails\n"
77 " -v Verbose startup\n"
78 " -X SECS Terminate the daemon after the last client quit and this time passed\n"
79 " -h Show this help\n"
80 " -l TARGET Specify the log target (syslog, stderr, auto)\n"
81 " -p DIR Append a directory to the search path for dynamic modules\n"
82 " -V Show version\n", e
, cfg
);
87 struct pa_cmdline
* pa_cmdline_parse(int argc
, char * const argv
[]) {
89 struct pa_cmdline
*cmdline
= NULL
;
90 struct pa_strbuf
*buf
= NULL
;
91 int no_default_config_file
= 0;
94 cmdline
= pa_xmalloc(sizeof(struct pa_cmdline
));
98 cmdline
->high_priority
=
101 cmdline
->disallow_module_loading
= 0;
102 cmdline
->fail
= cmdline
->auto_log_target
= 1;
103 cmdline
->quit_after_last_client_time
= -1;
104 cmdline
->log_target
= -1;
105 cmdline
->dl_search_path
= NULL
;
107 buf
= pa_strbuf_new();
110 while ((c
= getopt(argc
, argv
, "L:F:CDhfvrRVndX:l:p:")) != -1) {
113 pa_strbuf_printf(buf
, "load %s\n", optarg
);
116 pa_strbuf_printf(buf
, ".include %s\n", optarg
);
119 pa_strbuf_puts(buf
, "load module-cli\n");
122 cmdline
->daemonize
= 1;
131 cmdline
->verbose
= 1;
134 cmdline
->high_priority
= 1;
137 cmdline
->stay_root
= 1;
140 cmdline
->version
= 1;
143 no_default_config_file
= 1;
146 cmdline
->disallow_module_loading
= 1;
149 cmdline
->quit_after_last_client_time
= atoi(optarg
);
152 if (cmdline
->dl_search_path
)
153 pa_xfree(cmdline
->dl_search_path
);
154 cmdline
->dl_search_path
= pa_xstrdup(optarg
);
157 if (!strcmp(optarg
, "syslog")) {
158 cmdline
->auto_log_target
= 0;
159 cmdline
->log_target
= PA_LOG_SYSLOG
;
160 } else if (!strcmp(optarg
, "stderr")) {
161 cmdline
->auto_log_target
= 0;
162 cmdline
->log_target
= PA_LOG_STDERR
;
163 } else if (!strcmp(optarg
, "auto"))
164 cmdline
->auto_log_target
= 1;
166 pa_log(__FILE__
": Invalid log target: use either 'syslog', 'stderr' or 'auto'.\n");
175 if (!no_default_config_file
) {
177 pa_strbuf_printf(buf
, ".include %s\n", cfg
);
181 cmdline
->cli_commands
= pa_strbuf_tostring_free(buf
);
186 pa_cmdline_free(cmdline
);
192 void pa_cmdline_free(struct pa_cmdline
*cmd
) {
194 pa_xfree(cmd
->cli_commands
);
195 pa_xfree(cmd
->dl_search_path
);