ALSA: seq: Minor cleanup of MIDI event parser helpers
authorTakashi Iwai <tiwai@suse.de>
Wed, 1 Aug 2018 12:38:18 +0000 (14:38 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 1 Aug 2018 20:54:35 +0000 (22:54 +0200)
snd_midi_event_encode_byte() can never fail, and it can return rather
true/false.  Change the return type to bool, adjust the argument to
receive a MIDI byte as unsigned char, and adjust the comment
accordingly.  This allows callers to drop error checks, which
simplifies the code.

Meanwhile, snd_midi_event_encode() helper is used only in seq_midi.c,
and it can be better folded into it.  This will reduce the total
amount of lines in the end.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/seq_midi_event.h
sound/core/seq/oss/seq_oss_midi.c
sound/core/seq/seq_midi.c
sound/core/seq/seq_midi_event.c
sound/core/seq/seq_virmidi.c

index e40f43e..2f135bc 100644 (file)
@@ -43,10 +43,8 @@ void snd_midi_event_free(struct snd_midi_event *dev);
 void snd_midi_event_reset_encode(struct snd_midi_event *dev);
 void snd_midi_event_reset_decode(struct snd_midi_event *dev);
 void snd_midi_event_no_status(struct snd_midi_event *dev, int on);
-/* encode from byte stream - return number of written bytes if success */
-long snd_midi_event_encode(struct snd_midi_event *dev, unsigned char *buf, long count,
-                          struct snd_seq_event *ev);
-int snd_midi_event_encode_byte(struct snd_midi_event *dev, int c, struct snd_seq_event *ev);
+bool snd_midi_event_encode_byte(struct snd_midi_event *dev, unsigned char c,
+                               struct snd_seq_event *ev);
 /* decode from event to bytes - return number of written bytes if success */
 long snd_midi_event_decode(struct snd_midi_event *dev, unsigned char *buf, long count,
                           struct snd_seq_event *ev);
index 9debd1b..0d5f8b1 100644 (file)
@@ -637,7 +637,7 @@ snd_seq_oss_midi_putc(struct seq_oss_devinfo *dp, int dev, unsigned char c, stru
 
        if ((mdev = get_mididev(dp, dev)) == NULL)
                return -ENODEV;
-       if (snd_midi_event_encode_byte(mdev->coder, c, ev) > 0) {
+       if (snd_midi_event_encode_byte(mdev->coder, c, ev)) {
                snd_seq_oss_fill_addr(dp, ev, mdev->client, mdev->port);
                snd_use_lock_free(&mdev->use_lock);
                return 0;
index 5dd0ee2..9e0dabd 100644 (file)
@@ -78,7 +78,7 @@ static void snd_midi_input_event(struct snd_rawmidi_substream *substream)
        struct seq_midisynth *msynth;
        struct snd_seq_event ev;
        char buf[16], *pbuf;
-       long res, count;
+       long res;
 
        if (substream == NULL)
                return;
@@ -94,19 +94,15 @@ static void snd_midi_input_event(struct snd_rawmidi_substream *substream)
                if (msynth->parser == NULL)
                        continue;
                pbuf = buf;
-               while (res > 0) {
-                       count = snd_midi_event_encode(msynth->parser, pbuf, res, &ev);
-                       if (count < 0)
-                               break;
-                       pbuf += count;
-                       res -= count;
-                       if (ev.type != SNDRV_SEQ_EVENT_NONE) {
-                               ev.source.port = msynth->seq_port;
-                               ev.dest.client = SNDRV_SEQ_ADDRESS_SUBSCRIBERS;
-                               snd_seq_kernel_client_dispatch(msynth->seq_client, &ev, 1, 0);
-                               /* clear event and reset header */
-                               memset(&ev, 0, sizeof(ev));
-                       }
+               while (res-- > 0) {
+                       if (!snd_midi_event_encode_byte(msynth->parser,
+                                                       *pbuf++, &ev))
+                               continue;
+                       ev.source.port = msynth->seq_port;
+                       ev.dest.client = SNDRV_SEQ_ADDRESS_SUBSCRIBERS;
+                       snd_seq_kernel_client_dispatch(msynth->seq_client, &ev, 1, 0);
+                       /* clear event and reset header */
+                       memset(&ev, 0, sizeof(ev));
                }
        }
 }
index 90bbbdb..53c0dfa 100644 (file)
@@ -214,45 +214,17 @@ int snd_midi_event_resize_buffer(struct snd_midi_event *dev, int bufsize)
 }
 #endif  /*  0  */
 
-/*
- *  read bytes and encode to sequencer event if finished
- *  return the size of encoded bytes
- */
-long snd_midi_event_encode(struct snd_midi_event *dev, unsigned char *buf, long count,
-                          struct snd_seq_event *ev)
-{
-       long result = 0;
-       int rc;
-
-       ev->type = SNDRV_SEQ_EVENT_NONE;
-
-       while (count-- > 0) {
-               rc = snd_midi_event_encode_byte(dev, *buf++, ev);
-               result++;
-               if (rc < 0)
-                       return rc;
-               else if (rc > 0)
-                       return result;
-       }
-
-       return result;
-}
-EXPORT_SYMBOL(snd_midi_event_encode);
-
 /*
  *  read one byte and encode to sequencer event:
- *  return 1 if MIDI bytes are encoded to an event
- *         0 data is not finished
- *         negative for error
+ *  return true if MIDI bytes are encoded to an event
+ *         false data is not finished
  */
-int snd_midi_event_encode_byte(struct snd_midi_event *dev, int c,
-                              struct snd_seq_event *ev)
+bool snd_midi_event_encode_byte(struct snd_midi_event *dev, unsigned char c,
+                               struct snd_seq_event *ev)
 {
-       int rc = 0;
+       bool rc = false;
        unsigned long flags;
 
-       c &= 0xff;
-
        if (c >= MIDI_CMD_COMMON_CLOCK) {
                /* real-time event */
                ev->type = status_event[ST_SPECIAL + c - 0xf0].event;
@@ -293,7 +265,7 @@ int snd_midi_event_encode_byte(struct snd_midi_event *dev, int c,
                        status_event[dev->type].encode(dev, ev);
                if (dev->type >= ST_SPECIAL)
                        dev->type = ST_INVALID;
-               rc = 1;
+               rc = true;
        } else  if (dev->type == ST_SYSEX) {
                if (c == MIDI_CMD_COMMON_SYSEX_END ||
                    dev->read >= dev->bufsize) {
@@ -306,7 +278,7 @@ int snd_midi_event_encode_byte(struct snd_midi_event *dev, int c,
                                dev->read = 0; /* continue to parse */
                        else
                                reset_encode(dev); /* all parsed */
-                       rc = 1;
+                       rc = true;
                }
        }
 
index 03ac5e7..0c84926 100644 (file)
@@ -174,8 +174,8 @@ static void snd_vmidi_output_work(struct work_struct *work)
        while (READ_ONCE(vmidi->trigger)) {
                if (snd_rawmidi_transmit(substream, &input, 1) != 1)
                        break;
-               if (snd_midi_event_encode_byte(vmidi->parser, input,
-                                              &vmidi->event) <= 0)
+               if (!snd_midi_event_encode_byte(vmidi->parser, input,
+                                               &vmidi->event))
                        continue;
                if (vmidi->event.type != SNDRV_SEQ_EVENT_NONE) {
                        ret = snd_seq_kernel_client_dispatch(vmidi->client,