mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Don't stop at first match when updating environment.
This commit is contained in:
		
							
								
								
									
										15
									
								
								environ.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								environ.c
									
									
									
									
									
								
							@@ -182,9 +182,11 @@ void
 | 
				
			|||||||
environ_update(struct options *oo, struct environ *src, struct environ *dst)
 | 
					environ_update(struct options *oo, struct environ *src, struct environ *dst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct environ_entry		*envent;
 | 
						struct environ_entry		*envent;
 | 
				
			||||||
 | 
						struct environ_entry		*envent1;
 | 
				
			||||||
	struct options_entry		*o;
 | 
						struct options_entry		*o;
 | 
				
			||||||
	struct options_array_item	*a;
 | 
						struct options_array_item	*a;
 | 
				
			||||||
	union options_value		*ov;
 | 
						union options_value		*ov;
 | 
				
			||||||
 | 
						int				 found;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	o = options_get(oo, "update-environment");
 | 
						o = options_get(oo, "update-environment");
 | 
				
			||||||
	if (o == NULL)
 | 
						if (o == NULL)
 | 
				
			||||||
@@ -192,14 +194,15 @@ environ_update(struct options *oo, struct environ *src, struct environ *dst)
 | 
				
			|||||||
	a = options_array_first(o);
 | 
						a = options_array_first(o);
 | 
				
			||||||
	while (a != NULL) {
 | 
						while (a != NULL) {
 | 
				
			||||||
		ov = options_array_item_value(a);
 | 
							ov = options_array_item_value(a);
 | 
				
			||||||
		RB_FOREACH(envent, environ, src) {
 | 
							found = 0;
 | 
				
			||||||
			if (fnmatch(ov->string, envent->name, 0) == 0)
 | 
							RB_FOREACH_SAFE(envent, environ, src, envent1) {
 | 
				
			||||||
				break;
 | 
								if (fnmatch(ov->string, envent->name, 0) == 0) {
 | 
				
			||||||
 | 
									environ_set(dst, envent->name, 0, "%s", envent->value);
 | 
				
			||||||
 | 
									found = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (envent == NULL)
 | 
							if (!found)
 | 
				
			||||||
			environ_clear(dst, ov->string);
 | 
								environ_clear(dst, ov->string);
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			environ_set(dst, envent->name, 0, "%s", envent->value);
 | 
					 | 
				
			||||||
		a = options_array_next(a);
 | 
							a = options_array_next(a);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user