+static void
+load_options(void)
+{
+ static char buf[512];
+ char *s;
+ FILE *f;
+
+ f = fopen("/etc/modules.conf", "r");
+ if (!f)
+ return;
+
+ while ((s = fgets(buf, sizeof(buf), f)) != NULL) {
+ char *c, *cmd, *mod;
+
+ while (isspace(*s))
+ s++;
+
+ c = strchr(s, '#');
+ if (c)
+ *c = 0;
+
+ while (isspace(*s))
+ s++;
+
+ c = s + strlen(s);
+ while (c > s && isspace(c[-1])) {
+ c[-1] = 0;
+ c--;
+ }
+
+ cmd = strsep(&s, " \t");
+ if (!cmd || !*cmd)
+ continue;
+
+ while (isspace(*s))
+ s++;
+
+ mod = strsep(&s, " \t");
+ if (!mod || !*mod)
+ continue;
+
+ if (!strcmp(cmd, "blacklist")) {
+ kvlist_set(&options, mod, "\x01");
+ continue;
+ }
+
+ if (!strcmp(cmd, "options")) {
+ char *prev = kvlist_get(&options, mod);
+ char *val = NULL;
+
+ while (isspace(*s))
+ s++;
+
+ if (!*s)
+ continue;
+
+ if (prev && prev[0] == '\x01')
+ continue;
+
+ if (!prev) {
+ kvlist_set(&options, mod, s);
+ continue;
+ }
+
+ if (asprintf(&val, "%s %s", prev, s) < 0)
+ continue;
+
+ kvlist_set(&options, mod, val);
+ free(val);
+ continue;
+ }
+ }
+}
+