summaryrefslogtreecommitdiff
path: root/contrib/libf2c/libF77/getenv_.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libf2c/libF77/getenv_.c')
-rw-r--r--contrib/libf2c/libF77/getenv_.c63
1 files changed, 29 insertions, 34 deletions
diff --git a/contrib/libf2c/libF77/getenv_.c b/contrib/libf2c/libF77/getenv_.c
index 4d0b7cf7b04b..b9916e6065e5 100644
--- a/contrib/libf2c/libF77/getenv_.c
+++ b/contrib/libf2c/libF77/getenv_.c
@@ -1,12 +1,4 @@
#include "f2c.h"
-#undef abs
-#ifdef KR_headers
-extern char *F77_aloc(), *getenv();
-#else
-#include <stdlib.h>
-#include <string.h>
-extern char *F77_aloc(ftnlen, char*);
-#endif
/*
* getenv - f77 subroutine to return environment variables
@@ -21,36 +13,39 @@ extern char *F77_aloc(ftnlen, char*);
*/
#ifdef KR_headers
- VOID
-G77_getenv_0 (fname, value, flen, vlen) char *value, *fname; ftnlen vlen, flen;
+VOID G77_getenv_0 (fname, value, flen, vlen) char *value, *fname; ftnlen vlen, flen;
#else
- void
-G77_getenv_0 (char *fname, char *value, ftnlen flen, ftnlen vlen)
+void G77_getenv_0 (char *fname, char *value, ftnlen flen, ftnlen vlen)
#endif
{
- char buf[256], *ep, *fp;
- integer i;
+extern char **environ;
+register char *ep, *fp, *flast;
+register char **env = environ;
- if (flen <= 0)
- goto add_blanks;
- for(i = 0; i < sizeof(buf); i++) {
- if (i == flen || (buf[i] = fname[i]) == ' ') {
- buf[i] = 0;
- ep = getenv(buf);
- goto have_ep;
- }
+flast = fname + flen;
+for(fp = fname ; fp < flast ; ++fp)
+ if(*fp == ' ')
+ {
+ flast = fp;
+ break;
}
- while(i < flen && fname[i] != ' ')
- i++;
- strncpy(fp = F77_aloc(i+1, "getenv_"), fname, (int)i);
- fp[i] = 0;
- ep = getenv(fp);
- free(fp);
- have_ep:
- if (ep)
- while(*ep && vlen-- > 0)
+
+while (ep = *env++)
+ {
+ for(fp = fname; fp<flast ; )
+ if(*fp++ != *ep++)
+ goto endloop;
+
+ if(*ep++ == '=') { /* copy right hand side */
+ while( *ep && --vlen>=0 )
*value++ = *ep++;
- add_blanks:
- while(vlen-- > 0)
- *value++ = ' ';
+
+ goto blank;
+ }
+endloop: ;
}
+
+blank:
+ while( --vlen >= 0 )
+ *value++ = ' ';
+}