source: trunk/libs/newlib/src/newlib/libc/argz/envz_add.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: 1005 bytes
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_add (char **envz,
16       size_t *envz_len,
17       const char *name,
18       const char *value)
19{
20  char *concat = NULL;
21  int name_len = 0;
22  int val_len = 0;
23  int retval = 0;
24
25  envz_remove(envz, envz_len, name);
26
27  if (value)
28    {
29      name_len = strlen(name);
30      val_len = strlen(value);
31      if(!(concat = (char *) malloc(name_len + val_len + 2)))
32        return ENOMEM;
33
34      memcpy(concat, name, name_len);
35      concat[name_len] = '=';
36      memcpy(concat + name_len + 1, value, val_len + 1);
37
38      retval = argz_add(envz, envz_len, concat);
39      free(concat);
40    }
41  else
42    {
43      retval = argz_add(envz, envz_len, name);
44    }
45  return retval;
46}
Note: See TracBrowser for help on using the repository browser.