- for (i = 0, p = environ; *p; p++, i++)
- ;
- if ((env = (char **)malloc((unsigned)(i + 3) * sizeof (char *))) == 0)
- return;
- if ((tbuf = malloc((unsigned) 1024)) == 0)
- return;
- for (p = environ, q = env; *p; p++, q++) {
- if (strncmp(*p, "TERM=", 5) == 0)
- *q = WWT_TERM;
- else if (strncmp(*p, "TERMCAP=", 8) == 0)
- termcap = q;
- else
- *q = *p;
+ /*
+ * Do this only once if vfork().
+ */
+ if (termcap == 0) {
+ extern char **environ;
+ static char **env;
+ register char **p, **q;
+
+ for (i = 0, p = environ; *p; p++, i++)
+ ;
+ env = (char **)malloc((unsigned)(i + 3) * sizeof (char *));
+ if (env == 0)
+ return;
+ if ((tbuf = malloc((unsigned) 1024)) == 0)
+ return;
+ for (p = environ, q = env; *p; p++, q++) {
+ if (strncmp(*p, "TERM=", 5) == 0)
+ *q = WWT_TERM;
+ else if (strncmp(*p, "TERMCAP=", 8) == 0)
+ termcap = q;
+ else
+ *q = *p;
+ }
+ if (termcap == 0)
+ termcap = q++;
+ *q = 0;
+ environ = env;