static fpos_t memstream_seek(void *cookie, fpos_t offset, int whence) {
    struct memstream *ms = (struct memstream *)cookie;
    fpos_t pos = 0;
    memstream_check(ms);
    memstream_info(("memstream_seek %p %i %i\n", ms, (int)offset, whence));
    switch (whence) {
    case SEEK_SET:
        pos = offset;
        break;
    case SEEK_CUR:
        pos = ms->position + offset;
        break;
    case SEEK_END:
        pos = ms->size + offset;
        break;
    default:
        errno = EINVAL;
        return -1;
    }
    if (pos >= ms->capacity)
        memstream_grow(ms, pos);
    ms->position = pos;
    if (ms->size < ms->position)
        *ms->sizeloc = ms->size = ms->position;
    memstream_print(ms);
    memstream_info(("=> %i\n", (int)pos));
    assert(ms->size < ms->capacity && ms->contents[ms->size] == 0);
    return pos;
}
Exemple #2
0
static int memstream_write(void *cookie, const char *buf, int count)
{
    struct memstream *ms= (struct memstream *)cookie;			memstream_check(ms);
    if (ms->capacity <= ms->position + count)
	if (memstream_grow(ms, ms->position + count) < 0)		/* errno == ENOMEM */
	    return -1;
    memcpy(ms->contents + ms->position, buf, count);			memstream_info(("memstream_write %p %i\n", ms, count));
    ms->position += count;
    if (ms->size < ms->position) *ms->sizeloc= ms->size= ms->position;	memstream_print(ms);
									assert(ms->size < ms->capacity);
									assert(ms->contents[ms->size] == 0);
    return count;
}
static int memstream_write(void *cookie, const char *buf, int len) {
	struct memstream *ms;
	int tocopy;

	ms = cookie;
	memstream_grow(ms, ms->offset + len);
	tocopy = *ms->lenp - ms->offset;
	if(len < tocopy)
		tocopy = len;
	memcpy(*ms->cp + ms->offset, buf, tocopy);
	ms->offset += tocopy;
#ifdef DEBUG
	fprintf(stderr, "MS: write(%p, %d) = %d\n", ms, len, tocopy);
#endif
	return (tocopy);
}
Exemple #4
0
  static int memstream_read(void *cookie, char *buf, int len)
  {
    struct memstream *ms;
    int tocopy;

    ms = cookie;
    memstream_grow(ms, ms->offset + len);
    tocopy = *ms->lenp - ms->offset;
    if (len < tocopy)
      tocopy = len;
    memcpy(buf, *ms->cp + ms->offset, tocopy);
    ms->offset += tocopy;
#ifdef MEMSTREAM_DEBUG
    fprintf(stderr, "MS: read(%p, %d) = %d\n", ms, len, tocopy);
#endif
    return (tocopy);
  }
Exemple #5
0
static int
memstream_write(void *cookie, const char *buf, int len)
{
	struct memstream *ms;
	ssize_t tocopy;

	ms = cookie;
	if (!memstream_grow(ms, ms->offset + len))
		return (-1);
	tocopy = ms->len - ms->offset;
	if (len < tocopy)
		tocopy = len;
	memcpy(*ms->bufp + ms->offset, buf, tocopy);
	ms->offset += tocopy;
	memstream_update(ms);
#ifdef DEBUG
	fprintf(stderr, "MS: write(%p, %d) = %zd\n", ms, len, tocopy);
#endif
	return (tocopy);
}