Reindented
[gnupg.git] / scd / card-dinsig.c
index 161d5db..0cbcd31 100644 (file)
@@ -5,7 +5,7 @@
  *
  * GnuPG 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
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU 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
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 /* The German signature law and its bylaw (SigG and SigV) is currently
 #include <string.h>
 #include <time.h>
 
+#ifdef HAVE_OPENSC
 #include <opensc/pkcs15.h>
+#include "scdaemon.h"
 #include <ksba.h>
 
-#include "scdaemon.h"
 #include "card-common.h"
 
 static int dinsig_read_cert (CARD card, const char *certidstr,
@@ -98,8 +98,7 @@ dinsig_enum_keypairs (CARD card, int idx,
   int rc;
   unsigned char *buf;
   size_t buflen;
-  KsbaError krc;
-  KsbaCert cert;
+  ksba_cert_t cert;
 
   /* fixme: We should locate the application via the EF(DIR) and not
      assume a Netkey card */
@@ -112,27 +111,27 @@ dinsig_enum_keypairs (CARD card, int idx,
   if (rc)
     return rc;
 
-  cert = ksba_cert_new ();
-  if (!cert)
+  rc = ksba_cert_new (&cert);
+  if (rc)
     {
       xfree (buf);
-      return GNUPG_Out_Of_Core;
+      return rc;
     }
 
-  krc = ksba_cert_init_from_mem (cert, buf, buflen); 
+  rc = ksba_cert_init_from_mem (cert, buf, buflen); 
   xfree (buf);
-  if (krc)
+  if (rc)
     {
       log_error ("failed to parse the certificate at idx %d: %s\n",
-                 idx, ksba_strerror (krc));
+                 idx, gpg_strerror (rc));
       ksba_cert_release (cert);
-      return GNUPG_Card_Error;
+      return rc;
     }
   if (card_help_get_keygrip (cert, keygrip))
     {
       log_error ("failed to calculate the keygrip at index %d\n", idx);
       ksba_cert_release (cert);
-      return GNUPG_Card_Error;
+      return gpg_error (GPG_ERR_CARD);
     }      
   ksba_cert_release (cert);
 
@@ -141,7 +140,7 @@ dinsig_enum_keypairs (CARD card, int idx,
     {
       *keyid = xtrymalloc (17);
       if (!*keyid)
-        return GNUPG_Out_Of_Core;
+        return gpg_error (gpg_err_code_from_errno (errno));
       if (!idx)
         strcpy (*keyid, "DINSIG-DF01.C000");
       else
@@ -169,7 +168,7 @@ dinsig_read_cert (CARD card, const char *certidstr,
   else if (!strcmp (certidstr, "DINSIG-DF01.C200"))
     sc_format_path ("3F00DF01C200", &path);
   else
-    return GNUPG_Invalid_Id;
+    return gpg_error (GPG_ERR_INV_ID);
 
   rc = sc_select_file (card->scard, &path, &file);
   if (rc) 
@@ -182,19 +181,20 @@ dinsig_read_cert (CARD card, const char *certidstr,
     {
       log_error ("wrong type or structure of certificate EF\n");
       sc_file_free (file);
-      return GNUPG_Card_Error;
+      return gpg_error (GPG_ERR_CARD);
     }
   if (file->size < 20) /* check against a somewhat arbitrary length */
     { 
       log_error ("certificate EF too short\n");
       sc_file_free (file);
-      return GNUPG_Card_Error;
+      return gpg_error (GPG_ERR_CARD);
     }
   buf = xtrymalloc (file->size);
   if (!buf)
     {
+      gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno));
       sc_file_free (file);
-      return GNUPG_Out_Of_Core;
+      return tmperr;
     }
       
   rc = sc_read_binary (card->scard, 0, buf, file->size, 0);
@@ -203,7 +203,7 @@ dinsig_read_cert (CARD card, const char *certidstr,
       log_error ("short read on certificate EF\n");
       sc_file_free (file);
       xfree (buf);
-      return GNUPG_Card_Error;
+      return gpg_error (GPG_ERR_CARD);
     }
   sc_file_free (file);
   if (rc < 0) 
@@ -254,3 +254,4 @@ card_dinsig_bind (CARD card)
   card->fnc.read_cert     = dinsig_read_cert;
 
 }
+#endif /*HAVE_OPENSC*/