mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	conf: fix snd_config_merge() - merge schema
All child compounds must be traversed and merged. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
		
							parent
							
								
									d6f9e9f590
								
							
						
					
					
						commit
						4522e2008f
					
				
					 1 changed files with 11 additions and 2 deletions
				
			
		
							
								
								
									
										13
									
								
								src/conf.c
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								src/conf.c
									
										
									
									
									
								
							| 
						 | 
					@ -2180,7 +2180,10 @@ int snd_config_add_before(snd_config_t *before, snd_config_t *child)
 | 
				
			||||||
 * \return Zero if successful, otherwise a negative error code.
 | 
					 * \return Zero if successful, otherwise a negative error code.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This function merges all fields from the source compound to the destination compound.
 | 
					 * This function merges all fields from the source compound to the destination compound.
 | 
				
			||||||
 * When the overwrite flag is set, the related subtree in dst is replaced from src.
 | 
					 * When the \a override flag is set, the related subtree in \a dst is replaced from \a src.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * When \a override is not set, the child compounds are traversed and merged. The configuration
 | 
				
			||||||
 | 
					 * elements other than compounds are always substituted (overwritten) from the \a src tree.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * The src compound is deleted.
 | 
					 * The src compound is deleted.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -2207,11 +2210,17 @@ int snd_config_merge(snd_config_t *dst, snd_config_t *src, int override)
 | 
				
			||||||
		snd_config_for_each(di, dnext, dst) {
 | 
							snd_config_for_each(di, dnext, dst) {
 | 
				
			||||||
			snd_config_t *dn = snd_config_iterator_entry(di);
 | 
								snd_config_t *dn = snd_config_iterator_entry(di);
 | 
				
			||||||
			if (strcmp(sn->id, dn->id) == 0) {
 | 
								if (strcmp(sn->id, dn->id) == 0) {
 | 
				
			||||||
				if (override) {
 | 
									if (override ||
 | 
				
			||||||
 | 
									    sn->type != SND_CONFIG_TYPE_COMPOUND ||
 | 
				
			||||||
 | 
									    dn->type != SND_CONFIG_TYPE_COMPOUND) {
 | 
				
			||||||
					snd_config_remove(sn);
 | 
										snd_config_remove(sn);
 | 
				
			||||||
					err = snd_config_substitute(dn, sn);
 | 
										err = snd_config_substitute(dn, sn);
 | 
				
			||||||
					if (err < 0)
 | 
										if (err < 0)
 | 
				
			||||||
						return err;
 | 
											return err;
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										err = snd_config_merge(dn, sn, 0);
 | 
				
			||||||
 | 
										if (err < 0)
 | 
				
			||||||
 | 
											return err;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				found = true;
 | 
									found = true;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue