1e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk/*
2e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Copyright 2014 The Android Open Source Project
3e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk *
4e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License");
5e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * you may not use this file except in compliance with the License.
6e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * You may obtain a copy of the License at
7e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk *
8e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk *      http://www.apache.org/licenses/LICENSE-2.0
9e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk *
10e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Unless required by applicable law or agreed to in writing, software
11e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS,
12e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * See the License for the specific language governing permissions and
14e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * limitations under the License.
15e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */
16e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk
17e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/Input.h>
18e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk
19e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace android {
20e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace img_utils {
21e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk
22e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben BrunkInput::~Input() {}
234510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk
24e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkstatus_t Input::open() { return OK; }
254510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk
26e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkstatus_t Input::close() { return OK; }
27e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk
284510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunkssize_t Input::skip(size_t count) {
294510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk    const size_t SKIP_BUF_SIZE = 1024;
304510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk    uint8_t skipBuf[SKIP_BUF_SIZE];
314510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk
324510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk    size_t remaining = count;
334510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk    while (remaining > 0) {
344510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk        size_t amt = (SKIP_BUF_SIZE > remaining) ? remaining : SKIP_BUF_SIZE;
354510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk        ssize_t ret = read(skipBuf, 0, amt);
364510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk        if (ret < 0) {
374510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk            if(ret == NOT_ENOUGH_DATA) {
384510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                // End of file encountered
394510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                if (remaining == count) {
404510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                    // Read no bytes, return EOF
414510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                    return NOT_ENOUGH_DATA;
424510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                } else {
434510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                    // Return num bytes read
444510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                    return count - remaining;
454510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk                }
464510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk            }
474510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk            // Return error code.
484510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk            return ret;
494510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk        }
504510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk        remaining -= ret;
514510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk    }
524510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk    return count;
534510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk}
54e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk
55e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace img_utils*/
56e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace android*/
57e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk
58