From 65892e28812cc06cceba26c22caca6e6b83960e0 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Mon, 10 Jun 2013 14:40:43 -0700 Subject: [PATCH] Add a new GLWRAP_DEFER_WITH_RETURN macro. This allows for the elimination of some code duplication from our implementation of glXGetPrcAddressARB. The previous implementation duplicated code from glwrap_lookup simply because the GLWRAP_DEFER macro did not provide access to the return value of the wrapped function. With the new macro, (very much like GLWRAP_DEFER but accepting a parameter for a variable to accept the return value), we can eliminate this code duplication. Of course, our symbol-extraction script is now a bit more complicated since it has to find occurrences of DEFER_WITH_RETURN in addition to occurrences of DEFER, and pull out the function name as the second argument rather than the first. --- extract-wrapped-symbols | 11 ++++++++--- glwrap.h | 8 ++++++++ glxwrap.c | 23 +++++++---------------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/extract-wrapped-symbols b/extract-wrapped-symbols index 2b9f76a..8cdd035 100755 --- a/extract-wrapped-symbols +++ b/extract-wrapped-symbols @@ -8,12 +8,16 @@ # libfips, while all other symbols are private. # We have two different patterns for identifying wrapped -# functions. The first is a call to a macro ending in "DEFER" (such as -# DEFER or TIMED_DEFER). In this case, the first argument to the macro -# is the name of the wrapped function. +# functions. The first is a call to one of the DEFER macros +# (GLWRAP_DEFER, TIMED_DEFER, WGLWRAP_DEFER_WITH_RETURN, etc.). In +# this case, the name of the wrapped function appears as the first or +# second argument to the macro, (second for the case of of +# _WITH_RETURN macro). deferred=`grep 'DEFER[ (]*e*gl' $@ | sed -s 's/.*DEFER *(\([^,)]*\).*/\1/'` +deferred_return=`grep 'DEFER_WITH_RETURN *([^,]*, *e*gl' $@ | sed -s 's/.*DEFER_WITH_RETURN *([^,]*, *\([^,)]*\).*/\1/'` + # The second-case is functions for which we either implement or call # the underlying "real" function. In these cases, the code uses the # convention of having a function or a function-pointer with a name of @@ -32,6 +36,7 @@ global: EOF echo "$deferred +$deferred_return $wrapped" | sort | uniq | sed -e 's/\(.*\)/ \1;/' cat <