added readv/writev support

This commit is contained in:
Abramo Bagnara 2000-01-31 12:40:05 +00:00
parent c808ac0806
commit fc69109d69
2 changed files with 48 additions and 0 deletions

View file

@ -42,6 +42,8 @@ int snd_pcm_playback_pause(snd_pcm_t *handle, int enable);
ssize_t snd_pcm_transfer_size(snd_pcm_t *handle, int channel);
ssize_t snd_pcm_write(snd_pcm_t *handle, const void *buffer, size_t size);
ssize_t snd_pcm_read(snd_pcm_t *handle, void *buffer, size_t size);
ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count);
ssize_t snd_pcm_readv(snd_pcm_t *pcm, const struct iovec *vector, int count);
int snd_pcm_mmap(snd_pcm_t *handle, int channel, snd_pcm_mmap_control_t **control, void **buffer);
int snd_pcm_munmap(snd_pcm_t *handle, int channel);

View file

@ -448,6 +448,29 @@ ssize_t snd_pcm_write(snd_pcm_t *pcm, const void *buffer, size_t size)
return result;
}
ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count)
{
ssize_t result;
if (!pcm || (!vector && count > 0) || count < 0)
return -EINVAL;
if (pcm->fd[SND_PCM_CHANNEL_PLAYBACK] < 0)
return -EINVAL;
#if 0
result = writev(pcm->fd[SND_PCM_CHANNEL_PLAYBACK], vector, count);
#else
{
snd_v_args_t args;
args.vector = vector;
args.count = count;
result = ioctl(pcm->fd[SND_PCM_CHANNEL_PLAYBACK], SND_IOCTL_WRITEV, &args);
}
#endif
if (result < 0)
return -errno;
return result;
}
ssize_t snd_pcm_read(snd_pcm_t *pcm, void *buffer, size_t size)
{
ssize_t result;
@ -462,6 +485,29 @@ ssize_t snd_pcm_read(snd_pcm_t *pcm, void *buffer, size_t size)
return result;
}
ssize_t snd_pcm_readv(snd_pcm_t *pcm, const struct iovec *vector, int count)
{
ssize_t result;
if (!pcm || (!vector && count > 0) || count < 0)
return -EINVAL;
if (pcm->fd[SND_PCM_CHANNEL_CAPTURE] < 0)
return -EINVAL;
#if 0
result = readv(pcm->fd[SND_PCM_CHANNEL_CAPTURE], vector, count);
#else
{
snd_v_args_t args;
args.vector = vector;
args.count = count;
result = ioctl(pcm->fd[SND_PCM_CHANNEL_CAPTURE], SND_IOCTL_READV, &args);
}
#endif
if (result < 0)
return -errno;
return result;
}
int snd_pcm_mmap(snd_pcm_t *pcm, int channel, snd_pcm_mmap_control_t **control, void **buffer)
{
snd_pcm_channel_info_t info;