Wrap C function which takes variable lengthed parameters?

Gerhard Häring gh_pythonlist at gmx.de
Fri Dec 14 04:43:00 EST 2001


Le 13/12/01 à 23:57, Just van Rossum écrivit:
> Erik Max Francis wrote:
> > 
> > Courageous wrote:
> > 
> > > Ouch! There's a way to do this, if I recall. Something to do
> > > with generating the varargs and prepping it correctly. Whether
> > > or not you can do this _portably_ is not something that I recall.
> > 
> > Yes.  Varargs can be used to make a va_list and pass that into another
> > function.  Use of varargs and va_list are ANSI compliant.
> 
> But you can't contstruct a va_list and pass it to a _vararg_ function;
> or at least it's not standard, portable, etc. See eg.
> 
>   http://www.eskimo.com/~scs/C-faq/varargs/invvarargs.19920714.html
> 
> Unless I missed something, I think this is what the OP wanted.

*g* I messed with that problem in my pyAda project (for writing Python
extensions in Ada 95). I finally read that section of the C FAQ, too,
but wanted to try nevertheless.

Finally I could come up with a very dirty stack maniupulation hack using
C macros and it worked on gcc/Linux/x86.  I was pretty sure it wouldn't
work on other platforms, and I was correct: as soon as I used doubles,
it went wrong on gcc/Solaris/SPARC.

Gerhard
-- 
mail:   gerhard <at> bigfoot <dot> de       registered Linux user #64239
web:    http://www.cs.fhm.edu/~ifw00065/    OpenPGP public key id 86AB43C0
public key fingerprint: DEC1 1D02 5743 1159 CD20  A4B6 7B22 6575 86AB 43C0
reduce(lambda x,y:x+y,map(lambda x:chr(ord(x)^42),tuple('zS^BED\nX_FOY\x0b')))




More information about the Python-list mailing list