source: trunk/libs/newlib/src/newlib/libc/argz/envz_merge.c @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 1.4 KB
Line 
1/* Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.
2 *
3 * Permission to use, copy, modify, and distribute this software
4 * is freely granted, provided that this notice is preserved.
5 */
6
7#include <errno.h>
8#include <sys/types.h>
9#include <string.h>
10#include <stdlib.h>
11#include <argz.h>
12#include <envz.h>
13
14error_t
15envz_merge (char **envz,
16       size_t *envz_len,
17       const char *envz2,
18       size_t envz2_len,
19       int override)
20{
21  char *entry = NULL;
22  char *name_str = NULL;
23  char *val_str = NULL;
24  char *name_iter = NULL;
25  int retval = 0;
26
27  while((entry = argz_next((char *)envz2, envz2_len, entry)) && !retval)
28    {
29      if (!override)
30        {
31          name_str = strdup (entry);
32          name_iter = strchr(name_str, '=');
33          if(name_iter)
34            *name_iter = '\0';
35
36          if(!envz_entry(*envz, *envz_len, name_str))
37            {
38              retval = argz_add(envz, envz_len, entry);
39            }
40          free(name_str);
41        }
42      else
43        {
44          name_str = strdup (entry);
45          name_iter = strchr(name_str, '=');
46          if(name_iter)
47            {
48              *name_iter = '\0';
49              val_str = name_iter + 1;
50            }
51          else
52            {
53              val_str = NULL;
54            }
55
56          retval = envz_add(envz, envz_len, name_str, val_str);
57          free(name_str);
58        }
59    }
60  return retval;
61}
Note: See TracBrowser for help on using the repository browser.