diff options
Diffstat (limited to 'contrib/libf2c/libF77/getenv_.c')
-rw-r--r-- | contrib/libf2c/libF77/getenv_.c | 63 |
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++ = ' '; +} |