Fixed error case + minor cleanup.
This commit is contained in:
		
							parent
							
								
									4b080b5a28
								
							
						
					
					
						commit
						ef473e636e
					
				| 
						 | 
				
			
			@ -17,8 +17,12 @@
 | 
			
		|||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
/* Don't want to include stdlib.h because it declares putenv to take
 | 
			
		||||
** a const string -- bogus. So we'll just declare malloc directly.
 | 
			
		||||
*/
 | 
			
		||||
extern void *malloc(size_t size);
 | 
			
		||||
 | 
			
		||||
#define Malloc(type,n)	((type *) malloc(sizeof(type)*(n)))
 | 
			
		||||
#define Free(p)		(free((void *)(p)))
 | 
			
		||||
 | 
			
		||||
extern char **environ;
 | 
			
		||||
/*****************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -66,15 +70,14 @@ static int append_envvar(char *str, int old_envsize)
 | 
			
		|||
 | 
			
		||||
int putenv(char *str)
 | 
			
		||||
{
 | 
			
		||||
    char **envp = environ;
 | 
			
		||||
    char **envp;
 | 
			
		||||
    char *equalsign = strchr(str, '=');
 | 
			
		||||
    int namelen;
 | 
			
		||||
    char **newenv, **nenvp;
 | 
			
		||||
 | 
			
		||||
    if( ! equalsign ) return 0; /* No equals sign in str! */
 | 
			
		||||
    namelen = 1 + equalsign - str; /* Count the terminating =. */
 | 
			
		||||
 | 
			
		||||
    for(; *envp; envp++)
 | 
			
		||||
    for(envp = environ; *envp; envp++)
 | 
			
		||||
	if( ! memcmp(*envp, str, namelen) ) {
 | 
			
		||||
	    *envp = str;
 | 
			
		||||
	    return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -83,7 +86,6 @@ int putenv(char *str)
 | 
			
		|||
    /* The env var wasn't defined. Copy the entire env to a new
 | 
			
		||||
    ** block, and add the new definition.
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    return append_envvar(str, envp-environ+1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -95,18 +97,20 @@ int putenv(char *str)
 | 
			
		|||
** beginning with "<var>=" are deleted from environ. unsetenv
 | 
			
		||||
** returns the number of occurrences it found and deleted; if
 | 
			
		||||
** it returns 0, then the variable wasn't in environ to begin with.
 | 
			
		||||
** If name is the null pointer, unsetenv returns immediately.
 | 
			
		||||
** If name is the null pointer, unsetenv returns -1 immediately.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
int unsetenv(const char *name)
 | 
			
		||||
{
 | 
			
		||||
    char **envp, **target;
 | 
			
		||||
    int hits = 0;
 | 
			
		||||
    int hits;
 | 
			
		||||
    int slen;
 | 
			
		||||
 | 
			
		||||
    if( !name ) return;
 | 
			
		||||
    if( !name ) return -1;
 | 
			
		||||
    slen = strlen(name);
 | 
			
		||||
    hits = 0;
 | 
			
		||||
    target = environ;
 | 
			
		||||
 | 
			
		||||
    for( envp=environ; *envp; envp++ )
 | 
			
		||||
	if( !strncmp(*envp, name, slen) && (*envp)[slen] == '=' )
 | 
			
		||||
	    hits++;
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +156,6 @@ int setenv(const char *name, const char *val)
 | 
			
		|||
    
 | 
			
		||||
    for( envp=environ; *envp; envp++ )
 | 
			
		||||
	if( !strncmp(*envp, name, name_len) && (*envp)[name_len] == '=' ) {
 | 
			
		||||
	    char *newval;
 | 
			
		||||
	    char *equal = name_len + *envp;
 | 
			
		||||
 | 
			
		||||
	    if( strlen(equal+1) >= val_len )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue