12e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala/* 22e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Copyright 2012, The Android Open Source Project 32e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * 42e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 52e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * you may not use this file except in compliance with the License. 62e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * You may obtain a copy of the License at 72e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * 82e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 92e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * 102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * See the License for the specific language governing permissions and 142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * limitations under the License. 152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala */ 162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 174bb8118816874c696d9f1adab48490df1da365f7Eino-Ville Talvala#include <sys/stat.h> 182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <stdlib.h> 190b88a62d4d5ac1e515721e587cdf9bcec191812bIgor Murashkin 202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include "bcinfo/Wrap/in_memory_wrapper_input.h" 21da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 22da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville TalvalaInMemoryWrapperInput::InMemoryWrapperInput(const char* buffer, size_t size) : 23af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin _buffer(buffer), _pos(0), _size(size) { 24af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin} 25da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville TalvalaInMemoryWrapperInput::~InMemoryWrapperInput() { 272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 28b075252349a4b40ddda791f2e1221ae0ce7e4cd1Eino-Ville Talvala 292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalasize_t InMemoryWrapperInput::Read(uint8_t* buffer, size_t wanted) { 302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t found = 0; 312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 32cd8fce8fbe0f515e53a0ea0f50b739cf42ee57a4Yin-Chia Yeh if (!buffer) { 33d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala return 0; 340cbfbf3624c67cf40a18d5405a46d002aa12a048Zhijun He } 350cbfbf3624c67cf40a18d5405a46d002aa12a048Zhijun He 362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala while (found < wanted) { 372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (_pos >= _size) { 382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return found; 392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala buffer[found++] = _buffer[_pos++]; 412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return found; 432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalabool InMemoryWrapperInput::AtEof() { 462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return (_pos >= _size); 472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaoff_t InMemoryWrapperInput::Size() { 50cd8fce8fbe0f515e53a0ea0f50b739cf42ee57a4Yin-Chia Yeh return _size; 512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalabool InMemoryWrapperInput::Seek(uint32_t pos) { 542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (pos < _size) { 552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala _pos = pos; 562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return true; 572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { 58cd8fce8fbe0f515e53a0ea0f50b739cf42ee57a4Yin-Chia Yeh return false; 592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala