mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	added readv/writev support
This commit is contained in:
		
							parent
							
								
									c808ac0806
								
							
						
					
					
						commit
						fc69109d69
					
				
					 2 changed files with 48 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue