Пример #1
0
char *getenv(const char *name)
{
    int offset;
    char *_findenv();

    return _findenv(name, &offset);
}
Пример #2
0
/*
 * P1003.1-1996 implementation of getenv().
 */
char *getenv(const char *name) {
	int ignore;
	char *temp;

	_environ_lock();
	temp = _findenv(name, &ignore, 0);
	_environ_unlock();

	return temp;
}
Пример #3
0
/*
 * setenv --
 *	Set the value of the environmental variable "name" to be
 *	"value".  If rewrite is set, replace any current value.
 */
int setenv(const char *name, const char *value, int rewrite)
{
	static char **alloced;										/* if allocated space before */
	register char *c;
	int l_value, offset;

#if defined(MINGW32)
	if (! environ_c)
		environ_c = environ;
#endif

	if (*value == '=')											/* no `=' in value */
		++value;
	l_value = strlen(value);
	if ((c = _findenv(name, &offset))) {						/* find if already exists */
		if (!rewrite)
			return (0);
		if (strlen(c) >= l_value) {								/* old larger; copy over */
			while ( (*c++ = *value++) );
			return (0);
		}
	} else {													/* create new slot */
		register int cnt;
		register char **p;

		for (p = *p_environ, cnt = 0; *p; ++p, ++cnt);
		if (alloced == *p_environ) {							/* just increase size */
			p = (char **)realloc((char *)(*p_environ),
			    (size_t)(sizeof(char *) * (cnt + 2)));
			if (!p)
				return (-1);
			alloced = *p_environ = p;
		}
		else {													/* get new space */
																/* copy old entries into it */
			p = malloc((size_t)(sizeof(char *) * (cnt + 2)));
			if (!p)
				return (-1);
			memcpy(p, *p_environ, cnt * sizeof(char *));
			alloced = *p_environ = p;
		}
		(*p_environ)[cnt + 1] = NULL;
		offset = cnt;
	}
	for (c = (char *)name; *c && *c != '='; ++c);				/* no `=' in name */
	if (!((*p_environ)[offset] =								/* name + `=' + value */
		  malloc((size_t)((int)(c - name) + l_value + 2))))
		return (-1);
	for (c = (*p_environ)[offset]; (*c = *name++) && *c != '='; ++c);
	for (*c++ = '='; (*c++ = *value++); );
	return (0);
}
Пример #4
0
/*
 * unsetenv(name) --
 *	Delete environmental variable "name".
 */
void unsetenv(const char *name)
{
	register char **p;
	int offset;

#if defined(MINGW32)
	if (! environ_c)
		environ_c = environ;
#endif

	while (_findenv(name, &offset))	/* if set multiple times */
		for (p = &(*p_environ)[offset];; ++p)
			if (!(*p = *(p + 1)))
				break;
}
Пример #5
0
/*
 * Based on the BSD4.4 call unsetenv().
 */
void _unsetenv(const char *name) {
	int		offset;
	char	**pp;
	
	_environ_lock();

	// unset environment variable
	while(_findenv(name, &offset, 0)) {		/* if set multiple times */
		for(pp = &environ[offset];; ++pp) {
			if(!(*pp = *(pp + 1))) {
				break;
			}
		}
	}

	_environ_unlock();

	return;
}
Пример #6
0
/*
 * getenv --
 *	Returns ptr to value associated with name, if any, else NULL.
 */
char *getenv(const char *name)
{
	int offset;

	return (_findenv(name, &offset));
}