Paul Gilmartin wrote:

> On Mon, 12 Jan 2009 22:31:50 -0800, Henry Willard wrote:
> >
> >"memcpy( &ap, &xp, sizeof( va_list ) );" is not legal C. Either use the
> >c99 va_copy ("va_copy(ap,xp)") created for this purpose or define
> >_VARARG_EXT before including stdarg.h. Up until c99 there was no defined
> >way to do what you were trying to do although your method as well as
> >direct assignment worked on many but not all systems.
> >
> Thanks for educating me.  Hmmm...
>
> #define _VARARG_EXT_
>
> leads to:
>
> Trying vsnprintf();
> CEE3204S The system detected a protection exception (System Completion 
> Code=0C4).
>          From entry point f2 at compile unit offset +000001A4 at entry offset 
> +000001A4 at address 448CCADC.
> [1] + Done(139) gmake varg && ./varg
>   67109204      Segmentation violation  ./varg
>
> ... a step backward.  If vsnprintf() is incompatible with _VARARG_EXT_,
> it would be a courtesy to the programmer to manifest this at compile
> time, possibly by using char** instead of va_list to expose the
> incompatibility.

vsnprintf() is incompatible with C89. Although it has shown up in many 
compilers it was officially introduced to C in C99. You are trying to use two 
features of the C
language that are defined only in C99.

>
>
> I see that va_copy() is defined as:
>
>       #define va_copy(dest, src) ((dest) = (src))
>
> ... simple enough.  But our systems programmer hasn't configured
> the c99 environment.

Then I think you have a complaint with your systems programmer if you want to 
use C99 features.

>
>
> If I undefine and redefine va_start, adding a call to va_arg at
> the end, it works OK.  But my real goal is to get it working in
> enhanced ASCII mode.  And that fails with:
>
> c89 -I.. -D_ALL_SOURCE   -Wa,"ASA,RENT" -Wl,xplink,EDIT=NO -Wc,dll,ascii   -o 
> varg ../source/varg.c /usr/lib/Xaw.x /usr/lib/SM.x /usr/lib/ICE.x 
> /usr/lib/X11.x -lcurses
> -sh 0 + ./varg
> -sh 0 + 2<& 1
> -sh 0 + iconv -f ISO8859-1 -t IBM-1047
> CEE3204S The system detected a protection exception (System Completion 
> Code=0C4).
>          From entry point f2 at compile unit offset +00000060 at entry offset 
> +00000060 at address 448F0190.
> Format: " %s -- %s "

Your program using either C99 va_copy or _VARARG_EXT and your technically 
illegal memcpy technique works fine for me in enhanced ASCII mode if I tell the 
compiler to use
C99 rules.

>
>
> Thanks,
> gil
>

h

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to