+ char *data;
+
+ ret = task_get_notification(t);
+ if (ret < 0)
+ goto out;
+ ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF);
+ if (ret <= 0)
+ goto out;
+ if (!powd) {
+ int32_t rate, ch, format;
+ get_btr_sample_rate(btrn, &rate);
+ get_btr_channels(btrn, &ch);
+ get_btr_sample_format(btrn, &format);
+ ret = oss_init(wn, rate, ch, format);
+ if (ret < 0)
+ goto out;
+ return 0;
+ }
+ btr_merge(btrn, wn->min_iqs);
+ bytes = btr_next_buffer(btrn, &data);
+ frames = bytes / powd->bytes_per_frame;
+ if (!frames) { /* eof and less than a single frame available */
+ ret = -E_WRITE_COMMON_EOF;
+ goto out;
+ }
+ ret = 0;
+ if (!FD_ISSET(powd->fd, &s->wfds))
+ goto out;
+ ret = xwrite(powd->fd, data, frames * powd->bytes_per_frame);
+ if (ret < 0)
+ goto out;
+ btr_consume(btrn, ret);
+ ret = 0;
+out:
+ if (ret < 0)
+ btr_remove_node(&wn->btrn);
+ return ret;
+}
+
+__malloc static void *oss_parse_config_or_die(int argc, char **argv)
+{