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 + -
显示快捷键?