📄 putenv.c
字号:
/****************************************************************//* *//* putenv(3) *//* *//* Change or add an environment entry *//* *//****************************************************************//* origination 1987-Oct-7 T. Holm *//****************************************************************//*Path: hoptoad!pacbell!ames!ll-xn!mit-eddie!uw-beaver!ssc-vax!uvicctr!tholmFrom: tholm@uvicctr.UUCP (Terrence W. Holm)Newsgroups: comp.os.minixSubject: putenv(3)Message-ID: <395@uvicctr.UUCP>Date: 5 May 88 06:40:52 GMTOrganization: University of Victoria, Victoria B.C. CanadaEFTH Minix report #2 - May 1988 - putenv(3)This is an implementation of putenv(3) that wewrote for Minix. Please consider this a publicdomain program.*/#include <stdio.h>#define PSIZE sizeof(char *)extern char **environ;char *strchr();char *malloc();/****************************************************************//* *//* int *//* putenv( entry ) *//* *//* The "entry" should follow the form *//* "NAME=VALUE". This routine will search the *//* user environment for "NAME" and replace its *//* value with "VALUE". *//* *//* Note that "entry" is not copied, it is used *//* as the environment entry. This means that it *//* must not be unallocated or otherwise modifed *//* by the caller, unless it is replaced by a *//* subsequent putenv(). *//* *//* If the name is not found in the environment, *//* then a new vector of pointers is allocated, *//* "entry" is put at the end and the global *//* variable "environ" is updated. *//* *//* This function normally returns NULL, but -1 *//* is returned if it can not allocate enough *//* space using malloc(3), or "entry" does not *//* contain a '='. *//* *//****************************************************************/intputenv( entry ) char *entry;{ unsigned length; unsigned size; char *temp; char **p; char **new_environ; /* Find the length of the "NAME=" */ temp = strchr(entry,'='); if ( temp == 0 ) return( -1 ); length = (unsigned) (temp - entry + 1); /* Scan through the environment looking for "NAME=" */ for ( p=environ; *p != 0 ; p++ ) if ( strncmp( entry, *p, length ) == 0 ) { *p = entry; return( 0 ); } /* The name was not found, build a bigger environment */ size = p - environ; new_environ = (char **) malloc( (size+2)*PSIZE ); if ( new_environ == (char **) NULL ) return( -1 ); memcpy ((char *) new_environ, (char *) environ, size*PSIZE ); new_environ[size] = entry; new_environ[size+1] = NULL; environ = new_environ; return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -