Mail Archives: djgpp-workers/2002/01/20/11:00:10
Hello.
Eli Zaretskii wrote:
>
> On Sun, 20 Jan 2002, Richard Dawe wrote:
> > void
> > __crt0_load_environment_file(char *app_name)
> > {
>
> I think this should go into crt1.c, not c1loadef.c. That's because the
> latter could be excluded from a program if the user defines an empty
> __crt0_load_environment_file in her program (e.g., to minimize the
> footprint).
OK.
> > + * Use putenv to delete an environment variable with a name that is
> > + * unlikely to be used.
> > + */
> > + putenv(unconst("DJGPP_sillynametohaveforanenvironmentvariable", char *));
>
> Doesn't it work to say just
>
> putenv("");
>
> ? That would do the trick without putting extraneous variables into the
> environment. Remember: all we need is for putenv to record the value of
> `environ'.
Well, originally I was trying to use putenv in a POSIX compatible way, but
putenv without an assignment is invalid. So now the patch does as you suggest.
Please find below a revised patch, with WC entry. OK to commit?
Thanks, bye, Rich =]
--
Richard Dawe [ http://www.phekda.freeserve.co.uk/richdawe/ ]
Index: src/libc/crt0/crt1.c
===================================================================
RCS file: /cvs/djgpp/djgpp/src/libc/crt0/crt1.c,v
retrieving revision 1.7
diff -p -u -3 -r1.7 crt1.c
--- src/libc/crt0/crt1.c 2001/09/24 21:13:18 1.7
+++ src/libc/crt0/crt1.c 2002/01/20 15:56:52
@@ -1,3 +1,4 @@
+/* Copyright (C) 2002 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1999 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */
@@ -19,6 +20,7 @@
#include <unistd.h>
#include <libc/environ.h>
#include <dos.h> /* for _osmajor/_osminor */
+#include <libc/unconst.h>
/* Global variables */
@@ -150,6 +152,13 @@ setup_environment(void)
cp++; /* skip to next character */
} while (*cp); /* repeat until two NULs */
environ[env_count] = 0;
+
+ /*
+ * Call putenv so that its static counters are computed. If this
+ * is not done, programs that manipulate `environ' directly will crash,
+ * when `DJGPP' is not set in the environment.
+ */
+ putenv(unconst("", char *));
__dos_argv0 = (char *)malloc(strlen(cp + 3)+1);
if (__dos_argv0 == 0)
Index: src/docs/kb/wc204.txi
===================================================================
RCS file: /cvs/djgpp/djgpp/src/docs/kb/wc204.txi,v
retrieving revision 1.105
diff -p -u -3 -r1.105 wc204.txi
--- src/docs/kb/wc204.txi 2001/12/24 02:01:45 1.105
+++ src/docs/kb/wc204.txi 2002/01/20 15:56:56
@@ -703,3 +703,8 @@ modified, so that it can be built agains
@findex strftime AT r{, and z format}
Corrected problem with negative gmt offsets with z format in @code{strftime}.
+
+@vindex DJGPP AT r{, environment variable and memory corruption}
+@cindex startup code, and memory corruption
+The startup code was updated, to prevent memory corruption when
+the @code{DJGPP} environment variable is not set.
- Raw text -