mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	fix error code when controlC0 device has no enough permissions
See alsa bug#3600
This commit is contained in:
		
							parent
							
								
									2ba380fdc4
								
							
						
					
					
						commit
						a2d98ebd42
					
				
					 1 changed files with 20 additions and 11 deletions
				
			
		| 
						 | 
					@ -39,12 +39,7 @@
 | 
				
			||||||
#define SND_FILE_LOAD		ALOAD_DEVICE_DIRECTORY "aloadC%i"
 | 
					#define SND_FILE_LOAD		ALOAD_DEVICE_DIRECTORY "aloadC%i"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					static int snd_card_load1(int card)
 | 
				
			||||||
 * \brief Try to load the driver for a card.
 | 
					 | 
				
			||||||
 * \param card Card number.
 | 
					 | 
				
			||||||
 * \return 1 if driver is present, zero if driver is not present
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
int snd_card_load(int card)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int open_dev;
 | 
						int open_dev;
 | 
				
			||||||
	char control[sizeof(SND_FILE_CONTROL) + 10];
 | 
						char control[sizeof(SND_FILE_CONTROL) + 10];
 | 
				
			||||||
| 
						 | 
					@ -61,9 +56,20 @@ int snd_card_load(int card)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (open_dev >= 0) {
 | 
						if (open_dev >= 0) {
 | 
				
			||||||
		close (open_dev);
 | 
							close (open_dev);
 | 
				
			||||||
		return 1;
 | 
							return 0;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return -errno;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 0;
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \brief Try to load the driver for a card.
 | 
				
			||||||
 | 
					 * \param card Card number.
 | 
				
			||||||
 | 
					 * \return 1 if driver is present, zero if driver is not present
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int snd_card_load(int card)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return !!(snd_card_load1(card) == 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -104,7 +110,7 @@ int snd_card_next(int *rcard)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int snd_card_get_index(const char *string)
 | 
					int snd_card_get_index(const char *string)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int card;
 | 
						int card, err;
 | 
				
			||||||
	snd_ctl_t *handle;
 | 
						snd_ctl_t *handle;
 | 
				
			||||||
	snd_ctl_card_info_t info;
 | 
						snd_ctl_card_info_t info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,13 +122,16 @@ int snd_card_get_index(const char *string)
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		if (card < 0 || card > 31)
 | 
							if (card < 0 || card > 31)
 | 
				
			||||||
			return -EINVAL;
 | 
								return -EINVAL;
 | 
				
			||||||
		if (snd_card_load(card))
 | 
							err = snd_card_load1(card);
 | 
				
			||||||
 | 
							if (err >= 0)
 | 
				
			||||||
			return card;
 | 
								return card;
 | 
				
			||||||
		return -ENODEV;
 | 
							return err;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for (card = 0; card < 32; card++) {
 | 
						for (card = 0; card < 32; card++) {
 | 
				
			||||||
 | 
					#ifdef SUPPORT_ALOAD
 | 
				
			||||||
		if (! snd_card_load(card))
 | 
							if (! snd_card_load(card))
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		if (snd_ctl_hw_open(&handle, NULL, card, 0) < 0)
 | 
							if (snd_ctl_hw_open(&handle, NULL, card, 0) < 0)
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		if (snd_ctl_card_info(handle, &info) < 0) {
 | 
							if (snd_ctl_card_info(handle, &info) < 0) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue