62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.
 | |
|  *
 | |
|  * Permission to use, copy, modify, and distribute this software
 | |
|  * is freely granted, provided that this notice is preserved.
 | |
|  */
 | |
| 
 | |
| #include <errno.h>
 | |
| #include <sys/types.h>
 | |
| #include <string.h>
 | |
| #include <stdlib.h>
 | |
| #include <argz.h>
 | |
| #include <envz.h>
 | |
| 
 | |
| error_t
 | |
| _DEFUN (envz_merge, (envz, envz_len, envz2, envz2_len, override),
 | |
|        char **envz _AND
 | |
|        size_t *envz_len _AND
 | |
|        const char *envz2 _AND
 | |
|        size_t envz2_len _AND
 | |
|        int override)
 | |
| {
 | |
|   char *entry = NULL;
 | |
|   char *name_str = NULL;
 | |
|   char *val_str = NULL;
 | |
|   char *name_iter = NULL;
 | |
|   int retval = 0;
 | |
| 
 | |
|   while((entry = argz_next((char *)envz2, envz2_len, entry)) && !retval)
 | |
|     {
 | |
|       if (!override)
 | |
|         {
 | |
|           name_str = strdup (entry);
 | |
|           name_iter = strchr(name_str, '=');
 | |
|           if(name_iter)
 | |
|             *name_iter = '\0';
 | |
| 
 | |
|           if(!envz_entry(*envz, *envz_len, name_str))
 | |
|             {
 | |
|               retval = argz_add(envz, envz_len, entry);
 | |
|             }
 | |
|           free(name_str);
 | |
|         }
 | |
|       else
 | |
|         {
 | |
|           name_str = strdup (entry);
 | |
|           name_iter = strchr(name_str, '=');
 | |
|           if(name_iter)
 | |
|             {
 | |
|               *name_iter = '\0';
 | |
|               val_str = name_iter + 1;
 | |
|             }
 | |
|           else
 | |
|             {
 | |
|               val_str = NULL;
 | |
|             }
 | |
| 
 | |
|           retval = envz_add(envz, envz_len, name_str, val_str);
 | |
|         }
 | |
|     }
 | |
|   return retval;
 | |
| }
 |