getenv implementation?

Steve Kargl sgk@troutmask.apl.washington.edu
Mon Aug 30 01:41:00 GMT 2004


On Sun, Aug 29, 2004 at 03:41:26PM -0700, Steve Kargl wrote:
> 
> kargl[207] f77 -o aa aa.f   <--- g77
> kargl[208] ./aa
>  name = DISPLAY               
>  value = :0.0                  
> kargl[209] gfc -o aa aa.f   <--- gfortran
> kargl[210] ./aa
>  name = DISPLAY                 
>  value =                    ?????
> kargl[211] cat aa.f
>       program aa
>       character*70 name, value
>       name = 'DISPLAY'
>       call getenv(name,value)
>       print*, 'name = ', name
>       print*, 'value = ', value
>       end
> 

See attach patch.  It trims trailing spaces from NAME
and then uses that with getenv.  Bootstrapped and tested.

2004-08-29  Steven G. Kargl  <kargls@comcast.net>

        * intrinsics/env.c (prefix(getenv)): Trim spaces.

-- 
Steve
-------------- next part --------------
Index: env.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/intrinsics/env.c,v
retrieving revision 1.1
diff -u -b -u -r1.1 env.c
--- env.c	6 Aug 2004 21:47:03 -0000	1.1
+++ env.c	30 Aug 2004 01:37:42 -0000
@@ -44,8 +44,8 @@
 
   char name_nt[name_len+1];
 
-  char *res = NULL;
-  int res_len;
+  char *res = NULL, *s;
+  int res_len, cnt;
 
   if (name == NULL || value == NULL)
     runtime_error ("Both arguments to getenv are mandatory.");
@@ -56,7 +56,11 @@
     memset (value, ' ', value_len); /* Blank the string.  */
 
   memcpy (name_nt, name, name_len);
-  memset (&name_nt[name_len], '\0', 1); 
+  /* Trim trailing spaces.  */
+  s = &name_nt[name_len-1];
+  cnt = 0;
+  while (*s-- == ' ') cnt++;
+  memset (&name_nt[name_len - cnt], '\0', 1); 
 
   res = getenv(name_nt);
 


More information about the Fortran mailing list