+static int jack_parse_state(
+ const char *filename,
+ unsigned line,
+ const char *section,
+ const char *lvalue,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ pa_alsa_path *p = userdata;
+ pa_alsa_jack *j;
+ pa_port_available_t pa;
+
+ if (!(j = jack_get(p, section))) {
+ pa_log("[%s:%u] state makes no sense in '%s'", filename, line, section);
+ return -1;
+ }
+
+ if (!strcmp(rvalue,"yes"))
+ pa = PA_PORT_AVAILABLE_YES;
+ else if (!strcmp(rvalue,"no"))
+ pa = PA_PORT_AVAILABLE_NO;
+ else if (!strcmp(rvalue,"unknown"))
+ pa = PA_PORT_AVAILABLE_UNKNOWN;
+ else {
+ pa_log("[%s:%u] state must be 'yes','no' or 'unknown' in '%s'", filename, line, section);
+ return -1;
+ }
+
+ if (!strcmp(lvalue, "state.unplugged"))
+ j->state_unplugged = pa;
+ else {
+ j->state_plugged = pa;
+ pa_assert(!strcmp(lvalue, "state.plugged"));
+ }
+
+ return 0;
+}
+