aboutsummaryrefslogtreecommitdiff
path: root/libf2c/libF77/getenv_.c
diff options
context:
space:
mode:
Diffstat (limited to 'libf2c/libF77/getenv_.c')
-rw-r--r--libf2c/libF77/getenv_.c64
1 files changed, 32 insertions, 32 deletions
diff --git a/libf2c/libF77/getenv_.c b/libf2c/libF77/getenv_.c
index bc116fe..4d0b7cf 100644
--- a/libf2c/libF77/getenv_.c
+++ b/libf2c/libF77/getenv_.c
@@ -1,8 +1,11 @@
#include "f2c.h"
-
-#ifndef KR_headers
#undef abs
+#ifdef KR_headers
+extern char *F77_aloc(), *getenv();
+#else
#include <stdlib.h>
+#include <string.h>
+extern char *F77_aloc(ftnlen, char*);
#endif
/*
@@ -18,39 +21,36 @@
*/
#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
{
-extern char **environ;
-register char *ep, *fp, *flast;
-register char **env = environ;
-
-flast = fname + flen;
-for(fp = fname ; fp < flast ; ++fp)
- if(*fp == ' ')
- {
- flast = fp;
- break;
+ char buf[256], *ep, *fp;
+ integer i;
+
+ 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;
+ }
}
-
-while (ep = *env++)
- {
- for(fp = fname; fp<flast ; )
- if(*fp++ != *ep++)
- goto endloop;
-
- if(*ep++ == '=') { /* copy right hand side */
- while( *ep && --vlen>=0 )
+ 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)
*value++ = *ep++;
-
- goto blank;
- }
-endloop: ;
- }
-
-blank:
- while( --vlen >= 0 )
+ add_blanks:
+ while(vlen-- > 0)
*value++ = ' ';
-}
+ }