int card;
int device;
int fd;
+ int mode;
};
int snd_rawmidi_open(snd_rawmidi_t **handle, int card, int device, int mode)
rmidi->card = card;
rmidi->device = device;
rmidi->fd = fd;
+ rmidi->mode = mode;
*handle = rmidi;
return 0;
}
-int snd_rawmidi_close(snd_rawmidi_t *handle)
+int snd_rawmidi_close(snd_rawmidi_t *rmidi)
{
- snd_rawmidi_t *rmidi;
int res;
- rmidi = handle;
if (!rmidi)
return -EINVAL;
res = close(rmidi->fd) < 0 ? -errno : 0;
return res;
}
-int snd_rawmidi_file_descriptor(snd_rawmidi_t *handle)
+int snd_rawmidi_file_descriptor(snd_rawmidi_t *rmidi)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi)
return -EINVAL;
return rmidi->fd;
}
-int snd_rawmidi_block_mode(snd_rawmidi_t *handle, int enable)
+int snd_rawmidi_block_mode(snd_rawmidi_t *rmidi, int enable)
{
- snd_rawmidi_t *rmidi;
long flags;
- rmidi = handle;
if (!rmidi)
return -EINVAL;
+ if (rmidi->mode == SND_RAWMIDI_OPEN_OUTPUT_APPEND ||
+ rmidi->mode == SND_RAWMIDI_OPEN_DUPLEX_APPEND)
+ return -EINVAL;
if ((flags = fcntl(rmidi->fd, F_GETFL)) < 0)
return -errno;
if (enable)
return 0;
}
-int snd_rawmidi_info(snd_rawmidi_t *handle, snd_rawmidi_info_t * info)
+int snd_rawmidi_info(snd_rawmidi_t *rmidi, snd_rawmidi_info_t * info)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi || !info)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INFO, info) < 0)
return 0;
}
-int snd_rawmidi_output_params(snd_rawmidi_t *handle, snd_rawmidi_output_params_t * params)
+int snd_rawmidi_output_params(snd_rawmidi_t *rmidi, snd_rawmidi_output_params_t * params)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi || !params)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_OUTPUT_PARAMS, params) < 0)
return 0;
}
-int snd_rawmidi_input_params(snd_rawmidi_t *handle, snd_rawmidi_input_params_t * params)
+int snd_rawmidi_input_params(snd_rawmidi_t *rmidi, snd_rawmidi_input_params_t * params)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi || !params)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INPUT_PARAMS, params) < 0)
return 0;
}
-int snd_rawmidi_output_status(snd_rawmidi_t *handle, snd_rawmidi_output_status_t * status)
+int snd_rawmidi_output_status(snd_rawmidi_t *rmidi, snd_rawmidi_output_status_t * status)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi || !status)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_OUTPUT_STATUS, status) < 0)
return 0;
}
-int snd_rawmidi_input_status(snd_rawmidi_t *handle, snd_rawmidi_input_status_t * status)
+int snd_rawmidi_input_status(snd_rawmidi_t *rmidi, snd_rawmidi_input_status_t * status)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi || !status)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_INPUT_STATUS, status) < 0)
return 0;
}
-int snd_rawmidi_drain_output(snd_rawmidi_t *handle)
+int snd_rawmidi_drain_output(snd_rawmidi_t *rmidi)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_DRAIN_OUTPUT) < 0)
return 0;
}
-int snd_rawmidi_flush_output(snd_rawmidi_t *handle)
+int snd_rawmidi_flush_output(snd_rawmidi_t *rmidi)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_FLUSH_OUTPUT) < 0)
return 0;
}
-int snd_rawmidi_flush_input(snd_rawmidi_t *handle)
+int snd_rawmidi_flush_input(snd_rawmidi_t *rmidi)
{
- snd_rawmidi_t *rmidi;
-
- rmidi = handle;
if (!rmidi)
return -EINVAL;
if (ioctl(rmidi->fd, SND_RAWMIDI_IOCTL_FLUSH_INPUT) < 0)
return 0;
}
-ssize_t snd_rawmidi_write(snd_rawmidi_t *handle, const void *buffer, size_t size)
+ssize_t snd_rawmidi_write(snd_rawmidi_t *rmidi, const void *buffer, size_t size)
{
- snd_rawmidi_t *rmidi;
ssize_t result;
- rmidi = handle;
if (!rmidi || (!buffer && size > 0) || size < 0)
return -EINVAL;
result = write(rmidi->fd, buffer, size);
return result;
}
-ssize_t snd_rawmidi_read(snd_rawmidi_t *handle, void *buffer, size_t size)
+ssize_t snd_rawmidi_read(snd_rawmidi_t *rmidi, void *buffer, size_t size)
{
- snd_rawmidi_t *rmidi;
ssize_t result;
- rmidi = handle;
if (!rmidi || (!buffer && size > 0) || size < 0)
return -EINVAL;
result = read(rmidi->fd, buffer, size);