2002-12-06  Marcus Brinkmann  <marcus@g10code.de>

	* gpgme.texi (Memory Based Data Buffers): New subsection.
	(File Based Data Buffers): Likewise.
	(Callback Based Data Buffers): Likewise.
	(Manipulating Data Buffers): Update interfaces.  Add
	gpgme_data_seek.
	* gpgme.texi (Engine Version Check): Remove gpgme_chec_engine.

gpgme/
2002-12-06  Marcus Brinkmann  <marcus@g10code.de>

	* data.h (gpgme_data_release_cb): Change return type to void.
	(gpgme_data_read_cb): Change return type to ssize_t.
	* data.c (gpgme_data_read): Likewise.
	* data-stream.c (stream_read): Likewise.
	* data-fd.c (fd_read): Likewise.
	* data-mem.c (mem_read): Likewise.
	(mem_release): Change return type to void.
	* data-user.c (user_read): Change return type to ssize_t.
	(user_release): Change return type to void.
	* data-compat.c (old_user_read): Change return type to ssize_t.
	* gpgme.h (GpgmeDataReadCb): Likewise.
	(gpgme_data_read): Likewise.
	(GpgmeDataSeekCb): Change return type to off_t.
This commit is contained in:
Marcus Brinkmann 2002-12-06 22:06:25 +00:00
parent 1b495c5140
commit 6a772bd6bc
11 changed files with 356 additions and 193 deletions

View File

@ -1,3 +1,12 @@
2002-12-06 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Memory Based Data Buffers): New subsection.
(File Based Data Buffers): Likewise.
(Callback Based Data Buffers): Likewise.
(Manipulating Data Buffers): Update interfaces. Add
gpgme_data_seek.
* gpgme.texi (Engine Version Check): Remove gpgme_chec_engine.
2002-11-21 Marcus Brinkmann <marcus@g10code.de> 2002-11-21 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Verify): Document the new interface. * gpgme.texi (Verify): Document the new interface.

View File

