1 #define SUBSYSTEM APPLICATION_EXEC "_conf: "
2 
3 /* Engine specific configuration switches, these must be 7bit ascii chars */
4 static struct c_f c_f_t[] = {
5 	{ "fullhelp", NULL, 0.0, 0, 0, CONFIG_TYPE_BOOLEAN },
6 
7 #if defined(PROG_HAS_RDRAND)
8 	{ "runtime_random_rdrand", NULL, 0.0, 0, 0, CONFIG_TYPE_BOOLEAN },
9 #endif
10 #if defined(HAVE_ARC4RANDOM) || (defined(PROG_HAS_LIBBSD) && defined(HAVE_BSD_STDLIB_H))
11 	{ "runtime_random_arc4", NULL, 0.0, 0, 0, CONFIG_TYPE_BOOLEAN },
12 #endif
13 #if defined(HAVE_RANDOM)
14 	{ "runtime_random_random", NULL, 0.0, 0, 0, CONFIG_TYPE_BOOLEAN },
15 #endif
16 #if defined(HAVE_RAND)
17 	{ "runtime_random_rand", NULL, 0.0, 0, 0, CONFIG_TYPE_BOOLEAN },
18 #endif
19 	{ "runtime_random_file", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
20 #if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && defined(HAVE_SYS_RESOURCE_H)
21 	{ "runtime_priority", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
22 	{ "runtime_stack", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
23 #endif
24 	{ "runtime_daemonize", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
25 
26 	{ "default_charset", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
27 	{ "default_locale", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
28 
29 	{ "dump_usage", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
30 	{ "dump_core", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
31 
32 	{ "cpu_engine", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
33 	{ "cpu_clock", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
34 #if ! defined(PROG_DISABLE_INPUT)
35 	{ "cpu_input", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
36 #endif
37 #if ! defined(PROG_DISABLE_REMOTE)
38 	{ "cpu_remote", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
39 #endif
40 #if ! defined(PROG_DISABLE_AUDIO)
41 	{ "cpu_audio_play", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
42 	{ "cpu_audio_mixer", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
43 #endif
44 	{ "cpu_callback", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
45 #if ! defined(PROG_DISABLE_GUI) && defined(PROG_HAS_X11)
46 	{ "cpu_window_draw", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
47 #endif
48 #if ! defined(PROG_DISABLE_GUI) && ! defined(PROG_DISABLE_MENU)
49 	{ "cpu_window_menu", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
50 #endif
51 
52 	{ "numa_domain", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
53 	{ "numa_policy", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
54 
55 #if ! defined(PROG_DISABLE_REMOTE)
56 	{ "disable_ipv6", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
57 	{ "disable_ipv4", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
58 	{ "enable_ssl", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
59 	{ "ssl_certificate", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
60 	{ "ssl_private_key", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
61 	{ "listen_port", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
62 	{ "recv_timeout_secs", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
63 	{ "recv_timeout_usecs", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
64 	{ "auth_secret", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
65 #endif
66 
67 #if ! defined(PROG_DISABLE_GUI) && defined(PROG_HAS_X11)
68 	{ "display", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
69 	{ "visual", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
70 	{ "bpc", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
71 	{ "refresh_rate", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
72 	{ "refresh_score", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
73 #endif
74 
75 #if ! defined(PROG_DISABLE_GUI)
76 	{ "font_hinting", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
77 #endif
78 
79 #if ! defined(PROG_DISABLE_AUDIO)
80 	{ "audio_subsystem", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
81 	{ "audio_device", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
82 	{ "audio_params", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
83 	{ "audio_latency", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
84 	{ "audio_clipping", NULL, 0.0, 0, 0, CONFIG_TYPE_FLOAT },
85 	{ "audio_resample", NULL, 0.0, 0, 0, CONFIG_TYPE_INTEGER },
86 #endif
87 
88 #if ! defined(PROG_DISABLE_GUI) && defined(PROG_HAS_X11)
89 	{ "window_attributes", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
90 #endif
91 
92 #if ! defined(PROG_DISABLE_INPUT)
93 	{ "input_driver_enable", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
94 
95 	/* Keep the number of these in sync with worker_input.h::DRIVER_MAX_DRIVERS */
96 	{ "input_driver_params_1", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
97 	{ "input_driver_params_2", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
98 	{ "input_driver_params_3", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
99 	{ "input_driver_params_4", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
100 	{ "input_driver_params_5", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
101 	{ "input_driver_params_6", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
102 	{ "input_driver_params_7", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
103 	{ "input_driver_params_8", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
104 	{ "input_driver_params_9", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
105 	{ "input_driver_params_10", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
106 	{ "input_driver_params_11", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
107 	{ "input_driver_params_12", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
108 	{ "input_driver_params_13", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
109 	{ "input_driver_params_14", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
110 	{ "input_driver_params_15", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
111 	{ "input_driver_params_16", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
112 	{ "input_driver_events_1", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
113 	{ "input_driver_events_2", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
114 	{ "input_driver_events_3", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
115 	{ "input_driver_events_4", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
116 	{ "input_driver_events_5", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
117 	{ "input_driver_events_6", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
118 	{ "input_driver_events_7", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
119 	{ "input_driver_events_8", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
120 	{ "input_driver_events_9", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
121 	{ "input_driver_events_10", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
122 	{ "input_driver_events_11", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
123 	{ "input_driver_events_12", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
124 	{ "input_driver_events_13", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
125 	{ "input_driver_events_14", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
126 	{ "input_driver_events_15", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
127 	{ "input_driver_events_16", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
128 #endif
129 
130 	{ "popup_messages", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
131 	{ "info_stdout", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
132 	{ "info_stderr", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
133 	{ "info_syslog", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
134 	{ "info_file", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
135 	{ "warn_stdout", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
136 	{ "warn_stderr", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
137 	{ "warn_syslog", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
138 	{ "warn_file", NULL, 0.0, 0, 0, CONFIG_TYPE_STRING },
139 	{ "warn_fatal", NULL, 0.0, CONFIG_TYPE_BOOLEAN_NO, 0, CONFIG_TYPE_BOOLEAN },
140 
141 	{ NULL, NULL, 0.0, 0, 0, 0 }
142 };
143 
144 static const char *c_d_t[] = {							/* Search directories for configuration files */
145 	DIR_PLACE_CONFS_1, DIR_PLACE_CONFS_2, DIR_PLACE_CONFS_3,		/*  $ is considered as env var, */
146 	DIR_PLACE_CONFS_4, DIR_PLACE_CONFS_5, DIR_PLACE_CONFS_6,		/*  ~ is considered as home dir, */
147 	DIR_PLACE_CONFS_7,							/*  @ is considered as installation prefix */
148 
149 	NULL
150 };
151 
152 struct c_b {
153 	char *s;								/* Boolean tag name */
154 
155 	size_t t;								/* Boolean tag name size in bytes */
156 
157 	int c;									/* Boolean tag value */
158 };
159 
160 static const struct c_b c_b_t[] = {
161 	{ "true", 4, CONFIG_TYPE_BOOLEAN_YES },
162 	{ "false", 5, CONFIG_TYPE_BOOLEAN_NO },
163 	{ "yes", 3, CONFIG_TYPE_BOOLEAN_YES },
164 	{ "no", 2, CONFIG_TYPE_BOOLEAN_NO },
165 	{ "y", 1, CONFIG_TYPE_BOOLEAN_YES },
166 	{ "n", 1, CONFIG_TYPE_BOOLEAN_NO },
167 	{ "1", 1, CONFIG_TYPE_BOOLEAN_YES },
168 	{ "0", 1, CONFIG_TYPE_BOOLEAN_NO },
169 
170 	{ NULL, 0, 0 }
171 };
172 
173 static int conf_read_real(char *);
174 static char *conf_read_it(char *);
175 static int conf_boolean(char *, int *);
176 static int conf_integer(char *, int *);
177 static int conf_float(char *, double *);
178 static int conf_string(char *, char *);
179 
180 static void conf_update_boolean_op(struct c_f *, char *, char *);
181 static void conf_update_integer_op(struct c_f *, char *, char *);
182 static void conf_update_float_op(struct c_f *, char *, char *);
183 static void conf_update_string_op(struct c_f *, char *, char *);
184 
185 /* conf_app.c */
186 struct c_f *conf_ext_get_cnf(void);
187