Move MODP_CUSTOM va_arg fetching out of loop

It seems problematic at least on PPC with gcc 4.3, fixes #208.
This commit is contained in:
Martin Willi
2012-08-02 12:08:27 +02:00
parent ecfd714c78
commit 11d6bc3eb0
+11 -15
View File
@@ -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;