Date: Fri, 21 Jun 2013 11:52:26 -0400 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: Fix for tcsh On Fri, Jun 21, 2013 at 11:19:01AM +0200, Paul Schutte wrote: > Good day, > > I just want to know what would be right approach to fixing the compile > error in tcsh. > > I use the source code at ftp://ftp.astron.com/pub/tcsh/tcsh-6.18.01.tar.gz > > I get the following error: > gcc -c -g -O2 -I. -I. -D_PATH_TCSHELL='"/usr/local/bin/tcsh"' sh.proc.c > sh.proc.c: In function 'pchild': > sh.proc.c:155:16: error: storage size of 'w' isn't known > make: *** [sh.proc.o] Error 1 > > Those lines are: > > #ifdef BSDWAIT > union wait w; > #else /* !BSDWAIT */ > int w; > #endif /* !BSDWAIT */ > > > If I just use > > //#ifdef BSDWAIT > // union wait w; > //#else /* !BSDWAIT */ > int w; > //#endif /* !BSDWAIT */ > > it compiles and works (for months now without an issue). > > > My question really is what should the proper "ifdef" be if I want to send > the fix to the tcsh maintainers ? Where is BSDWAIT defined? That's the location of the relevant ifdef. Using "union wait" on any Linux system, glibc ones included, is wrong; glibc just included gcc-specific hacks in the declaration of wait and waitpid to allow them to accept "union wait *" instead of "int *" if necessary. I suspect defined(__linux__) leads to #define BSDWAIT, in which case this should just be fixed. With that said, using "union wait" at all is nonsensical. As the standards require the argument to be int *, any modern BSD should work fine with int *. In case there are historical ones that prototype the functions with union wait *, it might work to simply declare "w" as int and cast it to (void *) when passing it to the functions. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.