2005-09-12 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / trustlist.c
index 2f2ef98..f33860a 100644 (file)
@@ -1,22 +1,23 @@
 /* trustlist.c - Trust item listing.
    Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003 g10 Code GmbH
+   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
 
    This file is part of GPGME.
  
    GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
+   under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of
+   the License, or (at your option) any later version.
+   
    GPGME is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-   You should have received a copy of the GNU General Public License
-   along with GPGME; if not, write to the Free Software Foundation,
-   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Lesser General Public License for more details.
+   
+   You should have received a copy of the GNU Lesser General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
 
 #if HAVE_CONFIG_H
 #include <config.h>
@@ -24,6 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#include <errno.h>
 
 #include "gpgme.h"
 #include "util.h"
@@ -106,10 +108,12 @@ trustlist_colon_handler (void *priv, char *line)
          break;
        case 9: /* user ID */
          item->name = strdup (p);
-         if (!item->name) {
-           gpgme_trust_item_unref (item);
-           return GPGME_Out_Of_Core;
-         }
+         if (!item->name)
+           {
+             int saved_errno = errno;
+             gpgme_trust_item_unref (item);
+             return gpg_error_from_errno (saved_errno);
+           }
          break;
         }
     }
@@ -121,18 +125,20 @@ trustlist_colon_handler (void *priv, char *line)
 
 
 void
-_gpgme_op_trustlist_event_cb (void *data, gpgme_event_io_t type, void *type_data)
+_gpgme_op_trustlist_event_cb (void *data, gpgme_event_io_t type,
+                             void *type_data)
 {
   gpgme_ctx_t ctx = (gpgme_ctx_t) data;
   gpgme_error_t err;
+  void *hook;
   op_data_t opd;
   gpgme_trust_item_t item = (gpgme_trust_item_t) type_data;
   struct trust_queue_item_s *q, *q2;
 
   assert (type == GPGME_EVENT_NEXT_TRUSTITEM);
 
-  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd,
-                              -1, NULL);
+  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, &hook, -1, NULL);
+  opd = hook;
   if (err)
     return;
 
@@ -164,17 +170,19 @@ gpgme_error_t
 gpgme_op_trustlist_start (gpgme_ctx_t ctx, const char *pattern, int max_level)
 {
   gpgme_error_t err = 0;
+  void *hook;
   op_data_t opd;
 
   if (!pattern || !*pattern)
-    return GPGME_Invalid_Value;
+    return gpg_error (GPG_ERR_INV_VALUE);
 
   err = _gpgme_op_reset (ctx, 2);
   if (err)
     return err;
 
-  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd,
+  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, &hook,
                               sizeof (*opd), NULL);
+  opd = hook;
   if (err)
     return err;
 
@@ -193,17 +201,18 @@ gpgme_error_t
 gpgme_op_trustlist_next (gpgme_ctx_t ctx, gpgme_trust_item_t *r_item)
 {
   gpgme_error_t err;
+  void *hook;
   op_data_t opd;
   struct trust_queue_item_s *q;
 
   if (!r_item)
-    return GPGME_Invalid_Value;
+    return gpg_error (GPG_ERR_INV_VALUE);
   *r_item = NULL;
   if (!ctx)
-    return GPGME_Invalid_Value;
+    return gpg_error (GPG_ERR_INV_VALUE);
 
-  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd,
-                              -1, NULL);
+  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, &hook, -1, NULL);
+  opd = hook;
   if (err)
     return err;
 
@@ -213,7 +222,7 @@ gpgme_op_trustlist_next (gpgme_ctx_t ctx, gpgme_trust_item_t *r_item)
       if (err)
        return err;
       if (!opd->trust_cond)
-       return GPGME_EOF;
+       return gpg_error (GPG_ERR_EOF);
       opd->trust_cond = 0; 
       assert (opd->trust_queue);
     }
@@ -231,7 +240,7 @@ gpgme_error_t
 gpgme_op_trustlist_end (gpgme_ctx_t ctx)
 {
   if (!ctx)
-    return GPGME_Invalid_Value;
+    return gpg_error (GPG_ERR_INV_VALUE);
 
   return 0;
 }