diff options
Diffstat (limited to 'libkdenetwork/libgpgme-copy/gpgme/data.c')
-rw-r--r-- | libkdenetwork/libgpgme-copy/gpgme/data.c | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/libkdenetwork/libgpgme-copy/gpgme/data.c b/libkdenetwork/libgpgme-copy/gpgme/data.c deleted file mode 100644 index 6ffae324e..000000000 --- a/libkdenetwork/libgpgme-copy/gpgme/data.c +++ /dev/null @@ -1,293 +0,0 @@ -/* data.c - An abstraction for data objects. - Copyright (C) 2002, 2003, 2004, 2005 g10 Code GmbH - - This file is part of GPGME. - - GPGME is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of - the License, or (at your option) any later version. - - GPGME is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ - -#if HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdlib.h> -#include <unistd.h> -#include <errno.h> -#include <string.h> - -#include "gpgme.h" -#include "data.h" -#include "util.h" -#include "ops.h" -#include "priv-io.h" - - -gpgme_error_t -_gpgme_data_new (gpgme_data_t *r_dh, struct _gpgme_data_cbs *cbs) -{ - gpgme_data_t dh; - - if (!r_dh) - return gpg_error (GPG_ERR_INV_VALUE); - - *r_dh = NULL; - dh = calloc (1, sizeof (*dh)); - if (!dh) - return gpg_error_from_errno (errno); - - dh->cbs = cbs; - - *r_dh = dh; - return 0; -} - - -void -_gpgme_data_release (gpgme_data_t dh) -{ - if (!dh) - return; - - if (dh->file_name) - free (dh->file_name); - free (dh); -} - - -/* Read up to SIZE bytes into buffer BUFFER from the data object with - the handle DH. Return the number of characters read, 0 on EOF and - -1 on error. If an error occurs, errno is set. */ -ssize_t -gpgme_data_read (gpgme_data_t dh, void *buffer, size_t size) -{ - if (!dh) - { - errno = EINVAL; - return -1; - } - if (!dh->cbs->read) - { - errno = ENOSYS; - return -1; - } - return (*dh->cbs->read) (dh, buffer, size); -} - - -/* Write up to SIZE bytes from buffer BUFFER to the data object with - the handle DH. Return the number of characters written, or -1 on - error. If an error occurs, errno is set. */ -ssize_t -gpgme_data_write (gpgme_data_t dh, const void *buffer, size_t size) -{ - if (!dh) - { - errno = EINVAL; - return -1; - } - if (!dh->cbs->write) - { - errno = ENOSYS; - return -1; - } - return (*dh->cbs->write) (dh, buffer, size); -} - - -/* Set the current position from where the next read or write starts - in the data object with the handle DH to OFFSET, relativ to - WHENCE. */ -off_t -gpgme_data_seek (gpgme_data_t dh, off_t offset, int whence) -{ - if (!dh) - { - errno = EINVAL; - return -1; - } - if (!dh->cbs->seek) - { - errno = ENOSYS; - return -1; - } - - /* For relative movement, we must take into account the actual - position of the read counter. */ - if (whence == SEEK_CUR) - offset -= dh->pending_len; - - offset = (*dh->cbs->seek) (dh, offset, whence); - if (offset >= 0) - dh->pending_len = 0; - - return offset; -} - - -/* Release the data object with the handle DH. */ -void -gpgme_data_release (gpgme_data_t dh) -{ - if (!dh) - return; - - if (dh->cbs->release) - (*dh->cbs->release) (dh); - _gpgme_data_release (dh); -} - - -/* Get the current encoding meta information for the data object with - handle DH. */ -gpgme_data_encoding_t -gpgme_data_get_encoding (gpgme_data_t dh) -{ - return dh ? dh->encoding : GPGME_DATA_ENCODING_NONE; -} - - -/* Set the encoding meta information for the data object with handle - DH to ENC. */ -gpgme_error_t -gpgme_data_set_encoding (gpgme_data_t dh, gpgme_data_encoding_t enc) -{ - if (!dh) - return gpg_error (GPG_ERR_INV_VALUE); - if (enc < 0 || enc > GPGME_DATA_ENCODING_ARMOR) - return gpg_error (GPG_ERR_INV_VALUE); - dh->encoding = enc; - return 0; -} - - -/* Set the file name associated with the data object with handle DH to - FILE_NAME. */ -gpgme_error_t -gpgme_data_set_file_name (gpgme_data_t dh, const char *file_name) -{ - if (!dh) - return gpg_error (GPG_ERR_INV_VALUE); - - if (dh->file_name) - free (dh->file_name); - - if (file_name) - { - dh->file_name = strdup (file_name); - if (!dh->file_name) - return gpg_error_from_errno (errno); - } - else - dh->file_name = 0; - - return 0; -} - -/* Get the file name associated with the data object with handle DH, - or NULL if there is none. */ -char * -gpgme_data_get_file_name (gpgme_data_t dh) -{ - if (!dh) - return NULL; - - return dh->file_name; -} - - -/* Functions to support the wait interface. */ - -gpgme_error_t -_gpgme_data_inbound_handler (void *opaque, int fd) -{ - gpgme_data_t dh = (gpgme_data_t) opaque; - char buffer[BUFFER_SIZE]; - char *bufp = buffer; - ssize_t buflen; - - buflen = _gpgme_io_read (fd, buffer, BUFFER_SIZE); - if (buflen < 0) - return gpg_error_from_errno (errno); - if (buflen == 0) - { - _gpgme_io_close (fd); - return 0; - } - - do - { - ssize_t amt = gpgme_data_write (dh, bufp, buflen); - if (amt == 0 || (amt < 0 && errno != EINTR)) - return gpg_error_from_errno (errno); - bufp += amt; - buflen -= amt; - } - while (buflen > 0); - return 0; -} - - -gpgme_error_t -_gpgme_data_outbound_handler (void *opaque, int fd) -{ - gpgme_data_t dh = (gpgme_data_t) opaque; - ssize_t nwritten; - - if (!dh->pending_len) - { - ssize_t amt = gpgme_data_read (dh, dh->pending, BUFFER_SIZE); - if (amt < 0) - return gpg_error_from_errno (errno); - if (amt == 0) - { - _gpgme_io_close (fd); - return 0; - } - dh->pending_len = amt; - } - - nwritten = _gpgme_io_write (fd, dh->pending, dh->pending_len); - if (nwritten == -1 && errno == EAGAIN) - return 0; - - if (nwritten == -1 && errno == EPIPE) - { - /* Not much we can do. The other end closed the pipe, but we - still have data. This should only ever happen if the other - end is going to tell us what happened on some other channel. - Silently close our end. */ - _gpgme_io_close (fd); - return 0; - } - - if (nwritten <= 0) - return gpg_error_from_errno (errno); - - if (nwritten < dh->pending_len) - memmove (dh->pending, dh->pending + nwritten, dh->pending_len - nwritten); - dh->pending_len -= nwritten; - 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); -} |