You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

62 lines
2.2 KiB

/*
** setenv.c: ISO C implementation
** Copyright (c) 2003 Michael Schloh von Bennewitz <michael@schloh.com>
** Copyright (c) 2003 Cable & Wireless <http://www.cw.com/de/>
**
** Permission to use, copy, modify, and distribute this software for
** any purpose with or without fee is hereby granted, provided that
** the above copyright notice and this permission notice appear in all
** copies.
**
** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
** SUCH DAMAGE.
**
*/
#ifdef HAVE_CONFIG_H
#include <sys/types.h>
#include "config.h"
#endif
#ifndef HAVE_SETENV
#include <stdlib.h> /* For putenv(3) and malloc(3) */
#include <string.h> /* For strcpy(3) and strcat(3) */
/*
** Implements setenv C library function for platforms not including it
*/
int setenv(const char *kszName, const char *kszValue, int nOverwrite)
{
char *szPair = NULL; /* String we will pass to putenv(3) */
/* Short circuite if overwrite is not enabled on an existing variable */
if (nOverwrite == 0 && getenv(kszName) != 0)
return 0;
/* Allocate space for name, value, equals, and string terminator */
szPair = malloc(strlen(kszName) + strlen(kszValue) + strlen("=") + 1);
if (szPair == NULL) /* Memory error */
return 1; /* Unsuccessful */
/* Copy the incoming variables */
strcpy(szPair, kszName);
strcat(szPair, "=");
strcat(szPair, kszValue);
putenv(szPair); /* Handoff */
return 0; /* Success */
}
#endif /* !HAVE_SETENV */