Exemple #1
0
static ya_result
buffer_input_stream_skip(input_stream* stream, u32 len)
{
    ya_result ret;
    
    buffer_input_stream_data* data = (buffer_input_stream_data*)stream->data;
    u32 remaining = data->buffer_size - data->buffer_offset;

    if(len <= remaining)
    {
        data->buffer_offset += len;
        return len;
    }

    len -= remaining;

    data->buffer_offset = data->buffer_size;

    if(FAIL(ret = input_stream_skip(&data->filtered, len)))
    {
        // 'remaining' bytes may have been skipped already, if so, return that before the error
        
        return (remaining > 0)?remaining:ret;
    }

    return remaining + ret;
}
static ya_result
buffer_skip(input_stream* stream, u32 len)
{
    ya_result return_code;
    u32 total_len = len;
    
    buffer_input_stream_data* data = (buffer_input_stream_data*)stream->data;
    u32 remaining = data->buffer_size - data->buffer_offset;

    if(remaining > len)
    {
        data->buffer_offset += len;
        return len;
    }

    len -= remaining;

    data->buffer_offset = data->buffer_size;

    if(FAIL(return_code = input_stream_skip(&data->filtered, len)))
    {
        return return_code;
    }

    return total_len;
}