@ -125,6 +125,12 @@ Exchanging Data
* Destroying Data Buffers:: Releasing data buffers. * Destroying Data Buffers:: Releasing data buffers.
* Manipulating Data Buffers:: Operations on data buffers. * Manipulating Data Buffers:: Operations on data buffers.
Creating Data Buffers
* Memory Based Data Buffers:: Creating memory based data buffers.
* File Based Data Buffers:: Creating file based data buffers.
* Callback Based Data Buffers:: Creating callback based data buffers.
Contexts Contexts
* Creating Contexts:: Creating new @acronym{GPGME} contexts. * Creating Contexts:: Creating new @acronym{GPGME} contexts.
@ -597,17 +603,6 @@ This function returns @code{GPGME_No_Error} if the engine is available
and @code{GPGME_Invalid_Engine} if it is not. and @code{GPGME_Invalid_Engine} if it is not.
@end deftypefun @end deftypefun
@deftypefun GpgmeError gpgme_check_engine (void)
The function @code{gpgme_check_engine} is equivalent to
@example
gpgme_engine_check_version (GPGME_PROTOCOL_OpenPGP);
@end example
This function is deprecated and provided for backwards compatibility
only. It is obsoleted by @code{gpgme_engine_check_version}.
@end deftypefun
@node Engine Information @node Engine Information
@section Engine Information @section Engine Information
@ -793,7 +788,7 @@ attempted to use it as an output buffer).
@item GPGME_File_Error @item GPGME_File_Error
This value means that a file I/O operation failed. The value of This value means that a file I/O operation failed. The value of
@code{errno} contains the system error value. @var{errno} contains the system error value.
@item GPGME_Decryption_Failed @item GPGME_Decryption_Failed
This value indicates that a decryption operation was unsuccessful. This value indicates that a decryption operation was unsuccessful.
@ -871,10 +866,31 @@ data, which is used by @acronym{GPGME} to exchange data with the user.
@section Creating Data Buffers @section Creating Data Buffers
@cindex data buffer, creation @cindex data buffer, creation
Data objects can be based on memory, files, or callback functions
provided by the user. Not all operations are supported by all
objects.
@menu
* Memory Based Data Buffers:: Creating memory based data buffers.
* File Based Data Buffers:: Creating file based data buffers.
* Callback Based Data Buffers:: Creating callback based data buffers.
@end menu
@node Memory Based Data Buffers
@subsection Memory Based Data Buffers
Memory based data objects store all data in allocated memory. This is
convenient, but only practical for an amount of data that is a
fraction of the available physical memory. The data has to be copied
from its source and to its destination, which can often be avoided by
using one of the other data object
@deftypefun GpgmeError gpgme_data_new (@w{GpgmeData *@var{dh}}) @deftypefun GpgmeError gpgme_data_new (@w{GpgmeData *@var{dh}})
The function @code{gpgme_data_new} creates a new @code{GpgmeData} The function @code{gpgme_data_new} creates a new @code{GpgmeData}
object and returns a handle for it in @var{dh}. The data object is object and returns a handle for it in @var{dh}. The data object is
initially empty. memory based and initially empty.
The function returns @code{GPGME_No_Error} if the data object was The function returns @code{GPGME_No_Error} if the data object was
successfully created, @code{GPGME_Invalid_Value} if @var{dh} is not a successfully created, @code{GPGME_Invalid_Value} if @var{dh} is not a
@ -933,6 +949,138 @@ exactly one of @var{filename} and @var{fp} is not a valid pointer,
@code{GPGME_Out_Of_Core} if not enough memory is available. @code{GPGME_Out_Of_Core} if not enough memory is available.
@end deftypefun @end deftypefun
@node File Based Data Buffers
@subsection File Based Data Buffers
File based data objects operate directly on file descriptors or
streams. Only a small amount of data is stored in core at any time,
so the size of the data objects is not limited by @acronym{GPGME}.
@deftypefun GpgmeError gpgme_data_new_from_fd (@w{GpgmeData *@var{dh}}, @w{int @var{fd}})
The function @code{gpgme_data_new_from_fd} creates a new
@code{GpgmeData} object and uses the file descriptor @var{fd} to read
from (if used as an input data object) and write to (if used as an
output data object).
When using the data object as an input buffer, the function might read
a bit more from the file descriptor than is actually needed by the
crypto engine in the desired operation because of internal buffering.
The function returns @code{GPGME_No_Error} if the data object was
successfully created, and @code{GPGME_Out_Of_Core} if not enough
memory is available.
@end deftypefun
@deftypefun GpgmeError gpgme_data_new_from_stream (@w{GpgmeData *@var{dh}}, @w{FILE *@var{stream}})
The function @code{gpgme_data_new_from_stream} creates a new
@code{GpgmeData} object and uses the I/O stream @var{stream} to read
from (if used as an input data object) and write to (if used as an
output data object).
When using the data object as an input buffer, the function might read
a bit more from the stream than is actually needed by the crypto
engine in the desired operation because of internal buffering.
The function returns @code{GPGME_No_Error} if the data object was
successfully created, and @code{GPGME_Out_Of_Core} if not enough
memory is available.
@end deftypefun
@node Callback Based Data Buffers
@subsection Callback Based Data Buffers
If neither memory nor file based data objects are a good fit for your
application, you can implement the functions a data object provides
yourself and create a data object from these callback functions.
@deftp {Data type} {ssize_t (*GpgmeDataReadCb) (@w{void *@var{handle}}, @w{void @var{*buffer}}, @w{size_t @var{size}})}
@tindex GpgmeDataReadCb
The @code{GpgmeDataReadCb} type is the type of functions which
@acronym{GPGME} calls if it wants to read data from a user-implemented
data object. The function should read up to @var{size} bytes from the
current read position into the space starting at @var{buffer}. The
@var{handle} is provided by the user at data object creation time.
The function should return the number of bytes read, 0 on EOF, and -1
on error. If an error occurs, @var{errno} should be set to describe
the type of the error.
@end deftp
@deftp {Data type} {ssize_t (*GpgmeDataWriteCb) (@w{void *@var{handle}}, @w{const void @var{*buffer}}, @w{size_t @var{size}})}
@tindex GpgmeDataWriteCb
The @code{GpgmeDataWriteCb} type is the type of functions which
@acronym{GPGME} calls if it wants to write data to a user-implemented
data object. The function should write up to @var{size} bytes to the
current write position from the space starting at @var{buffer}. The
@var{handle} is provided by the user at data object creation time.
The function should return the number of bytes written, and -1 on
error. If an error occurs, @var{errno} should be set to describe the
type of the error.
@end deftp
@deftp {Data type} {off_t (*GpgmeDataSeekCb) (@w{void *@var{handle}}, @w{off_t @var{offset}}, @w{int @var{whence}})}
@tindex GpgmeDataSeekCb
The @code{GpgmeDataSeekCb} type is the type of functions which
@acronym{GPGME} calls if it wants to change the current read/write
position in a user-implemented data object, just like the @code{lseek}
function.
The function should return the new read/write position, and -1 on
error. If an error occurs, @var{errno} should be set to describe the
type of the error.
@end deftp
@deftp {Data type} {void (*GpgmeDataReleaseCb) (@w{void *@var{handle}})
@tindex GpgmeDataReleaseCb
The @code{GpgmeDataReleaseCb} type is the type of functions which
@acronym{GPGME} calls if it wants to destroy a user-implemented data
object. The @var{handle} is provided by the user at data object
creation time.
@end deftp
@deftp {Data type} {struct GpgmeDataCbs}
This structure is used to store the data callback interface functions
described above. It has the following members:
@table @code
@item GpgmeDataReadCb read
This is the function called by @acronym{GPGME} to read data from the
data object. It is only required for input data object.
@item GpgmeDataReadCb write
This is the function called by @acronym{GPGME} to write data to the
data object. It is only required for output data object.
@item GpgmeDataSeekCb seek
This is the function called by @acronym{GPGME} to change the current
read/write pointer in the data object (if available). It is optional.
@item GpgmeDataReleaseCb release
This is the function called by @acronym{GPGME} to release a data
object. It is optional.
@end table
@end deftp
@deftypefun GpgmeError gpgme_data_new_from_cbs (@w{GpgmeData *@var{dh}}, @w{struct GpgmeDataCbs *@var{cbs}}, @w{void *@var{handle}})
The function @code{gpgme_data_new_from_cbs} creates a new
@code{GpgmeData} object and uses the user-provided callback functions
to operate on the data object.
The handle @var{handle} is passed as first argument to the callback
functions. This can be used to identify this data object.
The function returns @code{GPGME_No_Error} if the data object was
successfully created, and @code{GPGME_Out_Of_Core} if not enough
memory is available.
@end deftypefun
The following interface is deprecated and only provided for backward
compatibility. Don't use it. It will be removed in a future version
of @acronym{GPGME}.
@deftypefun GpgmeError gpgme_data_new_with_read_cb (@w{GpgmeData *@var{dh}}, @w{int (*@var{readfunc})} (@w{void *@var{hook}}, @w{char *@var{buffer}}, @w{size_t @var{count}}, @w{size_t *@var{nread}}), @w{void *@var{hook_value}}) @deftypefun GpgmeError gpgme_data_new_with_read_cb (@w{GpgmeData *@var{dh}}, @w{int (*@var{readfunc})} (@w{void *@var{hook}}, @w{char *@var{buffer}}, @w{size_t @var{count}}, @w{size_t *@var{nread}}), @w{void *@var{hook_value}})
The function @code{gpgme_data_new_with_read_cb} creates a new The function @code{gpgme_data_new_with_read_cb} creates a new
@code{GpgmeData} object and uses the callback function @var{readfunc} @code{GpgmeData} object and uses the callback function @var{readfunc}
@ -985,80 +1133,75 @@ be returned to the user, the function will return @code{NULL}.
@section Manipulating Data Buffers @section Manipulating Data Buffers
@cindex data buffere, manipulation @cindex data buffere, manipulation
@deftypefun GpgmeError gpgme_data_read (@w{GpgmeData @var{dh}}, @w{void *@var{buffer}}, @w{size_t @var{length}}, @w{size_t *@var{nread}}) @deftypefun ssize_t gpgme_data_read (@w{GpgmeData @var{dh}}, @w{void *@var{buffer}}, @w{size_t @var{length}})
The function @code{gpgme_data_read} reads up to @var{length} bytes The function @code{gpgme_data_read} reads up to @var{length} bytes
from the data object with the handle @var{dh} into the space starting from the data object with the handle @var{dh} into the space starting
at @var{buffer}. The actual amount read is returned in @var{nread}. at @var{buffer}.
If @var{buffer} is @code{NULL}, the function returns the amount of If no error occurs, the actual amount read is returned. If the end of
bytes available in @var{nread} without changing the read pointer. the data object is reached, the function returns @code{GPGME_EOF} and
This is not supported by all types of data objects. If this function sets @var{nread} to zero.
is not supported, @code{GPGME_Invalid_Type} is returned.
If the end of the data object is reached, the function returns In all other cases, the function returns -1 and sets @var{errno}.
@code{GPGME_EOF} and sets @var{nread} to zero.
In all other cases, the function returns @code{GPGME_No_Error} if the
operation was successfully performed and @code{GPGME_Invalid_Value} if
@var{dh} is not a valid pointer.
@end deftypefun @end deftypefun
@deftypefun GpgmeError gpgme_data_rewind (@w{GpgmeData @var{dh}}) @deftypefun ssize_t gpgme_data_write (@w{GpgmeData @var{dh}}, @w{const void *@var{buffer}}, @w{size_t @var{size}})
The function @code{gpgme_data_rewind} resets the read pointer of the The function @code{gpgme_data_write} writes up to @var{size} bytes
data object with the handle @var{dh}, so that a subsequent
@code{gpgme_data_read} operation starts at the beginning of the data.
The function returns @code{GPGME_No_Error} if the operation was
successfully performed, @code{GPGME_Not_Implemented} if the operation
is not supported (for example, by a read callback function supplied by
the user) and @code{GPGME_Invalid_Value} if @var{dh} is not a valid
pointer.
@end deftypefun
@deftypefun GpgmeError gpgme_data_write (@w{GpgmeData @var{dh}}, @w{const void *@var{buffer}}, @w{size_t @var{length}})
The function @code{gpgme_data_write} writes @var{length} bytes
starting from @var{buffer} into the data object with the handle starting from @var{buffer} into the data object with the handle
@var{dh} at the current write position. @var{dh} at the current write position.
The function returns @code{GPGME_No_Error} if the operation was The function returns the number of bytes actually written, or -1 if an
successfully performed, @code{GPGME_Invalid_Value} if @var{dh} or error occurs. If an error occurs, @var{errno} is set.
@var{buffer} is not a valid pointer, @code{GPGME_Invalid_Type} or
@code{GPGME_Invalid_Mode} if the data object type does not support
writing, and @code{GPGME_Out_Of_Core} if not enough memory is
available.
@end deftypefun @end deftypefun
@c /* Set the current position from where the next read or write starts
@c GpgmeDataType in the data object with the handle DH to OFFSET, relativ to
@c WHENCE. */
@deftp {Data type} {enum GpgmeDataType} off_t gpgme_data_seek (GpgmeData dh, off_t offset, int whence);
@tindex GpgmeDataType
The @code{GpgmeDataType} type specifies the type of a @code{GpgmeData} object. @deftypefun off_t gpgme_data_seek (@w{GpgmeData @var{dh}}, @w{off_t *@var{offset}}, @w{int @var{whence}})
The following data types are available: The function @code{gpgme_data_seek} changes the current read/write
position.
The @var{whence} argument specifies how the @var{offset} should be
interpreted. It must be one of the following symbolic constants:
@table @code @table @code
@item GPGME_DATA_TYPE_NONE @item SEEK_SET
This specifies that the type is not yet determined. Specifies that @var{whence} is a count of characters from the
beginning of the data object.
@item GPGME_DATA_TYPE_MEM @item SEEK_CUR
This specifies that the data is stored in memory. Specifies that @var{whence} is a count of characters from the current
file position. This count may be positive or negative.
@item GPGME_DATA_TYPE_FD @item SEEK_END
This type is not implemented. Specifies that @var{whence} is a count of characters from the end of
the data object. A negative count specifies a position within the
@item GPGME_DATA_TYPE_FILE current extent of the data object; a positive count specifies a
This type is not implemented. position past the current end. If you set the position past the
current end, and actually write data, you will extend the data object
@item GPGME_DATA_TYPE_CB with zeros up to that position.
This type specifies that the data is provided by a callback function
implemented by the user.
@end table @end table
@end deftp
@deftypefun GpgmeDataType gpgme_data_get_type (@w{GpgmeData @var{dh}}) If successful, the function returns the resulting file position,
The function @code{gpgme_data_get_type} returns the type of the data measured in bytes from the beginning of the data object. You can use
object with the handle @var{dh}. If @var{dh} is not a valid pointer, this feature together with @code{SEEK_CUR} to read the current
@code{GPGME_DATA_TYPE_NONE} is returned. read/write position.
If the function fails, -1 is returned and @var{errno} is set.
@end deftypefun
The following function is deprecated and should not be used. It will
be removed in a future version of @acronym{GPGME}.
@deftypefun GpgmeError gpgme_data_rewind (@w{GpgmeData @var{dh}})
The function @code{gpgme_data_rewind} is equivalent to:
@example
return (gpgme_data_seek (dh, 0, SEEK_SET) == -1)
? mk_error (File_Error) : 0;
@end example
@end deftypefun @end deftypefun
@c @c

View File

@ -1,3 +1,19 @@
2002-12-06 Marcus Brinkmann <marcus@g10code.de>
* data.h (gpgme_data_release_cb): Change return type to void.
(gpgme_data_read_cb): Change return type to ssize_t.
* data.c (gpgme_data_read): Likewise.
* data-stream.c (stream_read): Likewise.
* data-fd.c (fd_read): Likewise.
* data-mem.c (mem_read): Likewise.
(mem_release): Change return type to void.
* data-user.c (user_read): Change return type to ssize_t.
(user_release): Change return type to void.
* data-compat.c (old_user_read): Change return type to ssize_t.
* gpgme.h (GpgmeDataReadCb): Likewise.
(gpgme_data_read): Likewise.
(GpgmeDataSeekCb): Change return type to off_t.
2002-12-04 Marcus Brinkmann <marcus@g10code.de> 2002-12-04 Marcus Brinkmann <marcus@g10code.de>
* gpgme.h: Add prototype for gpgme_get_key. * gpgme.h: Add prototype for gpgme_get_key.

View File

@ -1,22 +1,21 @@
/* data-mem.c - A memory based data object. /* data-compat.c - Compatibility interfaces for data objects.
* Copyright (C) 2002 g10 Code GmbH Copyright (C) 2002 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include <config.h> #include <config.h>
@ -134,7 +133,7 @@ gpgme_error_to_errno (GpgmeError err)
} }
} }
static int static ssize_t
old_user_read (GpgmeData dh, void *buffer, size_t size) old_user_read (GpgmeData dh, void *buffer, size_t size)
{ {
size_t amt; size_t amt;

View File

@ -1,22 +1,21 @@
/* data-fd.c - A file descripor based data object. /* data-fd.c - A file descripor based data object.
* Copyright (C) 2002 g10 Code GmbH Copyright (C) 2002 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include <config.h> #include <config.h>
@ -28,7 +27,7 @@
#include "data.h" #include "data.h"
static int static ssize_t
fd_read (GpgmeData dh, void *buffer, size_t size) fd_read (GpgmeData dh, void *buffer, size_t size)
{ {
return read (dh->data.fd, buffer, size); return read (dh->data.fd, buffer, size);

View File

@ -1,22 +1,21 @@
/* data-mem.c - A memory based data object. /* data-mem.c - A memory based data object.
* Copyright (C) 2002 g10 Code GmbH Copyright (C) 2002 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include <config.h> #include <config.h>
@ -31,7 +30,7 @@
#include "util.h" #include "util.h"
static int static ssize_t
mem_read (GpgmeData dh, void *buffer, size_t size) mem_read (GpgmeData dh, void *buffer, size_t size)
{ {
size_t amt = dh->data.mem.length - dh->data.mem.offset; size_t amt = dh->data.mem.length - dh->data.mem.offset;
@ -141,7 +140,7 @@ mem_seek (GpgmeData dh, off_t offset, int whence)
} }
static int static void
mem_release (GpgmeData dh) mem_release (GpgmeData dh)
{ {
if (dh->data.mem.buffer) if (dh->data.mem.buffer)

View File

@ -1,22 +1,21 @@
/* data-stream.c - A memory based data object. /* data-stream.c - A stream based data object.
* Copyright (C) 2002 g10 Code GmbH Copyright (C) 2002 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include <config.h> #include <config.h>
@ -28,7 +27,7 @@
#include "data.h" #include "data.h"
static int static ssize_t
stream_read (GpgmeData dh, void *buffer, size_t size) stream_read (GpgmeData dh, void *buffer, size_t size)
{ {
size_t amt = fread (buffer, 1, size, dh->data.stream); size_t amt = fread (buffer, 1, size, dh->data.stream);

View File

@ -1,22 +1,21 @@
/* data-user.c - A user callback based data object. /* data-user.c - A user callback based data object.
* Copyright (C) 2002 g10 Code GmbH Copyright (C) 2002 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include <config.h> #include <config.h>
@ -27,7 +26,7 @@
#include "data.h" #include "data.h"
static int static ssize_t
user_read (GpgmeData dh, void *buffer, size_t size) user_read (GpgmeData dh, void *buffer, size_t size)
{ {
return (*dh->data.user.cbs->read) (dh->data.user.handle, buffer, size); return (*dh->data.user.cbs->read) (dh->data.user.handle, buffer, size);
@ -48,7 +47,7 @@ user_seek (GpgmeData dh, off_t offset, int whence)
} }
static int static void
user_release (GpgmeData dh) user_release (GpgmeData dh)
{ {
(*dh->data.user.cbs->release) (dh->data.user.handle); (*dh->data.user.cbs->release) (dh->data.user.handle);

View File

@ -63,7 +63,7 @@ _gpgme_data_release (GpgmeData dh)
/* Read up to SIZE bytes into buffer BUFFER from the data object with /* 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 the handle DH. Return the number of characters read, 0 on EOF and
-1 on error. If an error occurs, errno is set. */ -1 on error. If an error occurs, errno is set. */
int ssize_t
gpgme_data_read (GpgmeData dh, void *buffer, size_t size) gpgme_data_read (GpgmeData dh, void *buffer, size_t size)
{ {
if (!dh) if (!dh)

View File

@ -1,22 +1,21 @@
/* data.h - Internal data object abstraction interface. /* data.h - Internal data object abstraction interface.
* Copyright (C) 2002 g10 Code GmbH Copyright (C) 2002 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#ifndef DATA_H #ifndef DATA_H
#define DATA_H #define DATA_H
@ -34,7 +33,8 @@
/* Read up to SIZE bytes into buffer BUFFER from the data object with /* 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 the handle DH. Return the number of characters read, 0 on EOF and
-1 on error. If an error occurs, errno is set. */ -1 on error. If an error occurs, errno is set. */
typedef int (*gpgme_data_read_cb) (GpgmeData dh, void *buffer, size_t size); typedef ssize_t (*gpgme_data_read_cb) (GpgmeData dh, void *buffer,
size_t size);
/* Write up to SIZE bytes from buffer BUFFER to the data object with /* 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 the handle DH. Return the number of characters written, or -1 on
@ -48,7 +48,7 @@ typedef ssize_t (*gpgme_data_write_cb) (GpgmeData dh, const void *buffer,
typedef off_t (*gpgme_data_seek_cb) (GpgmeData dh, off_t offset, int whence); typedef off_t (*gpgme_data_seek_cb) (GpgmeData dh, off_t offset, int whence);
/* Release the data object with the handle DH. */ /* Release the data object with the handle DH. */
typedef int (*gpgme_data_release_cb) (GpgmeData dh); typedef void (*gpgme_data_release_cb) (GpgmeData dh);
struct gpgme_data_cbs struct gpgme_data_cbs
{ {

View File

@ -511,7 +511,7 @@ GpgmeError gpgme_recipients_enum_close (const GpgmeRecipients rset,
/* Read up to SIZE bytes into buffer BUFFER from the data object with /* Read up to SIZE bytes into buffer BUFFER from the data object with
the handle HANDLE. Return the number of characters read, 0 on EOF the handle HANDLE. Return the number of characters read, 0 on EOF
and -1 on error. If an error occurs, errno is set. */ and -1 on error. If an error occurs, errno is set. */
typedef int (*GpgmeDataReadCb) (void *handle, void *buffer, size_t size); typedef ssize_t (*GpgmeDataReadCb) (void *handle, void *buffer, size_t size);
/* Write up to SIZE bytes from buffer BUFFER to the data object with /* Write up to SIZE bytes from buffer BUFFER to the data object with
the handle HANDLE. Return the number of characters written, or -1 the handle HANDLE. Return the number of characters written, or -1
@ -522,7 +522,7 @@ typedef ssize_t (*GpgmeDataWriteCb) (void *handle, const void *buffer,
/* Set the current position from where the next read or write starts /* Set the current position from where the next read or write starts
in the data object with the handle HANDLE to OFFSET, relativ to in the data object with the handle HANDLE to OFFSET, relativ to
WHENCE. */ WHENCE. */
typedef int (*GpgmeDataSeekCb) (void *handle, off_t offset, int whence); typedef off_t (*GpgmeDataSeekCb) (void *handle, off_t offset, int whence);
/* Close the data object with the handle DL. */ /* Close the data object with the handle DL. */
typedef void (*GpgmeDataReleaseCb) (void *handle); typedef void (*GpgmeDataReleaseCb) (void *handle);
@ -538,7 +538,7 @@ struct GpgmeDataCbs
/* Read up to SIZE bytes into buffer BUFFER from the data object with /* 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 the handle DH. Return the number of characters read, 0 on EOF and
-1 on error. If an error occurs, errno is set. */ -1 on error. If an error occurs, errno is set. */
int gpgme_data_read (GpgmeData dh, void *buffer, size_t size); ssize_t gpgme_data_read (GpgmeData dh, void *buffer, size_t size);
/* Write up to SIZE bytes from buffer BUFFER to the data object with /* 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 the handle DH. Return the number of characters written, or -1 on