Require autoconf 1.11
[gpgme.git] / src / assuan-support.c
index d5defa8a7443a862f7726d13a63fb9f04320aa24..52643467d32177c95066183e671571a11a8bcc98 100644 (file)
@@ -41,11 +41,21 @@ my_usleep (assuan_context_t ctx, unsigned int usec)
   __assuan_usleep (ctx, usec);
 }
 
+
 /* Create a pipe with an inheritable end.  */
 static int
 my_pipe (assuan_context_t ctx, assuan_fd_t fds[2], int inherit_idx)
 {
-  return _gpgme_io_pipe (fds, inherit_idx);
+  int res;
+  int gfds[2];
+
+  res = _gpgme_io_pipe (gfds, inherit_idx);
+
+  /* For now... */
+  fds[0] = (assuan_fd_t) gfds[0];
+  fds[1] = (assuan_fd_t) gfds[1];
+
+  return res;
 }
 
 
@@ -54,21 +64,21 @@ my_pipe (assuan_context_t ctx, assuan_fd_t fds[2], int inherit_idx)
 static int
 my_close (assuan_context_t ctx, assuan_fd_t fd)
 {
-  return _gpgme_io_close (fd);
+  return _gpgme_io_close ((int) fd);
 }
 
 
 static ssize_t
 my_read (assuan_context_t ctx, assuan_fd_t fd, void *buffer, size_t size)
 {
-  return _gpgme_io_read (fd, buffer, size);
+  return _gpgme_io_read ((int) fd, buffer, size);
 }
 
 
 static ssize_t
 my_write (assuan_context_t ctx, assuan_fd_t fd, const void *buffer, size_t size)
 {
-  return _gpgme_io_write (fd, buffer, size);
+  return _gpgme_io_write ((int) fd, buffer, size);
 }
 
 
@@ -77,10 +87,10 @@ my_recvmsg (assuan_context_t ctx, assuan_fd_t fd, assuan_msghdr_t msg,
            int flags)
 {
 #ifdef HAVE_W32_SYSTEM
-  errno = ENOSYS;
+  gpg_err_set_errno (ENOSYS);
   return -1;
 #else
-  return _gpgme_io_recvmsg (fd, msg, flags);
+  return _gpgme_io_recvmsg ((int) fd, msg, flags);
 #endif
 }
 
@@ -91,10 +101,10 @@ my_sendmsg (assuan_context_t ctx, assuan_fd_t fd, const assuan_msghdr_t msg,
            int flags)
 {
 #ifdef HAVE_W32_SYSTEM
-  errno = ENOSYS;
+  gpg_err_set_errno (ENOSYS);
   return -1;
 #else
-  return _gpgme_io_sendmsg (fd, msg, flags);
+  return _gpgme_io_sendmsg ((int) fd, msg, flags);
 #endif
 }
 
@@ -118,7 +128,7 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
 
   if (! name)
     {
-      errno = ENOSYS;
+      gpg_err_set_errno (ENOSYS);
       return -1;
     }
 
@@ -130,7 +140,7 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
     }
   /* fd_in, fd_out, terminator */
   i += 3;
-  fd_items = malloc (sizeof (struct spawn_fd_item_s) * i);
+  fd_items = calloc (i, sizeof (struct spawn_fd_item_s));
   if (! fd_items)
     return -1;
   i = 0;
@@ -138,28 +148,28 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
     {
       while (fd_child_list[i] != ASSUAN_INVALID_FD)
        {
-         fd_items[i].fd = fd_child_list[i];
+         fd_items[i].fd = (int) fd_child_list[i];
          fd_items[i].dup_to = -1;
          i++;
        }
     }
   if (fd_in != ASSUAN_INVALID_FD)
     {
-      fd_items[i].fd = fd_in;
+      fd_items[i].fd = (int) fd_in;
       fd_items[i].dup_to = 0;
       i++;
     }
   if (fd_out != ASSUAN_INVALID_FD)
     {
-      fd_items[i].fd = fd_out;
+      fd_items[i].fd = (int) fd_out;
       fd_items[i].dup_to = 1;
       i++;
     }
   fd_items[i].fd = -1;
   fd_items[i].dup_to = -1;
 
-  err = _gpgme_io_spawn (name, argv, IOSPAWN_FLAG_NOCLOSE, fd_items,
-                        atfork, atforkvalue, r_pid);
+  err = _gpgme_io_spawn (name, (char*const*)argv, IOSPAWN_FLAG_NOCLOSE,
+                        fd_items, atfork, atforkvalue, r_pid);
   if (! err)
     {
       i = 0;
@@ -168,7 +178,7 @@ my_spawn (assuan_context_t ctx, pid_t *r_pid, const char *name,
        {
          while (fd_child_list[i] != ASSUAN_INVALID_FD)
            {
-             fd_child_list[i] = fd_items[i].peer_name;
+             fd_child_list[i] = (assuan_fd_t) fd_items[i].peer_name;
              i++;
            }
        }
@@ -203,7 +213,7 @@ my_socketpair (assuan_context_t ctx, int namespace, int style,
               int protocol, assuan_fd_t filedes[2])
 {
 #ifdef HAVE_W32_SYSTEM
-  errno = ENOSYS;
+  gpg_err_set_errno (ENOSYS);
   return -1;
 #else
   /* FIXME: Debug output missing.  */
@@ -212,6 +222,21 @@ my_socketpair (assuan_context_t ctx, int namespace, int style,
 }
 
 
+static int
+my_socket (assuan_context_t ctx, int namespace, int style, int protocol)
+{
+  return _gpgme_io_socket (namespace, style, protocol);
+}
+
+
+static int
+my_connect (assuan_context_t ctx, int sock, struct sockaddr *addr,
+           socklen_t length)
+{
+  return _gpgme_io_connect (sock, addr, length);
+}
+
+
 struct assuan_system_hooks _gpgme_assuan_system_hooks =
   {
     ASSUAN_SYSTEM_HOOKS_VERSION,
@@ -224,6 +249,8 @@ struct assuan_system_hooks _gpgme_assuan_system_hooks =
     my_sendmsg,
     my_spawn,
     my_waitpid,
-    my_socketpair
+    my_socketpair,
+    my_socket,
+    my_connect
   };