On 6/26/08, Tomáš Smetana <[EMAIL PROTECTED]> wrote:
> Hello,
> when trying the new version I encountered a problem with linking on my
> desktop (Fedora 8, i386, gcc 4.1.2):
>
> + cc -O -L. -L/home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib -o
> ksh pmain.o libshell.a
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libdll.a -ldl
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libast.a
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libcmd.a
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libast.a
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libast.a -lm
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libast.a
>
> /home/tsmetana/upstream/ksh-2008-06-24/arch/linux.i386/lib/libast.a(getenv.o):
> In function `_ast_getenv':
> getenv.c:(.text+0x0): multiple definition of `_ast_getenv'
> libshell.a(name.o):name.c:(.text+0xf7e): first defined here
> collect2: ld returned 1 exit status
> mamake [cmd/ksh93]: *** exit code 1 making ksh
>
> I think the problem is the misplaced #undef getenv in getenv.c, so here's my
> proposed fix:
[snip]
Attached (as"ast_ksh_20080624_getenv_link_fix.diff.txt") is a
prototype patch which should fix the problem (it works on Solaris
11/SPARC+x86).
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [EMAIL PROTECTED]
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 7950090
(;O/ \/ \O;)
diff -r -u src_original/cmd/ksh93/sh/init.c src/cmd/ksh93/sh/init.c
--- src_original/cmd/ksh93/sh/init.c 2008-06-25 13:41:52.000000000 -0500
+++ src/cmd/ksh93/sh/init.c 2008-06-26 08:18:45.373909800 -0500
@@ -46,6 +46,9 @@
#include "lexstates.h"
#include "version.h"
+char *sh_getenv(const char *name);
+char* sh_setenviron(const char *name);
+
#if SHOPT_MULTIBYTE
char e_version[] = "\n@(#)$Id: Version M "SH_RELEASE" $\0\n";
#else
@@ -1158,8 +1161,8 @@
shp->bltindata.shexit = sh_exit;
shp->bltindata.shbltin = sh_addbuiltin;
#if _AST_VERSION >= 20080617L
- shp->bltindata.shgetenv = getenv;
- shp->bltindata.shsetenv = setenviron;
+ shp->bltindata.shgetenv = sh_getenv;
+ shp->bltindata.shsetenv = sh_setenviron;
astintercept(&shp->bltindata,1);
#endif
#if 0
diff -r -u src_original/cmd/ksh93/sh/name.c src/cmd/ksh93/sh/name.c
--- src_original/cmd/ksh93/sh/name.c 2008-06-20 12:55:53.000000000 -0500
+++ src/cmd/ksh93/sh/name.c 2008-06-26 07:28:30.725424000 -0500
@@ -2532,7 +2532,7 @@
/*
* This version of getenv uses the hash storage to access environment values
*/
-char *getenv(const char *name)
+char *sh_getenv(const char *name)
/*@
assume name!=0;
@*/
@@ -2568,7 +2568,7 @@
/*
* Override libast setenv()
*/
-char* setenviron(const char *name)
+char* sh_setenviron(const char *name)
{
register Namval_t *np;
if(name)
_______________________________________________
ast-developers mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-developers