static gint probe_buffer_fseek (VFSFile * file, gint64 offset, gint whence)
{
    ProbeBuffer * p = file->handle;

    if (whence == SEEK_END)
    {
        if (p->seek_warned != p->decoder)
        {
            fprintf (stderr, "%s tried to seek to end of file while probing "
             "%s.\n", p->decoder, p->filename);
            p->seek_warned = p->decoder;
        }

        return -1;
    }

    if (whence == SEEK_CUR)
        offset += p->at;

    g_return_val_if_fail (offset >= 0, -1);
    increase_buffer (p, offset);

    if (offset > p->filled)
        return -1;

    p->at = offset;
    return 0;
}
Beispiel #2
0
static int64_t probe_buffer_fread (void * buffer, int64_t size, int64_t count,
 VFSFile * file)
{
    ProbeBuffer * p = vfs_get_handle (file);

    increase_buffer (p, p->at + size * count);
    int readed = (size > 0) ? MIN (count, (p->filled - p->at) / size) : 0;
    memcpy (buffer, p->buffer + p->at, size * readed);

    p->at += size * readed;
    return readed;
}
static gint64 probe_buffer_fread (void * buffer, gint64 size, gint64 count,
 VFSFile * file)
{
    ProbeBuffer * p = file->handle;

    increase_buffer (p, p->at + size * count);
    gint readed = (size > 0) ? MIN (count, (p->filled - p->at) / size) : 0;
    memcpy (buffer, p->buffer + p->at, size * readed);

    p->at += size * readed;
    return readed;
}
Beispiel #4
0
static int probe_buffer_fseek (VFSFile * file, int64_t offset, int whence)
{
    ProbeBuffer * p = vfs_get_handle (file);

    if (whence == SEEK_END)
        return -1;

    if (whence == SEEK_CUR)
        offset += p->at;

    g_return_val_if_fail (offset >= 0, -1);
    increase_buffer (p, offset);

    if (offset > p->filled)
        return -1;

    p->at = offset;
    return 0;
}