diff options
Diffstat (limited to 'dmake/mac/eold.c')
-rw-r--r-- | dmake/mac/eold.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/dmake/mac/eold.c b/dmake/mac/eold.c new file mode 100644 index 000000000000..5c389c5851db --- /dev/null +++ b/dmake/mac/eold.c @@ -0,0 +1,119 @@ +/* RCS $Id: eold.c,v 1.1.1.1 2000-09-22 15:33:27 hr 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@dmake.wticorp.com +-- +-- +-- WWW +-- http://dmake.wticorp.com/ +-- +-- COPYRIGHT +-- Copyright (c) 1996,1997 by WTI Corp. All rights reserved. +-- +-- This program is NOT free software; you can redistribute it and/or +-- modify it under the terms of the Software License Agreement Provided +-- in the file <distribution-root>/readme/license.txt. +-- +-- LOG +-- Use cvs log to obtain detailed change logs. +*/ + +#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 () */ |