return 0;
}
-static int extract_output(snd_seq_t *seq, snd_seq_event_t **ev_res, int ump_allowed)
+/**
+ * \brief extract the first event in output buffer
+ * \param seq sequencer handle
+ * \param ev_res event pointer to be extracted
+ * \return 0 on success otherwise a negative error code
+ *
+ * Extracts the first event in output buffer.
+ * If ev_res is NULL, just remove the event.
+ *
+ * \sa snd_seq_event_output()
+ */
+int snd_seq_extract_output(snd_seq_t *seq, snd_seq_event_t **ev_res)
{
size_t len, olen;
assert(seq);
if (ev_res)
*ev_res = NULL;
- repeat:
if ((olen = seq->obufused) < sizeof(snd_seq_event_t))
return -ENOENT;
len = snd_seq_event_length((snd_seq_event_t *)seq->obuf);
if (olen < len)
return -ENOENT;
- /* skip invalid UMP events */
- if (snd_seq_ev_is_ump((snd_seq_event_t *)seq->obuf) && !ump_allowed) {
- seq->obufused -= len;
- memmove(seq->obuf, seq->obuf + len, seq->obufused);
- goto repeat;
- }
if (ev_res) {
/* extract the event */
if (alloc_tmpbuf(seq, len) < 0)
return 0;
}
-/**
- * \brief extract the first event in output buffer
- * \param seq sequencer handle
- * \param ev_res event pointer to be extracted
- * \return 0 on success otherwise a negative error code
- *
- * Extracts the first event in output buffer.
- * If ev_res is NULL, just remove the event.
- *
- * \sa snd_seq_event_output()
- */
-int snd_seq_extract_output(snd_seq_t *seq, snd_seq_event_t **ev_res)
-{
- return extract_output(seq, ev_res, 0);
-}
-
/*----------------------------------------------------------------*/
/*
{
if (!seq->midi_version)
return -EBADFD;
- return extract_output(seq, (snd_seq_event_t **)ev_res, 1);
+ return snd_seq_extract_output(seq, (snd_seq_event_t **)ev_res);
}
/**