2007-01-18 Marcus Brinkmann <marcus@g10code.de>
* data.h (_gpgme_data_get_fd): Add prototype. (gpgme_data_get_fd_cb): New type. (struct _gpgme_data_cbs): New member get_fd. * data.c (_gpgme_data_get_fd): New function. * data-fd.c (fd_get_fd): New function. (fd_cbs): Add fd_get_fd. * data-stream.c (stream_get_fd): New function. (stream_cbs): Add stream_get_fd. * data-mem.c (mem_cbs): Add NULL for get_fd callback. * data-user.c (user_cbs): Likewise. * engine-gpgsm.c (gpgsm_set_fd) [USE_DESCRIPTOR_PASSING]: Try to short-cut by passing the data descriptor directly.
This commit is contained in:
parent
e08d4a32d6
commit
9e1edec4ff
@ -1,3 +1,18 @@
|
|||||||
|
2007-01-18 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
|
* data.h (_gpgme_data_get_fd): Add prototype.
|
||||||
|
(gpgme_data_get_fd_cb): New type.
|
||||||
|
(struct _gpgme_data_cbs): New member get_fd.
|
||||||
|
* data.c (_gpgme_data_get_fd): New function.
|
||||||
|
* data-fd.c (fd_get_fd): New function.
|
||||||
|
(fd_cbs): Add fd_get_fd.
|
||||||
|
* data-stream.c (stream_get_fd): New function.
|
||||||
|
(stream_cbs): Add stream_get_fd.
|
||||||
|
* data-mem.c (mem_cbs): Add NULL for get_fd callback.
|
||||||
|
* data-user.c (user_cbs): Likewise.
|
||||||
|
* engine-gpgsm.c (gpgsm_set_fd) [USE_DESCRIPTOR_PASSING]: Try to
|
||||||
|
short-cut by passing the data descriptor directly.
|
||||||
|
|
||||||
2007-01-17 Marcus Brinkmann <marcus@g10code.de>
|
2007-01-17 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
* w32-io.c (build_commandline): Quote all command line arguments.
|
* w32-io.c (build_commandline): Quote all command line arguments.
|
||||||
|
@ -49,12 +49,20 @@ fd_seek (gpgme_data_t dh, off_t offset, int whence)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
fd_get_fd (gpgme_data_t dh)
|
||||||
|
{
|
||||||
|
return (dh->data.fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct _gpgme_data_cbs fd_cbs =
|
static struct _gpgme_data_cbs fd_cbs =
|
||||||
{
|
{
|
||||||
fd_read,
|
fd_read,
|
||||||
fd_write,
|
fd_write,
|
||||||
fd_seek,
|
fd_seek,
|
||||||
NULL
|
NULL,
|
||||||
|
fd_get_fd
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -157,7 +157,8 @@ static struct _gpgme_data_cbs mem_cbs =
|
|||||||
mem_read,
|
mem_read,
|
||||||
mem_write,
|
mem_write,
|
||||||
mem_seek,
|
mem_seek,
|
||||||
mem_release
|
mem_release,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,12 +71,20 @@ stream_seek (gpgme_data_t dh, off_t offset, int whence)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
stream_get_fd (gpgme_data_t dh)
|
||||||
|
{
|
||||||
|
return fileno (dh->data.stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct _gpgme_data_cbs stream_cbs =
|
static struct _gpgme_data_cbs stream_cbs =
|
||||||
{
|
{
|
||||||
stream_read,
|
stream_read,
|
||||||
stream_write,
|
stream_write,
|
||||||
stream_seek,
|
stream_seek,
|
||||||
NULL
|
NULL,
|
||||||
|
stream_get_fd
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,7 +71,8 @@ static struct _gpgme_data_cbs user_cbs =
|
|||||||
user_read,
|
user_read,
|
||||||
user_write,
|
user_write,
|
||||||
user_seek,
|
user_seek,
|
||||||
user_release
|
user_release,
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
11
gpgme/data.c
11
gpgme/data.c
@ -280,3 +280,14 @@ _gpgme_data_outbound_handler (void *opaque, int fd)
|
|||||||
dh->pending_len -= nwritten;
|
dh->pending_len -= nwritten;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Get the file descriptor associated with DH, if possible. Otherwise
|
||||||
|
return -1. */
|
||||||
|
int
|
||||||
|
_gpgme_data_get_fd (gpgme_data_t dh)
|
||||||
|
{
|
||||||
|
if (!dh || !dh->cbs->get_fd)
|
||||||
|
return -1;
|
||||||
|
return (*dh->cbs->get_fd) (dh);
|
||||||
|
}
|
||||||
|
@ -52,12 +52,16 @@ typedef off_t (*gpgme_data_seek_cb) (gpgme_data_t dh, off_t offset,
|
|||||||
/* Release the data object with the handle DH. */
|
/* Release the data object with the handle DH. */
|
||||||
typedef void (*gpgme_data_release_cb) (gpgme_data_t dh);
|
typedef void (*gpgme_data_release_cb) (gpgme_data_t dh);
|
||||||
|
|
||||||
|
/* Get the FD associated with the handle DH, or -1. */
|
||||||
|
typedef int (*gpgme_data_get_fd_cb) (gpgme_data_t dh);
|
||||||
|
|
||||||
struct _gpgme_data_cbs
|
struct _gpgme_data_cbs
|
||||||
{
|
{
|
||||||
gpgme_data_read_cb read;
|
gpgme_data_read_cb read;
|
||||||
gpgme_data_write_cb write;
|
gpgme_data_write_cb write;
|
||||||
gpgme_data_seek_cb seek;
|
gpgme_data_seek_cb seek;
|
||||||
gpgme_data_release_cb release;
|
gpgme_data_release_cb release;
|
||||||
|
gpgme_data_get_fd_cb get_fd;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gpgme_data
|
struct gpgme_data
|
||||||
@ -121,4 +125,8 @@ gpgme_error_t _gpgme_data_new (gpgme_data_t *r_dh,
|
|||||||
|
|
||||||
void _gpgme_data_release (gpgme_data_t dh);
|
void _gpgme_data_release (gpgme_data_t dh);
|
||||||
|
|
||||||
|
/* Get the file descriptor associated with DH, if possible. Otherwise
|
||||||
|
return -1. */
|
||||||
|
int _gpgme_data_get_fd (gpgme_data_t dh);
|
||||||
|
|
||||||
#endif /* DATA_H */
|
#endif /* DATA_H */
|
||||||
|
@ -692,22 +692,26 @@ gpgsm_set_fd (engine_gpgsm_t gpgsm, fd_type_t fd_type, const char *opt)
|
|||||||
dir = iocb_data->dir;
|
dir = iocb_data->dir;
|
||||||
|
|
||||||
#if USE_DESCRIPTOR_PASSING
|
#if USE_DESCRIPTOR_PASSING
|
||||||
{
|
/* We try to short-cut the communication by giving GPGSM direct
|
||||||
int fds[2];
|
access to the file descriptor, rather than using a pipe. */
|
||||||
|
iocb_data->server_fd = _gpgme_data_get_fd (iocb_data->data);
|
||||||
|
if (iocb_data->server_fd < 0)
|
||||||
|
{
|
||||||
|
int fds[2];
|
||||||
|
|
||||||
if (_gpgme_io_pipe (fds, 0) < 0)
|
if (_gpgme_io_pipe (fds, 0) < 0)
|
||||||
return gpg_error_from_errno (errno);
|
return gpg_error_from_errno (errno);
|
||||||
|
|
||||||
iocb_data->fd = dir ? fds[0] : fds[1];
|
iocb_data->fd = dir ? fds[0] : fds[1];
|
||||||
iocb_data->server_fd = dir ? fds[1] : fds[0];
|
iocb_data->server_fd = dir ? fds[1] : fds[0];
|
||||||
|
|
||||||
if (_gpgme_io_set_close_notify (iocb_data->fd,
|
if (_gpgme_io_set_close_notify (iocb_data->fd,
|
||||||
close_notify_handler, gpgsm))
|
close_notify_handler, gpgsm))
|
||||||
{
|
{
|
||||||
err = gpg_error (GPG_ERR_GENERAL);
|
err = gpg_error (GPG_ERR_GENERAL);
|
||||||
goto leave_set_fd;
|
goto leave_set_fd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fd = iocb_data->server_fd;
|
fd = iocb_data->server_fd;
|
||||||
|
@ -72,7 +72,7 @@ extern "C" {
|
|||||||
AM_PATH_GPGME macro) check that this header matches the installed
|
AM_PATH_GPGME macro) check that this header matches the installed
|
||||||
library. Warning: Do not edit the next line. configure will do
|
library. Warning: Do not edit the next line. configure will do
|
||||||
that for you! */
|
that for you! */
|
||||||
#define GPGME_VERSION "1.1.3-cvs1200"
|
#define GPGME_VERSION "1.1.3-cvs1202"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user