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