* gpgme.texi (Key Listing Mode): Doc KEYLIST_MODE_VALIDATE.
[gpgme.git] / gpgme / export.c
index 3fda602..59c6896 100644 (file)
@@ -1,4 +1,4 @@
-/* export.c - Encrypt functions.
+/* export.c - Export a key.
    Copyright (C) 2000 Werner Koch (dd9jn)
    Copyright (C) 2001, 2002, 2003 g10 Code GmbH
 
 #if HAVE_CONFIG_H
 #include <config.h>
 #endif
-#include <stdlib.h>
 
-#include "util.h"
+#include "gpgme.h"
 #include "context.h"
 #include "ops.h"
-#include "debug.h"
 
-static GpgmeError
-export_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
+\f
+static gpgme_error_t
+export_status_handler (void *priv, gpgme_status_code_t code, char *args)
 {
-  DEBUG2 ("export_status: code=%d args=`%s'\n", code, args);
-  /* FIXME: Need to do more */
   return 0;
 }
 
 
-static GpgmeError
-_gpgme_op_export_start (GpgmeCtx ctx, int synchronous,
-                       GpgmeRecipients recp, GpgmeData keydata)
+static gpgme_error_t
+export_start (gpgme_ctx_t ctx, int synchronous, const char *pattern,
+             unsigned int reserved, gpgme_data_t keydata)
 {
-  GpgmeError err = 0;
+  gpgme_error_t err;
+
+  if (!keydata)
+    return gpg_error (GPG_ERR_INV_VALUE);
 
   err = _gpgme_op_reset (ctx, synchronous);
   if (err)
-    goto leave;
-
-  if (!keydata)
-    {
-      err = GPGME_Invalid_Value;
-      goto leave;
-    }
+    return err;
 
   _gpgme_engine_set_status_handler (ctx->engine, export_status_handler, ctx);
 
-  err = _gpgme_engine_op_export (ctx->engine, recp, keydata, ctx->use_armor);
+  return _gpgme_engine_op_export (ctx->engine, pattern, reserved, keydata,
+                                 ctx->use_armor);
+}
 
- leave:
-  if (err)
-    {
-      _gpgme_engine_release (ctx->engine);
-      ctx->engine = NULL;
-    }
+
+/* Export the keys listed in RECP into KEYDATA.  */
+gpgme_error_t
+gpgme_op_export_start (gpgme_ctx_t ctx, const char *pattern,
+                      unsigned int reserved, gpgme_data_t keydata)
+{
+  return export_start (ctx, 0, pattern, reserved, keydata);
+}
+
+
+/* Export the keys listed in RECP into KEYDATA.  */
+gpgme_error_t
+gpgme_op_export (gpgme_ctx_t ctx, const char *pattern, unsigned int reserved,
+                gpgme_data_t keydata)
+{
+  gpgme_error_t err = export_start (ctx, 1, pattern, reserved, keydata);
+  if (!err)
+    err = _gpgme_wait_one (ctx);
   return err;
 }
 
-GpgmeError
-gpgme_op_export_start (GpgmeCtx ctx, GpgmeRecipients recp, GpgmeData keydata)
+\f
+static gpgme_error_t
+export_ext_start (gpgme_ctx_t ctx, int synchronous, const char *pattern[],
+                 unsigned int reserved, gpgme_data_t keydata)
 {
-  return _gpgme_op_export_start (ctx, 0, recp, keydata);
+  gpgme_error_t err;
+
+  if (!keydata)
+    return gpg_error (GPG_ERR_INV_VALUE);
+
+  err = _gpgme_op_reset (ctx, synchronous);
+  if (err)
+    return err;
+
+  _gpgme_engine_set_status_handler (ctx->engine, export_status_handler, ctx);
+
+  return _gpgme_engine_op_export_ext (ctx->engine, pattern, reserved, keydata,
+                                     ctx->use_armor);
+}
+
+
+/* Export the keys listed in RECP into KEYDATA.  */
+gpgme_error_t
+gpgme_op_export_ext_start (gpgme_ctx_t ctx, const char *pattern[],
+                          unsigned int reserved, gpgme_data_t keydata)
+{
+  return export_ext_start (ctx, 0, pattern, reserved, keydata);
 }
 
-/**
- * gpgme_op_export:
- * @c: the context
- * @recp: a list of recipients or NULL
- * @keydata: Returns the keys
- * 
- * This function can be used to extract public keys from the GnuPG key
- * database either in armored (by using gpgme_set_armor()) or in plain
- * binary form.  The function expects a list of user IDs in @recp for
- * whom the public keys are to be exported.
- * 
- * Return value: 0 for success or an error code
- **/
-GpgmeError
-gpgme_op_export (GpgmeCtx ctx, GpgmeRecipients recipients, GpgmeData keydata)
+
+/* Export the keys listed in RECP into KEYDATA.  */
+gpgme_error_t
+gpgme_op_export_ext (gpgme_ctx_t ctx, const char *pattern[],
+                    unsigned int reserved, gpgme_data_t keydata)
 {
-  GpgmeError err = _gpgme_op_export_start (ctx, 1, recipients, keydata);
+  gpgme_error_t err = export_ext_start (ctx, 1, pattern, reserved, keydata);
   if (!err)
     err = _gpgme_wait_one (ctx);
-  /* XXX We don't get enough status information.  */
   return err;
 }