From mboxrd@z Thu Jan 1 00:00:00 1970 From: Latchesar Ionkov To: 9fans@cse.psu.edu Subject: Re: [9fans] calling function with (variable number of) parameters Message-ID: <20010621111712.A2711@gmx.net> References: <20010621142423.D9AFF199EB@mail.cse.psu.edu> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2i In-Reply-To: <20010621142423.D9AFF199EB@mail.cse.psu.edu>; from rog@vitanuova.com on Thu, Jun 21, 2001 at 03:33:15PM +0100 Date: Thu, 21 Jun 2001 11:17:12 -0400 Topicbox-Message-UUID: bec348e0-eac9-11e9-9e20-41e7f4b1d025 Both suggestions are not really alternatives in that case. I am trying to implement already defined interface, I don't have control on the way the called functions are declared and they are definitely reentrant. :(( I can, though, hope that nobody in his mind will wrote a function with more that 15 arguments. Then reserve space for 15 integers in the stack, put as many argument as needed, call the function and remove 15 integers from the stack. Of course I'll check and signall error if somebody is crazy enough to try to use the code with more than 15 arguments. Thanks again, Lucho On Thu, Jun 21, 2001 at 03:33:15PM +0100, rog@vitanuova.com said: > > So save space for n + 1 parameters on the stack; the last won't be used > > by your called function, and you could store the number of parameters in > > it. When you return, pop the last item off the stack, and use that to > > recalculate the frame pointer. > > no actually, parameters are pushed on last first, so the last one > you've pushed (the one you've got access after the return) is the first > parameter to the function (which doesn't expect it). > > i think that probably the only way of getting around the problem is to > change the prototype of the called function so that the first parameter > signifies the number of parameters. > > the only other alternative is if the function is guaranteed to be > non-reentrant (fat chance) in which case you could store the number of > params in a static variable. > > of course, that then makes it incompatible with the original... > > cheers, > rog.