home *** CD-ROM | disk | FTP | other *** search
- /* RCS -- $Header: /u2/dvadura/src/generic/dmake/src/mac/eold.c,v 1.1 1992/01/24 03:29:47 dvadura Exp $
- -- SYNOPSIS -- Set up and free for environ
- --
- -- DESCRIPTION
- -- This file contains routines that will fill in and dispose of the
- -- list of environmental variables in the environ global variable.
- --
- -- AUTHOR
- -- Dennis Vadura, dvadura@watdragon.uwaterloo.ca
- -- CS DEPT, University of Waterloo, Waterloo, Ont., Canada
- --
- --
- -- COPYRIGHT
- -- Copyright (c) 1990 by Dennis Vadura. All rights reserved.
- --
- -- This program is free software; you can redistribute it and/or
- -- modify it under the terms of the GNU General Public License
- -- (version 1), as published by the Free Software Foundation, and
- -- found in the file 'LICENSE' included with this distribution.
- --
- -- This program is distributed in the hope that it will be useful,
- -- but WITHOUT ANY WARRANTY; without even the implied warrant of
- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- -- GNU General Public License for more details.
- --
- -- You should have received a copy of the GNU General Public License
- -- along with this program; if not, write to the Free Software
- -- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- --
- -- LOG
- -- $Log: eold.c,v $
- * Revision 1.1 1992/01/24 03:29:47 dvadura
- * dmake Version 3.8, Initial revision
- *
- */
-
- #include "extern.h"
-
-
- /*
- * Keep track of any environmental variables that have '='s in their
- * name.
- */
- struct EqualPos {
- char *fpPos;
- struct equalsign *fpNext;
- } /* struct EqualPos */
-
- struct EqualPos *gpEqualList;
-
- /*
- * The character used to replae the equal signs.
- */
- const char gEqualReplace = '_';
-
-
-
- /*
- * Set up the environmental variables in a format used by
- * the environ global variable.
- *
- * environ has already been set to main's envp argument when
- * this suboroutine is called.
- */
- void main_env () {
- char **ppCurEnv;
- char *pCurPos;
- struct equalpos *pNewEqual;
-
- gpEqualList = NULL;
-
- for (ppCurEnv = environ; *ppCurEnv != NULL; ++ppCurEnv) {
- for (pCurPos = *ppCurEnv; *pCurPos != '\0'; ++pCurPos) {
- if (*pCurPos == '=') {
- if ((pNewEqual =
- (struct EqualPos *) malloc (sizeof (struct EqualPos))) ==
- NULL) {
- fputs ("Out of Memory", stderr);
- exit (EXIT_FAILURE);
- } /* if */
- pNewEqual->fpPos = pCurPos;
- pNewEqual->fpNext = gpEqualList;
- gpEqualList = pNewEqual;
-
- *pCurPos = gEqualReplace;
- } /* if */
- } /* for */
-
- *pCurPos = '=';
- } /* for */
- } /* void main_env () */
-
-
-
- /*
- * Reset the environmental variables so they look like they did
- * before the main_env() call.
- *
- * environ has already been set to main's envp argument when
- * this suboroutine is called.
- */
- void main_env () {
- char **ppCurEnv;
- char *pCurPos;
- struct equalpos *pNewEqual;
-
- gpEqualList = NULL;
-
- for (ppCurEnv = environ; *ppCurEnv != NULL; ++ppCurEnv) {
- for (pCurPos = *ppCurEnv; *pCurPos != '\0'; ++pCurPos) {
- if (*pCurPos == '=') {
- if ((pNewEqual =
- (struct EqualPos *) malloc (sizeof (struct EqualPos))) ==
- NULL) {
- fputs ("Out of Memory", stderr);
- exit (EXIT_FAILURE);
- } /* if */
- pNewEqual->fpPos = pCurPos;
- pNewEqual->fpNext = gpEqualList;
- gpEqualList = pNewEqual;
-
- *pCurPos = gEqualReplace;
- } /* if */
- } /* for */
-
- *pCurPos = '=';
- } /* for */
- } /* void main_env () */
-