mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	Fix driver conf parsing in snd_config_hook_load_for_all_cards()
Reported by Kevin Goodsell. Summary: load_for_all_cards fails with existing configuration elements In snd_config_hook_load_for_all_cards, the first call to snd_config_search attempts to locate an existing configuration node with the name of the driver. Typically none is found, and everything is good. However, if such a node is located, the next line assumes it is a leaf node with type 'string' and calls snd_config_get_string to fetch the string value. If this fails, the entire hook is abandoned. Because of this, setting something like the following in asoundrc: cards.<driver name>.foo 0 is sufficient to disable the entire card-specific configuration. As a concrete example, I have a HDA-Intel sound card. dmix.conf includes a way to set period_size, period_time, and periods by using configuration elements of the form cards.<driver name>.pcm.dmix.<var>. In ~/.asoundrc I add cards.HDA-Intel.pcm.dmix.period_size 1024 This will cause HDA-Intel.conf to fail to load, and the pcm defined in default.conf will fail to find the device-specific pcm cards.HDA-Intel.pcm.default, and fall back on the default pcm using plughw. By attempting to configure dmix, I have disabled it. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									34d63b449f
								
							
						
					
					
						commit
						96da0c842d
					
				
					 1 changed files with 2 additions and 3 deletions
				
			
		| 
						 | 
					@ -3477,9 +3477,8 @@ int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config,
 | 
				
			||||||
			err = snd_determine_driver(card, &fdriver);
 | 
								err = snd_determine_driver(card, &fdriver);
 | 
				
			||||||
			if (err < 0)
 | 
								if (err < 0)
 | 
				
			||||||
				return err;
 | 
									return err;
 | 
				
			||||||
			if (snd_config_search(root, fdriver, &n) >= 0) {
 | 
								if (snd_config_search(root, fdriver, &n) >= 0 &&
 | 
				
			||||||
				if (snd_config_get_string(n, &driver) < 0)
 | 
								    snd_config_get_string(n, &driver) >= 0) {
 | 
				
			||||||
					goto __err;
 | 
					 | 
				
			||||||
				assert(driver);
 | 
									assert(driver);
 | 
				
			||||||
				while (1) {
 | 
									while (1) {
 | 
				
			||||||
					char *s = strchr(driver, '.');
 | 
										char *s = strchr(driver, '.');
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue