11 int highest_order = 0;
14 * Reads the configuration from the given file
17 int load_configuration(const char *configfile) {
18 #define OPT(x) else if (strcasecmp(dest_name, x) == 0)
20 /* check if the file exists */
22 if (stat(configfile, &buf) < 0)
26 FILE *handle = fopen(configfile, "r");
28 die("Could not open configfile\n");
29 char dest_name[512], dest_value[512], whole_buffer[1026];
31 while (!feof(handle)) {
33 if ((ret = fgets(whole_buffer, 1024, handle)) == whole_buffer) {
34 /* sscanf implicitly strips whitespace */
35 if (sscanf(whole_buffer, "%s %[^\n]", dest_name, dest_value) < 1)
37 } else if (ret != NULL)
38 die("Could not read line in configuration file\n");
40 /* skip comments and empty lines */
41 if (dest_name[0] == '#' || strlen(dest_name) < 3)
45 wlan_interface = strdup(dest_value);
47 eth_interface = strdup(dest_value);
49 time_format = strdup(dest_value);
51 struct battery *new = calloc(1, sizeof(struct battery));
53 die("Could not allocate memory\n");
54 if (asprintf(&(new->path), "/sys/class/power_supply/BAT%d/uevent", atoi(dest_value)) == -1)
55 die("Could not build battery path\n");
57 /* check if flags were specified for this battery */
58 if (strstr(dest_value, ",") != NULL) {
59 char *flags = strstr(dest_value, ",");
62 new->use_last_full = true;
64 SIMPLEQ_INSERT_TAIL(&batteries, new, batteries);
71 OPT("get_cpu_temperature") {
72 get_cpu_temperature = true;
74 if (strlen(dest_value) > 0)
75 zone = atoi(dest_value);
76 if (asprintf(&thermal_zone, THERMAL_ZONE, zone) == -1)
77 die("Could not build thermal_zone path\n");
79 wmii_normcolors = strdup(dest_value);
81 interval = atoi(dest_value);
84 #if !defined(DZEN) && !defined(XMOBAR)
85 static glob_t globbuf;
87 if (glob(dest_value, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
88 die("glob() failed\n");
89 wmii_path = strdup(globbuf.gl_pathc > 0 ? globbuf.gl_pathv[0] : dest_value);
92 if ((stat(wmii_path, &stbuf)) == -1) {
93 fprintf(stderr, "Warning: wmii_path contains an invalid path\n");
95 wmii_path = strdup(dest_value);
97 if (wmii_path[strlen(wmii_path)-1] != '/')
98 die("wmii_path is not terminated by /\n");
103 char *name = strdup(dest_value);
108 num_run_watches += 2;
109 run_watches = realloc(run_watches, sizeof(char*) * num_run_watches);
110 run_watches[num_run_watches-2] = name;
111 run_watches[num_run_watches-1] = path;
116 for (int c = 0; c < MAX_ORDER; c++)
119 #define SET_ORDER(opt, idx) { if (strcasecmp(token, opt) == 0) order[idx] = highest_order++; }
121 walk = token = dest_value;
122 while (*walk != '\0') {
123 while ((*walk != ',') && (*walk != '\0'))
126 SET_ORDER("run", ORDER_RUN);
127 SET_ORDER("ipv6", ORDER_IPV6);
128 SET_ORDER("wlan", ORDER_WLAN);
129 SET_ORDER("eth", ORDER_ETH);
130 SET_ORDER("battery", ORDER_BATTERY);
131 SET_ORDER("cpu_temperature", ORDER_CPU_TEMPERATURE);
132 SET_ORDER("load", ORDER_LOAD);
133 SET_ORDER("time", ORDER_TIME);
135 while (isspace((int)(*token)))
142 die("Unknown configfile option: %s\n", dest_name);
147 #if !defined(DZEN) && !defined(XMOBAR)
148 if (wmii_path == NULL)