110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_fileio.h 310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Reading from / writing to files 410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors 610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING 710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon 910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie 1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef OP_FILEIO_H 1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_FILEIO_H 1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus 1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectextern "C" { 1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif 1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_types.h" 2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <stdio.h> 2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_try_open_file - open a file 2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param name file name 2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param mode mode string 2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Open a file name. 2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns file handle or %NULL on failure. 3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source ProjectFILE * op_try_open_file(char const * name, char const * mode); 3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_open_file - open a file 3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param name file name 3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param mode mode string 3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Open a file name. 3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Failure to open is fatal. 4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source ProjectFILE * op_open_file(char const * name, char const * mode); 4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_read_int_from_file - parse an ASCII value from a file into an integer 4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param filename name of file to parse integer value from 4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fatal non-zero if any error must be fatal 4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Reads an ASCII integer from the given file. If an error occur and fatal is 4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * zero (u32)-1 is returned else the value read in is returned. 5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectu32 op_read_int_from_file(char const * filename, int fatal); 5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_close_file - close a file 5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fp file pointer 5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Closes a file pointer. A non-fatal 5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * error message is produced if the 5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * close fails. 6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_close_file(FILE * fp); 6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_write_file - write to a file 6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fp file pointer 6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param buf buffer 6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param size nr. of bytes to write 6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Write size bytes of buffer buf to a file. 7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Failure is fatal. 7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_file(FILE * fp, void const * buf, size_t size); 7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_write_u32 - write four bytes to a file 7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fp file pointer 7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param val value to write 7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Write an unsigned four-byte value val to a file. 8010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Failure is fatal. 8110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 8210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * No byte-swapping is done. 8310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 8410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_u32(FILE * fp, u32 val); 8510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 8610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 8710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_write_u64 - write eight bytes to a file 8810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fp file pointer 8910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param val value to write 9010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 9110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Write an unsigned eight-byte value val to a file. 9210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Failure is fatal. 9310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 9410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * No byte-swapping is done. 9510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 9610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_u64(FILE * fp, u64 val); 9710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 9810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 9910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_write_u8 - write a byte to a file 10010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fp file pointer 10110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param val value to write 10210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 10310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Write an unsigned byte value val to a file. 10410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Failure is fatal. 10510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 10610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectvoid op_write_u8(FILE * fp, u8 val); 10710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 10810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 10910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_get_line - read an ASCII line from a file 11010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param fp file pointer 11110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 11210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Get a line of ASCII text from a file. The file is read 11310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * up to the first '\0' or '\n'. A trailing '\n' is deleted. 11410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 11510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns the dynamically-allocated string containing 11610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * that line. At the end of a file NULL will be returned. 11710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * be returned. 11810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 11910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * The string returned must be free()d by the caller. 12010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 12110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * getline() is not a proper solution to replace this function 12210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 12310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectchar * op_get_line(FILE * fp); 12410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 12510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** 12610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * calc_crc32 12710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param crc current value 12810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param buf pointer to buffer 12910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param len 13010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * 13110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Returns current crc computed from the crc argument and the 13210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * characters in len characters in buf. 13310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */ 13410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectunsigned long calc_crc32(unsigned long crc, unsigned char * buf, size_t len); 13510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 13610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus 13710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} 13810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif 13910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project 14010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* OP_FILEIO_H */ 141