To: vim-dev@vim.org
Subject: Patch 6.0.031
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 6.0.031
Problem:    Nextstep doesn't have setenv() or putenv().  (John Beppu)
Solution:   Move putenv() from pty.c to misc2.c
Files:      src/misc2.c, src/pty.c


*** ../vim60.30/src/misc2.c	Sun Sep 30 10:53:07 2001
--- src/misc2.c	Sun Oct 28 21:49:00 2001
***************
*** 5186,5188 ****
--- 5187,5364 ----
  
  
  #endif /*FEAT_PRINTER*/
+ 
+ /*
+  * The putenv() implementation below comes from the "screen" program.
+  * Included with permission from Juergen Weigert.
+  * See pty.c for the copyright notice.
+  */
+ 
+ /*
+  *  putenv  --	put value into environment
+  *
+  *  Usage:  i = putenv (string)
+  *    int i;
+  *    char  *string;
+  *
+  *  where string is of the form <name>=<value>.
+  *  Putenv returns 0 normally, -1 on error (not enough core for malloc).
+  *
+  *  Putenv may need to add a new name into the environment, or to
+  *  associate a value longer than the current value with a particular
+  *  name.  So, to make life simpler, putenv() copies your entire
+  *  environment into the heap (i.e. malloc()) from the stack
+  *  (i.e. where it resides when your process is initiated) the first
+  *  time you call it.
+  *
+  *  (history removed, not very interesting.  See the "screen" sources.)
+  */
+ 
+ #if !defined(HAVE_SETENV) && !defined(HAVE_PUTENV)
+ 
+ #define EXTRASIZE 5		/* increment to add to env. size */
+ 
+ static int  envsize = -1;	/* current size of environment */
+ #ifndef MACOS
+ extern
+ #endif
+        char **environ;		/* the global which is your env. */
+ 
+ static int  findenv __ARGS((char *name)); /* look for a name in the env. */
+ static int  newenv __ARGS((void));	/* copy env. from stack to heap */
+ static int  moreenv __ARGS((void));	/* incr. size of env. */
+ 
+     int
+ putenv(string)
+     const char *string;
+ {
+     int	    i;
+     char    *p;
+ 
+     if (envsize < 0)
+     {				/* first time putenv called */
+ 	if (newenv() < 0)	/* copy env. to heap */
+ 	    return -1;
+     }
+ 
+     i = findenv((char *)string); /* look for name in environment */
+ 
+     if (i < 0)
+     {				/* name must be added */
+ 	for (i = 0; environ[i]; i++);
+ 	if (i >= (envsize - 1))
+ 	{			/* need new slot */
+ 	    if (moreenv() < 0)
+ 		return -1;
+ 	}
+ 	p = (char *)alloc((unsigned)(strlen(string) + 1));
+ 	if (p == NULL)		/* not enough core */
+ 	    return -1;
+ 	environ[i + 1] = 0;	/* new end of env. */
+     }
+     else
+     {				/* name already in env. */
+ 	p = vim_realloc(environ[i], strlen(string) + 1);
+ 	if (p == NULL)
+ 	    return -1;
+     }
+     sprintf(p, "%s", string);	/* copy into env. */
+     environ[i] = p;
+ 
+     return 0;
+ }
+ 
+     static int
+ findenv(name)
+     char *name;
+ {
+     char    *namechar, *envchar;
+     int	    i, found;
+ 
+     found = 0;
+     for (i = 0; environ[i] && !found; i++)
+     {
+ 	envchar = environ[i];
+ 	namechar = name;
+ 	while (*namechar && *namechar != '=' && (*namechar == *envchar))
+ 	{
+ 	    namechar++;
+ 	    envchar++;
+ 	}
+ 	found = ((*namechar == '\0' || *namechar == '=') && *envchar == '=');
+     }
+     return found ? i - 1 : -1;
+ }
+ 
+     static int
+ newenv()
+ {
+     char    **env, *elem;
+     int	    i, esize;
+ 
+ #ifdef MACOS
+     /* for Mac a new, empty environment is created */
+     i = 0;
+ #else
+     for (i = 0; environ[i]; i++)
+ 	;
+ #endif
+     esize = i + EXTRASIZE + 1;
+     env = (char **)alloc((unsigned)(esize * sizeof (elem)));
+     if (env == NULL)
+ 	return -1;
+ 
+ #ifndef MACOS
+     for (i = 0; environ[i]; i++)
+     {
+ 	elem = (char *)alloc((unsigned)(strlen(environ[i]) + 1));
+ 	if (elem == NULL)
+ 	    return -1;
+ 	env[i] = elem;
+ 	strcpy(elem, environ[i]);
+     }
+ #endif
+ 
+     env[i] = 0;
+     environ = env;
+     envsize = esize;
+     return 0;
+ }
+ 
+     static int
+ moreenv()
+ {
+     int	    esize;
+     char    **env;
+ 
+     esize = envsize + EXTRASIZE;
+     env = (char **)vim_realloc((char *)environ, esize * sizeof (*env));
+     if (env == 0)
+ 	return -1;
+     environ = env;
+     envsize = esize;
+     return 0;
+ }
+ 
+ # ifdef USE_VIMPTY_GETENV
+     char_u *
+ vimpty_getenv(string)
+     const char_u *string;
+ {
+     int i;
+     char_u *p;
+ 
+     if (envsize < 0)
+ 	return NULL;
+ 
+     i = findenv((char *)string);
+ 
+     if (i < 0)
+ 	return NULL;
+ 
+     p = vim_strchr((char_u *)environ[i], '=');
+     return (p + 1);
+ }
+ # endif
+ 
+ #endif /* !defined(HAVE_SETENV) && !defined(HAVE_PUTENV) */
*** ../vim60.30/src/pty.c	Sat Jul 28 12:34:41 2001
--- src/pty.c	Sun Oct 28 21:46:44 2001
***************
*** 9,15 ****
  /*
   * The stuff in this file mostly comes from the "screen" program.
   * Included with permission from Juergen Weigert.
!  * Copied from "pty.c" and "putenv.c".
   *
   * It has been modified to work better with Vim.
   * The parts that are not used in Vim have been deleted.
--- 9,15 ----
  /*
   * The stuff in this file mostly comes from the "screen" program.
   * Included with permission from Juergen Weigert.
!  * Copied from "pty.c".  "putenv.c" was used for putenv() in misc2.c.
   *
   * It has been modified to work better with Vim.
   * The parts that are not used in Vim have been deleted.
***************
*** 423,597 ****
      return -1;
  }
  #endif
- 
- /* putenv.c */
- 
- /*
-  *  putenv  --	put value into environment
-  *
-  *  Usage:  i = putenv (string)
-  *    int i;
-  *    char  *string;
-  *
-  *  where string is of the form <name>=<value>.
-  *  Putenv returns 0 normally, -1 on error (not enough core for malloc).
-  *
-  *  Putenv may need to add a new name into the environment, or to
-  *  associate a value longer than the current value with a particular
-  *  name.  So, to make life simpler, putenv() copies your entire
-  *  environment into the heap (i.e. malloc()) from the stack
-  *  (i.e. where it resides when your process is initiated) the first
-  *  time you call it.
-  *
-  *  (history removed, not very interesting.  See the "screen" sources.)
-  */
- /* RCS_ID("$Id: pty.c,v 1.2 1999/09/19 19:50:51 mool Exp $ FAU") */
- 
- #if !defined(HAVE_SETENV) && !defined(HAVE_PUTENV)
- 
- #define EXTRASIZE 5		/* increment to add to env. size */
- 
- static int  envsize = -1;	/* current size of environment */
- #ifndef MACOS
- extern
- #endif
-        char **environ;		/* the global which is your env. */
- 
- static int  findenv __ARGS((char *name)); /* look for a name in the env. */
- static int  newenv __ARGS((void));	/* copy env. from stack to heap */
- static int  moreenv __ARGS((void));	/* incr. size of env. */
- 
-     int
- putenv(string)
-     const char *string;
- {
-     int	    i;
-     char    *p;
- 
-     if (envsize < 0)
-     {				/* first time putenv called */
- 	if (newenv() < 0)	/* copy env. to heap */
- 	    return -1;
-     }
- 
-     i = findenv((char *)string); /* look for name in environment */
- 
-     if (i < 0)
-     {				/* name must be added */
- 	for (i = 0; environ[i]; i++);
- 	if (i >= (envsize - 1))
- 	{			/* need new slot */
- 	    if (moreenv() < 0)
- 		return -1;
- 	}
- 	p = (char *)alloc((unsigned)(strlen(string) + 1));
- 	if (p == NULL)		/* not enough core */
- 	    return -1;
- 	environ[i + 1] = 0;	/* new end of env. */
-     }
-     else
-     {				/* name already in env. */
- 	p = vim_realloc(environ[i], strlen(string) + 1);
- 	if (p == NULL)
- 	    return -1;
-     }
-     sprintf(p, "%s", string);	/* copy into env. */
-     environ[i] = p;
- 
-     return 0;
- }
- 
-     static int
- findenv(name)
-     char *name;
- {
-     char    *namechar, *envchar;
-     int	    i, found;
- 
-     found = 0;
-     for (i = 0; environ[i] && !found; i++)
-     {
- 	envchar = environ[i];
- 	namechar = name;
- 	while (*namechar && *namechar != '=' && (*namechar == *envchar))
- 	{
- 	    namechar++;
- 	    envchar++;
- 	}
- 	found = ((*namechar == '\0' || *namechar == '=') && *envchar == '=');
-     }
-     return found ? i - 1 : -1;
- }
- 
-     static int
- newenv()
- {
-     char    **env, *elem;
-     int	    i, esize;
- 
- #ifdef MACOS
-     /* for Mac a new, empty environment is created */
-     i = 0;
- #else
-     for (i = 0; environ[i]; i++)
- 	;
- #endif
-     esize = i + EXTRASIZE + 1;
-     env = (char **)alloc((unsigned)(esize * sizeof (elem)));
-     if (env == NULL)
- 	return -1;
- 
- #ifndef MACOS
-     for (i = 0; environ[i]; i++)
-     {
- 	elem = (char *)alloc((unsigned)(strlen(environ[i]) + 1));
- 	if (elem == NULL)
- 	    return -1;
- 	env[i] = elem;
- 	strcpy(elem, environ[i]);
-     }
- #endif
- 
-     env[i] = 0;
-     environ = env;
-     envsize = esize;
-     return 0;
- }
- 
-     static int
- moreenv()
- {
-     int	    esize;
-     char    **env;
- 
-     esize = envsize + EXTRASIZE;
-     env = (char **)vim_realloc((char *)environ, esize * sizeof (*env));
-     if (env == 0)
- 	return -1;
-     environ = env;
-     envsize = esize;
-     return 0;
- }
- 
- # ifdef USE_VIMPTY_GETENV
-     char_u *
- vimpty_getenv(string)
-     const char_u *string;
- {
-     int i;
-     char_u *p;
- 
-     if (envsize < 0)
- 	return NULL;
- 
-     i = findenv((char *)string);
- 
-     if (i < 0)
- 	return NULL;
- 
-     p = vim_strchr((char_u *)environ[i], '=');
-     return (p + 1);
- }
- # endif
- 
- #endif /* !defined(HAVE_SETENV) && !defined(HAVE_PUTENV) */
--- 423,425 ----
*** ../vim60.30/src/version.c	Sun Oct 28 21:23:45 2001
--- src/version.c	Sun Oct 28 21:51:26 2001
***************
*** 608,609 ****
--- 608,611 ----
  {   /* Add new patch number below this line */
+ /**/
+     31,
  /**/

-- 
-rwxr-xr-x  1 root          24 Oct 29  1929 /bin/ed
-rwxr-xr-t  4 root      131720 Jan  1  1970 /usr/ucb/vi
-rwxr-xr-x  1 root  5.89824e37 Oct 22  1990 /usr/bin/emacs

 ///  Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net  \\\
(((   Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim   )))
 \\\  Help me helping AIDS orphans in Uganda - http://iccf-holland.org  ///