diff options
author | Martin Willi <martin@revosec.ch> | 2012-08-02 12:06:51 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-08-02 12:08:27 +0200 |
commit | 11d6bc3eb0d126e49a6851e79e6e834beef9e3ab (patch) | |
tree | aa5206caef8b43accadb21b2f01c3c55e20ca77e /src/libstrongswan/crypto/crypto_factory.c | |
parent | ecfd714c78e234202ff796f14cbaa85b554b3d4a (diff) | |
download | strongswan-11d6bc3eb0d126e49a6851e79e6e834beef9e3ab.tar.bz2 strongswan-11d6bc3eb0d126e49a6851e79e6e834beef9e3ab.tar.xz |
Move MODP_CUSTOM va_arg fetching out of loop
It seems problematic at least on PPC with gcc 4.3, fixes #208.
Diffstat (limited to 'src/libstrongswan/crypto/crypto_factory.c')
-rw-r--r-- | src/libstrongswan/crypto/crypto_factory.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/libstrongswan/crypto/crypto_factory.c b/src/libstrongswan/crypto/crypto_factory.c index d368ae3a0..58118d97e 100644 --- a/src/libstrongswan/crypto/crypto_factory.c +++ b/src/libstrongswan/crypto/crypto_factory.c @@ -359,29 +359,25 @@ METHOD(crypto_factory_t, create_dh, diffie_hellman_t*, { enumerator_t *enumerator; entry_t *entry; + va_list args; + chunk_t g, p; diffie_hellman_t *diffie_hellman = NULL; + if (group == MODP_CUSTOM) + { + va_start(args, group); + g = va_arg(args, chunk_t); + p = va_arg(args, chunk_t); + va_end(args); + } + this->lock->read_lock(this->lock); enumerator = this->dhs->create_enumerator(this->dhs); while (enumerator->enumerate(enumerator, &entry)) { if (entry->algo == group) { - if (group == MODP_CUSTOM) - { - va_list args; - chunk_t g, p; - - va_start(args, group); - g = va_arg(args, chunk_t); - p = va_arg(args, chunk_t); - va_end(args); - diffie_hellman = entry->create_dh(MODP_CUSTOM, g, p); - } - else - { - diffie_hellman = entry->create_dh(group); - } + diffie_hellman = entry->create_dh(group, g, p); if (diffie_hellman) { break; |