2004-09-23 Marcus Brinkmann <marcus@g10code.de>
* data-stream.c (stream_seek): Call ftello and return the current offset. * data.h (struct gpgme_data): Change type of data.mem.offset to off_t. * data.c (gpgme_data_seek): Check dh->cbs->seek callback, not read callback. If SEEK_CUR, adjust the offset by the pending buffer size. Clear pending buffer on success.
This commit is contained in:
parent
497b0f8bd8
commit
4b8e1217fc
@ -1,3 +1,13 @@
|
|||||||
|
2004-09-23 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
|
* data-stream.c (stream_seek): Call ftello and return the current
|
||||||
|
offset.
|
||||||
|
* data.h (struct gpgme_data): Change type of data.mem.offset to
|
||||||
|
off_t.
|
||||||
|
* data.c (gpgme_data_seek): Check dh->cbs->seek callback, not read
|
||||||
|
callback. If SEEK_CUR, adjust the offset by the pending buffer
|
||||||
|
size. Clear pending buffer on success.
|
||||||
|
|
||||||
2004-09-14 Marcus Brinkmann <marcus@g10code.de>
|
2004-09-14 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
* gpgme.m4: Add copyright notice.
|
* gpgme.m4: Add copyright notice.
|
||||||
|
@ -50,12 +50,19 @@ stream_write (gpgme_data_t dh, const void *buffer, size_t size)
|
|||||||
static off_t
|
static off_t
|
||||||
stream_seek (gpgme_data_t dh, off_t offset, int whence)
|
stream_seek (gpgme_data_t dh, off_t offset, int whence)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
#ifdef HAVE_FSEEKO
|
#ifdef HAVE_FSEEKO
|
||||||
return fseeko (dh->data.stream, offset, whence);
|
err = fseeko (dh->data.stream, offset, whence);
|
||||||
#else
|
#else
|
||||||
/* FIXME: Check for overflow, or at least bail at compilation. */
|
/* FIXME: Check for overflow, or at least bail at compilation. */
|
||||||
return fseek (dh->data.stream, offset, whence);
|
err = fseek (dh->data.stream, offset, whence);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return ftello (dh->data.stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
14
gpgme/data.c
14
gpgme/data.c
@ -112,12 +112,22 @@ gpgme_data_seek (gpgme_data_t dh, off_t offset, int whence)
|
|||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!dh->cbs->read)
|
if (!dh->cbs->seek)
|
||||||
{
|
{
|
||||||
errno = EOPNOTSUPP;
|
errno = EOPNOTSUPP;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return (*dh->cbs->seek) (dh, offset, whence);
|
|
||||||
|
/* 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ struct gpgme_data
|
|||||||
/* Allocated size of BUFFER. */
|
/* Allocated size of BUFFER. */
|
||||||
size_t size;
|
size_t size;
|
||||||
size_t length;
|
size_t length;
|
||||||
size_t offset;
|
off_t offset;
|
||||||
} mem;
|
} mem;
|
||||||
|
|
||||||
/* For gpgme_data_new_from_read_cb. */
|
/* For gpgme_data_new_from_read_cb. */
|
||||||
|
Loading…
Reference in New Issue
Block a user