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#ifndef IMG_UTILS_FILE_INPUT_H 18e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#define IMG_UTILS_FILE_INPUT_H 19e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 20e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/Input.h> 21e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 22e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <cutils/compiler.h> 23e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/Errors.h> 24e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/String8.h> 25e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <stdio.h> 26e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <stdint.h> 27e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 28e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace android { 29e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace img_utils { 30e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 31e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk/** 32e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Utility class for reading from a file. 33e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 34e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkclass ANDROID_API FileInput : public Input { 35e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk public: 36e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk /** 37e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Create a file input for the given path. 38e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 39a0b40ae71d251a40161881780bc317c025d7678fChih-Hung Hsieh explicit FileInput(String8 path); 40e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 41e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk virtual ~FileInput(); 42e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 43e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk /** 44e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Open a file descriptor to the path given in the constructor. 45e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 46e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Returns OK on success, or a negative error code. 47e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 48e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk virtual status_t open(); 49e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 50e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk /** 51e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Read bytes from the file into the given buffer. At most, the number 52e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * of bytes given in the count argument will be read. Bytes will be written 53e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * into the given buffer starting at the index given in the offset argument. 54e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 554510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk * Returns the number of bytes read, or NOT_ENOUGH_DATA if at the end of the file. If an 564510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk * error has occurred, this will return a negative error code other than NOT_ENOUGH_DATA. 57e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 584510de26e5361f3a9f07057ec6f26483c888c1faRuben Brunk virtual ssize_t read(uint8_t* buf, size_t offset, size_t count); 59e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 60e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk /** 61e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Close the file descriptor to the path given in the constructor. 62e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 63e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Returns OK on success, or a negative error code. 64e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 65e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk virtual status_t close(); 66e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk private: 67e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk FILE *mFp; 68e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk String8 mPath; 69e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk bool mOpen; 70e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk}; 71e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 72e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace img_utils*/ 73e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace android*/ 74e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 75e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 76e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#endif /*IMG_UTILS_INPUT_H*/ 77