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