1 /* This file may have been modified by DJ Delorie (Jan 1991). If so, 2 ** these modifications are Copyright (C) 1991 DJ Delorie. 3 */ 4 5 /*- 6 * Copyright (c) 1988 The Regents of the University of California. 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms are permitted 10 * provided that: (1) source distributions retain this entire copyright 11 * notice and comment, and (2) distributions including binaries display 12 * the following acknowledgement: ``This product includes software 13 * developed by the University of California, Berkeley and its contributors'' 14 * in the documentation or other materials provided with the distribution 15 * and in all advertising materials mentioning features or use of this 16 * software. Neither the name of the University nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 22 */ 23 24 #include <reent.h> 25 #include <stdlib.h> 26 #include <string.h> 27 28 #include "envlock.h" 29 30 /* _putenv_r - reentrant version of putenv that either adds 31 or replaces the environment variable "name" 32 with "value" which is specified by str as "name=value". */ 33 int 34 _DEFUN (_putenv_r, (reent_ptr, str), 35 struct _reent *reent_ptr _AND 36 char *str) 37 { 38 register char *p, *equal; 39 int rval; 40 41 p = _strdup_r (reent_ptr, str); 42 43 if (!p) 44 return 1; 45 46 if (!(equal = strchr (p, '='))) 47 { 48 (void) _free_r (reent_ptr, p); 49 return 1; 50 } 51 52 *equal = '\0'; 53 rval = _setenv_r (reent_ptr, p, equal + 1, 1); 54 (void) _free_r (reent_ptr, p); 55 56 return rval; 57 } 58