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