2001-12-05 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Wed, 5 Dec 2001 13:23:59 +0000 (13:23 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Wed, 5 Dec 2001 13:23:59 +0000 (13:23 +0000)
* keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
occurs.

trunk/gpgme/ChangeLog
trunk/gpgme/keylist.c

index dd78d7b297c9a40f785ab00f9251d48365ce9e95..6d4b9a9c98d1d418cc8877dbd7de2269eb03e2e8 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
+
+       * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
+       occurs.
+
 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
 
        * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
index 2685f4f68204795e4d0be905fbf4a515cd93cafa..323d636015ee63d18f226c8e847c2e3113b1f419 100644 (file)
@@ -367,9 +367,6 @@ finish_key ( GpgmeCtx ctx )
     }
 }
 
-
-
-
 /**
  * gpgme_op_keylist_start:
  * @c: context 
@@ -430,52 +427,53 @@ gpgme_op_keylist_start (GpgmeCtx ctx, const char *pattern, int secret_only)
   return err;
 }
 
-
 /**
  * gpgme_op_keylist_next:
  * @c: Context
  * @r_key: Returned key object
  * 
  * Return the next key from the key listing started with
- * gpgme_op_keylist_start().  The caller must free the key using 
- * gpgme_key_release().
+ * gpgme_op_keylist_start().  The caller must free the key using
+ * gpgme_key_release().  If the last key has already been returned the
+ * last time the function was called, %GPGME_EOF is returned and the
+ * operation is finished.
  * 
- * Return value: 0 on success, %GPGME_EOF or anoter error code.
+ * Return value: 0 on success, %GPGME_EOF or another error code.
  **/
 GpgmeError
-gpgme_op_keylist_next ( GpgmeCtx c, GpgmeKey *r_key )
+gpgme_op_keylist_next (GpgmeCtx ctx, GpgmeKey *r_key)
 {
-    struct key_queue_item_s *q;
-
-    if (!r_key)
-        return mk_error (Invalid_Value);
-    *r_key = NULL;
-    if (!c)
-        return mk_error (Invalid_Value);
-    if ( !c->pending )
-        return mk_error (No_Request);
-    if ( c->out_of_core )
-        return mk_error (Out_Of_Core);
-
-    if ( !c->key_queue ) {
-        _gpgme_wait_on_condition (c, 1, &c->key_cond );
-        if ( c->out_of_core )
-            return mk_error (Out_Of_Core);
-        if ( !c->key_cond )
-            return mk_error (EOF);
-        c->key_cond = 0; 
-        assert ( c->key_queue );
-    }
-    q = c->key_queue;
-    c->key_queue = q->next;
-    if (!c->key_queue)
-        c->key_cond = 0;
-
-    *r_key = q->key;
-    xfree (q);
-    return 0;
-}
-
-
+  struct key_queue_item_s *queue_item;
 
+  if (!r_key)
+    return mk_error (Invalid_Value);
+  *r_key = NULL;
+  if (!ctx)
+    return mk_error (Invalid_Value);
+  if (!ctx->pending )
+    return mk_error (No_Request);
+  if (ctx->out_of_core)
+    return mk_error (Out_Of_Core);
 
+  if (!ctx->key_queue)
+    {
+      _gpgme_wait_on_condition (ctx, 1, &ctx->key_cond);
+      if (ctx->out_of_core)
+       return mk_error (Out_Of_Core);
+      if (!ctx->key_cond)
+       {
+         ctx->pending = 0;
+         return mk_error (EOF);
+       }
+      ctx->key_cond = 0; 
+        assert (ctx->key_queue);
+    }
+  queue_item = ctx->key_queue;
+  ctx->key_queue = queue_item->next;
+  if (!ctx->key_queue)
+    ctx->key_cond = 0;
+  
+  *r_key = queue_item->key;
+  xfree (queue_item);
+  return 0;
+}