putenv.c

来自「minix操作系统最新版本(3.1.1)的源代码」· C语言 代码 · 共 80 行

C
80
字号
/* * (c) copyright 1989 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". *//* $Header: /cvsup/minix/src/lib/other/putenv.c,v 1.1.1.1 2005/04/21 14:56:27 beng Exp $ */#include	<stdlib.h>#include	<string.h>#define	ENTRY_INC	10#define	rounded(x)	(((x / ENTRY_INC) + 1) * ENTRY_INC)extern _CONST char ***_penviron;intputenv(name)_CONST char *name;{	register _CONST char **v = *_penviron;	register char *r;	static int size = 0;	/* When size != 0, it contains the number of entries in the	 * table (including the final NULL pointer). This means that the	 * last non-null entry  is environ[size - 2].	 */	if (!name) return 0;	if (*_penviron == NULL) return 1;	if (r = strchr(name, '=')) {		register _CONST char *p, *q;		*r = '\0';		if (v != NULL) {			while ((p = *v) != NULL) {				q = name;				while (*q && (*q++ == *p++))					/* EMPTY */ ;				if (*q || (*p != '=')) {					v++;				} else {					/* The name was already in the					 * environment.					 */					*r = '=';					*v = name;					return 0;				}			}		}		*r = '=';		v = *_penviron;	}	if (!size) {		register _CONST char **p;		register int i = 0;		if (v)			do {				i++;			} while (*v++);		if (!(v = malloc(rounded(i) * sizeof(char **))))			return 1;		size = i;		p = *_penviron;		*_penviron = v;		while (*v++ = *p++);		/* copy the environment */		v = *_penviron;	} else if (!(size % ENTRY_INC)) {		if (!(v = realloc(*_penviron, rounded(size) * sizeof(char **))))			return 1;		*_penviron = v;	}	v[size - 1] = name;	v[size] = NULL;	size++;	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?