#include <assert.h>
#include <stdlib.h>
+#include <errno.h>
#include "assuan.h"
__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;
}
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);
}
int flags)
{
#ifdef HAVE_W32_SYSTEM
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ gpg_err_set_errno (ENOSYS);
+ return -1;
#else
- return _gpgme_io_recvmsg (fd, msg, flags);
+ return _gpgme_io_recvmsg ((int) fd, msg, flags);
#endif
}
int flags)
{
#ifdef HAVE_W32_SYSTEM
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ gpg_err_set_errno (ENOSYS);
+ return -1;
#else
- return _gpgme_io_sendmsg (fd, msg, flags);
+ return _gpgme_io_sendmsg ((int) fd, msg, flags);
#endif
}
void (*atfork) (void *opaque, int reserved),
void *atforkvalue, unsigned int flags)
{
- gpg_error_t err;
+ int err;
struct spawn_fd_item_s *fd_items;
int i;
assert (name);
if (! name)
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ {
+ gpg_err_set_errno (ENOSYS);
+ return -1;
+ }
i = 0;
if (fd_child_list)
}
/* 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 gpg_error_from_syserror ();
+ return -1;
i = 0;
if (fd_child_list)
{
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, 0, fd_items, r_pid);
+ err = _gpgme_io_spawn (name, (char*const*)argv, IOSPAWN_FLAG_NOCLOSE,
+ fd_items, atfork, atforkvalue, r_pid);
if (! err)
{
i = 0;
{
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++;
}
}
my_socketpair (assuan_context_t ctx, int namespace, int style,
int protocol, assuan_fd_t filedes[2])
{
- assert ("Should never happen.");
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+#ifdef HAVE_W32_SYSTEM
+ gpg_err_set_errno (ENOSYS);
+ return -1;
+#else
+ /* FIXME: Debug output missing. */
+ return __assuan_socketpair (ctx, namespace, style, protocol, filedes);
+#endif
+}
+
+
+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);
}
my_sendmsg,
my_spawn,
my_waitpid,
- my_socketpair
+ my_socketpair,
+ my_socket,
+ my_connect
};