aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/crypto/crypto_factory.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-08-02 12:06:51 +0200
committerMartin Willi <martin@revosec.ch>2012-08-02 12:08:27 +0200
commit11d6bc3eb0d126e49a6851e79e6e834beef9e3ab (patch)
treeaa5206caef8b43accadb21b2f01c3c55e20ca77e /src/libstrongswan/crypto/crypto_factory.c
parentecfd714c78e234202ff796f14cbaa85b554b3d4a (diff)
downloadstrongswan-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.c26
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;